import-guardian
Audits Composer lockfiles (composer.json/composer.lock) for PHP packages, checking against Packagist for dependency confusion and abandonment.
Audits Gradle lockfiles (gradle.lockfile) for Java packages, checking against Maven Central for dependency confusion.
Scans npm package imports in generated code to detect hallucinated or malicious packages, and audits npm lockfiles for dependency confusion, typosquats, maintainer takeover, and malicious install scripts.
Audits PHP packages from Packagist (Composer ecosystem) for dependency confusion, typosquats, and abandonment risks.
Audits pnpm lockfiles (pnpm-lock.yaml) for npm packages, checking for dependency confusion, typosquats, and malicious install scripts.
Audits Poetry lockfiles (poetry.lock) for Python packages, detecting dependency confusion and other risks.
Audits PyPI packages for dependency confusion, typosquats, maintainer takeover, and analyzes setup.py in source distributions for malware.
Audits Rust packages from crates.io (via Cargo.lock) for typosquats (including dash/underscore equivalence) and other supply-chain risks.
Audits yarn lockfiles (yarn.lock) for npm packages, checking for dependency confusion, typosquats, and malicious install scripts.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@import-guardianscan code: import shift from 'react-codeshift'; import React from 'react'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
import-guardian πͺ
Catch AI-hallucinated (slopsquatted) npm imports in generated code β before you run npm install.
An LLM just wrote some code. It might import a package that doesn't exist β a name the model confidently hallucinated. Attackers register exactly those names and ship malware. This is slopsquatting, and in 2026 it's one of the fastest-growing supply-chain attacks: code generators have been observed referencing 205,000+ unique non-existent package names, and real hallucinated packages (react-codeshift, a fake huggingface-cli with 30k+ downloads) have already shown up in the wild.
import-guardian reads the generated code, extracts every npm package it imports, and tells you which ones are real β so an agent never installs a name its own model invented.
It's part of the guardian set: npm-guardian audits a package you've already chosen for CVEs and malicious behaviour, license-guardian audits the licenses of your dependencies (GPL/AGPL/BUSL traps) before you ship, and lockfile-guardian audits the resolved package-lock.json for integrity tampering and risky install scripts. import-guardian works one step earlier than all of them, at the moment the code β and its dependency names β are generated.
What it catches
π» Hallucinated | imports of packages that do not exist on npm β the model invented the name. Returns |
πͺ€ Fresh squats | packages that do exist but were published days ago, have no source repo, near-zero downloads, or are a 1β2 edit typo of a popular library. Returns |
π§© Import-aware | resolves |
Verdicts: π’ CLEAN Β· π REVIEW Β· π΄ BLOCK.
Related MCP server: npm-guardian
Use it as an MCP server (free)
{
"mcpServers": {
"import-guardian": { "command": "npx", "args": ["-y", "import-guardian-mcp"] }
}
}Tools:
scan_code_importsβ give it a block of generated JS/TS; it extracts and checks every npm import. Run this on code you just generated, before its install command.check_packagesβ verify an explicit list of package names.verify_packageβ deep-check a single package name (existence, age, versions, repo, weekly downloads, edit distance to popular packages).audit_lockfileπ (premium) β the deep one. Give it a lockfile from npm (package-lock.json), yarn (yarn.lock), pnpm (pnpm-lock.yaml), PyPI (requirements.txt/poetry.lock/Pipfile.lock) or Go (go.mod/go.sum) and it resolves the whole transitive tree and audits every package for dependency confusion, transitive typosquats / homoglyph clones, maintainer-takeover fingerprints, nonexistent pins, and install-script risk. See below.
Deep lockfile audit (premium) π
scan_code_imports looks at the handful of imports you can see. audit_lockfile looks at the hundreds you can't β the fully resolved dependency graph in your lockfile β and finds the supply-chain attacks an LLM cannot reason about from source alone:
π― Dependency confusion | a package the lockfile resolves from a private / internal registry whose name is unclaimed on the public index β an attacker can publish that exact name publicly and shadow it. The single highest-impact supply-chain bug, and impossible to detect without the resolved lockfile + a live public-registry cross-check. On PyPI it's sharper still: |
πͺ Transitive typosquats | homoglyph/Unicode-confusable clones ( |
π³οΈ Maintainer takeover | the fingerprint of a compromised maintainer: a dormant package suddenly republished, a sole-maintainer project, or a rapid republish burst β the pattern behind event-stream, ua-parser-js, node-ipc and PyPI's ctx hijack. |
π Install-script version-diffing | the sharpest injection signal: a package whose newest release ADDED a |
π¬ Install-script PAYLOAD analysis | goes past whether a hook exists to what it does: downloads the package tarball, gunzip+untars it in-memory (no deps), resolves the lifecycle command to its entry file, and statically analyzes the actual code for malware behavior β network egress, credential/env exfil, child-process exec, download-and-run, obfuscation. An obfuscation-resistant AST/token analyzer decodes |
π PyPI sdist | the PyPI analogue of the npm tarball pass, and the sharpest PyPI surface: a source distribution runs |
π¦ Known-malware / known-vuln (live OSV cross-reference) | every resolved package is cross-referenced β at its exact pinned version β against the live OSV.dev advisory database (which ingests the OpenSSF Malicious Packages feed as |
ποΈ Local build-backend follow-hop (PyPI) | when |
π Go | a |
π£ Install-script & provenance risk | packages in the resolved tree that run install scripts, brand-new pins, missing repos, and near-zero real downloads (verified against npm / pypistats / crates.io). |
Seven ecosystems. The same resolved-graph engine runs over npm / yarn / pnpm, PyPI (requirements.txt, poetry.lock, Pipfile.lock), Go modules (go.mod, go.sum), Rust / Cargo (Cargo.lock, Cargo.toml), Java (Maven pom.xml, Gradle build.gradle / .kts / gradle.lockfile) and PHP / Composer (composer.json, composer.lock) β each cross-checked against its own public index (npm registry, PyPI, the Go module proxy, crates.io, Maven Central, Packagist). On crates.io the matcher knows the -/_ equivalence (rustdecimal vs rust_decimal); on Maven an internal groupId:artifactId unclaimed on Central is the dependency-confusion target; on Composer an internal vendor/package unregistered on Packagist while a private repo is merged with the public index is the confusion target, and a Packagist-abandoned package is flagged as a takeover risk. Large lockfiles are bounded: direct + private-source packages are always live-checked first, then transitive up to a cap, so one call never fans out to tens of thousands of requests.
POST /pro/audit { "lockfile": "<contents of package-lock.json>", "filename": "package-lock.json" }Pay per call via x402 (USDC on Base) or a prepaid Stripe key. The free POST /audit returns the verdict and issue counts by severity, but withholds which packages are affected and why β that's the paid report. This deep engine runs server-side only and is never shipped in the npm package.
Example
scan_code_imports({ code: 'import shift from "react-codeshift";\nimport React from "react";' })
π REVIEW β 1 referenced package(s) look risky.
π react-codeshift (risk 57/100)
β’ No source repository linked.
β’ Only 1 published version.
β’ Only 3 downloads in the last week despite being 158 days old.
π’ react (ok) β established package.Free HTTP API
POST /scan { "code": "import x from 'reqeusts'\nimport y from 'lodash'" }
GET /verify?name=expressHosted at https://import-guardian.vercel.app Β· try /verify?name=express vs /verify?name=reqeusts.
Pay-per-call (x402)
The /pro/* routes are gated by x402. Your agent pays $0.02 USDC per call automatically β no sign-up, no API key. Payment settles on-chain (USDC on Base). The server holds no private key; it only declares a public receiving address.
POST /pro/scan { "code": "β¦" } # 402 β pay β result, no rate limitHow it works (and its limits)
Existence + freshness come straight from the live npm registry (
registry.npmjs.org) and the download-stats API β these are facts, not guesses, which is the moat: an agent can't reliably know on its own whether a name it generated is real and trusted."Did you mean" uses Levenshtein distance against a curated list of high-impact packages attackers impersonate.
It does not execute or install anything (read-only), and it intentionally errs toward
REVIEWrather than silently passing a brand-new lookalike. It is a guardrail, not a guarantee β pair it with npm-guardian for behavioural/CVE auditing of packages you decide to keep.
License
MIT.
This server cannot be deployed
Maintenance
Related MCP Connectors
Verify npm packages before your AI agent installs them: hallucinations, advisories, API drift.
Blocks typosquatted or hallucinated npm/PyPI packages before an AI agent installs them.
check-package: block malicious npm/PyPI deps before your AI agent installs them. Free, no key.
Audit GitHub repos for malicious and supply-chain code before you depend on them.
Related MCP Servers
- AlicenseAqualityCmaintenancePre-install risk gate for npm packages. Stops AI coding agents from running malicious or lifecycle scripts run.12MIT
- AlicenseNot gradedqualityCmaintenanceAudits npm packages for supply-chain attacks (typosquatting, malicious install scripts, credential exfiltration) before installation, returning a SAFE/SUSPICIOUS/DANGEROUS verdict.MIT
- AlicenseAqualityCmaintenanceVerifies npm package names for safety, detecting typosquats and nonexistent packages before your coding agent installs them.27 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to automatically verify npm packages against the live registry before installation, flagging hallucinated, slopsquatted, or otherwise suspicious packages with risk verdicts.8 npmMIT