Create subscriptions and in-app purchases from Claude Code
Describe the products you want, and Claude Code creates them in App Store Connect: the subscription group, each subscription with its copy in every language, prices for every storefront, and the review screenshot Apple wants before the first submission.
Setup checked October 2026 against Claude Code MCP docs, permissions
Connect Claude Code once
01 · Add the server
Run it in any terminal. --scope user makes MetaRun available in every project; leave it out to limit it to the current one.
claude mcp add --transport http --scope user metarun https://metarun.dev/api/mcp02 · Sign in
In a Claude Code session, run /mcp, choose metarun and authenticate. MetaRun opens in your browser, where you pick read-only or read and change. From a plain shell, claude mcp login metarun does the same.
/mcp03 · Optional: add the skills too
The MetaRun plug-in bundles the same server with six mission skills (release handoff, worldwide pricing, localization, review inbox, ASO audit, store media).
claude plugin marketplace add metarun/metarun-skills
claude plugin install metarun-skills@metarunPrefer a personal access token (scripts, CI)?
Add the server with a token
Mint a personal access token in MetaRun under Settings, MCP. It's shown once and can be revoked any time.
claude mcp add --transport http --scope user metarun https://metarun.dev/api/mcp \
--header "Authorization: Bearer $METARUN_TOKEN"Or share it with your team in .mcp.json
Project scope writes .mcp.json at the repo root. Claude Code expands ${METARUN_TOKEN} from each person's environment, so the token itself is never committed.
{
"mcpServers": {
"metarun": {
"type": "http",
"url": "https://metarun.dev/api/mcp",
"headers": { "Authorization": "Bearer ${METARUN_TOKEN}" }
}
}
}What Claude Code handles here
Setting up a subscription by hand takes a group, a reference name, a product id you can never reuse, a duration, a display name and description per language, a price schedule, availability, and a review screenshot. In-app purchases need most of the same.
Claude Code can do the whole chain through MetaRun. Creates return the new product's id, so the next preview (copy, price, availability) can name it immediately.
Before you start
- Product ids you're happy to keep forever: Apple never frees one.
- Durations and prices for each plan.
- A screenshot of your paywall for App Review.
How it runs
- 01
Plan the products
Claude Code reads what exists, then proposes groups, product ids and durations. Product ids are permanent, so it's worth getting them right before the first apply.
- 02
Create, then chain
Each create returns the new id. Copy, prices and availability are staged against it in the same session.
- 03
Price it
Prices can come from the pricing engine (PPP, Big Mac, Spotify) or a single base price that Apple equalizes.
- 04
Ready it for review
The review screenshot is uploaded from an https URL, like app screenshots, so the subscription can go out with the next version.
An example session in Claude Code
Create a 'Pro' subscription group with monthly and yearly plans: com.example.app.pro.monthly at $4.99 and .yearly at $39.99, PPP for other storefronts.
- apple_list_subscription_groupsNo subscription groups yet.
- apple_preview_create_subscription_groupPreview: group Pro.
- Claude Code asks before running apple_apply_create_subscription_group. You read the preview above and approve.
- apple_apply_create_subscription_groupCreated. The group id comes back for the next step.
- apple_preview_create_subscriptionPreview: com.example.app.pro.yearly, one year. Product id not used before.
- Claude Code asks before running apple_apply_create_subscription. You read the preview above and approve.
- apple_apply_create_subscriptionCreated. The subscription id comes back.
- apple_preview_set_subscription_localizationPreview: English display name and a 48-character description.
Illustrative: your apps, versions and numbers will differ. The tool names and their order are real.
The MetaRun tools Claude Code calls
| Tool | What it does |
|---|---|
| apple_list_subscription_groupsread | Existing groups and their subscriptions. |
| apple_preview_create_subscription_grouppreview + apply | A new group with its reference name. |
| apple_preview_create_subscriptionpreview + apply | A subscription in a group, with product id and duration. Checks for duplicate product ids first. |
| apple_preview_set_subscription_localizationpreview + apply | Display name and description per language. |
| apple_preview_set_subscription_pricepreview + apply | Prices for every storefront. |
| apple_preview_set_subscription_availabilitypreview + apply | Which storefronts sell it. |
| apple_preview_upload_subscription_review_screenshotpreview + apply | The screenshot App Review needs before the first submission. |
| apple_preview_create_iappreview + apply | A consumable, non-consumable or non-renewing subscription purchase. Product ids are checked for duplicates. |
| apple_preview_set_iap_localizationpreview + apply | Display name and description per language for an IAP. |
Each preview has an apply twin (the same name with apply instead of preview) that only runs with the confirm token from a fresh preview, and refuses if App Store Connect changed in between. MetaRun tools save to your MetaRun workspace only (studio projects, tracked keywords), never to Apple.
What Apple enforces, and how MetaRun handles it
Product ids can never be reused
Once a product id exists, Apple won't accept it again, even after the product is deleted. The create preview checks the app's products for a duplicate before anything is sent.
Short descriptions
A subscription's description is capped at 55 characters, an in-app purchase's at 45. MetaRun checks before staging.
Copy belongs to a version since API 4.4.1
Subscription, IAP and group copy now belongs to a metadata version. MetaRun writes to the editable one and never opens a new version on its own.
Family Sharing is a one-way switch
Turning Family Sharing on for a product is permanent. The preview says so, and turning it off is blocked.
What to ask Claude Code
- Ask Claude Code: Create a 'Pro' subscription group with monthly and yearly plans: com.example.app.pro.monthly at $4.99 and .yearly at $39.99, PPP for other storefronts.
- Ask Claude Code: Read the product ids in StoreKit/Products.storekit and create anything that's missing in App Store Connect.
- Ask Claude Code: Add English, German and Japanese display names and descriptions for both plans.
Run it from a script with Claude Code
claude -p runs one request with no interactive session. The browser sign-in can't complete inside -p, so sign in once interactively first, or configure the server with a personal access token in CI. Tools missing from --allowedTools are refused in -p mode.
Read-only check, safe to schedule
claude -p "List every subscription group, subscription and in-app purchase for com.example.app with its state and price in the US. Read only." \
--allowedTools "mcp__metarun__apple_list_subscription_groups,mcp__metarun__apple_preview_create_subscription_group,mcp__metarun__apple_preview_create_subscription,mcp__metarun__apple_preview_set_subscription_localization,mcp__metarun__apple_preview_set_subscription_price,mcp__metarun__apple_preview_set_subscription_availability,mcp__metarun__apple_preview_upload_subscription_review_screenshot,mcp__metarun__apple_preview_create_iap,mcp__metarun__apple_preview_set_iap_localization"Only reads and previews are on that list, so nothing can reach App Store Connect unattended. Run applies in an interactive session where Claude Code can ask you.
How Claude Code asks before a change
Claude Code asks before every MCP tool call by default. You can allow a tool for the session or permanently; allow rules look like mcp__metarun__apple_list_versions for one tool, and mcp__metarun__* allows the whole server, applies included. Allowing reads and previews is reasonable. Leave the apply tools on ask: that prompt is the confirm step for every App Store change.
Frequently asked questions
Can Claude Code read my StoreKit configuration file?
If it can read your project, yes. Claude Code reads the file; MetaRun creates and prices the products in App Store Connect. That keeps the two in sync without copying ids by hand.
What if I pick a product id I've used before?
The create preview checks the app's existing products and blocks a duplicate. Apple never frees a product id, even after deletion.
Can it set up free trials too?
Yes, as introductory offers. See the offers page for intro offers, offer codes and win-back offers.
Does the subscription go live immediately?
No. New subscriptions go out with a version submission, like in App Store Connect. MetaRun's readiness sweep checks they have what review needs.
How do I connect Claude Code to App Store Connect?
Run claude mcp add --transport http --scope user metarun https://metarun.dev/api/mcp, then run /mcp in Claude Code and sign in to MetaRun in your browser. After that, ask for "subscriptions and iaps" in plain words and Claude Code picks the MetaRun tools.
Does Claude Code see my App Store Connect key?
No. Your App Store Connect API key stays envelope-encrypted on MetaRun's servers and is decrypted per request. Claude Code holds a MetaRun token that you can revoke in Settings at any time.
More with Claude Code
Claude Code
Price by country
Reprice an app, IAP or subscription across 175 storefronts with PPP or Big Mac indexes.
OpenClaude Code
Offers and offer codes
Free trials, promotional offers, offer codes and win-back offers, set up by asking.
OpenClaude Code
Submit for review
Attach the build, clear export compliance, run the readiness sweep, submit.
OpenClaude Code
Localize your listing
Name, subtitle, keywords and description in every App Store language, limits checked.
OpenSubscriptions and IAPs with another agent
In depth: Bulk App Store pricing
Agent access
14-day free trial with agent access. No credit card. Your Apple key stays encrypted on MetaRun.