Skip to main content
Glama

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.

Related MCP server: appstore-release-mcp

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)

Category

Tools

App Management

apple_list_apps, apple_get_next_page, apple_get_app, apple_update_app, apple_get_app_info, apple_update_category

Bundle IDs

apple_list_bundle_ids, apple_create_bundle_id

Bundle ID Capabilities

apple_list_bundle_id_capabilities, apple_enable_capability, apple_disable_capability

Versions

apple_list_versions, apple_create_version, apple_update_version

Version Localizations

apple_list_version_localizations, apple_create_version_localization, apple_update_version_localization

App Info Localizations

apple_list_app_info_localizations, apple_update_app_info_localization

Asset Library

apple_get_asset_library, apple_get_asset_specs, apple_list_assets, apple_get_asset, apple_wait_for_asset, apple_upload_asset, apple_list_asset_placements, apple_delete_asset

Asset Placements

apple_list_placements, apple_create_placement, apple_reorder_placements, apple_delete_placement

Legacy Screenshots (deprecated)

apple_list_screenshot_sets, apple_create_screenshot_set, apple_upload_screenshot, apple_delete_screenshot

Builds

apple_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 Rating

apple_get_age_rating, apple_update_age_rating

Review Info

apple_update_review_detail

Submission

apple_submit_for_review, apple_cancel_submission

Release

apple_release_version, apple_get_phased_release, apple_create_phased_release, apple_update_phased_release, apple_delete_phased_release

Pricing & Availability

apple_get_pricing, apple_list_app_price_points, apple_set_price, apple_list_availability, apple_create_availability, apple_update_territory_availability

Customer Reviews

apple_list_reviews, apple_respond_to_review

Certificates

apple_list_certificates, apple_create_certificate, apple_revoke_certificate

Provisioning Profiles

apple_list_profiles, apple_create_profile, apple_delete_profile

Devices

apple_list_devices, apple_register_device, apple_update_device

TestFlight Beta Groups

apple_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 Testers

apple_list_beta_testers, apple_invite_beta_tester, apple_delete_beta_tester

In-App Purchases

apple_list_iap, apple_create_iap, apple_get_iap, apple_delete_iap

Subscription Groups

apple_list_subscription_groups, apple_create_subscription_group, apple_delete_subscription_group

Accessibility Declarations

apple_list_accessibility_declarations, apple_create_accessibility_declaration, apple_update_accessibility_declaration, apple_delete_accessibility_declaration

Price Points

apple_get_subscription_price_points, apple_get_iap_price_points

Offer Codes

apple_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 Offers

apple_list_win_back_offers, apple_get_win_back_offer

Custom Product Pages

apple_list_custom_product_pages, apple_get_custom_product_page, apple_create_custom_product_page, apple_update_custom_product_page, apple_delete_custom_product_page, apple_list_custom_product_page_versions, apple_create_custom_product_page_version, apple_update_custom_product_page_version, apple_list_custom_product_page_localizations, apple_create_custom_product_page_localization, apple_update_custom_product_page_localization, apple_delete_custom_product_page_localization

Product Page Optimization

apple_list_experiments, apple_get_experiment, apple_create_experiment, apple_update_experiment, apple_delete_experiment, apple_list_experiment_treatments, apple_create_experiment_treatment, apple_update_experiment_treatment, apple_delete_experiment_treatment, apple_list_treatment_localizations, apple_create_treatment_localization, apple_delete_treatment_localization

Sales & Finance Reports

apple_get_sales_report, apple_get_finance_report

App Analytics Reports

apple_list_analytics_report_requests, apple_create_analytics_report_request, apple_list_analytics_reports, apple_list_analytics_report_instances, apple_list_analytics_report_segments, apple_download_analytics_report

Review submission workflow

apple_list_review_submissions, apple_get_review_submission, apple_create_review_submission, apple_add_review_submission_item, apple_submit_review_submission

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)

Category

Tools

Edit Lifecycle

google_create_edit, google_get_edit, google_commit_edit, google_validate_edit, google_delete_edit

App Details

google_get_details, google_update_details

Store Listing

google_list_listings, google_get_listing, google_update_listing, google_delete_listing

Country Availability

google_get_country_availability

Testers

google_get_testers, google_update_testers

Images

google_list_images, google_upload_image, google_delete_image, google_delete_all_images

Tracks & Releases

google_list_tracks, google_get_track, google_create_release, google_promote_release, google_halt_release, google_list_release_statuses

Bundle / APK

google_list_bundles, google_upload_bundle, google_list_apks, google_upload_apk

Data Safety

google_update_data_safety

Reviews¹

google_list_reviews, google_get_review, google_reply_to_review

In-App Products

google_list_iap, google_get_iap, google_create_iap, google_update_iap, google_delete_iap

Subscriptions

google_list_subscriptions, google_get_subscription, google_create_subscription, google_activate_subscription_base_plan, google_deactivate_subscription_base_plan

Android Vitals³

