MCP package check
POST /api/mcp-package-checkThe published facts about an npm package that ships an MCP server, read before running it: resolved version and publish date, package and version age, maintainer count, provenance attestation, install scripts (preinstall, install, postinstall; prepare listed apart), dependency, optional and bundled counts, declared binaries, deprecation, and the GitHub repository the manifest names (one keyless read: resolved name against the manifest, archived, fork, last push). Send POST /api/mcp-package-check with the required field package and pay $0.005 per call over x402 or MPP (there is no free tier). It returns a JSON object with package, requestedVersion, version, distTags, publishedAt and 19 more.
Accepts a name, name@version, or an npx command line. Observations only, each as a field plus a neutral sentence in signals; no score. A skipped read (oversize package document, GitHub rate limit) is named and the answer is marked partial.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
package | string | yes | npm package name, name@version, or an npx / npm exec command line ("npx -y agent402-mcp@latest"). |
version | string | no | Exact version or dist-tag to check (default latest). Must agree with any version in `package`. |
Example request
curl -i -X POST https://agent402.tools/api/mcp-package-check \
-H "Content-Type: application/json" \
-d '{"package":"@modelcontextprotocol/server-filesystem"}'
Without payment this returns HTTP 402 Payment Required with the exact price for mcp-package-check; any x402 v2 or MPP client pays it and retries.
Example response
{
"package": "@modelcontextprotocol/server-filesystem",
"requestedVersion": "latest",
"version": "2.0.0",
"distTags": [
"latest"
],
"publishedAt": "2026-10-19T06:49:57.471Z",
"versionAgeDays": 1,
"createdAt": "2024-11-21T19:14:54.330Z",
"packageAgeDays": 697,
"versionCount": 21,
"maintainers": {
"count": 6,
"names": [
"jspahrsummers",
"pcarleton",
"fweinberger",
"thedsp",
"ochafik-ant",
"cliffhall"
]
},
"provenance": {
"attested": true,
"predicateType": "https://slsa.dev/provenance/v1",
"attestationsUrl": "https://registry.npmjs.org/-/npm/v1/attestations/@modelcontextprotocol%2fserver-filesystem@2.0.0",
"registrySignatures": 2,
"integrity": "sha512-..."
},
"installScripts": {
"present": false,
"runOnInstall": [],
"otherHooks": [
"prepare"
]
},
"dependencies": {
"runtime": 5,
"optional": 0,
"peer": 0,
"bundled": []
},
"binaries": [
"mcp-server-filesystem"
],
"deprecated": null,
"license": "SEE LICENSE IN LICENSE",
"engines": {
"node": ">=24"
},
"repository": {
"declared": "git+https://github.com/modelcontextprotocol/servers.git",
"directory": null,
"github": "modelcontextprotocol/servers",
"read": true,
"matchesManifest": true,
"resolvedName": "modelcontextprotocol/servers",
"url": "https://github.com/modelcontextprotocol/servers",
"archived": false,
"fork": false,
"disabled": false,
"createdAt": "2024-11-19T01:10:17Z",
"pushedAt": "2026-10-19T06:46:48Z",
"stars": 91406,
"defaultBranch": "main",
"license": "Other"
},
"signals": [
"version 2.0.0 published 1 day ago",
"package first published 697 days ago, 21 versions",
"6 maintainers",
"provenance attestation present (https://slsa.dev/provenance/v1)",
"no install script declared",
"prepare script declared (runs for a git or local install, not a registry install)",
"declares 1 binary: mcp-server-filesystem",
"5 runtime dependencies, 0 optional",
"GitHub repository matches the manifest"
],
"reads": {
"registry": "package document",
"github": "read"
},
"skippedReads": [],
"complete": true,
"partial": false,
"sources": [
"registry.npmjs.org",
"api.github.com"
]
}
| Field | Type | Always present | In the example |
|---|---|---|---|
package | string | yes | @modelcontextprotocol/server-filesystem |
requestedVersion | string | yes | latest |
version | string | yes | 2.0.0 |
distTags | array of string | yes | 1 item in the example |
publishedAt | string | yes | 2026-10-19T06:49:57.471Z |
versionAgeDays | number | yes | 1 |
createdAt | string | yes | 2024-11-21T19:14:54.330Z |
packageAgeDays | number | yes | 697 |
versionCount | number | yes | 21 |
maintainers | object | yes | 2 fields: count, names |
provenance | object | yes | 5 fields: attested, predicateType, attestationsUrl, registrySignatures, integ... |
installScripts | object | yes | 3 fields: present, runOnInstall, otherHooks |
dependencies | object | yes | 4 fields: runtime, optional, peer, bundled |
binaries | array of string | yes | 1 item in the example |
deprecated | null | no | null |
license | string | yes | SEE LICENSE IN LICENSE |
engines | object | yes | 1 field: node |
repository | object | yes | 15 fields: declared, directory, github, read, matchesManifest, resolvedName |
signals | array of string | yes | 9 items in the example |
reads | object | yes | 2 fields: registry, github |
skippedReads | array | yes | 0 items in the example |
complete | boolean | yes | true |
partial | boolean | yes | false |
sources | array of string | yes | 2 items in the example |
From an MCP client
catalog.call {
"slug": "mcp-package-check",
"params": {
"package": "@modelcontextprotocol/server-filesystem"
}
}
The hosted connector at https://agent402.tools/mcp needs a payment for mcp-package-check; the stdio package pays it from a wallet or from an AGENT402_CREDITS_KEY issued earlier. Local install: npx -y agent402-mcp.
Errors and behavior
packageis required. An input the tool rejects returns an HTTP 4xx whose body carrieserror,tool,expected,requiredandexample, so the caller can correct it.- A paid call that ends in any status of 400 or above is not charged over x402, MPP or a prepaid credits key: settlement is canceled when the tool fails. The exception is a Tempo push credential, a transfer the buyer sent before the call: it settles before the tool runs, so if the tool then fails the payment is recorded as a refund owed to the paying wallet.
- Wallet-only: this tool reaches the network or stored state, so it has no proof-of-work tier. A prepaid card-credits key issued earlier (
Authorization: Bearer a402_...) also pays it. - A
GETorHEADto /api/mcp-package-check returns the same 402 quote, so the price can be read without a body. - An
Idempotency-Keyheader makes a retried paid call replay the first 200 instead of charging again (an answer larger than 1 MB is not replayed).
Paid call (JavaScript agent)
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
client.setSpendControls?.({ maxAmountPerPayment: "$0.005" }); // refuse any quote above this tool's price
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/mcp-package-check", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"package": "@modelcontextprotocol/server-filesystem"
}),
});
Related tools
GitHub repository enrichment
POST /api/github-repoEnrich a public GitHub repository: stars, forks, watchers, open issues, license, topics, primary language plus the full.
Legal entity (LEI) lookup
POST /api/lei-lookupLook up a legal entity in the official GLEIF registry.
Wikidata entity facts
POST /api/wikidata-entityCompany/person/organization facts from Wikidata.
A2A Agent Card validate
POST /api/a2a-card-validateValidate an A2A (Agent2Agent protocol) Agent Card: required fields, skill shape, transport names, capability flags.
Amortization schedule
POST /api/amortizationBuild the full per-period amortization schedule for a fully-amortizing loan.
Annuity present/future value
POST /api/annuityPresent and future value of a level annuity (equal periodic payments).