Apple Ads MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| APPLE_ADS_KEY_ID | No | Apple Ads API key ID. | |
| APPLE_ADS_PROFILE | No | Name of the profile to use when multiple profiles exist in the configuration file. | |
| APPLE_ADS_TEAM_ID | No | Apple Ads API team ID. | |
| APPLE_ADS_CLIENT_ID | No | Apple Ads API client ID (e.g., SEARCHADS.example-client-id). | |
| APPLE_ADS_MCP_CONFIG | No | Path to the configuration file (accounts.json). Overrides the default path and takes precedence over individual environment variables. | |
| APPLE_ADS_ALLOW_WRITES | No | Set to true to enable write operations. Defaults to false. | |
| APPLE_ADS_AD_ACCOUNT_ID | No | Default ad account ID to use for tools when no explicit account is provided. | |
| APPLE_ADS_PRIVATE_KEY_PATH | No | Absolute path to the ES256 private key file. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| account_healthC | Collect a read-only identity, access, and account baseline. |
| ad_account_getB | Read sanitized account currency, timezone, payment model, features, and delegations. |
| ad_accounts_listB | Discover Apple Ads account ACLs available to a profile. |
| ad_create_previewC | Preview creation of one ad. |
| ad_delete_previewA | Preview irreversible deletion of one ad under a paused campaign. |
| ad_getA | Read one ad by ID for current-state verification. |
| ad_group_bid_previewB | Preview an ad-group default bid update with decimal amount and currency. |
| ad_group_cpa_cap_previewA | Deprecated by Apple: preview a legacy ad-group CPA cap update; retained for compatibility without automatic strategy conversion. |
| ad_group_create_previewB | Preview creation of one ad group. |
| ad_group_delete_previewA | Preview irreversible deletion of one ad group under a paused campaign. |
| ad_group_getB | Read one ad group by ID for current-state verification. |
| ad_group_pause_previewC | Preview pausing one ad group. |
| ad_group_reportC | Read bounded ad-group performance rows. |
| ad_group_resume_previewB | Preview resuming one ad group. |
| ad_group_schedule_previewB | Preview an ad-group start and end schedule update. |
| ad_group_search_match_previewA | Preview enabling or disabling Apple Search Match for a Search Results ad group. |
| ad_group_targeting_previewC | Preview App Store-only ad-group targeting. |
| ad_group_update_previewC | Preview an ad-group update. |
| ad_groups_queryC | Query bounded ad groups with endpoint-specific filters. |
| ad_pause_previewC | Preview pausing one ad. |
| ad_reportC | Read bounded ad performance rows. |
| ad_resume_previewB | Preview resuming one ad. |
| ad_update_previewC | Preview an ad update. |
| ads_queryC | Query bounded ads with endpoint-specific filters. |
| advertiser_resources_listB | List App Store content-provider delegations available to a profile. |
| app_locale_detailsA | Query compact locale metadata, or full assets for one required languageCode. |
| app_opportunitiesC | Collect independently classified eligibility and suggestion sections for an app. |
| app_rejection_reason_getB | Read one App Store app rejection reason. |
| app_rejection_reasons_queryB | Query bounded App Store app rejection reasons. |
| app_store_geo_searchC | Search eligible App Store countries, administrative areas, and localities. |
| apps_eligibilityC | Check App Store advertising eligibility. |
| apps_getB | Read an App Store app by Adam ID. |
| apps_searchC | Search apps; an empty result for a non-ASCII owned-app query gets one bounded exact-name fallback. |
| auth_checkB | Validate OAuth credentials and return the caller identity. |
| campaign_auditB | Collect campaign, ad-group, keyword, and search-term report baselines. |
| campaign_bid_strategy_previewC | Preview MANUAL_CPT or eligible App Store Search Results MAX_CONVERSIONS strategy. |
| campaign_countries_previewB | Preview replacing campaign country targeting. |
| campaign_create_previewB | Preview creation of one campaign and return a ten-minute receipt. |
| campaign_daily_budget_previewB | Preview a campaign daily-budget update with typed money. |
| campaign_delete_previewA | Preview irreversible deletion of one paused campaign and its cascade inventory. |
| campaign_getA | Read one campaign by ID for current-state verification. |
| campaign_inventoryC | Read a campaign and bounded child inventory for safe auditing. |
| campaign_pause_previewB | Preview pausing one campaign. |
| campaign_reportC | Read bounded campaign performance rows. |
| campaign_resume_previewC | Preview resuming one campaign. |
| campaign_schedule_previewC | Preview a campaign start and end schedule update. |
| campaign_shared_budget_assign_previewC | Preview assigning one LOC shared budget to one campaign. |
| campaign_shared_budget_unassign_previewB | Preview removing one shared-budget assignment from one campaign. |
| campaign_status_reason_detailsC | Read App Store campaign limited-status reason details. |
| campaign_update_previewC | Preview a campaign update after reading current state. |
| campaigns_queryC | Query bounded campaigns with endpoint-specific filters. |
| category_suggestionsC | Get category opportunities for an App Store app. |
| change_historyB | Read bounded Apple Ads change history for a required typed event window. |
| change_history_detailB | Read bounded field-level details for one change-history entry. |
| creative_create_previewC | Preview creation of one creative. |
| creative_delete_previewA | Preview irreversible deletion of one unreferenced creative. |
| creative_getB | Read one creative by ID for current-state verification. |
| creative_update_previewC | Preview a creative update. |
| creatives_queryB | Query bounded App Store creatives with endpoint-specific filters. |
| daily_budget_recommendation_apply_previewC | Preview applying one daily-budget recommendation under an explicit maximum. |
| daily_budget_recommendation_dismiss_previewC | Preview dismissing one daily-budget recommendation. |
| daily_budget_recommendationsB | Read daily-budget recommendations without applying them. |
| impression_shareB | Read app impression-share insights through a typed UTC request. |
| keyword_bid_previewB | Preview a targeting keyword bid update. |
| keyword_create_previewC | Preview creation of one targeting keyword. |
| keyword_delete_previewB | Preview irreversible deletion of one keyword under a paused campaign. |
| keyword_getA | Read one targeting keyword by ID for current-state verification. |
| keyword_pause_previewB | Preview pausing one targeting keyword. |
| keyword_reportB | Read bounded keyword performance rows, optionally including EMPTY_METRICS. |
| keyword_resume_previewB | Preview resuming one targeting keyword. |
| keyword_suggestionsC | Get keyword opportunities for an App Store app. |
| keyword_update_previewC | Preview a targeting keyword update. |
| keywords_bulk_create_previewA | Preview up to 100 same- or cross-group keyword creates as one Apple bulk request and aggregate receipt. |
| keywords_bulk_update_previewA | Preview up to 100 targeting keyword updates as one drift-bound operation. |
| keywords_queryB | Query bounded targeting-keyword inventory with a required typed scope. |
| negative_keyword_create_previewC | Preview creation of one negative keyword. |
| negative_keyword_delete_previewA | Preview irreversible deletion of one negative keyword under a paused campaign. |
| negative_keyword_getA | Read one negative keyword by ID for current-state verification. |
| negative_keyword_update_previewB | Preview a negative keyword update. |
| negative_keywords_bulk_create_previewB | Preview up to 100 negative keyword creates in one scope. |
| negative_keywords_bulk_update_previewB | Preview up to 100 negative keyword updates in one scope. |
| negative_keywords_queryA | Query bounded negative-keyword inventory with a valid campaign or ad-group scope. |
| operations_applyA | Apply exactly one non-expired, drift-free preview receipt. |
| operations_inspectA | Inspect receipt binding, expiry, and use state without applying it. |
| operations_verifyA | Re-read receipt targets after an ambiguous write, including restart-safe optimization recovery, and return current state. |
| optimization_baselineB | Build a bounded 28-day Apple Ads performance baseline for a named policy. |
| optimization_historyC | Read bounded local decisions and verification history for a named policy. |
| optimization_planC | Build an on-demand bounded optimization plan without creating a receipt. |
| optimization_plan_previewC | Build and bind one bounded active-policy optimization plan to a composite receipt. |
| optimization_policies_listA | List named local optimization policies without credentials or account data. |
| optimization_policy_getA | Read one named optimization policy with resolved balanced thresholds. |
| org_getC | Read one Apple Ads organization. |
| phrase_suggestionsC | Get phrase opportunities for an App Store app. |
| product_page_getB | Read a Default or Custom Product Page by ID. |
| product_page_localesB | Query bounded Product Page locale details. |
| product_pages_queryB | Query bounded Default and Custom Product Pages. |
| profiles_listA | List configured profile names without exposing credentials. |
| search_term_popularityC | Read search-term popularity insights. |
| search_term_reportC | Read bounded search-term performance rows. |
| server_infoA | Show server version, safety mode, API family, and response limits. |
| shared_budget_create_previewB | Preview LOC shared-budget creation using a private local billing profile. |
| shared_budget_delete_previewB | Preview irreversible deletion of one unassigned LOC shared budget. |
| shared_budget_getA | Read one shared budget by ID for current-state verification. |
| shared_budget_update_previewC | Preview a typed LOC shared-budget update. |
| shared_budgets_queryB | Query bounded shared-budget metadata without invoice contacts. |
| supported_app_languagesC | Query bounded App Store advertising language metadata. |
| target_cpa_recommendation_apply_previewB | Preview applying one target-CPA recommendation under an explicit maximum. |
| target_cpa_recommendation_dismiss_previewC | Preview dismissing one target-CPA recommendation. |
| target_cpa_recommendationsA | Read target-CPA recommendations without applying them. |
| target_cpa_suggestionsC | Get target CPA suggestions. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 110 tools
Most tools are clearly separated by resource and action, with a strong preview/apply safety pattern and distinct read/query/get verbs. A few boundaries are less crisp, such as campaign_inventory versus campaigns_query/campaign_get, and operations_inspect/verify/apply, but descriptions generally make the intended choice clear.
The surface uses a predictable snake_case resource_action convention with consistent suffixes such as _preview, _get, _query, and _report. Minor deviations exist in ordering and noun forms, like ad_accounts_list versus ad_account_get and campaign_shared_budget_assign_preview, but the overall pattern is readable and stable.
At 110 tools, the server is extremely heavy for an agent-facing MCP surface, far beyond a practical working set. While the Apple Ads domain is broad, the tool count creates substantial selection overhead and suggests many operations could be consolidated or grouped.
The surface covers the domain extensively: campaigns, ad groups, ads, keywords, negatives, creatives, shared budgets, product pages, reports, recommendations, change history, auth, and optimization workflows. The preview-plus-operations_apply model provides lifecycle coverage while maintaining a deliberate safety boundary.