google_query_vitals, google_list_vitals_anomalies, google_search_vitals_error_issues, google_search_vitals_error_reports

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

¹ 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)

Prompt

Description

app_release_checklist

Guided checklist from signed artifact upload through review, release, and publishing-status checks for iOS and/or Android

app_store_optimization

ASO audit that reviews current listing metadata (title, description, keywords, screenshots, localization) and provides actionable improvement recommendations

Resources (2)

URI

Description

app-publish://config

Current server configuration — connected accounts, auth methods, tool counts

app-publish://supported-platforms

All 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 (reports need a second key, see Keys and roles)

  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

Optional:

APPLE_VENDOR_NUMBER=YOUR_VENDOR_NUMBER   # sales and finance reports
APPLE_REPORTS_KEY_ID=REPORTS_KEY_ID      # key for Sales/Finance/Analytics reports
APPLE_REPORTS_P8_PATH=/path/to/AuthKey_REPORTS.p8
APPLE_ADMIN_KEY_ID=ADMIN_KEY_ID          # analytics requests and finance/reporting fallback
APPLE_ADMIN_P8_PATH=/path/to/AuthKey_ADMIN.p8
APP_PUBLISH_READ_ONLY=true               # register only read tools (list/get/search/query/download, no Google edit creation or deletion)

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:

{
  "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"
      }
    }
  }
}

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

Job

Works with

Fails with

Listing, screenshots and visuals, custom product pages, A/B tests, versions, review submission, TestFlight, pricing

App Manager, Admin

Sales and Reports, Finance

Bundle IDs, capabilities, certificates, profiles, devices

Team key with suitable access (Admin covers it)

Individual keys

apple_get_sales_report

Sales and Reports, Finance, Admin

App Manager (403)

apple_get_finance_report

Finance, Admin

Sales and Reports, App Manager (403)

Reading App Analytics reports

Sales and Reports, Finance, Admin

App Manager (403)

apple_create_analytics_report_request

Admin

Sales and Reports, App Manager (403)

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.

Request

Key used

Everything except reports

Main key (APPLE_KEY_ID, APPLE_P8_PATH)

Sales reports, reading analytics reports

APPLE_REPORTS_*, else APPLE_ADMIN_*, else the main key

Finance reports

APPLE_ADMIN_*, else APPLE_REPORTS_*, else the main key

Creating or deleting an analytics report request

APPLE_ADMIN_*, else the main 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

  1. Main key: App Manager.

  2. Create a Sales and Reports key and set APPLE_REPORTS_KEY_ID / APPLE_REPORTS_P8_PATH.

  3. Create a temporary Admin key, set APPLE_ADMIN_KEY_ID / APPLE_ADMIN_P8_PATH, restart the server and call apple_create_analytics_report_request once per app (ONGOING).

  4. 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.

Google

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

Response

Usually means

401 NOT_AUTHORIZED

Wrong Key ID, Issuer ID or .p8, or a revoked key. Tokens are issued 60 seconds in the past, to tolerate modest clock skew; keep the system clock synchronized.

403 FORBIDDEN_ERROR "The API key in use does not allow this request"

The key's role cannot do this. Check the role table and add APPLE_REPORTS_* or APPLE_ADMIN_*.

404 NOT_FOUND on sales or finance reports

No data for that date or region, e.g. a free app has no finance report.

400 PARAMETER_ERROR on sales reports

Wrong vendor number, or a reportSubType / version that does not fit the reportType.

Google vitals return no rows

Google has no vitals data for the app in that window, which is common for new or low-traffic apps.

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_release

  • apple_update_experiment with started=true starts a product page test that real visitors see

  • google_commit_edit publishes everything in the edit; google_create_release, google_promote_release and google_halt_release take 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_review and google_reply_to_review post 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, no or off turns it on. Report tools that take outputPath still write that local file, never over an existing one unless overwrite=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_edit discards 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

  1. apple_get_asset_library(appId) returns the app's library ID. Use apple_get_asset_specs to select the current spec, compatible placement type and placement group; do not guess device dimensions or group identifiers.

  2. apple_upload_asset takes assetLibraryId, mediaType (IMAGE or VIDEO), filePath, and expectedSpecId. It validates the file extension/size against Apple's specs, uploads all parts, commits, and waits for processing by default. Videos also accept previewFrameTimeCode.

  3. 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=false returns sooner, but a ready asset is required for placement.

  4. apple_create_placement links the asset to a localizationId using the selected placementType and placementGroup. The default targetType is appStoreVersionLocalizations; custom product pages, experiment treatments, and in-app events are also supported. Repeating the same placement reuses it.

  5. Read apple_list_placements, then pass all placement IDs in the desired group order to apple_reorder_placements. In-app events do not support this ordering endpoint.

  6. apple_delete_placement removes a placement only. apple_list_asset_placements shows everywhere an asset is used; apple_delete_asset refuses 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

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

Available Tools

188 tools
apple_add_beta_testers_to_groupC

Add beta testers to a group

Inputs: betaGroupId (required), betaTesterIds (required).

