app-publish-mcp is a unified MCP (Model Context Protocol) server for managing App Store Connect and Google Play Console app publishing-related work through an AI assistant. It provides 91 tools, covering store-side operations such as app listings, screenshots, releases, reviews, and submissions.
Purpose: Use this MCP when you need to update app store descriptions and keywords, upload screenshots, submit a new version for review, check review status, reply to Google Play user reviews, create staged rollouts, manage TestFlight testers, set up in-app purchases, or register development devices.
Publishing boundaries: You need to provide a ready and correctly signed Android .aab/.apk or Apple .ipa file. The MCP handles the supported store-side work from upload to metadata, testing, review submission, and release, but it does not compile apps, does not hold signing keys, and does not replace Xcode, Gradle, or CI. The first release of a new app still requires manual setup in App Store Connect or Play Console, including developer registration, agreements, the required app record, API access, signing, tax and banking information, and policy, privacy, or content declarations. For an existing, fully configured Android app, a signed AAB is usually enough for the MCP to run update workflows. A Google edit commit only submits the requested changes; store review, managed publishing, or staged rollout may still delay public visibility.
Main capabilities: Apple App Store Connect provides 98 tools, and Google Play Console provides 49 tools. On the Apple side, it supports pricing management (apple_get_pricing follows manual and automatic price pages; apple_set_price submits a complete manual price sheet), provisioning resources (Bundle ID, capabilities, certificates, provisioning profiles, devices, requiring a team API key with appropriate access), TestFlight internal tester management, and more. On the Google side, it covers review replies (the associated service account must have the "Reply to reviews" permission, otherwise it returns an empty array without error), one-time products (monetization.onetimeproducts), and more.
Screenshots and assets: Apple screenshot upload requires first obtaining the asset library ID through apple_get_asset_library, then using apple_get_asset_specs to select the current spec, compatible placement type, and placement group; you should not guess device sizes or group identifiers. apple_upload_asset accepts assetLibraryId, mediaType (IMAGE or VIDEO), filePath, and expectedSpecId, validates the file extension/size, uploads all chunks, submits, and by default waits for processing. apple_create_placement associates assets with a localization ID; apple_reorder_placements reorders them by placement group order; Apple has deprecated the legacy screenshot endpoint (App Store Connect API 4.5.1), and the four existing screenshot tools are retained only for compatibility.
Usage: Apple credentials require creating an API key with the App Manager role in App Store Connect > Keys, downloading the .p8, and recording the Key ID and Issuer ID; team keys are used for provisioning resources, while individual keys require setting APPLE_KEY_TYPE=INDIVIDUAL and omitting the Issuer ID. Google credentials require enabling the Google Play Android Developer API and choosing service account or OAuth authentication; the OAuth command stores the refresh token in ~/.app-publish-mcp/google.json. The server automatically loads the .env in the project root, and environment variables provided by the shell or MCP host take precedence. It can be added to ~/.claude/settings.local.json.
Applicable scenarios: publishing updates for iOS and Android apps, screenshot management, version submission and review tracking, review replies, tester management, in-app purchases and subscription setup, and more.
Limitations: does not compile apps, does not hold signing keys, and does not replace Xcode, Gradle, or CI; the first release requires manual setup; a Google edit commit does not guarantee immediate public availability; prices are expressed in micro-units and converted through the Play API Money structure; some features depend on specific permissions or API version, when missing, may return an empty result instead of reporting an error.