Google Play Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Google Play Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An MCP (Model Context Protocol) server that connects AI assistants to the Google Play Developer API v3 — enabling automated app publishing, subscription management, review monitoring, and tester management.
isError flags| Tool | Description | Read-only |
|---|---|---|
gplay_list_tracks | List all release tracks (internal/alpha/beta/production) with version codes, status, rollout %, and release notes | ✅ |
gplay_upload_bundle | Upload .aab bundle → assign to track → commit. Supports draft mode and staged rollout | ❌ |
gplay_get_app_details | Get store listing (title, descriptions, contact info) for any language | ✅ |
| Tool | Description | Read-only |
|---|---|---|
gplay_list_subscriptions | List all subscription products with base plans, billing periods, and pricing | ✅ |
gplay_get_subscription | Get detailed subscription info including all listings, base plans, regional pricing, and offer tags | ✅ |
gplay_list_inapp_products | List all one-time in-app products (consumable and non-consumable) with pricing | ✅ |
| Tool | Description | Read-only |
|---|---|---|
gplay_list_reviews | List user reviews with star ratings, review text, device info, app version, and developer replies. Supports translation | ✅ |
gplay_reply_review | Post a developer reply to a user review (max 350 chars) | ❌ |
| Tool | Description | Read-only |
|---|---|---|
gplay_get_testers | Get Google Group testers for a release track | ✅ |
gplay_update_testers | Update tester Google Groups for a release track | ❌ |
<details> <summary><strong>Step-by-step instructions</strong></summary>
play-console-mcp)</details>
# Clone the repository
git clone https://github.com/quan7794/google-play-mcp-server.git
cd google-play-mcp-server
# Install dependencies
npm install
# Build
npm run buildOr install globally via npm (once published):
npm install -g google-play-mcp-serverThe server requires two environment variables:
| Variable | Description | Example |
|---|---|---|
GOOGLE_SERVICE_ACCOUNT_KEY | Absolute path to your service account JSON key file | /home/user/.config/gcloud/play-console-key.json |
GOOGLE_PLAY_PACKAGE_NAME | Default Android package name for your app | com.example.myapp |
[!NOTE] The package_name parameter can be overridden per tool call, so you can manage multiple apps with a single server instance.<details> <summary><strong>Claude Desktop</strong></summary>
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"google-play": {
"command": "node",
"args": ["/absolute/path/to/google-play-mcp-server/dist/index.js"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "/path/to/service-account-key.json",
"GOOGLE_PLAY_PACKAGE_NAME": "com.example.myapp"
}
}
}
}</details>
<details> <summary><strong>VS Code (Copilot / Cline / Continue)</strong></summary>
Add to your .vscode/mcp.json or the extension's MCP config:
{
"servers": {
"google-play": {
"command": "node",
"args": ["/absolute/path/to/google-play-mcp-server/dist/index.js"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "/path/to/service-account-key.json",
"GOOGLE_PLAY_PACKAGE_NAME": "com.example.myapp"
}
}
}
}</details>
<details> <summary><strong>Cursor</strong></summary>
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"google-play": {
"command": "node",
"args": ["/absolute/path/to/google-play-mcp-server/dist/index.js"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "/path/to/service-account-key.json",
"GOOGLE_PLAY_PACKAGE_NAME": "com.example.myapp"
}
}
}
}</details>
<details> <summary><strong>Gemini CLI / Antigravity</strong></summary>
Add to .gemini/settings.json:
{
"mcpServers": {
"google-play": {
"command": "node",
"args": ["/absolute/path/to/google-play-mcp-server/dist/index.js"],
"env": {
"GOOGLE_SERVICE_ACCOUNT_KEY": "/path/to/service-account-key.json",
"GOOGLE_PLAY_PACKAGE_NAME": "com.example.myapp"
}
}
}
}</details>
Once connected, you can ask your AI assistant things like:
"Show me all release tracks and their current versions"
"Upload the bundle at ~/build/app-release.aab to internal testing"
"What subscriptions are configured for my app?"
"Show me recent 1-star reviews"
"Reply to review abc123 thanking them for the feedback"
"What testers are on the beta track?"npm run dev # Watch mode with hot reload (tsx)
npm run build # Compile TypeScript to dist/
npm run clean # Remove dist/
npm start # Run compiled serversrc/
├── index.ts # Entry point — registers tools, connects stdio
├── auth.ts # Google Auth (service account, cached client)
├── constants.ts # Shared constants (CHARACTER_LIMIT, tracks)
├── schemas.ts # Shared Zod schemas (PackageNameSchema)
├── tools/
│ ├── publishing.ts # list_tracks, upload_bundle, get_app_details
│ ├── subscriptions.ts # list/get subscriptions, list IAP
│ ├── reviews.ts # list/reply reviews
│ └── testers.ts # get/update testers
└── utils/
├── errors.ts # GaxiosError → LLM-friendly error messages
└── formatter.ts # Truncation, text content helpers<details> <summary><strong>Authentication failed (401)</strong></summary>
GOOGLE_SERVICE_ACCOUNT_KEY points to a valid JSON key file</details>
<details> <summary><strong>Permission denied (403)</strong></summary>
</details>
<details> <summary><strong>Resource not found (404)</strong></summary>
GOOGLE_PLAY_PACKAGE_NAME matches your app's actual package name</details>
<details> <summary><strong>Conflict error (409)</strong></summary>
</details>
androidpublisher scopeContributions are welcome! Please:
git checkout -b feature/amazing-tool)npm run build passessrc/tools/withErrorHandling() wrapper for consistent error handlingtextContent() and truncateIfNeeded() for responses.describe() for all parametersannotations (readOnlyHint, destructiveHint, etc.)MIT © Waclabs
Built with ❤️ using Model Context Protocol and the Google Play Developer API v3.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.