NPM Sentinel MCP について
NPM Sentinel MCPは、開発者やAIクライアント向けにNPMパッケージを調査するMCPサーバーです。セキュリティ、依存関係、品質、サイズの情報を入力検証やキャッシュ制御とともに提供します。
主な機能
- 01脆弱性と依存関係のスキャン
- 02パッケージの健全性・品質指標
- 03ダウンロード傾向とバンドルサイズ
- 04バージョンとライセンスの分析
- 05検証付き一括クエリとキャッシュ管理
活用シーン
- 01パッケージの推移的な脆弱性の確認
- 02採用前のパッケージ品質の比較
- 03依存関係とライセンス互換性の確認
MCP 対応
MCPクライアントに19種類のツール、リソース、パッケージ分析用プロンプトを公開します。STDIOとStreamable HTTPに対応し、MCP v1とv2の両方をサポートします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
NPM Sentinel MCP
@modelcontextprotocol/server と @modelcontextprotocol/core(v2)を基盤に構築された、強力な Model Context Protocol(MCP v2) サーバーです。AI を活用して NPM パッケージ分析に革新をもたらします。Claude、Anthropic AI、および MCP v2 互換のあらゆるクライアントとシームレスに統合でき、パッケージのセキュリティ、依存関係、パフォーマンスに関するリアルタイムの情報を提供します。
このサーバーは、モジュール式 ESM アーキテクチャ(src/)、デュアル出力プロトコル応答(content + structuredContent)、Zod 出力スキーマ(outputSchema)、埋め込み SVG Data URI アイコン、リアルタイムのコンテキストログ記録を備えています。
主な機能
- MCP v2 ネイティブプロトコル:
outputSchemaによる Zod 検証、structuredContentのデュアル返却、診断コンテキストのログ記録(ctx.mcpReq.log)を備えた MCP v2 に完全にアップグレードされています。 - 自己完結型ベクターアイコン:クライアント UI の表示を強化するため、全 19 のツール、リソース、プロンプトに、あらかじめ設定した SVG Data URI(
data:image/svg+xml)を埋め込んでいます。 - 高度なセキュリティスキャン:Google の
deps.devと OSV.dev を活用した再帰的な依存関係チェック、エコシステムの認識、正確なバージョン解決を提供します。 - スマートな代替パッケージのフィルタリング(
npmAlternatives):機能ドメインのキーワードに基づくインテリジェントな検索と、エコシステムのプラグイン/拡張機能を厳密に除外するフィルタリングを行います(例:expressの代替を検索する際にexpress-rate-limitを除外)。 - 厳密な入力検証とバッチレート制御:パストラバーサル、SSRF、コマンドインジェクションに対して、Zod で入力をサニタイズします。検索クエリ(
npmSearch)は 100 文字までに制限され、制御文字が除外されます。バッチ分析ツールでは、レジストリ列挙による DoS を防ぐため、リクエストあたり 25 パッケージまでに厳しく制限します。 - 依存関係と推移的依存関係のマッピング:
deps.devを通じて依存関係ツリー全体を分析し、マッピングします。 - パッケージの品質とメンテナンス指標:OpenSSF Scorecard、GitHub リポジトリの指標、npms.io を用いてリアルタイムにスコアを算出します。
- ダウンロード傾向とパフォーマンス:ダウンロード統計とバンドルサイズをリアルタイムで分析します。
- スマートな SemVer の略記と範囲の解決:メジャーバージョンの略記、プレフィックス、範囲(例:
express@2、express@v4、[email protected]、react@^18、lodash@~4.17)を、完全一致するバージョンキーが見つからない場合も失敗せず、条件に一致する最も新しいリリースへ透過的に解決します。 - 間接的なプロンプトインジェクションへの防御(OWASP LLM01):未加工のサードパーティ製 Markdown/テキストを返すすべてのツール(
npmPackageReadme、npmChangelogAnalysis)で、信頼できないコンテンツを<untrusted_external_content>タグで囲み、_meta.untrustedExternalContent = trueフラグを付け、ツールスキーマに厳格な警告を適用します。 - 効率的なキャッシュシステム:ワークスペースのロックファイル(
pnpm-lock.yaml、package-lock.json、yarn.lock)が変更されるとキャッシュを自動的に無効化し、手動でキャッシュを回避することもできます(ignoreCache: true)。
セキュリティとOWASP LLM01への準拠
このサーバーは、OWASP LLM01:2025(間接的なプロンプトインジェクション)に準拠した多層防御コントロールを実装しています。
- XMLによるデータの区分:外部パッケージ(
README.md、GitHubの変更履歴、リリースノート)のコンテンツは、<untrusted_external_content source="..." package="..." type="...">タグで囲まれます。これにより、利用するLLMモデルは信頼できないデータと指示を区別できます。 - メタデータによる通知(
_meta):レスポンスには、プログラムからのクライアント側検出とポリシー適用に使用する_meta.untrustedExternalContent = trueと_meta.sources配列が含まれます。 - ツールとプロンプトの安全性に関する警告:ツールの説明とプロンプト定義では、ドキュメントを受動的なデータとして扱い、埋め込まれた実行コマンドを無視するよう、LLM エージェントに明示的に指示します。
- バッチサイズの上限設定とクエリのサニタイズ:18 個すべての複数パッケージ分析ツールで、リクエストあたりのパッケージ数を 25 個に制限しています(
PackageListSchema)。検索クエリはサニタイズされ、100 文字に制限されます(SearchQuerySchema)。 - プロトタイプ汚染対策:辞書の検索で
Object.hasOwn()によるチェックを適用し、constructorや__proto__などの予約済みプロパティをブロックします。
高いパフォーマンスを維持しながらデータの正確性を確保するために、次の機能を備えています。
- 自動無効化:ワークスペース内の
pnpm-lock.yaml、package-lock.json、またはyarn.lockが変更されるたびに、キャッシュが自動的に無効化されます。 - 強制更新:すべてのツールで、任意の
ignoreCache: trueパラメーターを指定してキャッシュをバイパスし、NPM レジストリから最新の情報を取得できます。
使用例(JSON-RPC)
{
"name": "npmVersions",
"arguments": {
"packages": ["react"],
"ignoreCache": true
}
}
インストールとトランスポート
デュアル世代 MCP アーキテクチャ(v1 2025-11-25 + v2 2026-07-28)
この MCP サーバーはネイティブのデュアル世代プロトコル互換性を備えており、STDIO と Streamable HTTP の両トランスポートで、最新の MCP v2 クライアント(2026-07-28)と従来の MCP v1 クライアント(2025-11-25)の両方に、すぐに対応できます。
- STDIO モード(
npx @nekzus/mcp-server):serveStdio({ legacy: "serve" })を使用します。最新のserver/discoverプローブをセッションレスで処理し、ローカル実行(Claude Desktop、Cursor、Docker)では従来のinitializeハンドシェイクとシームレスに連携します。 - Streamable HTTP / SSE モード(
@nekzus/mcp-server/http):createMcpHandler({ legacy: "stateless" })を使用します。サーバーレス環境と Web 標準ランタイム(Cloudflare Workers、Hono、Express、Vercel API Routes、Smithery.ai)向けに設計されています。
例:HTTP ハンドラーのマウント(Cloudflare Workers / Hono / Express)
import { createMcpHttpHandler } from '@nekzus/mcp-server/http';
const handleRequest = createMcpHttpHandler();
export default {
async fetch(request, env, ctx) {
return handleRequest(request);
}
};
開発コマンド:
# Install dependencies
pnpm install
# Compile TypeScript to dist/
pnpm run build
# Start STDIO server (Dual-Era)
pnpm run start
# Development server with Smithery CLI playground
pnpm run dev
# Run full unit and integration test suite (238 tests)
pnpm test -- --run
# Run full E2E tarball verification
node __tests__/full-e2e-pack-validation.js
VS Code / Cursor へのインストール
以下を VS Code / Cursor の MCP 設定に追加してください。
{
"inputs": [],
"servers": {
"npm-sentinel": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@nekzus/mcp-server@latest"]
}
}
}
Claude Desktop へのインストール
以下を claude_desktop_config.json に追加してください。
{
"mcpServers": {
"npm-sentinel": {
"command": "npx",
"args": ["-y", "@nekzus/mcp-server@latest"]
}
}
}
設定ファイルの場所:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Smithery.ai へのデプロイ
{
"mcpServers": {
"npm-sentinel": {
"type": "http",
"url": "https://smithery.ai/server/@Nekzus/npm-sentinel-mcp"
}
}
}
Docker の使用方法
# Build Docker image
docker build -t nekzus/npm-sentinel-mcp .
# Run with local volume mount
docker run -i --rm -w /projects -v ${PWD}:/projects nekzus/npm-sentinel-mcp node dist/index.js
Web 標準 Streamable HTTP と Cloudflare Workers の統合
このパッケージは、MCP v2 の公式 Web 標準 Streamable HTTP トランスポートを必要とするサーバーレスプラットフォーム(Cloudflare Workers、Hono、Vercel、Express、Fastify、Next.js API routes)向けに、createMcpHttpHandler と WebStandardStreamableHTTPServerTransport をエクスポートします。
import { createMcpHttpHandler } from '@nekzus/mcp-server/http';
const handleMcpRequest = createMcpHttpHandler();
export default {
async fetch(request: Request): Promise<Response> {
return handleMcpRequest(request);
},
};
MCP v2 に 100%準拠:WebStandardStreamableHTTPServerTransport を使用するこのハンドラーは、パフォーマンスを最大限に高めながら、3 つすべての MCP プリミティブ(ツール、リソース、プロンプト)をネイティブに有効化し、SSE ストリーミングをサポートするとともに、Web 標準の Request $\rightarrow$ Response との完全な互換性を備えています。
設定
サーバーは以下の設定パラメーターをサポートしています。
| 環境変数 | 設定オブジェクトのプロパティ | デフォルト | 説明 |
|---|---|---|---|
NPM_REGISTRY_URL | config.NPM_REGISTRY_URL | https://registry.npmjs.org | すべてのリクエストで使用する NPM レジストリの URL |
MCP サーバーの機能(v2 API)
すべてのツールの応答は MCP v2 のデュアル出力形式に準拠しており、content に人間が読みやすいテキストを、structuredContent に解析済みの JSON オブジェクトをそれぞれ提供します。
{
"content": [
{
"type": "text",
"text": "{\n \"queryPackages\": [\"express\"],\n \"results\": [...]\n}"
}
],
"structuredContent": {
"queryPackages": ["express"],
"results": [...]
}
}
サーバーリソース
MCP の readResource リクエストからアクセスできます。
doc://server/readme- 説明:NPM Sentinel MCP サーバーのメインドキュメントファイルです。
- MIME タイプ:
text/markdown - アイコン:埋め込みドキュメント SVG データ URI。
doc://mcp/specification- 説明:Model Context Protocol の仕様ファイル(
llms-full.txt)全体です。 - MIME タイプ:
text/plain - アイコン:埋め込みドキュメント SVG データ URI。
- 説明:Model Context Protocol の仕様ファイル(
サーバープロンプト
MCP の getPrompt リクエストからアクセスできます。
analyze-package- 説明:セキュリティ、パフォーマンス、依存関係、健全性指標を含む、NPM パッケージの AI 分析用の包括的なプロンプトテンプレートを生成します。
- 引数:
package(string、必須) - アイコン:埋め込みセキュリティ SVG データ URI。
ツールカタログ(19 個のツール)
19 個すべてのツールで、inputSchema、outputSchema、annotations(title、readOnlyHint)、および icons が定義されています。
1. npmLatest
- 最新バージョン情報、リリース日、SRI 整合性ハッシュ、dist-tag を取得します。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
2. npmVersions
- リリース日と非推奨ステータスを含む、完全なバージョン履歴を取得します。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
3. npmDeps
- 直接依存関係と
deps.devを介した完全な推移的依存関係グラフのマッピングを含む、依存関係ツリーの詳細な分析を行います。 - 入力:
packages(string[])、ignoreCache(boolean、任意)
4. npmTypes
- TypeScript のサポート状況を確認します(ネイティブの
index.d.ts宣言ファイルと@types/*DefinitelyTyped パッケージを比較します)。 - 入力:
packages(string[])、ignoreCache(boolean、任意)
5. npmSize
- パッケージのバンドルサイズ、圧縮後のサイズ、gzip による影響を分析します。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
6. npmVulnerabilities
- Google の
deps.devと OSV.dev のアドバイザリを活用して、推移的依存関係の脆弱性を即座にスキャンします。 - 入力:
packages(string[])、ignoreCache(boolean、任意)
7. npmTrends
- カスタマイズ可能な期間(
last-week、last-month、last-year)における過去のダウンロード統計を取得します。 - 入力:
packages(string[])、period("last-week"|"last-month"|"last-year")、ignoreCache(boolean、任意)
8. npmCompare
- 複数のパッケージの指標を並べて比較します。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
9. npmMaintainers
- パッケージのメンテナー、公開メールアドレス、公開活動の一覧を取得します。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
10. npmScore
- 品質、人気度、メンテナンス状況、OpenSSF Scorecard を組み合わせた総合スコアを取得します。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
11. npmPackageReadme
- NPM レジストリまたは CDN から、整形済みの README Markdown の全文を取得します。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
12. npmSearch
- スコア、発行者、キーワードなどの詳細なメタデータを含め、クエリで NPM レジストリのパッケージを検索します。
- 入力:
query(string)、limit(number、任意)
13. npmLicenseCompatibility
- 複数のパッケージ間のライセンス互換性(MIT、Apache-2.0、GPL など)を分析します。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
14. npmRepoStats
- OpenSSF Scorecard のチェック結果と組み合わせた、リポジトリの統計情報(GitHub のスター数、フォーク数、オープン中の Issue 数)。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
15. npmDeprecated
- パッケージおよび再帰的な依存関係にあるサブ依存関係の非推奨ステータスを検出します。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
16. npmChangelogAnalysis
- リリースノートと GitHub のリリース履歴を抽出します。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
17. npmAlternatives
- エコシステムのプラグインを除外して、機能面での代替候補をスマートに提案します(例:
expressに対するexpress-rate-limitを除外)。 - 入力:
packages(string[])、ignoreCache(boolean、任意)
18. npmQuality
- パッケージのコード品質スコア(0~1)。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
19. npmMaintenance
- パッケージのメンテナンス活動スコア(0~1)。
- 入力:
packages(string[])、ignoreCache(boolean、任意)
ライセンス
この MCP サーバーは MIT ライセンスの下でライセンスされています。詳細は LICENSE を参照してください。
MIT © nekzus
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。