vuln-triage-mcp について
vuln-triage-mcpは、修正する脆弱性の優先順位を決めるAIエージェント向けMCPサーバーです。CVSS、FIRST EPSS、CISA KEVを組み合わせ、スコアの根拠や不足データも示します。
主な機能
- 01CVEとGHSAのアドバイザリー検索
- 02パッケージに影響する脆弱性の検索
- 03EPSSの悪用確率スコア取得
- 04CISA KEVの既知の悪用記録を確認
- 05優先度の採点と根拠の提示
活用シーン
- 01複数の脆弱性の修正順を比較
- 02パッケージのバージョンに影響する脆弱性を確認
- 03脆弱性が実際に悪用されているか確認
MCP 対応
MCPクライアントに、脆弱性検索、パッケージ検索、EPSS・KEV確認、トリアージのツールを提供します。データソースはOSV.dev、FIRST EPSS、CISA KEVです。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
vuln-triage-mcp
OSV.dev、FIRST EPSS、CISA KEV を利用して、どの脆弱性を優先して修正すべきかを AI エージェントに知らせます。
このプロジェクトの目的
2、3文で説明してください。CVSS だけでは深刻度に基づいて順位付けされ、悪用される可能性は考慮されません。 このサーバーは、悪用確率(EPSS)と既知の悪用状況(KEV)を加味し、その判断理由を示します。 例:誰にも悪用されていない CVSS 9.8 の脆弱性は、実際に悪用されている CVSS 8.8 の脆弱性より下位になります。
クイックスタート
Claude Code
claude mcp add vuln-triage -- uvx vuln-triage-mcp
Claude Desktop / その他のクライアント
uvx を使用する JSON 設定のスニペットです。
必要なもの:Python 3.12 以降。API キーは不要です。
試してみる
プロンプトの例と期待される結果:
- 「CVE-2021-44228、CVE-2023-4863、CVE-2019-10744 のうち、最も緊急性が高いのはどれですか?」
- 「lodash 4.17.15 に脆弱性はありますか? どのバージョンにアップグレードすべきですか?」
- 「CVE-XXXX は現在、実際に悪用されていますか?」
ツール
| ツール | 引数 | 使用する場面 | 別のツールを優先する場面 |
|---|---|---|---|
| lookup_vulnerability | vuln_id | 1 件の CVE/GHSA のアドバイザリー詳細を確認したい場合 | ユーザーが優先順位付けを求めている -> triage_vulnerability |
| find_vulns_for_package | name, ecosystem, version="" | 「パッケージ X(バージョン Y)に影響する脆弱性は何ですか」という場合 | ユーザーがすでに ID を指定している場合 |
| get_epss_score | cve_id | 悪用確率だけを確認したい場合 | ユーザーが全体的な優先度を知りたい -> triage_vulnerability |
| check_known_exploited | cve_id | 「この脆弱性は実際に悪用されていますか」(CISA KEV)と尋ねられた場合 | 同上 |
| triage_vulnerability | vuln_id | 「緊急性はどの程度か/最初に何を修正すべきか」という質問全般 | 詳細のみを求めている -> lookup_vulnerability |
スコアの仕組み
- 計算式:CVSS(基本値)x 40 + EPSS x 35 + KEV +25。KEV に掲載されている場合は 80 が下限です
- 区分:下の表を参照してください
- データ不足:該当する要素は省略され、不足しているデータは
reasoningに記載され、confidenceは低下します - ドキュメントへのリンク:docs/scoring-spec.md
| 区分 | 条件 |
|---|---|
| critical | スコア >= 80、または CISA KEV に掲載されている(確信度にかかわらず、常に 80 が下限です) |
| high | スコア 60-79 |
| medium | スコア 40-59 |
| low | スコア < 40 |
| unknown | KEV に掲載されておらず、CVSS の深刻度がないか、確信度が低い(3 つのシグナルのうち 0~1 件)。分類するにはデータが不十分ですが、スコアは返され、不足している情報は reasoning に記載されます。リスクが低いという判定ではありません。 |
unknown は high、medium、low より優先されます。KEV に掲載された脆弱性には適用されません。
信頼性と制限事項
- 部分的な結果:EPSS または KEV の取得に失敗した場合、不足しているソースが結果に示されます
- 結果の切り詰め:
truncated、found_countとreturned_countの比較、ranking_note - KEV キャッシュの古さ:
staleとcatalog_fetched_at - タイムアウトと再試行ポリシー(1 行)
- パッケージのクエリでは、最大 50 件のアドバイザリーが深刻度順に返されます
セキュリティ
- アドバイザリーのテキストは信頼できないサードパーティーのコンテンツです(プロンプトインジェクションの要因になり得ます)。
サニタイズされ、長さが制限されたうえで
untrusted_textとして返され、サーバーの指示によってモデルにその旨が通知されます - すべての ID とエコシステムに入力検証を実施します
- 認証情報は不要で、保存もされません。3 つの公開 API に対する読み取り専用の呼び出しのみを行います
- このプロジェクトの脆弱性の報告先:SECURITY.md またはメール
評価
ゴールデンセット:期待される区分、確信度、順序を記録した 17 件(CVE 16 件、GHSA 1 件)。記録日:10/21/2026。
結果:記録済みのフィクスチャでは 17/17 件が一致(uv run pytest tests/test_golden.py)。また、10/21/2026 のライブ API に対しても 17/17 件が一致(uv run pytest -m live tests/test_golden.py)。EPSS は毎日変動するため、時間の経過とともにライブ実行の結果が異なる場合があります。ゴールデンセットまたはスコアリング仕様に変更があった場合は、uv run python scripts/record_golden_fixtures.py でフィクスチャを再記録してください。
データソースと帰属表示
OSV.dev、FIRST EPSS(利用規約に従って引用)、CISA KEV。いずれとも提携していません。
開発
uv sync、uv run pytest、Inspector の実行、ライブテスト用マーカー。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。