apple_add_review_submission_itemA

Attach an Asset Library image/video, custom product page version, v2 experiment or app version to a draft, without submitting. For an initial app release include the app version; assigned assets are reviewed with their owning item. Retries reconcile an already attached item.

Inputs: appId (required), resourceId (required), resourceType (required), submissionId (required), +1 more.

apple_assign_buildC

Assign a build to an App Store version

Inputs: buildId (required), versionId (required).

apple_cancel_submissionA

Cancel an in-review submission (if still possible). Operates on the reviewSubmissions resource created by apple_submit_for_review — sets attributes.canceled=true via PATCH. The legacy appStoreVersionSubmissions DELETE endpoint only applied to submissions created through the retired create-submission flow and does not accept reviewSubmissions IDs.

Inputs: submissionId (required).

apple_create_accessibility_declarationC

Create an accessibility nutrition label declaration for an app on a specific device family (Accessibility Nutrition Labels)

Inputs: appId (required), deviceFamily (required), supportsCaptions, supportsVoiceover, +7 more.

apple_create_analytics_report_requestA

Ask Apple to start generating App Analytics reports (impressions, product page views, downloads, sessions, retention). ONGOING keeps producing daily data; the first reports take 1-2 days. Only one request per access type is allowed.

Inputs: appId (required), accessType.

apple_create_availabilityA

Create initial app availability with explicit territory settings; use available=true and preOrderEnabled=false for a normal release

Inputs: appId (required), territories (required), availableInNewTerritories.

apple_create_beta_groupC

Create a beta group

Inputs: name (required), appId (required), feedbackEnabled, isInternalGroup, +3 more.

apple_create_bundle_idC

Register a new bundle ID

Inputs: name (required), platform (required), identifier (required).

apple_create_certificateC

Create a certificate

Inputs: csrContent (required), certificateType (required).

apple_create_custom_product_pageA

Create a custom product page with its first version and localizations in one request. Optionally copy screenshots and text from an App Store version or another custom page. Add visuals afterwards with the Asset Library placement tools.

Inputs: name (required), appId (required), localizations (required), deepLink, +2 more.

apple_create_custom_product_page_localizationB

Add a locale to an editable custom product page version

Inputs: locale (required), versionId (required), promotionalText.

apple_create_custom_product_page_versionC

Start a new editable version of an approved custom product page

Inputs: pageId (required), deepLink.

apple_create_experimentC

Create a product page optimization test. trafficProportion is the percentage of visitors sent to the treatments (split evenly); the rest see the original page.

Inputs: name (required), appId (required), trafficProportion (required), platform.

apple_create_experiment_treatmentC

Add a treatment (variant) to a test. appIconName selects an alternate icon shipped in the binary.

Inputs: name (required), experimentId (required), appIconName.

apple_create_iapC

Create an in-app purchase

Inputs: name (required), appId (required), productId (required), inAppPurchaseType (required).

apple_create_iap_offer_codeA

Create an offer code for a consumable/non-consumable/non-renewing-subscription in-app purchase. Requires per-territory prices — look them up first with apple_get_iap_price_points.

Inputs: name (required), iapId (required), prices (required), customerEligibilities (required).

apple_create_phased_releaseB

Enable a seven-day phased release for an app update; phased release is unavailable for an app's first version

Inputs: versionId (required), state.

apple_create_placementA

Place a ready library asset on an editable localization using a placement type and group from apple_get_asset_specs. Reuses an existing identical placement.

Inputs: assetId (required), mediaType (required), placementType (required), localizationId (required), +2 more.

apple_create_profileC

Create a provisioning profile

Inputs: name (required), bundleIdId (required), profileType (required), certificateIds (required), +1 more.

apple_create_review_submissionA

Create an empty review draft; does not submit it. For asset-only, custom product page or product page optimization review. Existing drafts must be explicitly resumed, not replaced.

Inputs: appId (required), platform.

apple_create_screenshot_setA

Legacy: create a screenshot set for a specific display type. Deprecated by Apple; prefer apple_upload_asset and apple_create_placement.

Inputs: displayType (required), localizationId (required).

apple_create_subscription_groupC

Create a subscription group

Inputs: appId (required), referenceName (required).

apple_create_subscription_offer_codeA

Create a subscription offer code (custom or one-time-use codes distributed outside the App Store). Requires per-territory prices — look them up first with apple_get_subscription_price_points.

Inputs: name (required), prices (required), duration (required), offerMode (required), +5 more.

apple_create_treatment_localizationC

Add a locale to a treatment so it can get its own screenshots and visuals

Inputs: locale (required), treatmentId (required).

apple_create_versionC

Create a new App Store version for submission

Inputs: appId (required), versionString (required), platform, copyright, +2 more.

apple_create_version_localizationC

Create a new localization for a version

Inputs: locale (required), versionId (required), keywords, whatsNew, +4 more.

apple_delete_accessibility_declarationC

Delete an accessibility nutrition label declaration

Inputs: declarationId (required).

apple_delete_assetA

