shiplocale-mcp
Officialshiplocale-mcp
MCP server for ShipLocale — lets Claude (or any MCP client) read and edit your localized App Store / Google Play metadata: app copy, release notes, IAP display names, screenshot texts, target languages, Store Health diagnostics, and — optionally, behind an elevated scope — push approved copy to the live store listing.
How it works
ShipLocale keeps two layers, and this server mirrors that split:
Local drafts — metadata edited and AI-translated inside ShipLocale. Safe to let an agent modify freely; nothing reaches a real store.
Store push — explicit, irreversible writes to App Store Connect / Google Play. Push tools are only registered when your key (and
SHIPLOCALE_SCOPES) includes thepushscope, so an agent with aread translatekey physically cannot ship anything.
Setup
1. Mint an API key
API keys are an Indie/Pro plan feature. In the ShipLocale dashboard: Settings → API Keys → Create. Pick a label (e.g. "MCP — Claude") and scopes:
Scope | Grants |
| Read apps, metadata, releases, screenshot texts, media library, target languages |
| Edit local drafts, assign media to screenshot slots, trigger AI generation/translation |
| Read Store Health reports/overview and toggle finding suppressions |
| Write to the live App Store / Google Play listing — add only if you want the agent able to ship |
You'll get a clientId (slk_...) and a clientSecret (sls_..., shown once).
Recommended: mint a read translate health key. Add push only when you explicitly want agentic store pushes.
2. Configure your MCP client
Requires Node.js 20+. No install step needed — npx fetches the package from npm.
Environment variables:
Variable | Required | Default | Purpose |
| yes | — | API key client ID ( |
| yes | — | API key secret ( |
| no |
| Space-separated scopes to request — must be a subset of what the key holds |
| no |
| Override for local development |
Claude Code:
claude mcp add shiplocale \
-e SHIPLOCALE_CLIENT_ID=slk_xxx \
-e SHIPLOCALE_CLIENT_SECRET=sls_xxx \
-- npx -y @shiplocale/shiplocale-mcpClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"shiplocale": {
"command": "npx",
"args": ["-y", "@shiplocale/shiplocale-mcp"],
"env": {
"SHIPLOCALE_CLIENT_ID": "slk_xxx",
"SHIPLOCALE_CLIENT_SECRET": "sls_xxx"
}
}
}
}Auth is OAuth client-credentials against POST /connect/token; the server caches the 1-hour access token and re-fetches automatically on expiry or 401.
Tools
Read (read scope)
Tool | Description |
| Apps in the portfolio |
| A/B listing variants for an app |
| All draft fields × locales, with status (also IAP rows via |
| Releases and their What's New in every locale |
| Target locales at account / app / IAP level |
| Screenshot headlines/captions + translations per slot |
| Media-library folder tree with per-folder asset counts |
| Uploaded images in the media library — search, sort, page |
| Which media asset each screenshot slot holds, per device/locale |
| Per-field hard character limits |
Local drafts (translate scope — never touches the store)
Tool | Description |
| Upsert base-language text for a field (incl. IAP display names) |
| Edit any localization row; |
| Async AI translation of a field into target locales |
| AI rewrite for review — returns text, saves nothing |
| Create a release / set base What's New |
| AI-draft What's New from commit log / bullets |
| Async translation of What's New |
| Set target locales (account / app / IAP level) |
| Edit slot base text / override one translation |
| Async translation of all screenshot texts |
| Put a media asset into a slot / empty it (base slot or one locale) |
Store Health (health scope)
Tool | Description |
| Errors/warnings for an app, with suppression state per finding |
| Force an immediate re-check, bypassing the staleness TTL |
| Portfolio-wide error/warning counts (Pro plan only) |
| Ignore / un-ignore a finding workspace-wide |
Store push (push scope — irreversible, live listing)
Tool | Description |
| Find an editable store version and read live copy |
| Write metadata to App Store Connect |
| Read/write live IAP listings |
| Write a Google Play listing (title/short/full description) |
| Push What's New for one locale to a Play track |
| Push all approved screenshot renders for a variant |
Push tools require a connected store credential (credentialId from the dashboard's credential vault, except Play release notes, which resolve it server-side). Localizations generally must be Approved before a push picks them up.
Example prompts
"List my apps and show me which locales are missing a translated subtitle."
"Create release 2.4.0 from this commit log, generate the What's New, and translate it to all target languages."
"Shorten the German promotional text to fit the 170-char limit and approve it."
(with
push) "Push the approved 2.4.0 release notes to the production track."
Development
npm install
npm run build
npm run dev # tsc --watch
npm run typecheckPoint at a local backend with SHIPLOCALE_API_URL=https://localhost:7443 (or whatever the Aspire dashboard shows for the API).
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ShipLocale/shiplocale-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server