
Connects Claude to DeepL's translation API with support for text, document, and rephrasing operations. You get access to all DeepL language pairs with automatic detection, formality controls for formal/informal register, and glossary support for consistent terminology. The translate-document tool handles PDFs, DOCX, PPTX, and other formats directly, while the glossary tools let you list, inspect, and retrieve term entries from your DeepL glossaries. Requires a DeepL API key, which includes 500,000 free characters monthly on their free tier. Reach for this when you need production-grade translation integrated into Claude workflows, especially if you're already using DeepL glossaries or need document translation beyond plain text.
A Model Context Protocol (MCP) server that exposes DeepL text translation, document translation, rephrasing, and glossary and style rule lookups as MCP tools.
You need Node.js 18 or newer and a DeepL API key. Pick an API plan and create a key in your DeepL account.
The server communicates over stdio, so it is normally started by an MCP client rather than by hand. To try it directly:
DEEPL_API_KEY=your-api-key npx -y deepl-mcp-server
It exits immediately if DEEPL_API_KEY is not set.
To work on the server itself:
git clone https://github.com/DeepL/deepl-mcp-server.git
cd deepl-mcp-server
npm install
Register it as a stdio server with DEEPL_API_KEY in the server's environment. In Claude Code:
claude mcp add deepl --env DEEPL_API_KEY=your-api-key -- npx -y deepl-mcp-server
For clients configured through a JSON file:
{
"mcpServers": {
"deepl": {
"command": "npx",
"args": ["-y", "deepl-mcp-server"],
"env": {
"DEEPL_API_KEY": "your-api-key"
}
}
}
}
Where that file lives and how each client expects local stdio servers to be declared:
To run a local checkout instead of the published package, use node as the command and the absolute path to src/index.mjs as the argument.
| Tool | Description | Parameters |
|---|---|---|
translate-text | Translates text into a target language. | text, targetLangCode, sourceLangCode?, formality?, glossaryId?, styleId?, context?, preserveFormatting?, splitSentences?, customInstructions? |
translate-document | Translates a document file (PDF, DOCX, PPTX, XLSX, HTML, TXT, and more) and writes the result to disk. | inputFile, targetLangCode, outputFile?, sourceLangCode?, formality?, glossaryId?, styleId?, outputFormat? |
rephrase-text | Rephrases text, optionally into another language. | text, targetLangCode?, style?, tone? |
get-source-languages | Lists the language codes accepted as a translation source. | none |
get-target-languages | Lists the language codes accepted as a translation target. | none |
get-writing-styles | Lists the style values rephrase-text accepts. | none |
get-writing-tones | Lists the tone values rephrase-text accepts. | none |
list-glossaries | Lists every glossary in the account with its id, name, dictionaries, and creation time. | none |
get-glossary-info | Returns the same metadata as list-glossaries for a single glossary. | glossaryId |
get-glossary-dictionary-entries | Returns the term entries of one glossary dictionary, meaning one language pair in one direction. | glossaryId, sourceLangCode, targetLangCode |
list-style-rules | Lists the style rules in the account with their id, name, language, and timestamps. | page?, pageSize?, detailed? |
get-style-rule | Returns one style rule in full, including its configured rules and custom instructions. | styleId |
get-custom-instruction | Returns a single custom instruction belonging to a style rule. | styleId, instructionId |
Notes:
text takes either a single string or an array of strings. Each entry is translated or rephrased independently.en-US). Omitting sourceLangCode triggers automatic detection. A target code whose language requires a region gets a default applied: en becomes en-US, pt becomes pt-BR, zh becomes zh-Hans.get-glossary-dictionary-entries drops any region you pass.sourceLangCode.formality accepts less, more, default, prefer_less, and prefer_more. The prefer_* values fall back to the default when the target language has no formality support.translate-document reads and writes files on the machine running the server. Without outputFile, the output path is derived from the input by appending the target language code, for example report_de.pdf. With outputFormat, the derived path uses that extension instead.MIT