Delete an unplaced image or video from the library. Refuses to delete if any localization still uses it; delete the intended placements first.

Inputs: assetId (required), mediaType (required).

apple_delete_beta_groupB

Delete a beta group

Inputs: betaGroupId (required).

apple_delete_beta_testerC

Delete a beta tester

Inputs: betaTesterId (required).

apple_delete_build_uploadA

Explicitly discard an AWAITING_UPLOAD or FAILED Build Upload after checking it with apple_get_build_upload; do not use for PROCESSING or COMPLETE uploads

Inputs: buildUploadId (required).

apple_delete_custom_product_pageB

Delete a custom product page; its URL stops working in campaigns

Inputs: pageId (required).

apple_delete_custom_product_page_localizationC

Remove a locale from an editable custom product page version

Inputs: localizationId (required).

apple_delete_experimentB

Delete a product page optimization test that has not run

Inputs: experimentId (required).

apple_delete_experiment_treatmentB

Delete a treatment from a test that has not started

Inputs: treatmentId (required).

apple_delete_iapC

Delete an in-app purchase

Inputs: iapId (required).

apple_delete_phased_releaseA

Cancel a phased release configuration before the phased release has started

Inputs: phasedReleaseId (required).

apple_delete_placementB

Remove a placement from its localization; the reusable library asset and its other placements remain intact

Inputs: placementId (required).

apple_delete_profileB

Delete a provisioning profile

Inputs: profileId (required).

apple_delete_screenshotA

Legacy: delete a screenshot from the deprecated screenshot-set API. Use apple_delete_placement and apple_delete_asset for Asset Library media.

Inputs: screenshotId (required).

apple_delete_subscription_groupC

Delete a subscription group

Inputs: groupId (required).

apple_delete_treatment_localizationC

Remove a locale from a treatment

Inputs: localizationId (required).

apple_disable_capabilityC

Disable a capability on a bundle ID

Inputs: capabilityId (required).

apple_download_analytics_reportC

Download every segment of an analytics report instance, decompress and merge them into rows

Inputs: instanceId (required), maxRows, overwrite, outputPath.

apple_enable_capabilityC

Enable a capability on a bundle ID

Inputs: bundleIdId (required), capabilityType (required), settings.

apple_get_age_ratingB

Get age rating declaration for an app info

Inputs: appInfoId (required).

apple_get_appB

Get detailed info about an app including latest version state

Inputs: appId (required).

apple_get_app_infoC

Get app info (categories, age rating, etc)

Inputs: appId (required).

apple_get_assetC

Read an image or video asset’s processing state, matched specId, and delivery errors without exposing presigned upload URLs

Inputs: assetId (required), mediaType (required).

apple_get_asset_libraryC

Get the reusable App Asset Library for an app before uploading screenshots, previews, or creative assets

Inputs: appId (required).

apple_get_asset_specsB

Read Apple’s current asset specifications, placement types, device groups, and limits; use the returned IDs instead of hard-coded device sizes

Inputs: specId, feature, placementType, placementGroup.

apple_get_build_uploadA

Get the current state of a Build Uploads API operation, including the imported build when available

Inputs: buildUploadId (required).

apple_get_custom_product_pageC

Get a custom product page with its versions

Inputs: pageId (required).

apple_get_experimentC

Get a product page optimization test with its treatments

Inputs: experimentId (required).

apple_get_finance_reportC

Download a monthly financial report (earnings by region) as rows

Inputs: regionCode (required), reportDate (required), maxRows, overwrite, +3 more.

apple_get_iapC

Get in-app purchase details

Inputs: iapId (required).

apple_get_iap_offer_codeC

Get details of an in-app purchase offer code

Inputs: offerCodeId (required).

apple_get_iap_price_pointsA

List available price points for an in-app purchase, per territory. Use the returned IDs (with a territory ID) to build the prices for apple_create_iap_offer_code.

Inputs: iapId (required), territoryFilter.

apple_get_next_pageA

Fetch the next App Store Connect page using the exact links.next URL returned by another Apple list tool

Inputs: nextUrl (required).

apple_get_phased_releaseA

Get phased-release status and progress for an App Store version

Inputs: versionId (required).

apple_get_pricingB

Get the app price schedule plus complete, fully paginated manual and automatic price collections

Inputs: appId (required).

apple_get_review_submissionB

Inspect a review submission and all item IDs before adding an asset/custom page/test or explicitly submitting it

Inputs: appId (required), submissionId (required), platform.

apple_get_sales_reportA

Download a Sales and Trends report (units, installs, proceeds by territory/device) as rows. Needs the vendor number; data for a day usually appears the next day. reportSubType and version must suit the reportType (SALES uses SUMMARY); Apple names the accepted values in its error.

Inputs: maxRows, version, frequency, overwrite, +5 more.

apple_get_subscription_offer_codeC

Get details of a subscription offer code

Inputs: offerCodeId (required).

apple_get_subscription_price_pointsA

