mcpField
P
Package Health

Package Health

ローカル
github.com/orcsnren開発ツール04 日前に更新

Package Health について

Package Healthは、npm、PyPIのパッケージとGitHubリポジトリの保守状況を採点し、グレードと根拠の分かるリスクを示します。依存関係を確認するAIエージェントやチーム向けで、コマンドラインツールとGitHub Actionも利用できます。

主な機能

  1. 01npm・PyPI・GitHubプロジェクトの採点
  2. 02マニフェストとロックファイルのスキャン
  3. 03パッケージ候補の比較
  4. 04リスク指標による採点根拠の提示
  5. 05コマンドラインとGitHub Actionへの対応
  6. 06ローカルキャッシュと複数の出力形式

活用シーン

  1. 01依存関係を追加する前の状態確認
  2. 02ロックファイルから高リスクなパッケージを特定
  3. 03ライブラリ候補の比較
  4. 04CIで依存関係の健全性しきい値を適用

MCP 対応

MCPサーバーは、パッケージの採点、マニフェストのスキャン、候補の比較を行うツールを提供します。stdio経由でMCPクライアントに接続します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"orcsnren-pkg-health": {
"command": "npx",
"args": [
"-y",
"pkg-health-mcp"
],
"env": {
"GITHUB_TOKEN": "<GITHUB_TOKEN>"
}
}
}
}
起動コマンドnpx -y pkg-health-mcp
設定が必要な環境変数
GITHUB_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmpkg-health-mcp0.2.0

ツール

3

掲載時のツール一覧 · 1 週間前に更新

パラメーター型必須説明
namestringはいパッケージ名('express'、'@types/node'、'requests')または GitHub リポジトリ('owner/repo' または github.com の URL)
ecosystemenumいいえ検索先:'npm'(JavaScript/TypeScript)、'pypi'(Python)、または 'github'(任意の GitHub リポジトリ。名前は 'owner/repo' 形式)。GitHub URL または 'owner/repo' は自動的に検出されます。npm | pypi | github

詳細

pkg-health-mcp

この依存関係はまだメンテナンスされていますか?インストールする前に確認しましょう。

CI npm License: Apache 2.0 MCP Node Glama score

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)

目次

理由

一般的なプロジェクトでは、数百ものオープンソースパッケージを取り込みます。その中には、ひっそりと放棄されたものもあります。何年もリリースがなく、メンテナーはすでに離れ、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 つのパッケージをスコアリングします。

パラメーター型デフォルト説明
namestring—パッケージ名(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

マニフェストまたはロックファイル内のすべての依存関係をスコアリングし、リスクの高い順に一覧表示します。

パラメーター型デフォルト説明
pathstring—ローカルのマニフェストまたはロックファイルのパスです。以下に記載されたファイル名のみ使用できます
contentstring—path を指定しない場合の、ファイルの全文です
filenamestring—content と併用する任意の値です。形式の検出に使用します。それ以外の場合は内容から形式を判定します
include_devbooleanfalsedevDependencies/任意の依存関係もスコアリングします
max_packagesinteger50スコアリングするパッケージ数の上限(1~1000)です

ロックファイルはツール呼び出しに貼り付けるには大きすぎることが多いため、path を指定してください。

対応形式:

ファイル読み込む内容スキップする内容
package.jsondependencies、peerDependencies、optionalDependencies、devDependencies(include_dev 指定時)、npm: エイリアス、GitHub 仕様(owner/repo、github:)file:、link:、workspace:、GitHub 以外の git および URL 仕様
requirements*.txt、requirements*.inextras、バージョン指定子、環境マーカーを含むパッケージ名、git+https://github.com/… URL-r、--index-url などのオプション、その他の URL、ローカルパス
pyproject.tomlPEP 621 の [project] dependencies と optional-dependencies、Poetry の [tool.poetry.dependencies] と dev グループpython 自体
package-lock.json、npm-shrinkwrap.jsondev フラグ付きのインストール済みパッケージすべて(lockfile v1、v2、v3)リンクされたワークスペース、バンドルされたパッケージ
yarn.lockすべてのエントリー(Yarn 1 と Berry)、npm: エイリアス、パッチワークスペース、file:、link:、portal:。Yarn は dev 専用パッケージを記録しません
pnpm-lock.yamldev フラグが記録されている場合はそのフラグも含めた、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 件をランク付けします。

パラメーター型デフォルト説明
packagesstring[]—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>マニフェストまたはロックファイル内のすべての依存関係を評価します
--pypicheck の引数を PyPI パッケージとして扱います
--githubcheck の引数を GitHub リポジトリとして扱います(通常と異なる入力の場合のみ必要)
--devscan に開発用およびオプションの依存関係を含めます
--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_HOURS12キャッシュされた応答を再利用する期間です

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
入力デフォルト説明
manifestpackage.jsonスキャンするファイルです
fail-under(空)いずれかの依存関係の評価がこの値未満の場合、失敗させます
include-devfalse開発用依存関係も評価します
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 Scorecard10%独立したセキュリティ対策スコア
ライセンス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 Scorecardapi.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 をご覧ください。

ライセンス

Apache License 2.0

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。