mcpbeat Sign in

Android Developer MCP by Nova (CIVAI) MCP Server

answering

Android Developer MCP by Nova (CIVAI) is answering right now. Last checked 13 min ago. It exposes 38 tools.

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

Uptime history 8 hours of history
8 hours agonow
100.0%
Uptime 24h
28 of 28 checks
38
Tools
read from the server
601 ms
Response time
average over 24h
open, no key
Access
streamable-http

Nothing serious here today

Today is the operative word: we check Android Developer MCP by Nova (CIVAI) every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 13 min ago.

run in your terminal
claude mcp add mcp-android_developer --transport http https://nova.civai.co/mcp/agents/mcp-android_developer
Settings → Connectors → Add custom connector, then paste this address
https://nova.civai.co/mcp/agents/mcp-android_developer
~/.codex/config.toml
[mcp_servers.mcp-android_developer]
url = "https://nova.civai.co/mcp/agents/mcp-android_developer"
.cursor/mcp.json
{
  "mcpServers": {
    "mcp-android_developer": {
      "url": "https://nova.civai.co/mcp/agents/mcp-android_developer"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "mcp-android_developer": {
      "type": "http",
      "url": "https://nova.civai.co/mcp/agents/mcp-android_developer"
    }
  }
}

Available tools 38

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

store
update_store_listing
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 title, short_description and full_description must all be supplied together.
update_store_listing_screenshots
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.
update_store_settings
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.
upload
upload_bundle
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 bytes arrived and that Play accepted the bundle for processing.
upload_screenshot_asset
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.
upload_store_listing_graphic
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. Preserves the listing's existing text and other graphics, and refuses rather than risking a partial overwrite. Give the image ONE of three ways: image_base64 (inline bytes, no hosting needed, 64 KiB cap), image_url (https, any size) or image_path (replay host only).
app
create_app
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.
get_app_submission_state
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 guess reported a live in-review submission as REJECTED — so do not read a verdict into them; Play Console's Publishing overview is the authority on the real state. If the submission history cannot be read, this returns submission_state_known: false rather than guessing 'never submitted'.
release
create_release
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).
get_release
Get a release's current state, including currently-attached artifacts and validation status — check this before start_rollout.
setup
get_setup_state
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 submitted fine. It mixes real setup items with the action you are trying to take (*_sent_for_review), paths the app does not use (open_*, prereg_*) and consequences that only become true after review and rollout (prod_rollout, serving_in_prod). Still far better than get_pre_submit_status, which reads declarations and listing warnings only. For whether a submission can actually go through, use send_app_for_review's dry run (Play's `blocked` flag) or the Publishing overview. Read-only.
setup_closed_testing
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. DRY-RUN BY DEFAULT.
start
start_browser_auth
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).
start_rollout
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 selection — see update_track_countries). A bare FAILED_PRECONDITION here names nothing: open the Console's release review page (.../tracks/{track}/releases/{release}/review) and expand its errors, which is read-only and states the cause in one sentence. Production additionally requires the app to have passed review once.
track
get_track
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.
update_track_countries
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 track" — surfacing from start_rollout as a bare FAILED_PRECONDITION with no detail, while get_setup_state still reports closed_countries/prod_countries as complete. For a worldwide launch pass one real market in targeted_countries AND target_rest_of_world="true". Does not publish anything. Ask the user which countries; never pick for them.
accounts
list_accounts
List which Google accounts are signed in to this browser session, with their X-Goog-AuthUser slot index. For visibility/debugging only.
ads
update_ads_declaration
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.
apps
list_apps
List apps on this Play Console developer account. Derived from web decompile recon, not the official API.
attach
attach_artifact_to_release
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 forward untouched. Reads the release back afterwards and returns attach_verified plus the attached version codes rather than assuming success. This does NOT publish — call start_rollout for that, and confirm with the user first.
content
update_content_rating
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.
data
update_data_safety
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 push notification token, so confirm what the app actually collects with the user rather than assuming. Nothing is defaulted on your behalf — an unknown data type or a missing purpose is refused, not approximated. An app where users can sign up must also answer the account section (questions 92-96); pass the real account_creation_methods plus the deletion URLs rather than defaulting to "none", which publicly declares the app has no sign-up.
declare
declare_asset_ai_state
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 BY DEFAULT. This is a statement to a regulator about who made the images: ask the user, never infer it.
enroll
enroll_play_app_signing
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 the life of the app and gives Google custody of the app signing key: get the user's explicit agreement to this specific action before enrolling, and ask whether Google should generate a fresh key or reuse another app's deployment key. There is no way to ship an .aab without it.
grant
grant_app_permission
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. DRY-RUN BY DEFAULT: with commit omitted/not "true" it pre-reads and returns the exact before/after WITHOUT writing — show that to the user and get their explicit agreement to this specific account-permissions change, then re-run with commit="true". A relayed approval is not the user's approval. The write is append-only (refuses to drop or shrink any existing grant), scoped so account-level permissions are untouched, and re-reads afterwards to prove the append. For the permission set, prefer copy_permissions_from_app_id (copies an existing grant's values verbatim — matches the account's pattern and names no enum value).
none
update_none_option_declaration
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.
package
check_package_name_availability
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.
policy
update_policy_declaration
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?).
pre
get_pre_submit_status
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 an app as clear on a partial answer.
privacy
update_privacy_policy
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.
promote
promote_release
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 the SOURCE release id, so read the destination with get_track rather than trusting the echo. It does NOT publish; call start_rollout afterwards and confirm with the user first.
refresh
refresh_browser_session
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 deliberately before a long sequence, or to tell a stale cookie apart from a session that has genuinely ended (if this succeeds and no account is signed in, only start_browser_auth will help).
send
send_app_for_review
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_rollout. It fetches the publishing page's continuation token itself and round-trips it, which is what Play actually requires; the dry run also reports Play's own `blocked` flag, the best machine-readable "can this be sent?" in this capture. A FAILED_PRECONDITION here is NOT reliably a setup-task problem — that was wrong for a whole session. Read the dry run's `publishing_page` block and Play Console's Publishing overview before blaming the app's state.
sign
update_sign_in_details
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 derived from Play Console's own bundle but not yet live-verified — check the App access page after filing one.
submit
submit_prod_access_application
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.
target
update_target_audience_content
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.
tracks
list_tracks
List an app's release tracks and their track_id — call this first to find the track_id other release tools need.
user
get_user_permissions
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 principal already reaches, so read the current grants first and confirm them with the user.

