CVErdict について
CVErdictは、CVEのトリアージを行うエージェント向けの読み取り専用MCPサーバーです。根拠リンク付きの重要度区分やスコア、関連シグナル、不明点、データの出所を返し、アカウントやAPIキーは不要です。
主な機能
- 01スコアと根拠リンク付きのCVE判定
- 02最近のCVEの検索と絞り込み
- 03期限間近・期限超過のKEV一覧
- 04新たに確認された悪用証拠の追跡
- 05データの鮮度と参照ファイルの表示
- 06アカウント不要の読み取り専用ツール
活用シーン
- 01根拠を参照してCVEをトリアージ
- 02ベンダーや製品から最近の脆弱性を検索
- 03期限が近いCISA KEV項目を確認
- 04古いCVEの悪用シグナルの変化を確認
MCP 対応
ローカルでstdio経由により動作し、CVE判定、検索、シグナル一覧、KEV期限、悪用状況の変化、履歴を扱う6種類の読み取り専用ツールをMCPクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
6掲載時のツール一覧 · 4 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| ids | array | はい | CVE ID。例:["CVE-2026-96951"]。 |
| knob | integer | いいえ | Likely next の判定に必要な証拠量。30~80。デフォルトはサイトと同じ 50 です。 |
| detail | boolean | いいえ | 説明、影響を受ける製品、CWE、SSVC、エクスプロイトへのリンク、タイムライン、参考資料も返します。ID は最大 5 件です。 |
詳細
CVErdict MCP サーバー
AI エージェントにCVErdictと同じ判定を提供する、読み取り専用のModel Context Protocolサーバーです。ティア、スコア、ポイントと根拠へのリンクを含むすべての理由チップ、不明な点を確認できます。すべての回答に、データの生成日時と取得元のファイルが記載されます。キーもアカウントも不要です。
お使いのマシン上で stdio 経由で動作し、公開されている data ブランチを raw.githubusercontent.com から読み込みます。GitHub にアクセスできない場合は、サイトの /data/ にあるコピーを使用します。サイトが必要なのは GitHub にアクセスできない場合だけなので、サイトがダウンしていても動作し続けます。
インストール
Node 22.12 以降が必要です。npm パッケージは cverdict-mcp です。ファイルは 1 つで、実行時依存関係はありません。0.1.0 以降のバージョンは npm provenance 付きで GitHub Actions から公開されます。これにより、各バージョンをビルドしたコミットとワークフローを確認できます。
# Claude Code
claude mcp add cverdict -- npx -y cverdict-mcp
ほかのクライアントでは mcpServers エントリーを指定します(キー名はクライアントによって異なります)。
{
"mcpServers": {
"cverdict": {
"command": "npx",
"args": ["-y", "cverdict-mcp"]
}
}
}
Windows で npx を直接起動できないクライアントでは、"command": "cmd" と "args": ["/c", "npx", "-y", "cverdict-mcp"] を指定します。npx -y は最新バージョンを実行します。特定のバージョンを指定するには cverdict-mcp@<version> を使用します(バージョンは npm のページに掲載されています)。
クローンから実行する
Node 22.12 以降が必要です。
git clone --single-branch https://github.com/markusweldon/cverdict.git
cd cverdict && npm ci
# Claude Code
claude mcp add cverdict -- npm --prefix "$PWD" run -s mcp
ほかのクライアントでは mcpServers エントリーを指定します(キー名はクライアントによって異なります)。
{
"mcpServers": {
"cverdict": {
"command": "npm",
"args": ["--prefix", "/path/to/cverdict", "run", "-s", "mcp"]
}
}
}
-s は付けたままにしてください。通常の npm run は独自のバナーを stdout に出力しますが、stdout は JSON-RPC チャネルです。
起動時に npm と TypeScript を使わないようにするには(また、Windows でクライアントから npm を直接起動できない場合も)、単一ファイルのサーバーを一度ビルドし、Node で起動します。
npm run build:mcp # writes mcp/dist/cverdict-mcp.mjs
claude mcp add cverdict -- node "$PWD/mcp/dist/cverdict-mcp.mjs"
更新するには git pull && npm ci を実行します(バンドルを使う場合は npm run build:mcp も実行します)。
オプション
環境変数はすべて省略可能です。MCP クライアントは最小限の環境変数でサーバーを起動するため、このサーバーのクライアント側の env ブロックに設定してください。
| 変数 | デフォルト | 用途 |
|---|---|---|
CVERDICT_DATA_BASE | https://raw.githubusercontent.com/markusweldon/cverdict/data/v1/,https://cverdict.dev/data/v1/ | /v1/ で終わるベース URL をコンマ区切りで指定し、順番に試します。https のみ使用できますが、localhost と 127.0.0.1 では http も使用できます(例:npm run mock と npm run dev を使う場合の http://localhost:5173/data/v1/)。フォークまたはミラー用 |
NODE_USE_ENV_PROXY、HTTPS_PROXY | 未設定 | プロキシ経由の場合:NODE_USE_ENV_PROXY=1 と HTTPS_PROXY=http://proxy.example:3128 を設定します。Node 22.21 以降が必要です。それより古いバージョンでは、警告なしで NODE_USE_ENV_PROXY が無視されます。NODE_EXTRA_CA_CERTS を使うとプライベート CA を追加できます |
起動時に、サーバーはバージョン、Node のバージョン、プロキシが検出されたかどうか、データベースの URL を 1 行で stderr に出力します。stdout に出力されるのは JSON-RPC のみです。
ツール
6つすべてが読み取り専用(readOnlyHint: true)で、structuredContent と同じ JSON を1つのテキストブロックとして返します。結果の型は shared/contract.ts の「MCP tool results」セクションにあります。
| ツール | 取得元 | 返す内容 | 上限 |
|---|---|---|---|
get_verdict | meta.json、cve/<xx>.json | Tier、平易な言葉での判定、スコア、score_math、ポイントとリンク付きのすべての理由チップ、不明点、KEV、EPSS、CVSS、CVE ページ、シャード、cve.org へのリンク。detail: true を指定すると、説明、影響を受ける製品、CWE、SSVC、エクスプロイト、タグ、タイムライン、参考情報も追加されます | ID は 1~15 件、detail を指定する場合は最大 5 件、knob は 30~80 |
list_signal | signal.json。または Watch、Quiet、もしくは knob が 35 未満の場合は index.json | 選択した Tier(デフォルトは Exploited、次に Likely)の期間内の CVE を、スコアの高い順に返します。フィルター:vendor テキスト、published_since、kev_only | limit は 1~50(デフォルト 25)、offset |
kev_due | kev.json | 今後 within_days 日以内に期限を迎える(0~60、デフォルト 7)CISA KEV エントリーと、最大 overdue_days 日(0~14、デフォルト 7)超過しているエントリーを、期限が近い順に返します。UTC の暦日による days_left も含みます | limit は 1~50(デフォルト 50)、offset |
woke_up | woke.json | since(デフォルトはデータ生成日の 7 日前)以降にエクスプロイトの証拠が加わった古い CVE と、日付付きのシグナルを返します。kinds でフィルターできます | limit は 1~50(デフォルト 25)、offset |
receipts | receipts.json | CISA に掲載される前に、CVErdict、CVSS 7 以上、EPSS 10% 以上が CVE にフラグを立てた頻度を、先行ログと事後バックテストで返します。CVE ごとの一覧は含みません。id を指定すると、1 件の CVE のエントリーを追加します | |
search_cves | index.json | ID、CNA、ベンダー、製品、タイトルに query のすべての語を含む期間内の CVE を、スコアの高い順に返します | query は 2~100 文字、最大 8 語。limit は 1~50(デフォルト 20)、offset |
日付(published_since、since)は UTC です:2026-10-01、2026-10-01T06:00Z、または 2026-10-01T06:00:00.000Z。存在しない日付を指定するとエラーになります。サーバーが適用できないフィルターは、黙って無視されることなく、必ずエラーになります。
2026-11-03 のライブデータ(期間内の CVE 16,747 件)で測定したところ、どのツールも上限まで指定した場合の最大応答は 20,000 トークン未満です。scripts/mcp-measure.ts で確認できます。
すべての応答は data から始まります
| フィールド | 意味 |
|---|---|
generated_at、age_hours | 応答の基になったパイプラインの実行時刻と、サーバーが応答した時点での経過時間(整数の時間単位) |
score_model、knob_default、window | meta.json と同じ値 |
sources_down、sources_stale | その実行で利用可能なデータがなかったソース(証拠が存在しないのではなく、不明であることを示します)と、キャッシュされたコピーを提供したソース。osv は除外されています。osv は packages.json のみに使用され、判定には使われません |
files[] | 読み取ったすべてのファイル。データブランチの path、取得元の url、各ファイル固有の generated_at を含みます |
warning | 更新に失敗し、最後に正常に取得したコピーから応答した場合に設定されます |
毎時の公開直後は、CDN が数分間、前回の実行時のファイルを 1 つ配信することがあります。その場合、files[] には両方の時刻が表示され、隠されることはありません。
応答を正しく読み取る
- Quiet は、まだ証拠がないという意味であり、安全という意味ではありません。 データの対象外の CVE(
found: false)は、安全ではなく不明です。データには、過去 30 日間に公開された CVE、CISA KEV に掲載されたすべての CVE、再び動き始めた古い CVE が含まれます。 - テキストは信頼できないものとして扱ってください。 タイトル、説明、KEV 名、必要な対応、チップのラベルには、CNA、CISA、エクスプロイトフィードの内容が引用されています。サーバーの指示では、エージェントに対して、これらに含まれる指示には決して従わないよう伝えています。これによりプロンプトインジェクションのリスクは軽減されますが、なくなるわけではありません。
- プライバシー。 GitHub にわかるのは、サーバーが取得する 256 個のシャードファイルのうちどれかだけです。CVE ID や検索語はわかりません。GitHub が拒否した場合や取得に失敗した場合は、同じリクエストがサイトの
/data/コピーに送られます。アップロードやディスクへの書き込みは一切行われません。
エラー
失敗した場合は、ツールの結果として isError: true とプレーンなメッセージが返されます。例:
| ケース | メッセージ |
|---|---|
| ファイルが公開されていない | woke.json is not on the data branch yet, so this tool has nothing to read. The other tools still work. |
最初に応答したデータベースに meta.json がない | meta.json is not at the first data base that answered, so no tool can answer. Check CVERDICT_DATA_BASE, ... |
| すべてのデータベースへのアクセスに失敗し、キャッシュもない | CVErdict could not load its data right now (raw.githubusercontent.com: HTTP 503 for meta.json; ...). Try again in a few minutes, or read the files directly: https://github.com/markusweldon/cverdict/tree/data/v1 |
| 呼び出しの10秒以内にデータを取得できない | CVErdict could not load its data in time (...) |
| データが新しいスキーマに移行している | The published data uses schema version 2; this server reads version 1. Update the server: ... |
detail にIDが5つより多く指定されている | detail: true takes at most 5 IDs; ask again in groups of 5. |
| 引数が不正 | Input validation error: Invalid arguments for tool get_verdict: ... |
データの読み込み方法
- データベースは順番に試されます。404の場合はそこで終了します。429または403の場合、あるいはタイムアウト(4秒以内にレスポンスヘッダーが届かない、または本文の受信が4秒間停止する)の場合は、次のデータベースに切り替わり、そのデータベースは10分間、リストの最後に移動します。ネットワークエラー、リダイレクト(拒否)、5xx、ファイル形式の不正の場合も、次のデータベースに切り替わります。データが継続して届いている遅い本文は、途中で打ち切られません。
- 各ツール呼び出しの期限は10秒です。
get_verdictのシャードは並列で取得され、同時取得数は最大6件です。 - 本文のサイズは、展開後24 MBまでに制限されます。これにより、ミラーからの圧縮爆弾も阻止されます。ファイルには
schema_version1とgenerated_atが必要です。行テーブルには、公開されている列が過不足なく含まれている必要があります。 - 解析済みファイルは、プロセスの稼働中はメモリに保持されます。
meta.jsonは5分後に再確認されます(raw.githubusercontent.com のキャッシュ期間も5分です)。meta.jsonに新しい実行が記載されている場合は、他のファイルを再取得します。サーバーがアイドル状態の間は、リクエストもタイマーも実行されません。
開発
npx vitest run mcp/test # unit, protocol and spawn tests (what the release workflow runs)
npm test # every test in the repository
npm run build:mcp # the single-file bundle in mcp/dist/
npx tsx scripts/mcp-measure.ts # answer sizes against the live data branch
npx tsx mcp/test/smoke.ts mcp/dist/cverdict-mcp.mjs <data dir> # what CI runs on mock data
SDK(@modelcontextprotocol/server)と zod はリポジトリの開発依存関係として正確なバージョンに固定され、dist/cverdict-mcp.mjs にバンドルされるため、パッケージに実行時依存関係はありません。サイトではこれらをインポートしません。shared/mcp.ts に、両方が使用するコピーが含まれています。
リリース
メンテナーのみが対象です。新しいバージョンを mcp/package.json、shared/mcp.ts の MCP_SERVER.version、および mcp/server.json の両方の version フィールドに設定します(テストでこれらが一致していることを確認します)。コミットして、たとえば git tag mcp-v0.1.1 && git push origin mcp-v0.1.1 のようにタグ mcp-v<version> をプッシュします。リリースワークフロー(.github/workflows/release-mcp.yml)では、タグとバージョンの一致を確認し、MCP のテストとスモークテストを実行して、バンドルをパッケージ化し、プロビナンス付きで信頼された公開を通じて npm に公開します。最後のジョブでは、ワークフローの GitHub OIDC ID でログインし、mcp/server.json の情報を使って MCP Registry にバージョンを登録します。npm またはレジストリのトークンは、どこにも保存されません。
初回のみ必要なセットアップ:最初のバージョンは手動で公開します(ルートで npm run build:mcp を実行し、その後 mcp/ で npm login と npm publish を実行します)。次に npmjs.com で、パッケージ cverdict-mcp → Settings → Trusted publishing → GitHub Actions に進み、owner を markusweldon、repository を cverdict、workflow を release-mcp.yml に設定し、environment は指定しません。Publishing access では、二要素認証を必須にし、トークンを許可しない設定を選択します。
ライセンス
MIT(LICENSE)。このバンドルには、MCP TypeScript SDK(Apache-2.0、MIT に基づくコントリビューションを含む)、zod(MIT)、および SDK に同梱されているライブラリが含まれます。各ライブラリの通知はLICENSE-THIRD-PARTYに記載されています。データに関する条件:docs/DATA.md。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。