Comet Opik MCP Server

공식

Opik 로그, 트레이스, 프롬프트 및 LLM의 기타 모든 텔레메트리 데이터를 자연어로 쿼리하고 분석합니다.

문서

opik-mcp

이전 npx opik-mcp에서 마이그레이션하시나요? TypeScript 서버는 더 이상 사용되지 않으며 2026-11-15에 종료됩니다. MCP 클라이언트 구성에서 npx -y opik-mcp를 **uvx opik-mcp@latest**로 교체하세요. 전체 가이드: legacy/typescript/MIGRATION.md.

Opik + Ollie를 위한 모델 컨텍스트 프로토콜 서버. AI 호스트(Claude Code, Cursor, VS Code Copilot, MCP Inspector)를 Opik 워크스페이스에 직접 연결하여 — 트레이스 읽기, 점수 기록, 프롬프트 버전 저장, Ollie에 조사 질문하기 등을 모두 채팅에서 수행할 수 있습니다.

이미 Opik을 실행 중이고 코딩에 사용하는 동일한 AI 어시스턴트에서 이를 구동하려는 LLM 엔지니어를 위해 제작되었습니다.

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

설치

opik-mcp은 Python 패키지입니다(Python 3.13+ 필요). 권장 실행 방법은 uvx이며, 이는 필요 시 최신 게시 버전을 가져와 실행합니다 — 전역 설치나 virtualenv 관리가 필요 없습니다.

uv를 한 번 설치하세요:

curl -LsSf https://astral.sh/uv/install.sh | sh   # macOS / Linux
# or: brew install uv

Opik 워크스페이스에서 다음 두 가지가 필요합니다:

  • OPIK_API_KEYcomet.com/api/my/settings/에서 가져오세요.
  • OPIK_WORKSPACE — 워크스페이스 이름(URL에 표시되는 소문자). 예: https://www.comet.com/acme-ai/...OPIK_WORKSPACE=acme-ai. 선택 사항 — 기본값은 default(Opik SDK 규칙)이며, 로컬/OSS 설치에 적합합니다. 명명된 워크스페이스를 사용하는 클라우드 사용자는 설정해야 합니다. COMET_WORKSPACE은 더 이상 사용되지 않는 별칭으로 허용됩니다.

사전 출시 참고: opik-mcp(Python)은 아직 PyPI에 게시되지 않았습니다. 첫 PyPI 출시가 이루어질 때까지 아래 스니펫의 uvx opik-mcp을 다음으로 교체하세요: uvx --from git+https://github.com/comet-ml/opik-mcp.git opik-mcp

OPIK_WORKSPACE은 선택 사항입니다. 아래 스니펫에서 OPIK_WORKSPACE 줄/키를 생략하면 서버는 default 워크스페이스를 사용합니다(로컬/OSS 설치에 적합). 명명된 클라우드 워크스페이스에 연결하는 경우에만 설정하세요.

Claude Code

하나의 명령으로 서버를 추가하세요:

claude mcp add --transport stdio opik-mcp \
  --env OPIK_API_KEY=<your-key> \
  --env OPIK_WORKSPACE=<your-workspace> \
  -- uvx opik-mcp

또는 ~/.claude.json을 직접 편집하세요:

{
  "mcpServers": {
    "opik-mcp": {
      "type": "stdio",
      "command": "uvx",
      "args": ["opik-mcp"],
      "env": {
        "OPIK_API_KEY": "<your-key>",
        "OPIK_WORKSPACE": "<your-workspace>"
      }
    }
  }
}

Claude Code를 다시 시작하세요. /mcp로 확인 — opik-mcp이 연결된 것으로 나타나야 합니다. 그런 다음 채팅에서 **"내 Opik 프로젝트 나열"**이라고 요청하세요 — Claude가 list 도구를 호출하고 워크스페이스의 프로젝트를 볼 수 있습니다.

Cursor

~/.cursor/mcp.json(전역) 또는 .cursor/mcp.json(프로젝트)을 편집하거나, Cmd+Shift+J → 기능 → 모델 컨텍스트 프로토콜을 여세요:

{
  "mcpServers": {
    "opik-mcp": {
      "type": "stdio",
      "command": "uvx",
      "args": ["opik-mcp"],
      "env": {
        "OPIK_API_KEY": "<your-key>",
        "OPIK_WORKSPACE": "<your-workspace>"
      }
    }
  }
}

