
App Publish
io.github.mikusnuzPublished by GitHub account mikusnuzv0.7.0Updated Nov 3, 2026
MCP server for App Store Connect & Google Play Console — iOS/Android app management
The publisher's own server: Publish.fun
Overview
Local MCP server that lets an assistant manage iOS and Android app listings, builds, reviews and releases in App Store Connect and Google Play Console.
- What you can do
- Manage Apple apps, bundle IDs, versions, localizations and app info metadata
- Upload and place screenshots, preview videos and asset library items; manage custom product pages and experiments
- Handle builds, TestFlight groups and testers, certificates, profiles and devices
- Submit versions for review, respond to reviews, set pricing, availability and phased releases
- Manage in-app purchases, subscriptions, offer codes and win-back offers on both stores
- Run Google Play edits, store listings, tracks and releases, images, data safety, vitals and one-time products
- When to use it
- Useful when you already have a signed .aab/.apk or .ipa and want an assistant to handle store-side work: updating descriptions and keywords, uploading screenshots, submitting versions for review, replying to reviews, or managing TestFlight and Play testers and monetization products.
- Requirements
- Runs locally as an npm package (app-publish-mcp) over stdio, desktop only. Needs Apple App Store Connect API key credentials (APPLE_KEY_ID, APPLE_ISSUER_ID, APPLE_P8_PATH, optional APPLE_KEY_TYPE) and Google Play access via a service account JSON path (GOOGLE_SERVICE_ACCOUNT_PATH) or OAuth (GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKEN). Optional APPLE_VENDOR_NUMBER and extra reports/admin keys for sales, finance and analytics reports. Store APIs must be enabled and permissions…
Installation
In SourceWeft
- Open App Publish in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
app-publish-mcp
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" — upload to the Asset Library and place images on the version localization
- "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 (135 tools)
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 (53 tools)
¹ The Reviews API returns only production-app reviews with comments created or modified within the last 7 days. Ratings without comments and alpha/beta feedback are excluded. pageToken does not extend that window; export CSV from Play Console for older history. Check Reply to reviews permission when troubleshooting, but an empty result alone does not prove a permission problem.
² 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.
³ Vitals use the Play Developer Reporting API. Enable it in the service account's Cloud project and grant the account View app information in Play Console. Saved OAuth tokens created before this scope was added need app-publish-mcp auth google again.
Prompts (2)
Resources (2)
Setup
1. Install
2. Apple Credentials
- Go to App Store Connect > Keys
- Create an API Key with App Manager role (reports need a second key, see Keys and roles)
- Download the
.p8file - Note the Key ID and, for team keys, the Issuer ID. For an individual key, set
APPLE_KEY_TYPE=INDIVIDUALand omit the issuer ID. - 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:
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
Edit .env:
Optional:
See Keys and roles for the extra keys and Safety for read-only mode.
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:
Keys and roles
Apple decides what an API key may do by its role, so one key is often not enough. A key that can run the listing gets 403 on reports, and a reports key cannot change the listing.
Which Apple role does what
Apple documents the analytics and sales rows in Analytics Reports. Check the key role and app access before using a report endpoint.
Several keys on one server
Set the main key as usual and add optional keys. Each request picks its key by API; the server never retries a refused request with a stronger key.
APPLE_REPORTS_ISSUER_ID, APPLE_ADMIN_ISSUER_ID and the matching *_KEY_TYPE default to the main key's values. apple_get_sales_report and apple_get_finance_report also need APPLE_VENDOR_NUMBER (App Store Connect → Payments and Financial Reports).
Recipe: App Analytics without a permanent Admin key
- Main key: App Manager.
- Create a Sales and Reports key and set
APPLE_REPORTS_KEY_ID/APPLE_REPORTS_P8_PATH. - Create a temporary Admin key, set
APPLE_ADMIN_KEY_ID/APPLE_ADMIN_P8_PATH, restart the server and callapple_create_analytics_report_requestonce per app (ONGOING). - Revoke the Admin key in App Store Connect and remove the
APPLE_ADMIN_*variables. The request keeps producing reports, and the Sales and Reports key reads them.
Apple generates the first report instances a day or two later and keeps each instance for 35 days. Download them with apple_list_analytics_reports → apple_list_analytics_report_instances → apple_download_analytics_report.
One service account covers publishing and vitals. Enable the Google Play Android Developer API for publishing and the Google Play Developer Reporting API for vitals, and grant the account the needed app permissions in Play Console. Vitals need View app information.
Troubleshooting
Safety
Most tools change real store data. Know which ones before you let an assistant call them.
Reach users or start Apple review
apple_submit_for_review,apple_release_version,apple_create_phased_release/apple_update_phased_releaseapple_update_experimentwithstarted=truestarts a product page test that real visitors seegoogle_commit_editpublishes everything in the edit;google_create_release,google_promote_releaseandgoogle_halt_releasetake effect on commit
Money and availability
apple_set_price(replaces the whole manual price schedule),apple_create_availability,apple_update_territory_availability- Creating, changing, activating or deactivating in-app purchases, subscriptions, base plans, one-time products and offer codes
Public text
apple_respond_to_reviewandgoogle_reply_to_reviewpost replies everyone can read
Cannot be undone
- Every
apple_delete_*tool,google_delete_listing,google_delete_all_images,google_delete_iap,google_delete_one_time_product apple_revoke_certificate: builds signed with that certificate stop installing
Recommendations
- Run a separate read-only server for monitoring and reports:
APP_PUBLISH_READ_ONLY=true. It registers store-read tools, asset polling and Google edit validation. It excludes Google edit creation and deletion: creating a new edit can invalidate that user's existing release draft. For edit-scoped reads supply an existing editId explicitly; the server never creates or cleans it up in this mode. Any value except empty,0,false,nooroffturns it on. Report tools that takeoutputPathstill write that local file, never over an existing one unlessoverwrite=true. - Give each key the smallest role that does the job, and revoke temporary Admin keys after use.
- On Google Play, change things inside an edit, check them with
google_validate_edit, then commit;google_delete_editdiscards the edit. - Keep your MCP client's tool approval on for write tools.
Tested against mocks only: the write tools for custom product pages and product page optimization follow Apple's OpenAPI 4.5.1 schema and are covered by tests, but have not yet been run against a live account. Try them on a test app first.
Usage Examples
Submit assets, custom pages or product page tests
Use apple_create_review_submission to create a draft (or apple_list_review_submissions to find one), then apple_add_review_submission_item for an image/video, custom product page version, or v2 experiment. Inspect apple_get_review_submission, then pass its complete review item IDs to apple_submit_review_submission. Adding items does not submit them; only the last step starts App Review. An interrupted call preserves the submission ID for inspection/retry. Apple controls review eligibility: a first app release needs an app version in the submission; assets assigned to a submitted page/test/version are reviewed with that item. Existing apple_submit_for_review still handles app-version releases.
Report downloads are limited to 32 MiB per response and 64 MiB of decompressed/merged text. Analytics segments are checked against Apple's MD5 when provided; signed URLs are never returned in failures. Saved reports use exclusive creation unless overwrite=true.
Build uploads use a supported MD5 transfer checksum and retain the optional local expectedSha256 artifact-integrity check. This does not imply that Apple's documented SHA-256 checksum algorithm is unsupported.
Upload and arrange Apple screenshots or preview videos
apple_get_asset_library(appId)returns the app's library ID. Useapple_get_asset_specsto select the current spec, compatible placement type and placement group; do not guess device dimensions or group identifiers.apple_upload_assettakesassetLibraryId,mediaType(IMAGEorVIDEO),filePath, andexpectedSpecId. It validates the file extension/size against Apple's specs, uploads all parts, commits, and waits for processing by default. Videos also acceptpreviewFrameTimeCode.- If processing times out or fails, retain the returned asset ID and inspect it with
apple_get_asset/apple_wait_for_asset. Do not blindly upload a duplicate.waitForProcessing=falsereturns sooner, but a ready asset is required for placement. apple_create_placementlinks the asset to alocalizationIdusing the selectedplacementTypeandplacementGroup. The defaulttargetTypeisappStoreVersionLocalizations; custom product pages, experiment treatments, and in-app events are also supported. Repeating the same placement reuses it.- Read
apple_list_placements, then pass all placement IDs in the desired group order toapple_reorder_placements. In-app events do not support this ordering endpoint. apple_delete_placementremoves a placement only.apple_list_asset_placementsshows everywhere an asset is used;apple_delete_assetrefuses to delete an asset still in use.
Apple deprecated the legacy screenshot endpoints in App Store Connect API 4.5.1. The four existing screenshot tools remain for compatibility; Apple has not announced their shutdown date. Use the Asset Library workflow for new work. Korea age-rating overrides now also support ALL and TWELVE_PLUS.
Header and search visuals, custom product pages, A/B tests
The App Store product page header and the search results visual are Asset Library placements (PRODUCT_PAGE_HEADER_ASSET, APP_STORE_SEARCH_RESULTS_ASSET). Pick the spec with apple_get_asset_specs(placementType=...), upload with apple_upload_asset, then apple_create_placement. The same placements work on custom product page localizations (apple_create_custom_product_page → apple_list_custom_product_page_localizations) and on test treatments (apple_create_experiment → apple_create_experiment_treatment → apple_create_treatment_localization).
Store analytics
apple_create_analytics_report_request asks Apple to start generating App Analytics reports; the first instances appear after 1–2 days. Then apple_list_analytics_reports → apple_list_analytics_report_instances → apple_download_analytics_report (pass outputPath to keep the full file). apple_get_sales_report returns daily units and proceeds. On Android, google_query_vitals returns crash/ANR rates for the latest 28 days by default.
Submit an iOS app update
Release an Android app
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
Create a Google Play subscription
Example arguments for google_create_subscription:
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
Source: README.md at commit 9d52fb8
Tools
0Version history
3- v0.7.0LatestOct 19, 2026
- v0.6.0Oct 8, 2026
- v0.3.1Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Other Publish integrations
Publish.fun
fun.publishOfficial publisher
Publish.fun lets an assistant submit research papers for AI review, track and revise them, upload figures, cite published work and file or answer reports.
new.estate — listing drafts
estate.newOfficial publisher
Remote MCP server that lets an assistant draft personal real estate listings on a user's new.estate account from a conversation.

Publish To All Skill Stores
Published by GitHub account xixi048
Local MCP server that helps an assistant list agent-skill stores, run a readiness check on a SKILL.md skill, and build the package shapes stores accept.

HaoyouBox Publish
com.haoyoubox
Publishes a single local HTML or Markdown file to HaoyouBox as an expiring, password-protected browser link and returns the link, password and expiry.

mcpship: check and publish MCP servers
Published by GitHub account emanueltns
Checks a remote MCP server against the Claude connector directory rules and guides its publication step by step.