Package Health について
Package Healthは、npm、PyPIのパッケージとGitHubリポジトリの保守状況を採点し、グレードと根拠の分かるリスクを示します。依存関係を確認するAIエージェントやチーム向けで、コマンドラインツールとGitHub Actionも利用できます。
主な機能
- 01npm・PyPI・GitHubプロジェクトの採点
- 02マニフェストとロックファイルのスキャン
- 03パッケージ候補の比較
- 04リスク指標による採点根拠の提示
- 05コマンドラインとGitHub Actionへの対応
- 06ローカルキャッシュと複数の出力形式
活用シーン
- 01依存関係を追加する前の状態確認
- 02ロックファイルから高リスクなパッケージを特定
- 03ライブラリ候補の比較
- 04CIで依存関係の健全性しきい値を適用
MCP 対応
MCPサーバーは、パッケージの採点、マニフェストのスキャン、候補の比較を行うツールを提供します。stdio経由でMCPクライアントに接続します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y pkg-health-mcpGITHUB_TOKENシークレットOptional. Raises the GitHub API limit and enables the time-to-first-response signal. Read-only access to public repositories is enough.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
3掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| name | string | はい | パッケージ名('express'、'@types/node'、'requests')または GitHub リポジトリ('owner/repo' または github.com の URL) |
| ecosystem | enum | いいえ | 検索先:'npm'(JavaScript/TypeScript)、'pypi'(Python)、または 'github'(任意の GitHub リポジトリ。名前は 'owner/repo' 形式)。GitHub URL または 'owner/repo' は自動的に検出されます。npm | pypi | github |
詳細
pkg-health-mcp
この依存関係はまだメンテナンスされていますか?インストールする前に確認しましょう。
pkg-health-mcp は、npm パッケージ、PyPI パッケージ、GitHub リポジトリのメンテナンス状況を0~100で評価します。リリースやコミットの活動状況、活動中のメンテナー、Issue の応答時間、ダウンロード数の推移、OpenSSF Scorecard、ライセンスを組み合わせ、A~Fのグレードと、平易な言葉で説明したリスクの一覧を提示します。
同じエンジンを使った、次の3つの方法で利用できます。
- MCP サーバー:Claude Code、Claude Desktop、Cursor、VS Code、その他のMCPクライアントで利用できます。AI エージェントがパッケージを提案する前にチェックできます。
- CLI:推移的な依存関係を含め、マニフェストやロックファイルを監査できます。
- GitHub Action:すべてのプルリクエストにヘルスレポートを追加し、しきい値を下回った場合にビルドを失敗させます。
$ npx -y pkg-health-mcp scan package.json
F 10/100 [email protected] [npm]
10 Recent activity last release 2444d ago
5 Maintainer diversity 0 active committer(s) in the last 12 months
10 Issue responsiveness median 113.2d to first maintainer response, 38% answered (8 issues)
65 Download trend 171.5M downloads in last 90d (-5% vs previous 90d)
34 OpenSSF Scorecard 3.4/10
100 License Apache-2.0 (permissive)
! Deprecated: request has been deprecated, see https://github.com/request/request/issues/3142
! No release in 6+ years
! No commits in the last 12 months
! 62% of recent issues got no maintainer response
F 10/100 [email protected] [npm]
! Deprecated: use String.prototype.padStart()
! Source repository is archived
A 99/100 [email protected] [npm]
100 Recent activity last release 12d ago, last commit 4d ago
100 Maintainer diversity 42 active committer(s) in the last 12 months
100 Issue responsiveness median 0.2d to first maintainer response, 87% answered (53 issues)
100 Download trend 1.6B downloads in last 90d (+22% vs previous 90d)
85 OpenSSF Scorecard 8.5/10
100 License MIT (permissive)
目次
- 理由
- 機能
- クイックスタート
- GitHub トークン
- ツール
- AI エージェントでの使用
- コマンドライン
- GitHub Action
- スコアの仕組み
- データソース
- 制限事項
- FAQ
- 開発
- コントリビューション
- ライセンス
理由
一般的なプロジェクトでは、数百ものオープンソースパッケージを取り込みます。その中には、ひっそりと放棄されたものもあります。何年もリリースがなく、メンテナーはすでに離れ、Issue には回答がないまま積み上がっています。そうしたパッケージに脆弱性が見つかっても、誰も修正しません。
これを手作業で確認するには、各パッケージの GitHub ページを開き、コミット日、Issue の一覧、コントリビューターのグラフを読む必要があります。すべての依存関係についてそれを行う人はいませんし、AI コーディングアシスタントも確認しません。学習データで人気だったライブラリを、何年も前に非推奨になったものも含めて、ためらいなく提案します。
pkg-health-mcp を使えば、この確認を1回のツール呼び出しで行えるため、次のことが可能になります。
- AI エージェントは、放棄されたライブラリの推奨を避け、既存のコードに潜むリスクを指摘できます。
- エンジニアリングリードは、プロジェクトの依存関係を数秒で監査できます。
- セキュリティチームやコンプライアンスチームは、脆弱性スキャナーと併せて、再現可能で説明可能なメンテナンス状況の指標を得られます。
機能
- 3 つの MCP ツール: パッケージを 1 つスコアリングする、マニフェスト全体をスキャンする、または代替候補を比較する。
- npm、PyPI、および任意の GitHub リポジトリ。 レジストリで公開されていないプロジェクトをスコアリングするには、
owner/repoまたは GitHub URL を渡します。 - マニフェストとロックファイル:
package.json、requirements.txt、pyproject.toml(PEP 621 と Poetry)、さらに間接依存関係を対象とするpackage-lock.json、yarn.lock、pnpm-lock.yaml、poetry.lock、uv.lock。GitHub 上の Git 依存関係はリポジトリとしてスコアリングされます。 - 6 つのシグナル: リリースとコミットの新しさ、アクティブなコミッター数、メンテナーの初回応答までの時間、ダウンロード傾向、OpenSSF Scorecard、ライセンス。
- CI ゲート:
--fail-under <score>、ジョブサマリー向けの Markdown 出力、すぐに使える GitHub Action。 - 実行間で共有されるディスクキャッシュ(デフォルトで 12 時間)により、繰り返しのスキャンで必要な API 呼び出しはほとんどありません。
- 説明可能な出力: スコアにはすべて、シグナルごとの詳細と具体的なリスクの一覧が付属し、数値だけにとどまりません。
- データの欠落についても正直に表示: API に到達できない場合はスコアではなく
confidence値が下がります。 - アカウントも API キーも不要です。 オプションの
GITHUB_TOKENを設定すると、GitHub のレート制限が引き上げられます。 - ローカルでプライベート: お使いのマシン上で動作し、公開 API に直接接続します。バックエンドもテレメトリーもありません。
- 人間向け、JSON、Markdown の出力に対応し、ターミナル、スクリプト、CI ジョブサマリーで利用できます。
クイックスタート
Node.js 20 以降が必要です。グローバルにインストールするものはありません。初回実行時に npx がパッケージをダウンロードします。
Claude Code
claude mcp add pkg-health -e GITHUB_TOKEN=github_pat_xxx -- npx -y pkg-health-mcp
トークンなしで実行する場合は、-e GITHUB_TOKEN=… を省略してください。
Claude Desktop
Settings → Developer → Edit Config を開くか、ファイルを直接編集します。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"pkg-health": {
"command": "npx",
"args": ["-y", "pkg-health-mcp"],
"env": { "GITHUB_TOKEN": "github_pat_xxx" }
}
}
}
Claude Desktop を再起動します。ツールアイコンの下に 3 つのツールが表示されます。
Cursor
同じブロックを ~/.cursor/mcp.json(すべてのプロジェクト)または .cursor/mcp.json(1 つのプロジェクト)に追加します。examples/cursor-mcp.json を参照してください。
VS Code
.vscode/mcp.json に追加します。サーバーの初回起動時に VS Code がトークンを尋ねるため、トークンがファイルに保存されることはありません。examples/vscode-mcp.json を参照してください。
{
"inputs": [
{ "type": "promptString", "id": "github-token", "description": "GitHub token (optional)", "password": true }
],
"servers": {
"pkg-health": {
"type": "stdio",
"command": "npx",
"args": ["-y", "pkg-health-mcp"],
"env": { "GITHUB_TOKEN": "${input:github-token}" }
}
}
}
その他の MCP クライアント
サーバーは stdio 経由で MCP を使用します。次のコマンドで起動します。
npx -y pkg-health-mcp
GitHub トークン
トークンは任意ですが、少数のパッケージを超えて利用する場合は強く推奨します。
| トークンなし | トークンあり | |
|---|---|---|
| GitHub API の制限 | 60 リクエスト/時間 | 5,000 リクエスト/時間 |
| 1 時間あたりのパッケージ数(各パッケージにつき約 3~5 回の GitHub 呼び出し) | 約 15 | 約 1,000 以上 |
| メンテナーの初回応答までの時間 | 測定なし(GraphQL が必要) | 測定あり |
制限に達しても、パッケージはレジストリのデータに基づいてスコアリングされ、レポートにはその旨を示す警告が含まれます。応答はディスクにキャッシュされるため、同じプロジェクトを 12 時間以内に再スキャンしても GitHub への呼び出しは発生しません。
トークンの作成: GitHub → Settings → Developer settings → Fine-grained tokens → Public repositories (read-only) を選択します。追加の権限は不要です。トークンは api.github.com にのみ送信されます。GH_TOKEN も使用できます。
ツール
すべてのツールは読み取り専用で、そのように注釈されています(readOnlyHint、idempotentHint)。そのため、クライアントは確認を求めずに実行できます。
check_package
1 つのパッケージをスコアリングします。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
name | string | — | パッケージ名(express、@types/node、requests)または GitHub リポジトリ(owner/repo または github.com の URL) |
ecosystem | "npm" | "pypi" | "github" | "npm" | 検索対象です。owner/repo と GitHub URL は自動的に検出されます |
1 行の概要に続いて、完全なレポートを返します。
left-pad: 10/100 (F), likely abandoned or unsafe to adopt. Main risk: Deprecated: use String.prototype.padStart().
{
"package": "left-pad",
"ecosystem": "npm",
"version": "1.3.0",
"score": 10,
"grade": "F",
"confidence": 1, // share of the scoring weight backed by real data
"summary": "left-pad: 10/100 (F), likely abandoned or unsafe to adopt. ...",
"risks": [
"Deprecated: use String.prototype.padStart()",
"Source repository is archived",
"No release in 8+ years",
"No commits in the last 12 months"
],
"subscores": [
{ "key": "activity", "label": "Recent activity", "weight": 0.3, "score": 0, "detail": "Repository is archived (read-only)" },
{ "key": "maintainers", "label": "Maintainer diversity", "weight": 0.2, "score": 5, "detail": "0 active committer(s) in the last 12 months" },
{ "key": "issues", "label": "Issue responsiveness", "weight": 0.15, "score": 15, "detail": "No issues closed in 12 months, 10 open" },
{ "key": "downloads", "label": "Download trend", "weight": 0.15, "score": 100, "detail": "25.9M downloads in last 90d (+57% vs previous 90d)" },
{ "key": "scorecard", "label": "OpenSSF Scorecard", "weight": 0.1, "score": 39, "detail": "3.9/10" },
{ "key": "license", "label": "License", "weight": 0.1, "score": 100, "detail": "WTFPL (permissive)" }
],
"repository": "https://github.com/left-pad/left-pad",
"warnings": []
}
非推奨のパッケージは、ダウンロード数が伸び続けていてもスコアの上限は 10 です。人気があるからといって、誰かが修正しているとは限りません。
GitHub リポジトリも同じ方法でスコアリングし、最新の GitHub リリースをバージョンとして使用します。リポジトリにはダウンロード統計がないため、そのシグナルは除外されます。
expressjs/express: 98/100 (A), healthy.
scan_manifest
マニフェストまたはロックファイル内のすべての依存関係をスコアリングし、リスクの高い順に一覧表示します。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
path | string | — | ローカルのマニフェストまたはロックファイルのパスです。以下に記載されたファイル名のみ使用できます |
content | string | — | path を指定しない場合の、ファイルの全文です |
filename | string | — | content と併用する任意の値です。形式の検出に使用します。それ以外の場合は内容から形式を判定します |
include_dev | boolean | false | devDependencies/任意の依存関係もスコアリングします |
max_packages | integer | 50 | スコアリングするパッケージ数の上限(1~1000)です |
ロックファイルはツール呼び出しに貼り付けるには大きすぎることが多いため、path を指定してください。
対応形式:
| ファイル | 読み込む内容 | スキップする内容 |
|---|---|---|
package.json | dependencies、peerDependencies、optionalDependencies、devDependencies(include_dev 指定時)、npm: エイリアス、GitHub 仕様(owner/repo、github:) | file:、link:、workspace:、GitHub 以外の git および URL 仕様 |
requirements*.txt、requirements*.in | extras、バージョン指定子、環境マーカーを含むパッケージ名、git+https://github.com/… URL | -r、--index-url などのオプション、その他の URL、ローカルパス |
pyproject.toml | PEP 621 の [project] dependencies と optional-dependencies、Poetry の [tool.poetry.dependencies] と dev グループ | python 自体 |
package-lock.json、npm-shrinkwrap.json | dev フラグ付きのインストール済みパッケージすべて(lockfile v1、v2、v3) | リンクされたワークスペース、バンドルされたパッケージ |
yarn.lock | すべてのエントリー(Yarn 1 と Berry)、npm: エイリアス、パッチ | ワークスペース、file:、link:、portal:。Yarn は dev 専用パッケージを記録しません |
pnpm-lock.yaml | dev フラグが記録されている場合はそのフラグも含めた、packages: セクション(lockfile v5、v6、v9) | ローカルおよび tarball の依存関係 |
poetry.lock、uv.lock | すべての [[package]]、Poetry の category = "dev" | プロジェクト自体、編集可能なソース、パスおよび URL ソース |
ロックファイルには間接依存関係も含まれるため、数百ものパッケージが記載されていることがよくあります。max_packages を増やし、GitHub トークンを設定してください。
レスポンスヘッダーの例:
Scanned 5 package(s). Grades: A=2, B=1, F=2. Needs attention: request (10), left-pad (10).
続いて、{ scanned, total_dependencies, grades, packages: [...] } が返されます。各パッケージはコンパクトな形式(score、grade、confidence、risks、signals、repository)で表示されます。
compare_packages
同じレジストリの候補、または GitHub リポジトリから 2~5 件をランク付けします。
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
packages | string[] | — | 2~5 件のパッケージ名または owner/repo 形式のリポジトリ |
ecosystem | "npm" | "pypi" | "github" | "npm" | 検索対象です |
Healthiest: axios (92/100, A). Ranking: axios 92 > got 86 > request 10
続いて、同じコンパクトな形式の { ranking: [...] } が返されます。
AI エージェントでの使用
サーバーを接続したら、自然な言葉で質問してください。効果的なプロンプトの例をいくつか紹介します。
- 「日付ライブラリを追加する前に、pkg-health を使って dayjs、date-fns、luxon を比較してください。」
- 「このプロジェクトの package.json をスキャンして、メンテナンスが放棄されているように見える依存関係を教えてください。」
- 「
noseパッケージはまだメンテナンスされていますか? そうでなければ、何に移行すべきですか?」 - 「github.com/some-org/some-tool はまだ活動していますか? ベンダーとして取り込みたいです。」
- 「package-lock.json を推移的依存関係も含めてスキャンし、評価が F のものをすべて一覧にしてください。」
- 「requirements.txt 内のすべてのパッケージを確認して、評価が D または F のもののチェックリストを作成してください。」
自動化するには、プロジェクトの指示ファイル(CLAUDE.md、.cursorrules、Copilot の指示など)に次の行を追加します。
Before adding a new npm or PyPI dependency, call the pkg-health `check_package` tool.
Do not add packages graded D or F without asking me first, and mention any risks it reports.
コマンドライン
同じエンジンは MCP クライアントなしでも実行できます。
# Score one or more npm packages
npx -y pkg-health-mcp check express lodash
# PyPI packages
npx -y pkg-health-mcp check requests flask --pypi
# Any GitHub repository (owner/repo or URL)
npx -y pkg-health-mcp check expressjs/express https://github.com/pallets/flask
# Every dependency in a manifest, worst first
npx -y pkg-health-mcp scan ./package.json
npx -y pkg-health-mcp scan ./pyproject.toml --dev
# Transitive dependencies from a lock file
npx -y pkg-health-mcp scan ./package-lock.json
npx -y pkg-health-mcp scan ./uv.lock --max 300
# Fail (exit code 1) if anything scores below 50
npx -y pkg-health-mcp scan ./package.json --fail-under 50
# Machine-readable or Markdown output
npx -y pkg-health-mcp check express --json
npx -y pkg-health-mcp scan ./package.json --markdown >> "$GITHUB_STEP_SUMMARY"
| コマンド/フラグ | 説明 |
|---|---|
| (引数なし) | stdio で MCP サーバーを起動します |
check <name...> | パッケージ(--pypi がなければ npm)または GitHub リポジトリ(owner/repo、URL)を評価します |
scan <file> | マニフェストまたはロックファイル内のすべての依存関係を評価します |
--pypi | check の引数を PyPI パッケージとして扱います |
--github | check の引数を GitHub リポジトリとして扱います(通常と異なる入力の場合のみ必要) |
--dev | scan に開発用およびオプションの依存関係を含めます |
--max <n> | scan で評価するパッケージを最大 n 個にします |
--fail-under <n> | いずれかのパッケージの評価が n 未満の場合、コード 1 で終了します。評価できなかったパッケージは実行失敗の原因になりませんが、その件数はメッセージに表示されます |
--json | 詳細なレポートを JSON 形式で出力します |
--markdown | $GITHUB_STEP_SUMMARY などに使用できる Markdown テーブルを出力します |
--no-cache | 今回の実行ではディスクキャッシュを無視します |
--help、--version |
人が読みやすい形式の出力では、! はリスク、~ はデータに関する警告を示します。終了コード:0 は成功、1 はパッケージの評価が --fail-under 未満(またはエラー)、2 は無効な引数です。
キャッシュ
API の応答は、~/.cache/pkg-health-mcp(または $XDG_CACHE_HOME/pkg-health-mcp)に 12 時間 ディスクキャッシュされ、CLI と MCP サーバーで共有されます。キャッシュされるのは、成功した応答と 404 のみです。
| 変数 | デフォルト | 説明 |
|---|---|---|
PKG_HEALTH_CACHE_DIR | ~/.cache/pkg-health-mcp | キャッシュの保存場所です。ディスクキャッシュを無効にするには off を設定します |
PKG_HEALTH_CACHE_TTL_HOURS | 12 | キャッシュされた応答を再利用する期間です |
GitHub Action
すべてのプルリクエストに依存関係の健全性レポートを追加し、必要に応じてジョブを失敗させることができます。
name: Dependency health
on: [pull_request]
jobs:
pkg-health:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: orcsnren/[email protected]
with:
manifest: package-lock.json # or package.json, yarn.lock, pnpm-lock.yaml, requirements.txt, poetry.lock, uv.lock …
fail-under: 40 # leave out to report without failing
max-packages: 300
| 入力 | デフォルト | 説明 |
|---|---|---|
manifest | package.json | スキャンするファイルです |
fail-under | (空) | いずれかの依存関係の評価がこの値未満の場合、失敗させます |
include-dev | false | 開発用依存関係も評価します |
max-packages | (空) | 評価するパッケージをこの数までに制限します |
github-token | ${{ github.token }} | GitHub API 呼び出しに使用するトークンです |
結果の表はジョブサマリーに書き込まれます。Action を使用しない場合も、CLI を使えば任意の CI システムで同じことができます。
- name: Dependency health
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npx -y pkg-health-mcp scan package.json --fail-under 40 --markdown >> "$GITHUB_STEP_SUMMARY"
スコアの仕組み
6つのシグナルを0〜100で評価し、次の重みで組み合わせます。
| シグナル | 重み | 測定内容 |
|---|---|---|
| 最近の活動 | 30% | 最新のリリースまたはコミットからの経過日数(いずれか新しい方) |
| メンテナーの多様性 | 20% | 過去12か月間にコミットした個別の人間の数(バス係数) |
| Issue への対応 | 15% | 最初のメンテナーの応答(トークンを使用)の中央値。応答がない場合は、クローズまでの時間の中央値 |
| ダウンロード傾向 | 15% | 過去90日間のダウンロード数と、その前の90日間の比較 |
| OpenSSF Scorecard | 10% | 独立したセキュリティ対策スコア |
| ライセンス | 10% | 寛容型、コピーレフト、プロプライエタリ、または未設定 |
- データのないシグナルは除外され、残りの重みは再調整されます。
confidenceは、重みのうちデータに基づいている割合を示します。 - 上限: 非推奨のパッケージはスコアが最大10、アーカイブ済みのリポジトリは最大15です。
- グレード: A ≥ 80、B ≥ 65、C ≥ 50、D ≥ 35、F は35未満です。
すべてのしきい値、例外的なケース、既知の盲点については、docs/scoring.md に記載されています。
データソース
すべて公開データで、認証は不要です。
| データ | ソース | 備考 |
|---|---|---|
| npm のメタデータ | registry.npmjs.org | 最新バージョン、リリース日、非推奨の状態、ライセンス、メンテナー、リポジトリ |
| npm のダウンロード数 | api.npmjs.org/downloads/range/last-year | 日別ダウンロード数。直近180日分を使用 |
| PyPI のメタデータ | pypi.org/pypi/<name>/json | バージョン、アップロード日時、ライセンス、分類子、プロジェクト URL |
| PyPI のダウンロード数 | pypistats.org | ミラーを除いた日別ダウンロード数(約180日分を保持) |
| リポジトリの活動状況 | api.github.com(REST) | アーカイブ済みフラグ、ライセンス、最新リリース、過去12か月間のコミット、最近クローズされた Issue |
| 最初のメンテナーの応答 | api.github.com/graphql | 直近60件の Issue へのコメント。トークンが必要 |
| OpenSSF Scorecard | api.deps.dev | リポジトリの総合 Scorecard 結果 |
応答はメモリに1時間、ディスクに12時間キャッシュされます(キャッシュを参照)。一度に分析するパッケージは最大4つです。
制限事項
- セキュリティではなく、メンテナンス状況を評価します。 既知の脆弱性は調査しません。
npm audit、pip-audit、またはOSVと併用してください。 - 「完成」は「放棄」と同じではありません。 小規模で機能が完成したユーティリティは、何年もコミットがなくても安全な場合があります。それでもスコアには警告として表示されるため、行動する前にリスクを確認してください。
- リポジトリのデータは GitHub から取得します。 GitLab、Codeberg、またはセルフホストのフォージでホストされているパッケージは、レジストリのデータに基づいてスコアが付けられ、信頼度は低くなります。
- モノレポでは、そこから公開されたすべてのパッケージで活動状況が共有されます。
- キャッシュが空の状態では、大きなロックファイルの処理に時間がかかります。 800個のパッケージを含むロックファイルの場合、初回は数千回の API 呼び出しが必要です。トークンと
--maxを使用するか、キャッシュが温まるまでお待ちください。 - メンテナーの応答は GitHub のロールに基づいて判断されます。 オーナー、組織のメンバー、コラボレーターからの返信のみが対象です。コミュニティメンバーがトリアージを行うプロジェクトは、実際より対応が遅いように見える場合があります。
FAQ
コードやマニフェストがどこかに送信されますか? いいえ。上記の公開 API URL の一部として、パッケージ名だけがマシンの外部に送信されます。SECURITY.md をご覧ください。
MCP サーバーは必ず必要ですか? いいえ。CLI と GitHub Action は同じエンジンを使用します。MCP サーバーを使うと、AI エージェントがパッケージを提案する前にチェックできます。放置された依存関係が入り込むのは、通常この段階です。
問題ないと知っているパッケージのスコアが低いのはなぜですか?
risks と subscores を確認してください。どのシグナルがスコアを下げたのかが明確に示されています。それでもスコアが間違っている場合は、「wrong score」issue を作成してください。こうした報告をもとにしきい値を調整しています。
confidence は何を意味しますか?
スコアリングの重みのうち、実際のデータで裏付けられている割合です。1.0 は 6 つすべてのシグナルを利用できたことを意味します。0.6 を下回ると、概要に「信頼度が低い」と表示されます。
OpenSSF Scorecard、deps.dev、Socket とはどう違いますか?
Scorecard はリポジトリのセキュリティ対策を評価します。このツールは Scorecard を入力の 1 つとして使用します。deps.dev と Socket は優れたウェブサイトおよびサービスです。pkg-health-mcp は「このパッケージは今もメンテナンスされているか?」という 1 つの問いに焦点を当て、エコシステムをまたいだ説明可能な単一のスコアで、AI エージェント内のツール呼び出しとして回答を利用できるようにします。
商用利用できますか? はい。Apache 2.0 ライセンスのもとで提供されています。
開発
テストランナーには Node.js 22 以降が必要です。
git clone https://github.com/orcsnren/pkg-health-mcp
cd pkg-health-mcp
npm install # also builds dist/
npm test # offline unit tests
npm run typecheck
node dist/index.js check express
MCP Inspector を使って、ツールを対話的に試せます。
npx @modelcontextprotocol/inspector node dist/index.js
プロジェクトの構成:
src/
├── index.ts CLI entry point; starts the MCP server when run without arguments
├── server.ts MCP tool definitions
├── analyze.ts Gathers facts for a package from all sources
├── score.ts Pure scoring functions
├── manifest.ts Manifest and lock file parsing
├── http.ts fetch with timeout, memory + disk cache and concurrency limit
├── types.ts
└── sources/
├── npm.ts Registry metadata and download statistics
├── pypi.ts PyPI JSON API and pypistats
├── github.ts Repository, commits, issues, releases, first responses (GraphQL)
├── scorecard.ts OpenSSF Scorecard via deps.dev
└── repo-url.ts Normalizes the many shapes of repository URLs
docs/
├── scoring.md Full scoring methodology
└── architecture.md How the pieces fit together, and how to add an ecosystem
examples/ Client configurations and sample manifests
貢献
バグ報告、スコアリングに関するフィードバック、プルリクエストを歓迎します。よく知っているパッケージの評価が適切でないと感じた場合は、スコア誤りの報告を送るのが最も役立ちます。新しいエコシステム(Maven Central、Go modules、crates.io、RubyGems)やリポジトリホストへの対応は、最初の貢献として適しています。docs/architecture.md に手順が記載されています。
開発環境のセットアップとガイドラインについては、CONTRIBUTING.md をご覧ください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。