Lara Translate MCP Server
# Lara Translate MCP Server
A Model Context Protocol (MCP) server for [Lara Translate](https://laratranslate.com/translate), enabling professional translation capabilities with support for language detection, context-aware translations, translation memories, and glossaries.
Lara leverages Translation Language Models (T-LMs) trained on billions of professionally translated segments, delivering domain-specific translations that capture cultural nuances and industry terminology that general-purpose LLMs often miss.
[](https://github.com/translated/lara-mcp/blob/main/LICENSE)
[](https://hub.docker.com/r/translatednet/lara-mcp)
[](https://www.npmjs.com/package/@translated/lara-mcp)
## Quick Start
Pick your client below — no API keys needed, just log in through your browser.
> The previous URL, https://mcp-v2.laratranslate.com/v1, keeps working: existing connectors need no change.
### Claude Desktop
1. Go to **Settings** > **Connectors**
2. Click **Add Custom Connector**
3. Enter the name: `Lara`
4. Enter the URL: `https://mcp.laratranslate.com/v1`
5. Click **Add**, then click **Connect**
6. Log in with your Lara Translate credentials in the browser
Done — Lara Translate is now available in your conversations.
### Cursor
Add to `~/.cursor/mcp.json`:
```json
{
"mcpServers": {
"lara-translate": {
"url": "https://mcp.laratranslate.com/v1"
}
}
}
```
Restart Cursor. The first time you use a Lara tool, your browser will open to authenticate.
Full instructions: [Client Setup Guide](docs/client-setup.md#cursor).
### Claude Code
```bash
claude mcp add --transport http lara-translate https://mcp.laratranslate.com/v1
```
Then run `/mcp` inside Claude Code to log in through your browser.
Full instructions: [Client Setup Guide](docs/client-setup.md#claude-code).
### Other Clients
For step-by-step OAuth setup on **VS Code (GitHub Copilot)**, **Windsurf**, **Cline**, **Continue**, and more, see the **[Client Setup Guide](docs/client-setup.md)**.
If your client isn't listed, the general approach is to add the server URL (`https://mcp.laratranslate.com/v1`) to your MCP config — the client will handle OAuth authentication automatically.
> For a complete list of MCP-compatible clients, visit the [official MCP clients page](https://modelcontextprotocol.io/clients).
### Verify It Works
After setup, test with a simple prompt:
```
Translate with Lara "Hello world" to Spanish
```
Your client should invoke Lara Translate and return the translation.
---
## Available Tools
### Translation
| Tool | Description |
|------|-------------|
| `translate` | Translate text between languages with support for context, instructions, translation memories, glossaries, and multiple styles (faithful/fluid/creative) |
### Language Detection
| Tool | Description |
|------|-------------|
| `detect_language` | Detect the language of a given text or array of texts |
| `list_languages` | List all supported language codes |
### Translation Memories
| Tool | Description |
|------|-------------|
| `list_memories` | List all translation memories in your account |
| `create_memory` | Create a new translation memory |
| `update_memory` | Update a translation memory's name |
| `delete_memory` | Delete a translation memory |
| `add_translation` | Add a translation unit (source + target pair) to a memory |
| `delete_translation` | Delete a translation unit from a memory |
| `import_tmx` | Import a TMX file into a memory |
| `check_import_status` | Check the status of a TMX import job |
### Glossaries
| Tool | Description |
|------|-------------|
| `list_glossaries` | List all glossaries in your account |
| `get_glossary` | Get details of a specific glossary |
| `create_glossary` | Create a new glossary |
| `update_glossary` | Update a glossary's name |
| `delete_glossary` | Delete a glossary |
| `add_glossary_entry` | Add or replace a term entry in a glossary |
| `delete_glossary_entry` | Delete a term entry from a glossary |
| `import_glossary_csv` | Import entries from a CSV file into a glossary |
| `check_glossary_import_status` | Check the status of a glossary CSV import job |
| `export_glossary` | Export a glossary as CSV |
| `get_glossary_counts` | Get the number of entries in a glossary |
---
## Authentication
### OAuth 2.0 (default)
This is the method used in the [Quick Start](#quick-start) above. You provide only the server URL in your client config — no API keys needed. Your client handles the OAuth flow automatically: it opens your browser, you log in with your Lara Translate credentials, and you're connected.
For per-client OAuth setup instructions, see the **[Client Setup Guide](docs/client-setup.md)**.
### Access Key (alternative)
If you prefer to authenticate with API keys instead of browser login, you can pass your credentials directly in the client config. Get your **Access Key ID** and **Secret** from [Lara Translate](https://developers.laratranslate.com/docs/getting-started#step-3---configure-your-credentials).
See the [Access Key section in the Client Setup Guide](docs/client-setup.md#alternative-access-key-authentication) for config examples.
---
## Self-Hosting
Most users can connect to the hosted endpoint (`https://mcp.laratranslate.com/v1`) using the [Quick Start](#quick-start) instructions above. The options below are for running the server yourself.
### STDIO via NPX
Requires [Node.js](https://nodejs.org/) 22.23.4 or later (the `engines` field of the published package). Only needed to run the server locally: the hosted endpoint above needs no installation.
```json
{
"mcpServers": {
"lara-translate": {
"command": "npx",
"args": ["-y", "@translated/lara-mcp@latest"],
"env": {
"LARA_ACCESS_KEY_ID": "<YOUR_ACCESS_KEY_ID>",
"LARA_ACCESS_KEY_SECRET": "<YOUR_ACCESS_KEY_SECRET>"
}
}
}
}
```
### STDIO via Docker
Requires [Docker](https://www.docker.com/).
```json
{
"mcpServers": {
"lara-translate": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "LARA_ACCESS_KEY_ID",
"-e", "LARA_ACCESS_KEY_SECRET",
"translatednet/lara-mcp:latest"
],
"env": {
"LARA_ACCESS_KEY_ID": "<YOUR_ACCESS_KEY_ID>",
"LARA_ACCESS_KEY_SECRET": "<YOUR_ACCESS_KEY_SECRET>"
}
}
}
}
```
### Building from Source
#### Node.js
Requires Node.js 22.23.4 or later and pnpm.
```bash
git clone https://github.com/translated/lara-mcp.git
cd lara-mcp
pnpm install
pnpm run build
```
Then add to your MCP config:
```json
{
"mcpServers": {
"lara-translate": {
"command": "node",
"args": ["<FULL_PATH_TO_PROJECT>/dist/index.js"],
"env": {
"LARA_ACCESS_KEY_ID": "<YOUR_ACCESS_KEY_ID>",
"LARA_ACCESS_KEY_SECRET": "<YOUR_ACCESS_KEY_SECRET>"
}
}
}
}
```
#### Docker
```bash
git clone https://github.com/translated/lara-mcp.git
cd lara-mcp
docker build -t lara-mcp .
```
Then add to your MCP config:
```json
{
"mcpServers": {
"lara-translate": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "LARA_ACCESS_KEY_ID",
"-e", "LARA_ACCESS_KEY_SECRET",
"lara-mcp"
],
"env": {
"LARA_ACCESS_KEY_ID": "<YOUR_ACCESS_KEY_ID>",
"LARA_ACCESS_KEY_SECRET": "<YOUR_ACCESS_KEY_SECRET>"
}
}
}
}
```
---
## Usage Metrics
The server reports usage events to Lara so we can see which tools and options
are used and which problems users run into. Usage metrics are **on by default**.
They are **pseudonymous**, not anonymous: each event is tied to your Lara account
id.
**Events:** an `auth_success` the first time your credentials are accepted, a
`call_success` / `call_error` per tool call, and an `auth_fail` when Lara
rejects your credentials (sent without an account id when the key never worked).
**What is sent:**
- your Lara account id (`acc_...`) and the server version;
- the tool name, how long the call took, and how many characters were translated;
- for `translate`: the source and target language tags, the options you used,
and how many text blocks, glossaries, memories and instructions the call had
(how many — never which);
- the kind of client (`claude`, `claude-code`, `chatgpt`, `cursor`, `codex`,
`vscode` or `other`) and its version number;
- the transport (`stdio` / `http`), operating system and Node.js version;
- on errors: an error category, the HTTP status and error type Lara answered
with, and the names of invalid arguments.
**What is never sent:** the text you translate or its translation, your access
key id and secret, glossary and memory ids, instructions, context, error
messages, raw client names or user agents.
An installation id (a random UUID, tied to nothing) is generated the first time
an event is sent and kept at `~/.lara/installation-id` — set `LARA_HOME` to move
it. It identifies this installation to the metrics backend, never you.
### Opting out
**Per call:** a `translate` call with `no_trace: true` (Lara's own privacy flag)
reports nothing at all — no event of any kind is sent for that call.
**Entirely:** set `DO_NOT_TRACK` to `1`, `true` or `yes` and nothing is
measured, queued, written to disk or sent:
```json
{
"mcpServers": {
"lara-translate": {
"command": "npx",
"args": ["-y", "@translated/lara-mcp@latest"],
"env": {
"LARA_ACCESS_KEY_ID": "<YOUR_ACCESS_KEY_ID>",
"LARA_ACCESS_KEY_SECRET": "<YOUR_ACCESS_KEY_SECRET>",
"DO_NOT_TRACK": "1"
}
}
}
}
```
Metrics never block, slow down or fail a translation: events are batched, sent
in the background, and a monitoring backend that is down is ignored.
---
## Support
- For issues with Lara Translate API: visit [Lara Translate Support](https://support.laratranslate.com)
- For issues with this MCP server: open an issue on [GitHub](https://github.com/translated/lara-mcp/issues)
TDQS
Scored across 22 tools
Tools are largely organized by resource+action (translation, memory, glossary), so purposes are mostly clear. The only mild overlap is between check_import_status (TMX) and check_glossary_import_status (glossary CSV), and between add_translation and add_glossary_entry, but the descriptions clearly anchor each to its resource.
Names follow a consistent snake_case verb_noun pattern (list_*, create_*, delete_*, import_*, export_*). Minor inconsistency in verb choice (get_glossary alongside list_glossaries, add_translation vs create_memory), but the pattern remains predictable.
22 tools is on the high side but justified by three distinct resource domains: translation, translation memories, and glossaries. Each tool maps to a concrete operation with little redundancy, though the set is near the upper bound of comfort.
Memory CRUD, glossary CRUD plus entry management, import/export, and async status polling are all covered. Minor gaps remain, such as no way to list or read translation units within a memory (only add/delete) and no memory export, but core workflows are intact.