apple-ads-mcp
Provides tools for interacting with the Apple Ads Platform API, enabling management of App Store and Apple Maps ad campaigns, reports, keywords, budgets, recommendations, accounts, and read/write operations.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@apple-ads-mcpshow me last week's Apple Ads campaign performance report"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
apple-ads-mcp
Local MCP server for the Apple Ads Platform API
(https://api.ads.apple.com/v1). This API replaces Search Ads API v5, which is reported to shut down on 2027-01-26.
It covers App Store and Apple Maps campaigns, reports, keywords, budgets and recommendations.
Tools
Tool | What it does |
| Keyword search over the offline docs: 99 endpoints, ~410 objects, ~160 enum types, guides |
| One doc page as markdown: body schema, allowed values, constraints, example payloads |
| Checks credentials, lists visible ad accounts and roles ( |
| GET, plus POST to |
| POST/PUT/DELETE that change live campaigns. Not registered when |
apple_ads_read options: allPages follows pagination and merges pages (capped by maxPages, default 50). outputFile writes
the full JSON to an absolute path and returns only a summary. A response over 60k chars is saved to
$TMPDIR/apple-ads-mcp/ automatically. Reason: Claude Code caps MCP output at 25k tokens by default, and the call should
still succeed when a report is big.
Related MCP server: Apple Ads MCP
Setup
API user. An Apple Ads account admin invites an Apple Account with an API role (ads.apple.com > Account Settings > User Management > Invite Users). Accept the invite and sign in as that user.
Key pair. Run
npm run keygen. It writes~/.appleads/private-key.pem(mode 600) and prints the public key.Upload. Paste the public key into ads.apple.com > Account Settings > API. Apple then shows
clientId,teamIdandkeyId.Credentials. Pick one:
1Password (preferred, same as bluesky-mcp). Store the three IDs and the PEM contents in item
apple-ads-apiin the my-vault vault (the only vault the launcher's service account can read), copy.env.op.exampleto.env.op, fix theop://references, then delete the key file.bin/apple-ads-mcpsees.env.opand starts the server underop run. Nothing secret ends up in~/.claude.json.Key file. Keep
~/.appleads/private-key.pemand put the IDs in the registration:claude mcp add --scope user apple-ads -e APPLE_ADS_CLIENT_ID=... -e APPLE_ADS_TEAM_ID=... -e APPLE_ADS_KEY_ID=... -- ~/Projects/tools/apple-ads-mcp/bin/apple-ads-mcp
Verify. Run
node scripts/probe.mjs. Theaccountssection should list your ad accounts.
Optional env: APPLE_ADS_AD_ACCOUNT_ID pins the account for X-AP-Context. When unset, the server uses the only
visible account and errors out if there are several, because a guess could send writes to the wrong account.
APPLE_ADS_PRIVATE_KEY_PATH overrides the key file location.
Design notes
Few generic tools and an offline catalog, not one tool per endpoint. 99 tool schemas would cost context in every session, ads or not. Search, doc and a raw call cover the same surface, and a new endpoint only needs a catalog rebuild. Community v5 servers built the per-endpoint way ended up with 54 to 74 tools.
Read and write are separate tools so a client can allow-list reads while writes still prompt. The API runs every query as a POST, so the HTTP method alone can't decide; see
isReadOnlyinlib/catalog.js.apple_ads_writealso accepts paths missing from the catalog, because Apple can ship an endpoint before the catalog is rebuilt.apple_ads_readnever does.The catalog comes from crawling the docs, since Apple publishes no OpenAPI spec. Its generated clients (
apple/apple-ads-platform-api-*) are built from a spec that isn't in any of those repos (checked 2026-09-19). The catalog is committed so the server starts offline. Rebuild it withnpm run build-catalogwhen Apple bumps the API: their clients track the version inspec.version, which was 109 on 2026-08-14.OAuth is hand-rolled; Apple's
@apple/apple-ads-platformisn't used. This server doesn't need its typed methods. The library also pulls in axios and friends, and its default logger writes to stdout, which is the MCP channel. The whole flow is one ES256 signature plus one form POST (lib/auth.js). A fresh client secret is minted per token request, so no long-lived secret exists besides the key itself.Rate limits follow Apple's guidance: pace on
RateLimit-Remaining, honorRetry-Afteron 429, and double the backoff up to 16 s (lib/client.js).
Status
Built 2026-09-19, before any live credentials existed. The unit tests, the stdio probe and the docs tools are
verified. The token request was checked against Apple's real endpoint with a dummy key (Apple parsed it and answered
invalid_client). Nothing has run against a real ad account yet. The first real use may turn up response shapes the
pagination merge doesn't expect. fetchAllPages falls back to returning the raw page when that happens.
Development
npm test # unit tests (node --test)
node scripts/probe.mjs # end-to-end over stdio
npm run build-catalog # re-crawl developer.apple.com into catalog.jsonFirst run: build the docs catalog
catalog.json (Apple's crawled documentation) is not in this repo, because the text is Apple's.
Run npm install && npm run build-catalog once; the server then searches it offline.
The launcher reads the 1Password service-account token from the macOS keychain item named by
OP_TOKEN_KEYCHAIN_SERVICE (default op-service-account-token), or from OP_SERVICE_ACCOUNT_TOKEN if set.
This server cannot be deployed
Maintenance
Related MCP Connectors
Manage Apple Ads campaigns and reporting in chat.
Analyze and manage Apple Ads from your AI assistant with RevenueCat insights and safety controls.
Query marketing data across 20+ ad platforms; with write access, create, schedule and share reports.
Google Ads analysis and operations — read performance, manage keywords, bids, and campaigns.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server for the Apple Ads Platform API that exposes 99 operations across all resources through four token-efficient tools. It enables AI agents to read and write campaigns, ad groups, keywords, creatives, budgets, reports, and more.185 npm2MIT
- AlicenseNot gradedqualityAmaintenanceProvides MCP clients typed tools for Apple Ads Platform research, reporting, auditing, and receipt-gated campaign management with a local-first, read-only-by-default safety model.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables read-only analysis of Apple Ads Platform data, allowing AI assistants to query campaign structure, keywords, search terms, and performance reports without modifying anything.MIT
- AlicenseAqualityBmaintenanceEnables LLMs and AI agents to query Google Ads accounts and reporting data through the Google Ads API, including customer lookups, resource metadata inspection, and reference material on metrics, segments, and release notes. Tools and resources can be selectively enabled and namespaced via a configuration file, with authentication handled through Application Default Credentials or an OAuth proxy.3Apache 2.0