nist-nvd-mcp-server について
NIST National Vulnerability DatabaseのCVEおよびCPEデータを検索・監査するMCPサーバーです。セキュリティ担当者が脆弱性を絞り込み、製品の影響とCVEの変更履歴を確認できます。
主な機能
- 01キーワード、深刻度、CWE、KEV状態によるCVE検索
- 02詳細なCVEレコードの一括取得
- 03NVD CPEディクショナリの検索
- 04製品バージョンの脆弱性監査
- 05CVE変更履歴の確認
活用シーン
- 01製品バージョンに既知のCVEがあるか確認
- 02深刻度やCISA KEV状態で脆弱性を絞り込み
- 03製品名からCPE識別子を解決
- 04CVEレコードの変更を追跡
MCP 対応
完全なCVEレコードと利用ガイドを含む5つのツールと2つのリソースをMCPクライアントに提供します。STDIOとStreamable HTTPに対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://nist-nvd.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-nist-nvd https://nist-nvd.caseyjhand.com/mcp{"mcpServers":{"cyanheads-nist-nvd":{"type":"http","url":"https://nist-nvd.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-nist-nvd":{"type":"http","url":"https://nist-nvd.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-nist-nvd":{"type":"http","url":"https://nist-nvd.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-nist-nvd":{"serverUrl":"https://nist-nvd.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
5| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| brief | boolean | いいえ | true の場合、完全な詳細情報の代わりに簡略化したレコード(ID、ステータス、最高 CVSS スコア、KEV 名、公開日、短縮された説明)を返します。10 件を超える ID のバッチに推奨されます。 |
| cveIds | any | はい | 取得する CVE ID 1 件、または最大 100 件の CVE ID の配列。 |
| allLanguages | boolean | いいえ | true の場合、各レコードについて NVD が提供するすべてのローカライズ済み説明を保持し、完全なレコードではすべてを表示します。デフォルトでは英語のみを保持し、英語の項目がないレコードでは利用可能な言語にフォールバックします。簡略レコードには常に短縮された説明が 1 件だけ含まれます。 |
| includeReferences | boolean | いいえ | false の場合、レスポンスサイズを抑えるため references 配列を省略します。 |
詳細
@cyanheads/nist-nvd-mcp-server
NIST National Vulnerability Database を通じて、キーワード、深刻度、CWE、CISA KEV のステータス、CPE で CVE を検索・監査します。STDIO または Streamable HTTP に対応しています。
公開ホストサーバー: https://nist-nvd.caseyjhand.com/mcp
概要
NIST National Vulnerability Database の CVE および CPE データを提供します。キーワード、深刻度、CWE、CISA KEV のステータスで脆弱性を検索・監査し、製品を CPE 名に解決して、CVE の改訂履歴を追跡できます。
ツール
| ツール | 説明 |
|---|---|
nvd_search_cves | キーワード、深刻度、CWE、日付範囲、または CISA KEV のステータスで CVE を検索します。 |
nvd_get_cve | ID を指定して 1 件以上の CVE を取得します。CVSS スコア、CWE、CPE 設定、KEV フィールド、参照情報をすべて含みます。 |
nvd_search_cpes | 製品キーワードまたは部分一致文字列で NVD CPE 辞書を検索します。 |
nvd_audit_cpe | CPE 名または仮想一致文字列を指定して、特定の製品バージョンに影響するすべての CVE を検索します。 |
nvd_get_cve_history | CVE の変更履歴を取得します。スコアの改訂、ステータスの遷移、参照情報の追加が含まれます。 |
リソース
| リソース | 説明 |
|---|---|
nvd://cve/{cveId} | ID で CVE レコード全体を取得します。単一 ID に対する nvd_get_cve と同じデータを、注入可能なコンテキスト用の安定した URI として提供します。 |
skill://nist-nvd-guide/SKILL.md | 製品の適用可能性、識別子の連鎖、深刻度の解釈、網羅性に関するガイダンスを提供します。 |
CVE リソースのデータは nvd_get_cve からも取得できます。公開されているガイドは、プラグインのインストール先でも skills/nist-nvd-guide/SKILL.md から利用できます。
機能リファレンス
上限を超える読み取り件数は、デフォルトで上限に制限されます。CVE 検索、監査、履歴は 2000 件、CPE 検索は 10000 件、一括照会は 100 ID です。上限に制限された呼び出しでは、両方の出力に requestedLimit、effectiveLimit、通知が表示されます。一括照会では、指定されたすべての ID が検証され、処理対象の先頭部分以降にある正規化済みの重複排除された ID は unprocessedIds に列挙されます。missingIds の対象は照会した ID のみです。起動前に NVD_CLAMP_LIMITS=false を設定すると、案内されている最大値に戻り、上限を超えるリクエストは拒否されます。ゼロ、負数、小数の上限値は引き続き無効です。
nvd_search_cves ツール
- 全文キーワード検索(複数の単語は AND 条件)、または完全一致のフレーズを検索する
exactPhrase: true—keywordが必要です - フィルター:CVSS 深刻度区分(LOW/MEDIUM/HIGH/CRITICAL — CRITICAL には
severityVersion: "v3"または"v4"が必要です)、CWE ID、CISA KEV ステータス、noRejected(デフォルトは true) - 日付フィルター:
pubDays/lastModDaysの簡易指定(最大 120 日に自動調整され、調整内容は付加情報に表示されます)、または ISO 8601 の範囲指定(最大 120 日で、両端の指定が必要です)。各軸で両方の形式を併用することはできません limit(最大 2000、デフォルトは 20)とoffsetによるページネーション- 常に短縮された説明を含む簡潔な概要を返します。詳細全体を取得するには
nvd_get_cveを呼び出してください
nvd_get_cve ツール
- 1 回の呼び出しで最大 100 件の CVE ID を一括処理できます
- フルモード(デフォルト):v2.0/v3.0/v3.1/v4.0 の CVSS スコア、CWE の脆弱性、CPE 構成、CISA KEV フィールド、参照情報
brief: trueを指定すると、項目を簡潔にした行(ID、ステータス、最高深刻度、KEV 名、短縮された説明)が返されます — 10 件を超える一括処理に推奨されますincludeReferencesとincludeConfigurationsのデフォルトは true です。いずれかに false を設定すると、そのフィールドは両方の出力から省略されます。allLanguages: trueを指定すると、英語のみでなく、すべてのローカライズ済みの説明が保持されます- 付加情報フィールド
missingIdsには、NVD が返さなかったリクエスト対象の ID が列挙されます - 両方の出力には、選択されたすべての参照情報と CPE 構成が含まれます。NVD が提供する場合は、オプションの SSVC 評価も表示されます
nvd_search_cpes ツール
- キーワード検索(例:
"apache http server")または部分的な CPEv2.3 パターン(cpeMatchString)。少なくとも一方が必要です - 完全な CPE 名、人が読めるタイトル、廃止ステータス、後継 CPE を返します
limit(最大 10,000、デフォルトは 20)とoffsetによるページネーション — ベンダーレベルのキーワードでは数万件に一致することがあるため、さらに絞り込むのではなくページ分割してくださいnvd_audit_cpeの前に使用して、製品に必要な正確な CPE 名を特定してください
nvd_audit_cpe ツール
- 2 つのモードがあります。完全一致の
cpeName(NVD がisVulnerableを自動適用)か、オプションのversionStart/versionEnd境界(境界を含む/含まない)を指定したvirtualMatchStringです - クライアント側の
severityMinは、取得したページをすべての CVSS メトリクス中の最高深刻度区分でフィルターします。見出しは引き続き最高の数値スコアに基づきます。このフィルターで除外できるのは、limitで取得した範囲内の項目のみです - CVE レコードの詳細(CVSS スコア、CWE、CPE 構成、KEV フィールド、参照情報)を返します
includeReferencesとincludeConfigurationsのデフォルトは true です。false にすると、そのフィールドは両方の出力から省略されます。SSVC 評価は引き続きオプションですlimit(最大 2000、デフォルトは 20)とoffsetによるページネーション — 各結果は完全なレコードであるため、上限を引き上げず、控えめな件数でページ分割してください- 付加情報フィールド
auditTargetには、使用した CPE 識別子が表示されるため、正しい製品を照会したことを呼び出し元が確認できます
nvd_get_cve_history ツール
- 変更イベントを返します:CVSS の改訂、ステータスの遷移、参照情報の追加、CPE 構成の更新
orderで基準となる端を選択します。newest(デフォルト)は新しい順に取得し、oldestは NVD のネイティブ順で取得しますlimit(最大 2000、デフォルトは 20)とoffsetによるページネーション。件数はorderで指定した基準側から数えます- API キーがない場合、履歴エンドポイントの応答は大幅に遅くなります。
NVD_API_KEYを設定し、NVD_REQUEST_TIMEOUT_MSを引き上げてください
nvd://cve/{cveId} リソース
application/json形式の完全な CVE レコード — 単一 ID に対するnvd_get_cveと同じデータで、参照情報と英語のみの説明を含みますcveIdはCVE-YYYY-NNNNNに一致する必要があります。形式が正しくても存在しない ID の場合はcve_not_foundがスローされます
機能
@cyanheads/mcp-ts-core を基盤としています。stdio および Streamable HTTP トランスポート、プラグイン可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングに対応した構造化ログを備えています。
NVD 固有の機能:
- リクエストペーサーが、NVD の 5 req/30s(キーなし)および 50 req/30s(キーあり)の制限を自動キューイングで順守します。最小リクエスト間隔は、ウィンドウと制限から算出されます
- リトライはペーサーの内側ではなく外側に配置されています。各試行がキュー内で順番に処理されるため、リトライもレート制限の枠にカウントされ、制限を超える連続リクエストが発生しません
- 403 の
Retry-Afterにより、NVD のウィンドウがリセットされるまでキュー全体が保留されます。キーがない場合、403 は即座に失敗し、30 秒のウィンドウを超えられないリトライに 5 リクエスト分の枠を消費するのではなく、NVD_API_KEYを提示します - 決定的な拒否はリトライを消費せず、即座に失敗します。NVD は不正なパラメーターと拒否された API キーの両方に HTTP 404 で応答し、違いは
messageヘッダーのみです。そのため、拒否されたキーは不正な CVE ID ではなく、NVD_API_KEYを示す設定エラーとして表示されます - NVD のブロックページはリトライ不可のブロックリクエストエラーを返します。不正な JSON やレスポンスエンベロープは、復旧方法の案内を含む無効なレスポンスエラーを返します
- リクエストのタイムアウトと呼び出し元によるキャンセルは、レスポンスボディの読み取り中も有効です
エージェントに適した出力:
- すべてのレスポンスに
enrichmentブロックを含み、structuredContentとレンダリングされたテキストの両方で返します。総件数、返された件数、ページオフセット、実際に適用されたフィルター、日付のクランプが行われた場合の情報を含むため、エージェントは実際に何が検索されたかを判断できます - CVE の一括検索では
missingIdsを返し、結果が一部欠落していても無言で返すのではなく、ID ごとの一致状況を確認できます - 監査レスポンスには CPE のエコーを含み、
cpeNameまたはvirtualMatchStringをそのまま返すため、呼び出し元は正しい製品が監査されたことを確認できます - 結果が空の場合は原因を明示します。一致するクエリーがない場合、重大度のしきい値によってページが空になった場合、結果セットの末尾を超えるオフセットが指定された場合、クリーンな監査(「既知の脆弱性はありません」)を区別し、すべてをエラーや「何も見つかりませんでした」として扱うことはありません
はじめに
公開ホストインスタンス
公開インスタンスは https://nist-nvd.caseyjhand.com/mcp で利用できます。インストールは不要です。Streamable HTTP を介して、任意の MCP クライアントを接続してください。
{
"mcpServers": {
"nist-nvd-mcp-server": {
"type": "streamable-http",
"url": "https://nist-nvd.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
以下を MCP クライアントの設定ファイルに追加してください。
{
"mcpServers": {
"nist-nvd-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/nist-nvd-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"NVD_API_KEY": "your-api-key"
}
}
}
}
または npx を使用します(Bun は不要です)。
{
"mcpServers": {
"nist-nvd-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/nist-nvd-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"NVD_API_KEY": "your-api-key"
}
}
}
}
または Docker を使用します。
{
"mcpServers": {
"nist-nvd-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "NVD_API_KEY=your-api-key",
"ghcr.io/cyanheads/nist-nvd-mcp-server:latest"
]
}
}
}
Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動します。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 NVD_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24+)。
- 任意:NVD API キー — 無料で取得でき、レート制限が 5 req/30s から 50 req/30s に引き上げられます。
インストール
- リポジトリをクローンします。
git clone https://github.com/cyanheads/nist-nvd-mcp-server.git
- ディレクトリに移動します。
cd nist-nvd-mcp-server
- 依存関係をインストールします。
bun install
- 環境を設定します。
cp .env.example .env
# edit .env and set NVD_API_KEY if you have one
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
NVD_API_KEY | NVD API キーです。キーがない場合、レート制限は5 req/30s、キーがある場合は50 req/30sです。nvd.nist.gov/developers/request-an-api-keyで無料で取得できます。 | — |
NVD_REQUEST_TIMEOUT_MS | リクエストごとのタイムアウト(ミリ秒)です。API キーがない場合、履歴エンドポイントの応答が遅いため、キーなしでnvd_get_cve_historyを使用する場合は60000に引き上げてください。 | 10000 |
NVD_CLAMP_LIMITS | 上限を超える読み取りを、2000 CVE/イベント、10000 CPE、または100 CVE IDに制限します。falseにすると、スキーマの最大値が復元され、上限超過時は拒否されます。 | true |
MCP_TRANSPORT_TYPE | トランスポート:stdioまたはhttpです。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_AUTH_MODE | 認証モード:none、jwt、またはoauthです。 | none |
MCP_LOG_LEVEL | ログレベル(RFC 5424)です。 | info |
LOGS_DIR | ログファイルのディレクトリです(Node.js のみ)。 | <project-root>/logs |
OTEL_ENABLED | OpenTelemetry instrumentationを有効にします。 | false |
任意のオーバーライドの全一覧については、.env.exampleを参照してください。
Node と Bun は、サーバー設定の解析前に作業ディレクトリから.envを読み込みます。エクスポート済みの変数が優先されます。NVD_CLAMP_LIMITSの値が無効な場合、設定の検証に失敗します。trueまたはfalseを使用してください。
サーバーの実行
ローカル開発
-
ビルドして実行:
# 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 nist-nvd-mcp-server .
docker run --rm -e NVD_API_KEY=your-key -p 3010:3010 nist-nvd-mcp-server
Dockerfile のデフォルトは、HTTP トランスポート、ステートレスセッションモードで、ログは/var/log/nist-nvd-mcp-serverに出力されます。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=falseを指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 目的 |
|---|---|
src/index.ts | createApp()のエントリーポイントです。ツール/リソースを登録し、サービスを初期化します。 |
src/config | サーバー固有の環境変数を解析し、Zod で検証します。 |
src/mcp-server/tools | ツール定義(*.tool.ts)です。 |
src/mcp-server/resources | リソース定義(*.resource.ts)です。 |
src/services/nvd-http | レート制限に合わせた待機とリトライを行う NVD HTTP クライアントです。 |
src/services/nvd-cve | CVE サービスです。検索、ID による取得、CPE 監査、変更履歴、正規化を行います。 |
src/services/nvd-cpe | CPE サービスです。辞書検索と正規化を行います。 |
src/services/nvd-source | NVD の投稿者識別子を、公開されている名前に解決するソースサービスです。 |
tests/ | src/に対応する単体テストと統合テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.mdを参照してください。要点は以下のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックに
try/catchは使用しません。 - リクエスト単位のログには
ctx.logを、テナント単位のストレージにはctx.stateを使用します。 - 新しいツールとリソースは、
src/mcp-server/*/definitions/index.tsのバレルを通じて登録します。 - 外部 API 呼び出しは、未加工データの検証 → ドメイン型への正規化 → 出力スキーマの返却、の順に処理します。不足しているフィールドを決して捏造しないでください。
コントリビューション
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細はLICENSEを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。