Skip to main content
Glama
imfaisii

App Store Connect MCP Server

by imfaisii

App Store Connect MCP Server

Die vollständige App Store Connect API als MCP-Server. 1.263 Operationen, direkt aus Apples offizieller OpenAPI-Spezifikation generiert, über nur 4 token-effiziente Tools für Claude Code, Claude Desktop, Cursor und jeden anderen Model Context Protocol-Client verfügbar.

CI Model Context Protocol App Store Connect API 4.4.1 1263 operations 4 MCP tools Bun TypeScript License: MIT


Was ist der App Store Connect MCP-Server?

app-store-connect-mcp ist ein Open-Source-Model Context Protocol (MCP)-Server für die App Store Connect API. Installiere ihn einmal und dein KI-Agent kann alles lesen und schreiben, was Apple für deine Apps und dein Entwicklerkonto bereitstellt:

App-Store-Einträge und Metadaten · TestFlight-Builds, Beta-Gruppen und Tester · In-App-Käufe · automatisch verlaufende Abonnements, Angebote und Win-back-Angebote · Game-Center-Ranglisten, Erfolge und Matchmaking · Xcode-Cloud-Workflows und Build-Läufe · Provisioning-Profile, Zertifikate, Bundle-IDs und Geräte · App-Review-Einreichungen und Review-Details · Kundenbewertungen und Antworten · Preise, Verfügbarkeit und Gebiete · Vertriebs-, Finanz- und Analyseberichte · Benutzer, Rollen und Einladungen · App Clips, Hintergrund-Assets und alternative Distribution.

Die meisten App Store Connect MCP-Server wickeln zwei oder drei Dutzend Endpunkte von Hand ab und veralten dann. Dieser hier ist aus Apples veröffentlichter OpenAPI-Spezifikation generiert, sodass die Abdeckung die gesamte dokumentierte Oberfläche umfasst und mit einem einzigen bun run generate aktuell bleibt.

In diesem Repository liegen keine Zugangsdaten. Du stellst deinen eigenen App Store Connect API-Key zur Laufzeit über Umgebungsvariablen bereit. Es wird nichts gebündelt, protokolliert oder irgendwohin übertragen, außer an Apple.

Inhaltsverzeichnis


Related MCP server: App Store Connect MCP

Auf einen Blick

Was es ist

MCP-Server für die vollständige App Store Connect API

API-Version

App Store Connect API 4.4.1 (OpenAPI 3.0.1)

Operationen im Katalog

1.263 — eine pro Pfad + Methode

API-Pfade

966

Ressourcen-Tags

195

Registrierte MCP-Tools

4 Meta-Tools: asc_search, asc_schema, asc_call, asc_tags

Methoden-Aufteilung

797 GET · 176 POST · 158 PATCH · 132 DELETE

Quelle der Wahrheit

Apples OpenAPI-Zip, eingecheckt unter openapi/app-store-connect.openapi.json

Authentifizierung

ES256-JWT, zur Laufzeit aus Issuer-ID + Key-ID + .p8-Privatschlüssel erstellt

Basis-URL

https://api.appstoreconnect.apple.com (überschreibbar)

Transport

stdio

Laufzeit

Bun 1.1+ und @modelcontextprotocol/sdk

Lizenz

MIT


Warum 4 Tools statt 1.263?

Wenn jede OpenAPI-Operation als eigenes MCP-Tool registriert wird, werden 1.263 vollständige JSON-Schemas in das Kontextfenster des Modells gekippt. Das ist in der Größenordnung von Hunderttausenden Tokens, die verbrannt werden, bevor der Agent irgendeine echte Arbeit leistet — und viele Clients lehnen eine so große Tool-Liste schlicht ab oder kürzen sie.

Dieser Server hält den vollständigen Katalog intern und legt eine kleine, stabile Oberfläche darüber:

asc_search  →  find operations           (names, methods, paths, tags — no schemas)
asc_schema  →  describe one operation    (full input JSON Schema + call hint)
asc_call    →  execute one operation     (real request, or _dryRun)
asc_tags    →  list resource tags        (with operation counts, to narrow search)

