Skip to main content
Glama

app-store-connect-mcp

MCP server for managing Apple's App Store Connect. 📦

Status: offline validation implemented; not published. A source build exposes get_capabilities, validate_repository, documentation, and eight generated JSON Schemas. Authentication and bounded Apple transport have automated tests; discovery and all mutations remain pending. The intended first-release features below are not yet available.

Keep App Store metadata and localized screenshot sources beside your application code. Let an MCP-capable agent inspect the account, validate the repository, show a concrete change plan, and apply the approved changes through Apple's documented APIs.

Intended first release

  • Register bundle IDs and reconcile explicitly requested capabilities. Inspect an Xcode project to propose the identifiers and capabilities it needs.

  • Discover existing App Store app records, prepare the manual bootstrap for a missing record, and create editable platform versions.

  • Synchronize localized names, subtitles, descriptions, keywords, support URLs, privacy-policy URLs, and other supported listing fields.

  • Manage version-wide copyright and App Review contact information and notes.

  • Upload, verify, order, and reconcile localized screenshots for a selected version and display type, using reusable source files in AppStore/assets/.

  • Configure an explicitly managed base price and storefront availability. New configuration templates start free and request all current territories.

  • Provide explicit certificate, device, and provisioning-profile workflows without automatic certificate revocation or private-key custody.

  • Check submission readiness, select an already uploaded build, and submit a selected version only through a separate approved submission operation.

An unchanged second sync must produce no writes. Omitted fields remain untouched. A regular metadata sync must never submit or release an app.

Related MCP server: App Store Connect MCP Server

Boundaries

The initial App Store app record requires a manual bootstrap unless a documented public creation endpoint is verified during implementation. This is distinct from registering a bundle ID or creating a version. See API capabilities.

Media Manager is not treated as a separate cloud library. Files are assigned to version-localization screenshot sets. Reuse between versions means reusing repository paths and reconciling each destination, not assuming a screenshot ID can have several parents.

Uploading a privacy-policy URL does not complete Apple's privacy questionnaire. Builds, age ratings, export-compliance declarations, agreements, and regional requirements can still block submission. The server must report those blockers rather than invent answers.

Intended setup

Runtime target: Node.js 24 LTS. Xcode inspection is macOS-only; ordinary API and manifest operations should also work on Linux. A local checkout of the app repository must be accessible to the server process.

After publication, the intended MCP launch is:

npx -y @thatfactory/app-store-connect-mcp --allowed-root /absolute/path/to/app-repository

This is read-only with respect to Apple. To permit approved write plans, start it with --allow-writes. Add --allow-submission separately only when review submission is intended. Neither flag removes plan validation or the host's responsibility to obtain user approval.

Use the same credentials as xcode-cloud-mcp:

Primary environment variable

Compatibility alias

APPSTORE_CONNECT_API_KEY_ID

APP_STORE_KEY_ID

APPSTORE_CONNECT_API_ISSUER_ID

APP_STORE_ISSUER_ID

APPSTORE_CONNECT_API_KEY_CONTENT

APP_STORE_PRIVATE_KEY

The private key accepts literal multiline PEM or escaped \n. A present primary variable wins over its alias; malformed or blank primary values fail clearly rather than silently selecting a different identity. The server does not read a repository .env automatically. Supply credentials through the MCP host or the process environment.

Credential compatibility does not imply permission compatibility. A key that can read Xcode Cloud might lack permission for provisioning or app metadata. The server reports authorization failures with the affected resource and operation.

Repository layout

AppStore/
  app.json
  commerce.json
  provisioning.json                 # optional
  info/
    en-US.json
    de-DE.json
    fr-FR.json
    ja.json
    pt-BR.json
  versions/
    macOS/
      1.0/
        version.json
        review.json
        review-notes.txt
        localizations/
          en-US/
            metadata.json
            description.txt
            keywords.txt
            screenshots.json
          ...
  assets/
    screenshots/
      macOS/
        en-US/
          01-overview.png
          02-weekly-budget.png
        ...

See the format specification for defaults, optional files, localization rules, screenshot ordering, and safe secret references. The server reads the local checkout; it neither clones repositories nor commits or pushes changes by itself.

Example agent requests

Import Headroom's existing App Store information into a new local export directory. Do not overwrite my repository files.

Validate AppStore, then plan the German, French, Japanese, and Brazilian Portuguese metadata for macOS version 1.0. Leave English, pricing, screenshots, and submission unchanged.

Plan the screenshots listed for version 1.0 in every configured locale. Show missing files, ordering changes, and any removals before applying.

Inspect the app target and propose any missing bundle IDs or portal capabilities. Do not change the Xcode project or register anything yet.

Development and documentation

Run npm ci and npm run check for strict type checking, tests, build, and a clean packed-package MCP smoke test. Run node dist/index.js --help for local launch options. CI and nightly execute the same checks on Node 24 without Apple credentials.

Product explains the longer-term vision. Architecture defines internal boundaries. Execution plan breaks implementation into reviewable changes. Sources records the research baseline.

