Skip to main content
Glama
orcohen5

Vulnerability Registry MCP Server

by orcohen5

脆弱性レジストリ MCP サーバー

作成者: Or Cohen

レガシーな脆弱性データベースをラップし、MCP対応のLLMクライアント向けツールとして公開するMCP (Model Context Protocol) サーバーです。カスタムのパイプ区切りデータファイルに対するスマートなアクセスレイヤーとして構築されており、セキュリティアナリストが自然言語で脆弱性を照会できるようにします。

クイックスタート

前提条件

  • Node.js 18以上

  • Claude Desktop (またはその他のMCP対応クライアント)

セットアップ

git clone https://github.com/orcohen5/vulnerability-registry.git
cd vulnerability-registry
npm install
npm run build

Claude Desktopへの接続

Claude Desktopの設定ファイル (%APPDATA%\Claude\claude_desktop_config.json (Windowsの場合)、~/Library/Application Support/Claude/claude_desktop_config.json (macOSの場合)) に以下を追加します。

{
  "mcpServers": {
    "vulnerability-registry": {
      "command": "node",
      "args": [
        "<FULL_PATH>/vulnerability-registry/dist/index.js",
        "<FULL_PATH>/vulnerability-registry/data"
      ]
    }
  }
}

<FULL_PATH> をクローンしたリポジトリの絶対パスに置き換えてください。

Claude Desktopを再起動し、次のように尋ねてください。

"脆弱性に関するMCPツールには何がありますか?"

ツール発見 6つの脆弱性レジストリツールを認識したClaude Desktop

利用可能なツール

ツール

説明

主要パラメータ

クエリ例

list_vendors

登録されているすべてのソフトウェアベンダーを一覧表示

category (任意)

"オープンソースのベンダーをすべて見せて"

get_vendor

IDまたは名前でベンダーを検索

vendor_id, name

"Linux KernelのベンダーIDを探して"

search_vulnerabilities

柔軟なフィルターで検索

severity, status, min_cvss, keyword, published_after

"深刻な未解決の脆弱性を表示して"

get_vulnerability

CVEの詳細情報を取得

cve_id

"Log4ShellのCVSSスコアは?"

get_vulnerability_stats

統計を集計

vendor_id (任意)

"深刻度別の脆弱性件数は?"

get_vendor_risk_summary

ベンダーのリスクプロファイル

vendor_id

"Microsoftのリスクプロファイルを表示して"

クエリ例

"深刻な未解決の脆弱性はいくつありますか?"

severity: "critical" および status: "open" を指定して search_vulnerabilities を使用します。

深刻な未解決の脆弱性

"Log4ShellのCVSSスコアは?"

cve_id: "CVE-2021-44228" を指定して get_vulnerability を使用します。

Log4ShellのCVSS

"Microsoftのリスクプロファイルを表示して"

vendor_id: "V1" を指定して get_vendor_risk_summary を使用します。

Microsoftのリスクプロファイル

"2022年以降にLinux Kernelで見つかった脆弱性は?"

このクエリはマルチツールオーケストレーションを示しています。Claudeはまず list_vendors を呼び出して「Linux Kernel」をベンダーID V5 に解決し、次に vendor_id: "V5" および published_after: "2022-01-01" を指定して search_vulnerabilities を呼び出します。

Linux Kernelのマルチツールクエリ

アーキテクチャ

┌─────────────────┐     ┌──────────────┐     ┌──────────────┐
│  Claude Desktop │────▶│  MCP Server  │────▶│  Data Files  │
│  (MCP Client)   │◀────│  (stdio)     │◀────│  (.db)       │
└─────────────────┘     └──────┬───────┘     └──────────────┘
                               │
                    ┌──────────┼──────────┐
                    ▼          ▼          ▼
               tools.ts   repository.ts  parser.ts
              (MCP layer)  (query engine) (file reader)

コードベースは厳格な3層分離に従っています。

  • parser.ts — カスタムのパイプ区切り形式を動的に読み取ります。MCPについては何も知りません。

  • repository.ts — O(1)ルックアップ用のインデックス付きMapを備えたインメモリデータストアです。MCPについては何も知りません。

  • tools.ts — 高レベルの McpServer APIを使用してMCPツールを登録します。MCPとリポジトリの間で変換を行います。

