evals-mcp-server について
evals-mcp-serverは、モデル評価セット向けの評価レコードを作成、検証、出力するツールです。各レコードに独自の採点器を持たせ、正解例、負例、独立検証の確認を通過したものだけを提出できます。
主な機能
- 01タスク種別ごとのスキーマ確認
- 02評価ドラフトの作成と項目単位の修正
- 03候補回答に対する採点器の実行
- 04正解例と負例による提出判定
- 05状態・分野・タスク・タグでの絞り込み
- 06JSONL、CSV、Inspect AI、lm-evalへの出力
活用シーン
- 01実行可能な採点器付き評価レコードの作成
- 02一貫性チェックに失敗したドラフトの修正
- 03正例と負例を用いたレコードの確認
- 04提出済みレコードから評価データを生成
MCP 対応
MCP サーバーとして、評価レコードの作成、検証、管理、出力を行う9個のツールと1個のリソースを提供します。STDIOとStreamable HTTPに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @cyanheads/evals-mcp-serverEVALS_DATA_DIRRoot folder for record JSON. The store manages drafts/, submitted/, and exports/ subdirs under it.EVALS_REQUIRE_CONFIRMATIONWhen 'true', evals_submit_draft requests human confirmation before finalizing.EVALS_DEFAULT_LICENSEDefault metadata.license applied when a draft omits one.EVALS_CAPTURE_DIRDirectory of framework-written tool-call captures; when set, captures EvalsIDs resolve to full dumps.MCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').MCP_TRANSPORT_TYPESelects the HTTP transport.MCP_HTTP_HOSTThe hostname for the HTTP server.MCP_HTTP_PORTThe port to run the HTTP server on.MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.MCP_AUTH_MODEシークレットAuthentication mode to use: 'none', 'jwt', or 'oauth'.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
9掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| task_type | enum | はい | eval のタスクタイプです。numeric:数値または式の回答、exact_answer:正規化された文字列、set_answer:順序なしまたは順序付きの集合、mcq:選択式(choices が必要)、regex_answer:パターンマッチ、json_answer:構造化値、free_response:ルーブリックで採点する文章(llm_rubric 採点器が必要)。numeric | exact_answer | set_answer | mcq | regex_answer | json_answer | free_response |
詳細
@cyanheads/evals-mcp-server
サーバー側で強制される採点器を使い、下書き → レビュー → 修正 → 提出のサイクルを通じて、検証可能な評価レコードを作成します。MCP 経由で JSONL/CSV/Inspect/lm-eval にコンパイルできます。STDIO または Streamable HTTP に対応しています。
概要
サーバー側で強制される採点器を使い、検証可能な評価レコードを作成します。実行可能な採点器を備えたレコードの下書きを作成し、フィールドごとに修正してから、正解例が合格し、否定例が不合格となり、独立したチェックも一致することを必須とするゲートを通じて提出します。JSONL、CSV、Inspect AI、または lm-evaluation-harness にエクスポートできます。
ツール
| ツール | 説明 |
|---|---|
evals_describe_schema | タスクタイプに必要なフィールドと任意のフィールド、および採点器のオプションを返します。下書きの作成前に呼び出してください。 |
evals_create_draft | 独自の採点器を備えた評価レコードの下書きを作成します。解析済みレコード、レビュープロトコル、検証用サブエージェントのプロンプトを返します。 |
evals_get_record | 下書きまたは提出済みレコードを ID で読み取ります。ID は提出後も変わりません。 |
evals_revise_draft | ドット区切りのパスを指定し、set/append/unset のパッチを下書きに適用します。自己整合性チェックが再実行されます。 |
evals_discard_draft | ID で下書きレコードを削除します。下書きのみが対象です。 |
evals_run_check | 保存済みレコードとは独立して、採点器の仕様を候補回答に対して実行し、候補ごとの PASS/REJECT を取得します。 |
evals_submit_draft | 提出可能性ゲートを通じて下書きを確定し、凍結します。 |
evals_list_records | ステータス、ドメイン、タスクタイプ、またはタグでレコードを参照・絞り込みます。レコードごとに簡潔な概要を返します。 |
evals_export_records | 提出済みレコードを JSONL、CSV、Inspect AI、または lm-evaluation-harness にコンパイルし、成果物を exports/ に書き込みます。 |
リソース
| リソース | 説明 |
|---|---|
eval://record/{id} | idで指定した単一の下書きまたは提出済みレコードです。リソース対応クライアント向けに、evals_get_record が返すものと同じペイロードを返します。 |
すべてのレコードデータには、ツール経由でもアクセスできます。単一のレコードには evals_get_record、一覧の閲覧には evals_list_records を使用します。このリソースは、リソースに対応したクライアント向けの便利なミラーであり、アクセス経路ではありません。
機能リファレンス
evals_describe_schema tool
task_typeにnumeric、exact_answer、set_answer、mcq、regex_answer、json_answer、またはfree_responseを指定します。- 静的スキーマから、正解データの形式、採点器の種類、必須/任意フィールド、作成時の注意事項を返します。
mcqではchoicesが必須で、free_responseではllm_rubricが必須です。
evals_create_draft tool
- 採点器と識別用ケースを含むレコードを受け取ります。また、任意で
verificationとcaptures(EvalsIDs)を指定できます。mcqではchoicesが必須で、free_responseではllm_rubricが必須です。 - 採点器の実行後、レコードを
draftとして保存し、正規化されたレコード、レビュー用プロトコル、検証サブエージェント向けプロンプト、提出に必要な残りの項目を返します。正解データが採点器に合格しない下書きも保存されます。 - 型付きエラー:
grader_unexecutable、task_type_constraint、mcq_choice_mismatch。
evals_get_record tool
idで指定した下書きまたは提出済みレコードを読み取ります。提出後もidは変わりません。- 採点器全体、識別用ケース、検証エビデンスを返します。
not_foundが返された場合は、evals_list_recordsを参照してください。
evals_revise_draft tool
- ドット区切りのパスを指定して、下書きに
set、append、unsetを適用します。task_typeとサーバー管理フィールドは変更できません。また、配列は全体を置き換えるか追加する必要があり、インデックスを指定した編集はできません。 - 書き込み前にレコードと採点器を再検証し、レコードと
changedエントリー(op、path、before、after)を返します。不明なパスがある場合は、パッチ全体が拒否されます。 - 型付きエラー:
not_found、提出済みIDに対するrecord_frozen、invalid_patch_path、grader_unexecutable、task_type_constraint、mcq_choice_mismatch。
evals_discard_draft tool
draft_idで指定した下書きを削除し、discarded: trueを返します。- 提出済みレコードの場合は
record_frozenが返され、存在しないIDまたはすでに破棄されたIDの場合はnot_foundが返されます。
evals_run_check tool
- 保存済みレコードを使わずに、1つ以上の
candidatesに対して採点器を実行します。exact_matchではgoldを指定しますが、numericやmcqなどのターゲット埋め込み型では無視されます。 - PASS/REJECT、
detail、各候補の解決済み参照resolvedを返します。ここではllm_rubricを実行できません。 - 数値採点で受け付けるのは有限の実数値のみです。単位付き、複素数、非有限値、スカラー以外の候補は拒否されます。
unitsは説明用のみです。 - 型付きエラー:
grader_unexecutable、mcq_choice_mismatch。
evals_submit_draft tool
draft_idで指定した下書きを確定します。正解データがPASSし、1件以上の負例がREJECTEDとなり、非相関の検証結果が一致する必要があります。また、capturesとEVALS_CAPTURE_DIRの整合性を確認し、重複するcontent_hashを拒否します。confirmまたはEVALS_REQUIRE_CONFIRMATIONによって確認を求める場合があります。- 成功すると、
submitted_atとchecksumを付与してレコードを凍結し、status: submittedを返します。拒否された場合、下書きはそのまま残ります。free_responseのレコードは検証のみに依存し、server_verified: falseが設定されます。 - 型付きエラー:
not_found、record_frozen、verification_incomplete、grader_failed_on_gold、verification_disagrees_with_gold、missing_negative_case、negative_case_passed、duplicate、decorrelation_violation、capture_unresolved、submit_declined。
evals_list_records ツール
status(draft/submitted)、domain、task_type、またはtagで絞り込みます。limitは正の整数で、デフォルトは 50 です。- 要約(id、status、task_type、domain、tags、timestamps)を新しい順に返し、
shown、cap、totalCount、truncatedも含みます。
evals_export_records ツール
submittedレコードを、必要に応じてdomain、task_type、またはtagで絞り込み、jsonl(損失なし)、csv(要約のため損失あり)、inspect(Inspect AI)、またはlm-eval(lm-evaluation-harness)形式でエクスポートします。exports/以下に書き込み、パス、レコード数、バイトサイズ、プレビューを返します。
eval://record/{id} リソース
evals_list_recordsまたはドラフト/送信の応答からidを取得します。evals_get_recordのペイロードをapplication/jsonとして返します。一致するレコードがない場合はnot_foundを返します。
機能
@cyanheads/mcp-ts-core を基盤としており、stdio および Streamable HTTP トランスポート、切り替え可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングを備えた構造化ログを提供します。
評価の作成:
draft → review → surgical-revise → submitのループでは、サーバーがレコードを保存するとともに、各レコード独自の採点器を実行し、要件を満たさないものを却下します- 7 種類のタスク:
numeric、exact_answer、set_answer、mcq、regex_answer、json_answer、free_response - 各レコードとともにシリアライズされる採点器。決定的な種類(math.js を使う
numeric、exact_match、set_match、regex、mcq、json_match)はサーバー側で実行され、llm_rubricは記録された独立検証に依存します - 送信ゲート:正解が自身の採点器に合格し、1 件以上の負例が却下され、記録された無相関の検証結果が正解と一致する必要があります
EVALS_DATA_DIR以下のプレーンな JSON ファイル。ドラフト、送信済みレコード、エクスポートは別々に保存されます
エージェントに適した出力:
evals_create_draftとevals_revise_draftは、解析済みレコード、フィールドごとのレビュープロトコル、すぐに貼り付けて使える検証サブエージェント用プロンプトを返します- ドラフトと改訂の応答では、各正例および負例について、合格/却下の結果を報告します
evals_list_recordsは、上限に達した場合にshown/cap/ 合計件数を報告します- 送信ゲートが失敗すると、型付きの
reasonと復旧のヒントが返されます
はじめに
以下を MCP クライアントの設定ファイルに追加してください。EVALS_DATA_DIR には書き込み可能なフォルダーを設定してください。サーバーはその中に drafts/、submitted/、exports/ を管理します。
{
"mcpServers": {
"evals-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/evals-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"EVALS_DATA_DIR": "/absolute/path/to/evals-data"
}
}
}
}
または npx を使う場合(Bun は不要):
{
"mcpServers": {
"evals-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/evals-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"EVALS_DATA_DIR": "/absolute/path/to/evals-data"
}
}
}
}
または Docker を使う場合:
{
"mcpServers": {
"evals-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-v", "evals-data:/usr/src/app/evals-data",
"ghcr.io/cyanheads/evals-mcp-server:latest"
]
}
}
}
Streamable HTTP を使う場合は、トランスポートを設定してサーバーを起動します:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 EVALS_DATA_DIR=./evals-data bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24 以降)。
EVALS_DATA_DIR用の書き込み可能なディレクトリー。外部 API キーは必要ありません。
インストール
- リポジトリーをクローンします:
git clone https://github.com/cyanheads/evals-mcp-server.git
- ディレクトリーに移動します:
cd evals-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env and set EVALS_DATA_DIR
設定
すべてのサーバー設定は、起動時に src/config/server-config.ts の Zod スキーマで検証されます。
| 変数 | 説明 | デフォルト |
|---|---|---|
EVALS_DATA_DIR | レコード JSON のルートフォルダーです。ストアはその下に drafts/、submitted/、exports/ を管理します。 | ./evals-data |
EVALS_REQUIRE_CONFIRMATION | true の場合、evals_submit_draft は確定前に複数ラウンドの入力を通じて人間の確認を求めます。 | false |
EVALS_DEFAULT_LICENSE | ドラフトにライセンスが指定されていない場合に適用されるデフォルトの metadata.license です(例:CC-BY-4.0)。 | — |
EVALS_CAPTURE_DIR | フレームワークが書き込むツール呼び出しキャプチャのディレクトリです。設定すると、captures の EvalsID は完全なダンプを参照します。 | — |
MCP_TRANSPORT_TYPE | トランスポートです。stdio または http を指定します。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_SESSION_MODE | HTTP セッションモードです。auto、stateful、または stateless を指定します。送信の確認にはライブセッションが必要なため、stateless は拒否されます。 | stateful |
MCP_AUTH_MODE | 認証モードです。none、jwt、または oauth を指定します。 | none |
MCP_LOG_LEVEL | ログレベルです(RFC 5424)。 | info |
OTEL_ENABLED | OpenTelemetry instrumentation を有効にします。 | false |
オプションの上書き設定の全一覧については、.env.example を参照してください。
送信確認は 10 分後に期限切れとなり、ドラフトが変更された場合は再度確認が必要です。複数のインスタンスを実行する場合は、共有ストレージ(STORAGE_PROVIDER_TYPE=filesystem と共有の STORAGE_FILESYSTEM_PATH、supabase、または cloudflare-d1。cloudflare-kv は不可)を使用し、各インスタンスで同じ MCP_REQUEST_STATE_KEY(32 バイト以上)を設定してください。
サーバーの実行
ローカル開発
-
ビルドして実行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t evals-mcp-server .
docker run --rm -e MCP_TRANSPORT_TYPE=stdio -v evals-data:/usr/src/app/evals-data evals-mcp-server
Dockerfile のデフォルトは HTTP トランスポート、stateful セッションモード、および /var/log/evals-mcp-server へのログ出力です。レコードストレージは、ランタイムユーザーが所有するデフォルトディレクトリ /usr/src/app/evals-data にマウントしてください。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツールとリソースを登録し、record-store サービスと exporter サービスを初期化します。 |
src/config | サーバー固有の環境変数を Zod で解析および検証します。 |
src/mcp-server/tools | ツールの定義(*.tool.ts)です。 |
src/mcp-server/resources | リソースの定義(*.resource.ts)です。 |
src/services/eval-record | レコードスキーマ、ドラフトビルダー、および送信ゲートです。 |
src/services/grader | 決定論的な grader DSL の実行と、コミット可能性のチェックです。 |
src/services/record-store | ディスク上の JSON レコードの CRUD、draft から submitted への移動、およびエクスポートの書き込みを行います。 |
src/services/exporter | 送信済みレコードを JSONL/CSV/Inspect/lm-eval にコンパイルします。 |
tests/ | src/ に対応するユニットテストと統合テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md/AGENTS.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールロジック内で
try/catchを使わないでください。 - リクエスト単位のログには
ctx.logを使用してください。レコードはctx.stateではなく、record-storeサービス経由でディスクに永続化します。 - 新しいツールとリソースは、
src/index.tsのcreateApp()配列に登録してください。 - サーバーを信頼できる情報源としてください。入力を検証し、grader を必須のゲートとして実行し、アサーションだけでレコードを受け入れないでください。
コントリビューション
Issue の報告を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。