
Apple Ads
io.github.HappygalloPublished by GitHub account Happygallov1.0.3Updated Oct 24, 2026
Manage Apple Search Ads campaigns, keywords, budgets, and reports via API v5.
Overview
Local MCP server for the Apple Search Ads API v5 that lets an assistant manage campaigns, keywords, budgets and reports in natural language.
- What you can do
- List, create, update and delete campaigns and ad groups, and pull campaign and ad group reports
- Add, update and remove targeting and negative keywords, change bids, and read keyword reports
- Inspect search terms, ads, creatives and product pages, including ad rejection reasons
- Create and manage budget orders, analyze budget utilization, and take campaign snapshots
- Search eligible apps and geolocations, get geo performance, and build impression share reports
- Switch between organizations and read built-in resources and workflow prompts
- When to use it
- Useful when you run Apple Search Ads and want an assistant to review performance, adjust budgets and bids, or optimize keywords and search terms without using the web console. Best for account owners or API users who already have Apple Search Ads credentials.
- Requirements
- Runs locally via npx (Node.js) over stdio. Needs an Apple Search Ads API user and four environment variables: ASA_CLIENT_ID, ASA_TEAM_ID, ASA_KEY_ID and ASA_PRIVATE_KEY_PATH (or an inline ASA_PRIVATE_KEY). ASA_ORG_ID is optional. A PKCS#8 key pair must be generated and the public key uploaded to Apple.
Installation
In SourceWeft
- Open Apple Ads in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Apple Ads MCP
[npm version] [MCP compatible] [TypeScript] [License]
MCP server for the Apple Search Ads API v5.
Connect it to any MCP-compatible AI client and manage your campaigns, keywords, budgets, and reporting through natural language.
Quick Start • Tools • Resources • Prompts • Clients
Ask your AI things like:
"How did my campaigns perform last week?" "Pause the brand campaign and increase the budget on discovery to $500." "What search terms are triggering my ads? Add the best ones as exact-match keywords."
Supports 54 tools, 3 resources, and 6 prompts — campaigns, ad groups, keywords, creatives, budgets, search terms, geo targeting, impression share, and performance reports.
Features at a glance
Quick Start
- Get your Apple credentials (~10 min, one-time)
- Generate your key pair (2 commands)
- Add to your MCP client
- Start chatting
Setup
Step 1 — Invite an API user
Done by the account admin at searchads.apple.com.
- Go to Settings → User Management → Invite User
- Enter the email of the person who will use the API
- Set the role:
- API Account Manager — full read/write access
- API Account Read Only — view-only access
- Send the invitation
The API user must be a different Apple ID from the admin. If you're the admin, use a second Apple ID.
Step 2 — Accept and copy your credentials
Done by the invited user.
- Accept the email invitation and sign in to searchads.apple.com
- Go to Settings → API tab
- Copy and save these three values:
- clientId — starts with
SEARCHADS. - teamId — starts with
SEARCHADS. - keyId — a UUID
- clientId — starts with
Step 3 — Generate your key pair
Open Terminal and run:
Then generate the public key:
This creates:
~/apple-ads-key-pkcs8.pem— private key (keep this safe, used in your config)~/apple-ads-key-public.pem— public key (upload to Apple next)
Step 4 — Upload public key to Apple
Print your public key:
Copy the entire output (including the BEGIN / END lines), then:
- Go to Settings → API tab on searchads.apple.com
- Paste into the Public Key field
- Save
Step 5 — Add to your MCP client
Pick your client below and fill in your clientId, teamId, and keyId from Step 2, and the full path to your private key from Step 3.
Multiple orgs? Omit
ASA_ORG_IDand uselist_organizations/switch_organizationat runtime. Or set it inenvto pick a default.
Clients
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
Restart Claude Desktop after saving.
Claude Code
Cursor
Add to .cursor/mcp.json:
VS Code
Add to your settings.json:
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
Other MCP clients
This server uses STDIO transport. Any MCP-compatible client can connect by running:
Set these environment variables:
Inline key (no file)
Replace ASA_PRIVATE_KEY_PATH with ASA_PRIVATE_KEY and paste the PEM content with \n for line breaks:
Tools
All 54 tools
Resources
The server exposes 3 resources:
Prompts
6 built-in workflow prompts to guide common tasks:
Troubleshooting
"pkcs8 must be PKCS#8 formatted string" Your key is in the wrong format. Re-run the
openssl pkcs8command from Step 3.
"No organization selected" Use
list_organizationsthenswitch_organization, or addASA_ORG_IDto your config.
"Token request failed (401)" Verify your clientId, teamId, and keyId match Apple's API tab. Check that you uploaded your public key.
"Failed to read private key" Use an absolute path (e.g.
/Users/yourname/...), not~/....
Server disconnects immediately A required credential is missing. You need all four:
ASA_CLIENT_ID,ASA_TEAM_ID,ASA_KEY_ID, andASA_PRIVATE_KEY_PATH.
License
MIT
Source: README.md at commit 7f73700
Tools
0Version history
1- v1.0.3LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts