Automate your full mobile subscription stack: Claude Code + RevenueCat MCP + gplay
Historically, launching a new mobile subscription tier meant a checklist across three or four dashboards: Play Console for the Android product, App Store Connect for iOS, RevenueCat for entitlements and offerings, some paywall builder for the UI. Each dashboard has its own click paths, its own idempotency semantics, its own way to be wrong.
With Claude Code, the RevenueCat MCP server, and gplay, the whole thing becomes one prompt.
The setup
Section titled “The setup”Three ingredients:
- Claude Code — Anthropic’s terminal-native AI coding agent. Reads your project, calls tools, writes code.
- RevenueCat MCP — the RevenueCat team’s Model Context Protocol server. Exposes entitlements, offerings, packages, products, paywalls, customers, and revenue analytics as callable tools.
- gplay — the AI-agent-native Google Play Console CLI. Covers 250+ commands across 6 Google APIs, JSON-first,
--dry-runon every write.
Install:
# gplaybrew install tamtom/tap/gplaygplay setup --auto
# Agent Skills so Claude Code knows the real Play workflowsnpx skills add tamtom/gplay-cli-skillsRevenueCat MCP setup: follow their docs. Adds a block to your Claude Code config that registers the MCP server with your RC secret key.
What Claude Code can now do
Section titled “What Claude Code can now do”Every RevenueCat MCP tool + every gplay command + gh, git, your Gradle build. The intersection is powerful.
Here’s a session that stood up a real subscription tier in one prompt (transcript compressed).
The prompt
Section titled “The prompt”Launch a new “Pro” subscription for
com.example.app:
- Monthly at $9.99 with a 7-day free trial for new users, PPP prices to all supported countries.
- Yearly at $89.99 (25% saving vs monthly).
- Register both as Play products, then map into RevenueCat as a “Pro” entitlement, an “default” offering with $rc_monthly and $rc_annual packages.
- Generate an AI paywall — hero: “Unlock Pro”, features from the app’s README, testimonial style similar to our existing “starter” paywall.
- Add a targeting rule: users on our existing “starter” entitlement get shown a “$rc_annual” upsell offering instead of “default”.
- Show me the final paywall screenshot and a summary of what you shipped. Don’t actually flip anything live — use
--dry-runfor the Play writes so I can review.
What Claude Code did (chained tool calls)
Section titled “What Claude Code did (chained tool calls)”gplay apps list→ confirmed access tocom.example.app.gplay subscriptions create --product-id pro --listing en-US:...(dry-run) → showed the JSON payload.gplay baseplans create --base-plan-id monthly --billing-period P1M ...(dry-run) for both plans.gplay baseplans prices set --region US --price-micros 9990000→ thengplay baseplans prices convert --from-region US.gplay offers create --offer-id monthly-trial-7d --phases FREE_TRIAL,P7D,0.- RC MCP
create-product-in-store→ registeredpro:monthlyandpro:yearly. - RC MCP
create-entitlement→ “Pro”. - RC MCP
attach-products-to-entitlement→ linked both products. - RC MCP
create-offering“default” →create-packagesfor$rc_monthlyand$rc_annual→attach-products-to-package. cat README.md→ extracted feature list for the paywall copy.- RC MCP
list-paywalls→ found existing “starter” paywall →get-paywallfor style reference. - RC MCP
create-paywall-aiwith the description → returned task ID. - RC MCP poll
get-paywall-ai-task→ 30s later, complete. - RC MCP
render-paywall-screenshot→ saved PNG to./paywalls/pro-launch.png. - RC MCP
list-targeting-rules→ confirmed “starter” entitlement exists. - RC MCP create targeting rule:
entitlement=starter→assign-customer-offering annual-upsell. - Printed a summary table of everything created + the paywall screenshot.
You read the dry-run payloads. If they look right, you say “go” and Claude Code re-runs step 2-9 for real (drops --dry-run from the gplay commands; RC MCP calls are idempotent).
Where this pays off long-term
Section titled “Where this pays off long-term”The one-prompt launch is the flashy demo. The real value shows up in the ongoing operations.
Weekly business review, prompt-driven:
Pull the last 7 days of RevenueCat overview metrics. For any product with >10% trial-to-paid drop-off vs the previous week, cross-reference with gplay’s vitals — are there crashes on the paywall screen? Rank issues by revenue impact and file GitHub issues for the top three.
Chains: RC MCP get-overview-metrics → RC MCP get-chart-data for trial cohorts → gplay vitals crashes query filtered to specific screens → RC MCP get-benchmarks for industry context → gh issue create.
Price experiments, safely:
Add a targeting rule: 10% of new Indian users get the “budget” offering with a ₹299 monthly price. Everyone else stays on default. Wire it up in RC and make sure the ₹299 monthly base plan actually exists on Google Play (create it if not).
Chains: gplay baseplans list → conditional baseplans create → gplay baseplans prices set --region IN → RC MCP create-offering “budget” → create-targeting-rule.
Refund reconciliation:
Pull the last 24 hours of Google Play voided purchases. For each, revoke the RevenueCat entitlement grant for that customer.
Chains: gplay purchases voided list --start-time <24h ago> → for each: RC MCP get-customer by originalTransactionId → RC MCP revoke grant.
Why the pairing works so well
Section titled “Why the pairing works so well”Both surfaces are agent-native, but they cover different territory:
- gplay is the writer of truth. It manipulates Play Console state directly. When you need something to actually exist in Google Play, gplay does it.
- RC MCP is the reader of state. It sees your Play products (via RC’s own webhooks + polling), aggregates the cross-store view, and lets the agent reason about entitlements/customers/revenue across iOS and Android.
Neither alone gets you to “one-prompt launch.” Together they do.
Getting started
Section titled “Getting started”brew install tamtom/tap/gplaygplay setup --autonpx skills add tamtom/gplay-cli-skillsAdd the RevenueCat MCP to your Claude Code config with your RC secret key. Then open Claude Code in your Android project and try:
Show me every subscription on Google Play for
com.example.app, then show me the matching RevenueCat entitlements and offerings. Any drift?
The answer to that question was previously a 30-minute audit across two dashboards. Now it’s a prompt.