KAERIS i18n — MCP Server
AI-native localization over the Model Context Protocol. Give Claude Desktop, Cursor, Claude Code (or any MCP client) the ability to translate your app's strings into 46 languages — placeholder-safe, format-aware, incremental, with built-in Translation QA.
Tools
| Tool | What it does | Calls the API? |
|---|---|---|
kaeris_scan_repo |
Discover a repo's i18n setup: locale files found, base language, target languages, framework guess (i18next/next-intl/vue-i18n/Flutter/Android/iOS/gettext/generic) | No |
kaeris_status |
Completeness/health per target locale — missing keys, extra keys, placeholder mismatches, plus the quality detectors that gate a merge in CI: number drift, lost inline tags, broken entities/escapes, ICU/CLDR plural gaps (same verdict as kaeris check --json) |
No |
kaeris_list_missing_keys |
The exact missing/broken keys (with source text) for one target locale, so an agent knows exactly what to fix | No |
kaeris_list_languages |
List all supported target languages | Yes, free (no quota) |
kaeris_translate |
Translate inline strings → per-language results, with QA (placeholder-loss & UI-overflow flags; verify=True back-translates to check meaning) |
Yes |
kaeris_translate_file |
Translate a file on disk (JSON/YAML/.strings/.xcstrings/.po/ARB/XML/CSV/XLIFF/.properties/.resx/.ftl/Markdown), optional incremental — reproducible via kaeris.lock |
Yes |
kaeris_add_language |
Bootstrap a brand-new target locale by translating the whole source file into it | Yes |
The first three tools are local-only (no network call, no cost), and kaeris_list_languages is one
free API call that counts toward no limit — an agent can use all four freely to audit and
understand a repo's i18n before deciding what (if anything) to translate.
Reproducible by design
kaeris_translate_file with only_new=True keeps a kaeris.lock next to your source file —
the same lock the CLI writes, so an agent and a human sharing a repo stay in sync. It records a
hash of every source string plus the settings that produced it: tone, glossary, app context, and the
model. That means:
- Edit one string — only that string is re-translated; everything else stays byte-for-byte.
- Change tone, glossary or context — the whole locale is re-translated, never a mix of old and new.
- Change plan — every tier runs the same model (Gemini 2.5 Flash-Lite), so upgrading does not force a re-translation. The lock records the model regardless: the day we change it, the locale is rebuilt in full instead of quietly ending up the work of two models.
Commit kaeris.lock alongside your source file so the agent, your teammates and CI all agree on
what is already done.
Install
pip install kaeris-mcp
Or run it with Docker
docker build -t kaeris-mcp .
docker run -i --rm -v "$PWD:/work" -w /work kaeris-mcp
The server speaks JSON-RPC over stdin/stdout, so there is no port to expose —
-i is what keeps the conversation open. Mount your project at /work and the
repo-aware tools (scan_repo, status, list_missing_keys) read it directly;
pass -e KAERIS_API_KEY=… to use your KAERIS key.
Configure your client
Claude Desktop — add to claude_desktop_config.json
(macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):
{
"mcpServers": {
"kaeris-i18n": {
"command": "kaeris-mcp",
"env": {
"KAERIS_API_KEY": "kaerisp_optional"
}
}
}
}
Cursor — Settings → MCP → Add, or .cursor/mcp.json:
{ "mcpServers": { "kaeris-i18n": { "command": "kaeris-mcp" } } }
Claude Code — one command:
claude mcp add kaeris-i18n kaeris-mcp
Restart the client; the KAERIS tools appear automatically.
Auth & tiers (all optional)
| Env var | Purpose |
|---|---|
KAERIS_API_KEY |
Your KAERIS key: the free API key (50k chars/file), Pro, Team/API or Lifetime — higher limits (without one, the free 10k-char tier is used) |
KAERIS_OPENROUTER_KEY |
OpenRouter key for Lifetime/BYOK — no monthly volume cap |
KAERIS_API_URL |
Override the API base URL |
KAERIS_NO_UPDATE_CHECK |
Set to 1 to turn off the once-a-day "new version available" line (stderr only; already off in CI) |
No key is required to try it — the free anonymous tier works out of the box.
Example prompts
- "Translate the strings in
locales/en.jsoninto German, Ukrainian and Japanese." - "Add French and Spanish translations for these buttons: Save, Cancel, Delete."
- "Only translate the new keys I added to en.json — don't redo the whole file."
- "Check this repo's i18n and tell me what's missing or broken." (scans, then reports status — no API call)
- "We don't have Ukrainian yet — add it." (bootstraps a new locale via translation)
License
MIT
Metadata
Release files for kaeris-mcp 0.2.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| kaeris_mcp-0.2.12.tar.gz | 37.0 kB | Without provenance | Details for kaeris_mcp-0.2.12.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| kaeris_mcp-0.2.12-py3-none-any.whl | Python 3 | none | any | Details for kaeris_mcp-0.2.12-py3-none-any.whl |
Total release size: 63.1 kB
Release files / kaeris_mcp-0.2.12.tar.gz
| Download URL | kaeris_mcp-0.2.12.tar.gz |
|---|---|
| Size | 37.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fe3245a5ef570632f2696821ec41bad217d0cf629ad7e141166a1612592f7f22
|
|
BLAKE2b-256 checksum How to use checksums |
c6fc1bf6fc907785907f311f7255392cb493f8818675d7e4d79d52d91a5d27f0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / kaeris_mcp-0.2.12-py3-none-any.whl
| Download URL | kaeris_mcp-0.2.12-py3-none-any.whl |
|---|---|
| Size | 26.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
199fcbe769c5a4776471d0e6ddea42fa0904677c64e8fde408cf5de675805d6f
|
|
BLAKE2b-256 checksum How to use checksums |
188834d55e65bcd1acdb28d96d888d19fe6355964e7c095f19f287695a8ae741
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for kaeris-mcp 0.2.12
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.