Cursor를 다시 로드하세요. MCP 패널에서 opik-mcp 옆의 녹색 점이 연결을 확인해 줍니다. 채팅에서 **"내 Opik 프로젝트 나열"**이라고 요청하세요.

Cursor 60초 시간 초과. Cursor는 진행 알림에서 재설정되지 않는 하드 도구 호출 시간 초과를 적용합니다. 긴 ask_ollie 턴은 Cursor에서 실패합니다. 알려진 호스트 제한을 참조하세요.

VS Code Copilot

워크스페이스(또는 사용자 설정 JSON)의 .vscode/mcp.json:

{
  "servers": {
    "opik-mcp": {
      "type": "stdio",
      "command": "uvx",
      "args": ["opik-mcp"],
      "env": {
        "OPIK_API_KEY": "<your-key>",
        "OPIK_WORKSPACE": "<your-workspace>"
      }
    }
  }
}

창을 다시 로드하세요. 서버에 연결 가능하면 Copilot Chat MCP 표시기에 opik-mcp이 나타납니다. 채팅에서 **"내 Opik 프로젝트 나열"**이라고 요청하세요.

MCP Inspector (수동 테스트)

OPIK_API_KEY=<your-key> OPIK_WORKSPACE=<your-workspace> \
  npx @modelcontextprotocol/inspector uvx opik-mcp

자체 호스팅 Opik

호스트 구성의 동일한 env 블록에 COMET_URL_OVERRIDE(및 Opik이 기본 경로가 아닌 곳에 있는 경우 OPIK_URL)을 추가하세요:

