depguard
depguard-cli is an npm supply-chain security MCP server that vets packages before install, audits projects and workspaces, and checks whether your machine was hit by a known-malicious package.
Check exposure —
depguard_exposurescans every lock file (npm, pnpm, yarn, bun), global installs and the npm cache against ~35k known-malicious npm versions, reporting locations, evidence and remediation steps.Guard before installing —
depguard_guardverifies a package exists, detects typosquats and runs a security audit returning allow/warn/block.Decide what to use —
depguard_should_usechecks native Node.js APIs first, then recommends install / caution / write-from-scratch for a given intent.Audit workspace on clone —
depguard_audit_workspacelists auto-executing files (VS Code tasks, devcontainer hooks,.envrc, Makefiles, git hooks) to catch take-home-test malware before opening an IDE.Audit projects and packages —
depguard_audit_project,depguard_audit,depguard_audit_bulkanddepguard_audit_deepcover direct deps, transitives, single packages and full dependency trees (vulns, malware scan, install scripts, licenses).Remediate —
depguard_remediategroups vulnerable transitives under the direct deps that pull them in, sorted by impact.Code review —
depguard_reviewflags AI-agent debris: stray console.logs, empty catches, broken imports, orphan files.Clean up deps —
depguard_sweepfinds unused and phantom dependencies with estimated disk savings.Score & search —
depguard_scoregives a 0–100 package quality score;depguard_searchfinds npm packages by keyword ranked by score.Verify names —
depguard_verifyquick-checks existence and typosquatting to catch hallucinated packages.Compliance output —
depguard_sbomgenerates a CycloneDX 1.6 SBOM with optional VEX for EU CRA, EO 14028, SOC 2 and FedRAMP needs.
Fetches GitHub repository data (stars, activity, code analysis) to enrich package scoring and security audits.
Provides tools for auditing npm packages, searching the registry, scoring packages on security/maintenance/popularity, detecting typosquats and malware, analyzing dependencies, generating CycloneDX SBOMs, and recommending whether to install or build from scratch.
depguard-cli
Find out in seconds whether an npm supply-chain attack reached your machine. When a worm or a hijacked maintainer account ships malicious versions, npx depguard-cli exposure checks every project, global install and the npm download cache on your machine against 100,000+ known-malicious npm packages. It tells you exactly where a bad version is, whether it was installed, and what to rotate. depguard also audits packages before you install them and repositories before you open them. Zero runtime dependencies. Runs in the terminal or as an MCP server for Claude, Cursor, Windsurf and any MCP client.
Was I hit?
npx depguard-cli exposuredepguard exposure scan
Scanned: 143 lock files, 816 global packages, 167 cached tarballs (14530 distinct versions)
Under: /Users/you
Advisory DB: 2026-10-15 (34952 known-malicious packages)
OK No known-malicious package versions found.When something is found, every location is listed with the evidence and the steps to take:
EXPOSED 1 known-malicious package version found
ua-parser-js@0.7.29
CVE-2021-4229 Maintainer account hijacked. Compromised versions contained XMRig cryptominer and credential stealer. (2021-10-22)
- lock file /Users/you/work/api/package-lock.json (node_modules/ua-parser-js) [installed on disk, runs install scripts]
- npm cache tarball downloaded on 2021-10-22
What to do now:
1. A malicious version was installed or downloaded on this machine. Treat the machine as compromised...
2. Rotate every credential reachable from this machine: npm tokens, GitHub tokens and SSH keys, cloud credentials...What it looks at:
Every lock file under the given paths (default: your home directory): npm, pnpm, yarn classic and berry, bun. Nested and duplicated copies count, so a malicious version hidden at
node_modules/a/node_modules/bis found.Globally installed packages (
npm root -g).The npm download cache. It proves a malicious tarball was downloaded on this machine, and when, even if the project that pulled it is gone.
Only exact matches are reported: a version is flagged only when it falls inside a known-malicious range, and clean versions of packages that were once compromised are never flagged. The data comes from the GitHub Advisory Database, both malware advisories and advisories for legitimate packages that were hijacked to ship malware, refreshed daily. The exit code is 2 when something is found, so it can gate CI:
npx depguard-cli exposure . --skip-global --skip-cacheRelated MCP server: MCP Shield
Why depguard
I work on industrial software where every event has to be logged and recoverable — customers trust the system because the audit trail makes the system trustworthy. When I started wiring AI coding agents into our internal stack, I realised the npm ecosystem treats supply-chain integrity as someone else's problem: install 1,000 packages, hope for the best. depguard brings the same auditability mindset to JavaScript dependencies — verify before installing, audit what's already there, generate an SBOM your security team can actually use.
Zero runtime dependencies — because a security tool that pulls in 200 transitive packages is the joke that writes itself.
Install
npm install -g depguard-cli # or use directly with npx
npx depguard-cli audit expressMCP server (primary use case)
depguard exposes 15 MCP tools over stdio. Add it to any MCP-compatible client and your AI agent calls them automatically when it's about to install something, audit a project, or review code.
Setup, Claude Code one-liner:
claude mcp add --transport stdio depguard -- npx -y depguard-cli --mcpSetup — generic MCP config (Claude Desktop, Cursor, Windsurf, Continue.dev, Cline, Roo Code):
{
"mcpServers": {
"depguard": {
"command": "npx",
"args": ["-y", "depguard-cli", "--mcp"]
}
}
}The 15 tools
Tool | Use it when |
| "Was I hit by this attack?" Scans every lock file, global install and the npm cache for known-malicious versions, with locations, evidence and remediation steps |
| About to install package Y → pre-install verify + audit + allow/warn/block |
| Need functionality X → recommend install / use-native / write-from-scratch |
| Just cloned a repo, before opening it in any IDE. Lists files that auto-execute on workspace open (VS Code tasks |
| Audit a whole project — direct deps, transitives via lockfile, |
| "100 vulnerabilities, which 5 direct deps do I bump?" — groups transitives by parent, sorted by severity weight |
| Deep dive on one package (vulnerabilities + static code analysis + install scripts) |
| Compare A vs B vs C in one call |
| Full transitive tree audit for one package |
| AI code review — detect debris left by AI agents (console.logs, empty catch, broken imports, orphan files) |
| Find unused dependencies in a project |
| Search npm by keywords, ranked by depguard score |
| Score 0-100 for one package |
| AI hallucination guard — does this package exist? Is it a typosquat? |
| Generate a CycloneDX 1.6 SBOM (EU CRA, US EO 14028, SOC 2, FedRAMP) |
Every MCP response includes a tokenSavings field that quantifies the LLM-tokens saved vs equivalent manual research:
"tokenSavings": {
"responseTokens": 47,
"manualEstimate": 11100,
"saved": 11053,
"percentSaved": 100,
"manualSteps": [
"WebSearch: '{package} npm quality maintenance' (~800 tokens)",
"WebFetch: npm registry page (~3000 tokens)",
"WebFetch: GitHub repo for activity/stars (~3000 tokens)",
"WebSearch: '{package} vulnerabilities' (~800 tokens)",
"WebFetch: advisories page (~3000 tokens)",
"Reasoning: compute weighted score (~500 tokens)"
]
}Automatic, no configuration. Lets teams quantify the LLM cost reduction of routing dependency questions through depguard instead of free-text web research.
CLI
depguard-cli exposure [paths...] [--skip-global] [--skip-cache] [--max-depth 8] [--json]
depguard-cli audit <package[@version]> [--target-license MIT] [--json|--format sarif]
depguard-cli audit-project <path/package.json> [--include-dev] [--json|--format sarif]
depguard-cli audit-workspace [path] [--json|--format sarif]
depguard-cli audit-deep <package> [--json]
depguard-cli guard <package[@version]> [--threshold 60] [--block] [--json]
depguard-cli should-use <intent...> [--threshold 60] [--json]
depguard-cli sweep [path] [--include-dev] [--json]
depguard-cli review [path] [--full] [--json]
depguard-cli sbom <path/package.json> [--include-vex] [--include-dev] [-o out.json]
depguard-cli remediate <path/package.json> [--json]
depguard-cli search <keywords...> [--limit 10] [--json]
depguard-cli score <package> [--target-license MIT] [--json]
depguard-cli stats [--json]Pre-install guardian in action:
$ depguard-cli guard expresss
[WARN] expresss
Possible typosquat of: express
Score: 45/100 is below threshold 60
$ depguard-cli guard ai-made-up-package
[BLOCK] ai-made-up-package
Package does NOT exist on npm!GitHub Code Scanning (SARIF v2.1.0)
audit, audit-project, and audit-workspace accept --format sarif and emit SARIF v2.1.0 with GHSA-stable rule IDs (depguard/vuln/GHSA-…), CVSS-propagated severity, and stable partialFingerprints for dedup across runs.
# .github/workflows/depguard.yml
- name: Pre-open workspace audit
run: npx -y depguard-cli audit-workspace . --format sarif -o workspace.sarif || true
- name: Project dependency audit
run: npx -y depguard-cli audit-project ./package.json --format sarif -o project.sarif || true
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: |
workspace.sarif
project.sarifAPI
import { audit, auditProject, sweep, guard, generateSBOM, auditToSarif } from 'depguard-cli'
const report = await audit('express', 'MIT')
report.vulnerabilities.total // 0
report.securityFindings // SecurityFinding[] (static code analysis)
report.licenseCompatibility.compatible // true
const project = await auditProject('./package.json', { includeDevDependencies: true })
project.summary // { critical: 0, high: 2, moderate: 5, low: 3 }
project.transitiveSummary // { totalDeps: 800, vulnerable: 12, ... }
project.packageManagerAudit // audit of `packageManager: yarn@4.5.3`
const sweepResult = await sweep('.', { includeDevDependencies: true })
sweepResult.unused // [{ name: 'lodash', estimatedSizeKB: 1400, ... }]
sweepResult.estimatedSavingsKB // 2450
const decision = await guard('expresss')
decision.possibleTyposquat // true
decision.similarTo // ["express"]
decision.decision // "warn"
const bom = await generateSBOM('./package.json', { includeVex: true })
bom.specVersion // "1.6"
bom.vulnerabilities // [{ id: "GHSA-...", ratings: [...], affects: [...] }]What depguard checks
Scoring
Each package is scored 0-100 across five dimensions, with thresholds tuned for AI-agent decision-making:
Dimension | Weight | What it measures |
Security | 30% | CVEs, advisories, static code analysis findings |
Maintenance | 25% | Last publish, version count, deprecation |
Popularity | 20% | Weekly downloads (log scale) |
License | 15% | Compatibility with your project's target license |
Dependencies | 10% | Dependency count, install scripts |
Decisions (shouldUse): >= 60 → install, 40-59 → caution, < 40 → write from scratch.
Static-analysis caps the security score regardless of popularity — this is deliberate: a wildly popular package with a credential-stealing payload still loses.
Worst finding | Security score capped at |
Critical (e.g. malware, reverse shell) | 20/100 |
High (e.g. obfuscation, env-var exfil) | 45/100 |
None | unrestricted |
Pre-install guardian
Three sequential checks before npm install: (1) does the package exist on npm? (2) is the name a typosquat — Levenshtein distance against 100+ top packages? (3) full security audit. Used as the recommended MCP entry point for AI agents.
Install script analysis
depguard statically pattern-matches preinstall / install / postinstall scripts. Nothing is executed.
Pattern | Severity | Example |
Remote code execution | Critical |
|
Reverse shells | Critical |
|
Credential file access | Critical |
|
Sensitive env vars | Critical |
|
Shell typosquatting | Critical |
|
Obfuscated code | High |
|
Process spawning | High |
|
Static code analysis (tarball scan)
depguard downloads the package tarball, extracts JS files, and scans for 18+ malware patterns across 6 categories:
Category | Severity | What it detects |
| Critical | Eval of decoded payloads, reverse shells, crypto-mining |
| Critical/High |
|
| High |
|
| High/Medium | Long hex/unicode strings, base64 payloads, minified source in non- |
| High/Medium | Network calls in a "formatter" package, FS access in a "date utility" |
| Critical | Typosquatting patterns in install scripts |
Behavioral mismatch compares the package's stated purpose (description + keywords) against detected runtime behavior. A "string formatter" that makes network calls is flagged with a rich SecurityFinding (title, explanation, evidence, file, recommendation).
Dead-dependency detection
sweep scans .js/.ts/.mjs/.cjs/.jsx/.tsx for import / require / export from, recognises config-only dependencies (eslint, prettier, jest, tailwind, …), detects binaries used in npm scripts, pairs @types/* with their runtime peer, and marks untraced devDependencies as "maybe-unused" instead of "unused". Reports estimated disk savings.
Native-alternative advisor
should_use checks for native Node.js APIs before recommending packages — fetch (18+), crypto.randomUUID() (19+), structuredClone() (17+), and 20+ more. Each comes with example code and the minimum Node version.
Fix suggestions
Every vulnerable result includes a fixSuggestions array with currentVersion, fixVersion, and action: 'upgrade' | 'no-fix-available'. depguard_remediate aggregates these and groups vulnerable transitives by the direct dep that pulls them in, sorted by severity weight.
License compatibility
Permissive-to-copyleft hierarchy: Public Domain → Permissive (MIT, ISC, BSD, Apache-2.0) → Weak Copyleft (LGPL, MPL) → Strong Copyleft (GPL) → Network (AGPL). A dependency is compatible if its license is equally or more permissive than the target license.
SBOM (CycloneDX 1.6)
Native CycloneDX 1.6 generation against the public JSON Schema — no @cyclonedx/cyclonedx-library runtime dependency. Output is consumed unchanged by Dependency-Track, Trivy, Grype, and OWASP DT.
depguard-cli sbom ./package.json -o sbom.cdx.json
depguard-cli sbom ./package.json --include-vex --include-dev -o sbom.cdx.jsonSuitable for EU Cyber Resilience Act, US Executive Order 14028 / OMB M-22-18, SOC 2, FedRAMP, and supplier procurement. PURLs follow the Package URL spec. SHA-512 integrity hashes are extracted from package-lock.json and converted from base64 to hex per the CycloneDX schema. With --include-vex, advisories are inlined with CVSS ratings and patched versions.
Data, privacy & performance
Known-malicious packages, bundled.
exposureandguardmatch against a local copy of the GitHub Advisory Database's npm malware advisories plus hijacked-package advisories (CWE-506), refreshed daily, so the check itself makes no network calls. Advisories about packages that were only exposed through a malicious dependency are excluded, and a reviewed exception list overrides the data.Two advisory databases, deduplicated. Each advisory is filtered to the installed version range (no noise from advisories that don't actually affect you) and tagged with its
sourcefield.Source
What it catches
npm Registry
npm auditadvisoriesGitHub Advisory DB
GHSAs, often not in npm
Everything stays local. No telemetry, no usage reporting, nothing sent anywhere. Audit results are cached in memory (5 min TTL) and on disk under
~/.depguard/cache/(24h TTL); the cache is cleaned on startup.GitHub token (optional). Set
GITHUB_TOKEN(no scopes needed — identification only) to raise the GitHub Advisory API rate limit from 60/h to 5,000/h. IfghCLI or GitHub Actions already exposes one, depguard picks it up automatically.
About
Design principles. Zero runtime dependencies. Never throws on network errors — returns degraded results with warnings. TypeScript strict. 100% offline tests. False-positive aversion is a hard constraint for every detection rule — depguard is a security tool, and a security tool with poor precision destroys its own trust.
Development.
npm test # 543 offline tests
npm run check # version + build + lint + test + audit:security (gates publish)Author. Jorge Morais (jorgemopanc.com · LinkedIn) — Tech Lead at Balanças Marques in Braga, Portugal, building edge-to-cloud systems for industrial operations. Issues, PRs, and bug reports welcome. If depguard saves you from a malicious install or unblocks a compliance audit and you'd like to support the project, GitHub Sponsors is the cleanest way — no expectations, the tool is free and will stay so.
License. Apache-2.0 — see LICENSE.
Available Tools
15 toolsdepguard_auditA
Deep security audit of a single npm package. Downloads the tarball, scans source code for malware, checks vulnerabilities (npm + GitHub Advisory), analyzes install scripts, verifies license. Use when you need full details on a specific package. Pass a version to audit a specific installed version instead of latest.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | npm package name | |
| version | No | Specific version to audit (e.g. "4.17.1"). If omitted, audits the latest version. | |
| targetLicense | No | Project license for compatibility check (default: MIT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It lists actions (download, scan, check, analyze, verify) but does not mention side effects like network requests, resource usage, or whether it modifies anything. Lacks explicit disclosure of behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the purpose and usage. No superfluous words; every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no output schema, and no annotations, the description fully covers what the tool does, when to use it, and parameter semantics. No gaps remain for an agent to interpret.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. Description adds value by explaining version parameter with example and default behavior ('If omitted, audits the latest version'), and clarifies targetLicense default ('default: MIT').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Deep security audit of a single npm package' and lists specific actions (downloads tarball, scans for malware, checks vulnerabilities, analyzes install scripts, verifies license). This distinguishes it from sibling tools like depguard_audit_bulk and depguard_audit_deep.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use when you need full details on a specific package' and provides condition for version parameter. While it doesn't directly mention alternatives, the sibling tool names imply the scope, making usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_audit_bulkA
Audit multiple packages in one call. Accepts an array of names or a dependencies object from package.json. Use depguard_audit_project instead if you have a package.json path.
| Name | Required | Description | Default |
|---|---|---|---|
| packages | Yes | Array of package names OR a dependencies object from package.json (e.g. {"react": "^18.0.0", "express": "^4.0.0"}) | |
| targetLicense | No | Project license for compatibility check (default: MIT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions input types but does not state whether the audit is read-only, destructive, or involves any side effects, rate limits, or permissions. For a bulk operation, such details are important.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, no wasted words. The description is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has moderate complexity (accepts flexible input types) but no output schema. The description does not explain what the return value is, which is a gap for an agent to interpret results. Adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add meaning beyond what the schema already provides; it merely paraphrases the parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Audit multiple packages in one call,' specifying the verb (audit) and resource (packages). It distinguishes from sibling depguard_audit_project by advising to use that tool when a package.json path is available.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use an alternative: 'Use depguard_audit_project instead if you have a package.json path.' This provides clear context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_audit_deepA
Audit the full transitive dependency tree of a package. Crawls all nested dependencies recursively and aggregates vulnerabilities across the entire graph. Use when you need to know the total attack surface, not just direct deps.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | npm package name | |
| maxDepth | No | Max recursion depth (default: 5, max: 10) | |
| targetLicense | No | Project license for compatibility check (default: MIT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes non-destructive audit behavior (crawl, aggregate). While it doesn't explicitly state read-only, the audit context implies no modifications. Adds value beyond schema with depth and aggregation detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first states purpose, second explains mechanism, third gives usage guidance. No redundant information. Front-loaded with key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a transitive dependency audit tool with 3 params and no output schema, the description covers purpose, behavior, and usage context completely. It answers what, how, and when without missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 3 parameters with descriptions. The tool description does not add additional meaning beyond what's in the schema; it merely restates the purpose. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it audits the full transitive dependency tree, distinguishing from similar tools like depguard_audit (likely direct deps only). The verb 'audit' and resource 'dependency tree' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use when you need to know the total attack surface, not just direct deps,' providing direct guidance on when to choose this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_audit_projectA
Audit ALL dependencies in a project at once. Scans direct deps (full audit), transitive deps from lock file (vulnerability check), and the packageManager field. Pass the path to package.json and get a consolidated security report. Use this when the user asks to review project security or after cloning a new repo.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to package.json file | |
| targetLicense | No | Project license for compatibility check (auto-detected from package.json if not set) | |
| includeDevDependencies | No | Include devDependencies in audit (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry the burden. It explains the scanning scope and output (consolidated security report) but does not disclose potential side effects, auth needs, or what happens if the lock file is missing. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each with a clear purpose: scope, scanning details, input/output, and use case. It is front-loaded, concise, and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no output schema, and no annotations, the description covers the essential aspects: what it does, what to pass, and when to use. Minor gaps like missing error conditions or output structure details, but sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions. The description reinforces the 'path' parameter and mentions auto-detection for targetLicense and default for includeDevDependencies, adding slight value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool audits ALL dependencies in a project, specifying what is scanned (direct, transitive, packageManager field) and expects a path to package.json. It differentiates from siblings like depguard_audit by emphasizing the project-wide scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: 'when the user asks to review project security or after cloning a new repo.' Does not explicitly state when not to use or mention alternatives, but the context and sibling list imply it's for comprehensive scans.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_audit_workspaceA
MANDATORY: call this AFTER cloning a repository and BEFORE opening it in any IDE (VS Code, Cursor, JetBrains, etc.) or running direnv allow. Enumerates every file in the repo that auto-executes when the workspace opens: .vscode/tasks.json runOn:folderOpen, .vscode/settings.json shell overrides, .devcontainer lifecycle commands, .envrc, JetBrains run configurations, Makefile default targets, .gitattributes custom filter drivers, and committed git hooks. Classifies each as INFO / WARN / HIGH using FP-averse heuristics (benign npm run watch stays INFO; only curl|sh, base64 decode chains, credential paths, and obfuscation escalate). This is the technical defense against fake-interview / take-home-test malware campaigns where a coding-test repo compromises the developer's session before the IDE finishes loading.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the repository root to audit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses the classification scheme (INFO/WARN/HIGH), the FP-averse heuristic policy, and concrete escalation triggers (curl|sh, base64 chains, credential paths). It omits whether the operation is read-only or what permissions it needs, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the mandatory timing constraint, then the scope, then classification behavior, then the threat rationale. Dense but structured; the final threat-model sentence is motivational context that justifies urgency rather than padding, though it is the most expendable clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter audit tool with no output schema and no annotations, the description covers scope, timing, classification output, and heuristics thoroughly. The unstated return shape (findings list, counts) and read-only nature are minor remaining unknowns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter ('absolute path to the repository root') is fully documented in the schema. The description adds no syntax or format detail beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (enumerates/classifies) and resource (files that auto-execute on workspace open), with an explicit enumeration of the artifact types scanned. However, it never distinguishes itself from the many sibling audit tools (depguard_audit_project, depguard_audit_deep, depguard_audit_bulk, depguard_audit), leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong timing guidance: 'call this AFTER cloning ... BEFORE opening in any IDE or running direnv allow.' That is a clear when-to-use condition. It stops short of naming when NOT to use it or which sibling to prefer instead, so it falls short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_exposureA
Answer "was this machine hit?" after an npm supply-chain incident (worm, hijacked maintainer, malicious release). Scans every lock file under the given paths (npm, pnpm, yarn classic/berry, bun; nested copies included), globally installed packages, and the npm download cache, and matches each exact installed version against ~35k known-malicious npm packages. Reports where each malicious version was found, whether it is installed on disk, whether it runs install scripts, when its tarball was downloaded, and the remediation steps (credential rotation, cleanup). Use this when the user asks whether they are affected by an attack, or as a periodic check. Only exact version matches are reported; clean versions of previously compromised packages are never flagged.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | Directories to search for lock files (absolute paths). Default: the user's home directory. | |
| maxDepth | No | Directory depth to search below each path (default: 8) | |
| includeCache | No | Scan the npm download cache (default: true) | |
| includeGlobal | No | Scan globally installed npm packages (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses the exact-version matching rule, the explicit false-positive policy ('clean versions of previously compromised packages are never flagged'), and the reporting contents (on-disk presence, install scripts, tarball download time, remediation steps). It does not state whether the operation is read-only or whether it requires network access to refresh the malicious-package list, which are the remaining behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the question the tool answers, then scope, then matching semantics, then usage trigger. Every sentence carries information, but the single dense paragraph packs scope, output, and guidance together without visual separation, which slightly hurts scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description compensates well: it enumerates what is scanned (lock files across five package managers, nested copies, globals, cache) and what is reported (location, on-disk presence, install scripts, tarball timestamps, remediation). Only the operational profile (read-only? network required? runtime cost) is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (paths, maxDepth, includeCache, includeGlobal each documented with types and defaults), so the schema already does the heavy lifting. The description only restates 'under the given paths' and the cache/global scanning scope at a high level, adding no format or semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: scanning every lock file, global install, and npm cache and matching exact installed versions against ~35k known-malicious npm packages, framed as answering 'was this machine hit?'. The scope is unusually specific and unambiguous. It does not name or contrast with the many similar-sounding siblings (depguard_audit, depguard_sweep, depguard_verify), so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it: 'when the user asks whether they are affected by an attack, or as a periodic check.' That is a clear trigger condition. It offers no exclusions or alternative tools for adjacent needs (e.g. auditing a single project vs. the whole machine), which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_guardA
MANDATORY: call this BEFORE running npm install, yarn add, or pnpm add — whether the user asked for the package or you decided to install it yourself. Verifies the package exists (blocks hallucinated names), checks for typosquatting, runs security audit, and returns allow/warn/block. If the result is "block" or "warn", do NOT install the package without informing the user.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | npm package name to check before installing, optionally with the version to install (e.g. "express" or "express@4.18.2") | |
| threshold | No | Score threshold for allow decision (default: 60) | |
| targetLicense | No | Project license for compatibility check (default: MIT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the checks performed (existence, typosquatting, security audit) and the allow/warn/block verdict semantics plus the required handling of negative verdicts. It omits any note on rate limits or repeat-call behavior, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the MANDATORY directive, then delivers the checks and the result-handling rule in two dense but fully earned sentences with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations and no output schema, so the description must carry behavioral weight, and it explains the return verdicts and required follow-up. It is largely complete for a pre-install gate, with only minor gaps around latency or failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both optional parameters and the required 'name' are already documented in the schema. The description implies the verdict relates to a score threshold and license but adds no syntax or format detail beyond the schema, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (verifies existence, checks typosquatting, runs audit) on a specific resource (npm package pre-install) and names the trigger commands (npm install/yarn add/pnpm add). The scope is unmistakable, though it does not explicitly name which sibling tools it complements among the large depguard family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call it BEFORE any package install and covers the case where the agent decided to install on its own, not just user requests. It also states the downstream action on 'block'/'warn' results, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_remediateA
Build a remediation plan for a project with known vulnerabilities. Reads package.json + lock file, runs the same audit as depguard_audit_project, then groups every vulnerable transitive under the direct dep that pulls it in. Output is sorted by severity weight so the first remediation is the highest-impact bump. Use this when the user is staring at "100 vulnerabilities found" from npm install and needs to know which 5 direct deps to upgrade. Read-only: never modifies package.json, lockfile, or runs npm.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to package.json file | |
| targetLicense | No | Project license for compatibility check (auto-detected from package.json if not set) | |
| includeDevDependencies | No | Include devDependencies in audit (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Clearly states read-only nature: 'Read-only: never modifies package.json, lockfile, or runs npm.' Also describes internal steps (reads, groups, sorts). No annotations provided, so description carries full burden and succeeds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with main purpose, no redundant words. Every sentence provides useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output is described conceptually (sorted by severity, actionable), but no explicit return format. Given no output schema, a bit more detail on output structure would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds minimal value. It reinforces that path is absolute and that targetLicense is auto-detected, but does not go beyond schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it builds a remediation plan for vulnerabilities, identifying which direct dependencies to upgrade. It distinguishes itself from sibling tools like depguard_audit_project by explaining the grouping and sorting behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance: 'Use this when the user is staring at "100 vulnerabilities found"... and needs to know which 5 direct deps to upgrade.' Could improve by mentioning when not to use (e.g., if only raw audit is needed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_reviewA
Call this AFTER making significant code changes or before the user commits. Scans source files for issues you may have introduced: console.logs left in production code, empty catch blocks, broken imports, TODOs without issue references, empty test files, orphan files. Fix the findings before reporting your work as done.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | quick = per-file only (~500ms), full = cross-file analysis (~2-5s). Default: quick | |
| path | Yes | Absolute path to project root |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description accurately describes the tool's behavior (scans source files, no destructive actions) and lists the types of issues it detects. Since no annotations are provided, the description bears full responsibility, and it adequately conveys that this is a read-only review tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise with two sentences: the first immediately states when to use it, and the second lists the issues. It is front-loaded and every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool scans for issues and returns findings (implied by 'fix the findings'), the description does not explicitly state the output format or what the user should expect as a response. This omission limits completeness for a moderately simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters well-described (mode with timing and options, path as absolute path). The description adds a context about the types of issues scanned but does not add new parameter-specific meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to scan source files for issues after code changes or before commit, listing specific types of issues (console.logs, empty catch blocks, etc.). It differentiates from sibling tools like depguard_audit by focusing on post-change review for introduced issues.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to call this tool ('AFTER making significant code changes or before the user commits') and instructs to fix findings before reporting done. It provides clear context but does not explicitly mention alternatives or when not to use it, though the specific timing implies when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_sbomA
Generate a CycloneDX 1.6 Software Bill of Materials (SBOM) for an npm project. Reads package.json + lock file to enumerate direct + transitive components with PURLs and integrity hashes. Set includeVex=true to embed vulnerability data (VEX) from the audit pipeline. Use this when the user asks for an SBOM, a compliance report, or to comply with EU CRA / US EO 14028 requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to package.json file | |
| includeVex | No | Include vulnerability data (VEX section). Default: false. Slower because it runs auditProject under the hood. | |
| targetLicense | No | Project license for compatibility check when includeVex is true (default: MIT) | |
| includeDevDependencies | No | Include devDependencies in the dependency graph (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses behavior: reads specific files, enumerates components, runs auditProject under the hood for VEX, and notes that includeVex is slower. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, method, usage guidance. No filler. Front-loaded with action verb. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, no output schema, and no annotations, the description is thorough. It mentions the SBOM standard, compliance reasons, and VEX option. Lacks details on return format, but the standard format is implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning for includeVex (explains it's slower, runs auditProject) but does not elaborate on targetLicense or includeDevDependencies beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates a CycloneDX 1.6 SBOM for npm projects, specifying inputs (package.json + lock file), content (direct/transitive components, PURLs, hashes), and clearly distinguishes from sibling audit/guard tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use this when the user asks for an SBOM, a compliance report, or to comply with EU CRA / US EO 14028 requirements.' It also mentions when to set includeVex but does not explicitly state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_scoreA
Quick 0-100 quality score for a package. Faster than depguard_audit when you only need the score. Critical vulns cap at 30, high at 50.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | npm package name | |
| targetLicense | No | Project license for compatibility check (default: MIT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description discloses scoring behavior with caps for critical and high vulnerabilities. Adds value beyond basic purpose, though does not cover all behavioral aspects like side effects or authentication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, differentiation, and a key behavioral detail. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, description covers purpose, usage, and a behavioral detail. Could mention output format but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and description adds scoring context but does not directly elaborate on parameter meaning beyond schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it provides a 'Quick 0-100 quality score for a package' and distinguishes from sibling 'depguard_audit' by noting speed advantage for score-only needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says use when 'you only need the score' and is 'Faster than depguard_audit', providing clear usage context. Does not explicitly mention when not to use or other alternatives, but the guidance is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_searchA
Search npm for packages by keywords, sorted by depguard quality score. Use when you need to find packages but already know the keywords.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default: 10) | |
| keywords | Yes | Search keywords | |
| minScore | No | Minimum score filter 0-100 (default: 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions sorting behavior but does not explicitly state read-only nature or lack of side effects. Minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences: first states purpose, second gives usage guidance. No superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but description does not explain return format (e.g., list of packages, scores, pagination). Some information missing for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. Description adds only the sorting context, not additional parameter meaning beyond schema. Baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'search', resource 'npm packages', and sorting by 'depguard quality score'. Distinguishes from sibling tools which are audit/remediation focused.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Use when you need to find packages but already know the keywords.' Does not mention when not to use or alternatives, but sibling list shows no similar search tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_should_useA
When you need functionality (e.g. "RTSP streaming", "date formatting"), call this BEFORE choosing a package yourself. Checks if Node.js has a native solution first, then evaluates npm candidates and recommends install, caution, or write-from-scratch. Always prefer this over picking a package from your training data — it gives you up-to-date security and quality data.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | What you want to accomplish (e.g. "http client", "date formatting") | |
| threshold | No | Score threshold for install recommendation (default: 60) | |
| targetLicense | No | Project license for compatibility check (default: MIT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the full process: checks native solutions first, evaluates npm candidates, and gives recommendations with security and quality data. No annotations, but description fully covers expected behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no wasted words. Front-loaded with clear purpose and usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 3 parameters, description provides complete context: when to use, what it does, and the evaluation process. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented in schema. Description does not add additional meaning beyond what schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool's purpose: it checks for native Node.js solutions first, then evaluates npm candidates, and recommends install/caution/write-from-scratch. Differentiates from sibling tools which are about auditing/reviewing, not recommending.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'call this BEFORE choosing a package yourself' and 'Always prefer this over picking a package from your training data'. Provides clear guidance on when to use and contrasts with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_sweepA
Find unused npm packages in the project. Scans source files for imports and cross-references with package.json. Also detects phantom deps (installed but not declared). Call this after a coding session where you installed multiple packages — some may no longer be needed.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to project root (must contain package.json) | |
| includeDevDependencies | No | Include devDependencies in scan (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of disclosing behavior. It explains the scanning process (source files, package.json, phantom deps) and implies a read-only operation. No contradictions with annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. Each sentence serves a purpose: state action, explain method, provide usage scenario. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks description of output format, which is important since there is no output schema. The schema is simple (2 params), and the description covers the tool's purpose well, but omits what the result looks like, which is a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds context that path must contain package.json, adding slight value beyond the schema. It does not address the includeDevDependencies parameter explicitly, but the context is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: finding unused npm packages and phantom deps. It uses specific verbs like 'find', 'scans', 'cross-references', and 'detects', making the purpose unambiguous. The description differentiates from sibling tools by detailing the exact action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use ('after a coding session where you installed multiple packages'). While it does not list alternatives or when not to use, the context is clear enough for an AI agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
depguard_verifyA
Quick check if a package name exists on npm + typosquatting detection. Faster than depguard_guard when you only need existence verification without a full audit.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | npm package name to verify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses key behaviors (existence check, typosquatting detection, fast) but lacks details on side effects (e.g., read-only, error handling). Still above average for the simplicity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and key differentiator, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple with one parameter, no output schema, but description explains output (existence + typosquatting). Adequately complete, though could mention network dependency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'name', and description adds no extra semantic meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks package existence on npm and detects typosquatting, and distinguishes itself from sibling 'depguard_guard' by being faster for verification only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use: 'when you only need existence verification without a full audit', and contrasts with 'depguard_guard' for efficiency.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v1.15.2- Added
depguard_audit_workspace - Added
depguard_exposure - Changed
depguard_guard1 field changed- changed
Input schema / properties / name / descriptionPrevious value: -"npm package name to check before installing"New value: +"npm package name to check before installing, optionally with the version to install (e.g. \"express\" or \"express@4.18.2\")"
- Removed
depguard_workspace_audit
1 tool update
v1.12.0- Added
depguard_workspace_audit
2 tool updates
v1.11.1- Added
depguard_remediate - Added
depguard_sbom
1 tool update
- Removed
depguard_sbom
TDQS
Scored across 15 tools
The crowded audit_* family (audit, audit_bulk, audit_project, audit_deep, audit_workspace) could trip up an agent, but descriptions explicitly scope each one (single package vs. project vs. transitive tree vs. workspace files vs. bulk array). The verify/score/guard trio is also well-graded by depth. Minor residual overlap between audit_bulk and audit_project keeps this from a 5.
All tools share a consistent depguard_ prefix and snake_case style, which reads predictably. The only deviation is mixing verbs (audit, verify, guard) with nouns (sbom, exposure, sweep, score), but the convention is uniform enough to be unsurprising.
15 tools sit squarely in the well-scoped 3-15 band. Each tool covers a distinct capability (audit, SBOM, exposure scan, remediation, recommendation, search, verify, sweep, review) so none feel redundant at the count level.
The surface covers the full dependency-security lifecycle: discovery (search/should_use), pre-install gating (guard/verify), auditing (audit/project/deep/bulk), incident response (exposure), reporting (sbom), cleanup (sweep/review), and remediation planning. The only gap is that remediation is read-only (no apply/fix operation) and there is no standalone license-compliance tool, but these are reasonable scoping choices.
Maintenance
Related MCP Connectors
Zero-install security baseline for AI coding agents — OWASP/CWE-cited rules over MCP.
Zero-config MCP security scanner for AI-generated apps. 25K+ vulnerability patterns.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
AgentGuard — 20-tool AI safety MCP: policy preflight, risk scoring, audit logging, rate limits.
Related MCP Servers
- FlicenseAqualityDmaintenancePackage intelligence MCP server. Stops AI agents from installing hallucinated/malicious packages across 17 ecosystems. 22 tools, free, no auth.221-
- AlicenseCqualityDmaintenanceSecurity scanner and MCP server that catches dangerous patterns in MCP servers and AI agent projects, such as leaked secrets, shell execution, and prompt-injection text. Runs as both a CLI and MCP server with CI-friendly severity gates.21MIT
- AlicenseNot gradedqualityBmaintenanceStandalone MCP server that provides security scanning, project mapping, and vulnerability fix generation to AI coding assistants.143 npm2MIT
- AlicenseNot gradedqualityBmaintenanceSecurity scanner and runtime proxy for MCP servers. Catches tool poisoning, prompt injection, and rug-pull attacks (silent tool description changes) before they reach your AI agent. Includes a static scanner and a runtime stdio proxy.59 npmMIT