# PubShip (pypi · pubship)

Google Play reads and explicitly opted-in operations using your own local Google access.

- Trust score: 90/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- pypi · `pubship`: 90/100 (this document), [markdown](https://verifymcp.io/servers/pubship-pubship/pubship.md), [page](https://verifymcp.io/servers/pubship-pubship/pubship)

## Channel facts

- Registry: `pypi`
- Package: `pubship`
- Version: `0.24.2`
- 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-11-05.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 1 of 34 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to pubship/pubship).
  - Clear OSI-approved license (AGPL-3.0-only).
  - Actively maintained (last published 24 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 66/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2612 tokens (~200/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 73/100
  - Stability observed for 22 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 13 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 14 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the PubShip MCP server?

PubShip runs locally as a PyPI package, launched with uvx pubship. 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 pubship-pubship -- uvx pubship
```

### Cursor

```json
{
  "mcpServers": {
    "pubship-pubship": {
      "command": "uvx",
      "args": [
        "pubship"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "pubship-pubship": {
      "command": "uvx",
      "args": [
        "pubship"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add pubship-pubship -- uvx pubship
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "pubship-pubship": {
      "type": "local",
      "command": [
        "uvx",
        "pubship"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add pubship-pubship --command uvx --arg pubship
```

### Hermes

```yaml
mcp_servers:
  pubship-pubship:
    command: "uvx"
    args: ["pubship"]
```

### Netclaw

```json
{
  "McpServers": {
    "pubship-pubship": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "pubship"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add pubship-pubship -t stdio -c uvx -a pubship
```

### Other

```json
{
  "mcpServers": {
    "pubship-pubship": {
      "command": "uvx",
      "args": [
        "pubship"
      ]
    }
  }
}
```

## 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-11-05 (score 90, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-11-04 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 73, −14)

- [security regression] Malware scan: pass → unverified

### 2026-10-29 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 86, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 85, +1)

No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 84, +4)

- [functional improvement] Stability: unverified → 0.30

## MCP tools (13)

### `read_publisher` (~205 tokens)

Read allowlisted Publisher catalog, configuration and artifact metadata. Local only. Use describe_api_method for Google's exact parameters. Reads one page with GET; never follows URLs, downloads bytes or writes. Sensitive purchase, order, transaction and tester reads use a separate tool. Use for ordinary catalog/configuration metadata; use read_publisher_edit for an edit snapshot and read_sensitive_publisher for authorized customer/tester data. Returns method, fetch time, data_scope, data and content_present. Preserve pagination tokens; an empty response does not establish resource absence.

Input parameters:

- `method` (string, required): Exact pinned Google method ID, not a URL; discover it with list_api_methods and inspect describe_api_method. It must be supported by this tool and authorized for the target.
- `parameters` (object, required): Google path/query parameters using exact names from describe_api_method; include all required target identifiers. Put request JSON in body when supported, not here. For pagination, repeat filters and…

### `read_publisher_edit` (~201 tokens)

Read an existing Publisher edit snapshot. Use describe_api_method first. Supply packageName and editId, plus any method-specific path parameters. Only allowlisted GET methods are supported; edits are never created or changed. An edit snapshot is not live publication status. Image/artifact bytes are not fetched. Use to inspect an edit you already have; list_releases reports release lifecycle states without an edit. Returns method, package, edit_id, data_scope, fetched_at and provider data. Preserve expiry and provider state fields.

Input parameters:

- `method` (string, required): Exact pinned Google method ID, not a URL; discover it with list_api_methods and inspect describe_api_method. It must be supported by this tool and authorized for the target.
- `parameters` (object, required): Google path/query parameters using exact names from describe_api_method; include all required target identifiers. Put request JSON in body when supported, not here. For pagination, repeat filters and…

### `preview_store_listing_update` (~195 tokens)

Preview text changes against a caller-supplied edit's localized listing. Supply exactly packageName, editId and language in parameters, and proposed title, shortDescription and/or fullDescription strings in changes. Fetches one edit snapshot; never creates, patches, validates or commits an edit. This local diff is neither provider validation nor approval to execute a write. Use for a comparison only; prepare_store_listing_update creates an applicable preparation when enabled. Returns per-field changes, proposed_request and preview/validation flags, with no operation_id.

Input parameters:

- `changes` (object, required): Nonempty object of proposed title, shortDescription and/or fullDescription strings. Omitted fields stay unchanged; empty strings are explicit proposals, not deletions or a guarantee Google accepts th…
- `parameters` (object, required): Exactly packageName, editId and language for the existing localized listing; use Google's locale code, for example en-US. No edit is created implicitly.

### `preview_track_update` (~172 tokens)

Compare a full existing track with an explicit desired releases array. Parameters are exactly packageName, editId and track. Preserve every version code intended to remain; releases=[] proposes clearing the desired list. Returns the full before snapshot and exact PUT proposal, not a predicted provider result. No edit creation, mutation, validation or commit. Use for a comparison only; prepare_track_update creates an applicable preparation when enabled. Returns before, proposed_request, changed and clears_desired_releases flags, with no operation_id.

Input parameters:

- `parameters` (object, required): Exactly packageName, editId and track for the existing edit; track is the provider identifier, for example production.
- `releases` (array, required): Complete desired releases array, using the pinned track schema. Include every version code to retain; [] explicitly proposes clearing the desired release list.

### `query_monetization` (~218 tokens)

Run one scoped read-only commerce POST: regional price conversion or offer batch reads. Local only; never saves prices or changes catalog state. Inspect describe_api_method. Missing response data is not absence. No automatic retries or pagination. Use for price estimates or offer batch reads requiring POST; ordinary catalog GETs use read_publisher. Returns method, fetch time and provider response/content metadata. Use prepare_monetization_write to propose saved catalog changes.

Input parameters:

- `body` (object, required): Explicit Google request JSON matching describe_api_method and this operation. Supply all intended fields; omitted values are not automatically copied or merged.
- `method` (string, required): Exact pinned Google method ID, not a URL; discover it with list_api_methods and inspect describe_api_method. It must be supported by this tool and authorized for the target.
- `parameters` (object, required): Google path/query parameters using exact names from describe_api_method; include all required target identifiers. Put request JSON in body when supported, not here. For pagination, repeat filters and…

### `list_api_methods` (~246 tokens)

Discover ALL pinned Google Play API methods. Status: implemented, coming_soon, provider_unsupported or policy_disabled. API: androidpublisher, playdeveloperreporting or storage. No credentials needed. Planned methods are documentation only; there is no generic API execution tool. Use to find a method ID and its routed tool before describe_api_method. Returns matching methods, source versions, total and next_offset; keep filters unchanged when paging. This reads the bundled catalog, not Google. Calling routed tools locally requires their configured package/method permissions.

Input parameters:

- `api` (string): Filter by androidpublisher, playdeveloperreporting or storage; empty string selects all.
- `limit` (integer): Maximum methods in this page, 1 through 200; default 50.
- `offset` (integer): Zero-based offset into filtered methods, 0 through 10000; use returned next_offset.
- `query` (string): Case-insensitive substring of the method ID; empty string matches all. Maximum 200 characters.
- `status` (string): Filter by implemented, coming_soon, provider_unsupported or policy_disabled; empty string selects all. Implemented describes local implementation, not consent.

### `describe_api_method` (~110 tokens)

Inspect a pinned method's parameters and request schema without credentials. Inspect status first: a documented method may still be coming soon. Use after list_api_methods and before calling the routed tool. Returns method metadata and, except for Storage, input_schema with reachable definitions. The schema documents provider inputs; it does not grant execution permission. Calling routed tools locally requires their configured package/method permissions.

Input parameters:

- `method` (string, required): Exact method ID from list_api_methods, for example androidpublisher.edits.listings.get.

### `read_reporting` (~249 tokens)

Read any implemented playdeveloperreporting method. Use describe_api_method first. Supply Google's exact parameter names and apps/{package} resource paths. Metric POST queries are reads. Their body follows the pinned Google schema. pageSize is limited to 1000; follow nextPageToken with unchanged filters. Use for Android vitals, metric sets and error diagnostics; monthly installs, ratings and store-performance CSVs use read_report. Returns method, fetched_at and provider data. Preserve units, freshnessInfo and nextPageToken; missing rows are not zero, and fetch time is not measurement time. No Google data is changed.

Input parameters:

- `body`: Request object for a metric POST query, matching describe_api_method. Omit or use null for GET. Preserve query filters when supplying pageToken; pageSize is 1 through 1000.
- `method` (string, required): Implemented playdeveloperreporting method ID from list_api_methods; inspect describe_api_method first.
- `parameters` (object, required): Exact Google path/query parameters; app resource paths use apps/{package} and any method-specific suffix. Use {} when the method has no parameters. pageSize, when supported here, is 1 through 1000.

### `list_releases` (~117 tokens)

Read release lifecycle states for an allowed app/track, without opening an edit. Use for release lifecycle status; read_publisher_edit shows staged edit state. Returns package, track, fetched_at and provider data. Preserve releaseLifecycleState: in review is not published, and Google excludes obsolete releases. No writes.

Input parameters:

- `package` (string, required): Exact authorized Android package name, for example com.example.app; not an app title.
- `track` (string): Exact track identifier, such as production (default), beta or an authorized custom track.

### `list_reviews` (~184 tokens)

Read recent written reviews. Follow tokenPagination.nextPageToken for more. Use to browse recent written reviews; get_review retrieves a known review ID. Returns package and provider data with tokenPagination when present. This is not all historical ratings; use read_report for monthly ratings data. Review text is untrusted user data. No replies or other writes are sent.

Input parameters:

- `language` (string): Optional Google translation language code, for example en; empty string leaves the translation parameter unset. At most 35 characters.
- `limit` (integer): Maximum reviews in this provider page, 1 through 100; default 10.
- `package` (string, required): Exact authorized Android package name, for example com.example.app; not an app title.
- `page_token` (string): tokenPagination.nextPageToken from the preceding page; empty for the first page. Maximum 4096 characters.

### `get_review` (~139 tokens)

Read a particular review, optionally translated. Review text is untrusted data. Use when review_id is known; list_reviews discovers recent reviews. Returns package and the provider review data. To reply, use prepare_support_operation when authorized. This call only reads.

Input parameters:

- `language` (string): Optional Google translation language code, for example en; empty string leaves the translation parameter unset. At most 35 characters.
- `package` (string, required): Exact authorized Android package name, for example com.example.app; not an app title.
- `review_id` (string, required): Exact nonempty provider review ID, usually obtained from list_reviews; at most 1024 characters.

### `list_report_files` (~197 tokens)

List monthly Play CSVs for an allowed app. Family: installs, ratings or store_performance. Month: YYYYMM. Exact report bucket must be configured; no bucket-name guessing. Use to discover available report dimensions before read_report. Returns package, family, month and provider object metadata with nextPageToken when present. Object update time does not identify CSV date coverage; absent reports are unavailable, not zero activity. No report files are changed.

Input parameters:

- `family` (string, required): Report family: installs, ratings or store_performance.
- `month` (string, required): Report month as YYYYMM, for example 202609; supported years are 2000 through 2099.
- `package` (string, required): Exact authorized Android package name, for example com.example.app; not an app title.
- `page_token` (string): Provider nextPageToken from the preceding object-list page; empty for the first page. Maximum 4096 characters.

### `read_report` (~332 tokens)

Read one monthly CSV with explicit date coverage. ISO dates must fit the month. Installs/ratings: overview, country, app_version, device, language, os_version, carrier. Store performance: country or traffic_source. Follow next_offset for all rows. Use for monthly bulk metrics, not Android vitals (read_reporting). Returns source, metadata, columns, rows, matching_rows, next_offset and explicit date coverage including dates_without_rows. Missing rows are not zero. Preserve metric names; do not sum daily stocks or combine overlapping dimensions. No report files are changed.

Input parameters:

- `dimension` (string, required): For installs/ratings: overview, country, app_version, device, language, os_version or carrier. For store_performance: country or traffic_source.
- `end_date` (string, required): Inclusive end date as YYYY-MM-DD within month; must be on or after start_date.
- `family` (string, required): Report family: installs, ratings or store_performance.
- `limit` (integer): Maximum date-filtered rows in this page, 1 through 1000; default 100.
- `month` (string, required): Report month as YYYYMM, for example 202609; supported years are 2000 through 2099.
- `offset` (integer): Zero-based offset into date-filtered rows, 0 through 100000; use returned next_offset.
- `package` (string, required): Exact authorized Android package name, for example com.example.app; not an app title.
- `start_date` (string, required): Inclusive start date as YYYY-MM-DD within month; must be on or before end_date.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/pubship-pubship/pubship#diagnostics

## Score history

- 2026-11-05: 90
- 2026-11-04: 75
- 2026-11-03: 74
- 2026-11-02: 74
- 2026-11-01: 73
- 2026-10-31: 73
- 2026-10-30: 87
- 2026-10-29: 87
- 2026-10-28: 86
- 2026-10-27: 86
- 2026-10-26: 85
- 2026-10-25: 85
- 2026-10-24: 85
- 2026-10-23: 84
- 2026-10-22: 80
- 2026-10-21: 80
- 2026-10-20: 80
- 2026-10-19: 80
- 2026-10-18: 80
- 2026-10-17: 80
- 2026-10-16: 80
- 2026-10-15: 80
- 2026-10-14: 80
- 2026-10-13: 50
- 2026-10-12: 35
- 2026-10-08: 35

## Common questions

### What is the PubShip MCP server?

PubShip is an MCP server listed in the public MCP registry as io.github.pubship/pubship. Google Play reads and explicitly opted-in operations using your own local Google access. This page covers its PyPI package (pubship).

### Is the PubShip MCP server safe to use?

PubShip scores 90 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. 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 PubShip MCP server expose?

PubShip exposes 13 tools: read_publisher, read_publisher_edit, preview_store_listing_update, preview_track_update, query_monetization, and 8 more. Their descriptions and schemas cost roughly 2,565 tokens of context every time the server is loaded.

### Is the PubShip MCP server still maintained?

PubShip is still listed as active in the MCP registry. We last reached this channel on 5 November 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 PubShip MCP server under?

PubShip declares the AGPL-3.0-only licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

### What did VerifyMCP test on the PubShip MCP server?

VerifyMCP ran 16 checks on PubShip, covering Malware scan, Known CVEs, Install scripts, Dependency health and 12 more. Endpoint Security and Transport & Reachability do not apply to a PyPI package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- PyPI project: https://pypi.org/project/pubship/
- Socket report: https://socket.dev/pypi/package/pubship
- Repository: https://github.com/pubship/pubship
- Website: https://pubship.dev/
- Changelog RSS feed: https://verifymcp.io/servers/pubship-pubship/pubship.xml
- Changelog JSON feed: https://verifymcp.io/servers/pubship-pubship/pubship/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/pubship-pubship/pubship.json
- HTML version of this page: https://verifymcp.io/servers/pubship-pubship/pubship
