1. Prepare read access
Follow the local setup guide to
install uv, enable the Google Play Android Developer API and grant
your service account read access to your app in Play Console.
Configure GOOGLE_PLAY_PACKAGES with your actual
package name. If using a service-account key, set
GOOGLE_APPLICATION_CREDENTIALS to its absolute file
path on your computer. Never paste the key contents into a chat.
Start with the credential-free installation check:
uvx pubship --check
This confirms the installed program can run. It does not authenticate with Google or prove that your account can read the app. Connect PubShip using the setup instructions for Claude Code, Codex, Cursor, Gemini CLI or your generic MCP client. Keep write opt-ins disabled for this walkthrough.
2. Inspect both tracks
Ask your client:
Inspect Production and Internal Testing releases for com.example.app. Make no changes. Show each track, version code, the exact releaseLifecycleState and the retrieval time. Separate a published release from one still in review. Explain anything the response does not establish.
Replace com.example.app with an app you own and have
allowlisted. The read tool is list_releases. These
are MCP tool arguments, not shell commands:
Production
{"package":"com.example.app","track":"production"}
Internal Testing
{"package":"com.example.app","track":"internal"}
The tool reads release lifecycle information without creating or committing an edit. Your client's wording may vary; inspect its actual tool call and response. An assistant saying it checked a release is not evidence unless the read succeeded.
3. Read the lifecycle
The response includes package, track,
fetched_at, Google's response under
data, and a note about lifecycle interpretation. Keep
the exact lifecycle value alongside any plain-language summary.
- In review is not published
- A release returned from the production track may still be in review. The track name identifies its destination, not proof of public availability.
- A staged edit is a draft snapshot
-
Track data read from an edit is not live release evidence. Even
a staged status of
completeddoes not prove the release is available to users. - Retrieval time is not publication time
-
fetched_atrecords when PubShip retrieved the response. Do not relabel it as Google's approval time or the moment users received the update. - Missing is not zero
- An empty response, omitted field or excluded obsolete release is not proof that the app never had a release. State the scope and limits of the returned data.
Before announcing a rollout, reconcile the returned lifecycle with Play Console's publishing state and the intended countries, track and audience. This guide establishes a read workflow, not universal device availability or a release approval.
4. Check data freshness
To investigate quality after a release, enable the separate Google
Play Developer Reporting API and its required access. Publisher
access alone does not establish Reporting access. First inspect
the exact method contract with the credential-free
describe_api_method tool:
{"method":"playdeveloperreporting.vitals.crashrate.get"}
Then retrieve crash-rate metric-set metadata through
read_reporting:
{"method":"playdeveloperreporting.vitals.crashrate.get","parameters":{"name":"apps/com.example.app/crashRateMetricSet"}}
This GET returns metric-set metadata, including freshness information when supplied. It does not return a daily crash-rate time series. Use the separate query method and its documented date, metric and dimension contract for that. Do not report missing or not-yet-available days as zero crashes, and keep the reporting timezone visible.
5. Resolve common failures
- ADC authentication failed
- Check the credential path and Google authentication setup in the client process. A terminal and a desktop client may have different environments. Follow the authentication guide; do not paste keys or tokens into the conversation.
- Google returns 403
- Verify the appropriate API is enabled and the actual service-account email has access to this app in Play Console. The local package allowlist does not grant Google permissions.
- The package is outside the allowlist
-
Correct
GOOGLE_PLAY_PACKAGESin your client's local configuration, then restart the MCP connection. Add only packages you or your organization own. - The client cannot find the tool
- Check that the PubShip connection started successfully and lists its tools. Recheck the client configuration and executable path.
Once reads are working, use the permissions and data-flow guide before enabling any changes. PubShip runs locally with your credentials; tool results reach your MCP client and may reach its model provider.