PluginBench
MCP Server
Active
MIT

io.github.mikusnuz/app-publish MCP Server

io.github.mikusnuz/app-publish

Unified MCP server for App Store Connect and Google Play Console — manage iOS and Android app releases, metadata, and reviews from Claude.

What is the io.github.mikusnuz/app-publish MCP server?

The app-publish-mcp server is a unified MCP interface to Apple App Store Connect and Google Play Console. It exposes 86 Apple tools and 49 Google tools for managing app listings, screenshots, builds, versions, reviews, in-app purchases, subscriptions, TestFlight beta testing, and release workflows — handling store-side work from upload through submission and release.

This MCP server lets you automate app publishing tasks across both iOS and Android platforms. You provide a signed release artifact (.ipa, .aab, or .apk), and the server handles metadata updates, screenshot management, build uploads, version creation, review submission, phased releases, in-app products, subscriptions, and customer review responses — all from your AI assistant without needing to manually navigate App Store Connect or Play Console.

How to install io.github.mikusnuz/app-publish

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Environment / auth
  • APPLE_KEY_ID
    secret

    Apple App Store Connect API Key ID

  • APPLE_ISSUER_ID
    secret

    Apple App Store Connect Issuer ID

  • APPLE_P8_PATH

    Path to Apple AuthKey .p8 file

  • GOOGLE_SERVICE_ACCOUNT_PATH

    Path to Google Play service account JSON key file

