package-guard-mcp について
package-guard-mcpは、AIコーディングエージェントがインストール前にパッケージを確認するためのMCPサーバーです。レジストリへの登録状況、OSVアドバイザリ、メタデータ、類似名を調べ、パッケージの内容は取得しません。
主な機能
- 01npmとPyPIのパッケージを検証
- 02OSVの脆弱性とマルウェア情報を確認
- 03パッケージの経過日数、ダウンロード数、メタデータを確認
- 04マニフェスト内の依存関係を監査
- 05登録済みのASCII類似名を検出
活用シーン
- 01提案されたパッケージをインストール前に確認
- 02package.jsonやrequirements.txtの依存関係をレビュー
- 03パッケージバージョンの既知アドバイザリを確認
MCP 対応
MCPクライアントに `verify_package`、`check_vulns`、`package_info`、`audit_deps`、`typosquat_scan` を提供します。レジストリとOSVを照会し、パッケージの内容は取得しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
5掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| name | string | はい | パッケージ名(例:"express"、"@scope/pkg"、"requests")。 |
| version | string | いいえ | 脆弱性を確認する特定のバージョン(デフォルト:latest)。 |
| ecosystem | enum | いいえ | パッケージエコシステム:npm または pypi(デフォルトは npm)。ここには他のエコシステム用のレジストリクライアントはありません。それらには check_vulns を使用してください。npm | pypi |
詳細
package-guard-mcp
エージェントがパッケージをインストールする前に審査する MCP サーバーです。名前が登録されているか、OSV に該当パッケージのアドバイザリがないか、公開からどれくらい経っているか、どれくらいダウンロードされているかを確認します。決定論的に動作し、LLM は使わず、無料です。
LLM は存在しないパッケージ名を定期的に提案し、攻撃者はその幻覚による名前を登録して、エージェントが実行するインストールにマルウェアを紛れ込ませます。これは「スロップスクワッティング」と呼ばれています。この問題のチェックにはレジストリの検索を使います。npm または PyPI にその名前のパッケージがなければ、verify_package は likely_hallucination: true を返します。これは「このレジストリにはない」という意味に限られ、作り出された名前と入力ミスや改名を区別できません。また、プライベートレジストリにのみ存在するパッケージは、見つからないものとして扱われます。
パッケージの内容を取得したり読み取ったりすることはありません。インストールスクリプトも、コードも、tarball も確認しません。OSV アドバイザリがなく、ダウンロード数も健全な悪意あるパッケージは、safe と判定されます。
インストール
{ "mcpServers": { "package-guard": { "command": "npx", "args": ["-y", "package-guard-mcp"] } } }
ツール
verify_package:メインのガードです。レジストリに名前が登録されているか(登録されていない場合はlikely_hallucinationを返し、npm では「もしかして」の候補も表示します)、OSV に既知の脆弱性やマルウェアがあるか、公開からの期間と週間ダウンロード数、名前が npm の検索結果と2文字以内の編集距離にあるか、非推奨かどうか、ライセンスをもとに、safe、caution、danger のいずれかを返します。check_vulns:OSV から、名前とバージョンに関する既知の脆弱性やマルウェアのアドバイザリを取得します。package_info:最新バージョン、非推奨かどうか、ライセンス、リポジトリ、週間ダウンロード数、公開からの期間など、レジストリのメタデータを取得します。audit_deps:名前のリスト、package.jsonのdependenciesとdevDependencies、またはrequirements.txtを確認します。typosquat_scan:ASCII の類似名を生成し、登録されている名前を報告します。
対象範囲と制限
check_vulns は OSV.dev に直接クエリを送信し、7つすべてのエコシステムに対応しています:npm、PyPI、Go、crates.io、RubyGems、Maven、NuGet。その他のチェックにはパッケージレジストリが必要で、対応するクライアントは npm と PyPI の2つです。そのため、verify_package、package_info、audit_deps、typosquat_scan が受け付けるのは npm または pypi のみです。候補の提示と紛らわしい名前の検出には npm の検索 API を使うため、npm のみが対象です。
audit_deps が読み取るのはマニフェストであり、ロックファイルではありません。また、依存関係ツリーの解決は行いません。指定されたエントリのみをチェックし、それらが依存するパッケージはチェックしません。名前は最大40件までです。バージョン範囲はその中の数字に縮約されるため、^4.17.20 は 4.17.20 としてチェックされます。
vulnerabilities.checked: false と count: null は、OSV へのリクエストに失敗し、パッケージをチェックできなかったことを示します。この場合、verify_package は safe と判定せず、判定を caution に引き下げます。count: 0 は、OSV から応答があり、該当するものがなかったことを示します。audit_deps にはまだ同様のガードがありません。バッチでの OSV 呼び出しに失敗すると、すべてのパッケージで脆弱性数が0と報告されます。
ルールの更新
このサーバーは1日に1回ほど、ルールフィードに新しいルールセットがあるかを問い合わせ、新しいものがあれば適用します。リクエストには2つの情報が含まれます。問い合わせ元のサーフェス(この場合は facade)と、すでにインストールされているルールのバージョンです。マシン ID、ユーザー ID、ファイル名、スキャンしたものに関する情報は送信されません。
バンドルは Ed25519 で署名され、このパッケージにコンパイルされた公開鍵で検証されるため、どのミラーから配信されたかは関係ありません。署名、スキーマ、ReDoS チェックのいずれかに失敗したバンドルは破棄され、既存のルールはそのまま維持されます。--offline を指定するか、AGENT_GUARDS_NO_FEED=1 を設定するか、~/.agent-guards/config.json に {"feed": false} を記述すると、更新は無効になります。バンドルの形式と自分で検証する方法については、こちらを参照してください:https://github.com/mlawsonking/MCP/blob/main/rules/README.md
https://package-guard.vercel.app に接続します(変更するには PACKAGE_GUARD_API を設定してください)。このリポジトリにある6つのエージェントガードのうちの1つです。MIT ライセンスです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。