DepScout
Server Details
Scan packages and lockfiles (npm, PyPI, Go, Maven, Cargo, NuGet) for vulnerabilities and malware.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
check_dependencies (batch of exact versions), check_lockfile (whole file with transitive deps), and check_package (single package) all target dependency auditing, so boundaries overlap somewhat. However, the descriptions explicitly differentiate inputs ('Prefer this over check_dependencies when the user has the file itself') and get_vulnerability is clearly distinct as an ID lookup, so an agent can pick correctly.
All four tools follow a clean verb_noun pattern: check_dependencies, check_lockfile, check_package, get_vulnerability. Consistent snake_case with predictable prefixes throughout.
Four tools is a lean but sensible surface for a focused dependency-auditing server, with each tool covering a distinct input shape (batch, lockfile, single package, advisory ID). It is slightly on the thin side but nothing feels redundant.
The surface covers the core lifecycle: single-package safety/freshness, batch checks, full lockfile/transitive audits, and advisory lookups. Minor gaps exist, such as no ecosystem-wide advisory search or license-focused bulk query, but the primary audit workflows are well covered.
Available Tools
4 toolscheck_dependenciesCheck a dependency listARead-onlyIdempotentInspect
Check up to 50 packages at exact versions (for example from package.json, package-lock.json, requirements.txt, go.mod, pom.xml, Cargo.toml or a .csproj) against OSV.dev in one batch. Returns a summary count and only the packages with problems: malicious-package flags first, then vulnerabilities by severity with the version that fixes each and the minimum upgrade target. Use when the user pastes a dependency file or list, or asks to "audit my dependencies" or "check my package.json / requirements.txt", or which dependencies are vulnerable or outdated. Entries without an exact version are skipped and listed; transitive dependencies are only checked if included in the list.
| Name | Required | Description | Default |
|---|---|---|---|
| packages | Yes | Packages to check, each with name and exact version | |
| ecosystem | No | Default ecosystem for all entries. Package ecosystem: npm, PyPI, Go, Maven, crates.io or NuGet (aliases like pip, python, cargo, rust, golang, java, dotnet also work) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial behavior beyond them: return shape (summary count plus only problem packages, malicious flags first, then severity-ordered vulns with fix versions and minimum upgrade targets), the 50-entry batch limit, and that version-less entries are skipped and listed while transitive deps are checked only if listed.
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?
A single dense paragraph that front-loads the verb, scope, and batch limit before usage triggers and edge-case behavior. Every sentence carries information, though it is packed enough that the usage guidance and ordering rules could be separated for faster scanning.
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, the description compensates by describing the return format in detail, and it covers ecosystem defaults, entry limits, and skip behavior. An agent has everything needed to invoke and interpret this 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 description coverage is 100%, so the baseline is 3, but the description adds semantics not present in the schema: the exact-version requirement and the explicit skip-and-list behavior for entries lacking an exact version, plus reinforcement of the 50-item cap.
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 (check), resource (packages at exact versions), scope (up to 50 in one batch), and the external authority (OSV.dev). The batch framing implicitly distinguishes it from single-package siblings like check_package, so an agent can tell which tool to reach for.
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 concrete triggers — pasted dependency file/list, 'audit my dependencies', 'check my package.json/requirements.txt', or vulnerable/outdated questions — plus the file types it accepts. It does not name sibling tools or state when-not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_lockfileAudit a lockfileARead-onlyIdempotentInspect
Audit a whole lockfile or dependency file in one call, including transitive dependencies where the file records them. Paste the file content as-is: package-lock.json, npm-shrinkwrap.json, yarn.lock, pnpm-lock.yaml, requirements.txt (== pins), poetry.lock, uv.lock, Pipfile.lock, Cargo.lock, go.sum, go.mod, packages.lock.json (NuGet) or gradle.lockfile. Up to 3,000 packages are checked against OSV.dev. Returns a summary and only the packages with problems: malicious-package flags first, then vulnerabilities by severity with the minimum upgrade target. Use when the user pastes or attaches a lockfile, asks for a full or transitive dependency audit, or asks "is my project vulnerable?". Prefer this over check_dependencies when the user has the file itself.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | The full text of the lockfile or dependency file, pasted as-is | |
| filename | No | File name, e.g. package-lock.json, yarn.lock, Cargo.lock, go.sum, poetry.lock. Helps detect the format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds genuine behavioral context beyond them: the 3,000-package cap, the OSV.dev backend, and the output shape (summary plus only problem packages, malicious flags first, vulnerabilities by severity with a minimum upgrade target).
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?
Dense but front-loaded: what it does, what to paste, what it checks against, what it returns, then when to use it. Every sentence carries distinct information and none is redundant with structured fields.
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, the description must describe returns, and it does (summary plus problem packages, ordered by severity, with upgrade targets). Format support, limits, and routing are all covered, so nothing an agent needs to call it correctly is missing.
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 add value by enumerating the accepted file formats and the '== pins' constraint for requirements.txt, which the schema only gestures at with a short examples list.
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 (audit) and resource (lockfile/dependency file) with explicit scope: whole-file including transitive dependencies. It enumerates the accepted file formats, which lets an agent recognize the resource without opening the schema.
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 explicit triggers (user pastes/attaches a lockfile, wants a full or transitive audit, asks 'is my project vulnerable?') and an explicit routing rule: prefer this over check_dependencies when the user has the file itself. Names the sibling and the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_packageCheck a packageARead-onlyIdempotentInspect
Check one open-source package (npm, PyPI, Go, Maven, crates.io or NuGet) for safety and freshness. Returns a malicious-package flag (from OSV MAL- and malware advisories), known vulnerabilities with severity and the version that fixes each, the minimum version that clears all of them, the latest stable version, whether the given version is outdated or deprecated, licences, last release date, and the linked repository's OpenSSF Scorecard. If no version is given, the latest version is checked. Use when the user asks "is safe?", "is it malware?", "which version should I use?", "should I upgrade?", or about a package's known CVEs, and before recommending any package or version to install (npm install, pip install, go get, cargo add, etc.). Data comes from OSV.dev and deps.dev; newly published malware may not be listed yet.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Package name, e.g. lodash, @types/node, requests, github.com/gin-gonic/gin, org.apache.logging.log4j:log4j-core, serde, Newtonsoft.Json | |
| version | No | Optional exact version to check, e.g. 4.17.15. Omit to check the latest release | |
| ecosystem | Yes | Package ecosystem: npm, PyPI, Go, Maven, crates.io or NuGet (aliases like pip, python, cargo, rust, golang, java, dotnet also work) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe-read profile (readOnly, idempotent, non-destructive, openWorld), and the description goes well beyond them by disclosing data provenance (OSV.dev and deps.dev), the default behavior when version is omitted (latest version is checked), and an explicit freshness caveat that newly published malware may not yet be listed. Those are exactly the operational traits an agent needs and that structured fields cannot convey.
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 purpose, then return contents, then usage triggers and a caveat; every sentence carries information and there is no filler. It is dense as a single long paragraph, which slightly hurts scannability, but nothing is wasted.
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?
There is no output schema, so the description must carry the return-value burden and it does, enumerating each returned field including the fix version and minimum clearing version. Combined with multi-ecosystem coverage, the omission default, and the data-source caveat, an agent has everything needed to call and interpret it.
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%, with the schema itself documenting the ecosystem aliases and the version default ("Omit to check the latest release"). The description restates that default and the ecosystem list but adds no new syntax, format, or constraint information beyond the schema, 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 concrete verb ("Check") and resource ("one open-source package") and enumerates the ecosystems covered, then lists exactly what the result contains (malware flag, vulnerabilities, fix versions, latest stable version, licences, Scorecard). The word "one" implicitly separates it from the bulk siblings check_dependencies and check_lockfile, so an agent can route correctly without opening a schema.
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 explicit trigger phrasings ("is <package> safe?", "is it malware?", "should I upgrade?") and a concrete precondition: call it before recommending any package or version to install, with install commands listed. It does not name the sibling alternatives (check_dependencies, check_lockfile, get_vulnerability) or say when NOT to use it, so it stops short of a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vulnerabilityGet vulnerability detailsARead-onlyIdempotentInspect
Look up one vulnerability or malicious-package advisory by ID (CVE, GHSA, PYSEC, GO, RUSTSEC, MAL and other OSV IDs) and return its summary, severity, CVSS vector, aliases, publish date, the affected packages with their affected and fixed version ranges, and key references. Use when the user mentions a specific advisory or CVE ID ("what is CVE-2021-44228?", "am I affected by this GHSA?") and wants to know what it is, what is affected or which version fixes it. Only covers advisories in OSV.dev.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Advisory ID, e.g. CVE-2021-44228, GHSA-29mw-wpgm-hmr9, PYSEC-2018-28, MAL-2025-20690 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds genuinely new behavior: the exact fields returned (severity, CVSS vector, aliases, publish date, affected packages with affected/fixed ranges, references) and a coverage boundary ('Only covers advisories in OSV.dev'), which tells the agent when a lookup will come back empty.
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?
Purpose is front-loaded, followed by the return payload, then the usage trigger, then the scope caveat. Three sentences with no filler; the return-field enumeration is dense but justified given there is no output schema to carry it.
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, the description carries the return-value burden and does so explicitly (summary, severity, CVSS vector, aliases, dates, version ranges, references). Combined with the OSV.dev coverage boundary and a concrete usage trigger, an agent has everything needed to decide and call correctly.
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 the schema already supplies ID examples, so the baseline is 3. The description goes slightly beyond by enumerating additional ID namespaces (GO, RUSTSEC, MAL, 'other OSV IDs'), clarifying that the single 'id' field accepts any OSV ecosystem identifier rather than just CVEs.
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 and resource ('look up one vulnerability or malicious-package advisory by ID') and immediately enumerates the accepted ID namespaces (CVE, GHSA, PYSEC, GO, RUSTSEC, MAL). The single-advisory-by-ID framing clearly separates it from the package/lockfile/dependency checking siblings, which operate on project manifests rather than a named advisory.
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 an explicit trigger with real user phrasings ('what is CVE-2021-44228?', 'am I affected by this GHSA?') and the intent behind the call (what it is, what is affected, which version fixes it). No sibling tool is named as an alternative, so the routing guidance is context-rich but not exhaustive.
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
- First observed
check_dependencies - First observed
check_lockfile - First observed
check_package - First observed
get_vulnerability
Related MCP Connectors
Generate SBOMs, scan vulnerabilities, and analyze dependencies from local projects or Git repos.
Detect malicious or vulnerable npm packages: registry search, OSV.dev and GitHub advisory lookups
Supply chain risk scoring for npm, PyPI, Cargo, and Go. 9 tools. Behavioral signals.
Check an npm or Python package, or a package.json, for vulnerabilities and upkeep.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceScans Python, Node.js, Java/Spring, and PHP dependency manifests for known vulnerabilities using OSV and GitHub Advisory APIs.-

@guardbee/mcp-dependencyofficial
AlicenseNot gradedqualityFmaintenanceEnables auditing npm, pip, and other package dependencies for known CVEs via the OSV database, with tools to scan manifests, query individual packages, and integrate into CI/CD workflows.456 npmMIT- AlicenseBqualityDmaintenanceAudits package lockfiles for vulnerabilities, supporting npm, yarn, and pnpm. Runs via CLI or as an MCP server over stdio.111 npm83MIT
- AlicenseNot gradedqualityCmaintenanceEnables users to look up package versions, scan for vulnerabilities, and analyze dependencies across multiple registries (npm, Maven, PyPI, etc.) using exact version recommendations for security.4MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.