Plumb speaks MCP
Point Claude Code, Cursor, or any client that speaks the Model Context Protocol at Plumb, and your agent can check a package's score before it adds the dependency. Same mechanically verifiable checks as this site, same free public data, no key.
Connect
One endpoint, Streamable HTTP transport, no authentication.
| Endpoint |
https://plumbphp.dev/mcp/v1
|
| Transport | Streamable HTTP |
| Auth | None. No key, no signup. |
Set up your client
Pick your editor or assistant. Every snippet points at the endpoint above.
claude mcp add --transport http plumb https://plumbphp.dev/mcp/v1
{
"mcpServers": {
"plumb": {
"type": "http",
"url": "https://plumbphp.dev/mcp/v1"
}
}
}
{
"mcpServers": {
"plumb": {
"url": "https://plumbphp.dev/mcp/v1"
}
}
}
{
"servers": {
"plumb": {
"type": "http",
"url": "https://plumbphp.dev/mcp/v1"
}
}
}
{
"mcpServers": {
"plumb": {
"serverUrl": "https://plumbphp.dev/mcp/v1"
}
}
}
https://plumbphp.dev/mcp/v1
Try asking
Once connected, your agent picks the right tool on its own.
- "Audit the dependencies in my composer.json with Plumb."
- "Is
spatie/laravel-permissionwell maintained?" - "Compare
vendor/aandvendor/bon their Plumb scores and recommend one." - "Why does
vendor/namefail the open advisories check, and how would I fix it?"
Tools
What the server exposes, exactly as an agent sees it.
get_package_score
read-only
Get the Plumb score for one PHP package: composite and per-category scores with bands, vetoes, freshness, and every check with its verdict and reason. Returns status not_scanned (never an error) when Plumb has no scan yet. For more than one package use audit_packages.
- composer_name string, required
- Composer package name in vendor/name form, for example laravel/framework.
audit_packages
read-only
Score many PHP packages in one call, for example every entry in a composer.json or composer.lock. Up to 50 Composer names per call. Returns each package's scores, band, status, freshness, and the checks needing attention, plus totals, sorted worst first. Use get_package_score for the full check list of a single package.
- composer_names array, required
- Composer package names in vendor/name form. Skip "php" and "ext-*" entries; they are not packages.
- include_passing_checks boolean
- Also list every passing check per package. Off by default to keep the result small.
search_packages
read-only
Find PHP packages Plumb has scored whose Composer name contains a phrase, for example "permission" or "spatie/". Returns name, description, composite score with band, status, and page URL for each match, closest name match first: an exact name, then the packages of that vendor, then packages with exactly that name, then names that start with the phrase or contain it as a whole word. Among equally close matches, actively maintained packages come before dormant and abandoned ones. Ranking never uses popularity, so search the exact package name when you know it. Use get_package_score on a match for the full detail.
- query string, required
- Text to match inside the Composer name, for example "laravel-permission" or "spatie/".
- limit integer
- Maximum matches to return.
list_checks
read-only
List every check Plumb runs: id, category, weight, whether it can veto, and a one-line description, optionally filtered to one category. Use explain_check for the full explanation and guide of a single check.
- category string
- Only list checks in this category.
explain_check
read-only
Explain one Plumb check in full: why the practice matters, what is inspected, how the verdict is decided, its veto policy, and a guide to doing well on it. Use this before advising a maintainer how to fix a failing check.
- check_id string, required
- The check id as returned by other tools, for example security.advisories-open.
request_scan
queues work
Ask Plumb to scan a PHP package it has not scored yet, or to refresh a stale score. Returns the current score at once when a fresh one exists; otherwise queues a scan and tells you when to ask again with get_package_score. Limited to a few requests per IP; shared with the public API.
- composer_name string, required
- Composer package name in vendor/name form, exactly as published on Packagist.
Resources and prompts
Reference material an agent can read directly, and prompt templates it can offer you.
plumb://checks
application/json
The catalogue of every check Plumb runs, as JSON: id, category, weight, veto policy, description, and public page for each.
plumb://checks/{id}
text/markdown
One check explained in full as Markdown: what it measures, how the verdict is decided, its veto policy, and the guide to the practice. The id is the check id, for example plumb://checks/security.advisories-open.
plumb://scoring
text/markdown
How Plumb turns check results into scores: category weights, coverage gates, bands, vetoes, and freshness. Rendered from the scoring code itself.
audit-composer-json
prompt · composer_json
Audit every dependency in a composer.json with Plumb and report the ones that need attention.
compare-packages
prompt · packages
Compare two or more PHP packages on their Plumb scores and recommend one.
Reading a result
Every result carries the composite and per-category scores (0 to 100) with a band: Good 85 and up, Fair 70 to 84, Concerning 50 to 69, Poor below 50. A status says how to read the numbers: scored, unscored (too little evidence to score fairly, so unknown rather than bad), abandoned (every category pinned to 0), or not_scanned. Vetoes cap a category when a critical check fails, and a stale result is returned with is_stale set rather than withheld. Each check comes with the reason for its verdict and a link to a guide on the practice.
The scoring page explains the weights and vetoes in full, and the checks page lists every check the tools report on.
Rate limits and attribution
Limits are enforced per IP address. Scan requests share one allowance with the public API.
| What | Limit |
|---|---|
| Any request to the endpoint | 60 per minute |
Package names per audit_packages call |
50 per call · 300 names per minute |
request_scan |
3 per 15 minutes · 30 per day, shared with the API |
Scores an agent shows publicly follow the same rule as the API: "Powered by Plumb", linked to the package page. See the API usage guidelines for caching and attribution, or the API reference if you would rather call the JSON API directly.