Der Agent bezahlt genau für das Schema, das er gerade verwenden will, und sonst nichts. Ein typischer Drei-Schritte-Ablauf kostet ein paar tausend Tokens statt ein paar hunderttausend.

Notausstieg (nur zum Debuggen)

export ASC_EXPOSE_ALL_TOOLS=1   # also register all 1,263 operations as individual MCP tools

Lass das im normalen Betrieb nicht gesetzt. Es existiert zum Debuggen der Spezifikation und ist im Kontext extrem teuer.


Die vier MCP-Tools

Volltextsuche über operationId, Name, Pfad, Tags, Methode und Beschreibung. Liefert nach Relevanz sortierte Treffer ohne die JSON-Schemas.

Parameter

Typ

Erforderlich

Beschreibung

query

string

optional*

Freitext, z. B. "list apps", "beta testers", "sales reports", "/v1/builds"

tag

string

optional*

Exakter OpenAPI-Tag-Filter, z. B. Apps, Builds, BetaGroups

method

string

optional

GET, POST, PATCH, DELETE, PUT

limit

integer

optional

Maximale Treffer, Standard 15, Maximum 50

* Mindestens eines von query, tag oder method.

{ "query": "list apps", "method": "GET", "limit": 5 }

asc_schema — eine Operation beschreiben

Gibt das vollständige Eingabe-JSON-Schema der Operation, ihre Pfad-Parameterliste, ihre Query-Parameterliste und einen callHint zurück, der zeigt, wie sie aufgerufen wird.

Parameter

Typ

Erforderlich

Beschreibung

operation

string

ja

Operation-ID oder generierter Tool-Name, z. B. apps_getCollection

asc_call — die Operation ausführen

Parameter

Typ

Erforderlich

Beschreibung

operation

string

ja

Operation-ID oder generierter Tool-Name

args

object

optional

Pfad-Parameter, Query-Parameter, body, _dryRun. Zusätzliche Eigenschaften erlaubt

_dryRun

boolean

optional

Methode/Pfad/Query/Body ohne Aufruf von Apple auflösen

Pfad- und Query-Felder funktionieren entweder verschachtelt in args oder als Top-Level-Schlüssel neben operation. JSON:API-Schreibvorgänge kommen in body.

// read
{ "operation": "apps_getCollection", "args": { "limit": 10, "fields[apps]": "name,bundleId,sku" } }

// dry run — no network call, shows the resolved request
{ "operation": "apps_getCollection", "_dryRun": true, "args": { "limit": 10 } }

// write (JSON:API document)
{
  "operation": "betaGroups_createInstance",
  "args": {
    "body": {
      "data": {
        "type": "betaGroups",
        "attributes": { "name": "Internal QA" },
        "relationships": { "app": { "data": { "type": "apps", "id": "1234567890" } } }
      }
    }
  }
}

asc_tags — Orientierung in der API

Parameter

Typ

Erforderlich

Beschreibung

limit

integer

optional

Maximale Tags, Standard alle 195, sortiert nach Operationsanzahl

Umgang mit Antworten

  • JSON-Antworten werden geparst zurückgegeben.

  • CSV-, XML- und Text-Antworten werden als Text zurückgegeben.

  • Gzip- und Binär-Downloads (Finanzberichte, Vertriebsberichte) kommen als Base64 mit encoding, contentType, byteLength und einem Decode-Hinweis zurück.

  • Antworten über ~120.000 Zeichen werden gekürzt, mit einem Hinweis, filter[…], fields[…] oder limit einzugrenzen.

  • HTTP 4xx/5xx werden als MCP-Fehler mit Apples eigenem Fehlerbody angezeigt, damit der Agent Apples detail-String lesen und sich selbst korrigieren kann.


Abdeckung: jede App Store Connect-Ressource

Alle 1.263 Operationen über 195 Ressourcen-Tags. Die Zahlen sind Operationen pro Tag.

Apps, Einträge und App-Store-Metadaten — ~250 Operationen

