NVD Database MCP Server について
NVD Database MCP Serverは、API経由でNISTのNational Vulnerability Databaseを検索します。CVEの確認やキーワード検索を行うセキュリティ業務向けで、NVD APIキーが必要です。
主な機能
- 01CVE IDによる脆弱性詳細の取得
- 02キーワードによるCVE検索
- 03完全一致と結果数の指定
- 04詳細または簡潔なレコードの取得
- 05stdioとSSEトランスポート対応
活用シーン
- 01CVEのスコアと参照情報の確認
- 02キーワードに関連する脆弱性の検索
- 03セキュリティ分析中のNVDレコード照会
MCP 対応
互換クライアント向けに、NVDを照会する`get_cve`と`search_cve`ツールを提供します。stdioとSSEに対応し、NVD APIキーが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
NVD データベース MCP サーバー
NIST National Vulnerability Database(NVD)の API を使用してデータを照会する、Model Context Protocol サーバーの実装です。https://nvd.nist.gov/
前提条件として、NVD API キーが必要です。 (こちらから申請してください)。
状況
stdio と sse の両方のトランスポートを使用して、Claude デスクトップアプリや、MCP に準拠するその他のホストおよびクライアントで動作します。
機能
- ID を指定して CVE を検索し、詳細な脆弱性データを取得します。
- 結果のオプションをカスタマイズして、キーワードで NVD データベースを検索します。
- リアルタイム通信のための Server-Sent Events(SSE)トランスポートをサポートします。
- Claude デスクトップなど、MCP に準拠するクライアントと互換性があります。
ツール
このサーバーは、NVD データベースを照会する以下のツールを実装しています。
-
get_cve:- 説明:ID を指定して CVE レコードを取得します。
- パラメーター:
cve_id(str):CVE ID(例:CVE-2019-1010218)。concise(bool, defaultFalse):Trueの場合、短縮形式で返します。
- 戻り値:スコア、脆弱性、参照情報を含む詳細な CVE 情報。
-
search_cve:- 説明:キーワードで NVD データベースを検索します。
- パラメーター:
keyword(str):検索語(例:Red Hat)。exact_match(bool, defaultFalse):Trueの場合、完全一致するフレーズのみを対象とします。concise(bool, defaultFalse):Trueの場合、短縮形式の CVE レコードを返します。results(int, default10):CVE レコードの最大件数(1-2000)。
- 戻り値:一致した CVE のリストと合計件数。
設定
-
次の場所にある Claude Desktop の設定ファイルを作成または編集します。
- macOS の場合:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows の場合:
%APPDATA%/Claude/claude_desktop_config.json
- macOS の場合:
-
以下を追加します。
{
"mcpServers": {
"mcp-nvd": {
"command": "/path/to/uvx",
"args": ["mcp-nvd"],
"env": {
"NVD_API_KEY": "your-api-key"
}
}
}
}
-
/path/to/uvxをuvx実行ファイルの絶対パスに置き換えます。ターミナルでwhich uvxコマンドを実行すると、パスを確認できます。これにより、サーバーの起動時に正しいバージョンのuvxが使用されます。 -
変更を適用するため、Claude Desktop を再起動します。
開発
セットアップ
-
前提条件:
- Python 3.10 以降。
- NVD API キー(こちらから申請してください)。
uvパッケージマネージャー(インストール方法)。
-
リポジトリをクローン:
git clone https://github.com/marcoeg/mcp-nvd
cd mcp-nvd
-
環境変数を設定:
- プロジェクトのルートに
.envファイルを作成します。NVD_API_KEY=your-api-key your-api-keyを NVD API キーに置き換えます。
- プロジェクトのルートに
-
依存関係をインストール:
uv sync
uv pip install -e .
MCP Inspector で実行
cd /path/to/the/repo
source .env
npx @modelcontextprotocol/inspector uv \
--directory /path/to/repo/mcp-nvd run mcp-nvd
次にブラウザーで MCP Inspector に表示された URL を開きます。通常は http://localhost:8077?proxyPort=8078 です。
Inspector では、
stdioとsseのトランスポートタイプを自由に切り替えられます。
SSE クライアントでテスト
サーバーを実行:
cd /path/to/the/repo
source .env
uv run mcp-nvd --transport sse --port 9090
- デフォルトでポート
9090を使用し、SSE トランスポートで実行されます。
クライアントを実行:
get_cve をテスト:
uv run client.py http://localhost:9090/sse CVE-2019-1010218
search_cve をテスト(デフォルトの結果件数:10):
uv run client.py http://localhost:9090/sse "search:Red Hat"
search_cve をテスト(完全一致、結果件数:5):
uv run client.py http://localhost:9090/sse "search:Microsoft Windows:exact:5"
Docker のセットアップ
ビルド
docker build -t mcp-nvd:latest .
実行
.env を使用する場合:
docker run -d -p 9090:9090 -v /path/to/.env:/app/.env mcp-nvd:latest
環境変数を使用する場合:
docker run -d -p 9090:9090 -e NVD_API_KEY="your-key" mcp-nvd:latest
ポートを指定する場合:
docker run -d -p 8080:8080 -v /path/to/.env:/app/.env mcp-nvd:latest uv run mcp-nvd --transport sse --port 8080 --host 0.0.0.0
検証
docker logs <container_id>
# Expect: INFO: Uvicorn running on http://0.0.0.0:9090
テスト:
uv run client.py http://localhost:9090/sse CVE-2019-1010218
メモ
.envにNVD_API_KEY=your-keyが設定されていることを確認するか、-eを使用してください。- デフォルトのポート:
9090。
以下は、docker-compose.yaml や README.md などのファイルに含めるのに適した、コードブロック内の Markdown コメント形式でまとめたものです。
テストでの Docker Compose の使用
tests/ ディレクトリにあるこの docker-compose.yaml は、ビルド済みの Docker イメージを使用して MCP-NVD サーバーをテストするサービスを定義しています。clickhouse のようなスタンドアロンサービスに似たテスト用途向けに設計されており、毎回イメージを再ビルドするのではなく、事前にビルド済みであることを前提としています。
前提条件
- ビルド済みイメージ:このサービスでは、ローカルまたはレジストリで利用できる、
mcp-nvd:testタグ付きのビルド済みイメージを使用します。このイメージは、親ディレクトリにあるDockerfileをベースとしており、uvを使って MCP-NVD サーバーをセットアップし、ポート 9090 で SSE モードで実行します。
イメージのビルド方法
mcp-nvd:test イメージを作成するには:
- プロジェクトのルートに移動します:
cd ./mcp-nvd - Dockerfile を使ってイメージをビルドします:
docker build -t mcp-nvd:test .- これにより、
pyproject.tomlのすべての依存関係とmcp_nvd/モジュールを含むイメージがビルドされ、サーバーを実行するデフォルトのコマンドが設定されます。
- これにより、
サービスの実行
tests/ ディレクトリから実行します:
cd tests
docker-compose up
- アクセス:サーバーは
http://localhost:9090で実行されます。 - 停止:
docker-compose down。 - 環境:
NVD_API_KEYが../.envに設定されていることを確認するか、docker-compose --env-file ../.env upを使用します。
Docker Compose 環境での test_tools.py の実行
Docker 環境内でユニットテスト(test_tools.py)を実行するには:
- サービスの起動:
docker-compose upでmcp-nvdサービスが実行されていることを確認します。 - コンテナーに入る:
- 次のコマンドでコンテナー名(例:
mcp-nvd-mcp-nvd-1)を確認します:docker ps - コンテナー内でテストを実行します:
docker exec -it mcp-nvd-mcp-nvd-1 python /app/tests/test_tools.py - 注:
test_tools.pyが/app/tests/にコピーされていることを前提としています。コピーされていない場合は、次の行を含めるように Dockerfile を変更します:
その後、ルートからCOPY tests/ ./tests/docker build -t mcp-nvd:test .を実行してイメージを再ビルドします。
- 次のコマンドでコンテナー名(例:
- 代替方法:コンテナー化されたサービスに対して、ローカルでテストを実行します:
cd tests python test_tools.py- サービスの実行中に
http://localhost:9090に対してテストします。
- サービスの実行中に
主な詳細
- ポート:SSE アクセス用に 9090 を公開します。
- ログ:
log-dataボリュームに保存されます(任意)。 - イメージ:
docker-composeの実行前に一度ビルドし、mcp-nvd:testとタグ付けする必要があります。
SSE ベースの MCP クライアントとサーバー向けの動作パターンを提供してくださった @sidharthrajaram に感謝します:https://github.com/sidharthrajaram/mcp-sse
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。