Skip to main content
Glama
denshinji
by denshinji

play-console-mcp

An MCP server for the Google Play Console: store listings, icon, feature graphic, screenshots, app bundle releases, and user reviews. It runs over stdio and works with Claude Code or any other MCP client.

It is built to be safe to hand to an AI agent:

  • Changes are staged, never published implicitly. Write tools put their changes in a Play edit and return its editId. Nothing goes live until commit_edit is called, so the agent can show you edit_summary first and wait for your approval.

  • Production is locked. Staging or committing a change to the production track, or to a form-factor production track such as wear:production, is refused unless the server runs with PLAY_ALLOW_PRODUCTION=1.

  • Package allowlist. The server only touches the packages in PLAY_PACKAGE_NAMES.

  • Files stay inside the asset root. Graphics, bundles and listing files must resolve to files under PLAY_ASSET_ROOT (symlinks are followed before the check), so a prompt cannot make it read or upload an arbitrary file from your machine. The server refuses an asset root that is your home directory or above it. Images are checked against Play's size rules before anything is sent.

  • Reviews are marked untrusted. Review results carry a note telling the agent that review text is user content, not instructions. reply_to_review publishes immediately, so keep it behind a permission prompt.

Requirements

  • uv (installs Python 3.11+ and the dependencies on first run)

  • A Google Cloud service account with access to your app in Play Console

Related MCP server: play-console-mcp

Service account setup

  1. In Google Cloud Console, pick or create a project, open APIs & Services → Library, and enable the Google Play Android Developer API.

  2. Under IAM & Admin → Service Accounts, create a service account (no Cloud roles needed). In its Keys tab, choose Add key → JSON and download the key.

  3. Store the key outside any repository:

    mkdir -p ~/.config/play-console-mcp && mv ~/Downloads/<key>.json ~/.config/play-console-mcp/service-account.json && chmod 600 ~/.config/play-console-mcp/service-account.json
  4. In Play Console → Users and permissions → Invite new users, add the service account's email. Under App permissions, add only your app and grant what you need:

    • View app information (read-only)

    • Manage store presence (listings and graphics)

    • Reply to reviews

    • Release apps to testing tracks

    • Leave out Release to production unless you really want the agent near production.

New permissions can take a few hours to apply; until then the API answers 403 The caller does not have permission.

The Play Developer API cannot create apps. Create the app and upload its first bundle in Play Console by hand.

Configuration

Variable

Default

Purpose

PLAY_PACKAGE_NAMES

(required)

Comma-separated package names the server may manage; the first is the default

PLAY_SERVICE_ACCOUNT_JSON

~/.config/play-console-mcp/service-account.json

Path to the service account key

PLAY_ASSET_ROOT

the server's working directory

Directory that uploaded and synced files must live under; refused if it is your home directory or a parent of it

PLAY_ALLOW_PRODUCTION

unset

Set to 1 to allow production track changes

Adding it to Claude Code

From your app's repository, so the asset root is that repository:

claude mcp add play-console --scope local -e PLAY_PACKAGE_NAMES=com.example.app -- uv run --quiet --project /path/to/play-console-mcp play-console-mcp

uv run --project installs the exact dependency versions in uv.lock, so this is the most reproducible setup.

Or in the app repository's .mcp.json, pinned to a release tag:

{
  "mcpServers": {
    "play-console": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/denshinji/play-console-mcp@v0.1.1", "play-console-mcp"],
      "env": { "PLAY_PACKAGE_NAMES": "com.example.app" }
    }
  }
}

Keep the @v0.1.1 tag (or a commit hash). Without it, every start runs whatever is on main. uvx does not read uv.lock, so it resolves dependencies within the ranges in pyproject.toml; the upper bounds there stop a major release of a dependency from slipping in.

Leave commit_edit, reply_to_review, delete_edit and stage_store_dir out of your permission allowlist so each call asks you first.

What the guards do not cover

