Apple Ads — MCP server for Claude Code: App Store campaigns in chat
Pulls Apple Ads campaigns and performance into your MCP client. Writes are drafted first and applied only after you confirm.
claude mcp add apple-ads -e APPLE_ADS_CLIENT_ID=<APPLE_ADS_CLIENT_ID> -e APPLE_ADS_TEAM_ID=<APPLE_ADS_TEAM_ID> -e APPLE_ADS_KEY_ID=<APPLE_ADS_KEY_ID> -e APPLE_ADS_PRIVATE_KEY=<APPLE_ADS_PRIVATE_KEY> -e APPLE_ADS_AD_ACCOUNT_IDS=<APPLE_ADS_AD_ACCOUNT_IDS> -- npx -y @getmcpads/apple-ads-mcp-serverWhat Apple Ads does
The server talks to Apple Ads Platform API v1 over OAuth 2 client credentials. You get 9 read tools and 11 write tools, the latter switched off unless asked for. Requests go straight to Apple, no gateway in between.
Signing happens locally: an EC P-256 key is loaded from the environment at startup and held in memory. The runtime requirement is Node.js 22.23.4, 24.22.1 or 26.12.1 or newer; an older one triggers a stderr warning. Set APPLE_ADS_AD_ACCOUNT_IDS with 1 to 200 account IDs, because every call is scoped to that allowlist. Without the key material and a valid account list the server returns nothing useful.
Writes always surface as a preview, updates are bound to a snapshot, and created entities start paused. apple_ads_list_ad_accounts replaces hosted account selection and returns only what you configured. Check that list before flipping APPLE_ADS_ENABLE_WRITES to true.
What it helps with
- see App Store campaigns and metrics without opening the web UI
- draft a bid change and inspect the preview before it lands
- create a campaign or ad group in paused state
- restrict agent access to a named set of ad accounts
- check which ad accounts this connection can reach
Example prompts for the agent
- Show the campaigns in my account and their spend for last week
- Draft a lower bid on this ad group and show the preview without applying it
- List the ad accounts you have access to
How to install Apple Ads
Platform CLI
claude mcp add apple-ads -e APPLE_ADS_CLIENT_ID=<APPLE_ADS_CLIENT_ID> -e APPLE_ADS_TEAM_ID=<APPLE_ADS_TEAM_ID> -e APPLE_ADS_KEY_ID=<APPLE_ADS_KEY_ID> -e APPLE_ADS_PRIVATE_KEY=<APPLE_ADS_PRIVATE_KEY> -e APPLE_ADS_AD_ACCOUNT_IDS=<APPLE_ADS_AD_ACCOUNT_IDS> -- npx -y @getmcpads/apple-ads-mcp-serverReplace <…> with your own values. 2 more environment variables are in the server README
Platform CLI
codex mcp add get-mcp-ads-apple-ads --env APPLE_ADS_CLIENT_ID=<APPLE_ADS_CLIENT_ID> --env APPLE_ADS_TEAM_ID=<APPLE_ADS_TEAM_ID> --env APPLE_ADS_KEY_ID=<APPLE_ADS_KEY_ID> --env APPLE_ADS_PRIVATE_KEY=<APPLE_ADS_PRIVATE_KEY> --env APPLE_ADS_PRIVATE_KEY_PATH=<APPLE_ADS_PRIVATE_KEY_PATH> -- npx -y @getmcpads/apple-ads-mcp-serverReplace <…> with your own values. 2 more environment variables are in the server README
Config file
{
"mcpServers": {
"get-mcp-ads-apple-ads": {
"command": "npx",
"args": [
"-y",
"@getmcpads/apple-ads-mcp-server"
],
"env": {
"APPLE_ADS_CLIENT_ID": "<APPLE_ADS_CLIENT_ID>",
"APPLE_ADS_TEAM_ID": "<APPLE_ADS_TEAM_ID>",
"APPLE_ADS_KEY_ID": "<APPLE_ADS_KEY_ID>",
"APPLE_ADS_PRIVATE_KEY": "<APPLE_ADS_PRIVATE_KEY>",
"APPLE_ADS_PRIVATE_KEY_PATH": "<APPLE_ADS_PRIVATE_KEY_PATH>"
}
}
}
}Replace <…> with your own values. 2 more environment variables are in the server README
Config file
{
"servers": {
"get-mcp-ads-apple-ads": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@getmcpads/apple-ads-mcp-server"
],
"env": {
"APPLE_ADS_CLIENT_ID": "<APPLE_ADS_CLIENT_ID>",
"APPLE_ADS_TEAM_ID": "<APPLE_ADS_TEAM_ID>",
"APPLE_ADS_KEY_ID": "<APPLE_ADS_KEY_ID>",
"APPLE_ADS_PRIVATE_KEY": "<APPLE_ADS_PRIVATE_KEY>",
"APPLE_ADS_PRIVATE_KEY_PATH": "<APPLE_ADS_PRIVATE_KEY_PATH>"
}
}
}
}Replace <…> with your own values. 2 more environment variables are in the server README
Platform CLI
gemini mcp add -e APPLE_ADS_CLIENT_ID=<APPLE_ADS_CLIENT_ID> -e APPLE_ADS_TEAM_ID=<APPLE_ADS_TEAM_ID> -e APPLE_ADS_KEY_ID=<APPLE_ADS_KEY_ID> -e APPLE_ADS_PRIVATE_KEY=<APPLE_ADS_PRIVATE_KEY> -e APPLE_ADS_PRIVATE_KEY_PATH=<APPLE_ADS_PRIVATE_KEY_PATH> get-mcp-ads-apple-ads npx -y @getmcpads/apple-ads-mcp-serverReplace <…> with your own values. 2 more environment variables are in the server README
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about Apple Ads
How do I install Apple Ads in Claude Code?
Run `claude mcp add apple-ads -e APPLE_ADS_CLIENT_ID=<APPLE_ADS_CLIENT_ID> -e APPLE_ADS_TEAM_ID=<APPLE_ADS_TEAM_ID> -e APPLE_ADS_KEY_ID=<APPLE_ADS_KEY_ID> -e APPLE_ADS_PRIVATE_KEY=<APPLE_ADS_PRIVATE_KEY> -e APPLE_ADS_AD_ACCOUNT_IDS=<APPLE_ADS_AD_ACCOUNT_IDS> -- npx -y @getmcpads/apple-ads-mcp-server`, filling in your own environment values.
What does Apple Ads do?
It gives the agent read tools for Apple Ads campaigns and performance, plus a separate set of write tools. Every change goes through a preview and an explicit confirmation.
What do I need before it works?
An EC P-256 key uploaded in the Apple Ads API settings, the clientId, teamId and keyId shown there, your ad account IDs, and a supported Node.js release.