Planned distribution: public scoped npm package, MIT license, GitHub release publishing with trusted publishing where configured. Keep all customer repositories, credentials, exported review information, and signing artifacts out of the package tarball.

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

Offline validation

Start with --allowed-root /absolute/path/to/checkout, then call validate_repository with the absolute AppStore directory as root. Optional domains, locales, platform (directory spelling, such as macOS) and version limit the check. Domains: appInfo, versionMetadata, version, review, screenshots, commerce, provisioning. With no selector, validation considers declared platforms and discovered versions.

The initial locale registry covers en-US, de-DE, fr-FR, ja and pt-BR. Other Apple-supported locales require registry expansion. Validation preserves omission/null/empty values; it does not determine creation completeness or release readiness. JSON schema checks, paths, text budgets and screenshot manifests are implemented; decoded image validation remains Phase 07. Review environment references are field-allowlisted and resolved values never appear in results. Character checks use conservative UTF-16 units and report code points/graphemes/UTF-8 bytes for prose. No URLs are fetched.

The validator bounds each text/JSON file to 1 MiB, each referenced asset to 32 MiB, total read bytes to 64 MiB and files to 2000 per request. Results include up to 200 diagnostics and explicitly report truncation. Use narrower selectors for larger roots. The synthetic example validates structurally but is not a ready-to-submit listing. Run npm run schemas:check to verify published schemas match the runtime validators.

Available Tools

2 tools
get_capabilitiesA
Read-onlyIdempotent

Report implemented features and configured safety gates without credentials or network access.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable context beyond annotations by guaranteeing no network access and clarifying that it reports configured safety gates, not live system state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-structured sentence that leads with the action and object, then adds the key operational constraints. Every word earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only capability reporting tool, the description fully covers what the tool does and its operational boundaries. An agent can invoke it confidently without needing output format details, especially given the rich annotation context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the description carries no parameter burden. The schema already covers everything (100% coverage trivially), and the baseline for 0 params is 4; the description appropriately focuses on behavior rather than parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Report') and a clear resource ('implemented features and configured safety gates'). The added constraint 'without credentials or network access' further distinguishes it from potential siblings like validate_repository, making the tool's identity unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is a safe, zero-setup introspection call (no credentials/network needed), which gives context for when to use it. However, it does not explicitly name alternatives or state when not to use this tool, despite the sibling validate_repository being present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_repositoryA
Read-onlyIdempotent

Validate selected AppStore domains/locales offline. Does not mutate files, execute project tools, or require Apple credentials. Omitted fields remain unmanaged.

ParametersJSON Schema
NameRequiredDescriptionDefault
rootYes
domainsNo
localesNo
versionNo
platformNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds meaningful context beyond that: it operates offline, does not execute project tools, requires no Apple credentials, and omitted fields remain unmanaged. This gives the agent important behavioral information that structured annotations alone do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary action and scope are front-loaded, followed by compact behavioral constraints. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is strong on safety and environmental context (offline, non-mutating, no credentials) but weaker on operational completeness. With no output schema and zero schema description coverage, it should also clarify what validation results look like and how the five parameters relate to the validation scope. The missing parameter detail and output expectations keep this from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It references 'domains/locales' generically but does not explain the required 'root' parameter, nor 'version' or 'platform', and gives no guidance on how omitted fields relate to the schema. The phrase 'Omitted fields remain unmanaged' hints at behavior but does not clarify parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Validate') and identifies the resource scope ('selected AppStore domains/locales') plus the offline nature of the operation. It is clear enough to differentiate from a general validation tool, though it does not fully explain what 'validate' means in terms of checks or output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: offline validation without Apple credentials, and it explicitly states what the tool does not do (mutate files, execute project tools). It stops short of naming an alternative tool or giving an explicit when-not-to-use statement, so it loses one point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv1.0.0
    • First observedget_capabilities
    • First observedvalidate_repository

TDQS

A3.9/5.0
Disambiguation5/5

The two tools are clearly distinct: one reports server capabilities/safety gates, while the other performs an offline validation task on AppStore domains/locales. There is no functional overlap or ambiguity between them.

Naming Consistency5/5

Both tools use a consistent verb_noun snake_case pattern: get_capabilities and validate_repository. Names are predictable, descriptive, and match their behavior.

Tool Count3/5

Two tools is on the thin side and feels more like a small utility helper than a full App Store Connect server. Each tool has a clear purpose, but the count is borderline for the apparent domain.

Completeness2/5

Despite the App Store Connect name, the tool surface is extremely limited and lacks expected operations such as managing apps, builds, releases, or authentication. It only covers capability introspection and offline repository validation, which leaves major gaps for real App Store Connect workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI agents to manage App Store Connect apps, including registering bundle IDs, uploading metadata and screenshots, setting age ratings, managing TestFlight groups and testers, and submitting apps for review.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that drives the full App Store release cycle for iOS and macOS apps: version bump, archive + TestFlight upload, metadata, review submission, and status.
    8
    50
    MIT

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/thatfactory/app-store-connect-mcp'

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