Apps (86) · AppStoreVersions (30) · AppInfos (20) · AppCustomProductPageLocalizations (12) · AppStoreVersionExperiments (12) · AppStoreVersionLocalizations (12) · AppEncryptionDeclarations (8) · AppEventLocalizations (8) · AppStoreVersionExperimentTreatmentLocalizations (7) · AppCategories (6) · AppCustomProductPages (6) · AppEvents (6) · AppPreviewSets (6) · AppScreenshotSets (6) · AppStoreVersionExperimentTreatments (6) · EndUserLicenseAgreements (6) · AppCustomProductPageVersions (5) · AppInfoLocalizations (4) · AppPreviews (4) · AppScreenshots (4) · AppEventScreenshots (4) · AppEventVideoClips (4) · AccessibilityDeclarations (4) · AndroidToIosAppMappingDetails (4) · AppTags (3) · AppStoreVersionPhasedReleases (3) · AgeRatingDeclarations (1) · AppStoreVersionPromotions (1) · AppStoreVersionReleaseRequests (1) · RoutingAppCoverages (4)

TestFlight und Beta-Tests — ~90 Operationen

BetaGroups (21) · BetaTesters (16) · BetaAppLocalizations (7) · BetaBuildLocalizations (7) · PreReleaseVersions (6) · BetaAppReviewDetails (5) · BetaAppReviewSubmissions (5) · BetaLicenseAgreements (5) · BuildBetaDetails (5) · BetaAppClipInvocations (4) · BetaFeedbackCrashSubmissions (4) · BetaRecruitmentCriteria (3) · BetaAppClipInvocationLocalizations (3) · BetaFeedbackScreenshotSubmissions (2) · BetaCrashLogs (1) · BetaRecruitmentCriterionOptions (1) · BetaTesterInvitations (1) · BuildBetaNotifications (1)

Builds und Uploads — ~50 Operationen

Builds (30) · BuildBundles (8) · BuildUploads (5) · BuildUploadFiles (3) · DiagnosticSignatures (1)

In-App-Käufe und Abonnements — ~200 Operationen

Subscriptions (32) · InAppPurchases (25) · SubscriptionGroups (10) · InAppPurchaseOfferCodes (9) · SubscriptionOfferCodes (9) · InAppPurchaseImages (8) · InAppPurchaseLocalizations (8) · InAppPurchasePriceSchedules (8) · InAppPurchaseVersions (8) · SubscriptionGroupLocalizations (8) · SubscriptionImages (8) · SubscriptionLocalizations (8) · SubscriptionVersions (8) · SubscriptionPlanAvailabilities (6) · SubscriptionPromotionalOffers (6) · WinBackOffers (6) · InAppPurchaseAppStoreReviewScreenshots (4) · InAppPurchaseAvailabilities (4) · InAppPurchaseOfferCodeOneTimeUseCodes (4) · SubscriptionAppStoreReviewScreenshots (4) · SubscriptionAvailabilities (4) · SubscriptionGroupVersions (4) · SubscriptionOfferCodeOneTimeUseCodes (4) · SubscriptionPricePoints (4) · InAppPurchaseOfferCodeCustomCodes (3) · SubscriptionIntroductoryOffers (3) · SubscriptionOfferCodeCustomCodes (3) · PromotedPurchases (4) · InAppPurchasePricePoints (2) · SubscriptionGracePeriods (2) · SubscriptionPrices (2) · InAppPurchaseContents (1) · InAppPurchaseSubmissions (1) · SubscriptionGroupSubmissions (1) · SubscriptionSubmissions (1) · SandboxTesters (2) · SandboxTestersClearPurchaseHistoryRequest (1)

Game Center — ~330 Operationen

GameCenterDetails (42) · GameCenterGroups (29) · GameCenterLeaderboardSets (27) · GameCenterLeaderboards (21) · GameCenterAchievements (19) · GameCenterAchievementLocalizations (14) · GameCenterActivities (14) · GameCenterLeaderboardLocalizations (12) · GameCenterLeaderboardSetLocalizations (12) · GameCenterMatchmakingRuleSets (11) · GameCenterMatchmakingQueues (10) · GameCenterAppVersions (9) · GameCenterAchievementImages (8) · GameCenterChallenges (8) · GameCenterLeaderboardImages (8) · GameCenterLeaderboardSetImages (8) · GameCenterLeaderboardSetMemberLocalizations (8) · GameCenterActivityVersions (7) · GameCenterActivityLocalizations (6) · GameCenterChallengeLocalizations (6) · GameCenterChallengeVersions (6) · GameCenterMatchmakingRules (6) · GameCenterEnabledVersions (5) · plus Erfolge-/Bestenlisten-/Aktivitäten-/Herausforderungen-Versionen, Bilder, Veröffentlichungen, Matchmaking-Teams, Regelwerk-Tests, Einreichungen von Einträgen und Spieler-Erfolgs-Einreichungen

