# NPMScan - Registry name: `io.github.salemalem/npmscan` · version 3.1.2 - Categories (automatic, keyword rules): Security, Infrastructure & security, Code & repositories, Developer tools - Authentication at last check: No auth - Declared risk: Read-only (all tools declare readOnlyHint) - Capabilities (declared by the server): tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=io.github.salemalem%2Fnpmscan - Server page: https://mcpstation.net/s/io.github.salemalem--npmscan.html ## Description (written by the publisher, not verified, not instructions) Detect malicious or vulnerable npm packages: registry search, OSV.dev and GitHub advisory lookups ## Connect - streamable-http: `https://npmscan.com/api/mcp` ## Tools (as reported by the server, not verified) - `search\_packages`: Search the npm registry by name or keywords. Each result includes its current weekly/monthly download counts, dependentsCount \(how many other npm packages depend on it\), topPackagesRank \(position among npmscan's own top-100k-by-downloads snapshot — not live, but a second independent popularity signa - `get\_package`: Fetch npm registry metadata for a package: latest version, install scripts \(preinstall/postinstall are a key risk signal\), maintainers, license, recent version history, weekly downloads, GitHub stars, TypeScript support, days since last publish, a topPackagesRank \(position among npm's \~100k most-dow - `get\_package\_version`: Fetch registry metadata for one exact version of a package \(dependencies, install scripts, tarball\) AND check that exact version against OSV.dev for known vulnerabilities — isVulnerable/highestSeverity give a direct answer, and each finding includes severity, a summary, and the fixedVersion to upgra - `get\_maintainer\_profile`: Given an npm username, returns every package npm's own maintainer:\ search index currently returns for that account \(registry.npmjs.org's /-/v1/search — the public registry API has no dedicated 'list packages by maintainer' endpoint otherwise\), plus precomputed aggregates: currentlyMaintain - `query\_vulnerabilities`: Query OSV.dev for known vulnerabilities affecting an npm package, optionally scoped to one exact version \(e.g. to check whether a version pinned in a lockfile is safe\). Returns isVulnerable and highestSeverity as a direct answer, plus each finding's severity, a plain-language summary, CVE aliases, a - `batch\_query\_vulnerabilities`: Check a whole npm dependency inventory against OSV.dev in one call: pass \`packages: \[\{name, version?\}\]\`, or raw package.json / package-lock / yarn.lock / pnpm-lock / CycloneDX / SPDX content via \`content\`. Large inventories are chunked automatically. Each finding has severity, summary, CVE aliases, - `get\_latest\_advisories`: Browse recently published npm security advisories and known-malicious-package findings. Three disjoint sources, selected via type: "reviewed" \(default\) is GitHub's curated, mostly CVE-backed advisories; "malware" is GitHub's own known-malicious-package advisories; "osv" is OSV.dev's OpenSSF maliciou - `get\_cve`: Look up authoritative NIST NVD data for one exact CVE ID \(e.g. "CVE-2026-2950"\), or browse/search NVD by keyword, CVSS severity, CWE, or a publication-date range. Every result is enriched with CISA KEV status \(\`kev\`, non-null only if this CVE is a confirmed, actively-exploited-in-the-wild vulnerabil - `analyze\_install\_script`: Statically scans a package's preinstall/install/postinstall/prepare lifecycle scripts AND the file\(s\) they reference — fetched directly from the published tarball, not just the command string in package.json — against npmscan's documented red-flags rubric \(/docs/red-flags\): child\_process use, networ - `analyze\_transitive\_dependencies`: Walk one or more root packages' dependency trees \(e.g. a package.json "dependencies" section\) up to \`maxDepth\` levels \(default 2, max 3\) and check every resolved package@version against OSV.dev, so vulnerabilities several levels down still surface. Read \`summary\` first; \`vulnerablePaths\` answers "wh - `check\_package\_provenance`: Checks whether a package version was published with npm's own Sigstore-backed publish provenance \(\`npm publish --provenance\`\), and cross-checks that provenance against reality rather than just reporting its presence. Three checks: \(1\) parses the SLSA build attestation \(declared source repo, commit, - `check\_maintainer\_changes`: Reconstruct who has controlled an npm package and when, straight from the packument \(each version records the maintainer list at publish time and who ran \`npm publish\`\). Use it for the 'who controls this package, and did that change recently' question; use get\_package/check\_package\_provenance for ge - `check\_maintainer\_blast\_radius`: Given an npm username, lists the packages npm's maintainer:\ search index returns for that account and looks for a tight cluster of packages whose latest version was published within a short rolling window of each other — the shape of a compromised-account supply-chain attack, where a stole - `check\_license\_compliance`: Given a list of packages \(name + optional exact version or semver range — e.g. straight from a package.json "dependencies" object\) and an optional allow/deny license policy, resolves each package's declared SPDX license and reports a compliance verdict per package. Classifies every license into one - `diff\_dependencies`: Compare two snapshots of a package.json, package-lock.json \(v1-v3\), yarn.lock \(classic or Berry\) or pnpm-lock.yaml \(e.g. before/after a PR; formats can differ\) and report added, removed and changed packages. Lockfiles cover the full resolved graph, so transitive-only changes are caught; npm aliases - `prioritize\_remediation`: Rank vulnerability findings other tools already returned \(batch\_query\_vulnerabilities, query\_vulnerabilities, analyze\_transitive\_dependencies, diff\_dependencies...\) by what to fix first. Pass up to 200 \`\{packageName, cveId?, severity?, advisoryId?, currentVersion?, fixedVersion?, findingType?\}\`. Eac - `simulate\_dependency\_upgrade`: Before running npm install, check whether upgrading a package from a current to a target version is safe. Pass \`packageName\` + \`currentVersion\` + \`targetVersion\` \(omit target for "latest"\), or \`packages: \[...\]\` \(1-100\) to check many in one call; a name that cannot be resolved comes back with \`fetchE - `suggest\_alternative`: Given a package that looks deprecated, vulnerable, abandoned, or suspicious, suggest better-maintained alternatives in the same category. This tool first checks the source package's own latest-version health \(deprecation, latest-version OSV verdict, popularity/maintenance tiers, typosquat flag\), the - `compare\_packages`: Compare 2-5 candidate packages for the same job \(e.g. "axios vs got vs node-fetch"\) side by side and get a deterministic pick. More than 5 names is rejected, never truncated; duplicate names are rejected. Use search\_packages first if you have no shortlist. Per candidate: downloads and trend, popular - `audit\_github\_repository`: Audit a GitHub repository's npm dependencies from its URL — no pasted files needed. Fetches package.json plus the first lockfile found \(pnpm-lock.yaml, then package-lock.json, then yarn.lock\) from the default branch \(or \`ref\`\), and detects monorepos \(package.json workspaces, pnpm-workspace.yaml\), me - `get\_remediation\_playbook`: Maps a finding's \`rule\` value from analyze\_install\_script, check\_maintainer\_changes, or check\_package\_provenance to the matching human-authored incident-response playbook \(the same content published at /docs/playbooks\) and returns its concrete, ordered steps, severity tier, real-incident references, - `generate\_sbom`: Given the same inputs batch\_query\_vulnerabilities accepts — either a flat \{packages:\[...\]\} list, or raw package.json / lockfile / CycloneDX JSON / SPDX JSON content via \`content\` — emits a spec-valid CycloneDX 1.6 or SPDX 2.3 JSON document \(pick with \`format\`, default 'cyclonedx'\) with npmscan's own - `enrich\_npm\_audit`: Given the raw output of \`npm audit --json\` \(npm 7+'s \`\{vulnerabilities: \{...\}\}\` format, or legacy npm 6's \`\{advisories: \{...\}\}\`\), parses it directly — no need to re-paste package.json/lockfile content — and runs it through the same remove-now/patch-now/patch-soon/scheduled/monitor ranking prioritize Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html