The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Dep Diff MCP listing page.
MCP server that translates a lockfile diff into a human-readable upgrade plan.
Point your AI assistant (Cursor, Claude Desktop, Claude Code) at a Dependabot PR, npm outdated output, or any pair of package versions, and get back a ranked upgrade plan: semver class, breaking changes pulled from GitHub release notes, CVEs fixed in the range, migration guide links, and a clear recommendation per package.
Ask your assistant, in plain language:
Is it safe to bump lodash from 4.17.20 to 4.17.21?
It calls analyze_package_change and gets back:
A patch bump you would normally merge without looking. It closes a HIGH-severity command injection. That is the case this server exists for.
Dependabot opens more actions/* pull requests than almost anything else, and its
scheduled version updates carry no advisory data. Ask:
Is it safe to bump tj-actions/changed-files from 45.0.7 to 46.0.1?
Here's my Dependabot PR — what's actually risky in it?
analyze_packages_bulk takes up to 50 changes at once and ranks them
security > caution > review > likely-safe > safe:
Condensing the recommendation field of each entry, that batch comes back in this order:
| Package | Change | Class | Verdict |
|---|---|---|---|
lodash | 4.17.20 → 4.17.21 | patch | RECOMMENDED — 2 security fixes (incl. high/critical) |
axios | 1.6.0 → 1.7.9 | minor | RECOMMENDED — 1 security fix (incl. high/critical) |
express | 4.18.2 → 5.0.0 | major | RECOMMENDED — 2 security fixes; 3 breaking changes, migration guide |
requests (PyPI) | 2.31.0 → 2.32.0 | minor | RECOMMENDED — 2 security fixes |
typescript | 5.3.3 → 5.4.5 | minor | LIKELY SAFE — minor version, additive changes per semver |
Note the ordering: the patch bump outranks the major one. Semver tells you how much
changed; it does not tell you what is urgent.
Every response above is real output from the hosted instance, trimmed only where marked.
One command, user scope (available in every project):
Project scope (writes .mcp.json at repo root, team-shared):
With an explicit token (skip this if you have the gh CLI authenticated — see GitHub token below):
Verify:
Restart the Claude Code session to pick up the server.
Add to your MCP client config:
~/.cursor/mcp.json~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)Restart your MCP client. Ask something like "what's risky in this Dependabot PR?" and the tools are invoked automatically.
A hosted instance runs at https://dep-diff.digicatalyst.ca/mcp over streamable HTTP, so you can skip the npm package entirely:
Or in a client config:
The hosted instance authenticates to GitHub with its own token, so release-note lookups work at full rate limits without you configuring anything. Pass ?githubToken=ghp_xxx on the URL only if you would rather requests counted against your own GitHub quota. It is stateless and keeps no logs of your queries — see PRIVACY.md. Run the npm package locally instead if you would rather your token never leave your machine.
The same instance is also listed on Smithery, which proxies to it through their gateway.
The server hits the GitHub API to read release notes. Without a token you get 60 requests per hour (GitHub's anonymous limit) — enough for occasional single-package queries, not enough for bulk lockfile analysis.
The server resolves a token in this order:
GITHUB_TOKEN environment variable, if set.gh auth token — if the GitHub CLI is installed and authenticated, the server uses that token automatically. No config change needed.gh CLIIf you already have gh installed (brew install gh && gh auth login), stop here — the server picks up your existing auth. No plaintext token anywhere.
Create a fine-grained token at https://github.com/settings/tokens:
dep-diff-mcpPublic Repositories (read-only) — no private repo accessrepo, workflow, user, or any write scopeThen reference it in the MCP config:
chmod 600) and do not paste the token into AI chats, issues, or shared screens — transcripts are often retained.analyze_package_changeAnalyze one package upgrade. Inputs: ecosystem (npm, pypi, or github-actions), name, fromVersion, toVersion.
analyze_packages_bulkAnalyze up to 50 package upgrades in parallel. Returns packages ranked by risk (security > caution > review > likely-safe > safe), plus summary counts.
fromVersion but resolved at toVersion (via OSV.dev)Both tools return this twice: as the JSON text block shown above, and as MCP
structured content
validated against a declared outputSchema. A client that supports structured output can read
recommendationLevel or securityFixes[] straight off the response instead of re-parsing the text.
Clients that don't are unaffected — the text block is unchanged.
actions/checkout, or a nested github/codeql-action/init). An action reference is already a repository coordinate, so release notes and breaking changes resolve without a registry lookup, and bare major tags such as 4 -> 5 classify correctly.MIT