Comet Opik
oficialConsulta y analiza tus registros de Opik, trazas, prompts y todos los demás datos de telemetría de tus LLMs en lenguaje natural.
¿Qué puedes hacer con Comet Opik MCP?
- Browse and search your Opik workspace — lista proyectos, experimentos, trazas, spans, prompts o conjuntos de pruebas con filtros de nombre opcionales y paginación mediante
list. - Inspect any entity by ID, name, or URI — recupera detalles completos (incluyendo hijos en línea para trazas y prompts) usando
readcon URIsopik://o UUIDs. - Log traces, scores, comments, and prompt versions — crea o actualiza trazas y spans, adjunta puntuaciones de retroalimentación, guarda versiones de prompts y gestiona conjuntos de pruebas a través de
write. - Ask Ollie investigative questions about your LLM observability data — consulta
ask_olliepara comparar experimentos, diagnosticar regresiones o sintetizar información entre entidades con puntuación opcional en medio del flujo. - Run evaluation experiments end-to-end — ejecuta
run_experimentcon un prompt, un conjunto de pruebas y evaluadores para realizar y registrar una ejecución de evaluación completa. - Introspect write operation schemas — usa
schemapara recuperar la forma JSON exacta y los campos requeridos de cualquier operación de escritura antes de construir un payload.
Documentación
Servidor MCP de Opik
El servidor oficial del Protocolo de Contexto de Modelo (MCP) para Opik, la plataforma de código abierto de observabilidad y evaluación de LLMs, creada por Comet. Conecta tu asistente de IA (Claude Code, Cursor, VS Code Copilot, MCP Inspector) directamente a tu espacio de trabajo de Opik: lee trazas, registra puntuaciones, guarda versiones de prompts y haz preguntas de investigación a Ollie, el asistente de IA integrado en Opik, todo desde el chat.
Diseñado para ingenieros de LLMs que ya usan Opik y quieren controlarlo desde el mismo asistente de IA con el que programan.
¿Migrando desde el antiguo
npx opik-mcp? El servidor TypeScript está obsoleto y se retirará el 15-11-2026. Cambianpx -y opik-mcpporuvx opik-mcp@latesten la configuración de tu cliente MCP. Guía completa:legacy/typescript/MIGRATION.md.
You: "Why did the experiment 'gpt-4o-rerank-v3' regress on factuality?"
Claude: → ask_ollie → reads experiment + traces → "Three traces failed because…"
You: "Score trace 7f2e… 0.9 on helpfulness with reason 'great recovery'."
Claude: → write(score.create) → done
Instalación
opik-mcp es un paquete de Python (requiere Python 3.13+). La forma recomendada de
ejecutarlo es uvx, que obtiene y ejecuta la última versión publicada bajo demanda —
sin instalación global, sin malabares con virtualenv.
Instala uv una vez:
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS / Linux
# or: brew install uv
Necesitarás dos cosas de tu espacio de trabajo de Opik:
OPIK_API_KEY— consíguela desdecomet.com/api/my/settings/.OPIK_WORKSPACE— el nombre de tu espacio de trabajo (en minúsculas, tal como aparece en la URL). P. ej.,https://www.comet.com/acme-ai/...→OPIK_WORKSPACE=acme-ai. Opcional — por defecto esdefault(la convención del SDK de Opik), que es correcto para instalaciones locales/OSS; los usuarios de la nube con un espacio de trabajo con nombre deben configurarlo.COMET_WORKSPACEse acepta como un alias obsoleto.
Nota previa al lanzamiento:
opik-mcp(Python) aún no está publicado en PyPI. Hasta que llegue el primer lanzamiento en PyPI, reemplazauvx opik-mcpen cualquier fragmento a continuación por:uvx --from git+https://github.com/comet-ml/opik-mcp.git opik-mcp
OPIK_WORKSPACEes opcional. Omite la línea/claveOPIK_WORKSPACEen cualquier fragmento a continuación y el servidor usará el espacio de trabajodefault(correcto para instalaciones locales/OSS). Configúralo solo si te conectas a un espacio de trabajo con nombre en la nube.
Claude Code
Añade el servidor con un comando:
claude mcp add --transport stdio opik-mcp \
--env OPIK_API_KEY=<your-key> \
--env OPIK_WORKSPACE=<your-workspace> \
-- uvx opik-mcp
O edita ~/.claude.json directamente:
{
"mcpServers": {
"opik-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["opik-mcp"],
"env": {
"OPIK_API_KEY": "<your-key>",
"OPIK_WORKSPACE": "<your-workspace>"
}
}
}
}
Reinicia Claude Code. Verifica con /mcp — opik-mcp debería aparecer como conectado.
Luego, en el chat, pregunta: "listar mis proyectos de Opik" — Claude llamará a la herramienta list
y verás los proyectos de tu espacio de trabajo.
Cursor
Edita ~/.cursor/mcp.json (global) o .cursor/mcp.json (proyecto), o abre
Cmd+Shift+J → Funciones → Protocolo de Contexto de Modelo:
{
"mcpServers": {
"opik-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["opik-mcp"],
"env": {
"OPIK_API_KEY": "<your-key>",
"OPIK_WORKSPACE": "<your-workspace>"
}
}
}
}
Recarga Cursor; el punto verde junto a opik-mcp en el panel MCP confirma la
conexión. Pregunta en el chat: "listar mis proyectos de Opik".
Timeout de 60s en Cursor. Cursor impone un límite estricto de tiempo de espera para llamadas a herramientas que no se reinicia con notificaciones de progreso. Las ejecuciones largas de
ask_olliefallarán en Cursor. Consulta Límites conocidos del host.
VS Code Copilot
.vscode/mcp.json en tu espacio de trabajo (o en el JSON de Configuración de Usuario):
{
"servers": {
"opik-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["opik-mcp"],
"env": {
"OPIK_API_KEY": "<your-key>",
"OPIK_WORKSPACE": "<your-workspace>"
}
}
}
}
Recarga la ventana; el indicador MCP de Copilot Chat muestra opik-mcp una vez
que el servidor está accesible. Pregunta en el chat: "listar mis proyectos de Opik".
MCP Inspector (pruebas manuales)
OPIK_API_KEY=<your-key> OPIK_WORKSPACE=<your-workspace> \
npx @modelcontextprotocol/inspector uvx opik-mcp
Opik autoalojado
Añade COMET_URL_OVERRIDE (y OPIK_URL si Opik reside en una ruta no predeterminada) al
mismo bloque env en la configuración de tu host:
{
"mcpServers": {
"opik-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["opik-mcp"],
"env": {
"OPIK_API_KEY": "<your-key>",
"COMET_URL_OVERRIDE": "https://opik.your-company.com",
"OPIK_MCP_ANALYTICS_SOURCE": ""
}
}
}
}
ask_ollie y run_experiment solo están disponibles en Comet Cloud — en
autoalojado, esas llamadas fallarán en el despacho, así que usa read / list / write
directamente. Configurar OPIK_MCP_ANALYTICS_SOURCE="" excluye tu instalación de la
etiqueta de origen Comet en la nube en los eventos de telemetría.
Herramientas
opik-mcp expone una superficie pequeña y orientada a resultados — seis herramientas que cubren
el ciclo de vida completo (leer → anotar → curar → crear → iterar).
| Herramienta | Propósito |
|---|---|
read | Lectura universal por id / nombre / URI opik:// |
list | Listado universal con filtro de nombre opcional + paginación |
ask_ollie | Investigar / sintetizar a través del asistente integrado de Opik |
write | Escritura universal — registrar trazas/spans, puntuar, comentar, guardar prompts, gestionar conjuntos de prueba y experimentos |
schema | Inspeccionar esquemas de operaciones de escritura (usado por el LLM para construir cargas útiles válidas) |
run_experiment | Ejecutar un experimento de evaluación de principio a fin a través de Ollie |
read
Una herramienta para cualquier pregunta de "muéstrame X". Toma un entity_type más un id
(UUID o, para tipos nombrables, un nombre) o una URI opik:// completa. Las lecturas compuestas
(trace, prompt) incluyen sus elementos secundarios para que una sola llamada devuelva la imagen
completa.
Entidades soportadas: project, trace, span, test_suite, experiment,
prompt. La búsqueda por nombre está disponible para project, experiment, prompt,
test_suite (más lenta — dos llamadas a la API — y puede devolver múltiples coincidencias).
read(entity_type="trace", id="7f2e3c8a-…")
read(entity_type="project", id="demo") # name lookup
read(entity_type="trace", id="opik://traces/7f2e3c8a-…")
list
Explora una colección con filtro de nombre opcional y paginación. Los tipos con ámbito de proyecto
(trace, test_suite_item, prompt_version) requieren el UUID de su padre.
list(entity_type="experiment", page=1, size=25)
list(entity_type="experiment", name="rerank") # name substring filter
list(entity_type="trace", project_id="<project-uuid>") # traces of one project
ask_ollie
Para preguntas de investigación, síntesis entre entidades o cualquier cosa que necesite experiencia en el dominio de Opik. Ollie tiene acceso de lectura directo a tu espacio de trabajo y puede ejecutar escrituras (puntuaciones, comentarios, elementos de conjuntos de prueba, versiones de prompts) en medio del flujo cuando se le solicite.
ask_ollie(query="Why are spans in project 'demo' slower this week than last?")
ask_ollie(query="Compare experiments A and B on factuality. Score the bottom 5 traces of A 0.2 with reason.")
Devuelve el texto final del asistente más un thread_id. Pásalo de vuelta en
seguimientos para preservar el contexto — Ollie no tiene memoria entre hilos.
Modo YOLO (predeterminado). Las escrituras que Ollie realiza en medio del flujo se ejecutan sin una
confirmación por acción. Cada autoaprobación se registra como una fila de auditoría JSON en
el logger de Python opik_mcp.audit. Para requerir confirmación en su lugar, configura
OPIK_MCP_AUTO_APPROVE=disabled — las solicitudes de confirmación de Ollie aparecerán entonces como
errores tipados que puedes reemitir manualmente.
Disponible solo en Comet Cloud.
write
Despachador de escritura universal. Pasa operation + data y el despachador
valida la carga útil, aplica el verbo REST correcto y devuelve la
respuesta del backend.
Operaciones:
| Operación | Qué hace |
|---|---|
trace.create | Registrar una sola traza (o un lote). Padre para spans / puntuaciones / comentarios. |
trace.update | Finalizar o modificar una traza existente. |
span.create | Registrar un span en una traza existente (o un lote). |
score.create | Adjuntar una puntuación de retroalimentación numérica a una traza, span o hilo. |
comment.create | Adjuntar un comentario de texto libre a una traza, span o hilo. |
prompt_version.save | Guardar una nueva versión de prompt (crea el prompt por nombre si no existe). |
test_suite.create | Crear un conjunto de prueba de evaluación. |
test_suite_item.upsert | Insertar o actualizar elementos en un conjunto de prueba (siempre con la forma de envoltura). |
experiment.create | Crear un experimento limitado a un conjunto de prueba. |
experiment_item.create | Adjuntar filas de traza + dataset_item a un experimento. |
write(operation="score.create", data={
"target": "trace",
"target_id": "7f2e3c8a-…",
"name": "helpfulness",
"value": 0.9,
"reason": "great recovery"
})
schema
Inspecciona la forma JSON exacta y los campos requeridos de cualquier operación de escritura antes de
llamarla — útil cuando no estás seguro de cómo debería verse data. Devuelve
el esquema, el ámbito OAuth y un ejemplo validado. Consulta pura, sin llamada
al backend.
schema(operation="score.create")
schema(operation="prompt_version.save")
run_experiment
Ejecuta un experimento de evaluación de principio a fin a través de Ollie. Toma un único
dict experiment_config que refleja la forma del experimento de Opik (prompt, conjunto de
prueba, puntuadores); Ollie ejecuta la ejecución y escribe los resultados de vuelta como un
experimento de Opik.
run_experiment(experiment_config={
"test_suite_name": "qa-eval-v2",
"prompt_name": "welcome-msg",
# … see `schema(operation="experiment.create")` for the full shape
})
Disponible solo en Comet Cloud.
Configuración
Cada ajuste es una variable de entorno. Las obligatorias en negrita.
Identidad / endpoint
| Variable | Predeterminado | Notas |
|---|---|---|
OPIK_API_KEY | — | Obligatorio para ask_ollie y cualquier lectura/escritura autenticada. |
OPIK_WORKSPACE | default | Nombre del espacio de trabajo. Opcional — por defecto es default (convención del SDK de Opik). Los usuarios de la nube con un espacio de trabajo con nombre deben configurarlo. |
COMET_WORKSPACE | — | Alias obsoleto para OPIK_WORKSPACE (compatibilidad con versiones anteriores). OPIK_WORKSPACE prevalece si ambos están configurados. |
COMET_WORKSPACE_ID | — | UUID opcional del espacio de trabajo. Se incluye en los eventos de analítica cuando se configura para que BI pueda unir por un id estable en lugar del nombre de espacio de trabajo (mutable). |
COMET_URL_OVERRIDE | https://www.comet.com | Configúralo con tu host de Comet autoalojado, o https://dev.comet.com para staging. |
OPIK_URL | derivado de COMET_URL_OVERRIDE + /opik/api | Anula solo si Opik reside en un host/ruta diferente al de la UI de Comet. |
OPIK_DEFAULT_PROJECT_NAME | no configurado | Cuando se configura, el blob instructions por sesión le dice al LLM que pase esto como project_name en cada llamada a herramienta a menos que el usuario nombre un proyecto diferente. |
Servidor / transporte
| Variable | Predeterminado | Notas |
|---|---|---|
OPIK_MCP_TRANSPORT | stdio | stdio para lanzado por el host, streamable-http para escuchar en un puerto. |
OPIK_MCP_HOST | 127.0.0.1 | Host de enlace de uvicorn (solo streamable-http). |
OPIK_MCP_PORT | 8080 | Puerto de enlace de uvicorn (solo streamable-http). |
OPIK_MCP_RELOAD | false | true para habilitar --reload de uvicorn (solo desarrollo). |
OPIK_MCP_AS_URL | no configurado | URL del Servidor de Autorización OAuth, anunciada en /.well-known/oauth-protected-resource (RFC 9728) y utilizada como destino proxy para sondas de descubrimiento AS. Requerida para que los hosts MCP inicien el baile OAuth sobre HTTP. |
OPIK_MCP_RESOURCE_URI | no configurado | URI pública canónica de este servidor, anunciada como resource en los metadatos del recurso protegido y utilizada para derivar la pista WWW-Authenticate. |
OPIK_MCP_LOG_LEVEL | INFO | umbral del logger stderr. |
Elegir un transporte
opik-mcp no realiza validación de credenciales local en el transporte HTTP: cualquier
Authorization: Bearer … bien formado (una clave API de Opik o un token de acceso OAuth
opik_mcp_at_…) se reenvía textualmente a opik-backend, que es el
punto único de aplicación de autenticación. Elige el transporte según la forma de despliegue:
| Escenario | Transporte |
|---|---|
| Cliente MCP y Opik en la misma máquina (instalación OSS local) | stdio (recomendado — más simple, sin puerto, sin configuración OAuth) |
| Cliente MCP local → Opik remoto (nube Comet / autoalojado) | stdio con OPIK_API_KEY, o HTTP con OAuth (OPIK_MCP_AS_URL apuntando al backend) |
| opik-mcp alojado detrás del mismo edge que opik-backend | HTTP — los bearers son validados por el backend por solicitud |
Nota para instalaciones OSS locales: el backend OSS no autentica solicitudes,
por lo que un opik-mcp HTTP frente a él es tan abierto como la propia API REST OSS.
Mantén el enlace predeterminado 127.0.0.1 (y prefiere stdio) en redes compartidas.
Ollie / llamadas largas
| Variable | Predeterminado | Notas |
|---|---|---|
OPIK_MCP_AUTO_APPROVE | enabled | disabled para requerir una aprobación por acción antes de que procedan las escrituras en medio del flujo de Ollie. En hosts que anuncian la capacidad MCP elicitation el usuario ve un prompt sí/no; en hosts más simples la solicitud aparece como un error tipado que puedes reemitir manualmente. |
OPIK_MCP_ELICIT_TIMEOUT_SECONDS | 60 | Cuánto tiempo puede esperar el prompt de confirmación en medio del flujo de Ollie al usuario antes de ser tratado como una cancelación. 0 desactiva el límite (solo depuración). |
OPIK_MCP_POD_READY_TIMEOUT_S | 120 | Límite de sondeo de arranque en frío del pod de Ollie. |
OPIK_MCP_POD_READY_INTERVAL_S | 2 | Intervalo de sondeo de arranque en frío. |
OPIK_MCP_HEARTBEAT_INTERVAL_S | 15.0 | Cadencia del watchdog — emite un tick notifications/progress cuando el pod está en silencio, manteniendo a raya los timeouts del host. |
OPIK_MCP_STREAM_IDLE_TIMEOUT_S | 300.0 | Límite máximo de silencio del pod antes de que ask_ollie aborte. 0 desactiva (solo depuración). |
Telemetría
Eventos de uso anónimos (solo tipo de evento y tiempo — sin contenido de consultas). Se incluye un resumen SHA-256 de tu clave API para que el soporte pueda encontrar tu cuenta; la clave sin procesar nunca sale del proceso. Exclusión voluntaria: OPIK_MCP_ANALYTICS_ENABLED=false.
| Variable | Predeterminado | Notas |
|---|---|---|
OPIK_MCP_ANALYTICS_ENABLED | true | Establecer en false para deshabilitar toda la telemetría. |
OPIK_MCP_ANALYTICS_URL | https://stats.comet.com/notify/event/ | Anulación para staging. |
OPIK_MCP_ANALYTICS_ENVIRONMENT | prod | Etiqueta en cada evento (prod / staging / dev). |
OPIK_MCP_ANALYTICS_SOURCE | comet.com | El receptor usa esto para marcar on_prem=False. Las instalaciones locales deben anularlo a "" o su propio dominio. |
OPIK_MCP_ANALYTICS_CONNECT_TIMEOUT_S | 5.0 | Tiempo de espera de conexión HTTP. |
OPIK_MCP_ANALYTICS_TOTAL_TIMEOUT_S | 10.0 | Tiempo de espera total de solicitud HTTP. |
Límites conocidos del host
La especificación MCP permite a los hosts restablecer su tiempo de espera de llamada de herramienta en
notifications/progress — opik-mcp emite uno por evento SSE de Ollie más un
latido de vigilancia de 15 segundos. La realidad es desigual:
- Claude Code — sin tiempo de espera de llamada de herramienta documentado; el latido mantiene la llamada
viva hasta
message_end. Recomendado. - Cursor — tiempo de espera fijo de 60s que no se restablece con el progreso
(error conocido).
Los turnos largos de Ollie fallarán. Mantén las consultas de
ask_ollieenfocadas. - MCP Inspector —
MAX_TOTAL_TIMEOUTlimita la duración total (predeterminado 60s). Auméntalo en la interfaz del Inspector para operaciones largas.
Si una llamada se bloquea, establece OPIK_MCP_LOG_LEVEL=DEBUG — los fallos de latido
(generalmente desconexiones del host) se registran en opik_mcp.ask_ollie a nivel debug.
Solución de problemas
OPIK_API_KEY is required to use ask_ollie — la variable no está llegando al
proceso del servidor. En Claude Code / Cursor / VS Code, las variables de entorno solo se aplican cuando están
dentro del bloque env de la configuración del servidor MCP, no en tu shell. Reinicia el
host después de editar.
ask_ollie devuelve "pod not ready" después de 2 minutos — el arranque en frío del pod de Ollie
excedió OPIK_MCP_POD_READY_TIMEOUT_S. Reintenta — la segunda llamada
generalmente alcanza un pod caliente.
ask_ollie / run_experiment falla con un error de despacho en Opik autogestionado
— esas herramientas solo están disponibles en Comet Cloud. Usa read / list /
write directamente en autogestionado.
La llamada de Cursor expira a los 60s — error conocido de Cursor, no de opik-mcp. Acorta
la consulta de Ollie o ejecuta la misma operación en Claude Code que no tiene
límite estricto.
Desarrollo
git clone git@github.com:comet-ml/opik-mcp.git
cd opik-mcp
make install # uv sync --extra dev
make check # lint + typecheck + test
make run-dev # uvicorn with --reload + DEBUG logs
make inspect # MCP Inspector against the running server
Objetivos comunes:
| Objetivo | Qué hace |
|---|---|
make install | uv sync --extra dev |
make run | Ejecutar el servidor MCP (stdio por defecto). |
make run-dev | Ejecutar con registro DEBUG + uvicorn --reload. |
make dev | Ejecutar vía mcp dev (envoltorio de modo desarrollo del Inspector). |
make inspect | Lanzar MCP Inspector contra un servidor en ejecución. |
make test | uv run pytest -q. |
make test-live | Prueba en vivo de extremo a extremo contra dev.comet.com (establecer OPIK_API_KEY + OPIK_WORKSPACE). |
make lint | ruff check + verificación de formato. |
make format | ruff format + ruff check --fix. |
make typecheck | mypy. |
make check | lint + typecheck + test. |
Estructura del repositorio:
opik-mcp/
├── src/opik_mcp/ ← server, tools, ask_ollie, analytics
├── tests/ ← pytest suites
├── scripts/ ← live-BE smoke + MCP-session smoke
├── legacy/typescript/ ← deprecated v2 TS server
├── pyproject.toml
└── Makefile
Obtener ayuda
- Abrir un issue para errores y solicitudes de funciones
- Documentación de Opik para documentación de SDK / backend
- Slack de la comunidad Comet para preguntas
¿Actualizando desde v2? El servidor TypeScript heredado todavía se publica en npm como
opik-mcp@^2(npx -y opik-mcp); el código fuente se conserva enlegacy/typescript/. Consultalegacy/typescript/DEPRECATED.mdpara la política de soporte.
Licencia
Apache-2.0.