Xcode Cloud (kontinuierliche Integration) — ~50 Operationen

CiProducts (13) · CiBuildActions (9) · CiWorkflows (8) · CiBuildRuns (6) · ScmRepositories (6) · CiMacOsVersions (4) · CiXcodeVersions (4) · ScmProviders (4) · CiArtifacts (1) · CiIssues (1) · CiTestResults (1) · ScmGitReferences (1) · ScmPullRequests (1)

Zertifikate, Identifikatoren und Profile — ~45 Operationen

BundleIds (11) · Profiles (10) · Certificates (7) · MerchantIds (7) · PassTypeIds (7) · Devices (4) · BundleIdCapabilities (3)

App Review und Einreichungen — ~20 Operationen

ReviewSubmissions (6) · AppStoreReviewDetails (5) · AppStoreReviewAttachments (4) · ReviewSubmissionItems (3) · AppStoreVersionSubmissions (1)

Preisgestaltung, Verfügbarkeit und Gebiete — ~25 Operationen

AppPriceSchedules (8) · AppAvailabilities (4) · AppPricePoints (3) · Nominations (5) · Territories (1) · TerritoryAvailabilities (1) · EndAppAvailabilityPreOrders (1)

Berichte und Analysen — ~15 Operationen

AnalyticsReportRequests (5) · AnalyticsReportInstances (3) · AnalyticsReports (3) · AnalyticsReportSegments (1) · SalesReports (1) · FinanceReports (1)

Kundenbewertungen — 6 Operationen

CustomerReviews (3) · CustomerReviewResponses (3)

Benutzer und Zugriff — ~15 Operationen

Users (9) · UserInvitations (6) · Actors (2)

App Clips — ~30 Operationen

AppClipDefaultExperiences (11) · AppClipDefaultExperienceLocalizations (6) · AppClips (5) · AppClipHeaderImages (4) · AppClipAdvancedExperienceImages (3) · AppClipAdvancedExperiences (3) · AppClipAppStoreReviewDetails (3)

Hintergrund-Assets — ~15 Operationen

BackgroundAssets (5) · BackgroundAssetVersions (4) · BackgroundAssetUploadFiles (3) · plus App Store-, interne Beta- und externe Beta-Veröffentlichungs-Endpunkte

Alternative Distribution (EU-DMA) — ~15 Operationen

AlternativeDistributionPackageVersions (5) · AlternativeDistributionDomains (4) · AlternativeDistributionKeys (4) · AlternativeDistributionPackages (4) · MarketplaceWebhooks (4) · MarketplaceSearchDetails (3) · AlternativeDistributionPackageDeltas (1) · AlternativeDistributionPackageVariants (1)

Webhooks — 8 Operationen

Webhooks (6) · WebhookDeliveries (1) · WebhookPings (1)

Führe asc_tags jederzeit aus, um die aktuelle, exakte Liste zu erhalten.


Voraussetzungen

  • Bun 1.1 oder neuer

  • Ein App Store Connect API-Schlüssel: Issuer ID, Key ID und die .p8-Datei mit dem privaten Schlüssel

  • Ein MCP-Client, der stdio spricht: Claude Code, Claude Desktop, Cursor, Windsurf, VS Code mit einer MCP-Erweiterung, Zed oder dein eigener Agent


