Levelang MCP Server
Click on "Deploy 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., "@Levelang MCP Server Translate 'I need a taxi' into French at a beginner level"
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.
levelang.app MCP Server
An MCP server that exposes the levelang.app translation API to AI assistants. Unlike standard translators that always produce native-speaker complexity, levelang.app constrains translations to the learner's proficiency level.
Features
Level-Aware Translation — Translate text at beginner, intermediate, advanced, or fluent proficiency with grammar constraints enforced per level
Multi-Language Support — French, German, Italian, Mandarin Chinese, Cantonese, Japanese, with transliteration where applicable
Mood Control — Casual and formal translation styles, plus honorific (keigo) for Japanese
Language Discovery — Query available languages, levels, and moods dynamically from the backend
MCP Resources —
levelang://languagesandlevelang://languages/{code}for pulling language configs into contextStateless Wrapper — No database, no shared state; translates MCP tool calls into backend HTTP requests
Related MCP server: mcp-libretranslate
Quick Start
You need two things: the MCP server URL and an API key. No local setup required.
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"levelang": {
"url": "https://your-mcp-server-url/mcp",
"headers": {
"Authorization": "Bearer your-api-key"
}
}
}
}Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"levelang": {
"url": "https://your-mcp-server-url/mcp",
"headers": {
"Authorization": "Bearer your-api-key"
}
}
}
}Restart Claude Desktop. A hammer icon in the chat input indicates MCP tools are available.
Example Usage
Once connected, ask your AI assistant things like:
Translate "I would like to order a coffee, please" into French at the beginner level.
What languages does Levelang support?
Compare how "I'm worried the new rules might prevent us from finishing on time" translates into German at beginner vs advanced level.
Server Configuration
The settings below are for running the MCP server (local development or self-hosting). End users connecting via URL do not need these.
All configuration is through environment variables. When running locally via stdio, these go in the env block of your MCP client config.
Variable | Required | Default | Description |
| No |
| Levelang backend URL |
| Depends | — | Service key ( |
| No |
| Transport: |
| No |
| Port when using HTTP transport |
| No | — | Comma-separated valid API keys for HTTP auth |
LEVELANG_API_KEY is required when connecting to a remote backend (staging/production). It may be omitted for local development if the backend has auth disabled.
MCP_API_KEYS controls client authentication for the HTTP transport. When set, clients must send Authorization: Bearer <key> with a key from this list. When empty or unset, auth is disabled (open access). This has no effect on stdio transport.
Local stdio Connection
For local development you can run the MCP server as a subprocess instead of connecting via URL. This requires Python 3.12+, uv, and a running Levelang backend.
git clone https://github.com/beverage/levelang-mcp.git
cd levelang-mcp
uv sync{
"mcpServers": {
"levelang": {
"command": "uv",
"args": [
"run",
"--directory", "/absolute/path/to/levelang-mcp",
"python", "-m", "levelang_mcp"
],
"env": {
"LEVELANG_API_BASE_URL": "http://localhost:8000/api/v1"
}
}
}
}Development
Setup
uv sync
git config core.hooksPath .githooksThis enables pre-commit (auto-fix lint + format) and pre-push (lint + format check + tests) hooks.
Running Tests
uv run pytest tests/ -vMCP Inspector
The MCP Inspector provides a web UI for browsing and invoking tools and resources:
npx @modelcontextprotocol/inspector uv run --directory /path/to/levelang-mcp python -m levelang_mcpProject Structure
src/levelang_mcp/
├── __main__.py # Entrypoint (python -m levelang_mcp)
├── server.py # MCP tools and resources
├── auth.py # API-key auth middleware for HTTP transport
├── client.py # Async HTTP client for the Levelang API
├── config.py # Environment variable loading
└── formatting.py # API response → human-readable text
tests/
├── test_auth.py # Auth middleware and config tests
├── test_client.py # HTTP client tests (mocked)
├── test_formatting.py
└── test_tools.py # Tool integration tests (mocked)Architecture
MCP Client levelang-mcp Levelang Backend
(Claude, Cursor, ◄── MCP/stdio ──► (this) ─── HTTP ──► (FastAPI)
Claude Code) POST /translate
GET /languages/details
GET /languages/{code}The MCP server is a stateless wrapper. It translates MCP tool calls into HTTP requests to the Levelang backend and formats responses as human-readable text for the LLM. It does not share code, database connections, or deployment with the backend.
License
MIT
Available Tools
3 toolslist_languagesA
List all languages supported by Levelang with their available levels and moods.
Use this to discover valid language codes, proficiency levels, mood options, and mode options before calling the translate tool.
Returns: Formatted list of supported languages and their configurations.
Inputs: no named parameters. Returns: result
translateA
Translate text to a target language at a specific proficiency level.
Unlike standard translators that produce native-speaker complexity, this translates at the learner's level -- beginner translations use simple grammar, intermediate uses more complex structures, etc.
Args: text: The text to translate (any length, any source language) target_language: Target language code -- use list_languages to see available codes (e.g. fra, deu, cmn, yue, ita) level: Proficiency level -- proficiency levels available for the target language (e.g. beginner, intermediate, advanced, and/or fluent) source_language: Source language code (default: eng for English) mood: Tone -- tones available for the target language mode: Language mode (spoken/written) -- controls whether the translation targets written or spoken register. Use list_languages to see available modes per language.
Returns: The translated text with metadata about the translation.
Inputs: text (required), target_language (required), level (required), source_language, +2 more. Returns: result
translate_compareA
Translate text at multiple proficiency levels to compare complexity differences.
Shows how the same text is translated differently at different levels -- useful for understanding how grammar and vocabulary constraints change across proficiency.
Args: text: The text to translate (any length, any source language) target_language: Target language code -- use list_languages to see available codes (e.g. fra, deu, cmn, yue, ita) source_language: Source language code (default: eng for English) mood: Tone -- tones available for the target language levels: Optional list of proficiency level codes to compare (e.g. ["beginner", "advanced"]). If omitted, compares all available levels. Use list_languages to see valid codes per language. mode: Optional language mode (spoken/written) -- controls whether the translation targets written or spoken register. If omitted, compares all available levels. Use list_languages to see valid codes per language.
Returns: The same text translated at each requested level, formatted for comparison.
Inputs: text (required), target_language (required), source_language, mood, +2 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: list_languages provides configuration discovery, translate performs single-level translation, and translate_compare enables multi-level comparison. There is no overlap in functionality, and an agent can easily distinguish between them based on their specific objectives.
All tool names follow a consistent verb_noun pattern: list_languages, translate, and translate_compare. The naming is predictable and readable, with no deviations or mixed conventions, making it easy for agents to understand the tool set's structure.
With 3 tools, the count is reasonable for a language translation server, covering core operations like discovery, translation, and comparison. However, it feels slightly thin, as additional tools for managing translations or handling errors could enhance completeness, but the current set is well-scoped for basic functionality.
The tool set covers essential workflows: discovering supported languages, translating text at specific levels, and comparing translations across levels. Minor gaps exist, such as no tools for updating or deleting translations, but these are not critical for the server's purpose, and agents can work effectively with the provided operations.
Maintenance
Related MCP Connectors
Connects an AI assistant to your Lingard account (lingard.app), an app for learning languages with books, news and flashcards. Create topic word collections and add complete cards: translation, part of speech, pronunciation, synonyms, example sentences with translations, and images. Fill in missing fields on existing cards, rewrite example translations, and pause or resume collections, books and news in your daily study sessions. Every change can be previewed before it is saved, and saved words appear in the Lingard apps on iOS, Android and the web. Requires a Lingard account; sign-in uses OAuth.
Localize apps from your AI assistant: translate locale files, set glossaries, connect GitHub repos.
Lexpad is a vocabulary notebook with spaced repetition, in 81 languages. Connect it to ChatGPT or Claude and ask the assistant to save a word from your chat, show the words due today or quiz you. Each answer counts as practice and moves the word through its Leitner boxes. Sign-in is OAuth 2.1 with PKCE on a Lexpad page. 20 tools; the ones that overwrite or delete are marked, so the client asks first. Connecting is free. On Lexpad's Free plan the assistant writes 10 cards a day; on Pro it is unlimited, up to 1,000 a day. Guide and example prompts: https://lexpad.app/features/assistants
AI-native translation management: push translation files, translate, review and audit strings.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides translation and language detection tools to AI agents, processing text, audio, and Google Meet recordings with emotional voice style preservation via Google's Gemini Live API.1-
- AlicenseNot gradedqualityCmaintenanceProvides open-source machine translation capabilities, including language detection and listing supported languages, via a customizable LibreTranslate endpoint.131 npm2MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to translate text, lists, and local documents through a LibreTranslate instance, detect languages, list supported languages, check service status, and submit translation suggestions over stdio or Streamable HTTP. It also exposes the raw LibreTranslate API through resource, describe, and call tools for broader operations.11 npmMIT
- AlicenseNot gradedqualityBmaintenanceLets AI assistants act as a personal language teacher by storing a learner's vocabulary, writing stories around those words, judging translations, labeling mistakes by rule, and scheduling spaced-repetition reviews with FSRS. It also serves the agreed tutoring method to any connected assistant so teaching stays consistent across Claude, ChatGPT and Codex.MIT