Categories › Security › Code & dependency scanning
Detect malicious or vulnerable npm packages: registry search, OSV.dev and GitHub advisory lookups
Remote server: your requests and data go to npmscan.com. Claude Code: claude mcp add --transport http npmscan https://npmscan.com/api/mcp · Claude app: Settings → Connectors → Add custom connector.
The tools this server listed when we connected to it, in its own words.
search_packages — Search the npm registry by name or keywords. Each result includes its current weekly/monthly download counts, dependentsCount (how many otheget_package — Fetch npm registry metadata for a package: latest version, install scripts (preinstall/postinstall are a key risk signal), maintainers, liceget_package_version — Fetch registry metadata for one exact version of a package (dependencies, install scripts, tarball) AND check that exact version against OSVget_maintainer_profile — Given an npm username, returns every package npm's own maintainer:<username> search index currently returns for that account (registry.npmjsquery_vulnerabilities — Query OSV.dev for known vulnerabilities affecting an npm package, optionally scoped to one exact version (e.g. to check whether a version pibatch_query_vulnerabilities — Check a whole npm dependency inventory against OSV.dev in one call: pass `packages: [{name, version?}]`, or raw package.json / package-lock get_latest_advisories — Browse recently published npm security advisories and known-malicious-package findings. Three disjoint sources, selected via type: "reviewedget_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 panalyze_install_script — Statically scans a package's preinstall/install/postinstall/prepare lifecycle scripts AND the file(s) they reference — fetched directly fromanalyze_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) andcheck_package_provenance — Checks whether a package version was published with npm's own Sigstore-backed publish provenance (`npm publish --provenance`), and cross-checheck_maintainer_changes — Reconstruct who has controlled an npm package and when, straight from the packument (each version records the maintainer list at publish timcheck_maintainer_blast_radius — Given an npm username, lists the packages npm's maintainer:<username> search index returns for that account and looks for a tight cluster ofcheck_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 opdiff_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; prioritize_remediation — Rank vulnerability findings other tools already returned (batch_query_vulnerabilities, query_vulnerabilities, analyze_transitive_dependenciesimulate_dependency_upgrade — Before running npm install, check whether upgrading a package from a current to a target version is safe. Pass `packageName` + `currentVersisuggest_alternative — Given a package that looks deprecated, vulnerable, abandoned, or suspicious, suggest better-maintained alternatives in the same category. Thcompare_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 naudit_github_repository — Audit a GitHub repository's npm dependencies from its URL — no pasted files needed. Fetches package.json plus the first lockfile found (pnpmget_remediation_playbook — Maps a finding's `rule` value from analyze_install_script, check_maintainer_changes, or check_package_provenance to the matching human-authogenerate_sbom — Given the same inputs batch_query_vulnerabilities accepts — either a flat {packages:[...]} list, or raw package.json / lockfile / CycloneDX enrich_npm_audit — Given the raw output of `npm audit --json` (npm 7+'s `{vulnerabilities: {...}}` format, or legacy npm 6's `{advisories: {...}}`), parses it Not tested by KitScout yet. When our harness runs it, pros, cons and the tasks we tried appear here, with the date and evidence.