Hol dir deinen App Store Connect API-Schlüssel

  1. Melde dich bei App Store Connect an.

  2. Gehe zu Benutzer und Zugriff → Integrationen → App Store Connect API.

  3. Klicke auf +, um einen Schlüssel zu generieren. Wähle die kleinste Rolle, die deinen Anwendungsfall abdeckt (Developer, App Manager oder Admin für Benutzerverwaltung).

  4. Kopiere die Issuer ID (eine UUID, die oben auf der Seite einmal angezeigt wird).

  5. Kopiere die Key ID (10 Zeichen).

  6. Lade die .p8-Datei mit dem privaten Schlüssel herunter. Apple erlaubt dir, sie genau einmal herunterzuladen. Speichere sie außerhalb deines Repositorys, zum Beispiel ~/.appstoreconnect/AuthKey_XXXXXXXXXX.p8, und führe chmod 600 darauf aus.

Apples eigene Anleitung: Creating API keys for App Store Connect API.


Installation in Claude Code

git clone https://github.com/imfaisii/asc-mcp.git
cd asc-mcp
bun install
bun run smoke     # offline catalog check + server boot — no credentials needed

Registriere den Server global:

claude mcp add app-store-connect \
  -s user \
  -t stdio \
  -e ASC_ISSUER_ID=your-issuer-uuid \
  -e ASC_KEY_ID=your-key-id \
  -e ASC_PRIVATE_KEY_PATH=$HOME/.appstoreconnect/AuthKey_XXXXXXXXXX.p8 \
  -- bun run /ABS/PATH/to/asc-mcp/src/index.ts

Überprüfe und starte neu:

claude mcp get app-store-connect
claude mcp list

Starte eine neue Claude Code-Sitzung. Die Tools erscheinen als mcp__app-store-connect__asc_search, …asc_schema, …asc_call und …asc_tags.


Installation in Claude Desktop

Füge dies zu claude_desktop_config.json hinzu:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "app-store-connect": {
      "command": "bun",
      "args": ["run", "/ABS/PATH/to/asc-mcp/src/index.ts"],
      "env": {
        "ASC_ISSUER_ID": "your-issuer-uuid",
        "ASC_KEY_ID": "your-key-id",
        "ASC_PRIVATE_KEY_PATH": "/ABS/PATH/to/AuthKey_XXXXXXXXXX.p8"
      }
    }
  }
}

Starte Claude Desktop neu.


Installation in Cursor, Windsurf, VS Code und anderen MCP-Clients

Jeder Client, der einen stdio-MCP-Server startet, funktioniert. Die Form ist immer dieselbe — mcp.example.json in diesem Repository ist eine fertige Vorlage zum Kopieren.

Cursor~/.cursor/mcp.json (global) oder .cursor/mcp.json (pro Projekt):

{
  "mcpServers": {
    "app-store-connect": {
      "command": "bun",
      "args": ["run", "/ABS/PATH/to/asc-mcp/src/index.ts"],
      "env": {
        "ASC_ISSUER_ID": "your-issuer-uuid",
        "ASC_KEY_ID": "your-key-id",
        "ASC_PRIVATE_KEY_PATH": "/ABS/PATH/to/AuthKey_XXXXXXXXXX.p8"
      }
    }
  }
}

Windsurf~/.codeium/windsurf/mcp_config.json, derselbe mcpServers-Block.

VS Code.vscode/mcp.json mit einem servers-Block, der dieselben command, args und env verwendet.

Dein eigener Agent — führe bun run src/index.ts aus und sprich MCP über stdio. Es wird so aussehen, als ob es in einem rohen Terminal hängt; das ist ein stdio-Server, der auf einen Client wartet, und das ist korrekt.


Umgebungsvariablen

Variable

Erforderlich

Zweck

ASC_ISSUER_ID

ja

Issuer ID (UUID) von App Store Connect

ASC_KEY_ID

ja

Key ID (10 Zeichen)

ASC_PRIVATE_KEY_PATH

ja*

Absoluter Pfad zur .p8-Datei mit dem privaten Schlüssel

ASC_PRIVATE_KEY

ja*

Inline-PEM-Inhalt, statt eines Dateipfads (nützlich in CI)

ASC_BASE_URL

nein

Standardmäßig https://api.appstoreconnect.apple.com

ASC_EXPOSE_ALL_TOOLS

nein

1 registriert alle 1.263 Operationen als einzelne MCP-Tools. Nur zum Debuggen

