Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
App Store Connect for MCP clients: PPP pricing, subscriptions, TestFlight, reviews, reports & more
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
ASC_ISSUER_ID, ASC_KEY_ID, ASC_PRIVATE_KEY_PATH, ASC_VENDOR_NUMBERDu brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"appstoreconnect": {
"command": "npx",
"args": [
"-y",
"@akoskomuves/appstoreconnect-mcp"
],
"env": {
"ASC_ISSUER_ID": "your-value",
"ASC_KEY_ID": "your-value",
"ASC_PRIVATE_KEY_PATH": "your-value",
"ASC_VENDOR_NUMBER": "your-value"
}
}
}
}Führe das in deinem Terminal aus
claude mcp add appstoreconnect --env ASC_ISSUER_ID=your-value --env ASC_KEY_ID=your-value --env ASC_PRIVATE_KEY_PATH=your-value --env ASC_VENDOR_NUMBER=your-value -- npx -y @akoskomuves/appstoreconnect-mcpTrag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"appstoreconnect": {
"command": "npx",
"args": [
"-y",
"@akoskomuves/appstoreconnect-mcp"
],
"env": {
"ASC_ISSUER_ID": "your-value",
"ASC_KEY_ID": "your-value",
"ASC_PRIVATE_KEY_PATH": "your-value",
"ASC_VENDOR_NUMBER": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"appstoreconnect": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@akoskomuves/appstoreconnect-mcp"
],
"env": {
"ASC_ISSUER_ID": "your-value",
"ASC_KEY_ID": "your-value",
"ASC_PRIVATE_KEY_PATH": "your-value",
"ASC_VENDOR_NUMBER": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
ASC_VENDOR_NUMBER envDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 8. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto akoskomuves bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: ASC_ISSUER_ID, ASC_KEY_ID, ASC_PRIVATE_KEY_PATH
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (1.0.1) kam vor 5 Monaten in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Node.js auf deinem Computer.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, Alion: company, startup and market intelligence
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:↓ Downloads pro Wochei★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Companies, jobs, pay and people; check counterparties, register agents, write to companies.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
A Model Context Protocol server for the Apple App Store Connect API. Drives apps, subscriptions, pricing, and more from any MCP-compatible client (Claude Code, Claude Desktop, Cursor, Windsurf).
The first published surface is subscription pricing — including a Purchasing Power Parity rebalance flow that's already been used to schedule 120 production price changes across 65 territories on a real iOS app. New ASC domains (TestFlight, sales, screenshots, IAPs) are designed to plug in one file at a time; see Roadmap.
npx @akoskomuves/appstoreconnect-mcp init
The wizard:
.p8 (skipped if you already have one).~/.appstore/ with chmod 600.When something looks off later, run a read-only diagnostic:
npx @akoskomuves/appstoreconnect-mcp doctor
If you'd rather wire it up by hand, add to ~/.claude.json (Claude Code), claude_desktop_config.json (Claude Desktop), or your client's equivalent:
{
"mcpServers": { "appstoreconnect": { "command": "npx", "args": ["-y", "@akoskomuves/appstoreconnect-mcp"], "env": { "ASC_ISSUER_ID": "...", "ASC_KEY_ID": "...", "ASC_PRIVATE_KEY_PATH": "~/.appstore/AuthKey_XXXXXXXXXX.p8" } } } }
Or via Claude Code's CLI:
claude mcp add appstoreconnect \
-e ASC_ISSUER_ID=... \ -e ASC_KEY_ID=... \ -e ASC_PRIVATE_KEY_PATH=~/.appstore/AuthKey_XXXXXXXXXX.p8 \ -- npx -y @akoskomuves/appstoreconnect-mcp
Generate an App Store Connect API key at App Store Connect → Users and Access → Integrations → Keys. Pricing writes need the Admin role; read-only operations work with App Manager.
| Variable | What |
|---|---|
ASC_ISSUER_ID | Issuer UUID from the Keys page |
ASC_KEY_ID | 10-character Key ID |
ASC_PRIVATE_KEY_PATH | Path to your downloaded AuthKey_XXXXXXXXXX.p8 file (~ is expanded) |
The .p8 file is a private key — never commit it. Recommended: ~/.appstore/AuthKey_XXXXXXXXXX.p8 outside any repo.
Only needed for the asc_sign_* tools (subscription offer redemption signing). Issue a second key at App Store Connect → Users and Access → Integrations → In-App Purchase — this is a separate key from the ASC API key above, generated on a different tab of the same page.
| Variable | What |
|---|---|
ASC_IAP_ISSUER_ID | Issuer UUID from the In-App Purchase keys tab (different from ASC_ISSUER_ID) |
ASC_IAP_KEY_ID | 10-character Key ID for the IAP key |
ASC_IAP_PRIVATE_KEY_PATH | Path to the IAP signing .p8 (~ is expanded) |
The server starts fine without these — only the asc_sign_* tools refuse with a setup message if they're missing. Set one or two but not all three and the server rejects with a clear error. Run appstoreconnect-mcp doctor to verify the key loads as a valid ES256 PKCS#8.
Only used by asc_get_sales_report / asc_get_finance_report. Your vendor number is account-level, shown at App Store Connect → Payments and Financial Reports next to your team name (a numeric string like 85123456).
| Variable | What |
|---|---|
ASC_VENDOR_NUMBER | Default vendor number for sales/finance report downloads |
Without it the two report tools still work — they just need vendorNumber passed per call (and their error message tells you where to find it). Note: downloading sales/finance reports requires an API key with the Admin, Finance, or Sales role.
asc_list_apps — list apps (filter by bundleId)asc_get_app — fetch one app by IDasc_list_subscription_groups — groups for an appasc_get_subscription_group — fetch one group by IDasc_list_subscriptions — auto-renewable subscriptions in a groupasc_get_subscription — fetch one subscription by IDasc_list_subscription_prices — current price schedule per subscription. One row per territory (~175 unfiltered) — pass territoryId to narrow to one marketasc_list_subscription_price_points — valid price points for a subscription in a territory. Pass nearAmount to narrow the response to the nearest tiers around a target price.Creating the hierarchy itself — the step that used to send you to the App Store Connect web UI. Four names, only two of which customers ever see:
| Resource | Attribute | Who sees it |
|---|---|---|
SubscriptionGroup | referenceName | internal only |
SubscriptionGroupLocalization | name | customer — heading above the plan choices |
Subscription | name | internal only |
SubscriptionLocalization | name | customer — the individual plan |
asc_post_subscription_group — create the container every subscription must live in. A customer can hold only one active subscription per group, so mutually exclusive plans (Monthly vs Yearly) belong in the *same* groupasc_patch_subscription_group — rename (referenceName is the only mutable attribute; groups cannot move between apps)asc_delete_subscription_group — lists the group's subscriptions first and refuses client-side naming the specific products that block the delete, instead of letting Apple return a bare 409asc_post_subscription — create an auto-renewable subscription. `productId` is permanent: it cannot be changed, and Apple never lets it be reused on the account — not even after the subscription is deleted. subscriptionPeriod is optional at create but required before submission; the new product starts in MISSING_METADATA and the success message lists the remaining stepsasc_patch_subscription — name, subscriptionPeriod, familySharable, reviewNote, groupLevel. productId has no codepath here by construction. Nested offer/price arrays are deliberately unsupported — their wire semantic is *replace*, so a caller passing one offer would silently delete the rest; use the dedicated offer and price toolsasc_delete_subscription — pre-checks state and refuses for products under review or ever approved, pointing at asc_post_subscription_availability as the way to stop selling a live productThe customer-facing group heading — what the App Store renders above the plan choices, and what shows in Settings → Subscriptions. A group with no localizations cannot be submitted.
asc_list_subscription_group_localizations / asc_get_subscription_group_localizationasc_post_subscription_group_localization — name + locale, plus optional customAppName (overrides how the *app* name reads inside the subscription sheet; usually omit). Wire gotcha handled: the parent relationship key is subscriptionGroup, while Subscription calls the same parent groupasc_patch_subscription_group_localization — name / customAppName; locale is the immutable lookup keyasc_delete_subscription_group_localizationasc_post_subscription_price — set the price for one territory, either the opening price or a scheduled change. Order matters, and both steps are confirmed live: territory availability → undated baseline → dated changes.ENTITY_ERROR.RELATIONSHIP.INVALID → /data/relationships/subscriptionPricePoint/id). The price point is fine; Apple just can't price a territory the product isn't sold in. The tool translates both of these rather than passing the raw 409 through.preserveCurrentPrice defaults to true on a dated change and is omitted on a baseline, where there's no existing cohort to grandfather. The created row reads preserved: false until a newer price supersedes it; that is expected, not a grandfathering failureasc_delete_subscription_price — cancel a pending scheduled changeasc_list_app_prices — current price schedule for an app, splitting manual overrides from auto-derived prices and surfacing the base territoryasc_list_app_price_points — valid Apple price tiers for an app in a given territory (~600+ tiers per territory). Pass nearAmount (target price) and optional nearCount (default 10) to narrow the response to the nearest tiers — Apple does not support a near-amount filter server-side, so the full list is still paginated but only the nearest tiers are surfaced.asc_post_app_price_schedule — replace the entire price schedule (whole-schedule replace, NOT a merge — matches Apple's API). Pre-flight refuses unless at least one entry targets the base territory with no startDate, and requires explicit acknowledgeReplacesAll: true. A separate acknowledgeDeletesScheduledIfBaseChanges ack is required when changing the base territory (Apple wipes pending scheduled changes on base-change). Apps have no grandfather mechanism — new schedules activate atomically at each entry's startDate.asc_list_iaps — list IAPs for an app (v2 surface only — auto-renewable subscriptions are covered by the Subscriptions tools above). Filterable by inAppPurchaseType and state. If this returns zero rows for an app you know has IAPs, the IAPs may be legacy-only and need to be migrated in the App Store Connect web UI before they appear here.asc_get_iap — fetch a single IAP by ID.asc_list_iap_prices — current price schedule for an IAP (same shape as app prices: manual overrides + auto-derived + base territory).asc_list_iap_price_points — valid Apple price tiers for an IAP in a given territory. Same nearAmount / nearCount narrowing as the app and subscription price-point tools.asc_post_iap_price_schedule — replace the entire IAP price schedule (same whole-schedule replace semantics as asc_post_app_price_schedule: acknowledgeReplacesAll: true, base-territory entry with no startDate, base-change ack required). No grandfather mechanism — same as apps.asc_post_iap — create a consumable, non-consumable or non-renewing-subscription IAP. `productId` is permanent and never reusable on the account, even after a delete. The new IAP starts in MISSING_METADATA; the success message lists the remaining stepsasc_patch_iap — name (internal), reviewNote, familySharable; pass null to clear. productId and inAppPurchaseType are immutable and never sNur der Anfang wird gezeigt; den Rest findest du im Repo