List available price points for a subscription, per territory. Use the returned IDs (with a territory ID) to build the prices for apple_create_subscription_offer_code.

Inputs: subscriptionId (required), territoryFilter.

apple_get_win_back_offerC

Get details of a win-back offer

Inputs: offerId (required).

apple_invite_beta_testerC

Invite a beta tester

Inputs: email (required), betaGroupIds (required), lastName, firstName.

apple_list_accessibility_declarationsB

List accessibility nutrition label declarations for an app, one per device family

Inputs: appId (required).

apple_list_analytics_report_instancesC

List generated instances (one per processing date) of an analytics report

Inputs: reportId (required), granularity, processingDate.

apple_list_analytics_report_requestsB

List App Analytics report requests for an app. Apple generates analytics reports only after a request exists.

Inputs: appId (required), accessType.

apple_list_analytics_reportsC

List the reports available for an analytics report request, e.g. "App Store Discovery and Engagement" or "App Downloads"

Inputs: requestId (required), name, category.

apple_list_analytics_report_segmentsA

List the segment files of an analytics report instance (size and checksum, without download URLs)

Inputs: instanceId (required).

apple_list_app_info_localizationsA

List app info localizations (app name, subtitle, privacy policy URL)

Inputs: appInfoId (required).

apple_list_app_price_pointsA

List current App Price Points for an app in a base territory; use an ID from this response with apple_set_price

Inputs: appId (required), territoryId (required), limit.

apple_list_appsB

List all apps in App Store Connect

Inputs: limit.

apple_list_asset_placementsA

List every placement that uses an image or video, including other localizations, before deleting or replacing that asset

Inputs: assetId (required), mediaType (required).

apple_list_assetsA

List all image or video assets in an App Asset Library, following every page; use this to reuse files and find interrupted uploads

Inputs: mediaType (required), assetLibraryId (required), state, category, +1 more.

apple_list_availabilityC

List current App Availability and all related territory availability records

Inputs: appId (required).

apple_list_beta_groupsC

List beta groups

Inputs: appId.

apple_list_beta_testersC

List beta testers

Inputs: appId, email.

apple_list_buildsC

List builds uploaded to App Store Connect

Inputs: appId (required), limit, preReleaseVersion.

apple_list_bundle_id_capabilitiesB

List capabilities for a bundle ID

Inputs: bundleIdId (required).

apple_list_bundle_idsC

List registered bundle IDs

Inputs: limit.

apple_list_certificatesC

List certificates

Inputs: certificateType.

apple_list_custom_product_page_localizationsA

List localizations of a custom product page version; their IDs are the targets for apple_create_placement

Inputs: versionId (required).

apple_list_custom_product_pagesB

List custom product pages for an app, with their versions (state, deep link) and the page URL to use in ad campaigns

Inputs: appId (required), visible.

apple_list_custom_product_page_versionsC

List versions of a custom product page

Inputs: pageId (required).

apple_list_devicesC

List registered devices

Inputs: status, platform.

apple_list_experimentsB

List product page optimization tests (A/B tests of icon, screenshots and visuals) for an app, with state and dates

Inputs: appId (required).

apple_list_experiment_treatmentsC

List the treatments (variants) of a product page optimization test

Inputs: experimentId (required).

apple_list_iapA

List in-app purchases for an app

Inputs: appId (required).

apple_list_iap_offer_codesB

List custom/one-time-use offer codes configured for an in-app purchase

Inputs: iapId (required).

apple_list_placementsC

List all placements for a localization in display order, including their image/video assets

Inputs: localizationId (required), targetType, placementType, placementGroup.

apple_list_profilesC

List provisioning profiles

Inputs: name, profileType.

apple_list_reviewsC

List customer reviews for an app

Inputs: appId (required), sort, limit.

apple_list_review_submissionsB

List review submissions for an app and platform, including drafts to resume after an interrupted request

Inputs: appId (required), platform.

apple_list_screenshot_setsA

Legacy: list screenshot sets for a localization. Apple deprecated this API in 4.5.1; use apple_list_placements for Asset Library media.

Inputs: localizationId (required).

apple_list_subscription_groupsC

List subscription groups for an app

Inputs: appId (required).

apple_list_subscription_offer_codesB

List custom/one-time-use offer codes configured for a subscription

Inputs: subscriptionId (required).

apple_list_treatment_localizationsB

List localizations of a treatment; their IDs are the targets for apple_create_placement

Inputs: treatmentId (required).

apple_list_version_localizationsB

List all localizations for a version

Inputs: versionId (required).

apple_list_versionsC

List all App Store versions for an app

Inputs: appId (required), state, platform.

apple_list_win_back_offersA

List win-back offers configured for a subscription (offers to bring back churned/expired subscribers)

Inputs: subscriptionId (required).

apple_register_deviceB

Register a new device

Inputs: name (required), udid (required), platform (required).

apple_release_versionA

Irreversibly request release of an approved version that is in PENDING_DEVELOPER_RELEASE

Inputs: versionId (required).

apple_remove_beta_testers_from_groupB

