i18n-tools-mcp
Provides tools to manage i18next translation JSON files, including querying, setting, adding, deleting, renaming, moving, listing, searching, and batch operations for both flat and namespaced directory layouts.
Supports next-i18next by providing tools to read and write translation files used in Next.js applications, with batch operations to minimize file-watcher churn.
Supports react-i18next by providing tools to read and write translation files used in React applications.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@i18n-tools-mcpAdd a new key 'header.title' with nl 'Titel' and en 'Title'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
i18n-tools-mcp
MCP server for querying and managing JSON translation files. Designed for AI agents (Claude Code, Cursor, etc.) to read and write i18n, i18next, react-i18next, and next-i18next translations directly through the Model Context Protocol.
Supports flat ({locale}.json) and namespaced ({locale}/{namespace}.json) directory layouts with dot-notation keys.
Install
Ask your AI agent:
Install the i18n-tools-mcp MCP server. The translations directory is at ./messages and the base locale is nl.
Or add it manually to your MCP client config (e.g. .claude/settings.json):
{
"mcpServers": {
"i18n-tools": {
"command": "npx",
"args": ["i18n-tools-mcp", "./messages", "nl"]
}
}
}Arguments:
Required: Path to the directory containing your translation files
Optional: Base locale code (default:
nl) — used in tool descriptions to guide AI agentsOptional: JSON indentation spaces (default:
4)
Related MCP server: GonMCPtool
Directory structures
Both flat and namespaced layouts are auto-detected.
Flat — one JSON file per locale:
messages/
en.json
nl.jsonNamespaced — subdirectory per locale, one JSON file per namespace (i18next-style):
messages/
en/
common.json
auth.json
nl/
common.json
auth.jsonIn namespace mode, prefix keys with the namespace: common:Users.name. Read operations (query, list, search, missing) work across all namespaces when no prefix is given. Write operations (set, add) require a namespace prefix.
Tools
query
Look up a translation key across all locale files. Returns the value for each locale that has the key.
Parameter | Type | Required | Description |
| string | yes | Dot-notation key, e.g. |
set
Set a translation value for a single locale. Creates intermediate keys if needed.
Parameter | Type | Required | Description |
| string | yes | Locale code, e.g. |
| string | yes | Dot-notation key, e.g. |
| string | yes | The translation value |
add
Add a translation key to multiple locales at once.
Parameter | Type | Required | Description |
| string | yes | Dot-notation key, e.g. |
|
| yes | Locale-to-value mapping, e.g. |
delete
Delete a translation key from all locale files.
Parameter | Type | Required | Description |
| string | yes | Dot-notation key, e.g. |
rename
Rename a translation key across all locale files. Preserves values.
Parameter | Type | Required | Description |
| string | yes | Current dot-notation key, e.g. |
| string | yes | New dot-notation key, e.g. |
move
Move a translation key to a different path across all locale files.
Parameter | Type | Required | Description |
| string | yes | Current dot-notation key, e.g. |
| string | yes | New dot-notation key, e.g. |
list
List all translation keys. Optionally filter by a key prefix.
Parameter | Type | Required | Description |
| string | no | Key prefix to filter by, e.g. |
search
Search translations by value (case-insensitive).
Parameter | Type | Required | Description |
| string | yes | Text to search for in translation values |
missing
Find translation keys that exist in some locales but are missing in others. Takes no parameters.
batch
Apply multiple mutations in a single call. Each affected locale file is read once, mutated in memory, and written exactly once — regardless of how many ops touch it. Per-file atomic: if any op fails, no files are written.
Prefer this over repeated set/add/delete/rename/move calls for bulk changes. It minimizes file-watcher churn (Next.js dev, Vite HMR) and avoids partial writes.
Parameter | Type | Required | Description |
|
| yes | Ordered list of operations (see below) |
Each op is one of:
{ "op": "set", "locale": "en", "key": "Users.name", "value": "Name" }
{ "op": "add", "key": "Users.email", "translations": { "nl": "E-mail", "en": "Email" } }
{ "op": "delete", "key": "Users.legacy" }
{ "op": "rename", "oldKey": "Users.name", "newKey": "Users.fullName" }
{ "op": "move", "oldKey": "Users.name", "newKey": "Profile.name" }Development
pnpm install # Install dependencies
pnpm dev # Watch mode
pnpm test # Run tests
pnpm test:watch # Watch mode tests
pnpm build # Compile TypeScriptThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/Trivle/i18n-tools-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server