Skip to main content
Glama
masanorihirano

CVE-info-mcp

README.md
# CVE-info-mcp

[CVE-info](https://dev.mhirano.jp/CVE-info/) の公開脆弱性情報を、ローカルで動く読み取り専用 MCP から検索・取得します。検索結果・詳細本文には `dev.mhirano.jp` の個別ページ URL を含め、公式情報、AI解説、Web調査メモと出典を分けて返します。LLM API キーは不要で、このパッケージ自体は生成・追加調査を行いません。

## 1 行でクライアントへ登録

[uv](https://docs.astral.sh/uv/getting-started/installation/) と利用するクライアントを先にインストールしてください。Python 3.11 以上が必要です。uv は必要な Python を取得できます。

```sh
uvx cve-info-mcp install --client claude-desktop
```

Claude Desktop を再起動すると `cve-info` が利用できます。Windows/macOS の設定ファイルを更新し、既存設定を保存してバックアップを作ります。同名の異なる設定があるときは上書きせずエラーにします。確認だけなら `--dry-run`、設定ファイルを明示する場合は `--config PATH` を付けてください。

CLI クライアント用の登録コマンドもあります。

```sh
uvx cve-info-mcp install --client claude-code
uvx cve-info-mcp install --client codex
```

配布名 `CVE-info` は同一バージョンの `CVE-info-MCP` を導入するエイリアスです。`uvx cve-info install --client claude-desktop` でも同じ実装が動きます。PyPI の名前は大文字小文字を区別しないため、`CVE-info-MCP` と `cve-info-mcp` は同一パッケージです。

## 配信する内容と URL

| ツール | 内容 |
| --- | --- |
| `search(query)` | CVE番号・製品・日本語・CWEの検索。結果ごとに `id`, `title`, `url`, `summary` |
| `fetch(id)` | 公式情報、AI解説、Web調査メモ。本文冒頭と `url` に個別ページ URL |
| `search_cves(...)` | KEV・AI解説・調査メモの有無で絞り込み、最大50件とページ送り |
| `get_cve(id, section, max_characters)` | `all`, `official`, `ai`, `research` の選択、最大50,000文字の枠で取得 |
| `get_status()` | ローカル索引のバージョン・更新状態・収録件数・公式サイト URL |

例: `CVE-2026-99083` の引用先は `https://dev.mhirano.jp/CVE-info/cve.html?id=CVE-2026-99083` です。外部のベンダー告知・調査記事 URL も出典として返します。クライアントにはこれらを引用して回答するよう指示しますが、最終的な引用表示はクライアント側の動作に依存します。

検索は Unicode 正規化後の部分一致・空白区切り AND 検索です。意味検索ではありません。公開日の新しい順で返します。調査メモがない場合は「未作成」、長い内容は省略したセクションをメタデータに記載します。KEV未掲載や検索結果なしを安全という意味には解釈しません。収録範囲と各情報源の状態は [元サイトの収集状況](https://dev.mhirano.jp/CVE-info/reports/collection-status.html)を確認してください。

## GitHub Pages だけでの配信

```text
CVE-info の公開 search-index.json
  → 毎時37分の GitHub Actions(LLM 呼び出しなし)
  → CVE-info-mcp の Pages: data/manifest.json + 圧縮した検索データ
  → 利用者の Python MCP: ローカル SQLite 検索
  → 詳細は元サイト assets/cves/...json から必要時に取得
```

データ配信先は `https://dev.mhirano.jp/CVE-info-mcp/data/` です。動的サーバーやクラウドDBは不要です。Actions のスケジュールは実行が遅れる場合があります。索引は初回検索時にダウンロードして構築し、その後は1時間ごとに確認、変更のあった圧縮ファイルだけ再取得します。詳細データは必要な番号帯だけ取得し1時間キャッシュします。索引と詳細は別時点の情報になり得るため、双方の鮮度を表示します。

初回検索には待ち時間があるため、クライアント接続前に `uvx cve-info-mcp update` で準備できます。更新失敗時は古いキャッシュを `stale` とエラー情報付きで返し、初回取得失敗・明示した `update` の失敗はエラーになります。配信 Actions が取得に失敗した場合も CI は失敗します。

```sh
uvx cve-info-mcp update
uvx cve-info-mcp search "Linux 認証"
uvx cve-info-mcp fetch CVE-2026-99083
uvx cve-info-mcp status
```

保存先は OS 標準のユーザーキャッシュです。`CVE_INFO_CACHE_DIR` または `--cache-dir PATH` で変更できます。配信元変更は `CVE_INFO_DATA_URL` または `--data-url HTTPS_URL`、これらの CLI オプションはサブコマンドの前に置きます。元記事へのリンクは返しますが、外部記事へのアクセスや任意URL取得ツールは提供しません。

## Web 版クライアントからの接続

上の1行はローカル MCP に対応するクライアント用です。GitHub Pages の URL を ChatGPT・Claude Web のリモート MCP URL に登録しても接続できません。Web 版から使う場合は、対応するトンネル等で利用者の端末へ到達させる構成が別途必要です。HTTP モードはローカルループバックだけに待ち受けます。

```sh
uvx cve-info-mcp serve --transport streamable-http --port 8766
```

エンドポイントは `http://127.0.0.1:8766/mcp` です。公開認証・HTTPS・トンネル設定はこのパッケージの対象外で、端末と MCP プロセスの稼働が必要です。

## 開発・公開

```sh
uv sync --locked
uv run pytest
uv build --out-dir dist/primary
uv build alias --out-dir dist/alias
uv run python scripts/check_release.py
uv run twine check dist/primary/* dist/alias/*
```

`check.yml` は Windows・macOS・Linux と Python 3.11/3.13 で検証します。`data.yml` は毎時のデータ公開、`publish.yml` は GitHub Release 作成時のパッケージ公開です。バージョンを本体・aliasの両 `pyproject.toml`、aliasの依存指定、`src/cve_info_mcp/__init__.py` で揃え、`uv lock` を実行してからタグ `vX.Y.Z` を main 上に作成し、GitHub Release を公開します。再実行では対象タグを指定してください。本体の公開成功後にエイリアスを公開します。

PyPI Trusted Publisher は次の2件を登録します。APIトークンや Actions Secret は不要です。

| PyPI Project name | Owner | Repository name | Workflow name | Environment name |
| --- | --- | --- | --- | --- |
| `CVE-info-MCP` | `masanorihirano` | `CVE-info-mcp` | `publish.yml` | `pypi` |
| `CVE-info` | `masanorihirano` | `CVE-info-mcp` | `publish.yml` | `pypi2` |

Pending Publisher の登録だけでは名前は予約されません。初回アップロード成功後にプロジェクトが作成されます。GitHub Pages の Source は GitHub Actions を指定します。

## 利用条件

このリポジトリの Python コードは [MIT License](LICENSE) です。取得する脆弱性情報・外部文書・AI解説に一括して MIT を付与するものではありません。各情報源の権利と利用条件を引き継ぎます。[元サイトの情報源・利用条件](https://github.com/masanorihirano/CVE-info/blob/main/docs/source-rights.md)と、返却する出典 URL を確認してください。

TDQS

B3.3/5.0

Scored across 5 tools

Disambiguation2/5

The set contains two overlapping search tools (`search` vs `search_cves`) and two overlapping detail tools (`fetch` vs `get_cve`). Descriptions hint at differences in pagination and section selection, but an agent could easily choose the wrong one for a simple CVE lookup.

Naming Consistency2/5

Names mix bare verbs (`search`, `fetch`) with verb_noun patterns (`search_cves`, `get_cve`, `get_status`). The same action is labeled both `fetch` and `get_cve`, making the convention inconsistent rather than predictable.

Tool Count3/5

Five tools is a reasonable count for a CVE lookup server, but the redundancy between the two search tools and the two retrieval tools means not every tool clearly earns its place. Consolidating the pairs would yield a cleaner three-tool surface.

Completeness4/5

The server covers the core read-only CVE lifecycle: search, filtered pagination, detailed retrieval by ID, section selection, and index status. Minor gaps exist around related metadata such as CWE or product browsing, but the main workflows are supported.

Maintenance

ActivityNo data
ResponsivenessNo issues