Write What's New in every language with Claude Code
Claude Code already knows what changed in this release. Ask it to turn that into What's New, translate it, and stage it for every language on your listing. MetaRun holds each one to Apple's limits and shows the before and after per language.
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
Release notes are the last thing anyone writes. By then the version is ready, the build is processed, and twelve languages still say last month's text. Copying translations into App Store Connect one locale at a time takes longer than writing them.
Through MetaRun, Claude Code writes and translates, and MetaRun does the parts that must be exact: it reads the live version, checks What's New against Apple's 4,000-character limit, stages one change per language, and reports which languages are still missing it.
Before you start
- An update, not a first release: What's New only exists after the app has shipped once.
- The version still editable (being prepared, ready for review, or rejected).
- Something to work from: a changelog, the commit log, or your own notes.
How it runs
- 01
Gather what changed
Claude Code works from what it can see: your changelog, merged pull requests, the commit log since the last tag, or what you tell it.
- 02
Read the version in every language
MetaRun returns the version's localizations so the agent knows which languages exist and what they say now.
- 03
Stage one change per language
Each language gets its own preview with the old and new text. Anything over 4,000 characters is refused at preview, not by Apple after submission.
- 04
Confirm coverage
Before calling the job done, Claude Code reads listing coverage, which lists any language still missing What's New.
An example session in Claude Code
Write What's New for 2.4 from CHANGELOG.md, under 500 characters, friendly but plain. Stage it in English, then translate it into every language on the listing.
- apple_list_version_localizationsVersion 2.4 has 12 languages. What's New is empty in each.
- apple_preview_set_version_localizationPreview: English (U.S.) What's New, 412 of 4,000 characters.
- Claude Code asks before running apple_apply_set_version_localization. You read the preview above and approve.
- apple_apply_set_version_localizationApplied for English (U.S.).
- apple_get_listing_coverage11 languages still missing What's New. Claude Code continues with those.
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_version_localizationsread | Every language on the version with its current What's New, description and keywords. |
| apple_preview_set_version_localizationpreview + apply | Stage What's New (or description, keywords, URLs) for one language. |
| apple_get_listing_coverageread | Which languages are still missing which fields, so the job isn't declared done early. |
| apple_get_listing_editabilityread | Whether the version's text is editable right now. |
| aso_lint_metadataread | Checks copy against App Store rules before it's staged. |
| apple_preview_set_promotional_textpreview + apply | The 170-character line above the description that changes live, without review. |
| aso_schedule_promo_textMetaRun | Schedule promotional text to switch at a set time, for example on launch day. |
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
No What's New on a first version
Apple has no What's New field until the app has shipped once. The API rejects it and App Store Connect hides it, so MetaRun only asks for it on updates.
4,000 characters per language
What's New and the description each allow 4,000 characters. Promotional text allows 170 and is the only one of the three that changes without review.
Text locks once the version is in review
What's New is editable while the version is being prepared or after a rejection. apple_get_listing_editability tells the agent which fields are locked and why, instead of a write failing.
Adding a language creates rows Apple fills in
When a new language is added, Apple creates that language's other localization rows on its own. MetaRun's confirm token is keyed on the language, not Apple's row id, so your approved change doesn't fail as drift.
What to ask Claude Code
- Ask Claude Code: Write What's New for 2.4 from CHANGELOG.md, under 500 characters, friendly but plain. Stage it in English, then translate it into every language on the listing.
- Ask Claude Code: Summarize git log v2.3..HEAD into release notes users would care about. Skip refactors.
- Ask Claude Code: Which languages on 2.4 are still missing What's New?
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 language on the editable version of com.example.app that is missing What's New. Read only." \
--allowedTools "mcp__metarun__apple_list_version_localizations,mcp__metarun__apple_preview_set_version_localization,mcp__metarun__apple_get_listing_coverage,mcp__metarun__apple_get_listing_editability,mcp__metarun__aso_lint_metadata,mcp__metarun__apple_preview_set_promotional_text"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
Who writes the translations, Claude Code or MetaRun?
Claude Code does. MetaRun reads the live listing, checks the limits, and stages one change per language for you to approve. Translations through your own agent don't use MetaRun's AI translation budget.
Can Claude Code update release notes after the app is live?
Not What's New: it locks with the version. Promotional text is the exception and changes the live listing immediately, so that's what to use for a post-launch message.
How many languages can it handle at once?
Every language on your listing. Each one is its own preview, so you can approve some and skip others.
Will it overwrite my description by accident?
Only fields the agent names are touched, and each preview shows the field's old and new text before anything is applied.
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 "release notes" 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
Localize your listing
Name, subtitle, keywords and description in every App Store language, limits checked.
OpenClaude Code
Submit for review
Attach the build, clear export compliance, run the readiness sweep, submit.
OpenClaude Code
ASO keywords
Find keywords from App Store autocomplete, track ranks, and lint your metadata.
OpenClaude Code
Phased release
Choose how an approved version goes out, then pause, resume or finish a phased rollout.
OpenRelease notes with another agent
In depth: Listing translation
Agent access
14-day free trial with agent access. No credit card. Your Apple key stays encrypted on MetaRun.