Comet Opik MCP Server

公式

Opikのログ、トレース、プロンプト、その他LLMからのテレメトリデータを自然言語でクエリし分析できます。

ドキュメント

opik-mcp

古い npx opik-mcp から移行しますか? TypeScript サーバーは非推奨であり、 2026-11-15 にサポート終了となります。MCP クライアント設定で npx -y opik-mcpuvx opik-mcp@latest に 置き換えてください。完全なガイド: legacy/typescript/MIGRATION.md

Opik + Ollie 用 Model Context Protocol サーバー。 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 ワークスペースから次の 2 つが必要です:

  • 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

1 つのコマンドでサーバーを追加します:

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 が接続済みとして表示されるはずです。 次に、チャットで次のように尋ねます: "list my Opik projects" — Claude が list ツールを呼び出し、ワークスペースのプロジェクトが表示されます。

Cursor

~/.cursor/mcp.json (グローバル) または .cursor/mcp.json (プロジェクト) を編集するか、 Cmd+Shift+J → Features → Model Context Protocol を開きます:

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

Cursor をリロードします。MCP パネルの opik-mcp の横にある緑色のドットが接続を確認します。 チャットで次のように尋ねます: "list my Opik projects"

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 を表示します。チャットで次のように尋ねます: "list my Opik projects"

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="" を設定すると、テレメトリイベントの cloud-Comet ソースラベルが オプトアウトされます。


ツール

opik-mcp は、結果指向の小さなサーフェスを公開します — 完全なライフサイクル (読み取り → 注釈付け → キュレーション → 作成 → 反復) をカバーする 6 つのツールです。

ツール目的
readID / 名前 / opik:// URI によるユニバーサル読み取り
listオプションの名前フィルター + ページネーション付きユニバーサルリスト
ask_ollieOpik 製品内アシスタントによる調査 / 合成
writeユニバーサル書き込み — トレース/スパンのログ、スコア、コメント、プロンプトの保存、テストスイートと実験の管理
schema書き込み操作スキーマの検査 (LLM が有効なペイロードを構築するために使用)
run_experimentOllie を介した評価実験のエンドツーエンド実行

read

あらゆる「X を見せて」という質問に対応する 1 つのツール。entity_typeid (UUID、または名前付け可能なタイプの場合は名前) または完全な opik:// URI を受け取ります。複合読み取り (traceprompt) は子をインライン化するため、1 回の呼び出しで全体像が返されます。

サポートされているエンティティ: projecttracespantest_suiteexperimentprompt。名前ベースの検索は projectexperimentprompttest_suite で利用できます (低速 — 2 回の API 呼び出し — で、複数の一致を返す可能性があります)。

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

list

オプションの名前フィルターとページネーションを使用してコレクションを参照します。プロジェクトスコープの タイプ (tracetest_suite_itemprompt_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テストスイートにアイテムをアップサートします (常にエンベロープ形状)。
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 スコープ、 および検証済みの例を 1 つ返します。純粋な検索であり、バックエンド呼び出しはありません。

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 が、ユーザーが別のプロジェクトを指定しない限り、すべてのツール呼び出しでこれを project_name として渡すように LLM に指示します。

サーバー / トランスポート

変数デフォルト備考
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-discovery プローブのプロキシターゲットとして使用されます。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 機能をアドバタイズするホストでは、ユーザーに yes/no プロンプトが表示されます。より単純なホストでは、リクエストは手動で再発行できる型付きエラーとして表示されます。
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 イベントごとに1回、さらに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 Pod のコールドスタートが OPIK_MCP_POD_READY_TIMEOUT_S を超えました。再試行してください。通常、2回目の呼び出しはウォーム状態の Pod にヒットします。

セルフホスト 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 サーバーは引き続き opik-mcp@^2 (npx -y opik-mcp) として npm で提供されており、ソースは legacy/typescript/ に保持されています。サポートポリシーについては legacy/typescript/DEPRECATED.md を参照してください。


ライセンス

Apache-2.0。