xcomet-mcp-server
Servidor MCP xCOMET
⚠️ Este es un proyecto comunitario no oficial, no afiliado a Unbabel.
Servidor MCP de evaluación de calidad de traducción impulsado por xCOMET (eXplainable COMET).
🎯 Descripción general
xCOMET MCP Server proporciona a los agentes de IA la capacidad de evaluar la calidad de la traducción automática. Se integra con el modelo xCOMET de Unbabel para proporcionar:
Puntuación de calidad: Puntuaciones entre 0 y 1 que indican la calidad de la traducción.
Detección de errores: Identifica segmentos con errores y niveles de gravedad (menor/mayor/crítico).
Procesamiento por lotes: Evalúa múltiples pares de traducción de manera eficiente (carga optimizada de un solo modelo).
Soporte para GPU: Aceleración opcional por GPU para una inferencia más rápida.
graph LR
A[AI Agent] --> B[Node.js MCP Server]
B --> C[Python FastAPI Server]
C --> D[xCOMET Model<br/>Persistent in Memory]
D --> C
C --> B
B --> A
style D fill:#9f9🔧 Requisitos previos
Entorno de Python
Se recomienda Python 3.9 - 3.12 (3.13+ aún no es compatible con las dependencias de xCOMET).
xCOMET requiere Python con varios paquetes. Recomendamos usar un entorno virtual:
# If using uv (recommended - auto-downloads the correct Python version)
uv venv ~/.xcomet-venv --python 3.12
source ~/.xcomet-venv/bin/activate
uv pip install "unbabel-comet>=2.2.0" "fastapi>=0.100.0" "uvicorn>=0.23.0" "pydantic>=2.0.0"
# Or using standard venv (requires Python 3.9-3.12 already installed)
python3 -m venv ~/.xcomet-venv
source ~/.xcomet-venv/bin/activate # Windows: ~/.xcomet-venv\Scripts\activate
pip install "unbabel-comet>=2.2.0" "fastapi>=0.100.0" "uvicorn>=0.23.0" "pydantic>=2.0.0"Nota: Cuando lo utilice con Claude Desktop u otros hosts MCP, establezca
XCOMET_PYTHON_PATHpara que apunte al Python del entorno virtual (consulte Configuración).
Descarga del modelo
Importante: XCOMET-XL y XCOMET-XXL son modelos restringidos en HuggingFace. Debe:
Crear una cuenta en HuggingFace.
Visitar Unbabel/XCOMET-XL y solicitar acceso.
Iniciar sesión a través de la CLI:
source ~/.xcomet-venv/bin/activate huggingface-cli login
Unbabel/wmt22-comet-dano requiere autenticación (pero requiere traducciones de referencia).
Después de la autenticación, descargue el modelo (~14 GB para XL, ~42 GB para XXL):
source ~/.xcomet-venv/bin/activate
python -c "from comet import download_model; download_model('Unbabel/XCOMET-XL')"Node.js
Node.js >= 18.0.0
npm o yarn
📦 Instalación
Nota: Si solo desea usar el servidor MCP xCOMET, no necesita clonar este repositorio. Instale el entorno de Python y el modelo (consulte Requisitos previos), luego use
npx(consulte Uso). La siguiente sección es solo para colaboradores y desarrollo local.
Desarrollo local
Para colaboradores y desarrollo local:
# Clone the repository
git clone https://github.com/shuji-bonji/xcomet-mcp-server.git
cd xcomet-mcp-server
# Set up Python virtual environment and install dependencies
uv venv .venv --python 3.12 # or: python3 -m venv .venv
source .venv/bin/activate
pip install -r python/requirements.txt
# Install Node.js dependencies and build
npm install
npm run build🚀 Uso
Con Claude Desktop (npx)
Añada a su configuración de Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"xcomet": {
"command": "npx",
"args": ["-y", "xcomet-mcp-server"],
"env": {
"XCOMET_PYTHON_PATH": "~/.xcomet-venv/bin/python3"
}
}
}
}Consejo: Si instaló paquetes de Python en todo el sistema o usa pyenv, puede omitir
XCOMET_PYTHON_PATH(la detección automática lo encontrará). Consulte Detección automática de la ruta de Python para obtener más detalles.
Con Claude Code
claude mcp add xcomet --env XCOMET_PYTHON_PATH=~/.xcomet-venv/bin/python3 -- npx -y xcomet-mcp-serverInstalación global
Si prefiere instalarlo globalmente:
npm install -g xcomet-mcp-serverLuego configure:
{
"mcpServers": {
"xcomet": {
"command": "xcomet-mcp-server",
"env": {
"XCOMET_PYTHON_PATH": "~/.xcomet-venv/bin/python3"
}
}
}
}Compilación para desarrollo local
Si clonó y compiló el repositorio localmente (consulte Instalación):
{
"mcpServers": {
"xcomet": {
"command": "node",
"args": ["/path/to/xcomet-mcp-server/dist/index.js"],
"env": {
"XCOMET_PYTHON_PATH": "~/.xcomet-venv/bin/python3"
}
}
}
}Modo HTTP (Acceso remoto)
TRANSPORT=http PORT=3000 npm startLuego conéctese a http://localhost:3000/mcp
🛠️ Herramientas disponibles
xcomet_evaluate
Evalúa la calidad de la traducción para un solo par de origen-traducción.
Parámetros:
Nombre | Tipo | Requerido | Descripción | |
| string | ✅ | Texto original de origen | |
| string | ✅ | Texto traducido a evaluar | |
| string | ❌ | Traducción de referencia | |
| string | ❌ | Código de idioma de origen (ISO 639-1) | |
| string | ❌ | Código de idioma de destino (ISO 639-1) | |
| "json" | "markdown" | ❌ | Formato de salida (predeterminado: "json") |
| boolean | ❌ | Usar GPU para inferencia (predeterminado: false) |
Ejemplo:
{
"source": "The quick brown fox jumps over the lazy dog.",
"translation": "素早い茶色のキツネが怠惰な犬を飛び越える。",
"source_lang": "en",
"target_lang": "ja",
"use_gpu": true
}Respuesta:
{
"score": 0.847,
"errors": [],
"summary": "Good quality (score: 0.847) with 0 error(s) detected."
}xcomet_detect_errors
Se centra en detectar y categorizar errores de traducción.
Parámetros:
Nombre | Tipo | Requerido | Descripción | ||
| string | ✅ | Texto original de origen | ||
| string | ✅ | Texto traducido a analizar | ||
| string | ❌ | Traducción de referencia | ||
| "minor" | "major" | "critical" | ❌ | Gravedad mínima (predeterminado: "minor") |
| "json" | "markdown" | ❌ | Formato de salida | |
| boolean | ❌ | Usar GPU para inferencia (predeterminado: false) |
xcomet_batch_evaluate
Evalúa múltiples pares de traducción en una sola solicitud.
Nota de rendimiento: Con la arquitectura de servidor persistente (v0.3.0+), el modelo permanece cargado en la memoria. La evaluación por lotes procesa todos los pares de manera eficiente sin recargar el modelo.
Parámetros:
Nombre | Tipo | Requerido | Descripción | |
| array | ✅ | Matriz de {source, translation, reference?} (máx. 500) | |
| string | ❌ | Código de idioma de origen | |
| string | ❌ | Código de idioma de destino | |
| "json" | "markdown" | ❌ | Formato de salida |
| boolean | ❌ | Usar GPU para inferencia (predeterminado: false) | |
| number | ❌ | Tamaño del lote 1-64 (predeterminado: 8). Más grande = más rápido pero usa más memoria |
Ejemplo:
{
"pairs": [
{"source": "Hello", "translation": "こんにちは"},
{"source": "Goodbye", "translation": "さようなら"}
],
"use_gpu": true,
"batch_size": 16
}🔗 Integración con otros servidores MCP
xCOMET MCP Server está diseñado para funcionar junto con otros servidores MCP para flujos de trabajo de traducción completos:
sequenceDiagram
participant Agent as AI Agent
participant DeepL as DeepL MCP Server
participant xCOMET as xCOMET MCP Server
Agent->>DeepL: Translate text
DeepL-->>Agent: Translation result
Agent->>xCOMET: Evaluate quality
xCOMET-->>Agent: Score + Errors
Agent->>Agent: Decide: Accept or retry?Flujo de trabajo recomendado
Traducir usando el servidor MCP de DeepL (oficial)
Evaluar usando el servidor MCP de xCOMET
Iterar si la calidad está por debajo del umbral
Ejemplo: Integración DeepL + xCOMET
Configure ambos servidores en Claude Desktop:
{
"mcpServers": {
"deepl": {
"command": "npx",
"args": ["-y", "@anthropic/deepl-mcp-server"],
"env": {
"DEEPL_API_KEY": "your-api-key"
}
},
"xcomet": {
"command": "npx",
"args": ["-y", "xcomet-mcp-server"],
"env": {
"XCOMET_PYTHON_PATH": "~/.xcomet-venv/bin/python3"
}
}
}
}Luego pregúntele a Claude:
"Traduce este texto al japonés usando DeepL, luego evalúa la calidad de la traducción con xCOMET. Si la puntuación es inferior a 0.8, sugiere mejoras."
⚙️ Configuración
Variables de entorno
Variable | Predeterminado | Descripción |
|
| Modo de transporte: |
|
| Puerto del servidor HTTP (cuando TRANSPORT=http) |
|
| Modelo xCOMET a utilizar |
| (auto-detect) | Ruta del ejecutable de Python (ver abajo) |
|
| Precargar modelo al inicio (v0.3.1+) |
|
| Habilitar registro de depuración detallado (v0.3.1+) |
Selección de modelo
Elija el modelo según sus necesidades de calidad/rendimiento:
Modelo | Parámetros | Tamaño | Memoria | Referencia | Autenticación HF | Calidad | Caso de uso |
| 3.5B | ~14GB | ~8-10GB | Opcional | ✅ Requerido | ⭐⭐⭐⭐ | Recomendado para la mayoría de casos |
| 10.7B | ~42GB | ~20GB | Opcional | ✅ Requerido | ⭐⭐⭐⭐⭐ | Máxima calidad, requiere más recursos |
| 580M | ~2GB | ~3GB | Requerido | No requerido | ⭐⭐⭐ | Ligero, carga más rápida |
Importante: XCOMET-XL y XCOMET-XXL son modelos restringidos en HuggingFace. Cada modelo requiere una aprobación de acceso por separado. Consulte Descarga del modelo para la configuración de autenticación.
Importante:
wmt22-comet-darequiere una traducción dereferenciapara la evaluación. Los modelos XCOMET admiten la evaluación sin referencia.
Consejo: Si experimenta problemas de memoria o carga lenta del modelo, pruebe
Unbabel/wmt22-comet-dapara un rendimiento más rápido con una precisión ligeramente menor (pero recuerde proporcionar traducciones de referencia).
Para usar un modelo diferente, establezca la variable de entorno XCOMET_MODEL:
{
"mcpServers": {
"xcomet": {
"command": "npx",
"args": ["-y", "xcomet-mcp-server"],
"env": {
"XCOMET_MODEL": "Unbabel/XCOMET-XXL"
}
}
}
}Detección automática de la ruta de Python
El servidor detecta automáticamente un entorno de Python con unbabel-comet instalado:
Variable de entorno
XCOMET_PYTHON_PATH(si está establecida)Versiones de pyenv (
~/.pyenv/versions/*/bin/python3) - comprueba el módulocometPython de Homebrew (
/opt/homebrew/bin/python3,/usr/local/bin/python3)Respaldo: comando
python3
Esto garantiza que el servidor funcione correctamente incluso cuando el host MCP (por ejemplo, Claude Desktop) utiliza un Python diferente al de su terminal.
Ejemplo: Configuración explícita de la ruta de Python
{
"mcpServers": {
"xcomet": {
"command": "npx",
"args": ["-y", "xcomet-mcp-server"],
"env": {
"XCOMET_PYTHON_PATH": "/Users/you/.pyenv/versions/3.11.0/bin/python3"
}
}
}
}⚡ Rendimiento
Arquitectura de servidor persistente (v0.3.0+)
El servidor utiliza un servidor FastAPI de Python persistente que mantiene el modelo xCOMET cargado en la memoria:
Solicitud | Tiempo | Notas |
Primera solicitud | ~25-90s | Carga del modelo (varía según el tamaño) |
Solicitudes posteriores | ~500ms | Modelo ya cargado |
Esto proporciona una aceleración de 177x para evaluaciones consecutivas en comparación con recargar el modelo cada vez.
Carga anticipada (v0.3.1+)
Habilite XCOMET_PRELOAD=true para precargar el modelo al iniciar el servidor:
{
"mcpServers": {
"xcomet": {
"command": "npx",
"args": ["-y", "xcomet-mcp-server"],
"env": {
"XCOMET_PRELOAD": "true"
}
}
}
}Con la precarga habilitada, todas las solicitudes son rápidas (~500ms), incluida la primera.
graph LR
A[MCP Request] --> B[Node.js Server]
B --> C[Python FastAPI Server]
C --> D[xCOMET Model<br/>in Memory]
D --> C
C --> B
B --> A
style D fill:#9f9Optimización del procesamiento por lotes
La herramienta xcomet_batch_evaluate procesa todos los pares con una sola carga de modelo:
Pares | Tiempo estimado |
10 | ~30-40 seg |
50 | ~1-1.5 min |
100 | ~2 min |
Rendimiento GPU vs CPU
Modo | 100 pares (estimado) |
CPU (batch_size=8) | ~2 min |
GPU (batch_size=16) | ~20-30 seg |
Nota: La GPU requiere hardware compatible con CUDA y PyTorch con soporte CUDA. Si la GPU no está disponible, establezca
use_gpu: false(predeterminado).
Mejores prácticas
1. Deje que el servidor persistente haga su trabajo
Con v0.3.0+, el modelo permanece en la memoria. Varias llamadas a xcomet_evaluate ahora son eficientes:
✅ Fast: First call loads model, subsequent calls reuse it
xcomet_evaluate(pair1) # ~90s (model loads)
xcomet_evaluate(pair2) # ~500ms (model cached)
xcomet_evaluate(pair3) # ~500ms (model cached)2. Para muchos pares, use la evaluación por lotes
✅ Even faster: Batch all pairs in one call
xcomet_batch_evaluate(allPairs) # Optimal throughput3. Consideraciones de memoria
XCOMET-XL requiere ~8-10GB de RAM
Para lotes grandes (500 pares), asegúrese de tener suficiente memoria
Si la memoria es limitada, divida en lotes más pequeños (100-200 pares)
Reinicio automático (v0.3.1+)
El servidor se recupera automáticamente de los fallos:
Supervisa el estado cada 30 segundos
Se reinicia después de 3 fallos consecutivos en la comprobación de estado
Hasta 3 intentos de reinicio antes de rendirse
📊 Interpretación de la puntuación de calidad
Rango de puntuación | Calidad | Recomendación |
0.9 - 1.0 | Excelente | Listo para usar |
0.7 - 0.9 | Bueno | Se recomienda una revisión menor |
0.5 - 0.7 | Aceptable | Se necesita posedición |
0.0 - 0.5 | Pobre | Se recomienda retraducir |
🔍 Solución de problemas
Problemas comunes
"No module named 'comet'"
Causa: Entorno de Python sin unbabel-comet instalado.
Solución:
# Check which Python is being used
python3 -c "import sys; print(sys.executable)"
# If using a virtual environment, make sure it's activated
source .venv/bin/activate
pip install -r python/requirements.txt
# For MCP hosts (e.g., Claude Desktop), specify the venv Python path
export XCOMET_PYTHON_PATH=~/.xcomet-venv/bin/python3La descarga del modelo falla o se agota el tiempo de espera
Causa: Los archivos de modelo grandes (~14GB para XL) requieren una conexión a Internet estable. Los modelos XCOMET también requieren autenticación de HuggingFace (consulte Descarga del modelo).
Solución:
# Login to HuggingFace (required for XCOMET-XL/XXL)
huggingface-cli login
# Pre-download the model manually
python -c "from comet import download_model; download_model('Unbabel/XCOMET-XL')"GPU no detectada
Causa: PyTorch no instalado con soporte CUDA.
**Solución
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/shuji-bonji/xcomet-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server