Apple Ads MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ASA_KEY_ID | No | Key ID for the generated API client | |
| ASA_ORG_ID | No | Optional default organization ID, can be overridden per call | |
| ASA_TEAM_ID | No | Team ID for Apple Ads API, e.g. SEARCHADS.xxxx | |
| ASA_CLIENT_ID | No | Client ID for Apple Ads API, e.g. SEARCHADS.xxxx | |
| ASA_PRIVATE_KEY | No | Inline PEM content of the private key (with escaped newlines if in JSON) | |
| ASA_PRIVATE_KEY_PATH | No | Absolute path to the private key file (PKCS#8 format) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| org_aclsA | List all org-level ACLs (orgs your API user can access, with orgName / currency / paymentModel / roleNames). Use this to discover the orgId for ASA_ORG_ID. Does not require X-AP-Context. |
| me_userA | Return information about the calling API user (userId, parentOrgId). |
| search_appsA | Search the App Store for apps to target / advertise. Returns adamId, name, developerName, and country availability. You need adamId to create campaigns. |
| search_geoB | Search geo entities by name (Country / AdminArea / Locality). Pass |
| geo_lookupA | Resolve geos by raw IDs. Each request item is { id: 'CountryCode|adminArea|locality', entity: 'Country|AdminArea|Locality' }. Useful when a report returns geo IDs you want named. |
| apps_getC | Fetch App Store metadata for an app: appName, developerName, primaryGenre, secondaryGenre, iconPictureUrl, availableStorefronts, deviceClasses, etc. |
| apps_locale_detailsB | Get localized default product-page details for an app (subtitle, short description, screenshots, app preview) per locale. |
| apps_eligibilities_findA | Find app-eligibility records by selector (filterable by supplySource, countryOrRegion, deviceClass, state). |
| apps_assets_findB | Find App Store screenshots / app-preview assets for an app — returns assetGenIds you can use to author creatives or audit rejected assets. |
| creative_app_preview_devicesA | List supported app-preview device-size mappings (e.g. IPHONE_61, IPAD_129). Used when authoring creatives or interpreting screenshot/preview metadata. |
| countries_or_regions_listA | List supported countries / regions with their default and supported product-page languages. |
| cpp_listC | List Custom Product Pages for an app. |
| cpp_getB | Fetch a single Custom Product Page by ID. |
| cpp_locale_detailsB | List the locales available for a Custom Product Page (with localized assets per locale). |
| campaigns_createB | Create a new campaign. The minimum useful body specifies adamId, name, countriesOrRegions, adChannelType, supplySources, billingEvent, and a budget. |
| campaigns_getB | Fetch a single campaign by ID. |
| campaigns_listA | List all campaigns in the org (paginated). For richer filtering use campaigns_find. |
| campaigns_findA | Search campaigns with a selector — supports conditions (EQUALS/IN/CONTAINS/...), orderBy, and pagination. |
| campaigns_updateA | Update a campaign. Pass only the fields you want to change. Use clearGeoTargetingOnCountryOrRegionChange=true if you change countriesOrRegions. |
| campaigns_deleteB | Permanently delete a campaign. Cannot be undone. |
| adgroups_createB | Create an ad group within a campaign. Bid + targeting live here, not on the campaign. |
| adgroups_getC | Fetch a single ad group. |
| adgroups_listC | List all ad groups in a campaign (paginated). |
| adgroups_find_in_campaignA | Find ad groups within a single campaign using a selector. |
| adgroups_find_org_wideA | Find ad groups across the entire org with a selector. |
| adgroups_updateC | Update an ad group. Pass only the fields you want to change. |
| adgroups_deleteC | Delete an ad group. |
| creatives_createC | Create a creative (a reference to a default product page, custom product page, or creative set). Ads bind to creatives via creativeId. |
| creatives_listB | List all creatives in the org (paginated). |
| creatives_getB | Fetch a single creative by ID. |
| creatives_findC | Find creatives across the org with a selector. |
| ads_createB | Create an ad inside an ad group. Ads bind a Creative (creativeId) to the ad group; the creative itself can wrap a Custom Product Page, Default Product Page, or Creative Set reference. |
| ads_getC | Fetch a single ad by ID. |
| ads_listB | List all ads in an ad group. |
| ads_find_in_campaignA | Find ads across all ad groups in a campaign with a selector. |
| ads_find_org_wideB | Find ads across the entire org with a selector. |
| ads_updateB | Update an ad — typically status, name, or repointing to a different creativeId. |
| ads_deleteC | Delete an ad. |
| targeting_keywords_createB | Bulk-create targeting (positive) keywords on an ad group. Pass up to 1000 per call. |
| targeting_keywords_getC | Fetch a single targeting keyword by ID. |
| targeting_keywords_listB | List targeting keywords on an ad group (paginated). |
| targeting_keywords_findA | Find targeting keywords across all ad groups in a campaign with a selector. Apple does not expose a per-ad-group find — filter by adGroupId in the selector if needed. |
| targeting_keywords_updateB | Bulk-update targeting keywords (status, bid, text, matchType). Each entry must include id. |
| targeting_keywords_deleteC | Bulk-delete targeting keywords by ID. |
| targeting_keywords_delete_singleB | Delete a single targeting keyword by ID (uses Apple's REST DELETE variant). |
| adgroup_negative_keywords_createC | Bulk-create negative keywords on an ad group. |
| adgroup_negative_keywords_getB | Fetch a single ad-group-level negative keyword by ID. |
| adgroup_negative_keywords_listB | List ad-group-level negative keywords (paginated). |
| adgroup_negative_keywords_findB | Find ad-group-level negative keywords across all ad groups in a campaign with a selector. |
| adgroup_negative_keywords_updateC | Bulk-update ad-group-level negative keywords. Each entry must include id. |
| adgroup_negative_keywords_deleteB | Bulk-delete ad-group-level negative keywords by ID. |
| campaign_negative_keywords_createB | Bulk-create campaign-level negative keywords (apply across all ad groups). |
| campaign_negative_keywords_getB | Fetch a single campaign-level negative keyword by ID. |
| campaign_negative_keywords_listC | List campaign-level negative keywords (paginated). |
| campaign_negative_keywords_findB | Find campaign-level negative keywords within a single campaign with a selector. |
| campaign_negative_keywords_updateC | Bulk-update campaign-level negative keywords. |
| campaign_negative_keywords_deleteC | Bulk-delete campaign-level negative keywords by ID. |
| reports_campaignsA | Campaign-level performance report. Returns rows with impressions, taps, installs, spend, CPT/CPM/CPI, conversion rate, etc. Pass groupBy to pivot by country, device, age, gender. |
| reports_adgroupsC | Ad-group-level report within a single campaign. |
| reports_keywords_in_campaignC | Keyword report rolled up across all ad groups in one campaign. |
| reports_keywords_in_adgroupC | Keyword report scoped to a single ad group. |
| reports_search_terms_in_campaignB | Search-terms report rolled up across all ad groups in a campaign. Reveals what users actually typed — harvest new keywords or negatives from here. |
| reports_search_terms_in_adgroupC | Search-terms report scoped to a single ad group. |
| reports_ads_in_campaignB | Ad-level performance (per Custom Product Page / creative variation) rolled up across the campaign. |
| custom_reports_createB | Create an Impression Share (Share of Voice) report — async. Returns a reportId you poll with custom_reports_get until state=COMPLETED. |
| custom_reports_getA | Fetch a single Impression Share report — poll until state=COMPLETED to read rows (rank, impressionShare, lowImpressionShare, highImpressionShare, searchPopularity). |
| custom_reports_listB | List all Impression Share reports created in the org. |
| budget_orders_createB | Create a budget order (LOC accounts only). Wraps Apple's |
| budget_orders_getB | Fetch a single budget order by ID. |
| budget_orders_listB | List all budget orders in the org (paginated). |
| budget_orders_updateC | Update a budget order. Most fields are editable post-creation; status is read-only. v5 has no delete endpoint for budget orders. |
| product_page_reasons_findB | Find ad-creative rejection reasons (filterable by adamId, productPageId, assetGenId, countryOrRegion, languageCode, supplySource, reasonLevel). Use this to audit why a creative was rejected by Apple's review team. |
| product_page_reasons_getB | Fetch a single rejection reason by ID. |
| apple_search_ads_requestA | Escape hatch: call any Apple Search Ads endpoint by method + path. Authentication and org context are handled for you. Use only if no dedicated tool covers the endpoint you need. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AppVisionOS/apple-search-ads-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server