{"_id":"@algosoftltd/asc-mcp","_rev":"2-7b33616d0b52326b5fefa814a222c774","name":"@algosoftltd/asc-mcp","dist-tags":{"latest":"0.2.1"},"versions":{"0.2.0":{"name":"@algosoftltd/asc-mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","app-store-connect","algosoft"],"author":{"name":"AlgoSoft Technologies Limited"},"license":"MIT","_id":"@algosoftltd/asc-mcp@0.2.0","maintainers":[{"name":"mubin986","email":"mubin986@gmail.com"}],"homepage":"https://github.com/algosoftbd/algosoft-os#readme","bugs":{"url":"https://github.com/algosoftbd/algosoft-os/issues"},"bin":{"algosoft-asc-mcp":"dist/index.js"},"dist":{"shasum":"d64d4c536f539e71977aa3dca8891fd181a4a31e","tarball":"https://registry.npmjs.org/@algosoftltd/asc-mcp/-/asc-mcp-0.2.0.tgz","fileCount":5,"integrity":"sha512-O93L3jE97PRU7uY8hJz7FTJzO6rFOAjaGC58VSjTDoJ1ypZarsOkAYXAXlTwDQiElgw857/K5MMLSVzfnzs+/A==","signatures":[{"sig":"MEQCIDgJZQvLGVyTt3hkGAWWow8y4+p/UJ4PJmjNtxYcwLNKAiBYDFC16RGnVoPzblRjS7hJSfrYOqCYQWOyOhdMT/JqSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2628445},"type":"module","engines":{"node":">=20"},"gitHead":"86c66b5d455afdc28145a5e00597f89745e7de81","scripts":{"build":"tsup","prepublishOnly":"npm run build"},"_npmUser":{"name":"mubin986","email":"mubin986@gmail.com"},"repository":{"url":"git+https://github.com/algosoftbd/algosoft-os.git","type":"git","directory":"apps/asc-mcp"},"_npmVersion":"10.8.2","description":"App Store Connect MCP server — 95 tools across apps, listings, pricing, subscriptions, analytics and reports. Runs server-side for AlgoSoft OS.","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.0","jose":"^5.2.0","tsup":"^8.0.0","undici":"^6.6.0","typescript":"^5.9.0","@modelcontextprotocol/sdk":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/asc-mcp_0.2.0_1786713351669_0.874857194807231","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@algosoftltd/asc-mcp","version":"0.2.1","description":"App Store Connect MCP server — 95 tools across apps, listings, pricing, subscriptions, analytics and reports. Runs server-side for AlgoSoft OS.","license":"MIT","type":"module","bin":{"algosoft-asc-mcp":"dist/index.js"},"engines":{"node":">=20"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/algosoftbd/algosoft-os.git","directory":"apps/asc-mcp"},"keywords":["mcp","model-context-protocol","app-store-connect","algosoft"],"scripts":{"build":"tsup","prepublishOnly":"npm run build"},"devDependencies":{"@modelcontextprotocol/sdk":"^1.0.0","jose":"^5.2.0","tsup":"^8.0.0","typescript":"^5.9.0","undici":"^6.6.0","zod":"^4.0.0"},"author":{"name":"AlgoSoft Technologies Limited"},"_id":"@algosoftltd/asc-mcp@0.2.1","gitHead":"eb08c4b7eae62b9b56dd166550db4f9ac1859a86","bugs":{"url":"https://github.com/algosoftbd/algosoft-os/issues"},"homepage":"https://github.com/algosoftbd/algosoft-os#readme","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-u/rcZvXtG4x8m0ajjN8S1eNCtPxbl9BSstTN0mPV4yEcdYg23ZVP0eaC6fdQ8Qw4sxmIy53PdzRhXVu4W7fRfg==","shasum":"4ed5f37b86b8b96ba3dcf1c422c141c73830702e","tarball":"https://registry.npmjs.org/@algosoftltd/asc-mcp/-/asc-mcp-0.2.1.tgz","fileCount":5,"unpackedSize":2631510,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDX7KQbm56/D4b1Ug+l8NkR1JUvekJmJTHYF5378BA+tgIhAMXkmHbDFSdfPQl76aYlPKbB8HUxVhxMXeuv/DY6ajLO"}]},"_npmUser":{"name":"mubin986","email":"mubin986@gmail.com"},"directories":{},"maintainers":[{"name":"mubin986","email":"mubin986@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/asc-mcp_0.2.1_1786713894171_0.37127704967162134"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-14T13:15:51.485Z","modified":"2026-08-14T13:24:54.542Z","0.2.0":"2026-08-14T13:15:51.853Z","0.2.1":"2026-08-14T13:24:54.337Z"},"bugs":{"url":"https://github.com/algosoftbd/algosoft-os/issues"},"author":{"name":"AlgoSoft Technologies Limited"},"license":"MIT","homepage":"https://github.com/algosoftbd/algosoft-os#readme","keywords":["mcp","model-context-protocol","app-store-connect","algosoft"],"repository":{"type":"git","url":"git+https://github.com/algosoftbd/algosoft-os.git","directory":"apps/asc-mcp"},"description":"App Store Connect MCP server — 95 tools across apps, listings, pricing, subscriptions, analytics and reports. Runs server-side for AlgoSoft OS.","maintainers":[{"name":"mubin986","email":"mubin986@gmail.com"}],"readme":"# @algosoftltd/asc-mcp\n\nAn [MCP](https://modelcontextprotocol.io) server for Apple's **App Store Connect API**. 95 tools\ncovering apps, versions, localizations, screenshots, builds, TestFlight, devices, users, bundle ids,\npricing, availability, subscriptions, in-app purchases, promotional offers, analytics reports, sales\nand finance reports, performance metrics and diagnostics.\n\nSpeaks MCP over stdio, so it works with any MCP client — Claude Desktop, Claude Code, or your own\nagent.\n\n```bash\nnpx @algosoftltd/asc-mcp\n```\n\n## Setup\n\nYou need an App Store Connect API key. In App Store Connect go to **Users and Access →\nIntegrations → App Store Connect API**, create a key, and note three things: the **issuer id** (a\nUUID shown above the key list), the **key id**, and the **`.p8` file** you download once and cannot\ndownload again.\n\nThen set three environment variables:\n\n| Variable | Value |\n| --- | --- |\n| `APP_STORE_CONNECT_ISSUER_ID` | The issuer UUID |\n| `APP_STORE_CONNECT_KEY_ID` | The key id |\n| `APP_STORE_CONNECT_P8_CONTENT` | The **contents** of the `.p8` file, not a path |\n\n`P8_CONTENT` takes the key material itself — including the `-----BEGIN PRIVATE KEY-----` line — so a\nhost that keeps its secrets in a vault or an encrypted store never has to write them to disk for\nthis process to read.\n\n### Claude Desktop / Claude Code\n\n```json\n{\n  \"mcpServers\": {\n    \"app-store-connect\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@algosoftltd/asc-mcp\"],\n      \"env\": {\n        \"APP_STORE_CONNECT_ISSUER_ID\": \"your-issuer-uuid\",\n        \"APP_STORE_CONNECT_KEY_ID\": \"your-key-id\",\n        \"APP_STORE_CONNECT_P8_CONTENT\": \"-----BEGIN PRIVATE KEY-----\\nMIG…\\n-----END PRIVATE KEY-----\"\n      }\n    }\n  }\n}\n```\n\n## Choose the key's role deliberately\n\nApp Store Connect API keys are **role-scoped**, and that is the real control over what this server\ncan do. A key created with the *Admin* role can do everything below, including replacing an app's\nentire price schedule and submitting an in-app purchase for review. A key created with *Finance* or\n*Developer* can do far less.\n\nThis server exposes the API; it does not narrow it. **Generate the key with the narrowest role that\nanswers the questions you actually want to ask**, and treat the `.p8` as the credential it is.\n\n## Tools\n\n**Some of these write.** They are marked ✎ below. `set_app_prices` in particular *replaces* an\napp's whole price schedule — it is not a patch, and it needs every territory's price in the request.\nRead a tool's own description (every tool ships one, returned by `tools/list`) before wiring it into\nanything automatic.\n\n### Apps and versions\n`list_apps` · `get_app` · `list_app_versions` · `get_app_version` · ✎ `create_app_version`\n\n### Listing metadata\n`list_app_infos` · `list_app_info_localizations` · ✎ `update_app_info_localization`\n`list_version_localizations` · `get_version_localization` · ✎ `create_version_localization` ·\n✎ `update_version_localization` · ✎ `delete_version_localization`\n\n### Screenshots\n`list_screenshot_sets` · `list_screenshots` · ✎ `upload_screenshot`\n\n### Pricing and availability\n`list_territories` · `list_app_price_points` · `get_price_point_equalizations` ·\n`get_app_price_schedule` · `get_app_availability` · `list_app_categories` · ✎ `set_app_prices`\n\n### Subscriptions\n`list_subscription_groups` · `get_subscription_group` · ✎ `create_subscription_group` ·\n✎ `update_subscription_group` · `list_subscription_group_localizations` ·\n`get_subscription_group_localization` · ✎ `create_subscription_group_localization` ·\n✎ `update_subscription_group_localization` · `list_subscriptions` · `get_subscription` ·\n✎ `create_subscription` · ✎ `update_subscription` · ✎ `delete_subscription` ·\n`list_subscription_localizations` · ✎ `create_subscription_localization` ·\n✎ `update_subscription_localization` · ✎ `delete_subscription_localization` ·\n`list_subscription_price_points` · `list_subscription_prices` · ✎ `create_subscription_price` ·\n`get_subscription_availability` · ✎ `set_subscription_availability` · `list_promotional_offers` ·\n✎ `create_promotional_offer` · ✎ `update_promotional_offer` · ✎ `delete_promotional_offer` ·\n`list_promotional_offer_prices`\n\n### In-app purchases\n`list_in_app_purchases` · `get_in_app_purchase` · ✎ `create_in_app_purchase` ·\n✎ `update_in_app_purchase` · ✎ `delete_in_app_purchase` · `list_in_app_purchase_localizations` ·\n✎ `create_in_app_purchase_localization` · ✎ `update_in_app_purchase_localization` ·\n✎ `delete_in_app_purchase_localization` · `list_in_app_purchase_price_points` ·\n`list_in_app_purchase_prices` · `get_in_app_purchase_price_point_equalizations` ·\n✎ `set_in_app_purchase_price` · `get_in_app_purchase_availability` ·\n✎ `set_in_app_purchase_availability` · ✎ `submit_in_app_purchase_for_review`\n\n### Analytics reports\n`list_analytics_report_requests` · `get_analytics_report_request` ·\n✎ `create_analytics_report_request` · ✎ `delete_analytics_report_request` ·\n`list_analytics_reports` · `list_analytics_report_instances` · `list_analytics_report_segments` ·\n`download_analytics_report_segment`\n\n> Analytics is **not a query**. You create a standing report *request* against an app; Apple then\n> generates report instances on its own schedule from that day forward, and you read segments\n> afterwards. It is **not retroactive** — nothing before the request exists — and the first data\n> typically appears 24–48 hours later. `create_analytics_report_request` therefore opens an ongoing\n> obligation on your Apple account, which is why it is marked as a write.\n\n### Sales and finance\n`get_sales_report` · `get_finance_report`\n\n> These need a **vendor number**, which is not the same as an app id or a team id. Find it in App\n> Store Connect under Payments and Financial Reports. Finance reports are only available for closed\n> fiscal periods.\n\n### TestFlight\n`list_beta_groups` · `list_beta_testers` · ✎ `add_beta_tester` · ✎ `remove_beta_tester`\n\n### Builds and performance\n`list_builds` · `get_build` · `get_app_perf_metrics` · `get_build_perf_metrics` ·\n`list_diagnostic_signatures` · `list_diagnostic_logs`\n\n### Devices, users, bundle ids\n`list_devices` · `get_device` · `list_users` · `get_user` · `list_bundle_ids` · `get_bundle_id` ·\n✎ `create_bundle_id` · ✎ `update_bundle_id` · ✎ `delete_bundle_id`\n\n## Development\n\n```bash\nnpm install\nnpm run build     # one self-contained ESM file in dist/\nnode dist/index.js\n```\n\nEvery dependency is bundled into the output, so the published artifact is a single file with no\nruntime dependency tree — which matters for a process that is handed a private key.\n\nThere is no `typecheck` script. The build and the release smoke test are the gates: the smoke test\nstarts the built server, completes an MCP handshake, calls `tools/list`, and fails if the catalogue\nhas collapsed or any tool is missing a name or an input schema.\n\n## Licence\n\nMIT — see [LICENSE](LICENSE). Copyright © 2026 AlgoSoft Technologies Limited; the file also carries\nthe notice from the MIT-licensed prior work this began as, which the licence requires be kept.\n","readmeFilename":"README.md"}