The checks above live inside this server. They stop an agent that talks to Play through these tools, and nothing else:

  • The key decides what is possible. Anything that can read the key file, including an agent with shell access on your machine, can call the Play API directly and skip every check here. The real limit is the permission set you grant the service account in Play Console, so leave out Release to production and admin rights, and use a separate service account from the one your CI uploads with.

  • Permission prompts depend on your client. In Claude Code's auto or bypass permission modes, a tool call may run without asking you. If you use those modes, add ask rules for commit_edit, reply_to_review and delete_edit (for example mcp__play-console__commit_edit) so publishing still needs your confirmation.

  • Data goes to your model provider. Review text, reviewer names and app contact details returned by the tools are sent to whichever model your client uses.

Syncing a store folder

stage_store_dir reads a folder (default docs/store/play) laid out like this:

docs/store/play/
  listing-id.md                  one file per language: listing-<language>.md
  listing-en-US.md
  icon-512.png                   icon*.png             → icon
  feature-graphic-1024x500.png   feature-graphic*.png  → featureGraphic
  screenshots/01-home.png        screenshots/*         → phoneScreenshots, in file-name order

Each listing file has one ## section per field. Headings may be English or Indonesian, and a character count in parentheses is ignored:

## App name (6/30)
Example

## Short description
One line that sells the app.

## Full description
Everything else.

It runs as a dry run by default and only reports what it would change. With dry_run=false it patches every listing and replaces each graphic set in one edit, ready for commit_edit. A typical request:

Sync docs/store/play to Play Console, show me the edit summary, and wait for my go-ahead before committing.

Tools

Tool

Effect

get_app_details, list_listings, list_images, list_tracks

Read; pass edit_id to read staged state

update_listing, upload_images, delete_images, stage_store_dir

Stage in an edit

upload_bundle, set_track_release

Stage an .aab or a release (default internal, draft)

edit_summary, validate_edit

Inspect an edit before committing

commit_edit

Publish an edit (send_for_review=false saves without sending for review)

delete_edit

Discard an edit

list_reviews, get_review

Read reviews (Play only returns roughly the last week)

reply_to_review

Publishes immediately, 350 characters max

Development

uv run pytest -q

Tests use a mocked Play API and need no credentials.

License

MIT

Available Tools

17 tools
commit_editA
Destructive

Publishes an edit's staged changes to Google Play. Only call this after the user has seen edit_summary and approved.

send_for_review=False saves the changes without sending them for review.

NameRequiredDescriptionDefault
edit_idYes
package_nameNo
send_for_reviewNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and openWorldHint=true, so safety is partly covered. The description adds valuable behavioral context: this publishes staged changes externally, requires prior approval, and with send_for_review=False saves without review. It still does not say whether the commit is reversible or what happens on failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and approval gate in one sentence, then separately clarifies the one nuanced flag. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation with existing annotations but no output schema, it provides the essential approval gate and flag behavior. It could be more complete about irreversibility and the role of package_name, but is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 3 parameters, so the description must compensate. It explains send_for_review well, including its default effect, but leaves edit_id and package_name undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (publishes) and resource (an edit's staged changes) scoped to Google Play. This distinguishes it from edit_summary and validate_edit, which prepare or inspect an edit rather than committing it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gates invocation on the user having seen edit_summary and approved, which is a clear when-to-use prerequisite. It also explains the send_for_review branch, giving the agent enough to choose behavior correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_editB
Destructive

Discards an edit and everything staged in it.

NameRequiredDescriptionDefault
edit_idYes
package_nameNo

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, openWorldHint=true, and readOnlyHint=false. The description adds real context beyond them: the blast radius is the edit itself plus everything staged inside it, which tells an agent this is not a narrow field deletion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. Every word contributes to the meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema and fully undescribed parameters, the description is too thin. It says what is lost but not how the two parameters select the target, nor any permission or irreversibility warning beyond the annotation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it gives no information about edit_id or package_name. It implies an edit identifier exists but does not explain the role of package_name or any format expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Discards an edit') plus its scope ('everything staged in it'), so the operation is unambiguous. It does not explicitly distinguish itself from siblings like commit_edit or validate_edit, which would be needed for a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus commit_edit, validate_edit, or edit_summary, nor any prerequisite or exclusion guidance. The intent is only implied by the verb 'Discards'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_imagesB
Destructive

Stages deleting one image by id, or every image of the type when image_id is omitted.

NameRequiredDescriptionDefault
edit_idNo
image_idNo
languageYes
image_typeYes
package_nameNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds non-obvious behavioral context beyond that: the operation is staged rather than immediate, and omitting image_id escalates the blast radius to every image of that type. Missing are error behavior for unknown ids and whether staging is reversible before commit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and scope, with the bulk-delete condition placed where it will be read. No filler and nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation with five undocumented parameters and no output schema, this is thin. The agent still lacks the targeting model (edit_id vs package_name), the meaning of image_type beyond the enum list, and confirmation that a commit step is required for the deletion to take effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, and the description only explains image_id. It says nothing about the required language and image_type enum (8 values), nor about how edit_id and package_name alternate as the targeting scope — arguably the most consequential parameter decision in the call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("stages deleting") and resource ("image") plus the scope variation (single id vs all of a type), which is precise enough to distinguish it from list_images and upload_images. It does not explicitly contrast with delete_edit, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives one real usage rule — omit image_id to target every image of the type — which is genuinely actionable. It says nothing about when to choose this over delete_edit, what edit_id vs package_name targeting means, or that the change presumably requires a subsequent commit_edit, so the agent must infer the surrounding workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_summaryC
Read-only

What an edit would publish: listings, graphic counts per language, and tracks.

NameRequiredDescriptionDefault
edit_idYes
package_nameNo

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so read-only safety is covered. The description adds some useful context about the returned content (listings, graphic counts, tracks), but does not explain behavior around missing edits, package_name filtering, or response shape beyond that brief list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence with no wasted words, and the key content is front-loaded. It is perhaps too terse, but it is efficiently structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 0% parameter description coverage, the description should compensate but mostly does not. It names the returned categories but omits parameter behavior and enough detail for an agent to confidently call the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention either parameter. The required edit_id is somewhat self-explanatory, but the optional package_name and its effect on the summary are left completely unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states what the summary contains (listings, graphic counts per language, tracks) but does not use a clear action verb or explicitly say it returns a summary of an edit. It lacks differentiation from siblings like validate_edit and commit_edit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as validate_edit, commit_edit, or get_app_details. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_app_detailsB
Read-only

App details: default language and contact email, phone and website.

Pass edit_id to read the staged state of an edit instead of the live one.

NameRequiredDescriptionDefault
edit_idNo
package_nameNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context by explaining the live-vs-staged read mode, which annotations cannot convey. It stops short of saying what happens when package_name is null or whether a missing app raises an error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the resource and returned fields, followed by the one behavioral caveat. No filler. The field list in sentence one is slightly ambiguous about whether those are returned values or inputs, but that is a minor cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly enumerates returned fields, and the edit_id mode is explained. The gap is the default behavior when package_name is omitted — an agent cannot tell whether the call resolves to a current app context, errors, or returns all apps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema documents neither parameter's meaning. The description carries edit_id well, explaining it selects the staged edit state over the live state. package_name is never mentioned, leaving the agent to infer that it identifies the target app.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (app details) and enumerates the fields returned: default language, contact email, phone, website. That is specific enough to distinguish it from every sibling (listings, images, reviews, edits). It lacks an explicit verb ('fetch/read'), relying on a noun phrase, but intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

One concrete conditional is given: pass edit_id to read the staged state of an edit rather than the live state. That is genuinely useful routing information. However, there is no guidance on when to omit package_name, which app is targeted by default, or how this relates to edit_summary/validate_edit in the edit workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_reviewB
Read-only

One review by id, with the developer reply if there is one.

NameRequiredDescriptionDefault
review_idYes
package_nameNo
translation_languageNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description earns credit for disclosing that the developer reply may be embedded in the response, but says nothing about what happens with the two optional parameters or response shape; with no output schema, that leaves a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with no filler, and the identifying resource and key return detail come first. Nothing is padded or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter tool with no output schema and zero schema descriptions, the description should clarify the optional parameters and any scoping rules. Two of three parameters are entirely undocumented anywhere, which is inadequate at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for three parameters. It mentions review_id only implicitly and never explains package_name (scoping to an app?) or translation_language (localizing review text?), both of which are non-obvious optional filters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — fetch one review by id — and adds that the developer reply is included when present. It doesn't name list_reviews as the alternative for enumeration, but the singular 'one review' makes the distinction reasonably evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the 'by id' phrasing; there is no explicit when-to-use statement or pointer to list_reviews for browsing. An agent can infer the split, but the description does no routing work.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_imagesC
Read-only

Uploaded graphics of one type (icon, featureGraphic, phoneScreenshots, ...) for a language.

NameRequiredDescriptionDefault
edit_idNo
languageYes
image_typeYes
package_nameNo

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: no mention of pagination, ordering, what happens when no images exist for a type, or how edit_id/package_name scope the query.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is short, but short by omission rather than by economy: a single fragmentary sentence that is neither front-loaded with a verb nor complete enough to be actionable on its own.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A four-parameter tool with zero schema descriptions, no output schema, and two undocumented nullable parameters needs the description to do real work. Instead it omits scoping semantics and return shape entirely, so an agent cannot call it correctly with confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, yet it only gestures at two of four parameters ('one type' and 'for a language'). The nullable edit_id and package_name — arguably the most consequential, since they change which app/edit is read — are never mentioned anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is a noun phrase that identifies the resource (uploaded graphics) and the two key filters (image type, language), plus example enum values, so the agent can infer what the tool returns. But it never states the verb — nothing says 'list' or 'retrieve' — so the purpose is only implied by the tool name rather than stated outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to call this versus the close siblings upload_images, delete_images, or list_listings. No prerequisites (e.g. whether an edit must be staged first, what edit_id does) and no exclusions are given, leaving the agent to guess from naming alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_listingsC
Read-only

Store listings (title, short and full description, video) for every language.

NameRequiredDescriptionDefault
edit_idNo
package_nameNo

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered, but the description adds no behavioral context beyond the annotation baseline: nothing about scoping to an edit or package, result ordering, or volume of data returned. The only extra signal, 'for every language', is a scope hint but doesn't explain behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short phrase with no waste, but it is under-specified rather than concise: it lacks a leading verb and any operational detail, so the brevity costs clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with two undocumented, mutually ambiguous scoping parameters and no output schema, the description should explain what edit_id vs package_name select and what a listing record contains per language. None of that is present, leaving the agent unable to call it correctly without experimentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters (edit_id, package_name) have 0% schema description coverage and are nullable with no defaults explained, yet the description never mentions either one or how they scope the listing. An agent cannot tell whether edit_id or package_name is required to get a meaningful result.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (store listings) and its contents (title, short/full description, video, per language), which partially distinguishes it from siblings like update_listing or list_images. However, it is a noun fragment with no verb, so it never actually states that the tool retrieves/lists these listings; an agent must infer the operation from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to call this versus update_listing, list_images, or get_app_details, and no mention of prerequisites such as needing an edit_id from an edit workflow. Usage can only be guessed from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_reviewsB
Read-only

Recent user reviews with text (Play only returns about the last week).

translation_language (e.g. "id") asks Play to translate reviews into it.

NameRequiredDescriptionDefault
page_tokenNo
max_resultsNo
package_nameNo
translation_languageNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the description's added value is the data-availability caveat: Play returns only roughly the last week, and only reviews with text. That is genuinely useful context an agent cannot get from the annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no waste, and the most important constraint (recent-only coverage) is front-loaded ahead of the parameter note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four undocumented parameters, no output schema, and pagination via page_token, the description should explain result limits and paging behavior. It covers only translation and recency, leaving an agent unable to reason about pagination or which app's reviews are returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden, and it only explains translation_language (with a concrete example value like "id"). page_token, max_results, and package_name — including whether package_name is optional and what happens when it is null — are left entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource (user reviews) and a narrowing scope (recent, text-bearing), which is enough to distinguish it from the singular get_review and from reply_to_review. The listing verb is only implied by the tool name rather than the description, keeping it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'recent user reviews' but there is no explicit statement of when to prefer this over get_review or how it relates to reply_to_review. The only real guidance is the Play recency caveat, which is about data coverage rather than tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tracksC
Read-only

Release tracks with their releases, version codes, status and rollout fraction.

NameRequiredDescriptionDefault
edit_idNo
package_nameNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only a list of returned fields and says nothing about pagination, whether all tracks are returned or only filtered ones, or what open-world access entails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler, but it is a fragment that omits the verb and the filtering behavior, so its brevity comes at the cost of specification rather than in service of it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, two undocumented optional parameters, and no annotation beyond read-only, the description should clarify default scope and filtering. It does not, leaving the agent unable to know what a call with no arguments returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the two optional parameters (edit_id, package_name) are completely undocumented anywhere. The description never mentions either parameter or explains whether omitting both returns all tracks across all edits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (release tracks) and enumerates returned fields (releases, version codes, status, rollout fraction), but it is a noun phrase with no verb and never says it 'lists' anything. An agent can infer purpose from the name list_tracks only, and nothing distinguishes it from siblings like set_track_release or list_listings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool, no prerequisites, and no mention of alternatives such as set_track_release or list_listings. The agent must infer that this is the read path for tracks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reply_to_reviewA
Destructive

Publishes a public developer reply (max 350 characters), replacing any earlier reply. This is live at once; confirm the text with the user first.

NameRequiredDescriptionDefault
review_idYes
reply_textYes
package_nameNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable context beyond annotations: the reply is public, live immediately, replaces prior replies, and has a character limit. It also includes a safety prompt to confirm with the user, which is not covered by the destructive annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and followed by critical behavioral notes. No wasted words; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers behavioral aspects well (public, immediate, destructive, character limit) but neglects parameter meanings, which are essential for correct invocation given the lack of schema descriptions. This gap is significant for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for missing parameter details. It only mentions the max 350 characters for reply_text but doesn't explain review_id or package_name, leaving two required/optional parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (publishes) and resource (public developer reply), and specifies that it replaces any earlier reply. No sibling tool performs this action, so there is no ambiguity to resolve.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage constraint: 'confirm the text with the user first' and notes the max 350 characters. It doesn't explicitly state when not to use the tool, but since it's the only reply tool, that's less critical.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_track_releaseB

Stages a release of already-uploaded version codes on a track, replacing the track's current releases. Use it to promote a build or change a rollout.

NameRequiredDescriptionDefault
trackYes
statusNodraft
edit_idNo
package_nameNo
release_nameNo
release_notesNo
user_fractionNo
version_codesYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description contributes one genuinely valuable behavioral fact not in the annotations: existing track releases are replaced, not appended. But annotations already cover the safety profile (destructive=false, openWorld=true), and the description says nothing about the edit lifecycle (edit_id, commit_edit), whether the release is immediately live, or how halted/completed statuses behave.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the action and its replacement semantics come first, the usage hint second. No filler, no redundancy with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An 8-parameter mutation with no output schema and zero parameter documentation needs far more than two sentences. The edit lifecycle (edit_id, eventual commit_edit), how user_fraction interacts with status, and which optional fields matter are all unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 8 parameters, so the description must carry the load, and it only glosses version_codes (pre-uploaded) and hinting at user_fraction via 'rollout'. It says nothing about track values, status semantics (draft/inProgress/halted/completed), edit_id, package_name, release_name, or release_notes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Stages a release ... on a track') and adds two distinguishing qualifiers: version codes must already be uploaded, and the call replaces current releases. That separates it from upload_bundle and commit_edit, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it to promote a build or change a rollout' gives concrete usage context, and 'already-uploaded version codes' implicitly rules out using it for new uploads. No alternative tool or prerequisite workflow (edit_id / commit_edit) is named, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stage_store_dirA
Destructive

Syncs a store folder: listing-.md files, icon*.png, feature-graphic*.png and screenshots/ (as phone screenshots, in file-name order).

dry_run=True (the default) only reports what would change. With dry_run=False the listings are patched and each graphic set is replaced in one edit. Graphics go to image_language, by default the first listing's.

NameRequiredDescriptionDefault
dry_runNo
edit_idNo
store_dirNodocs/store/play
package_nameNo
image_languageNo
include_graphicsNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and openWorldHint=true; the description adds genuinely useful context beyond them by spelling out that listings are patched and 'each graphic set is replaced in one edit', plus the safe default of dry_run=True. It stops short of saying what happens to graphics in the target edit that aren't present in the folder, or what authentication/scope is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight paragraphs: file layout first, then the dry-run default, then the write behavior. No filler, and the most decision-relevant fact (dry_run defaults to true) is front-loaded in the second paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, multi-file write tool with no output schema and six undocumented parameters, the description covers the core mechanics but leaves out prerequisites (edit_id creation/lifecycle), the role of include_graphics, and the effect on existing graphics not in the folder. Enough to attempt a call, not enough to call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the whole burden. It explains dry_run and image_language (including its default to the first listing's language) and implies store_dir's contents, but edit_id, package_name, and especially include_graphics are never mentioned despite include_graphics materially changing what gets synced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Syncs a store folder') and enumerates exactly which file patterns are consumed (listing-<language>.md, icon*.png, feature-graphic*.png, screenshots/), so an agent knows this is a directory-level batch operation. It does not explicitly contrast itself with single-item siblings like upload_images or update_listing, which it implicitly supersedes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The dry_run=True/False split gives implied guidance on preview-before-apply, but there is no explicit statement of when to prefer this over update_listing or upload_images, and no stated prerequisites (e.g. whether an edit must exist first, or that commit_edit is needed afterwards). Usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_listingA

Stages a change to one language's store listing; omitted fields are kept.

language is a Play code such as "id" or "en-US". Limits: title 30, short description 80, full description 4000 characters.

NameRequiredDescriptionDefault
titleNo
videoNo
edit_idNo
languageYes
package_nameNo
full_descriptionNo
short_descriptionNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the annotations (which only say not read-only, not destructive, open-world) by disclosing staging semantics, partial-update merge behavior, per-language scoping, and field length limits — all real behavioral constraints. Still silent on whether a staged edit must be committed via commit_edit to take effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight clauses, front-loaded with the core action, then the parameter clarification, then the limits. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-param mutation with no output schema and zero schema descriptions, the description covers the main content fields but omits edit_id/package_name/video semantics and says nothing about the resulting staged-edit state or how to apply it. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load; it does well for `language` (Play codes, examples) and gives length limits for title, short_description, and full_description. However `video`, `edit_id`, and `package_name` — three of seven params — are left entirely undefined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: 'Stages a change to one language's store listing'. The verb 'stages' also implicitly separates it from commit_edit and from read-only siblings like list_listings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Omitted fields are kept' implies partial-update usage, and 'one language' implies per-locale calls, but no explicit when-to-use or when-not guidance and no mention of the stage-then-commit workflow relative to edit_summary/validate_edit/commit_edit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_bundleB

Stages an .aab upload and a release of it on a track (internal draft by default).

release_notes maps language to text, e.g. {"id": "...", "en-US": "..."}, 500 characters each. user_fraction (0-1) is required for inProgress.

NameRequiredDescriptionDefault
pathYes
trackNointernal
statusNodraft
edit_idNo
package_nameNo
release_nameNo
release_notesNo
user_fractionNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, so the mutation/risk profile is largely covered. The description adds useful behavior: the default track/status and the conditional requirement linking user_fraction to inProgress. It says nothing about whether re-uploads supersede prior releases, whether an edit is created automatically, or what happens on failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action in the first sentence, then parameter notes. Very compact with no filler. Minor awkwardness from the fragmented second sentence and embedded line breaks, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 8 parameters, 0% schema coverage, and no output schema, this description leaves too much open: the meaning of edit_id/package_name/release_name, what path must point to, and sequencing relative to validate/commit tools. It should do substantially more given the annotation coverage that exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 8 parameters, so the description must carry the burden. It explains only release_notes (language→text map, 500 char limit, with example) and user_fraction (0-1, required for inProgress); path, status beyond the default, edit_id, package_name, and release_name remain undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: stages an .aab upload AND creates a release of it on a track. That is more precise than the bare name. But it never distinguishes itself from siblings such as set_track_release or the edit/stage/commit tools, which an agent would likely weigh against this one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage through defaults ('internal draft by default') and one conditional rule ('user_fraction (0-1) is required for inProgress'). It never says when to choose this over set_track_release, or whether it must be preceded by validate_edit/commit_edit. Guidance is inferable but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_imagesA
Destructive

Stages uploads of local PNG/JPEG graphics, checked against Play's size rules first.

Screenshots upload in the order given (up to 8). replace=True removes the existing images of this type first; icon, featureGraphic and tvBanner always replace the current image.

NameRequiredDescriptionDefault
pathsYes
edit_idNo
replaceNo
languageYes
image_typeYes
package_nameNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag destructiveHint=true and openWorldHint=true; the description adds genuinely new behavior: size-rule validation before upload, screenshot ordering, an 8-item cap, and the fact that replace=True wipes existing images of that type while icon/featureGraphic/tvBanner always replace. It doesn't cover failure modes or what 'staging' means for live state, keeping it out of the top tier.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action, then constraints. Every clause carries information an agent needs and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema and 0% parameter documentation, the description leaves real gaps: it never says what staging returns, how errors from the size check surface, or what language/edit_id/package_name do. It covers the headline behavior well but not enough to call safely without inspecting the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate and it only partially does: it explains 'replace', the ordering/cap semantics of 'paths', and implicit-replace behavior for three image_type enum values. The language, edit_id, and package_name parameters get no explanation anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Stages uploads of local PNG/JPEG graphics') and adds the validation constraint, which cleanly separates it from sibling tools like list_images and delete_images. It does not explicitly name those siblings, so it falls short of the top mark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'Stages' implies this feeds into an edit/commit flow (commit_edit sibling), but the description never states when to use this versus delete_images or that commit_edit is required afterward. Usage is implied rather than specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_editB
Read-only

Asks Play to check an edit without committing it.

NameRequiredDescriptionDefault
edit_idYes
package_nameNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, and the description is consistent with that ('without committing it'). It adds the useful detail that the check is performed by Play externally, but doesn't disclose what validation results look like, whether failures throw or return, or any rate/permission constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. The core behavior and the key non-committing constraint are stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 0% schema description coverage, the description should explain what validation returns, how failures are surfaced, and what package_name is for. It leaves an agent unable to predict the result or correctly populate the optional parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for the two parameters, yet it says nothing about edit_id or package_name. At best 'an edit' loosely hints at edit_id; package_name is entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('check') and resource ('an edit'), and the phrase 'without committing it' implicitly distinguishes it from commit_edit. However, it doesn't name the sibling or clarify what 'check' entails (syntax validation vs. policy review).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Without committing it' implies this is a pre-commit validation step, which gives some usage context. But it never explicitly says when to use this versus commit_edit or edit_summary, nor whether validation is required before committing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 17 tool updatesv0.1.1
    • First observedcommit_edit
    • First observeddelete_edit
    • First observeddelete_images
    • First observededit_summary
    • First observedget_app_details
    • First observedget_review
    • First observedlist_images
    • First observedlist_listings
    • First observedlist_reviews
    • First observedlist_tracks
    • First observedreply_to_review
    • First observedset_track_release
    • First observedstage_store_dir
    • First observedupdate_listing
    • First observedupload_bundle
    • First observedupload_images
    • First observedvalidate_edit

TDQS

B3.2/5.0

Scored across 17 tools

Disambiguation4/5

Most tools target clearly distinct resources and actions, and the edit lifecycle tools are well separated. Minor overlap exists between stage_store_dir and the lower-level listing/image tools, and between upload_bundle and set_track_release, though the descriptions clarify the intended boundaries.

Naming Consistency4/5

Almost all tools use consistent snake_case verb_noun naming. The main deviation is edit_summary, which is a noun phrase rather than a verb-led operation name.

Tool Count4/5

The 17 tools cover several distinct Google Play Console areas and each appears to earn its place. The total is slightly above the typical well-scoped range but remains reasonable for publishing, graphics, tracks, reviews, and edit management.

Completeness4/5

The surface covers the core publishing workflow: app details, listings, images, tracks, edit validation/commit, and review replies. There are minor gaps such as no explicit create_edit or update_app_details tool, but these are workable within the described flow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables managing releases, monitoring Android vitals, analyzing earnings and search terms, optimizing ASO, and preflighting store assets through natural language, with a confirmation gate before destructive writes.
    170
    65 PyPI
    2
    Apache 2.0
  • F
    license
    B
    quality
    B
    maintenance
    Enables AI agents to manage Google Play apps with scope-based permissions, including publishing internal releases, updating listings, replying to reviews, and promoting to production.
    11
    1 npm
    -