Remove beta testers from a group

Inputs: betaGroupId (required), betaTesterIds (required).

apple_reorder_placementsA

Set the complete display order for one localization and placement group, then read back and verify the order. In-app event localizations are not orderable.

Inputs: placementIds (required), localizationId (required), placementGroup (required), targetType.

apple_respond_to_reviewC

Respond to a customer review

Inputs: reviewId (required), responseBody (required).

apple_revoke_certificateC

Revoke a certificate

Inputs: certificateId (required).

apple_set_build_encryptionA

Set a processed build's usesNonExemptEncryption answer before submission; true may also require an app encryption declaration or supporting export-compliance documentation

Inputs: buildId (required), usesNonExemptEncryption (required).

apple_set_priceA

Replace the complete manual app price schedule. Call apple_get_pricing first and include every current and future manual price entry that must be preserved.

Inputs: appId (required), manualPrices (required), baseTerritoryId (required).

apple_submit_for_reviewB

Create or resume an App Store review submission, attach the version idempotently, and submit it while preserving the submission ID for safe recovery

Inputs: appId (required), versionId (required), platform, submissionId.

apple_submit_review_submissionA

Submit an inspected review draft containing assets, custom pages or experiments. itemIds must exactly match all review item IDs returned by apple_get_review_submission, to avoid submitting unexpected items. This starts App Review; saving or attaching an item does not.

Inputs: appId (required), itemIds (required), submissionId (required), platform.

apple_update_accessibility_declarationC

Update an existing accessibility nutrition label declaration

Inputs: declarationId (required), supportsCaptions, supportsVoiceover, supportsLargerText, +6 more.

apple_update_age_ratingC

Update the current App Store age-rating questionnaire. Prefer NONE, INFREQUENT, or FREQUENT for frequency fields; legacy values remain accepted by Apple for compatibility.

Inputs: ageRatingId (required), lootBox, contests, gambling, +25 more.

apple_update_appC

Update app-level submission settings: the content-rights declaration and primary locale

Inputs: appId (required), primaryLocale, contentRightsDeclaration.

apple_update_app_info_localizationB

Update app name, subtitle, or privacy policy URL for a locale

Inputs: localizationId (required), name, subtitle, privacyPolicyUrl, +1 more.

apple_update_categoryA

Update app primary/secondary category

Inputs: appInfoId (required), primaryCategoryId, secondaryCategoryId.

apple_update_custom_product_pageB

Rename a custom product page or switch its visibility (a hidden page stops serving its URL)

Inputs: pageId (required), name, visible.

apple_update_custom_product_page_localizationC

Change the promotional text of a custom product page localization

Inputs: localizationId (required), promotionalText (required).

apple_update_custom_product_page_versionB

Change the deep link of an editable custom product page version

Inputs: deepLink (required), versionId (required).

apple_update_deviceC

Update device name or status

Inputs: deviceId (required), name, status.

apple_update_experimentA

Rename a test, change its traffic share, or start it (started=true). New visuals in a test go through App Review before it runs.

Inputs: experimentId (required), name, started, trafficProportion.

apple_update_experiment_treatmentC

Rename a treatment or change its alternate icon

Inputs: treatmentId (required), name, appIconName.

apple_update_phased_releaseA

Pause, resume, or complete an existing phased release; COMPLETE immediately releases the update to all users

Inputs: state (required), phasedReleaseId (required).

apple_update_review_detailC

Update app review info (contact info, notes, demo account for reviewer)

Inputs: versionId (required), notes, contactEmail, contactPhone, +5 more.

apple_update_territory_availabilityA

Change availability, release date, or pre-order state for one existing territory availability record returned by apple_list_availability

Inputs: territoryAvailabilityId (required), available, releaseDate, preOrderEnabled.

apple_update_versionC

Update an existing App Store version's version, copyright, or release timing

Inputs: versionId (required), copyright, releaseType, versionString, +1 more.

apple_update_version_localizationC

Update localization fields (description, keywords, whatsNew, etc)

Inputs: localizationId (required), keywords, whatsNew, supportUrl, +3 more.

apple_upload_assetA

Upload an image or video once to the App Asset Library, commit uploaded=true, and verify processing against a specId from apple_get_asset_specs. Create placements separately to reuse it across localizations.

Inputs: filePath (required), mediaType (required), assetLibraryId (required), expectedSpecId (required), +6 more.

apple_upload_buildA

Upload a signed IPA through the App Store Connect Build Uploads API: verify its SHA-256 locally, reserve the upload and file, send every presigned range, commit its MD5 transfer checksum, and optionally wait for import

Inputs: appId (required), filePath (required), buildNumber (required), versionString (required), +6 more.

apple_upload_screenshotA

Legacy: upload and commit a screenshot while preserving its ID for recovery. Deprecated by Apple; prefer apple_upload_asset and apple_create_placement.

Inputs: fileName (required), filePath (required), screenshotSetId (required), fileSize.

apple_wait_for_assetB

