Apple Ads MCP Server
Apple Ads MCP Server
Die Apple Ads Platform API als MCP-Server. 99 Operationen über alle dokumentierten Ressourcen, bereitgestellt für Claude Code, Claude Desktop, Cursor und jeden anderen Model Context Protocol-Client über 4 token-effiziente Tools.
apple-ads-mcp ist ein Open-Source-Model Context Protocol (MCP)-Server für die Apple Ads Platform API – die API hinter Apple Search Ads und Apple Maps Brand Ads. Einmal installiert, kann Ihr KI-Agent Kampagnen, Anzeigengruppen, Keywords, Creatives, Budgets, Berichte und alles andere lesen und schreiben, was Apple für Ihre Werbekonten bereitstellt.
Der Katalog wird aus openapi/apple-ads.openapi.json generiert, das aus Apples offiziellem Node-Client (apple/apple-ads-platform-api-node, Spec-Tag 109) rekonstruiert und Endpunkt für Endpunkt gegen Apples veröffentlichte Dokumentation geprüft wurde.
In diesem Repository liegen keine Anmeldedaten. Sie stellen Ihre eigenen Apple Ads API-Anmeldedaten zur Laufzeit über Umgebungsvariablen bereit. Es wird nichts gebündelt, protokolliert oder irgendwohin übertragen außer an Apple.
Inhaltsverzeichnis
Warum 4 Tools statt 99
Alle 99 Apple Ads-Operationen als einzelne MCP-Tools zu registrieren bedeutet, 99 vollständige JSON-Schemas in den Kontextfenster des Modells zu laden, bevor es irgendetwas Nützliches tut. Der größte Teil dieses Budgets wird für Operationen verschwendet, die der Agent in einer bestimmten Konversation nie aufruft.
Dieser Server hält den vollständigen Katalog intern und legt eine kleine, stabile Oberfläche darüber:
ads_search → find operations (names, methods, paths, tags — no schemas)
ads_schema → describe one operation (full input JSON Schema + call hint)
ads_call → execute one operation (real request, or _dryRun)
ads_tags → list resource tags (with operation counts, to narrow search)Der Agent bezahlt genau für das Schema, das er gleich verwenden wird, und sonst nichts. Ein typischer Ablauf Suche → Schema → Aufruf kostet ein paar tausend Tokens statt der Zehntausende, die es bräuchte, um jedes Schema im Voraus zu laden – und es geht keine Abdeckung verloren, denn der vollständige 99-Operationen-Katalog ist weiterhin über ads_search und ads_call erreichbar.
Related MCP server: mlg-meta-mcp
Was Sie damit tun können
Alle 99 Operationen über 28 Ressourcen-Tags. Führen Sie jederzeit ads_tags aus, um die aktuelle, exakte Liste mit Zählwerten zu erhalten.
Kampagnen – erstellen, lesen, aktualisieren, löschen, per Filter/Sortierung/Paginierung abfragen (
Campaigns)Anzeigengruppen – erstellen, lesen, aktualisieren, löschen, abfragen (
AdGroups)Keywords und negative Keywords – erstellen, lesen, aktualisieren, löschen, abfragen, plus Bulk-Erstellen/-Aktualisieren für beide (
Keywords,NegativeKeywords)Anzeigen – erstellen, lesen, aktualisieren, löschen, abfragen (
Ads)Creatives – erstellen, lesen, aktualisieren, löschen, abfragen (
Creatives)Assets – hochladen, lesen, löschen, abfragen – die Bilder und Videos, die in Creatives und Apple Maps Brand Ads verwendet werden (
Assets)Produktseiten – benutzerdefinierte Produktseiten und ihre Locale-Details lesen, abfragen (
ProductPages)Gemeinsame Budgets – erstellen, lesen, aktualisieren, löschen, abfragen – Budgets, die über mehrere Kampagnen geteilt werden (
SharedBudgets)Geo und Standorte – zielbare Standorte suchen und abfragen, Standortgruppen verwalten (
Locations,LocationGroups,Search)Apple Maps Brand Ads – Business-Brands und Business-Kategorien für Maps-basierte Kampagnen (
Brands,Categories)Berichte – App- und Business-Brand-Leistungsberichte nach Kampagne, Anzeigengruppe, Anzeige, Keyword und Suchbegriff (
Reports)Insights – Impression Share und Suchbegriff-Beliebtheit (
Insights)Empfehlungen – Tagesbudget- und Ziel-CPA-Empfehlungen: abfragen, anwenden, verwerfen (
Recommendations)Vorschläge – Keyword-, Phrasen-, Kategorie- und Ziel-CPA-Vorschläge für den Ausbau von Kampagnen (
Suggestions)Änderungshistorie – Audit-Zusammenfassungen und Änderungsdetails für ein Werbekonto (
ChangeHistory)Konto- und Zugriffsverwaltung – Werbekonten, Organisationsinformationen, Benutzer-ACLs, die Identität des authentifizierten Aufrufers, Werbetreibenden-Ressourcen (
AdAccounts,Orgs,Acls,Me,AdvertiserResources)App-Suche, Eignung und Metadaten – den App-Store-Katalog durchsuchen, App-Store-Anzeigeneignung prüfen, App-Locale-Details, unterstützte Sprachen und Ablehnungsgründe für Apps und Brands nachschlagen (
Apps,Search,Eligibilities,Metadata,RejectionReasons)
Voraussetzungen
Bun 1.1 oder neuer
Ein Apple Ads-Konto mit API-Zugriff – eine Client-ID, Team-ID, Key-ID und ein privater Schlüssel aus der Apple Ads-Oberfläche
Ein MCP-Client, der stdio spricht: Claude Code, Claude Desktop, Cursor oder Ihr eigener Agent
Anmeldedaten abrufen
Melden Sie sich bei ads.apple.com an.
Generieren Sie lokal einen EC-privaten Schlüssel (Apple sieht den privaten Schlüssel selbst nie):
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out private-key.pem openssl ec -in private-key.pem -pubout -out public-key.pemGehen Sie zu Account Settings → API, fügen Sie den Inhalt von
public-key.pem(einschließlich derBEGIN/END-Zeilen) in das Feld Public Key ein und speichern Sie.Nach dem Speichern zeigt die Seite Ihren Anmeldedaten-Block: eine Client-ID, eine Team-ID und eine Key-ID. Kopieren Sie alle drei.
Bewahren Sie
private-key.pemaußerhalb Ihres Repositorys auf, z. B. unter~/.apple-ads/private-key.pem, und setzen Siechmod 600darauf.
Dieser Server übernimmt ab hier: Er signiert das ES256-Client-Secret-JWT, tauscht es gegen ein Zugriffstoken ein und speichert das Token im Arbeitsspeicher zwischen. Siehe Werbekonto-Scoping für die Ermittlung Ihrer Werbekonto-ID, sobald Sie Anmeldedaten haben.
Installation und Konfiguration
git clone https://github.com/imfaisii/apple-ads-mcp.git
cd apple-ads-mcp
bun install
bun run smoke # offline catalog check + server boot — no credentials neededKopieren Sie .env.example in .env und füllen Sie Ihre Werte ein, oder übergeben Sie sie direkt in der Konfiguration Ihres MCP-Clients. Jeder Client, der einen stdio-MCP-Server startet, funktioniert auf dieselbe Weise – mcp.example.json in diesem Repository ist eine kopierfertige Vorlage:
{
"mcpServers": {
"apple-ads": {
"command": "bun",
"args": [
"run",
"/ABS/PATH/to/apple-ads-mcp/src/index.ts"
],
"env": {
"APPLE_ADS_CLIENT_ID": "SEARCHADS.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"APPLE_ADS_TEAM_ID": "SEARCHADS.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"APPLE_ADS_KEY_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"APPLE_ADS_PRIVATE_KEY_PATH": "/ABS/PATH/to/private-key.pem",
"APPLE_ADS_AD_ACCOUNT_ID": "1234567"
}
}
}
}Claude Code – global registrieren:
claude mcp add apple-ads \
-s user \
-t stdio \
-e APPLE_ADS_CLIENT_ID=SEARCHADS.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-e APPLE_ADS_TEAM_ID=SEARCHADS.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-e APPLE_ADS_KEY_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-e APPLE_ADS_PRIVATE_KEY_PATH=$HOME/.apple-ads/private-key.pem \
-e APPLE_ADS_AD_ACCOUNT_ID=1234567 \
-- bun run /ABS/PATH/to/apple-ads-mcp/src/index.ts
claude mcp get apple-adsStarten Sie eine neue Sitzung. Die Tools erscheinen als mcp__apple-ads__ads_search, …ads_schema, …ads_call und …ads_tags.
Claude Desktop – fügen Sie denselben oben gezeigten mcpServers-Block zu claude_desktop_config.json hinzu:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Starten Sie Claude Desktop nach der Bearbeitung neu.
Cursor – ~/.cursor/mcp.json (global) oder .cursor/mcp.json (pro Projekt), derselbe mcpServers-Block.
Ihr eigener Agent – führen Sie bun run src/index.ts aus und sprechen Sie MCP über stdio. In einem rohen Terminal sieht es so aus, als würde es hängen; das ist ein stdio-Server, der auf einen Client wartet, und das ist korrekt.
Die vier Tools
ads_search – die richtige Operation finden
Freitextsuche über operationId, Name, Pfad, Tags, Methode und Beschreibung. Liefert nach Relevanz sortierte Treffer ohne die JSON-Schemas.
Parameter | Typ | Erforderlich | Beschreibung |
| string | optional* | Freitext, z. B. |
| string | optional* | Exakter Ressourcen-Tag-Filter, z. B. |
| string | optional |
|
| integer | optional | Maximale Treffer, Standard |
* Mindestens eines von query, tag oder method.
{ "query": "create campaign", "method": "POST", "limit": 5 }ads_schema – eine Operation beschreiben
Liefert das vollständige Eingabe-JSON-Schema der Operation, ihre Pfad-/Abfrage-/Header-Parameterlisten und einen callHint, der zeigt, wie sie aufgerufen wird.
Parameter | Typ | Erforderlich | Beschreibung |
| string | ja | operationId oder generierter Tool-Name, z. B. |
{ "operation": "campaigns_create" }ads_call – die Operation ausführen
Parameter | Typ | Erforderlich | Beschreibung |
| string | ja | operationId oder generierter Tool-Name |
| object | optional | Pfadparameter, Abfrageparameter, |
| boolean | optional | Methode/Pfad/Abfrage/Body auflösen, ohne Apple aufzurufen |
Pfad- und Abfragefelder, adAccountId und _dryRun funktionieren sowohl verschachtelt in args als auch als Top-Level-Schlüssel neben operation.
// query campaigns
{
"operation": "campaigns_query",
"args": {
"body": {
"filters": [{ "field": "status", "operator": "EQUALS", "value": "ENABLED" }],
"pagination": { "pageSize": 10, "fetchTotalCount": true }
}
}
}
// create a campaign
{
"operation": "campaigns_create",
"args": {
"body": {
"name": "Away Finder — Brand",
"billingEvent": "TAPS",
"startTime": "2026-09-01T00:00:00Z",
"promotedObjectType": "APPSTORE_APP",
"promotedObjectId": "1234567890",
"status": "ENABLED",
"dailyBudget": { "value": { "amount": "50.00", "currency": "USD" } }
}
}
}ads_tags – Orientierung in der API
Parameter | Typ | Erforderlich | Beschreibung |
| integer | optional | Maximale Tags, Standard alle 28, sortiert nach Operationsanzahl |
{}Ein durchgearbeitetes Beispiel
Ein vollständiger Ablauf von null Kontext bis zu einem echten Aufruf: Werbekonto entdecken, Operation finden, Schema lesen, dann ausführen.
1. ads_call { operation: "acls_list" }
→ { result: { acls: [ { adAccount: { id: 123456789, name: "Away Finder" }, roles: ["Admin"] } ] } }
Use adAccount.id as the ad account for every scoped call below.
2. ads_search { query: "list campaigns" }
→ hits: [ { name: "campaigns_query", operationId: "campaignsQueryPost", method: "POST", path: "/campaigns/query", tags: ["Campaigns"] }, ... ]
3. ads_schema { operation: "campaigns_query" }
→ full inputSchema (adAccountId, body.filters, body.sorting, body.pagination) + callHint
4. ads_call {
operation: "campaigns_query",
args: {
adAccountId: "123456789",
body: {
filters: [{ field: "status", operator: "EQUALS", value: "ENABLED" }],
sorting: [{ field: "name", order: "ASC" }],
pagination: { pageSize: 10, fetchTotalCount: true }
}
}
}
→ { status: 200, body: { result: [ { id: 542370549, name: "Away Finder — Brand", status: "ENABLED", ... } ], pagination: { offset: 0, pageSize: 10, totalCount: 1 } } }Um statt einer Auflistung etwas zu erstellen, führen Sie dieselbe Form zuerst als Probelauf aus (siehe Probelauf), prüfen Sie die aufgelöste Anfrage gegen ads_schema und rufen Sie sie dann wirklich auf.
Werbekonto-Scoping
Die meisten Apple Ads-Aufrufe sind auf ein Werbekonto beschränkt. Der Server sendet dies als X-Ap-Context-Header:
X-Ap-Context: adAccountId=123456789;Sie bauen diesen Header nicht selbst. Entweder:
setzen Sie
APPLE_ADS_AD_ACCOUNT_IDeinmal in Ihrer Umgebung, sodass jeder beschränkte Aufruf sie standardmäßig verwendet, oderübergeben Sie
adAccountIdpro Aufruf inargs(oder als Top-Level-Feld nebenoperation), was den Standardwert für diesen einen Aufruf überschreibt.
Eine Handvoll Operationen benötigt kein Werbekonto und funktioniert nur mit Ihrem Zugriffstoken: me_list (GET /me) und acls_list (GET /acls). Rufen Sie zuerst acls_list auf – es liefert jedes Werbekonto, das Ihre Anmeldedaten erreichen können, plus Ihre Rolle auf jedem, sodass Sie wissen, welche adAccountId-Werte gültig sind, bevor Sie einen anderen Aufruf darauf beschränken.
Abfrage, Paginierung und Sortierung
Die meisten Listen-Endpunkte folgen demselben Muster: POST /<resource>/query mit einem Selektor-Body aus filters, sorting und pagination. Dieses Muster gilt gleichermaßen für Abfragen von Kampagnen, Anzeigengruppen, Keywords, Creatives oder einem Report.
// POST /campaigns/query
{
"filters": [
{ "field": "status", "operator": "EQUALS", "value": "ENABLED" }
],
"sorting": [
{ "field": "name", "order": "ASC" }
],
"pagination": {
"offset": 0,
"pageSize": 10,
"fetchTotalCount": true
}
}Filter (field, operator, value, optional ignoreCase) unterstützen einen breiten Operatorsatz: EQUALS, NOT_EQUALS, IN, NOT_IN, CONTAINS_ANY, CONTAINS_ALL, NOT_CONTAINS_ANY, NOT_CONTAINS_ALL, STARTS_WITH, ENDS_WITH, LIKE, NOT_LIKE, BETWEEN, GREATER_THAN, GREATER_THAN_OR_EQUAL_TO, LESS_THAN, LESS_THAN_OR_EQUAL_TO, IS_NULL, IS_NOT_NULL. Nicht jedes Feld jeder Entität unterstützt jeden Operator – prüfe die Feldliste in ads_schema für den jeweiligen Aufruf.
Sortierung verwendet field und order (ASC oder DESC). Wird sie weggelassen, werden die Ergebnisse aufsteigend nach id sortiert.
Paginierung verwendet offset und pageSize, wobei fetchTotalCount (Standard false) zusätzlich die Gesamtzahl der Treffer zurückgibt. Reporting-Endpunkte begrenzen pageSize auf 5000 und verwenden standardmäßig 100, wenn nichts angegeben ist; andere /query-Endpunkte dokumentieren keine feste Obergrenze – beginne mit einer moderaten pageSize und blättere mit offset durch.
Keywords und negative Keywords haben außerdem Bulk-Endpunkte (keywords_bulkCreate, keywords_bulkUpdate, negativeKeywords_bulkCreate, negativeKeywords_bulkUpdate), die ein items-Array entgegennehmen, wobei jedes Element eine vom Client bereitgestellte correlationId und einen data-Payload enthält, plus ein allowPartialSuccess-Flag.
Reports
Der Tag Reports umfasst 10 Operationen: Performance-Reports auf App-Ebene und Business-Brand-Ebene nach Kampagne, Anzeigengruppe, Anzeige, Keyword und Suchbegriff (reports_appsCampaignsQuery, reports_appsAdgroupsQuery, reports_appsAdsQuery, reports_appsKeywordsQuery, reports_appsSearchtermsQuery sowie die entsprechenden reports_businessBrandsCampaignsQuery / reports_businessBrandsAdgroupsQuery / reports_businessBrandsAdsQuery / reports_businessBrandsKeywordsQuery / reports_businessBrandsSearchtermsQuery für Apple-Maps-Brand-Anzeigen).
Jede Report-Operation ist ein POST /reports/.../query-Aufruf mit demselben oben beschriebenen filters / sorting / pagination-Selektor-Body, begrenzt auf ein Werbekonto:
{
"operation": "reports_appsCampaignsQuery",
"args": {
"adAccountId": "123456789",
"body": {
"pagination": { "pageSize": 100 }
}
}
}Führe zuerst ads_schema { operation: "reports_appsCampaignsQuery" } aus, um die genauen filterbaren/gruppierbaren Felder für diesen Report zu sehen, bevor du ihn aufrufst – sie unterscheiden sich je nach Reporttyp.
Hochladen von Creative-Assets
assets_upload ist die einzige Operation, die multipart/form-data statt JSON sendet. Ein MCP-Client kann nur JSON senden, daher wird der Dateiteil als Objekt beschrieben und der Server wandelt ihn in einen echten Multipart-Upload um:
{
"operation": "assets_upload",
"args": {
"adAccountId": "123456789",
"body": {
"file": { "path": "/Users/you/creative/hero.png", "contentType": "image/png" },
"promotedObjectId": "987654",
"promotedObjectType": "BUSINESS_BRAND"
}
}
}Verwende { "path": "/abs/path" }, um eine Datei von dem Rechner zu lesen, auf dem der Server läuft, oder { "base64": "...", "filename": "hero.png", "contentType": "image/png" }, wenn die Bytes bereits vorliegen. Apple akzeptiert hier PNG, JPG und HEIC.
Fehler und Rate-Limits
Der Antwort-Body von Apple wird unverändert durchgereicht. Bei einem
4xx/5xxsieht der Agent Apples eigeneerror.code,error.messageunderror.detailsund kann so genau erkennen, was abgelehnt wurde, und sich selbst korrigieren.Bei
401erneuert dieser Server das Zugriffstoken einmal und wiederholt den Aufruf automatisch – veraltete Token-Fehler sollten dem Agenten nicht angezeigt werden.Bei
429enthält die Antwort einenhintsowie die von Apple gesendeten Rate-Limit-Response-Header (RateLimit-Limit,RateLimit-Remaining,RateLimit-ResetundRetry-After, sofern vorhanden). Der Server wiederholt den Aufruf nicht in deinem Namen – warte anhand dieser Header ab, wobeiRetry-Afterbevorzugt werden sollte, wenn es vorhanden ist. Apples Dokumentation veröffentlicht keinen festen numerischen Grenzwert, also hartcodiere keinen; lies stattdessen die Header jeder Antwort.Ein Bulk-Request (
keywords_bulkCreateusw.) zählt unabhängig von der Anzahl der enthaltenen Elemente als ein einziger Aufruf gegen das Rate-Limit – bündle Änderungen bei großem Umfang in Bulk-Requests.Antworten über ~120.000 Zeichen werden mit einem Hinweis gekürzt, die Anfrage einzugrenzen. Senke bei Listen-/Report-Endpunkten die
pageSizeoder füge spezifischerefiltershinzu, statt alles auf einmal abzurufen.
Trockenlauf
Jeder ads_call akzeptiert _dryRun: true. Er löst die Anfrage auf – Methode, Pfad, Pfadparameter, Query, Header, Body und den Werbekonto-Kontext – ohne etwas an Apple zu senden:
{
"operation": "campaigns_update",
"_dryRun": true,
"args": {
"id": "542370549",
"adAccountId": "123456789",
"body": { "status": "PAUSED" }
}
}{
"dryRun": true,
"operationId": "campaignsIdPut",
"method": "PUT",
"path": "/campaigns/{id}",
"pathParams": { "id": "542370549" },
"query": {},
"headers": {},
"body": { "status": "PAUSED" },
"adAccountId": "123456789",
"xApContext": "adAccountId=123456789;"
}Verwende dies, um eine Schreibanfrage gegen ads_schema zu prüfen, bevor sie ein echtes Werbekonto berührt.
Umgebungsvariablen
Variable | Erforderlich | Zweck |
| ja | Client-ID aus dem Anmeldedaten-Block der Apple-Ads-Oberfläche |
| ja | Team-ID aus demselben Anmeldedaten-Block |
| ja | Key-ID aus demselben Anmeldedaten-Block |
| ja* | Absoluter Pfad zu deiner EC-Private-Key-Datei |
| ja* | Inline-PEM-Inhalt statt eines Dateipfads (nützlich in CI) |
| nein | Standard-Werbekonto-ID für |
| nein | Standard: |
| nein | Standard: |
| nein |
|
* Gib genau eine der beiden Variablen APPLE_ADS_PRIVATE_KEY_PATH oder APPLE_ADS_PRIVATE_KEY an.
Kopiere .env.example nach .env für lokale Shells. .env*, *.p8 und *.pem sind bereits in .gitignore.
Wie der Katalog generiert wird
openapi/apple-ads.openapi.json → bun run generate → generated/tools.json
generated/manifest.jsonopenapi/apple-ads.openapi.json ist die vendored Quelle der Wahrheit: rekonstruiert aus Apples offiziellem Node-Client (apple/apple-ads-platform-api-node, Spec-Tag 109) und Endpunkt für Endpunkt gegen Apples veröffentlichte Dokumentation abgeglichen. scripts/generate-tools.ts liest sie und erzeugt einen Katalogeintrag pro Pfad+Methode – 99 Operationen, 80 Pfade, 28 Tags – in generated/tools.json, plus Zählungen und Herkunft in generated/manifest.json.
Tool-Beschreibungen werden aus Apples eigener Dokumentation angereichert. generated/docs.json ordnet jedem METHOD /path den Titel, die Zusammenfassung und die URL seiner Seite auf developer.apple.com zu, sodass ads_search und ads_schema Apples eigene Formulierungen und einen Link zum Öffnen zurückgeben.
bun run generate # rebuild the catalog from openapi/apple-ads.openapi.json
bun run docs # refresh generated/docs.json from developer.apple.com
bun run smoke # regenerate, validate the catalog, boot the serverDie Abdeckung ist verifiziert, nicht angenommen. Apple veröffentlicht 99 Endpunktseiten; dieser Katalog hat 99 Operationen, und jede stimmt 1:1 nach Methode und Pfadform überein. Der vollständige Endpunkt-für-Endpunkt-Vergleich befindet sich in docs/endpoint-coverage.md.
generated/ ist Build-Ausgabe. Bearbeite sie niemals von Hand – ändere die Spec oder den Generator und generiere dann neu. CI schlägt fehl, wenn der eingecheckte Katalog nicht mit einer frischen Generierung übereinstimmt.
Notausstieg: jede Operation als eigenes Tool
export APPLE_ADS_EXPOSE_ALL_TOOLS=1 # also register all 99 operations as individual MCP toolsLass dies im normalen Betrieb nicht gesetzt – es existiert zum Debuggen des generierten Katalogs, nicht für den täglichen Agenten-Einsatz, und es bringt das vollständige Schema jeder Operation zurück in den Kontext.
Sicherheit
In diesem Repository wird nichts Geheimes gespeichert. Anmeldedaten kommen ausschließlich aus Umgebungsvariablen.
.gitignoreblockiert*.p8,*.pem,PrivateKey_*.p8und.env*.Das Client-Secret ist ein per Richtlinie kurzlebiges ES256-JWT, das du lokal mit deinem privaten Schlüssel signierst (gültig bis zu 180 Tage, Apples eigenes Maximum); Apple erhält den privaten Schlüssel selbst nie. Das resultierende Zugriffstoken wird nur im Speicher zwischengespeichert und mit einem 60-Sekunden-Puffer vor dem von Apple zurückgegebenen
expires_in(derzeit 3600 Sekunden) erneuert – plus einem einmaligen Wiederholungsversuch bei einem401.Tool-Ergebnisse geben niemals Anmeldedaten an das Modell zurück.
Die einzigen Netzwerkziele sind
APPLE_ADS_BASE_URL(Standard: Apples API-Host) undAPPLE_ADS_AUTH_BASE_URL(Standard: Apples OAuth-Host).Wenn du jemals versehentlich einen privaten Schlüssel committest, rotiere ihn sofort in der Apple-Ads-Oberfläche.
Siehe SECURITY.md zum Melden einer Sicherheitslücke.
Mitwirken
Issues und Pull Requests sind willkommen. Siehe CONTRIBUTING.md. Zwei Regeln sind am wichtigsten: generated/ wird neu generiert statt von Hand bearbeitet, und in einem Pull Request dürfen niemals Anmeldedaten auftauchen.
Lizenz
MIT © imfaisii
Nicht mit Apple Inc. verbunden oder von ihr unterstützt.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA Model Context Protocol server that exposes the entire Apple App Store Connect API (1,200+ operations) as MCP tools, enabling AI assistants to query apps, manage builds, handle submissions, read analytics, and more.21MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Meta Ads providing 30 tools for account discovery, campaign management, targeting research, and insights. Designed with LLM-friendly outputs and productivity features like cloning and bulk operations.1MIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server that exposes the Apple App Store Connect API to AI agents, enabling management of apps, metadata, in-app purchases, subscriptions, TestFlight, provisioning, reviews, analytics, and more through 113 curated tools plus two generic JSON:API escape-hatch tools.1
- AlicenseNot gradedqualityBmaintenanceComplete Google Ads API v21 MCP server with 40+ fully implemented tools for campaign, ad group, keyword, extension, and portfolio bidding management, enabling AI assistants to create, optimize, and manage Google Ads campaigns through natural language commands.MIT
Related MCP Connectors
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
60+ Meta Ads tools for AI agents: audits, campaign management, audiences and CAPI tracking.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/imfaisii/apple-ads-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server