Endpoints

URLTransportStateLatencyChecked
https://nova.civai.co/mcp/agents/mcp-android_developer streamable-http answering 707 ms 13 min ago

Alternatives to Android Developer MCP by Nova (CIVAI)

same job, measured the same way
AppScreen
by appscreen

Render App Store and Google Play screenshots from app captures: device frames, sizes, languages.

354 installs/wk local only
A
AppListingLab
by applistinglab

App Store and Google Play screenshots, ASO text and feature graphics from your AI agent

660 installs/wk local only
Shiny Gen
by shinygen

AI game maker: build, run, screenshot and play-test Godot and retro console games in a live project

answering
shotfleet
by shotfleet

Capture and check localized App Store and Google Play screenshots from your AI agent.

local only
Shotframe
by cloudcorprecords

Render App Store and Google Play screenshots from layouts and image files via the AppScreen API.

local only
RAWG Games MCP by UnClick
by malamutemayhem

Search video games with detail, screenshots, genres, and upcoming releases from RAWG. By UnClick.

42 installs/wk local only
Storeshots MCP
by mtbun

Render store-ready App Store and Google Play screenshots: device frames, headlines, exact sizes.

216 installs/wk local only
Truepane
by antonkarliner

Local MCP server generating complete App Store & Google Play screenshot sets.

67 installs/wk local only

Android Developer MCP by Nova (CIVAI) — questions

Answers built from our own checks of this server.

What can Android Developer MCP by Nova (CIVAI) do?
It exposes 38 tools, read directly from the server on our last check. Among them: attach_artifact_to_release, check_package_name_availability, create_app, create_release, declare_asset_ai_state, enroll_play_app_signing and 32 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is Android Developer MCP by Nova (CIVAI) mostly used for?
Its tools cluster around upload, store and track. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is Android Developer MCP by Nova (CIVAI) working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 28 of 28 checks got a reply (100.0%), average response time 601 ms. The bar chart above shows every period we have measured.
How do I connect Android Developer MCP by Nova (CIVAI)?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Android Developer MCP by Nova (CIVAI) need an API key?
No. Android Developer MCP by Nova (CIVAI) completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 38 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Android Developer MCP by Nova (CIVAI)?
It answers our handshake in 601 ms on average, which is faster than 18% of all working MCP servers we measure. That is on the slow side — worth knowing if the tool sits inside an interactive loop. The comparison comes from our own checks across the whole registry, every 15 minutes.