Resume waiting for an uploaded asset to become ready; optionally check that Apple matched the intended specification

Inputs: assetId (required), mediaType (required), expectedSpecId, timeoutSeconds, +1 more.

apple_wait_for_build_uploadB

Wait until a Build Uploads API operation completes or fails, returning the imported build relationship on success

Inputs: buildUploadId (required), timeoutSeconds, pollIntervalSeconds.

google_activate_purchase_optionB

Activate a one-time product purchase option so it becomes available for purchase

Inputs: productId (required), packageName (required), purchaseOptionId (required).

google_activate_subscription_base_planA

Activate a subscription base plan so it becomes purchasable. Base plans default to DRAFT after creation; this is required to make them ACTIVE.

Inputs: productId (required), basePlanId (required), packageName (required).

google_commit_editA

Commit all pending changes. By default, fail safely instead of canceling changes that are already in review.

Inputs: editId (required), packageName (required), changesInReviewBehavior, changesNotSentForReview.

google_create_editA

Create a new edit session. Required before making any changes to a Google Play listing.

Inputs: packageName (required).

google_create_iapC

Create a new in-app product (managed product)

Inputs: sku (required), packageName (required), defaultTitle (required), defaultLanguage (required), +5 more.

google_create_one_time_productA

Create a new one-time product (buy or rent) on Google Play. Inspect the returned purchase-option state and call google_activate_purchase_option when it is DRAFT.

Inputs: listings (required), productId (required), packageName (required), purchaseOptions (required), +4 more.

google_create_releaseB

Create or update one release with an explicit version-code set. Google Play retains fallback releases; send only the desired change.

Inputs: track (required), editId (required), packageName (required), versionCodes (required), +6 more.

google_create_subscriptionA

Create a new subscription on Google Play (monetization API). Pass the full subscription body — including listings and at least one base plan with billing details and per-region pricing. Base plans are created in DRAFT state; call google_activate_subscription_base_plan to make them purchasable.

Inputs: listings (required), basePlans (required), productId (required), packageName (required), +1 more.

google_deactivate_purchase_optionB

Deactivate a one-time product purchase option so it stops being available for purchase

Inputs: productId (required), packageName (required), purchaseOptionId (required).

google_deactivate_subscription_base_planA

Deactivate a base plan for new subscribers while existing subscribers retain their subscription. Use this instead of the unsupported subscription archive operation.

Inputs: productId (required), basePlanId (required), packageName (required).

google_delete_all_imagesB

Delete all images of a specific type for a language

Inputs: editId (required), language (required), imageType (required), packageName (required).

google_delete_editB

Discard an edit session without committing changes

Inputs: editId (required), packageName (required).

google_delete_iapB

Delete an in-app product

Inputs: sku (required), packageName (required).

google_delete_imageB

Delete a specific uploaded image

Inputs: editId (required), imageId (required), language (required), imageType (required), +1 more.

google_delete_listingB

Delete a store listing for a specific language

Inputs: editId (required), language (required), packageName (required).

google_delete_one_time_productC

Delete a one-time product

Inputs: productId (required), packageName (required).

google_get_country_availabilityB

Get country availability for a specific track

Inputs: track (required), editId (required), packageName (required).

google_get_detailsA

Get app details (default language, contact email/phone/website)

Inputs: editId (required), packageName (required).

google_get_editB

Get an edit session, including its ID and expiry time, before resuming pending work

Inputs: editId (required), packageName (required).

google_get_iapB

Get details of a specific in-app product

Inputs: sku (required), packageName (required).

google_get_listingB

Get store listing for a specific language

Inputs: editId (required), language (required), packageName (required).

google_get_one_time_productB

Get details of a specific one-time product

Inputs: productId (required), packageName (required).

google_get_reviewB

Get a specific review with details

Inputs: reviewId (required), packageName (required), translationLanguage.

google_get_subscriptionC

Get details of a specific subscription

Inputs: productId (required), packageName (required).

google_get_testersC

Get tester configuration for a track

Inputs: track (required), editId (required), packageName (required).

google_get_trackC

Get details of a specific release track

Inputs: track (required), editId (required), packageName (required).

google_halt_releaseA

Halt an exact in-progress or completed release; halting a completed production release rolls users back to the previous completed release

Inputs: track (required), editId (required), packageName (required), versionCodes (required).

google_list_apksB

List APKs already available in an edit, including version codes and hashes

Inputs: editId (required), packageName (required).

google_list_bundlesA

List Android App Bundles already available in an edit, including version codes and hashes

Inputs: editId (required), packageName (required).

google_list_iapB

List all in-app products (managed products) for an app

Inputs: packageName (required), pageToken.

google_list_imagesC

List uploaded images of a specific type

Inputs: editId (required), language (required), imageType (required), packageName (required).

google_list_listingsA

List all store listings (all languages) for an app

Inputs: editId (required), packageName (required).

google_list_one_time_productsC

List all one-time products (non-subscription purchases, buy or rent) for an app

Inputs: packageName (required), pageSize, pageToken.

