clef-mcp について
clef-mcpは、CloudflareのClef-Flash決定モデルをコーディングエージェントに提供するローカルMCPサーバーです。オフラインで動作し、型付きの質問を1回の推論でまとめて処理します。
主な機能
- 01選択・スコア・二択の型付き判定
- 02確率分布と信頼度の返却
- 031回あたり最大64問を処理
- 044種類のプロンプトと3つのリソース
- 05スクリプト・フック・デーモン向けCLI
活用シーン
- 01エージェントの次の行動を選択
- 02チケットの分類と振り分け
- 03インシデントの深刻度と影響を評価
- 04実行前に危険なコマンドを判定
MCP 対応
stdio経由でMCPクライアントに`clef_decide`ツール、4種類のプロンプト、3つの読み取り専用リソースを提供します。モデルはローカルで動作します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| model | string | いいえ | 使用するモデル ID(既定値:CLEF_MODEL の clef-flash)。 |
| state | any | はい | データとしてのタスク状態:判断に必要な事実(タスク、エラー、ログ、差分)を含む簡潔な文字列または JSON オブジェクトです。指示として扱われることはありません。シリアライズ後のサイズ上限:1 MB。モデルコンテキストは 16k トークンです。 |
| options | object | いいえ | 追加オプション。現在は temperature のみで、仕様上効果はありません。 |
| options.temperature | number | いいえ | 将来の互換性のために受け付けますが、効果はありません。Clef はサンプリングせず、1 回のフォワードパスでスコアを算出します。 |
| questions | object | はい | 質問 ID -> 型付き質問のマップです。1 回の呼び出しにつき最大 64 件の質問を指定できます。すべての質問は 1 回のフォワードパスでまとめてスコアリングされるため、関連する判断をここでまとめてください。 |
詳細
clef-mcp
AI コーディングエージェントの「反射神経」:文章ではなく、確率を伴う構造化された判断。
ローカルのMCPサーバーで、エージェント(Claude Code、Codex、Cursor、ZCode、…)が単一のツール clef_decide を通じてClef-Flashの意思決定モデル(9B、Cloudflare による Apache-2.0)を利用できます。state と型指定された質問を渡すと、1 回のフォワードパスで選択肢に対する確率分布が得られます。完全にローカルで、オフラインで動作し、トークンを消費しません。
クイックスタート
# 1. Detect hardware, download the model (~6 GB) + llama.cpp runtime, verify checksum + inference
npx clef-mcp install
# 2. Register the MCP server + agent skill in your clients (zcode, claude-code, codex, cursor)
npx clef-mcp setup
# 3. Run the MCP server (stdio)
npx clef-mcp
clef-mcp(ステップ 3)は何もダウンロードしません。モデルが見つからない場合、ツール呼び出しはヒント付きの構造化された MODEL_NOT_INSTALLED エラーを返します。ステップ 1 と 2 は npx clef-mcp install --setup でまとめて実行できます。
LLM にそのまま尋ねるのではだめですか?
| チャット LLM | clef_decide | |
|---|---|---|
| 出力 | 文章。解析が必要です | 厳密な JSON:選択肢ごとの確率 |
| 決定性 | 実行ごとに変わります | 1 回のフォワードパスで、サンプリングなし |
| レイテンシ(1 回の判断) | 生成に数秒 | ローカルで約 0.5 秒 |
| コンテキストコスト | 判断のたびに増加します | 固定の小さなスキーマ |
| プライバシー | プロバイダーによります | 100%デバイス上で処理され、オフラインでも動作 |
| キャリブレーション | 感覚頼み | 学習済み選択肢スコアに対する softmax |
最適な用途は、エージェントのループ内の判断ポイントです。次のアクション、ルーティング、分類、重大度、はい/いいえの判断などを、タスクごとに何十回も尋ねる場面です。
clef_decide ツール
{
"state": {
"task": "Fix failing tests",
"error": "TypeError: Cannot read properties of undefined"
},
"questions": {
"next_action": {
"type": "choice",
"instructions": "What should the coding agent do next?",
"criteria": {
"inspect": "Inspect the code and gather more information",
"modify": "Modify the code",
"test": "Run additional tests",
"ask_user": "Ask the user for clarification"
}
},
"confidence": {
"type": "score",
"instructions": "How confident are you in this decision?",
"criteria": ["very_low", "low", "medium", "high", "very_high"]
},
"is_outage": { "type": "noul", "instructions": "Is a service down?" }
}
}
| 型 | 条件 | 回答 |
|---|---|---|
choice | option id → description のマップ、または単純なリスト | 選択肢ごとの確率 |
score | 順序付きリスト(インデックス = スコア) | レベルごとの確率 |
noul | 任意の {"true": "...", "false": "..."} | {"true": p, "false": 1-p} |
応答は厳密に構造化され、文章は含まれません。各判断には、モデルが報告する confidence(ランタイムから送られる場合)に加えて、呼び出しのトークン usage が含まれます。
{
"model": "clef-flash",
"decisions": {
"next_action": { "answer": { "inspect": 0.72, "modify": 0.12, "test": 0.14, "ask_user": 0.02 }, "confidence": 0.83 },
"confidence": { "answer": { "very_low": 0.01, "low": 0.04, "medium": 0.18, "high": 0.61, "very_high": 0.16 }, "confidence": 0.61 },
"is_outage": { "answer": { "true": 0.9, "false": 0.1 } }
},
"usage": { "input_tokens": 228, "output_tokens": 0, "latency_ms": 512 }
}
破壊的な呼び出しやセキュリティに関わる呼び出しでは、分布が明確な場合に限り、argmax に基づいて実行してください。つまり、最上位の p が 0.8 以上で、confidence も高い場合です。
1 回の呼び出しで最大64 件の質問をまとめて処理できます。すべて 1 回のフォワードパスでスコア付けされます。state は厳密にデータとして扱われ、実行されることも、サーバーへの指示として解釈されることもありません。
プロンプトとリソース
サーバーには MCP のプロンプト(あらかじめ用意された、判断形式の質問)が 4 つ含まれています。クライアントは prompts/list を通じて一覧を取得します。
| プロンプト | 目的 |
|---|---|
incident-triage | 本番環境のインシデントに関するアクション、重大度、ユーザー影響の質問 |
next-action | コーディングエージェントが次に行うべきことと、その確信度 |
ticket-routing | メッセージをチームと緊急度に分類 |
security-review | 脆弱性の有無、リスク尺度、最初の緩和策 |
また、リソースが 3 つあります(読み取り専用で、モデルは不要です)。
| URI | 内容 |
|---|---|
clef-mcp://capabilities | ライブ JSON:モデル、ランタイム、制限、エラーコード |
clef-mcp://evals/schema | 評価ケースの記述方法 |
clef-mcp://evals/dataset | 同梱の 30 件のデータセット |
宣伝文句ではなく、実測値
Apple M4 Pro、Clef-Flash Q4_K_M(6 GB)、完全な MCP stdio 経路を通した単一リクエスト:
| シナリオ | レイテンシ |
|---|---|
| コールドスタート(モデルの読み込みを含む。セッションごとに 1 回) | 約 4.4 秒 |
| 1 件の質問 | 約 0.5 秒 |
| 10 件の質問、1 回の呼び出し | 約 2.9 秒 |
| 64 件の質問、1 回の呼び出し | 約 18.6 秒 |
品質ゲート:30 ケースの評価データセット(コーディング/セキュリティ/分類/ルーティング/はい・いいえ)で、実モデルの**合格率は 86.7%**です。ご自身で実行できます:clef-mcp evals
MCP クライアントに登録する
Claude Code
claude mcp add clef-mcp -- clef-mcp
# or, without a global install:
claude mcp add clef-mcp -- npx -y clef-mcp
Codex — ~/.codex/config.toml
[mcp_servers.clef-mcp]
command = "clef-mcp"
args = []
Cursor — .cursor/mcp.json
{
"mcpServers": {
"clef-mcp": { "command": "clef-mcp", "args": [] }
}
}
ZCode — ~/.zcode/cli/config.json(ユーザースコープ、自動接続)
{
"mcp": {
"servers": {
"clef-mcp": { "command": "clef-mcp", "args": [], "type": "stdio" }
}
}
}
すぐに使えるスニペット:examples/。
スクリプトとフック
MCP クライアントは不要です。フック、CI ジョブ、シェルスクリプトから同じモデルをワンショットで呼び出せます:
# Full document on stdin
echo '{"state": "checkout 500s after deploy", "questions": {"is_outage": {"type": "noul", "instructions": "Is a service down?"}}}' \
| clef-mcp decide
# Or split across files
clef-mcp decide --questions questions.json --state state.json
stdout には厳密な JSON 形式の結果が出力されます(confidence と usage を含み、MCP ツールと同じ形式です)。エラーは構造化 JSON と終了コードで stderr に出力されます:2 は入力が無効、3 はモデルが未インストール、4 はランタイムが見つからない場合です。decide が何かをダウンロードすることはありません。
decide を通常どおり呼び出すたびにコールドスタートになります(モデルの読み込みを含めて数秒)。ゲートやトリアージには十分です。繰り返し呼び出す場合は、clef-mcp daemon を一度起動してください。モデルを CLEF_HOME 内のアクセス権を制限した Unix ソケット上でウォーム状態に保ちます(TCP ポートは使用せず、CLEF_DAEMON_IDLE 秒後にアンロードします。既定値は 600 秒です)。clef-mcp decide --daemon は 1 秒未満で応答し、デーモンが起動していない場合はコールド実行にフォールバックします。PreToolUse ガードと GitHub Actions のレシピについては、examples/hooks/ をご覧ください。
PreToolUse ガードは、モデルがコマンドを破壊的と判断した場合(p ≥ 0.9)にブロックし、エージェントにユーザーへの確認を求めるよう伝えます。ブロックは一時停止とエスカレーションであり、行き止まりではありません。このゲートは設計上、助言を目的としており、その旨も明示します。初日に実際に発動した際は、履歴を書き換える force push(p=0.94)を検出し、独自のバイパス経路も明らかにしました。その経路は現在修正済みで、レシピにも記載されています。
エージェントに教える(スキル)
スキーマはクライアントに clef_decide が何を受け付けるかを伝えます。エージェントには、いつ利用し、意思決定をどのように組み立てるかも知る必要があります。同梱の clef-decisions スキルでは、意思決定のパターン、バッチ処理、基準の記述、分布の解釈、エラーからの回復を扱います:
clef-mcp setup # automatic
cp -r skills/clef-decisions ~/.agents/skills/ # manual, from repo
cp -r "$(npm root -g)/clef-mcp/skills/clef-decisions" ~/.agents/skills/ # from npm package
アーキテクチャ
flowchart LR
subgraph clients [MCP clients]
CC[Claude Code]
CX[Codex]
CU[Cursor]
ZC[ZCode]
end
clients -- MCP stdio --> S[clef-mcp<br/>validation · limits · structured errors]
S -- SystemOne adapter --> R[ClefRuntime<br/>llama.cpp subprocess<br/>127.0.0.1]
R -- single forward pass --> M[("Clef-Flash<br/>9B · GGUF · local")]
M -. probabilities .-> S -. strict JSON .-> clients
ClefRuntime インターフェース(load / decide / unload / health)によってエンジンが分離されており、MCP API を変更せずに MLX やリモートランタイムを組み込めます。ワイヤ形式は POST /v1/systemone で、llama.cpp と他の Clef ランタイムで共通のコントラクトです。
CLI
clef-mcp # run the MCP server on stdio (default command)
clef-mcp decide # one-shot decision (no MCP session): JSON in, JSON out — for hooks, CI, scripts
clef-mcp daemon # keep the model warm on a local unix socket; `decide --daemon` uses it
clef-mcp install # detect hardware → download model + runtime → verify checksum → verify inference
clef-mcp setup # register the MCP server + agent skill in zcode / claude-code / codex / cursor
clef-mcp models # list models/quantizations and install status
clef-mcp status # runtime, model, memory summary
clef-mcp doctor # full diagnosis (platform, RAM, GPU, binary, model, checksum*, inference, MCP config)
clef-mcp uninstall # remove the model (and optionally the managed runtime)
clef-mcp evals # run the evaluation dataset against the installed model
フラグ:install --quant Q8_0 --yes --skip-probe、install --setup、setup --clients zcode,cursor --no-skill、doctor --deep(モデルファイルのハッシュを再計算)、uninstall --runtime --yes。
ランタイム:llama.cpp と MLX
同じ ClefRuntime インターフェースの背後で動作する 2 つのローカルランタイム:
llama-cpp(既定) | mlx | |
|---|---|---|
| プラットフォーム | macOS、Linux、Windows | macOS/Apple Silicon のみ |
| モデル | ggml-org/Clef-Flash-GGUF の GGUF | mlx-community/clef-flash-4bit の MLX 4-bit |
| 追加要件 | なし | PATH 上の uv(管理対象の Python 環境) |
| インストール | clef-mcp install | clef-mcp install --runtime mlx |
CLEF_RUNTIME=mlx で実行時に切り替えられます(MCP サーバーのプロセスに設定する必要があります。例:クライアントの env ブロック内)。どちらも同じ POST /v1/systemone コントラクトを使用します。MLX スナップショットは、固定されたリビジョンの uv 管理下の huggingface_hub を使って CLEF_HOME に取得されます(グローバルな Python の状態には影響しません)。
設定
| 変数 | デフォルト | 意味 |
|---|---|---|
CLEF_MODEL | clef-flash | モデル ID(呼び出しごとの model も指定できます) |
CLEF_HOME | ~/.cache/clef-mcp | キャッシュ/モデルの保存先 |
CLEF_RUNTIME | llama-cpp | llama-cpp | mlx |
CLEF_LOG_LEVEL | error | error | warn | info | debug(stderr のみ) |
CLEF_LLAMA_BIN | – | llama-server バイナリの明示的なパス(llama-cpp ランタイム) |
CLEF_LLAMA_RELEASE_TAG | 最新のナイトリービルド | 管理対象の llama.cpp ビルドを固定します |
CLEF_LLAMA_BATCH | 8192 | llama.cpp の物理バッチサイズ(複数の質問を含むリクエスト) |
CLEF_MLX_UV | PATH 上の uv | uv バイナリの明示的な指定(MLX ランタイム) |
CLEF_DAEMON_IDLE | 600 | デーモンがモデルをアンロードするまでのアイドル秒数(0 = アンロードしない) |
CLEF_MAX_QUESTIONS | 64 | 1 回の呼び出しあたりの質問の最大数 |
CLEF_MAX_STATE_BYTES | 1048576 | シリアライズされた state の最大サイズ |
CLEF_MAX_INSTRUCTION_CHARS | 10000 | 質問ごとの指示の最大文字数 |
ランタイムの解決順序:CLEF_LLAMA_BIN → CLEF_HOME/runtime 内の管理対象バイナリ → PATH 上の llama-server。
ストレージ:CLEF_HOME/models/<model>/<quant>/(モデルと、リポジトリ/リビジョン/sha256/ライセンスを含む manifest.json)および CLEF_HOME/runtime/llama.cpp/。
モデルは固定された公式 GGUF 変換版(ggml-org/Clef-Flash-GGUF)からダウンロードされ、Hugging Face のコンテンツハッシュと照合して sha256 検証されます。clef-mcp によって再パッケージされることはありません。また、公式の MCP Registry に io.github.HighlyLoadedEgo/clef-mcp として登録されています。
エラー処理
{
"error": {
"code": "MODEL_NOT_INSTALLED",
"message": "Clef model \"clef-flash\" is not installed.",
"hint": "Run `clef-mcp install`."
}
}
コード:MODEL_NOT_INSTALLED、MODEL_LOAD_FAILED、RUNTIME_NOT_FOUND、RUNTIME_INIT_FAILED、RUNTIME_NOT_SUPPORTED、INVALID_INPUT、CLEF_INFERENCE_FAILED、UNSUPPORTED_PLATFORM、OUT_OF_MEMORY、CHECKSUM_MISMATCH、DOWNLOAD_FAILED。モデルのコンテキスト長である 16k トークンを超える入力は、state の削減を促すヒントとともに拒否されます。
セキュリティとデータの取り扱い
- ネットワークサーバー、テレメトリ、アカウントは不要です。すべてローカルで実行されます。
- モデルは、明示的な
install時にのみ HTTPS 経由でダウンロードされ、チェックサムが検証されます。 stateの内容はデータとしてモデルに渡されます。サーバーがこれを実行したり、指示として解釈したりすることはありません。- ファイルシステムへのアクセスは
CLEF_HOMEに制限されます(doctorで標準的な MCP クライアント設定パスを読み取る場合を除く)。 - 管理対象のランタイムは公式の llama.cpp ビルドです。
CLEF_LLAMA_RELEASE_TAGでバージョンを固定できます。
ポリシーの全文については、SECURITY.md をご覧ください。
開発
npm install
npm run build
npm test # unit + integration (fake llama-server, no model needed)
npm run evals # needs an installed model; exit code reflects pass rate
CONTRIBUTING.md および tests/evals/dataset.jsonl をご覧ください。
ライセンス
- コード:Apache-2.0。
- Clef/Clef-Flash モデル:© Cloudflare、Apache-2.0 — NOTICE をご覧ください。
- llama.cpp ランタイム:© 各著作者、MIT ライセンス。公式のビルド済みバイナリとしてダウンロードされます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。