Skip to main content
Glama
beydemirfurkan

playstore-release

playstore-release

Ship an Android app to Google Play end-to-end over the Google Play Developer API — an opinionated, idempotent publishing pipeline with a readiness report, for humans and AI agents. The Android sibling of appstore-release.

No dependencies. Clone it and run it.

git clone https://github.com/beydemirfurkan/playstore-release ~/playstore-release
export PLAY_SERVICE_ACCOUNT_JSON=/abs/service-account.json PLAY_PACKAGE_NAME=com.example.app
node ~/playstore-release/src/cli.mjs doctor
node ~/playstore-release/src/cli.mjs check

What it does

command

what

doctor

credentials present and accepted; can this account open an edit for this app

check

the readiness report: a verdict (ready · blocked · needs-human · rolling-out · halted · live) and an ordered list of next actions

publish

bundle → contact details → listing → graphics → track release → testers, in one edit, committed once; idempotent

promote

internal → production, full or staged; --halt / --resume / --complete

data-safety

apply the Data safety CSV exported from the Console

reviews / review-reply

read and answer user reviews

subscriptions

create / update / activate subscription products

init / validate / schema

author a config without credentials

mcp

the same surface as 10 MCP tools + 7 resources over stdio

What Google keeps Console-only — creating the app, the first bundle upload, content rating, app access, ads / news / government / financial / health declarations, privacy policy, category, countries, pricing — is reported by check with the exact URL and clicks, and spelled out in references/console.md so a browser agent can fill the forms for you.

Related MCP server: play-store-mcp

Design

  • Everything is an edit. Reads and writes go through one EditManager; a pipeline holds it and commits once; any error discards it. --dry-run opens and discards an edit to read state and never validates or commits.

  • Idempotent, provably. A second publish with nothing changed sends only edits.insert + edits.delete — there is a test asserting exactly that.

  • Findings, not logs. Every problem is a Finding with an owner (cli · ui · external), a fix, and — for Console-only steps — the clicks. The CLI text, --json and the MCP tools render the same objects.

  • Local validation first. Screenshot aspect ratio (long side ≤ 2× short), feature graphic size and alpha, listing lengths, rollout fractions: all checked before a byte is sent.

Layout

src/cli.mjs            dispatcher            src/ops/          one file per operation (see _contract.md)
src/index.mjs          library API           src/report/       snapshot → checks → verdict → renderings
src/core/              config, findings, console steps
src/play/              auth (RS256 → OAuth), client, edits, uploads, image headers, error hints
src/mcp/               zero-dep JSON-RPC MCP server
skills/playstore-release/   the Claude Code skill: SKILL.md + references/

As a Claude Code skill

node scripts/install-skill.mjs      # symlinks ~/.claude/skills/playstore-release → skills/playstore-release

Or as a plugin: the repo carries .claude-plugin/ and .mcp.json.

Development

npm install          # dev tooling only (prettier, tsc, ajv)
npm run verify       # typecheck · format · schema · manifests · distribution · tests

MIT.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables to interact with Google Play Console, allowing release management, app vitals monitoring, and APK/AAB deployment via a service account.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables publishing Android apps to the Google Play Console from monorepos by exposing commands as MCP tools that handle AAB uploads, store listings, testers, and setup via the Google Play Developer API, returning structured JSON results.
    MIT