~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "app-publish": {
      "command": "npx",
      "args": [
        "-y",
        "app-publish-mcp"
      ],
      "env": {
        "APPLE_KEY_ID": "<YOUR_APPLE_KEY_ID>",
        "APPLE_ISSUER_ID": "<YOUR_APPLE_ISSUER_ID>",
        "APPLE_P8_PATH": "<YOUR_APPLE_P8_PATH>",
        "GOOGLE_SERVICE_ACCOUNT_PATH": "<YOUR_GOOGLE_SERVICE_ACCOUNT_PATH>"
      }
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • apple_list_apps — List all apps in App Store Connect
  • apple_get_app — Retrieve details for a specific app
  • apple_update_app — Update app information
  • apple_create_version — Create a new app version
  • apple_update_version — Update version details
  • apple_list_versions — List all versions for an app
  • apple_create_version_localization — Create localized version metadata
  • apple_update_version_localization — Update localized version metadata
  • apple_list_version_localizations — List version localizations
  • apple_update_app_info_localization — Update app info localization
  • apple_list_app_info_localizations — List app info localizations
  • apple_create_screenshot_set — Create a screenshot set for a device type
  • apple_upload_screenshot — Upload a screenshot image
  • apple_delete_screenshot — Delete a screenshot
  • apple_list_screenshot_sets — List screenshot sets
  • apple_upload_build — Upload a signed .ipa file
  • apple_get_build_upload — Check build upload status
  • apple_wait_for_build_upload — Wait for build upload to complete
  • apple_delete_build_upload — Delete a build upload
  • apple_assign_build — Assign a build to a version

Use cases

  • Submit iOS app updates with version metadata, screenshots, builds, and App Review submission
  • Release Android apps with bundle/APK uploads, store listing updates, and Play Console publishing
  • Manage TestFlight beta testing by creating groups, inviting testers, and controlling access
  • Create and manage in-app purchases and subscriptions on both iOS and Android platforms
  • Respond to customer reviews and manage phased releases across both app stores

io.github.mikusnuz/app-publish MCP server FAQ

What is the app-publish-mcp server?

It's an MCP server that connects Claude to Apple App Store Connect and Google Play Console, exposing 86 Apple tools and 49 Google tools for automating app publishing tasks like version creation, build uploads, metadata updates, review submission, and release management.

Is this server free to use?

The server itself is free and open-source (MIT license). You need valid credentials for App Store Connect (Apple API key) and Google Play Console (service account or OAuth), which are free to set up if you already have developer accounts.

How do I install this in Claude or Cursor?

Install via npm (`npm install app-publish-mcp`), set up your Apple and Google credentials in a `.env` file, then add the server to `~/.claude/settings.local.json` with the path to the built index.js and your environment variables.

What credentials do I need?

For Apple: an App Store Connect API key (Team or Individual) with App Manager role and the .p8 file. For Google: either a service account JSON key or OAuth credentials. Both require enabling the respective APIs and granting appropriate permissions.

Can this compile my app or manage signing keys?

No. You must provide a release-ready, correctly signed artifact (.ipa, .aab, or .apk). The server handles store-side work from upload through release but does not compile, sign, or own keys — that's your responsibility via Xcode, Gradle, or CI.

Does this handle the first release of a new app?

No. First releases require manual setup in App Store Connect or Play Console, including developer enrollment, agreements, app records, API access, signing, tax/banking details, and policy declarations. After that, the server can automate updates.

README (reference)

Source of truth, from the repository.

English | 한국어 | 中文 | 日本語

app-publish-mcp

npm version

A unified MCP (Model Context Protocol) server for App Store Connect and Google Play Console. Manage app listings, screenshots, releases, reviews and submissions — all from your AI assistant.

Publishing Boundary

You provide a release-ready, correctly signed Android .aab / .apk or Apple .ipa. The MCP handles supported store-side work from upload through metadata, testing, review submission, and release. It does not compile the app, own signing keys, or 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 enrollment, agreements, app records where required, API access, signing, tax and banking details, and policy, privacy, or content declarations. For an existing, fully configured Android app, a signed AAB is usually enough to let the MCP run the update workflow. A Google edit commit only commits the requested changes; store review, managed publishing, or a staged rollout can delay public availability.

When to Use

Use this MCP when you need to:

  • "Update my app's App Store description and keywords" — modify version localizations, app info localizations
  • "Upload new screenshots for iPhone 16 Pro" — create screenshot sets and upload images
  • "Submit a new version for review" — create version, assign build, set review info, submit
  • "Check the status of my app review" — list versions and check review state
  • "Respond to a user review on Google Play" — list reviews and reply
  • "Create a phased release on Google Play" — create edit, create release on a track, commit
  • "Manage TestFlight beta testers" — create groups, invite testers, manage access
  • "Set up in-app purchases" — create and manage IAPs and subscription groups on both platforms
  • "Register a new device for development" — manage devices, certificates, and provisioning profiles

Features

Apple App Store Connect (86 tools)

CategoryTools
App Managementapple_list_apps, apple_get_next_page, apple_get_app, apple_update_app, apple_get_app_info, apple_update_category
Bundle IDsapple_list_bundle_ids, apple_create_bundle_id
Bundle ID Capabilitiesapple_list_bundle_id_capabilities, apple_enable_capability, apple_disable_capability
Versionsapple_list_versions, apple_create_version, apple_update_version
Version Localizationsapple_list_version_localizations, apple_create_version_localization, apple_update_version_localization
App Info Localizationsapple_list_app_info_localizations, apple_update_app_info_localization
Screenshotsapple_list_screenshot_sets, apple_create_screenshot_set, apple_upload_screenshot, apple_delete_screenshot
Buildsapple_list_builds, apple_get_build_upload, apple_wait_for_build_upload, apple_delete_build_upload, apple_upload_build, apple_set_build_encryption, apple_assign_build
Age Ratingapple_get_age_rating, apple_update_age_rating
Review Infoapple_update_review_detail
Submissionapple_submit_for_review, apple_cancel_submission
Releaseapple_release_version, apple_get_phased_release, apple_create_phased_release, apple_update_phased_release, apple_delete_phased_release
Pricing & Availabilityapple_get_pricing, apple_list_app_price_points, apple_set_price, apple_list_availability, apple_create_availability, apple_update_territory_availability
Customer Reviewsapple_list_reviews, apple_respond_to_review
Certificatesapple_list_certificates, apple_create_certificate, apple_revoke_certificate
Provisioning Profilesapple_list_profiles, apple_create_profile, apple_delete_profile
Devicesapple_list_devices, apple_register_device, apple_update_device
TestFlight Beta Groupsapple_list_beta_groups, apple_create_beta_group, apple_delete_beta_group, apple_add_beta_testers_to_group, apple_remove_beta_testers_from_group
TestFlight Beta Testersapple_list_beta_testers, apple_invite_beta_tester, apple_delete_beta_tester
In-App Purchasesapple_list_iap, apple_create_iap, apple_get_iap, apple_delete_iap
Subscription Groupsapple_list_subscription_groups, apple_create_subscription_group, apple_delete_subscription_group
Accessibility Declarationsapple_list_accessibility_declarations, apple_create_accessibility_declaration, apple_update_accessibility_declaration, apple_delete_accessibility_declaration
Price Pointsapple_get_subscription_price_points, apple_get_iap_price_points
Offer Codesapple_list_subscription_offer_codes, apple_get_subscription_offer_code, apple_create_subscription_offer_code, apple_list_iap_offer_codes, apple_get_iap_offer_code, apple_create_iap_offer_code
Win-Back Offersapple_list_win_back_offers, apple_get_win_back_offer

apple_get_pricing follows all manual and automatic price pages. apple_set_price submits the complete manual price schedule, so include every current or future manual entry that must remain; omitted entries may be removed from the schedule.

Apple provisioning resources — Bundle IDs, capabilities, certificates, profiles, and devices — require a Team API key with suitable access. Individual API keys can be used for supported App Store Connect publishing operations, but not for those provisioning resources. TestFlight internal testers are members of your App Store Connect team, not Apple employees.

Google Play Console (49 tools)

CategoryTools
Edit Lifecyclegoogle_create_edit, google_get_edit, google_commit_edit, google_validate_edit, google_delete_edit
App Detailsgoogle_get_details, google_update_details
Store Listinggoogle_list_listings, google_get_listing, google_update_listing, google_delete_listing
Country Availabilitygoogle_get_country_availability
Testersgoogle_get_testers, google_update_testers
Imagesgoogle_list_images, google_upload_image, google_delete_image, google_delete_all_images
Tracks & Releasesgoogle_list_tracks, google_get_track, google_create_release, google_promote_release, google_halt_release, google_list_release_statuses
Bundle / APKgoogle_list_bundles, google_upload_bundle, google_list_apks, google_upload_apk
Data Safetygoogle_update_data_safety
Reviews¹google_list_reviews, google_get_review, google_reply_to_review
In-App Productsgoogle_list_iap, google_get_iap, google_create_iap, google_update_iap, google_delete_iap
Subscriptionsgoogle_list_subscriptions, google_get_subscription, google_create_subscription, google_activate_subscription_base_plan, google_deactivate_subscription_base_plan
One-time Products²google_list_one_time_products, google_get_one_time_product, google_create_one_time_product, google_update_one_time_product, google_delete_one_time_product, google_activate_purchase_option, google_deactivate_purchase_option

¹ If google_list_reviews returns an empty array for an app that has visible reviews in Play Console, first check that the linked service account has the "Reply to reviews" account permission (Play Console → Users and permissions) — the API does not raise a distinct error for a missing permission, it just returns no results. Also note the endpoint only surfaces recent reviews; use pageToken to page through more.

² One-time Products (monetization.onetimeproducts) is Google Play's newer purchase model for buy/rent items, distinct from the older inappproducts API. Inspect each returned purchase-option state and use the dedicated activate/deactivate tools to change it.

Prompts (2)

PromptDescription
app_release_checklistGuided checklist from signed artifact upload through review, release, and publishing-status checks for iOS and/or Android
app_store_optimizationASO audit that reviews current listing metadata (title, description, keywords, screenshots, localization) and provides actionable improvement recommendations

Resources (2)

URIDescription
app-publish://configCurrent server configuration — connected accounts, auth methods, tool counts
app-publish://supported-platformsAll supported tools grouped by platform with descriptions

Setup

1. Install

npm install
npm run build

2. Apple Credentials

  1. Go to App Store Connect > Keys
  2. Create an API Key with App Manager role
  3. Download the .p8 file
  4. Note the Key ID and, for team keys, the Issuer ID. For an individual key, set APPLE_KEY_TYPE=INDIVIDUAL and omit the issuer ID.
  5. Use a Team API key with suitable access for Bundle ID, certificate, profile, capability, or device tools.

3. Google Credentials

Enable the Google Play Android Developer API, then choose one authentication method:

  • Service account: Create one in Google Cloud Console, download its JSON key, then invite its email and grant the needed app permissions in Play Console under Users and permissions.
  • OAuth: Create a Desktop OAuth client, then run:
app-publish-mcp auth google --client-id=YOUR_ID --client-secret=YOUR_SECRET

The OAuth command stores the refresh token in ~/.app-publish-mcp/google.json; the server loads it automatically. You can instead set GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and GOOGLE_REFRESH_TOKEN explicitly.

4. Configure Environment

cp .env.example .env

Edit .env:

APPLE_KEY_ID=YOUR_KEY_ID
APPLE_KEY_TYPE=TEAM
APPLE_ISSUER_ID=YOUR_ISSUER_ID
APPLE_P8_PATH=/path/to/AuthKey.p8
GOOGLE_SERVICE_ACCOUNT_PATH=/path/to/service-account.json

The server automatically loads .env from the package/project root. Environment variables supplied by the shell or MCP host take precedence. For OAuth variables, see .env.example.

5. Add to Claude Code

Add to ~/.claude/settings.local.json:

{
  "mcpServers": {
    "app-publish-mcp": {
      "command": "node",
      "args": ["/path/to/app-publish-mcp/dist/index.js"],
      "env": {
        "APPLE_KEY_ID": "YOUR_KEY_ID",
        "APPLE_KEY_TYPE": "TEAM",
        "APPLE_ISSUER_ID": "YOUR_ISSUER_ID",
        "APPLE_P8_PATH": "/path/to/AuthKey.p8",
        "GOOGLE_SERVICE_ACCOUNT_PATH": "/path/to/service-account.json"
      }
    }
  }
}

Usage Examples

Submit an iOS app update

1. apple_list_apps → get the app ID
2. apple_create_version / apple_update_version and localization tools → prepare version 1.1.0, release settings, and metadata
3. apple_upload_build → upload the signed IPA and wait for import
   (or resume with apple_get_build_upload / apple_wait_for_build_upload)
   If an ambiguous commit error retains a buildUploadId, inspect it with apple_get_build_upload; when it is AWAITING_UPLOAD or FAILED, delete it with apple_delete_build_upload before uploading again.
4. apple_set_build_encryption → answer export-compliance encryption for the imported build
   (`true` can still require a manual encryption declaration, supporting documents, and appEncryptionDeclaration linkage in App Store Connect.)
5. apple_assign_build → attach the imported build to the version
6. apple_update_review_detail and apple_get_age_rating → verify review metadata
7. apple_submit_for_review → submit for App Review
8. For an update (not a first version), optionally configure a seven-day phased release before release.
9. After approval, use apple_release_version only for PENDING_DEVELOPER_RELEASE; then monitor or manage any phased release.

Release an Android app

1. google_create_edit → start an edit (or google_get_edit to verify a resumed edit)
2. google_list_bundles / google_list_apks → reuse an artifact already in the edit when possible
3. google_upload_bundle / google_upload_apk → upload only when the artifact is missing
4. Listing tools and google_update_data_safety → apply reviewed store changes as needed
5. google_create_release → create the target-track release with the exact versionCodes set
6. google_validate_edit → check for errors
7. google_commit_edit → commit changes for Play processing
8. google_list_release_statuses → inspect review and publishing state after commit

Committing an edit does not guarantee immediate public availability. Google Play review, managed publishing, and staged rollout settings still apply.

Manage Google Play in-app products

1. google_list_iap → list all products
2. google_create_iap → create a new managed product
3. google_update_iap → update price or description
4. google_delete_iap → remove a product

Create a Google Play subscription

1. google_create_subscription → create the subscription with listings and a
   base plan (billing period, grace period, regional pricing in micros).
   The base plan is created in DRAFT state.
2. google_activate_subscription_base_plan → flip the base plan to ACTIVE so
   it becomes purchasable in the Play Store.
3. google_deactivate_subscription_base_plan → pause sales without deleting
   the plan.
4. There is no supported subscription archive operation. Keep all base plans
   deactivated when retiring a previously published subscription.

Example arguments for google_create_subscription:

{
  "packageName": "com.example.app",
  "productId": "com.example.app.pro_monthly",
  "listings": [
    {
      "languageCode": "en-US",
      "title": "Pro Monthly",
      "description": "Unlock all premium features.",
      "benefits": ["Ad-free", "Cloud sync", "Priority support"]
    }
  ],
  "basePlans": [
    {
      "basePlanId": "pro-monthly",
      "autoRenewing": {
        "billingPeriodDuration": "P1M",
        "gracePeriodDuration": "P3D",
        "accountHoldDuration": "P30D"
      },
      "regionalConfigs": [
        { "regionCode": "US", "priceMicros": "3990000", "currency": "USD" },
        { "regionCode": "TR", "priceMicros": "99000000", "currency": "TRY" }
      ]
    }
  ]
}

Prices are given in micros (1 USD = 1,000,000 micros) and converted to the Play API's Money shape (units + nanos) internally. regionsVersion defaults to 2022/02, which the Play API currently requires when regional pricing is supplied.

License

MIT

Related MCP servers

MCP server for Chrome Web Store — extension upload, publish, status, and rollout

3
JavaScript
MIT
View repository →

MCP server for Dynadot domain registrar — domain search, registration, DNS, and transfers

1
TypeScript
MIT
View repository →

MCP server for Google Search Console & Indexing API — search analytics, sitemaps, URL inspection

6
JavaScript
MIT
View repository →

Manage ipTIME routers through a local, safety-gated MCP server with firmware-aware capabilities.

0
TypeScript
MIT
View repository →

MCP server for Instagram Graph API, Threads API, and Meta platform management with 66 tools.

19
TypeScript
MIT
View repository →

135 tools for Facebook & Instagram ad campaign management via Meta Marketing API v26.0

69
TypeScript
MIT
View repository →