mcpField
N
NVD Database MCP Server

NVD Database MCP Server

ローカル
github.com/marcoegデータベース1583 週間前に更新

NVD Database MCP Server について

NVD Database MCP Serverは、API経由でNISTのNational Vulnerability Databaseを検索します。CVEの確認やキーワード検索を行うセキュリティ業務向けで、NVD APIキーが必要です。

主な機能

  1. 01CVE IDによる脆弱性詳細の取得
  2. 02キーワードによるCVE検索
  3. 03完全一致と結果数の指定
  4. 04詳細または簡潔なレコードの取得
  5. 05stdioとSSEトランスポート対応

活用シーン

  1. 01CVEのスコアと参照情報の確認
  2. 02キーワードに関連する脆弱性の検索
  3. 03セキュリティ分析中のNVDレコード照会

MCP 対応

互換クライアント向けに、NVDを照会する`get_cve`と`search_cve`ツールを提供します。stdioとSSEに対応し、NVD APIキーが必要です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"nvd": {
"command": "uvx",
"args": [
"mcp-nvd"
],
"env": {
"NVD_API_KEY": "<NVD_API_KEY>"
}
}
}
}
起動コマンドuvx mcp-nvd
設定が必要な環境変数
NVD_API_KEYシークレット

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypimcp-nvd

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

NVD データベース MCP サーバー

PyPI - Version

README の画像

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, default False):True の場合、短縮形式で返します。
    • 戻り値:スコア、脆弱性、参照情報を含む詳細な CVE 情報。
  • search_cve:

    • 説明:キーワードで NVD データベースを検索します。
    • パラメーター:
      • keyword (str):検索語(例:Red Hat)。
      • exact_match (bool, default False):True の場合、完全一致するフレーズのみを対象とします。
      • concise (bool, default False):True の場合、短縮形式の CVE レコードを返します。
      • results (int, default 10):CVE レコードの最大件数(1-2000)。
    • 戻り値:一致した CVE のリストと合計件数。

設定

  1. 次の場所にある Claude Desktop の設定ファイルを作成または編集します。

    • macOS の場合:~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows の場合:%APPDATA%/Claude/claude_desktop_config.json
  2. 以下を追加します。

{
  "mcpServers": {
    "mcp-nvd": {
      "command": "/path/to/uvx",
      "args": ["mcp-nvd"],
      "env": {
        "NVD_API_KEY": "your-api-key"
      }
    }
  }
}
  1. /path/to/uvx を uvx 実行ファイルの絶対パスに置き換えます。ターミナルで which uvx コマンドを実行すると、パスを確認できます。これにより、サーバーの起動時に正しいバージョンの uvx が使用されます。

  2. 変更を適用するため、Claude Desktop を再起動します。

開発

セットアップ
  1. 前提条件:

  2. リポジトリをクローン:

git clone https://github.com/marcoeg/mcp-nvd
cd mcp-nvd
  1. 環境変数を設定:

    • プロジェクトのルートに .env ファイルを作成します。
      NVD_API_KEY=your-api-key
      
    • your-api-key を NVD API キーに置き換えます。
  2. 依存関係をインストール:

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 イメージを作成するには:

  1. プロジェクトのルートに移動します:
    cd ./mcp-nvd
    
  2. 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)を実行するには:

  1. サービスの起動:docker-compose up で mcp-nvd サービスが実行されていることを確認します。
  2. コンテナーに入る:
    • 次のコマンドでコンテナー名(例: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 . を実行してイメージを再ビルドします。
  3. 代替方法:コンテナー化されたサービスに対して、ローカルでテストを実行します:
    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

コメント

MCP は初めてですか?

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

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