Claude Code · App Store Connect

Localize your App Store listing with Claude Code

Ask Claude Code to take your listing into German, Japanese and Brazilian Portuguese. It writes the copy; MetaRun checks the 30-character name and subtitle, the 100-character keyword field, and stages each language as its own before and after.

Setup checked October 2026 against Claude Code MCP docs, permissions

01 · Uplink

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/mcp

02 · 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.

/mcp

03 · 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@metarun
Prefer 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}" }
    }
  }
}
02 · Briefing

What Claude Code handles here

An App Store listing is two sets of text per language. Name, subtitle and the privacy URL live on App Information. Description, keywords, What's New, promotional text and the support URL live on the version. Adding a language in App Store Connect means filling both, in the right places, inside limits that are counted differently per field.

Claude Code handles the writing. MetaRun reads every language that exists, checks each field's limit before staging, adds languages that don't exist yet, and keeps a coverage map so a half-done job is visible.

03 · Preflight

Before you start

  • An editable version, so the version's text can change.
  • App Information open for edits if you're changing name or subtitle; apple_get_listing_editability says whether it is.
  • A list of target languages, or ask Claude Code which ones your storefronts index.
04 · Execution

How it runs

  1. 01

    Read the listing as it is

    Claude Code reads both text surfaces for every existing language, plus Apple's list of supported languages.

  2. 02

    Write within the limits

    Name and subtitle get 30 characters each, keywords 100, the description 4,000. The agent writes; MetaRun refuses anything over a limit at preview, with the count.

  3. 03

    Stage per language

    Each language becomes one or two previews (App Information and the version). New languages are created by the apply, no separate add step.

  4. 04

    Close the gaps

    Listing coverage shows which fields are still empty in which languages, so Claude Code can finish the job instead of reporting it done early.

05 · Session

An example session in Claude Code

Localize com.example.app's listing into German, Japanese and Brazilian Portuguese. Keep the name, translate subtitle, description and keywords.

  1. apple_list_supported_localesGerman, Japanese and Portuguese (Brazil) are supported and not on the listing yet.
  2. apple_preview_set_app_info_localizationPreview: add German. Name 22 of 30 characters, subtitle 29 of 30.
  3. apple_preview_set_version_localizationPreview: German description and keywords, 97 of 100 characters.
  4. Claude Code asks before running apple_apply_set_app_info_localization. You read the preview above and approve.
  5. apple_apply_set_app_info_localizationGerman added. Apple created its other localization rows.
  6. Claude Code asks before running apple_apply_set_version_localization. You read the preview above and approve.
  7. apple_apply_set_version_localizationApplied.
  8. apple_get_listing_coverageGerman complete. Japanese and Portuguese (Brazil) still to do.

Illustrative: your apps, versions and numbers will differ. The tool names and their order are real.

06 · Tools

The MetaRun tools Claude Code calls

ToolWhat it does
apple_list_supported_localesreadEvery listing language Apple supports, with its code.
apple_list_app_metadatareadName, subtitle and privacy URLs per language.
apple_list_version_localizationsreadDescription, keywords, What's New and promotional text per language.
apple_preview_set_app_info_localizationpreview + applyStage name and subtitle for a language, adding the language if needed.
apple_preview_set_version_localizationpreview + applyStage description, keywords and the rest of the version text.
apple_get_listing_coveragereadWhat's filled and what's empty, per language and field.
aso_cross_locale_planreadWhich extra languages each storefront indexes, and the keyword room they add.
aso_lint_metadatareadRulebook check on the copy before it's staged.

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.

07 · Apple rules

What Apple enforces, and how MetaRun handles it

Two surfaces, two edit windows

Name and subtitle sit on App Information; the rest sits on the version. Apple locks each at different times, and apple_get_listing_editability says which is open right now.

Storefronts index more than one language

The US storefront indexes nine extra listing languages besides English (U.S.). Each adds a 30-character name, 30-character subtitle and 100-character keyword field Apple searches in that storefront, which aso_cross_locale_plan maps out.

Keywords are 100 characters, commas included

Spaces after commas waste characters, and words already in your name or subtitle are indexed anyway. The lint flags both.

A new language fills its own blanks

Adding a language makes Apple create that language's other localization rows. MetaRun keys the confirm token on the language rather than Apple's row id, so the second half of your change doesn't fail as drift.

08 · Comms

What to ask Claude Code

  • Ask Claude Code: Localize com.example.app's listing into German, Japanese and Brazilian Portuguese. Keep the name, translate subtitle, description and keywords.
  • Ask Claude Code: Read Localizable.xcstrings for the terms we already use in-app and keep the listing consistent with them.
  • Ask Claude Code: Show me the coverage map. Which languages are missing keywords?
09 · Unattended

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 "Report the listing coverage for com.example.app: every language and which fields are empty. Read only." \
  --allowedTools "mcp__metarun__apple_list_supported_locales,mcp__metarun__apple_list_app_metadata,mcp__metarun__apple_list_version_localizations,mcp__metarun__apple_preview_set_app_info_localization,mcp__metarun__apple_preview_set_version_localization,mcp__metarun__apple_get_listing_coverage,mcp__metarun__aso_cross_locale_plan,mcp__metarun__aso_lint_metadata"

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.

10 · Safety

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.

Apple key stays on MetaRun, encryptedPreview before every writeRecorded, revertible from history
11 · FAQ

Frequently asked questions

How many languages can Claude Code add?

Any of the languages Apple supports for listings. apple_list_supported_locales returns the current list with codes, and each language is staged as its own change.

Does MetaRun translate, or does Claude Code?

Claude Code writes the translations. MetaRun makes them land correctly: the right field, the right surface, inside Apple's limits, with a preview per language.

Can it localize keywords, not just translate them?

Yes, and it should. Direct translations of keywords often miss what people search for. Pair it with aso_suggest_keywords, which reads App Store autocomplete in that storefront.

What if I don't like one language?

Skip it at approval, or ask Claude Code to redo it. After applying, every change is in your history and can be reverted from there.

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 "localize your listing" 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

In depth: Listing translation

Agent access

14-day free trial with agent access. No credit card. Your Apple key stays encrypted on MetaRun.