google_list_release_statusesA

List non-obsolete releases and their review/publishing lifecycle states for a track after an edit is committed

Inputs: track (required), packageName (required).

google_list_reviewsA

List production-app reviews with comments created or modified within the last 7 days. Ratings without comments and alpha/beta feedback are excluded. Requires Reply to reviews permission. pageToken pages only within that 7-day window; use Play Console CSV export for older history. An empty result alone does not indicate missing permission.

Inputs: packageName (required), pageToken, maxResults, translationLanguage.

google_list_subscriptionsC

List all subscriptions for an app

Inputs: packageName (required), pageSize, pageToken.

google_list_tracksA

List all release tracks, including custom closed-test and form-factor tracks

Inputs: editId (required), packageName (required).

google_list_vitals_anomaliesC

List anomalies Google detected in Android vitals (sudden crash/ANR spikes) with the affected metric and dimensions

Inputs: packageName (required), filter, maxResults.

google_promote_releaseB

Promote a release from one track to another (e.g. beta → production)

Inputs: editId (required), toTrack (required), fromTrack (required), packageName (required), +5 more.

google_query_vitalsA

Query Android vitals (crash, ANR, slow start, slow rendering, wakeups, wakelocks, LMK, memory, error counts) by day, optionally split by versionCode, countryCode, deviceModel or apiLevel. Defaults to the last 28 days that Google has data for. Rates are returned exactly as the API reports them. Google judges its bad-behavior thresholds on the user-perceived 28-day rates, which the crash and ANR defaults include.

Inputs: packageName (required), days, filter, endDate, +5 more.

google_reply_to_reviewC

Reply to a user review

Inputs: reviewId (required), replyText (required), packageName (required).

google_search_vitals_error_issuesA

Search crash and ANR clusters (error issues) with counts, affected versions, cause and location, most frequent first. Read the stack trace with google_search_vitals_error_reports.

Inputs: packageName (required), filter, endDate, orderBy, +3 more.

google_search_vitals_error_reportsA

Fetch individual crash/ANR reports with the full stack trace (reportText), device and app version. Filter by issue with errorIssueId from google_search_vitals_error_issues.

Inputs: packageName (required), filter, endDate, pageSize, +2 more.

google_update_data_safetyA

Submit a user-reviewed Data Safety declaration from an up-to-date Google Play CSV export. Google does not provide a corresponding read endpoint.

Inputs: csvPath (required), packageName (required).

google_update_detailsB

Update app details (default language, contact email/phone/website)

Inputs: editId (required), packageName (required), contactEmail, contactPhone, +2 more.

google_update_iapB

Update an existing in-app product

Inputs: sku (required), packageName (required), title, status, +4 more.

google_update_listingC

Update store listing for a specific language (title, descriptions, promo video)

Inputs: editId (required), language (required), packageName (required), title, +3 more.

google_update_one_time_productB

Update an existing one-time product. Pass the full desired listings/purchaseOptions state plus an updateMask (e.g. "listings,purchaseOptions").

Inputs: listings (required), productId (required), updateMask (required), packageName (required), +5 more.

google_update_testersC

Update tester Google Groups for a track

Inputs: track (required), editId (required), packageName (required), googleGroups.

google_upload_apkC

Upload an APK file

Inputs: editId (required), apkPath (required), packageName (required).

google_upload_bundleB

Upload an Android App Bundle (.aab)

Inputs: editId (required), bundlePath (required), packageName (required).

google_upload_imageB

Upload an image (screenshot, icon, feature graphic, etc)

Inputs: editId (required), language (required), imagePath (required), imageType (required), +1 more.

google_validate_editA

Validate an edit session without committing. Useful to check for errors before commit.

Inputs: editId (required), packageName (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3/5.0

    Scored across 188 tools

    Disambiguation3/5

    Platform prefixes and detailed descriptions separate most Apple vs Google and resource/action pairs. However, the set contains confusing overlaps: deprecated screenshot tools alongside the Asset Library/placement tools, and two Apple review-submission paths (`apple_submit_for_review` vs. `apple_create_review_submission` + `apple_add_review_submission_item` + `apple_submit_review_submission`). These overlaps make misselection plausible without careful reading.

    Naming Consistency5/5

    Tool names consistently follow a platform-prefixed snake_case verb_noun pattern (`apple_list_*`, `google_create_*`, etc.), including wait/search/query variants. The minor legacy exceptions still fit the same predictable convention.

    Tool Count1/5

    188 tools is far beyond a manageable set for an MCP server, even for a broad app-publishing domain. This harms discoverability and tool selection; the rubric treats 50+ tools as an extreme mismatch.

    Completeness4/5

    The surface covers app metadata, versions/builds/uploads, assets/placements, pricing/availability, IAP/subscriptions/offer codes, reviews, beta testing, analytics/finance, certificates/profiles/devices, and Google edit/release/vitals workflows. Some lifecycle gaps remain, such as Apple IAP update and subscription-group get/update, but core workflows are well covered.

    Maintenance

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers