The official Svelte MCP server providing docs and autofixing tools for Svelte development
Android Developer MCP by Nova (CIVAI) is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Ship a new Android app from chat. AI runs Google Play Console listings, screenshots, releases, uplo…
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http android-developer-mcp-by-nova-civai https://nova.civai.co/mcp/agents/mcp-android_developer
# 2 — ask your agent for something these tools do
# list_tracks, get_track, create_release and 35 more
Android Developer MCP by Nova (CIVAI) costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http android-developer-mcp-by-nova-civai https://nova.civai.co/mcp/agents/mcp-android_developerReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
38 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
List an app's release tracks and their track_id — call this first to find the track_id other release tools need.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Get one release track's current state by track_id, including every release on that track with its release_id, name, status and lifecycle state. This is how you find an existing draft release's id after create_release refuses a second draft.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| track_id | string | yes | Numeric track id (e.g. the long digits in the Play Console URL's .../tracks/<this>/..., not the human alias like "internal"). Call list_tracks first to find it. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Create a new draft release on a track. Play Console allows only one draft release per track at a time — fails clearly if one already exists rather than guessing its id. Optionally sets a release_name (cosmetic label only).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| track_id | string | yes | Numeric track id (e.g. the long digits in the Play Console URL's .../tracks/<this>/..., not the human alias like "internal"). Call list_tracks first to find it. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| release_name | string | no | Optional cosmetic label for the release (not shown to users on Google Play). |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Upload a signed .aab. IMPORTANT: uploading does NOT attach the artifact to the release — it only becomes an app-level artifact (visible with its own version code) while the release's addedArtifacts stays empty, so start_rollout would have nothing to roll out. Call attach_artifact_to_release next, then get_release to check signing/content validation, then start_rollout. This call only confirms the
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| track_id | string | yes | Numeric track id (e.g. the long digits in the Play Console URL's .../tracks/<this>/..., not the human alias like "internal"). Call list_tracks first to find it. |
| release_id | string | yes | Release id on this track, from create_release/get_track. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| bundle_path | string | no | Absolute path ON THE REPLAY HOST, inside the secops container (repo root = /app). Only usable if you can already put files there — most operators cannot, so prefer bundle_url. |
| bundle_url | string | no | https URL the replay host downloads the signed .aab from — the route for a bundle built on your own machine, since bundle_path only sees files already on the replay host. Must be publicly resolvable. |
| bundle_base64 | string | no | The .aab inline as base64. Exists for symmetry with the image tools but is capped at 64 KiB, far below any real bundle — use bundle_url. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Check whether a package name is available before creating a new app. Derived from web decompile recon, not the official API — uses the Play Console web session, not the service account.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id, from your console URL (play.google.com/console/u/N/developers/{this}/...). |
| package_name | string | yes | Target Android package name, e.g. com.example.myapp. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm the right one with the user — do not guess. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Create a brand-new Android app on Google Play — the one thing the official Android Publisher API cannot do. Derived from web decompile recon of Play Console's own client, not yet verified against a real call; uses the Play Console web session (browser_auth_profile.json), not the service account. Check package_name availability first.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id, from your console URL (play.google.com/console/u/N/developers/{this}/...). |
| package_name | string | yes | Target Android package name, e.g. com.example.myapp. |
| app_title | string | yes | App title shown on the store listing. |
| default_language | string | yes | Default app language, e.g. en-US. |
| app_type | string | no | APP_TYPE_APP or APP_TYPE_GAME. |
| paid | boolean | no | Whether the app is paid. Default false. |
| app_meets_guidelines | boolean | no | Confirms the app meets Play policy guidelines. Default true. |
| us_law_compliant | boolean | no | Confirms US law compliance. Default true. |
| app_class | string | no | PLAY_APP_CLASSIFICATION_UNSPECIFIED for a normal app (default), or EXTERNAL / THIRD_PARTY_APP_STORE / CREATOR. |
| distributes_on_android | boolean | no | Whether the app distributes on Android. Default true. |
| distributes_on_windows | boolean | no | Whether the app also distributes on Windows. Default false. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm the right one with the user — do not guess. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
List apps on this Play Console developer account. Derived from web decompile recon, not the official API.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id. |
| page_size | string | no | Max results per page. Default 500. |
| page_token | string | no | Pagination token from a previous call. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm the right one with the user — do not guess. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
List which Google accounts are signed in to this browser session, with their X-Goog-AuthUser slot index. For visibility/debugging only.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Update an app's main store listing (title, short/full description) for one language using Play Console's own web session. Does NOT need create_edit/commit_edit — it patches the listing directly. On an app whose language has no listing entry yet this CREATES the entry (verified live), so it is the first call before attaching any graphic. Note the PATCH replaces the whole entry for that language, so
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| store_listing_id | string | no | Always "0" — the main store listing. (It is NOT the long number in the Play Console store-listing URL; that is the app id. "0" is what Play Console's own PATCH sends and it is what creates the listing |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| language | string | yes | BCP-47 language code for the listing, e.g. en-US. |
| title | string | yes | App title for this language. |
| short_description | string | yes | Short description for this language. |
| full_description | string | yes | Full description for this language. |
| save_mode | string | no | "save" COMMITS the listing (what Play Console's own Save button does); "draft" (the DEFAULT) writes only the draft copy. Pass "save" for any listing that has to count toward release. With the defa |
| validation_mode | string | no | "draft" (default) or "full". Only applies when save_mode is "draft" - the committed endpoint rejects the validationMode query param outright ("Cannot bind query parameter"). Does NOT make the dashboar |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Reorder or remove an app's existing store-listing screenshots for one language. Preserves the listing's title/descriptions untouched. Can ONLY reorder/remove already-uploaded screenshots (matched by URL) — cannot add a brand-new screenshot image.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| store_listing_id | string | yes | Numeric store listing id from the Play Console store listing URL (0 for the main listing). |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| language | string | yes | BCP-47 language code for the listing, e.g. en-US. |
| screenshot_urls | string | yes | JSON array of the EXISTING screenshot URLs, in the desired final order (omit a URL to remove that screenshot). Every URL must already be present in the listing — this tool cannot add new images. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Get a release's current state, including currently-attached artifacts and validation status — check this before start_rollout.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| track_id | string | yes | Numeric track id (e.g. the long digits in the Play Console URL's .../tracks/<this>/..., not the human alias like "internal"). Call list_tracks first to find it. |
| release_id | string | yes | Release id on this track, from create_release/get_track. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Roll out a release — this IS Android's publish action for the release. Not simply reversible; always confirm with the user, especially on production. Preconditions it cannot satisfy itself: the release needs an artifact attached (attach_artifact_to_release — promote_release does NOT attach one), and the track needs at least one EXPLICITLY selected country (target_rest_of_world alone is not a selec
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| track_id | string | yes | Numeric track id (e.g. the long digits in the Play Console URL's .../tracks/<this>/..., not the human alias like "internal"). Call list_tracks first to find it. |
| release_id | string | yes | Release id on this track, from create_release/get_track. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| rollout_percentage | string | no | Percentage of users to roll out to, 0-100. Defaults to 100 (full rollout) if omitted. |
| targeted_countries | string | no | Comma-separated ISO 3166-1 alpha-2 codes, e.g. "NG,GH,KE". NOTE: on a track that has no country targeting of its own this does NOT work — tested live, Play still refuses. Use update_track_countries to |
| target_rest_of_world | string | no | "true" serves every country/region Play allows; "false" serves only targeted_countries. Omitted is NOT the same as "false" — it keeps whatever the track already targets. Same caveat as targeted_countr |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Declare whether the app contains ads, using Play Console's own web session. Mandatory App content declaration required before a new app is eligible for production submission/review.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| contains_ads | string | yes | "true" if the app shows ads, "false" otherwise. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Declare whether any part of the app is restricted (requires account sign-in, payment, referral/QR codes, OTP, biometrics, or actions on another device). Formerly 'App access'. Mandatory App content declaration and one of the app-dashboard setup tasks that gate send_app_for_review. Both answers are supported: "false" is live-verified; "true" attaches reviewer credentials and its wire shape is deriv
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| is_restricted | string | yes | "false" if every part of the app works without signing in or paying. "true" if ANY functionality is behind a login, payment, OTP, referral code, biometrics or an action on another device — then `crede |
| credentials | string | no | Required when is_restricted="true". JSON array, one object per test account Play's reviewer should use: [{"name": "Checkout account", "username": "...", "password": "...", "credential_type": "email"|" |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Declare the app's target audience & content, using Play Console's own web session. Mandatory App content declaration. Only target_audience="adults" (18 and over only, not aimed at children) is currently supported — the correct, simplest answer for an app with no child-directed content.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| target_audience | string | yes | Must be "adults" (18 and over only, not aimed at children) — the only supported value right now. Any other value is not yet implemented and will return an error. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Set a simple Yes/No App content policy declaration, using Play Console's own web session. Mandatory declaration gating production submission eligibility. Currently supports policy_declaration="advertising_id" (does the app use advertising ID?) or "government_app" (is this app developed by or on behalf of a government?).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| policy_declaration | string | yes | Which declaration to set: "advertising_id" or "government_app". Other App content declarations (data safety, content rating, target audience, ads, sign in details, financial features, health) have the |
| policy_declaration_answer | string | yes | "true" or "false" answer to the declaration's Yes/No question. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Submit and apply the mandatory IARC content rating questionnaire, using Play Console's own web session. Only content_rating_category="all_other_app_types" (every question answered No, producing the lowest possible rating) is currently supported — the correct choice for a brand-new app with no mature content.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| content_rating_category | string | yes | Must be "all_other_app_types" — the only supported value right now. Games and Social/Communication apps need a different questionnaire path not yet supported. |
| content_rating_contact_email | string | yes | Contact email for content rating authorities / IARC correspondence. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Set the app's privacy policy URL, using Play Console's own web session. Mandatory App content declaration, and a prerequisite for submitting the Data safety declaration.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| privacy_policy_url | string | yes | A real, publicly accessible URL (http:// or https://) to the app's privacy policy page. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Submit the Data safety declaration. data_collection="none" declares the app collects and shares NO user data; data_collection="collects" files the per-data-type questionnaire from data_types. REQUIRES update_privacy_policy to have been called first. This is a public, legally-meaningful statement about the app: "none" is a FALSE declaration for any app that collects anything at all, including a pus
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| data_collection | string | yes | "none" (app collects/shares nothing) or "collects" (then data_types is required). |
| data_types | string | no | Required when data_collection="collects". JSON array, one object per data type the app collects or shares: {"type": <data type>, "collected": bool, "shared": bool, "ephemeral": bool, "required": bool, |
| encrypted_in_transit | string | no | Required when data_collection="collects": "true"/"false" — is all collected user data encrypted in transit? Confirm with the user; do not assume. |
| user_can_request_deletion | string | no | Required when data_collection="collects": "true"/"false" — can users request that their data be deleted? Confirm with the user; do not assume. |
| account_creation_methods | string | no | For data_collection="collects": how users create accounts in the app. MANDATORY for Play (omitting it makes the submission fail with a bare INVALID_ARGUMENT), so it is always sent. Comma-separated — q |
| account_creation_method_other | string | no | Free text describing the sign-up method, for question 93. Required when account_creation_methods includes "other". Ask the user; do not invent a description. |
| account_deletion_url | string | no | Public https URL where users can request account deletion (question 94). Play requires this once the app declares real account creation. Must be reachable without signing in. |
| supports_data_deletion | string | no | Question 95 — can users delete their data WITHOUT deleting the whole account? It looks like a yes/no but is a three-way choice: "yes", "no", or "no_auto_deleted" (the app deletes the data automaticall |
| data_deletion_url | string | no | Public https URL where users request data-only deletion (question 96). Needed when supports_data_deletion is "yes". |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Declare 'none of the above' for a multi-select feature-checklist App content declaration, using Play Console's own web session. Mandatory declarations. Currently supports none_option_declaration="financial_features" (does the app provide any financial features?) or "health" (does the app use any health features?). Only the 'none apply' answer is supported.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| none_option_declaration | string | yes | Which declaration to set: "financial_features" or "health". Other values are not supported. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Upload an image into the app's Asset Library. NOTE: for store listing graphics use upload_store_listing_graphic instead — the Asset Library's image cannot be attached to a listing slot (it lacks the blobKey the listing requires, confirmed live). This tool is only for getting an image into the Asset Library itself.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| image_path | string | no | Absolute path ON THE REPLAY HOST, inside the secops container (repo root = /app). Only usable if you can already put files there — most operators cannot, so prefer image_base64 or image_url. |
| image_base64 | string | no | The image's bytes as base64 (a data: URI prefix is fine) — the route that needs no file on the replay host and no hosting at all. Capped at 64 KiB of image because CLI steps receive their arguments in |
| image_url | string | no | https URL the replay host fetches the image from — the route for anything over the base64 cap. Must be publicly resolvable (a URL that resolves to a private address is refused). |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Promote an existing release to another track WITHOUT re-uploading the bundle. WARNING, measured 2026-10-28: it creates an EMPTY draft release — it does NOT carry the artifact across, despite what this description used to claim. ALWAYS follow it with attach_artifact_to_release and check attach_verified, or start_rollout will refuse because the release has no artifact. Its new_release_id also echoes
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| source_track_id | string | yes | Numeric track id the release is on now. Call list_tracks first — the human alias ("internal") is not accepted. |
| destination_track_id | string | yes | Numeric track id to promote to. Call list_tracks first — the human alias ("production") is not accepted. |
| release_id | string | no | Release id on the source track (from get_track/create_release). Pass this or version_code. |
| version_code | string | no | Android version code of the build to promote; the release carrying it is looked up on the source track. Pass this or release_id. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Read-only: what Google Play still requires before this app is review-eligible. Reports each App Content declaration's state, the hub's blocking validation errors, the store listing's validation warnings, and whether the Publishing page considers the app blocked. review_eligible is conservative — if any source could not be read it is false and the unread source is listed in errors, so never report
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| store_listing_id | string | no | Numeric store listing id (0 for the main listing). Defaults to 0. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Upload an image AND attach it to a store-listing slot in one call — phone screenshot, feature graphic or app icon. This is what makes a store listing completable from here; upload_screenshot_asset only gets an image into the Asset Library and CANNOT attach it. Play requires at least 2 phone screenshots plus a feature graphic and an icon for a complete listing, so call this once per image. Preserve
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| store_listing_id | string | no | Numeric store listing id (0 for the main listing). Defaults to 0. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| language | string | yes | BCP-47 language code of the listing to attach into, e.g. en-US. The listing must already have text for this language (update_store_listing creates it). |
| image_path | string | no | Absolute path ON THE REPLAY HOST, inside the secops container (repo root = /app). Only usable if you can already put files there — most operators cannot, so prefer image_base64 or image_url. |
| image_type | string | yes | Which slot: "phone_screenshot", "feature_graphic" (must be exactly 1024x500) or "icon" (must be exactly 512x512). |
| attach_mode | string | no | For phone_screenshot only: "append" (default) adds alongside existing screenshots, "replace" makes it the only one. Ignored for feature_graphic and icon, which are single-image slots. |
| image_base64 | string | no | The image's bytes as base64 (a data: URI prefix is fine) — the route that needs no file on the replay host and no hosting at all. Capped at 64 KiB of image because CLI steps receive their arguments in |
| image_url | string | no | https URL the replay host fetches the image from — the route for anything over the base64 cap. Must be publicly resolvable (a URL that resolves to a private address is refused). |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Read, or set, an app's Play App Signing enrolment. An app that is NOT enrolled CANNOT accept an .aab: upload_bundle returns 200 and Play then rejects the bundle during processing (error 3008), leaving a pending upload reference, no artifact, and an unexplained 400 from start_rollout. Call with action="status" first — that is read-only. Enrolment is PERMANENT, sets the app's signing identity for th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| action | string | no | "status" (default, read-only) or "enroll". |
| confirm_permanent | string | no | Required for action="enroll": must be exactly "yes". Only set it once the USER has agreed to this specific permanent change — not on a general approval to ship. |
| reuse_deployment_key_app_id | string | no | Optional: numeric play_app_id of an existing app whose deployment key this app should share. Leave empty for Google to generate a fresh signing key, which is the right default unless the apps genuinel |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Read one principal's current Play Console permissions by email — read-only, nothing changes. Works for a human teammate or a service account (…@….iam.gserviceaccount.com); both are the same user row keyed by email. Returns account-level permissions and, per app, the exact permission values already held. This is the prerequisite before grant_app_permission: an append has to preserve every app the p
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account (the one acting). Call list_accounts first and confirm with the user — do not guess. |
| target_user_email | string | yes | The email whose permissions to read — e.g. the CI service account …@….iam.gserviceaccount.com. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Grant a principal (teammate or service account) access to ONE app, as an APPEND that preserves every existing app grant and all account-level permissions. Use it to give a CI service account release access to a newly-created app — the step the androidpublisher API cannot do for a release-scoped service account (it 403s, it cannot grant itself access); this runs on the owner's Play Console session.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| google_account_email | string | yes | The signed-in owner account email that is acting. Call list_accounts first and confirm with the user — do not guess. |
| target_user_email | string | yes | The principal being granted access — e.g. the CI service account …@….iam.gserviceaccount.com. Must already exist on the account. |
| target_app_id | string | yes | NUMERIC app id (from the Play Console URL) of the app to grant access to — NOT the package name. |
| copy_permissions_from_app_id | string | no | Preferred: numeric app id of an app the principal ALREADY has, whose permission values are copied verbatim onto the new grant. Matches the existing pattern and avoids naming any enum value. |
| permission_values | string | no | Alternative to copy_permissions_from_app_id: a JSON array of integer permission values for a least-privilege set, e.g. "[1,6]" (CAN_ACCESS_APP, CAN_MANAGE_TRACK_APKS — upload + testing-track release). |
| commit | string | no | Must be exactly "true" (or "yes") to actually write. Omit/anything else = dry-run that returns the before/after without writing. Only set it once the USER has agreed to this specific account-permissio |
| write_variant | string | no | Request shape for the grant write: "auto" (default) tries the known-good shapes in order. Pin a specific variant only when debugging a refused grant. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Attach an already-uploaded artifact (version code) to a release — the required step between upload_bundle and start_rollout. Uploading a bundle does NOT attach it, so without this the release has no artifact and start_rollout refuses. Identify the artifact by artifact_id, or give version_code and it is looked up among the app's processed artifacts. Carries the release's existing name and notes for
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| track_id | string | yes | Numeric track id from list_tracks (the aliases "internal"/"production" are not accepted). |
| release_id | string | yes | The release to attach to, from get_track or create_release. |
| artifact_id | string | no | Optional: the artifact id to attach. Omit and pass version_code instead to have it looked up. |
| version_code | string | no | Optional: version code of the uploaded bundle; used to find the artifact when artifact_id is omitted. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Refresh the saved Play Console session in place, with no new browser sign-in. Google rotates the __Secure-1PSIDTS/__Secure-3PSIDTS session cookies about every 10 minutes; the captured copy goes stale and every tool then returns 401 UNAUTHENTICATED — or list_accounts returns an empty list — even though the user never signed out. Every tool already retries this automatically on a 401, so call it del
| Parameter | Type | Required | Notes |
|---|---|---|---|
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Set which countries/regions a release track serves — the precondition for a track's first rollout. CRITICAL, measured 2026-10-28: pass at least one explicit targeted_countries value. target_rest_of_world="true" ALONE writes the rest-of-world flag and leaves the country list empty, and Play's release validator then refuses every rollout with "No countries or regions have been selected for this trac
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| track_id | string | yes | Numeric track id — call list_tracks first. Not the alias like "production". |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| targeted_countries | string | no | Comma-separated ISO 3166-1 alpha-2 codes, e.g. "NG,GH,KE". These are the countries the app becomes downloadable in. |
| target_rest_of_world | string | no | "true" also serves every other country/region Play allows — a worldwide launch, so confirm it. "false" (default) serves only targeted_countries. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Has this app ever been sent for Google Play review? ANSWERS WHAT get_pre_submit_status CANNOT: that tool reported review_eligible: true for an unreviewed draft app that could not publish by any route. An app that has never been reviewed cannot be rolled out to production at all. ever_submitted_for_review is the trustworthy field. The status codes are RAW AND UNMAPPED on purpose — a previous gues
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Send the app's pending changes to Google Play review — the API behind Play Console's "Send app for review". OUTWARD-FACING AND NOT FREELY REVERSIBLE: for an app that has never shipped this is the submission that decides whether it can be published at all. DRY-RUN BY DEFAULT — it reports what would be sent and sends nothing until commit="true". Confirm with the user first, exactly like start_rollou
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| review_behaviour | string | no | "review_immediately" (default) or "queue_for_review". |
| publishing_behaviour | string | no | "automatic" (default — changes go live as soon as review passes) or "manual" (hold for a manual go-live). Confirm which the user wants. |
| commit | string | no | "true" actually submits. Omit or "false" for a dry run. Never pass "true" without the user's explicit agreement in this conversation. |
| number_of_changes | string | no | The number of pending changes being submitted, exactly as Play Console's own "Submit N changes for review" button reads it. REQUIRED IN PRACTICE: Play treats this as a confirmation count and answers F |
| include_track_ids | string | no | Comma-separated numeric track ids whose pending changes this submission covers (AppChangesToInclude.trackIds). Play Console always sends this selection; with neither this nor a section list the server |
| include_sections | string | no | Comma-separated non-track sections to include: store_listing, store_settings, app_content, preregistration, advanced_distribution. Mirrors the Publishing overview's own groups - include each group tha |
| send_session_headers | string | no | Diagnostic only. "true" also sends the Console's own X-Play-Console-Session-Id and Accept-Language headers. Measured 2026-10-28: these are NOT required - the submission succeeds without them. Leave un |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Set the app's store category and public contact details — one of the app dashboard setup tasks that gates send_app_for_review. Until it is done Play refuses the review submission with a bare FAILED_PRECONDITION and Play Console's own Send-for-review button stays greyed out. The contact details are PUBLIC on the store listing. Derived from Play Console's own bundle; not yet live-verified.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| app_category | string | no | Store category, lower_snake_case: shopping, food_and_drink, business, lifestyle, social, finance, health_and_fitness, education, entertainment, productivity, travel_and_local, photography, music_and_a |
| contact_email | string | no | PUBLIC support email shown on the store listing. Confirm it with the user; don't reuse an internal address by reflex. |
| contact_phone | string | no | Optional public support phone number. |
| contact_website | string | no | Optional public support website (https). |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Read the app dashboard's setup checklist. Returns which tasks are complete and which are still open (privacy_policy, app_access, ads, content_rating, target_audience, store_settings, store_listings, prod_countries, prod_release, ...). WARNING: the incomplete list is NOT a list of blockers — measured live, it listed 10 open tasks while Play Console's own Submit button was enabled and the app then
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Declare whether the store listing's images were created or edited using AI. Play Console's listing editor has a second step ("Review") carrying this REQUIRED regulatory declaration, and until it is answered the listing stays Draft, the dashboard's store_listings task stays incomplete, and send_app_for_review refuses with a bare FAILED_PRECONDITION — however complete the listing content is. DRY-RUN
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| ai_declaration | string | yes | "not_ai_generated" (Play Console's "Don't label assets") or "ai_generated" ("Label assets as created or edited using AI"). Applies to every asset in the app's Asset Library, so confirm it is true of a |
| commit | string | no | "true" actually declares. Omit or "false" for a dry run that lists the assets it would mark. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Set up a track's testers: creates or updates a tester email list and attaches it to the track as an audience group. Google requires a personal developer account to run a closed test with a minimum tester count for a minimum number of days before it can even APPLY for production access — this starts that clock, and reports the live required-vs-current tester and day counts so the gap is a number. D
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| track_id | string | yes | Numeric track id — call list_tracks first. Use the closed/alpha track for the production-access requirement. |
| tester_emails | string | no | Comma-separated Google account emails of testers. Real accounts that will install the app — Play counts installs, not invitations. |
| tester_list_name | string | no | Name of the tester email list (default "Closed testers"). An existing list with this name is updated rather than duplicated. |
| commit | string | no | "true" applies the change. Omit or "false" for a dry run. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Submit the production-access application questionnaire for a personal developer account. Only possible once the closed-testing tester/day requirement is met (see setup_closed_testing and get_setup_state). All ten answers are the developer's own words about their testing — never invent them. DRY-RUN BY DEFAULT.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| developer_id | string | yes | Numeric Play Console developer id (from the Play Console URL). |
| play_app_id | string | yes | Numeric Play app id from the Play Console URL (.../app/<this>/...). NOT the package name. |
| google_account_email | string | yes | The signed-in Google account email that owns this Play Console developer account. Call list_accounts first and confirm with the user — do not guess. |
| tester_recruitment_methodology | string | no | How testers were recruited (free text, the developer's own words). |
| tester_recruitment_difficulty | string | no | very_difficult | difficult | neither | easy | very_easy |
| tester_engagement | string | no | How testers engaged with the app (free text). |
| tester_feedback | string | no | What feedback testers gave (free text). |
| intended_audience | string | no | Who the app is for (free text). |
| app_value_or_uniqueness | string | no | What the app offers users (free text). |
| expected_first_year_installs | string | no | zero_to_ten_thousand | ten_thousand_to_one_hundred_thousand | one_hundred_thousand_to_one_million | one_million_or_more | i_dont_know |
| testing_induced_changes | string | no | What changed as a result of testing (free text). |
| production_readiness_decision | string | no | Why the app is ready for production (free text). |
| subsequent_round_changes | string | no | Changes planned after launch (free text). |
| commit | string | no | "true" submits. Omit or "false" for a dry run. |
| notification_message | string | no | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
Open App Store Connect sign-in only when needed. If the saved session is still valid, this tool returns success immediately and does not open the viewer. Call session_status first. Use force_reconnect only when the user explicitly wants to wipe the saved cookie and sign in again (destructive).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| force_reconnect | boolean | no | DESTRUCTIVE: delete the saved session cookie for this tenant, then open the viewer for a fresh sign-in. Do not set true unless the user explicitly asks to sign out / reconnect / clear session. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Android Developer MCP by Nova (CIVAI) or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | minimal | capability blast radius (minimal) — client exposure if the model is manipulated | −0 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. minimal is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| list_tracks | no tags | |
| get_track | no tags | |
| create_release | no tags | |
| upload_bundle | no tags | |
| check_package_name_availability | no tags | |
| create_app | no tags | |
| list_apps | no tags | |
| list_accounts | no tags | |
| update_store_listing | no tags | |
| update_store_listing_screenshots | no tags | |
| get_release | no tags | |
| start_rollout | no tags | |
| update_ads_declaration | no tags | |
| update_sign_in_details | no tags | |
| update_target_audience_content | no tags | |
| update_policy_declaration | no tags | |
| update_content_rating | no tags | |
| update_privacy_policy | no tags | |
| update_data_safety | no tags | |
| update_none_option_declaration | no tags | |
| upload_screenshot_asset | no tags | |
| promote_release | no tags | |
| get_pre_submit_status | no tags | |
| upload_store_listing_graphic | no tags | |
| enroll_play_app_signing | no tags | |
| get_user_permissions | no tags | |
| grant_app_permission | no tags | |
| attach_artifact_to_release | no tags | |
| refresh_browser_session | no tags | |
| update_track_countries | no tags | |
| get_app_submission_state | no tags | |
| send_app_for_review | no tags | |
| update_store_settings | no tags | |
| get_setup_state | no tags | |
| declare_asset_ai_state | no tags | |
| setup_closed_testing | no tags | |
| submit_prod_access_application | no tags | |
| start_browser_auth | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Android Developer MCP by Nova (CIVAI) can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.