@shipi18n/mcp
v2.3.0
Published
MCP server for i18n quality assurance — check, diff and review locale files from any MCP client. Validation needs no API key.
Maintainers
Readme
@shipi18n/mcp
mcp-name: io.github.Shipi18n/shipi18n
A Model Context Protocol server for i18n quality assurance — check, diff and review your locale files straight from any MCP client (Claude Desktop, Cursor, …).
The validation tools need no API key and make no model call. Translation is also available, with your own provider key.
Install
Claude Code — one line:
claude mcp add shipi18n -- npx -y @shipi18n/mcpClaude Desktop — add it to claude_desktop_config.json:
{
"mcpServers": {
"shipi18n": {
"command": "npx",
"args": ["-y", "@shipi18n/mcp"]
}
}
}That is the whole setup for validation — no env block, no key. Then ask:
"Check
./localesagainst English and tell me what's broken in Spanish."
To translate as well, add your provider key:
"env": { "ANTHROPIC_API_KEY": "sk-ant-..." }You will also need the matching SDK available (@anthropic-ai/sdk or openai) for translation.
How meaning-level review works without a key
review_locales does not call a model. It runs the structural checks, then returns the surviving
source/translation pairs plus the review criteria — and your agent judges them with the model it
is already running. Nothing is sent to us, and nothing extra is billed.
A note on MCP sampling. Earlier versions of this README advertised a "zero-key" translation mode built on
sampling/createMessage. Sampling was deprecated in MCP spec 2026-07-28 (SEP-2577: "New implementations SHOULD NOT adopt it") and Claude Desktop never supported it, so that claim was wrong for the client most people use. The sampling path still exists as a silent fallback for clients that do implement it, but it is not the documented way to translate — a provider key is.
Tools
No API key required:
| Tool | Description |
| --- | --- |
| check_locales | Structural QA over a locale tree: missing/orphan keys, dropped placeholders, collapsed plurals, empty values, untranslated copy. |
| check_glossary | Enforce do-not-translate terms and locked per-language translations. |
| diff_locales | What still needs translating, per language. |
| review_locales | Returns translation pairs + criteria so your agent judges meaning with its own model. |
| check_placeholders | Compare two strings for placeholder drift. |
| list_languages | Known language codes. |
Requires your own provider key:
| Tool | Description |
| --- | --- |
| translate_json | Translate a locale JSON string to one or more languages (returns the translated JSON). |
| translate_file | Read a .json locale file, translate it, and write <lang>.json files. Supports incremental. |
| list_languages | List the language codes/names with friendly names (any BCP-47 code works). |
| check_placeholders | Verify a translation preserves a source string's placeholders (no LLM call). |
All translation tools accept optional provider (anthropic/openai) and model arguments to override
auto-detection.
Why
Built on @shipi18n/core: structure-preserving JSON
translation with placeholder preservation/validation, batching, and incremental (only-changed) mode.
Open-source, no Shipi18n account, no hosted API.
License
Apache-2.0
