Android Developer MCP by Nova (CIVAI)

co.civai.nova/mcp-android_developer · v1.0.0 · communication

Android Developer MCP by Nova (CIVAI) is healthy: it completed an MCP handshake in 2996 ms and exposes 38 tools.

Ship a new Android app from chat. AI runs Google Play Console listings, screenshots, releases, uplo…

Endpoint: https://nova.civai.co/mcp/agents/mcp-android_developer (streamable-http)

No repository listed · Website · JSON · Add to my inventory

Facts

Users (last 30 days)0
HandshakeHealthy
Auth neededNone
Tool count38
Latency2996 ms
Last checked (UTC)2026-11-02T14:00:32.912Z

Health history

Checked (UTC)StatusLatencyError
2026-11-02T14:00:32.912ZHealthy2996

Tools (38)

list_tracksList an app's release tracks and their track_id — call this first to find the track_id other release tools need.
get_trackGet 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.
create_releaseCreate 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).
upload_bundleUpload 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, th
check_package_name_availabilityCheck 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.
create_appCreate 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. Che
list_appsList apps on this Play Console developer account. Derived from web decompile recon, not the official API.
list_accountsList which Google accounts are signed in to this browser session, with their X-Goog-AuthUser slot index. For visibility/debugging only.
update_store_listingUpdate 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 fi
update_store_listing_screenshotsReorder 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.
get_releaseGet a release's current state, including currently-attached artifacts and validation status — check this before start_rollout.
start_rolloutRoll 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
update_ads_declarationDeclare 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.
update_sign_in_detailsDeclare 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 s
update_target_audience_contentDeclare 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.
update_policy_declarationSet 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 beha
update_content_ratingSubmit 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
update_privacy_policySet 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.
update_data_safetySubmit 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 abo
update_none_option_declarationDeclare '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 hea
upload_screenshot_assetUpload 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
promote_releasePromote 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_verifi
get_pre_submit_statusRead-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
upload_store_listing_graphicUpload 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 screensh
enroll_play_app_signingRead, 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 actio
get_user_permissionsRead 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 h
grant_app_permissionGrant 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 serv
attach_artifact_to_releaseAttach 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
refresh_browser_sessionRefresh 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 thou
update_track_countriesSet 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
get_app_submission_stateHas 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_
send_app_for_reviewSend 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 b
update_store_settingsSet 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 P
get_setup_stateRead 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 — measur
declare_asset_ai_stateDeclare 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_f
setup_closed_testingSet 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
submit_prod_access_applicationSubmit 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
start_browser_authOpen 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).