* Gib genau eine der beiden an: ASC_PRIVATE_KEY_PATH oder ASC_PRIVATE_KEY.

Diese Aliase werden ebenfalls akzeptiert: APP_STORE_CONNECT_ISSUER_ID, APP_STORE_CONNECT_KEY_ID, APP_STORE_CONNECT_PRIVATE_KEY_PATH, APP_STORE_CONNECT_PRIVATE_KEY.

Kopiere .env.example nach .env für lokale Shells. .env* und *.p8 sind bereits in .gitignore.


Wie ein Agent es verwendet

1. asc_tags                                     # optional: orient inside 195 resource tags
2. asc_search { query: "list apps" }            # find candidate operations
3. asc_schema { operation: "apps_getCollection" }  # read the exact input schema
4. asc_call   { operation: "apps_getCollection", args: { limit: 10 } }

Für alles, was schreibt, führe es zuerst als Trockenlauf aus:

{ "operation": "appStoreVersions_updateInstance", "_dryRun": true, "args": { "id": "…", "body": { } } }

_dryRun gibt die aufgelöste Methode, den Pfad, die Pfadparameter, die Abfrage und den Body zurück, ohne Apple zu berühren, damit der Agent seine eigene Anfrage überprüfen kann, bevor er sie abschickt.


Beispiel-Prompts

Sobald der Server verbunden ist, funktionieren all diese in natürlicher Sprache:

  • „Liste meine Apps mit ihren Bundle-IDs und SKUs auf."

  • „Zeige die letzten 5 TestFlight-Builds für MyApp und an wen sie verteilt wurden."

  • „Erstelle eine TestFlight-Beta-Gruppe namens Internal QA für MyApp und füge diese drei Tester hinzu."

  • „Was ist die aktuelle App Store-Version von MyApp in jeder Lokalisierung, und welchen fehlt eine Beschreibung?"

  • „Ziehe den Verkaufsbericht dieses Monats und fasse die Einheiten nach Gebiet zusammen."

  • „Liste alle automatisch verlängerbaren Abonnements in meiner Abonnementgruppe mit ihren Preispunkten auf."

  • „Welche Provisioning-Profile laufen in den nächsten 30 Tagen ab?"

  • „Zeige meine neueste App Review-Einreichung und ihren Ablehnungsgrund."

  • „Hole die neuesten Kundenbewertungen mit 1 oder 2 Sternen und entwirf Antworten."

  • „Starte den Xcode Cloud-Workflow namens Release und melde den Status des Build-Runs."

  • „Welchen meiner In-App-Käufe fehlt ein Review-Screenshot?"

  • „Füge diese Geräte-UDID zu meinem Konto hinzu und generiere das Entwicklungsprofil neu."


Skripte

Befehl

Zweck

bun install

Abhängigkeiten installieren

bun run generate

generated/tools.json und generated/manifest.json aus der mitgelieferten OpenAPI-Spezifikation neu erstellen

bun run start

Den stdio-MCP-Server starten

bun run smoke

Generieren, Katalog-Inventar validieren, Server starten. Führt einen Live-GET /v1/apps nur aus, wenn Anmeldedaten in der Umgebung vorhanden sind

bun run typecheck

tsc --noEmit

bun run live

Live-Anmeldedatenprüfung gegen GET /v1/apps


Apples OpenAPI-Spezifikation aktualisieren

Apple liefert eine Zip-Datei. Die JSON-Datei einbinden, neu generieren, überprüfen:

curl -fsSL -o /tmp/asc-openapi.zip \
  "https://developer.apple.com/sample-code/app-store-connect/app-store-connect-openapi-specification.zip"
unzip -p /tmp/asc-openapi.zip '*.json' > openapi/app-store-connect.openapi.json
bun run generate
bun run smoke

generated/ ist Build-Ausgabe. Bearbeite sie niemals von Hand — generiere stattdessen neu.

Abdeckungshinweis: „Volle Oberfläche" bedeutet jede Operation in Apples veröffentlichter OpenAPI-Zip-Datei für die eingebundene Version. Wenn ein Endpunkt in Apples menschlicher Dokumentation beschrieben ist, aber in der Zip-Datei fehlt, erscheint er hier, nachdem Apple die Zip-Datei aktualisiert hat und du neu generierst.