{
  "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_ollierun_experiment은 Comet Cloud에서만 사용 가능합니다 — 자체 호스팅에서는 이러한 호출이 디스패치 시 실패하므로 read / list / write을 직접 사용하세요. OPIK_MCP_ANALYTICS_SOURCE=""을 설정하면 원격 분석 이벤트에서 클라우드-Comet 소스 레이블이 설치에서 제외됩니다.


도구

opik-mcp는 전체 수명 주기(읽기 → 주석 달기 → 큐레이션 → 작성 → 반복)를 다루는 작고 결과 지향적인 표면 — 여섯 가지 도구를 노출합니다.

도구목적
readID / 이름 / opik:// URI로 범용 읽기
list선택적 이름 필터 + 페이지 매김을 통한 범용 목록
ask_ollieOpik 제품 내 어시스턴트를 통한 조사 / 합성
write범용 쓰기 — 트레이스/스팬 기록, 점수, 댓글, 프롬프트 저장, 테스트 스위트 및 실험 관리
schema쓰기 작업 스키마 검사(LLM이 유효한 페이로드를 구성하는 데 사용)
run_experimentOllie를 통해 평가 실험을 엔드 투 엔드로 실행

read

"X 보여줘" 질문을 위한 하나의 도구. entity_typeid (UUID 또는 이름 지정 가능 유형의 경우 이름) 또는 전체 opik:// URI를 사용합니다. 복합 읽기 (trace, prompt)는 자식을 인라인으로 포함하므로 단일 호출로 전체 그림을 반환합니다.

지원 엔티티: project, trace, span, test_suite, experiment, prompt. 이름 기반 조회는 project, experiment, prompt, test_suite에 사용 가능합니다(더 느림 — 두 번의 API 호출 — 여러 일치 항목을 반환할 수 있음).

read(entity_type="trace", id="7f2e3c8a-…")
read(entity_type="project", id="demo")          # name lookup
read(entity_type="trace", id="opik://traces/7f2e3c8a-…")

list

선택적 이름 필터와 페이지 매김으로 컬렉션을 탐색합니다. 프로젝트 범위 유형(trace, test_suite_item, prompt_version)은 부모 UUID가 필요합니다.

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

조사 질문, 엔티티 간 합성 또는 Opik 도메인 전문 지식이 필요한 모든 작업에 사용합니다. Ollie는 워크스페이스에 대한 직접 읽기 액세스 권한이 있으며 요청 시 중간 스트림에서 쓰기(점수, 댓글, 테스트 스위트 항목, 프롬프트 버전)를 실행할 수 있습니다.

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.")

어시스턴트의 최종 텍스트와 thread_id을 반환합니다. 후속 질문에 이를 다시 전달하여 컨텍스트를 유지하세요 — Ollie는 스레드 간 메모리가 없습니다.

YOLO 모드(기본값). Ollie가 중간 스트림에서 수행하는 쓰기는 작업별 확인 없이 실행됩니다. 각 자동 승인은 opik_mcp.audit Python 로거에 JSON 감사 행으로 기록됩니다. 대신 확인을 요구하려면 OPIK_MCP_AUTO_APPROVE=disabled을 설정하세요 — 그러면 Ollie의 확인 요청이 수동으로 다시 실행할 수 있는 유형 오류로 표시됩니다.

Comet Cloud에서만 사용 가능합니다.

write

범용 쓰기 디스패처. operation + data을 전달하면 디스패처가 페이로드를 검증하고, 올바른 REST 동사를 적용하며, 백엔드 응답을 반환합니다.

작업:

작업수행 내용
trace.create단일 트레이스(또는 배치)를 기록합니다. 스팬 / 점수 / 댓글의 부모.
trace.update기존 트레이스를 완료하거나 수정합니다.
span.create기존 트레이스에 스팬(또는 배치)을 기록합니다.
score.create트레이스, 스팬 또는 스레드에 숫자 피드백 점수를 첨부합니다.
comment.create트레이스, 스팬 또는 스레드에 자유 텍스트 댓글을 첨부합니다.
prompt_version.save새 프롬프트 버전을 저장합니다(없는 경우 이름으로 프롬프트 생성).
test_suite.create평가 테스트 스위트를 생성합니다.
test_suite_item.upsert테스트 스위트에 항목을 Upsert합니다(항상 엔벨로프 형태).
experiment.create테스트 스위트로 범위가 지정된 실험을 생성합니다.
experiment_item.create실험에 트레이스 + dataset_item 행을 첨부합니다.
write(operation="score.create", data={
  "target": "trace",
  "target_id": "7f2e3c8a-…",
  "name": "helpfulness",
  "value": 0.9,
  "reason": "great recovery"
})

schema

호출하기 전에 쓰기 작업의 정확한 JSON 형태와 필수 필드를 검사합니다 — data이 어떻게 생겼는지 확실하지 않을 때 유용합니다. 스키마, OAuth 범위, 검증된 예제 하나를 반환합니다. 순수 조회이며 백엔드 호출은 없습니다.

schema(operation="score.create")
schema(operation="prompt_version.save")

run_experiment

Ollie를 통해 평가 실험을 엔드 투 엔드로 실행합니다. Opik의 실험 형태(프롬프트, 테스트 스위트, 스코어러)를 반영하는 단일 experiment_config dict를 사용합니다. Ollie가 실행을 수행하고 결과를 Opik 실험으로 다시 기록합니다.

run_experiment(experiment_config={
  "test_suite_name": "qa-eval-v2",
  "prompt_name": "welcome-msg",
  # … see `schema(operation="experiment.create")` for the full shape
})

Comet Cloud에서만 사용 가능합니다.


구성

모든 설정은 환경 변수입니다. 필수 항목은 굵게 표시됩니다.

ID / 엔드포인트

변수기본값참고
OPIK_API_KEYask_ollie 및 모든 인증된 읽기/쓰기에 필요합니다.
OPIK_WORKSPACEdefault워크스페이스 이름. 선택 사항 — default(Opik SDK 규칙)으로 폴백합니다. 명명된 워크스페이스를 사용하는 클라우드 사용자는 설정해야 합니다.
COMET_WORKSPACEOPIK_WORKSPACE의 더 이상 사용되지 않는 별칭(하위 호환). 둘 다 설정된 경우 OPIK_WORKSPACE이 우선합니다.
COMET_WORKSPACE_ID선택적 워크스페이스 UUID. 설정 시 분석 이벤트에 포함되어 BI가 (변경 가능한) 워크스페이스 이름 대신 안정적인 ID로 조인할 수 있습니다.
COMET_URL_OVERRIDEhttps://www.comet.com자체 호스팅 Comet 호스트로 설정하거나 스테이징의 경우 https://dev.comet.com로 설정합니다.
OPIK_URLCOMET_URL_OVERRIDE + /opik/api에서 파생Opik이 Comet UI와 다른 호스트/경로에 있는 경우에만 재정의합니다.
OPIK_DEFAULT_PROJECT_NAME설정 안 됨설정 시 세션별 instructions blob이 LLM에 사용자가 다른 프로젝트를 지정하지 않는 한 모든 도구 호출에서 이를 project_name로 전달하도록 지시합니다.

서버 / 전송

변수기본값참고
OPIK_MCP_TRANSPORTstdio호스트 실행의 경우 stdio, 포트에서 수신 대기하려면 streamable-http.
OPIK_MCP_HOST127.0.0.1uvicorn 바인드 호스트(streamable-http 전용).
OPIK_MCP_PORT8080uvicorn 바인드 포트(streamable-http 전용).
OPIK_MCP_RELOADfalseuvicorn --reload를 활성화하려면 true(개발 전용).
OPIK_MCP_AS_URL설정 안 됨OAuth 인증 서버 URL, /.well-known/oauth-protected-resource(RFC 9728)에 광고되며 AS-디스커버리 프로브의 프록시 대상으로 사용됩니다. MCP 호스트가 HTTP를 통해 OAuth 댄스를 부트스트랩하는 데 필요합니다.
OPIK_MCP_RESOURCE_URI설정 안 됨이 서버의 표준 공개 URI, 보호된 리소스 메타데이터에 resource으로 광고되며 WWW-Authenticate 힌트를 파생하는 데 사용됩니다.
OPIK_MCP_LOG_LEVELINFOstderr 로거 임계값.

전송 선택

opik-mcp는 HTTP 전송에서 로컬 자격 증명 유효성 검사를 수행하지 않습니다: 올바른 형식의 Authorization: Bearer …(Opik API 키 또는 opik_mcp_at_… OAuth 액세스 토큰)은 그대로 opik-backend로 전달되며, 이는 단일 인증 시행 지점입니다. 배포 형태에 따라 전송을 선택하세요:

시나리오전송
MCP 클라이언트와 Opik이 동일한 머신에 있음(로컬 OSS 설치)stdio(권장 — 가장 간단, 포트 없음, OAuth 설정 없음)
로컬 MCP 클라이언트 → 원격 Opik(Comet 클라우드 / 자체 호스팅)OPIK_API_KEY를 사용한 stdio, 또는 OAuth를 사용한 HTTP(OPIK_MCP_AS_URL이 백엔드를 가리킴)
opik-backend와 동일한 에지 뒤에 호스팅된 opik-mcpHTTP — 베어러는 요청별로 백엔드에서 유효성이 검사됩니다

로컬 OSS 설치 참고: OSS 백엔드는 요청을 인증하지 않으므로 그 앞의 HTTP opik-mcp는 OSS REST API 자체만큼 개방적입니다. 공유 네트워크에서는 기본 127.0.0.1 바인드를 유지하고 stdio를 선호하세요.

Ollie / 긴 호출

변수기본값참고
OPIK_MCP_AUTO_APPROVEenabledOllie의 중간 스트림 쓰기가 진행되기 전에 작업별 승인을 요구하려면 disabled. MCP elicitation 기능을 광고하는 호스트에서는 사용자에게 예/아니요 프롬프트가 표시됩니다. 덜 똑똑한 호스트에서는 요청이 수동으로 다시 실행할 수 있는 유형 오류로 표시됩니다.
OPIK_MCP_ELICIT_TIMEOUT_SECONDS60Ollie의 중간 스트림 확인 프롬프트가 취소로 처리되기 전에 사용자를 기다릴 수 있는 시간. 0은 바인드를 비활성화합니다(디버그 전용).
OPIK_MCP_POD_READY_TIMEOUT_S120Ollie 포드 콜드 스타트 폴링 한도.
OPIK_MCP_POD_READY_INTERVAL_S2콜드 스타트 폴링 간격.
OPIK_MCP_HEARTBEAT_INTERVAL_S15.0워치독 주기 — 포드가 조용할 때 notifications/progress 틱을 내보내 호스트 시간 초과를 방지합니다.
OPIK_MCP_STREAM_IDLE_TIMEOUT_S300.0ask_ollie이 중단되기 전 포드 침묵에 대한 하드 상한. 0은 비활성화합니다(디버그 전용).

원격 분석

익명 사용 이벤트(이벤트 유형 + 타이밍만 — 쿼리 내용 없음). API 키의 SHA-256 다이제스트가 포함되어 지원팀이 계정을 찾을 수 있습니다. 원시 키는 프로세스를 떠나지 않습니다. 옵트아웃: OPIK_MCP_ANALYTICS_ENABLED=false.

변수기본값설명
OPIK_MCP_ANALYTICS_ENABLEDtrue모든 원격 측정을 비활성화하려면 false로 설정하세요.
OPIK_MCP_ANALYTICS_URLhttps://stats.comet.com/notify/event/스테이징용 재정의.
OPIK_MCP_ANALYTICS_ENVIRONMENTprod모든 이벤트에 태그 지정 (prod / staging / dev).
OPIK_MCP_ANALYTICS_SOURCEcomet.com수신자가 on_prem=False를 표시하는 데 사용합니다. 온프레미스 설치 시 "" 또는 자체 도메인으로 재정의해야 합니다.
OPIK_MCP_ANALYTICS_CONNECT_TIMEOUT_S5.0HTTP 연결 타임아웃.
OPIK_MCP_ANALYTICS_TOTAL_TIMEOUT_S10.0HTTP 총 요청 타임아웃.

알려진 호스트 제한 사항

MCP 사양에 따르면 호스트는 notifications/progress에서 도구 호출 타임아웃을 재설정할 수 있습니다. — opik-mcp는 Ollie SSE 이벤트당 하나씩, 그리고 15초 감시 하트비트를 내보냅니다. 실제 상황은 제각각입니다:

  • Claude Code — 문서화된 도구 호출 타임아웃이 없으며, 하트비트가 message_end까지 호출을 유지합니다. 권장됩니다.
  • Cursor — 60초의 하드 타임아웃이 있으며, 진행 상황에서 재설정되지 않습니다 (업스트림 버그). 긴 Ollie 실행은 실패합니다. ask_ollie 쿼리를 집중적으로 유지하세요.
  • MCP InspectorMAX_TOTAL_TIMEOUT가 총 지속 시간을 제한합니다(기본값 60초). 긴 작업의 경우 Inspector UI에서 값을 높이세요.

호출이 멈추면 OPIK_MCP_LOG_LEVEL=DEBUG를 설정하세요 — 하트비트 실패(일반적으로 호스트 연결 해제)는 opik_mcp.ask_ollie에 디버그 수준으로 기록됩니다.


문제 해결

OPIK_API_KEY is required to use ask_ollie — 변수가 서버 프로세스에 도달하지 않습니다. Claude Code / Cursor / VS Code에서 환경 변수는 셸이 아닌 MCP 서버 구성의 env 블록 내에서만 적용됩니다. 편집 후 호스트를 다시 시작하세요.

ask_ollie이 2분 후 "pod not ready"를 반환합니다 — Ollie 파드 콜드 스타트가 OPIK_MCP_POD_READY_TIMEOUT_S를 초과했습니다. 다시 시도하세요 — 두 번째 호출은 일반적으로 웜 파드에 도달합니다.

자체 호스팅 Opik에서 ask_ollie / run_experiment이 디스패치 오류로 실패합니다 — 이러한 도구는 Comet Cloud에서만 사용할 수 있습니다. 자체 호스팅에서는 read / list / write을 직접 사용하세요.

Cursor 호출이 60초에 타임아웃됩니다 — Cursor의 알려진 버그이며, opik-mcp 문제가 아닙니다. Ollie 쿼리를 줄이거나, 하드 제한이 없는 Claude Code에서 동일한 작업을 실행하세요.


개발

git clone [email protected]: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

일반적인 대상:

대상수행 작업
make installuv sync --extra dev
make runMCP 서버 실행(기본값 stdio).
make run-devDEBUG 로깅 + uvicorn --reload으로 실행.
make devmcp dev을 통해 실행(Inspector 개발 모드 래퍼).
make inspect실행 중인 서버에 대해 MCP Inspector 시작.
make testuv run pytest -q.
make test-livedev.comet.com에 대한 실시간 종단 간 테스트(OPIK_API_KEY + OPIK_WORKSPACE 설정).
make lintruff check + 형식 검사.
make formatruff format + ruff check --fix.
make typecheckmypy.
make checklint + typecheck + test.

저장소 레이아웃:

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

도움 받기


v2에서 업그레이드하시나요? 레거시 TypeScript 서버는 여전히 npm에 opik-mcp@^2 (npx -y opik-mcp)로 제공되며, 소스는 legacy/typescript/ 아래에 보존되어 있습니다. 지원 정책은 legacy/typescript/DEPRECATED.md를 참조하세요.


라이선스

Apache-2.0.