npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@thatfactory/app-store-connect-mcp

v0.1.0

Published

Local stdio MCP server for reviewed App Store Connect repository synchronization.

Readme

app-store-connect-mcp

MCP server for managing Apple's App Store Connect from a version-controlled AppStore/ directory. 🏪

It lets MCP-capable agents validate listing content, inspect App Store Connect, plan exact changes, and apply approved updates through Apple's documented APIs.

Features

| Feature | Tool(s) | | --- | --- | | Validate an AppStore/ directory | validate_repository | | Discover apps and read exact version state | list_apps, get_app_store_state | | Export existing App Store state | export_app_store_state | | Prepare a missing app record for manual creation | prepare_app_record | | Inspect bundle IDs, capabilities, and Xcode targets | get_bundle_id_state, inspect_xcode_project | | Plan provisioning and localized metadata changes | plan_provisioning_changes, plan_metadata_changes | | Plan screenshot and commerce changes | plan_screenshot_changes, plan_commerce_changes | | Manage certificates, devices, and profiles | get_provisioning_resources, plan_signing_changes, download_signing_artifact | | Apply an approved plan and inspect recovery state | apply_plan, get_operation_status | | Check readiness and submit a prepared version | check_release_readiness, plan_submission, submit_for_review |

Changes are planned before they are applied. Omitted fields remain untouched, repeated synchronization converges to no changes, and ordinary synchronization cannot submit an app for review.

Requirements

  • Node.js 24 or later
  • An MCP client
  • A local app repository accessible to the server
  • App Store Connect API credentials for remote operations
  • macOS with an Apple Swift toolchain for screenshot validation and Xcode inspection

Offline repository validation does not require Apple credentials.

Environment Variables

Primary names:

  • APPSTORE_CONNECT_API_KEY_ID
  • APPSTORE_CONNECT_API_ISSUER_ID
  • APPSTORE_CONNECT_API_KEY_CONTENT

Compatibility aliases:

  • APP_STORE_KEY_ID
  • APP_STORE_ISSUER_ID
  • APP_STORE_PRIVATE_KEY

The private key can be literal multiline PEM content or a string with escaped \\n. Supply credentials through the MCP host or process environment; the server does not load repository .env files.

Claude Setup

claude mcp add app-store-connect \
  --env APPSTORE_CONNECT_API_KEY_ID="$APPSTORE_CONNECT_API_KEY_ID" \
  --env APPSTORE_CONNECT_API_ISSUER_ID="$APPSTORE_CONNECT_API_ISSUER_ID" \
  --env APPSTORE_CONNECT_API_KEY_CONTENT="$APPSTORE_CONNECT_API_KEY_CONTENT" \
  -- npx -y @thatfactory/app-store-connect-mcp \
  --allowed-root /absolute/path/to/app-repository

Codex Setup

codex mcp add app-store-connect \
  --env APPSTORE_CONNECT_API_KEY_ID="$APPSTORE_CONNECT_API_KEY_ID" \
  --env APPSTORE_CONNECT_API_ISSUER_ID="$APPSTORE_CONNECT_API_ISSUER_ID" \
  --env APPSTORE_CONNECT_API_KEY_CONTENT="$APPSTORE_CONNECT_API_KEY_CONTENT" \
  -- npx -y @thatfactory/app-store-connect-mcp \
  --allowed-root /absolute/path/to/app-repository

The server starts without remote write access. Add --allow-writes to permit approved plans. Add --allow-submission together with --allow-writes only when review submission is intended.

Available Tools

  • get_capabilities()
  • validate_repository()
  • list_apps()
  • get_app_store_state()
  • export_app_store_state()
  • prepare_app_record()
  • apply_plan()
  • get_operation_status()
  • get_bundle_id_state()
  • inspect_xcode_project()
  • plan_provisioning_changes()
  • plan_metadata_changes()
  • plan_screenshot_changes()
  • plan_commerce_changes()
  • get_provisioning_resources()
  • plan_signing_changes()
  • download_signing_artifact()
  • check_release_readiness()
  • plan_submission()
  • submit_for_review()

Use get_capabilities for the packaged implementation contract and each tool's MCP schema for its complete input shape.

Example Prompts

Export the current App Store information for bundle ID com.example.app into a new AppStore directory. Do not overwrite existing files.
Validate AppStore, then plan the German and French metadata for macOS version 2.0. Leave English, pricing, screenshots, and submission unchanged.
Plan the screenshots listed for version 2.0 in every configured locale. Show missing files, ordering changes, and removals before applying anything.
Inspect the Release configuration of my app target and propose missing bundle IDs or capabilities. Do not register anything yet.
Check whether macOS version 2.0 is ready for review and list every manual requirement that remains.

Using the AppStore Directory

The server reads listing content, review information, commerce choices, provisioning declarations, and reusable screenshot sources from AppStore/. See the format specification for the directory layout, supported locales, fields, defaults, secret references, and screenshot ordering.

The initial app record must be created in App Store Connect when one does not exist. The server can prepare the required values, but registering a bundle ID does not create the app record. App privacy, age ratings, export compliance, agreements, and regional obligations also remain explicit owner tasks.

Plans are bound to local inputs and relevant remote state. Review the digest and operation IDs returned by a planning tool before calling apply_plan. If an operation reports outcomeUnknown, inspect it with get_operation_status instead of replaying the write.

More detail is available in metadata synchronization, screenshot synchronization, commerce, provisioning and Xcode inspection, signing, submission, and plan recovery.

Local Development

npm ci
npm run check

Run the built server locally with:

npm run build
node dist/index.js --allowed-root /absolute/path/to/app-repository

The package is prepared for its initial npm release but is not published. See Release for maintainer instructions.

This is an independent project and is not affiliated with or endorsed by Apple.