
Import Guardian
io.github.Baneado98由 GitHub 帳號 Baneado98 發布v0.3.0更新於 Oct 25, 2026
Catch AI-hallucinated (slopsquatted) npm imports in generated code before npm install.
概覽
一個本機 MCP 伺服器,用即時 npm 登錄庫核對 AI 產生程式碼中的 npm 匯入,在安裝前標出臆造或可疑的套件名稱。
- 可以做什麼
- 掃描一段產生的 JS/TS 程式碼,檢查其中引用的每個 npm 套件,給出 CLEAN、REVIEW 或 BLOCK 結論,並在疑似臆造或高風險時提供最接近的真實套件名稱建議。核對一份明確的套件名稱清單,或對單一套件做深入檢查,包括是否存在、發布時間、版本、原始碼儲存庫、每週下載量以及與熱門套件的相近程度。能把帶範圍與子路徑的匯入歸併為基礎套件名稱,並略過 Node 內建模組與本機路徑。README 另述了付費的鎖定檔稽核與免費 HTTP 介面,但不屬於本機工具集。
- 適用情境
- 適合在助理撰寫或修改會新增 npm 相依性的程式碼時使用,在執行安裝指令前找出臆造或新近搶註的套件名稱。可作為程式碼產生流程中的唯讀防護欄。
- 執行需求
- 透過 stdio 在本機執行,通常以 npx 從 import-guardian-mcp 這個 npm 套件啟動,因此需要 Node.js,並能連線 npm 登錄庫與下載統計介面。未宣告任何驗證、環境變數或標頭。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Import Guardian,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
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
Verdicts: 🟢 CLEAN · 🟠 REVIEW · 🔴 BLOCK.
Use it as an MCP server (free)
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:
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.
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
Free HTTP API
Hosted 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.
How 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.
來源:README.md,提交 4a7985c
工具
0版本歷史
1- v0.3.0最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分