つまり、データソースを(ファイルからデータベースへ)変更する場合、parser.ts を変更するだけで済み、MCPレイヤーへの変更は不要です。

設計上の決定

動的なメタデータ解析 — ファイルパーサーは、フィールド位置をハードコーディングするのではなく、実行時に # FORMAT: ヘッダーから列名を読み取ります。バージョンチェック (# VERSION: 1.0) と組み合わせることで、コードを変更することなく形式の変更を検出し、警告することができます。

インメモリインデックスを備えたリポジトリパターン — データは起動時に一度読み込まれ、複数のMap (vendorById, vulnByCveId, vulnsByVendor, vulnsBySeverity, vulnsByStatus) にインデックス化されます。主要なルックアップはO(1)です。フィルタリングされた検索は、最小のインデックス付きサブセットから開始して交差させるため、大規模なデータでも複合クエリを効率的に実行できます。

高レベルの McpServer API — 手動のJSONスキーマ定義やリクエストルーティングを行う低レベルの Server クラスではなく、型安全な入力検証のためにZodスキーマを備えた McpServer.registerTool() を使用しています。

オプションフィルターによる柔軟な検索search_vulnerabilities はすべてのパラメータをオプションとして受け入れるため、あらゆる組み合わせが可能です。「深刻なものをすべて表示」から「2023年以降のCVSS 8以上のLinux CVEを検索」まで、1つのツールで処理できます。結果は常にCVSSスコア順(高い順)にソートされるため、最も深刻な問題が最初に表示されます。

リッチなレスポンスget_vulnerability はCVEデータとともに完全なベンダーオブジェクトを返します。get_vendor_risk_summary には未解決の脆弱性リストが含まれます。これにより、LLMが一般的な質問に答えるために必要なツール呼び出しの回数が削減されます。

厳格な型安全性SeverityStatusas const 配列から派生したユニオン型であり、実行時の型ガード (isSeverity, isStatus) を備えています。同じ信頼できる情報源(ソース・オブ・トゥルース)の配列が、TypeScriptの型とZodの列挙型バリデーターの両方に供給されます。

既知のデータ異常

ソースデータファイルを操作する際、少なくとも1つの帰属の不整合を確認しました。 CVE-2024-21762 (Fortinet SSL VPN OOB) は vulnerabilities.db 内でベンダー V4 (Google) にマッピングされていますが、これはFortinetの脆弱性です。サーバーは保存されているデータを忠実に返します。ソースデータの修正は、読み取り専用クエリレイヤーの範囲外です。本番システムであれば、ロード時にデータ検証ステップを追加し、NVD APIと照合して正規のベンダー帰属を確認するなど、人間によるレビューのために不整合をフラグ立てします。

今後の拡張予定

  • SQLite/PostgreSQLの永続化 — 利用可能なRAMを超えるデータセットのためにインメモリストレージを置き換え、同時アクセス用に接続プールを導入します。

  • ページネーション — 大規模な結果セットのために search_vulnerabilitieslimit/offset パラメータを追加します。

  • あいまい検索 — タイプミスを許容するクエリのために、脆弱性タイトルに対してレーベンシュタイン距離マッチングを導入します。

  • NVD API統合 — NISTのNational Vulnerability Databaseからの自動CVEデータ更新。

  • MCPリソース — 全文コンテキストが必要な場合に備え、生のデータファイルをMCPリソースとして公開します。

  • 構造化ログと可観測性 — ツール呼び出しチェーンをデバッグするための相関ID付きのJSON形式ログ。

  • 認証とレート制限 — 共有デプロイメントシナリオでサーバーを保護します。

  • CI/CDパイプライン — プッシュごとにlint、型チェック、テストを実行するGitHub Actions。

技術スタック

コンポーネント

選択

言語

TypeScript (ES2022, Node16 modules)

MCP SDK

@modelcontextprotocol/sdkMcpServer 高レベルAPI

検証

Zod

トランスポート

stdio

ビルド

tsc

テスト

Vitest

テスト

npm test        # Run all tests (30 tests across parser + repository)
npm run build   # Compile TypeScript
npm start       # Start the MCP server (stdio mode)
Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - A tier

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/orcohen5/vulnerability-registry'

If you have feedback or need assistance with the MCP directory API, please join our Discord server