Projektstruktur

asc-mcp/
├── openapi/
│   └── app-store-connect.openapi.json   # Apple's spec, vendored (source of truth)
├── generated/
│   ├── tools.json                       # 1263-operation catalog (build output)
│   └── manifest.json                    # counts, tags, spec version
├── src/
│   ├── index.ts                         # MCP stdio server, 4 meta-tools
│   ├── catalog.ts                       # search / resolve over the catalog
│   ├── client.ts                        # fetch wrapper, response shaping
│   ├── auth.ts                          # ES256 JWT, in-memory cache
│   └── types.ts
├── scripts/
│   ├── generate-tools.ts                # OpenAPI → catalog
│   ├── smoke.ts                         # offline inventory + boot check
│   └── live-check.ts                    # live GET /v1/apps
├── assets/                              # README graphics
├── mcp.example.json
├── .env.example
└── package.json

Sicherheitsmodell

  • In diesem Repository werden keine Geheimnisse gespeichert. Anmeldedaten stammen ausschließlich aus Umgebungsvariablen.

  • .gitignore blockiert *.p8, AuthKey_*.p8 und .env*.

  • JWTs sind ES256, werden lokal mit Ihrer .p8 signiert, auf die Zielgruppe appstoreconnect-v1 beschränkt, 20 Minuten gültig (Apples Maximum), nur im Speicher zwischengespeichert und 60 Sekunden vor Ablauf aktualisiert.

  • Tool-Ergebnisse geben Anmeldedaten niemals an das Modell zurück.

  • Das einzige Netzwerkziel ist ASC_BASE_URL, das standardmäßig auf Apples API-Host verweist.

  • Wenn Sie jemals versehentlich eine .p8 committen, widerrufen Sie diesen Schlüssel sofort in App Store Connect und generieren Sie einen neuen.

Siehe SECURITY.md zum Melden einer Sicherheitslücke.


Fehlerbehebung

Missing credentials / ASC_ISSUER_ID not set Der MCP-Client hat die Umgebung nicht durchgereicht. Legen Sie die Variablen im env-Block des Clients ab, nicht in Ihrem Shell-Profil – GUI-Apps wie Claude Desktop und Cursor erben Ihre Shell-Umgebung nicht.

HTTP 401 NOT_AUTHORIZED Issuer ID, Key ID und .p8 müssen alle zum selben Schlüssel gehören. Stellen Sie sicher, dass die Key ID mit dem Dateinamen übereinstimmt (AuthKey_<KeyID>.p8) und dass der Schlüssel nicht widerrufen wurde.

HTTP 403 FORBIDDEN_ERROR Die Rolle des Schlüssels ist für diese Operation zu eingeschränkt. Benutzerverwaltung und Finanzberichte benötigen höhere Rollen als Developer.

HTTP 409 mit einer JSON:API-detail-Zeichenkette Apple lehnt die Dokumentstruktur ab. Führen Sie denselben Aufruf mit _dryRun: true aus, vergleichen Sie mit der asc_schema-Ausgabe und korrigieren Sie dann den body.

Der Server „hängt“, wenn ich bun run start ausführe Das ist korrekt. Ein stdio-MCP-Server blockiert und wartet auf einen Client auf stdin. Verwenden Sie bun run smoke, wenn Sie eine Prüfung möchten, die beendet wird.

Tools werden in meinem Client nicht angezeigt Starten Sie den Client nach dem Bearbeiten seiner MCP-Konfiguration neu und verwenden Sie einen absoluten Pfad zu src/index.ts. Stellen Sie sicher, dass bun im PATH des Clients liegt (which bun), oder verwenden Sie den absoluten Pfad zur bun-Binärdatei als command.

Antworten werden abgeschnitten Nutzlasten über ~120.000 Zeichen werden gekürzt. Verwenden Sie fields[…], filter[…] und limit, anstatt ganze Sammlungen abzurufen.


Häufig gestellte Fragen

