# io.github.devinwang/google-play-developer-mcp (npm · google-play-developer-mcp)

MCP server for Google Play: full Android Publisher API v3 and Play Developer Reporting API.

- Trust score: 74/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-23

## Components

- npm · `google-play-developer-mcp`: 74/100 (this document), [markdown](https://verifymcp.io/servers/devinwang-google-play-developer-mcp/google-play-developer-mcp.md), [page](https://verifymcp.io/servers/devinwang-google-play-developer-mcp/google-play-developer-mcp)

## Channel facts

- Registry: `npm`
- Package: `google-play-developer-mcp`
- Version: `0.2.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-23.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 42 of 117 dependencies flagged as unhealthy (1 deprecated).
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to devinwang/google-play-developer-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 2 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 58/100
  - AI-judged instruction clarity (fair).
  - Tool/resource definitions use about 10902 tokens (~69/item across 157 items; 157 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 81/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 44% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 21 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "accounts_remove" implies "remove" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 157 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the io.github.devinwang/google-play-developer-mcp server?

io.github.devinwang/google-play-developer-mcp runs locally as an npm package, launched with npx -y google-play-developer-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add devinwang-google-play-developer-mcp -- npx -y google-play-developer-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "devinwang-google-play-developer-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "google-play-developer-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "devinwang-google-play-developer-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "google-play-developer-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add devinwang-google-play-developer-mcp -- npx -y google-play-developer-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "devinwang-google-play-developer-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "google-play-developer-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add devinwang-google-play-developer-mcp --command npx --arg -y --arg google-play-developer-mcp
```

### Hermes

```yaml
mcp_servers:
  devinwang-google-play-developer-mcp:
    command: "npx"
    args: ["-y", "google-play-developer-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "devinwang-google-play-developer-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "google-play-developer-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add devinwang-google-play-developer-mcp -t stdio -c npx -a -y google-play-developer-mcp
```

### Other

```json
{
  "mcpServers": {
    "devinwang-google-play-developer-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "google-play-developer-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-22 (score 74, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-21 (score 59)

First indexed and scored.

## MCP tools (157)

### `accounts_list` (~28 tokens)

List every Play Console account registered with the MCP server (names + key-file paths, no secrets).

### `accounts_current` (~23 tokens)

Show which account is currently active. All subsequent API calls target this account.

### `accounts_add` (~92 tokens)

Register a new Play Console account. Provide a local filesystem path to a Google Cloud service-account JSON key. The key stays on disk — the MCP only records its path.

Input parameters:

- `description` (string)
- `keyFile` (string, required): Absolute path to the service-account JSON key file
- `name` (string, required): Short identifier used to switch accounts, e.g. 'my-app' or 'client-acme'

### `accounts_remove` (~30 tokens)

Remove an account from the local registry. Does NOT delete the key file.

Input parameters:

- `name` (string, required)

### `accounts_switch` (~24 tokens)

Make an existing registered account the active one.

Input parameters:

- `name` (string, required)

### `accounts_update` (~42 tokens)

Change the key-file path or description of an existing account.

Input parameters:

- `description` (string)
- `keyFile` (string)
- `name` (string, required)

### `auth_status` (~32 tokens)

Verify that the active account can acquire a Google OAuth token. Returns the service-account email plus whether a token was obtained.

### `apps_list` (~45 tokens)

List every Android app the active service account can access. Uses the Play Developer Reporting API's apps.search.

Input parameters:

- `pageSize` (number)
- `pageToken` (string)

### `apps_get` (~51 tokens)

Open a fresh edit and return the details resource (contact email/phone/website + default language) for one app.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app

### `edits_insert` (~55 tokens)

Open a new edit session for an app. Returns the edit id plus its expiry. Subsequent edits.* tool calls must pass this id.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app

### `edits_get` (~63 tokens)

Fetch an existing edit — useful to check expiry before work.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `edits_validate` (~66 tokens)

Validate an edit without committing. Catches schema/media errors before you publish.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `edits_commit` (~84 tokens)

Commit and publish all changes in the edit. Pass changesNotSentForReview=true to skip automatic review submission.

Input parameters:

- `changesNotSentForReview` (boolean)
- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `edits_delete` (~62 tokens)

Abandon an edit. All pending changes are discarded.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `details_get` (~66 tokens)

Get app-level details (contact email/phone/website + default language).

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `details_update` (~97 tokens)

Overwrite app-level details. Full replacement — unspecified fields are cleared.

Input parameters:

- `contactEmail` (string)
- `contactPhone` (string)
- `contactWebsite` (string)
- `defaultLanguage` (string)
- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `details_patch` (~92 tokens)

Partial update — only the provided fields change.

Input parameters:

- `contactEmail` (string)
- `contactPhone` (string)
- `contactWebsite` (string)
- `defaultLanguage` (string)
- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `country_availability_get` (~72 tokens)

Fetch per-country availability for a given track within an edit.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `track` (string, required)

### `listings_list` (~59 tokens)

List every locale listing within an edit.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `listings_get` (~83 tokens)

Get one locale's listing.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `language` (string, required): BCP-47 locale, e.g. en-US, fr-FR, zh-Hans
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `listings_update` (~138 tokens)

Full replacement update of a locale listing. Fields: title (30), shortDescription (80), fullDescription (4000), video (YouTube URL).

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `fullDescription` (string)
- `language` (string, required): BCP-47 locale, e.g. en-US, fr-FR, zh-Hans
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `shortDescription` (string)
- `title` (string)
- `video` (string)

### `listings_patch` (~114 tokens)

Partial update — unspecified fields preserved.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `fullDescription` (string)
- `language` (string, required): BCP-47 locale, e.g. en-US, fr-FR, zh-Hans
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `shortDescription` (string)
- `title` (string)
- `video` (string)

### `listings_delete` (~84 tokens)

Delete the listing for one locale.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `language` (string, required): BCP-47 locale, e.g. en-US, fr-FR, zh-Hans
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `listings_delete_all` (~67 tokens)

Delete ALL locale listings in this edit. Irreversible within the edit.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `images_list` (~95 tokens)

List uploaded images for a specific type and locale.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `imageType` (string, required)
- `language` (string, required): BCP-47 locale, e.g. en-US, fr-FR, zh-Hans
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `images_upload` (~124 tokens)

Upload a new image. `file` is a local filesystem path. MIME is auto-detected from extension (png/jpg).

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `file` (string, required): Absolute path to the image file
- `imageType` (string, required)
- `language` (string, required): BCP-47 locale, e.g. en-US, fr-FR, zh-Hans
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `images_delete` (~100 tokens)

Delete a single image by id.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `imageId` (string, required)
- `imageType` (string, required)
- `language` (string, required): BCP-47 locale, e.g. en-US, fr-FR, zh-Hans
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `images_delete_all` (~97 tokens)

Delete every image of a given type in one locale.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `imageType` (string, required)
- `language` (string, required): BCP-47 locale, e.g. en-US, fr-FR, zh-Hans
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `bundles_list` (~61 tokens)

List all AAB uploads in the current edit.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `bundles_upload` (~112 tokens)

Upload a new App Bundle (.aab). Returns versionCode and sha256. Commit the edit separately to publish to a track.

Input parameters:

- `ackBundleInstallationWarning` (boolean)
- `deviceTierConfigId` (string)
- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `file` (string, required): Absolute path to the .aab file
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `apks_list` (~60 tokens)

List all APK uploads in the edit.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `apks_upload` (~80 tokens)

Upload a new APK. Prefer AAB via `bundles_upload`.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `file` (string, required): Absolute path to the .apk file
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `apks_add_externally_hosted` (~92 tokens)

Register an APK that is hosted outside Google Play (enterprise-only, requires allowlist).

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `externallyHostedApk` (object, required): ExternallyHostedApk resource body
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `deobfuscation_files_upload` (~117 tokens)

Upload a ProGuard mapping file for a specific version code. Use deobfuscationFileType='proguard' or 'nativeCode'.

Input parameters:

- `apkVersionCode` (number, required)
- `deobfuscationFileType` (string, required)
- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `file` (string, required): Absolute path to the mapping file
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `expansion_files_get` (~79 tokens)

Get expansion file metadata for a version code.

Input parameters:

- `apkVersionCode` (number, required)
- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `expansionFileType` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `expansion_files_upload` (~85 tokens)

Upload expansion file contents (OBB).

Input parameters:

- `apkVersionCode` (number, required)
- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `expansionFileType` (string, required)
- `file` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `expansion_files_update` (~93 tokens)

Full update of expansion file metadata.

Input parameters:

- `apkVersionCode` (number, required)
- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `expansionFileType` (string, required)
- `fileSize` (string)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `referencesVersion` (number)

### `expansion_files_patch` (~93 tokens)

Partial update of expansion file metadata.

Input parameters:

- `apkVersionCode` (number, required)
- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `expansionFileType` (string, required)
- `fileSize` (string)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `referencesVersion` (number)

### `tracks_list` (~75 tokens)

List every track visible in this edit (includes default internal/alpha/beta/production + any custom closed-testing tracks).

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `tracks_get` (~86 tokens)

Get one track — includes all releases currently staged.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `track` (string, required): Track name: internal, alpha, beta, production — or a custom closed-testing track id

### `tracks_update` (~142 tokens)

Full replacement of track state. `releases` is an array of release objects — versionCodes, status (draft|inProgress|halted|completed), userFraction (0-1 for staged rollout), inAppUpdatePriority (0-5), countryTargeting, and releaseNotes.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `releases` (array, required)
- `track` (string, required): Track name: internal, alpha, beta, production — or a custom closed-testing track id

### `tracks_patch` (~89 tokens)

Partial update of track state.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `releases` (array, required)
- `track` (string, required): Track name: internal, alpha, beta, production — or a custom closed-testing track id

### `tracks_create` (~103 tokens)

Create a brand-new custom closed-testing track. The new id is set on the server. Type can only be closedTesting.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `track` (string, required): Id of the new track
- `trackConfigurations` (array)
- `type` (string)

### `testers_get` (~86 tokens)

Get the current tester allowlist for a track.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `track` (string, required): Track name: internal, alpha, beta, production — or a custom closed-testing track id

### `testers_update` (~92 tokens)

Full replacement of the tester allowlist.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `googleGroups` (array)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `track` (string, required): Track name: internal, alpha, beta, production — or a custom closed-testing track id

### `testers_patch` (~92 tokens)

Partial update of the tester allowlist.

Input parameters:

- `editId` (string, required): Edit id returned by `edits_insert` — required for all edits.* writes
- `googleGroups` (array)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `track` (string, required): Track name: internal, alpha, beta, production — or a custom closed-testing track id

### `onetime_products_list` (~51 tokens)

List all one-time products.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `pageSize` (number)
- `pageToken` (string)

### `onetime_products_get` (~56 tokens)

Get a single one-time product.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `onetime_products_create` (~81 tokens)

Create a one-time product. Pass the full OneTimeProduct body.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `product` (object, required): OneTimeProduct resource body
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `regionsVersion`

### `onetime_products_update` (~91 tokens)

Update a one-time product (patch semantics, with updateMask).

Input parameters:

- `latencyTolerance` (string)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `product` (object, required)
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `regionsVersion`
- `updateMask` (string)

### `onetime_products_delete` (~63 tokens)

Delete a one-time product.

Input parameters:

- `latencyTolerance` (string)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `onetime_products_batch_get` (~50 tokens)

Fetch up to 100 one-time products in one call.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productIds` (array, required)

### `onetime_products_batch_update` (~56 tokens)

Update up to 100 one-time products in one call.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `requests` (array, required): Array of UpdateOneTimeProductRequest

### `onetime_products_batch_delete` (~49 tokens)

Delete up to 100 one-time products in one call.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `requests` (array, required)

### `onetime_product_purchase_options_batch_update` (~74 tokens)

Update or create up to 100 purchase options for a one-time product.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `requests` (array, required)

### `onetime_product_purchase_options_batch_update_states` (~73 tokens)

Activate or deactivate up to 100 purchase options in one call.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `requests` (array, required)

### `onetime_product_purchase_options_batch_delete` (~67 tokens)

Delete up to 100 purchase options.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `requests` (array, required)

### `onetime_product_offers_list` (~100 tokens)

List offers attached to a purchase option. `purchaseOptionId` is required — use '-' to list across all options.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `pageSize` (number)
- `pageToken` (string)
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `purchaseOptionId` (string, required)

### `onetime_product_offers_get` (~76 tokens)

Get one offer on a purchase option.

Input parameters:

- `offerId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `purchaseOptionId` (string, required)

### `onetime_product_offers_batch_get` (~76 tokens)

Batch-get up to 100 offers.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `purchaseOptionId` (string, required)
- `requests` (array, required)

### `onetime_product_offers_batch_update` (~80 tokens)

Batch-update up to 100 offers (creates or updates).

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `purchaseOptionId` (string, required)
- `requests` (array, required)

### `onetime_product_offers_batch_update_states` (~80 tokens)

Activate/deactivate/cancel up to 100 offers.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `purchaseOptionId` (string, required)
- `requests` (array, required)

### `onetime_product_offers_batch_delete` (~75 tokens)

Delete up to 100 offers.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `purchaseOptionId` (string, required)
- `requests` (array, required)

### `subscriptions_list` (~55 tokens)

List all subscriptions.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `pageSize` (number)
- `pageToken` (string)
- `showArchived` (boolean)

### `subscriptions_get` (~52 tokens)

Get a single subscription.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscriptions_create` (~67 tokens)

Create a subscription.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `regionsVersion`
- `subscription` (object, required): Subscription resource body

### `subscriptions_update` (~100 tokens)

Patch-update a subscription. Pass `updateMask` to limit the fields updated.

Input parameters:

- `allowMissing` (boolean)
- `latencyTolerance` (string)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `regionsVersion`
- `subscription` (object, required)
- `updateMask` (string)

### `subscriptions_delete` (~71 tokens)

Delete a subscription. Only works on subscriptions with no active base plans/offers.

Input parameters:

- `latencyTolerance` (string)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscriptions_archive` (~64 tokens)

Archive a subscription. Archived subscriptions are hidden from new purchases but existing subscribers keep access.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscriptions_batch_get` (~46 tokens)

Get up to 100 subscriptions in one call.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productIds` (array, required)

### `subscriptions_batch_update` (~45 tokens)

Update up to 100 subscriptions in one call.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `requests` (array, required)

### `subscription_base_plans_activate` (~71 tokens)

Activate a base plan — starts making it available for purchase.

Input parameters:

- `basePlanId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscription_base_plans_deactivate` (~74 tokens)

Deactivate a base plan — no new purchases; existing subscribers unaffected.

Input parameters:

- `basePlanId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscription_base_plans_delete` (~68 tokens)

Delete a base plan (must be inactive).

Input parameters:

- `basePlanId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscription_base_plans_migrate_prices` (~100 tokens)

Apply a price change to existing subscribers of a base plan in specific regions.

Input parameters:

- `basePlanId` (string, required)
- `latencyTolerance` (string)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `regionalPriceMigrations` (array, required)
- `regionsVersion`

### `subscription_base_plans_batch_migrate_prices` (~74 tokens)

Migrate prices on up to 100 base plans in one call.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `requests` (array, required)

### `subscription_base_plans_batch_update` (~67 tokens)

Upsert up to 100 base plans.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `requests` (array, required)

### `subscription_base_plans_batch_update_states` (~69 tokens)

Activate/deactivate up to 100 base plans.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `requests` (array, required)

### `subscription_offers_list` (~94 tokens)

List offers for a base plan. `basePlanId` supports '-' wildcard to list across all.

Input parameters:

- `basePlanId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `pageSize` (number)
- `pageToken` (string)
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscription_offers_get` (~71 tokens)

Get a single offer.

Input parameters:

- `basePlanId` (string, required)
- `offerId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscription_offers_create` (~95 tokens)

Create an offer on a base plan (free trial, intro pricing, etc.).

Input parameters:

- `basePlanId` (string, required)
- `offer` (object, required)
- `offerId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `regionsVersion`

### `subscription_offers_update` (~108 tokens)

Patch-update an offer.

Input parameters:

- `allowMissing` (boolean)
- `basePlanId` (string, required)
- `latencyTolerance` (string)
- `offer` (object, required)
- `offerId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `regionsVersion`
- `updateMask` (string)

### `subscription_offers_delete` (~70 tokens)

Delete an offer.

Input parameters:

- `basePlanId` (string, required)
- `offerId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscription_offers_activate` (~77 tokens)

Activate an offer — starts making it available for purchase.

Input parameters:

- `basePlanId` (string, required)
- `offerId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscription_offers_deactivate` (~72 tokens)

Deactivate an offer.

Input parameters:

- `basePlanId` (string, required)
- `offerId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console

### `subscription_offers_batch_get` (~74 tokens)

Batch-get up to 100 offers.

Input parameters:

- `basePlanId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `requests` (array, required)

### `subscription_offers_batch_update` (~74 tokens)

Upsert up to 100 offers.

Input parameters:

- `basePlanId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `requests` (array, required)

### `subscription_offers_batch_update_states` (~76 tokens)

Activate/deactivate up to 100 offers.

Input parameters:

- `basePlanId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `requests` (array, required)

### `monetization_convert_region_prices` (~71 tokens)

Utility: convert a price in one region to comparable prices in every other region. Use before setting prices on a base plan.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `price` (object, required): Money resource: currencyCode + units/nanos

### `purchases_products_v2_get` (~68 tokens)

Get current state of a one-time product purchase. Supports multiple purchase options + offers (replaces legacy purchases.products).

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `token` (string, required): Purchase token returned by the Play Billing library

### `purchases_products_acknowledge` (~96 tokens)

Acknowledge a one-time product purchase. Unacknowledged purchases are refunded by Play after 3 days.

Input parameters:

- `developerPayload` (string)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `token` (string, required): Purchase token returned by the Play Billing library

### `purchases_products_consume` (~86 tokens)

Consume a consumable one-time product so the user can buy it again. Consuming also acknowledges the purchase.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `productId` (string, required): Product id / SKU — stable identifier you assign in Play Console
- `token` (string, required): Purchase token returned by the Play Billing library

### `purchases_subscriptions_v2_get` (~87 tokens)

Get full state of a subscription purchase (SubscriptionPurchaseV2). Includes OfferPhase (2026), outOfAppPurchaseContext, latestSuccessfulOrderId, priceChangeState, priceStepUpConsentDetails.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `token` (string, required): Purchase token returned by the Play Billing library

### `purchases_subscriptions_v2_revoke` (~83 tokens)

Revoke a subscription (refund + terminate access). 2025-05 added `itemBasedRefund` option for per-item refunds.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `revocationContext` (object)
- `token` (string, required): Purchase token returned by the Play Billing library

### `purchases_subscriptions_v2_cancel` (~94 tokens)

Cancel a subscription (2025-09+). `cancellationType`: USER_REQUESTED, DEVELOPER_REQUESTED, or SYSTEM_INITIATED.

Input parameters:

- `cancelSurveyReason` (object)
- `cancellationType` (string)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `token` (string, required): Purchase token returned by the Play Billing library

### `purchases_subscriptions_v2_defer` (~87 tokens)

Defer billing for a subscription (2026-01 supports subscriptions with add-ons too). Pass DeferralInfo with expectedExpiryTime + desiredExpiryTime.

Input parameters:

- `deferralInfo` (object, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `token` (string, required): Purchase token returned by the Play Billing library

### `purchases_subscriptions_acknowledge` (~104 tokens)

Acknowledge a subscription purchase. 2025-11+ accepts optional `externalAccountId` for account-linking. (v1 endpoint retained for compatibility.)

Input parameters:

- `developerPayload` (string)
- `externalAccountId` (string)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `subscriptionId` (string)
- `token` (string, required): Purchase token returned by the Play Billing library

### `purchases_voided_list` (~108 tokens)

List voided purchases (refunded/charged-back). Supports filtering by time range + voided source.

Input parameters:

- `endTime` (string)
- `includeQuantityBasedPartialRefunds` (boolean)
- `maxResults` (number)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `startIndex` (number)
- `startTime` (string)
- `token` (string)
- `type` (number)

### `orders_list` (~90 tokens)

List orders within a time window. Returns OrderId, productId, purchase state, quantity, offerPhaseDetails.

Input parameters:

- `endTime` (string)
- `maxResults` (number)
- `orderIds` (array)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `pageToken` (string)
- `startTime` (string)

### `orders_get` (~42 tokens)

Get one order by order id.

Input parameters:

- `orderId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `orders_batch_get` (~46 tokens)

Get up to 100 orders in one call.

Input parameters:

- `orderIds` (array, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `orders_refund` (~65 tokens)

Refund an order. Pass `revoke=true` to also cancel the entitlement (subscription) or consumable.

Input parameters:

- `orderId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `revoke` (boolean)

### `orders_review_refund` (~157 tokens)

Respond to a pending refund review (collaborative chargeback, 2026-07). Call within 24 hours of a PendingRefundReviewNotification. Supply `refundPreference` and optional usage evidence so Play can dispute the chargeback.

Input parameters:

- `consumptionPercentageMilliunits` (number)
- `consumptionUsageEvents` (array)
- `orderId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `pendingRefundToken` (string, required): Token from the PendingRefundReviewNotification
- `refundPreference` (string, required): Whether Play should grant the refund
- `sampleContentProvided` (boolean, required): Whether a free sample, trial, or functionality preview was offered before purchase

### `external_transactions_get` (~39 tokens)

Get an external transaction (Alternative Billing).

Input parameters:

- `externalTransactionId` (string, required)
- `parent` (string, required): Format: applications/{packageName}

### `external_transactions_create` (~51 tokens)

Register a new external transaction (Alternative Billing).

Input parameters:

- `externalTransactionId` (string, required)
- `parent` (string, required): Format: applications/{packageName}
- `transaction` (object, required): ExternalTransaction resource body

### `external_transactions_refund` (~47 tokens)

Report a refund on an external transaction.

Input parameters:

- `externalTransactionId` (string, required)
- `parent` (string, required): Format: applications/{packageName}
- `refund` (object, required)

### `reviews_list` (~86 tokens)

List reviews from the last 7 days. Use token from the previous page for pagination. Optional filters: language, translationLanguage, device.

Input parameters:

- `maxResults` (number)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `startIndex` (number)
- `token` (string)
- `translationLanguage` (string)

### `reviews_get` (~50 tokens)

Get a single review by id.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `reviewId` (string, required)
- `translationLanguage` (string)

### `reviews_reply` (~60 tokens)

Post a public reply to a review. Replies can be edited by calling this again.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `replyText` (string, required)
- `reviewId` (string, required)

### `users_list` (~65 tokens)

List all users on a developer account. `parent` is the developer account id in the form `developers/{developerId}` (find it in the Play Console URL).

Input parameters:

- `pageSize` (number)
- `pageToken` (string)
- `parent` (string, required)

### `users_create` (~45 tokens)

Add a new team member to the developer account. Pass the user resource with email + roles + optional expirationTime.

Input parameters:

- `parent` (string, required)
- `user` (object, required)

### `users_update` (~53 tokens)

Patch-update a team member (roles, access level).

Input parameters:

- `name` (string, required): Full user resource name: developers/{dev}/users/{user}
- `updateMask` (string)
- `user` (object, required)

### `users_delete` (~35 tokens)

Remove a user from the developer account.

Input parameters:

- `name` (string, required): Full user resource name: developers/{dev}/users/{user}

### `grants_create` (~52 tokens)

Grant a user access to one app. `parent` is developers/{dev}/users/{user}. Grant body contains packageName + appLevelPermissions.

Input parameters:

- `grant` (object, required)
- `parent` (string, required)

### `grants_update` (~39 tokens)

Patch a grant (change appLevelPermissions).

Input parameters:

- `grant` (object, required)
- `name` (string, required)
- `updateMask` (string)

### `grants_delete` (~20 tokens)

Revoke a grant.

Input parameters:

- `name` (string, required)

### `device_tier_configs_list` (~55 tokens)

List all device-tier configs for an app.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `pageSize` (number)
- `pageToken` (string)

### `device_tier_configs_create` (~55 tokens)

Create a new device-tier config.

Input parameters:

- `allowUnknownDevices` (boolean)
- `deviceTierConfig` (object, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `device_tier_configs_get` (~48 tokens)

Get a device-tier config by id.

Input parameters:

- `deviceTierConfigId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `app_recovery_list` (~46 tokens)

List app recovery actions for a versionCode.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `versionCode` (string, required)

### `app_recovery_create` (~44 tokens)

Create an app recovery action.

Input parameters:

- `appRecoveryAction` (object, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `app_recovery_deploy` (~47 tokens)

Deploy an app recovery action to users.

Input parameters:

- `appRecoveryId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `app_recovery_cancel` (~46 tokens)

Cancel an in-flight app recovery action.

Input parameters:

- `appRecoveryId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `app_recovery_add_targeting` (~63 tokens)

Add targeting (country/locale/version) to an in-progress recovery action.

Input parameters:

- `appRecoveryId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `targetingUpdate` (object, required)

### `generated_apks_list` (~53 tokens)

List generated (split + standalone) APKs for a given bundle versionCode.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `versionCode` (number, required)

### `generated_apks_download` (~74 tokens)

Download a specific generated APK. `downloadId` is the id from `generated_apks_list`. Returns the binary as a base64 string.

Input parameters:

- `downloadId` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app
- `versionCode` (number, required)

### `system_apks_variants_list` (~50 tokens)

List system APK variants created for a given versionCode.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `versionCode` (string, required)

### `system_apks_variants_create` (~57 tokens)

Create a new system APK variant for a versionCode.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `variant` (object, required)
- `versionCode` (string, required)

### `system_apks_variants_get` (~53 tokens)

Get a system APK variant.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `variantId` (number, required)
- `versionCode` (string, required)

### `system_apks_variants_download` (~58 tokens)

Download a built system APK variant. Returns base64.

Input parameters:

- `packageName` (string, required): Android application package name, e.g. com.example.app
- `variantId` (number, required)
- `versionCode` (string, required)

### `internal_app_sharing_upload_apk` (~62 tokens)

Upload an APK for internal app sharing. Returns a link you can distribute internally.

Input parameters:

- `file` (string, required): Absolute path to the .apk file
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `internal_app_sharing_upload_bundle` (~47 tokens)

Upload an AAB for internal app sharing.

Input parameters:

- `file` (string, required)
- `packageName` (string, required): Android application package name, e.g. com.example.app

### `reports_apps_search` (~34 tokens)

List every app the service account can access.

Input parameters:

- `pageSize` (number)
- `pageToken` (string)

### `reports_apps_fetch_release_filter_options` (~55 tokens)

List the release-filter dimensions available for an app (version codes, track, staged rollout).

Input parameters:

- `name` (string, required): Resource name in the form `apps/{packageName}` (e.g. apps/com.example)

### `reports_anomalies_list` (~69 tokens)

List detected anomalies across metric sets for an app.

Input parameters:

- `filter` (string)
- `pageSize` (number)
- `pageToken` (string)
- `parent` (string, required): Resource name in the form `apps/{packageName}` (e.g. apps/com.example)

### `reports_crash_rate_get` (~44 tokens)

Get crash-rate metric-set metadata (available dimensions, metrics, freshness).

Input parameters:

- `name` (string, required): Format: apps/{packageName}/crashRateMetricSet

### `reports_crash_rate_query` (~96 tokens)

Query crash-rate timeline with dimensions, metrics, filter.

Input parameters:

- `dimensions` (array)
- `filter` (string)
- `metrics` (array)
- `name` (string, required): Format: apps/{packageName}/crashRateMetricSet
- `pageSize` (number)
- `pageToken` (string)
- `timelineSpec` (object)
- `userCohort` (string)

### `reports_anr_rate_get` (~26 tokens)

Get ANR-rate metric-set metadata.

Input parameters:

- `name` (string, required)

### `reports_anr_rate_query` (~79 tokens)

Query ANR-rate timeline.

Input parameters:

- `dimensions` (array)
- `filter` (string)
- `metrics` (array)
- `name` (string, required)
- `pageSize` (number)
- `pageToken` (string)
- `timelineSpec` (object)
- `userCohort` (string)

### `reports_anon_rss_swap_memory_get` (~49 tokens)

Get anonymous RSS + swap memory usage metric-set metadata. Format: apps/{packageName}/anonRssAndSwapMemoryUsageMetricSet

Input parameters:

- `name` (string, required)

### `reports_anon_rss_swap_memory_query` (~85 tokens)

Query anonymous RSS + swap memory usage timeline.

Input parameters:

- `dimensions` (array)
- `filter` (string)
- `metrics` (array)
- `name` (string, required)
- `pageSize` (number)
- `pageToken` (string)
- `timelineSpec` (object)
- `userCohort` (string)

### `reports_bitmap_memory_get` (~38 tokens)

Get bitmap memory usage metric-set metadata. Format: apps/{packageName}/bitmapMemoryUsageMetricSet

Input parameters:

- `name` (string, required)

### `reports_bitmap_memory_query` (~78 tokens)

Query bitmap memory usage timeline.

Input parameters:

- `dimensions` (array)
- `filter` (string)
- `metrics` (array)
- `name` (string, required)
- `pageSize` (number)
- `pageToken` (string)
- `timelineSpec` (object)
- `userCohort` (string)

### `reports_slow_start_rate_get` (~25 tokens)

Get slow-start-rate metadata.

Input parameters:

- `name` (string, required)

### `reports_slow_start_rate_query` (~80 tokens)

Query slow-start-rate timeline.

Input parameters:

- `dimensions` (array)
- `filter` (string)
- `metrics` (array)
- `name` (string, required)
- `pageSize` (number)
- `pageToken` (string)
- `timelineSpec` (object)
- `userCohort` (string)

### `reports_slow_rendering_rate_get` (~27 tokens)

Get slow-rendering-rate metadata.

Input parameters:

- `name` (string, required)

### `reports_slow_rendering_rate_query` (~82 tokens)

Query slow-rendering-rate timeline.

Input parameters:

- `dimensions` (array)
- `filter` (string)
- `metrics` (array)
- `name` (string, required)
- `pageSize` (number)
- `pageToken` (string)
- `timelineSpec` (object)
- `userCohort` (string)

### `reports_excessive_wakeup_rate_get` (~29 tokens)

Get excessive-wake-up-rate metadata.

Input parameters:

- `name` (string, required)

### `reports_excessive_wakeup_rate_query` (~84 tokens)

Query excessive-wake-up-rate timeline.

Input parameters:

- `dimensions` (array)
- `filter` (string)
- `metrics` (array)
- `name` (string, required)
- `pageSize` (number)
- `pageToken` (string)
- `timelineSpec` (object)
- `userCohort` (string)

### `reports_stuck_background_wake_lock_rate_get` (~31 tokens)

Get stuck-background-wake-lock-rate metadata.

Input parameters:

- `name` (string, required)

### `reports_stuck_background_wake_lock_rate_query` (~86 tokens)

Query stuck-background-wake-lock-rate timeline.

Input parameters:

- `dimensions` (array)
- `filter` (string)
- `metrics` (array)
- `name` (string, required)
- `pageSize` (number)
- `pageToken` (string)
- `timelineSpec` (object)
- `userCohort` (string)

### `reports_lmk_rate_get` (~31 tokens)

Get Low-Memory-Killer (LMK) rate metadata.

Input parameters:

- `name` (string, required)

### `reports_lmk_rate_query` (~79 tokens)

Query LMK-rate timeline.

Input parameters:

- `dimensions` (array)
- `filter` (string)
- `metrics` (array)
- `name` (string, required)
- `pageSize` (number)
- `pageToken` (string)
- `timelineSpec` (object)
- `userCohort` (string)

### `reports_errors_counts_get` (~25 tokens)

Get error-counts metric-set metadata.

Input parameters:

- `name` (string, required)

### `reports_errors_counts_query` (~78 tokens)

Query aggregated error-count timelines.

Input parameters:

- `dimensions` (array)
- `filter` (string)
- `metrics` (array)
- `name` (string, required)
- `pageSize` (number)
- `pageToken` (string)
- `timelineSpec` (object)
- `userCohort` (string)

### `reports_errors_issues_search` (~74 tokens)

Search grouped error issues (ErrorIssue).

Input parameters:

- `filter` (string)
- `interval` (object)
- `pageSize` (number)
- `pageToken` (string)
- `parent` (string, required): Resource name in the form `apps/{packageName}` (e.g. apps/com.example)

### `reports_errors_reports_search` (~80 tokens)

Search raw error reports (ErrorReport) within an issue or time window.

Input parameters:

- `filter` (string)
- `interval` (object)
- `pageSize` (number)
- `pageToken` (string)
- `parent` (string, required): Resource name in the form `apps/{packageName}` (e.g. apps/com.example)

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/devinwang-google-play-developer-mcp/google-play-developer-mcp#diagnostics

## Score history

- 2026-10-23: 74
- 2026-10-22: 74
- 2026-10-21: 59

## Common questions

### What is the io.github.devinwang/google-play-developer-mcp server?

io.github.devinwang/google-play-developer-mcp is listed in the public MCP registry as io.github.devinwang/google-play-developer-mcp. MCP server for Google Play: full Android Publisher API v3 and Play Developer Reporting API. This page covers its npm package (google-play-developer-mcp).

### Is the io.github.devinwang/google-play-developer-mcp server safe to use?

io.github.devinwang/google-play-developer-mcp scores 74 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.devinwang/google-play-developer-mcp server expose?

io.github.devinwang/google-play-developer-mcp exposes 157 tools: accounts_list, accounts_current, accounts_add, accounts_remove, accounts_switch, and 152 more. Their descriptions and schemas cost roughly 10,902 tokens of context every time the server is loaded.

### Is the io.github.devinwang/google-play-developer-mcp server still maintained?

io.github.devinwang/google-play-developer-mcp is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.devinwang/google-play-developer-mcp server under?

io.github.devinwang/google-play-developer-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/google-play-developer-mcp
- Socket report: https://socket.dev/npm/package/google-play-developer-mcp
- Repository: https://github.com/devinwang/google-play-developer-mcp
- Changelog RSS feed: https://verifymcp.io/servers/devinwang-google-play-developer-mcp/google-play-developer-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/devinwang-google-play-developer-mcp/google-play-developer-mcp.json
- HTML version of this page: https://verifymcp.io/servers/devinwang-google-play-developer-mcp/google-play-developer-mcp
