mcpField
N
nist-nvd-mcp-server

nist-nvd-mcp-server

リモート
github.com/cyanheadsセキュリティ12 日前に更新
リポジトリ

nist-nvd-mcp-server について

NIST National Vulnerability DatabaseのCVEおよびCPEデータを検索・監査するMCPサーバーです。セキュリティ担当者が脆弱性を絞り込み、製品の影響とCVEの変更履歴を確認できます。

主な機能

  1. 01キーワード、深刻度、CWE、KEV状態によるCVE検索
  2. 02詳細なCVEレコードの一括取得
  3. 03NVD CPEディクショナリの検索
  4. 04製品バージョンの脆弱性監査
  5. 05CVE変更履歴の確認

活用シーン

  1. 01製品バージョンに既知のCVEがあるか確認
  2. 02深刻度やCISA KEV状態で脆弱性を絞り込み
  3. 03製品名からCPE識別子を解決
  4. 04CVEレコードの変更を追跡

MCP 対応

完全なCVEレコードと利用ガイドを含む5つのツールと2つのリソースをMCPクライアントに提供します。STDIOとStreamable HTTPに対応します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://nist-nvd.caseyjhand.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@cyanheads/nist-nvd-mcp-server0.4.0

ツール

5
パラメーター型必須説明
briefbooleanいいえtrue の場合、完全な詳細情報の代わりに簡略化したレコード(ID、ステータス、最高 CVSS スコア、KEV 名、公開日、短縮された説明)を返します。10 件を超える ID のバッチに推奨されます。
cveIdsanyはい取得する CVE ID 1 件、または最大 100 件の CVE ID の配列。
allLanguagesbooleanいいえtrue の場合、各レコードについて NVD が提供するすべてのローカライズ済み説明を保持し、完全なレコードではすべてを表示します。デフォルトでは英語のみを保持し、英語の項目がないレコードでは利用可能な言語にフォールバックします。簡略レコードには常に短縮された説明が 1 件だけ含まれます。
includeReferencesbooleanいいえfalse の場合、レスポンスサイズを抑えるため references 配列を省略します。

詳細

@cyanheads/nist-nvd-mcp-server

NIST National Vulnerability Database を通じて、キーワード、深刻度、CWE、CISA KEV のステータス、CPE で CVE を検索・監査します。STDIO または Streamable HTTP に対応しています。

5 個のツール • 2 個のリソース

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

公開ホストサーバー: 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_cveID を指定して 1 件以上の CVE を取得します。CVSS スコア、CWE、CPE 設定、KEV フィールド、参照情報をすべて含みます。
nvd_search_cpes製品キーワードまたは部分一致文字列で NVD CPE 辞書を検索します。
nvd_audit_cpeCPE 名または仮想一致文字列を指定して、特定の製品バージョンに影響するすべての CVE を検索します。
nvd_get_cve_historyCVE の変更履歴を取得します。スコアの改訂、ステータスの遷移、参照情報の追加が含まれます。
リソース
リソース説明
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 に引き上げられます。
インストール
  1. リポジトリをクローンします。
git clone https://github.com/cyanheads/nist-nvd-mcp-server.git
  1. ディレクトリに移動します。
cd nist-nvd-mcp-server
  1. 依存関係をインストールします。
bun install
  1. 環境を設定します。
cp .env.example .env
# edit .env and set NVD_API_KEY if you have one

設定

変数説明デフォルト
NVD_API_KEYNVD 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_PORTHTTP サーバーのポートです。3010
MCP_AUTH_MODE認証モード:none、jwt、またはoauthです。none
MCP_LOG_LEVELログレベル(RFC 5424)です。info
LOGS_DIRログファイルのディレクトリです(Node.js のみ)。<project-root>/logs
OTEL_ENABLEDOpenTelemetry 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.tscreateApp()のエントリーポイントです。ツール/リソースを登録し、サービスを初期化します。
src/configサーバー固有の環境変数を解析し、Zod で検証します。
src/mcp-server/toolsツール定義(*.tool.ts)です。
src/mcp-server/resourcesリソース定義(*.resource.ts)です。
src/services/nvd-httpレート制限に合わせた待機とリトライを行う NVD HTTP クライアントです。
src/services/nvd-cveCVE サービスです。検索、ID による取得、CPE 監査、変更履歴、正規化を行います。
src/services/nvd-cpeCPE サービスです。辞書検索と正規化を行います。
src/services/nvd-sourceNVD の投稿者識別子を、公開されている名前に解決するソースサービスです。
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を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。