Ist das ein offizielles Apple-Produkt? Nein. Es ist ein unabhängiges Open-Source-Projekt. „App Store Connect“, „TestFlight“, „Xcode“ und „Game Center“ sind Marken von Apple Inc.

Wie viele Tools stellt dieser MCP-Server bereit? Standardmäßig vier – asc_search, asc_schema, asc_call und asc_tags – basierend auf einem internen Katalog von 1.263 App Store Connect API-Operationen. Das Setzen von ASC_EXPOSE_ALL_TOOLS=1 registriert alle 1.263 einzeln, was nur zum Debuggen nützlich ist.

Unterstützt es TestFlight? Ja. Ungefähr 90 Operationen decken Beta-Gruppen, Beta-Tester, Einladungen, Beta-Build-Lokalisierungen, Beta-App-Review-Einreichungen, Absturz-Feedback und Rekrutierungskriterien ab.

Kann ein Agent meine App zur Überprüfung einreichen? Ja. ReviewSubmissions, ReviewSubmissionItems, AppStoreVersionSubmissions und die Ressourcen für Überprüfungsdetails sind alle im Katalog. Verwenden Sie zuerst _dryRun und behalten Sie einen Menschen im Prozess für alles, was den App Store erreicht.

Funktioniert es mit Cursor, Windsurf und VS Code? Ja. Es ist ein einfacher stdio-MCP-Server, sodass jeder Model Context Protocol-Client ihn starten kann.

Speichert oder überträgt es meinen App Store Connect API-Schlüssel? Nein. Der Schlüssel wird zur Aufrufzeit aus der Umgebung gelesen, zum lokalen Signieren eines kurzlebigen JWT verwendet, und das JWT geht nur an Apples API-Host.

Wie unterscheidet sich das von anderen App Store Connect MCP-Servern? Die meisten sind handgeschriebene Wrapper um eine kleine Teilmenge von Endpunkten. Dieser generiert seinen Katalog aus Apples offizieller OpenAPI-Spezifikation, sodass die Abdeckung die gesamte veröffentlichte Oberfläche umfasst, und das Aktualisieren ist ein Befehl statt einer Neufassung.

Warum nicht einfach dem Modell 1.263 Tools geben? Vollständige JSON-Schemas für 1.263 Operationen kosten Hunderttausende von Kontext-Token, und viele Clients kürzen oder lehnen so lange Listen ab. Suche-dann-Schema-dann-Aufruf kostet ein paar tausend Token pro Aufgabe.

Kann ich es in CI verwenden? Ja. Setzen Sie ASC_PRIVATE_KEY mit dem Inline-PEM anstelle eines Dateipfads, sodass keine .p8 die Festplatte des Runners berühren muss.

Behandelt es App Store Connect API-Ratenlimits? Es wiederholt nicht in Ihrem Namen. Apples Ratenlimit-Antworten und -Header werden direkt durchgereicht, sodass der Agent (oder Ihr Code) entscheiden kann, wie er sich zurückzieht.

Welche App Store Connect API-Version ist enthalten? 4.4.1, OpenAPI 3.0.1. Führen Sie bun run generate aus, nachdem Sie eine neuere Spezifikation eingefügt haben, um zu aktualisieren.


Mitwirken

Issues und Pull Requests sind willkommen. Siehe CONTRIBUTING.md. Zwei Regeln sind am wichtigsten: generated/ wird neu generiert und nicht von Hand bearbeitet, und in einem Pull Request erscheinen niemals Anmeldedaten.


Lizenz

MIT © imfaisii

Nicht mit Apple Inc. verbunden oder von ihr unterstützt.


Schlüsselwörter: App Store Connect MCP · App Store Connect API MCP server · MCP server for App Store Connect · Model Context Protocol Apple · TestFlight MCP · Xcode Cloud MCP · in-app purchase MCP · App Store automation · Claude Code App Store Connect · Cursor MCP App Store Connect · iOS release automation with AI agents

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

Related MCP Connectors

  • Free public MCP for AI agents — 193 tools, 44 workflows. No API key.

  • SaaS intelligence for AI agents. 5 unified tools cover 1,000+ services with 91-96% token savings.

  • 100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.

View all MCP Connectors

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/imfaisii/asc-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server