depaudit-mcp
Audits npm projects via package-lock.json v2/v3, including nested node_modules, workspaces, and aliases; queries the npm registry for latest versions and suggests upgrades or overrides for vulnerable packages.
Supports dependency auditing for pnpm projects by parsing pnpm-lock.yaml v6 through v9, including transitive dependency paths and fix suggestions.
Audits Poetry projects by parsing poetry.lock and using the adjacent pyproject.toml to distinguish direct dependencies.
Queries PyPI for latest Python package releases and supports vulnerability and outdated-dependency checks for Python packages.
Audits Yarn v1 projects by parsing yarn.lock; Yarn Berry lockfiles are explicitly rejected with a clear message.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@depaudit-mcpScan this project for vulnerable dependencies and tell me the most urgent fixes."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
depaudit-mcp
Let your AI agent audit your project's dependencies, transitive ones included, straight from the lockfiles.
depaudit-mcp is an MCP server that reads lockfiles, asks OSV.dev which locked versions have known vulnerabilities, and tells the agent what to upgrade, how risky the upgrade is, and which direct dependency drags the problem in. It is read-only: it never edits your lockfiles or manifests. No API key is needed.
Lockfile | Notes |
| dev groups and workspace members count as direct |
| direct deps come from the |
|
|
| v2 and v3; nested |
| v6 to v9 |
| Yarn v1 (Berry is rejected with a clear message) |
| workspace members are the roots; git/path sources are skipped |
| direct modules come from |
What it looks like
Real output (OSV data of 2026-11-06) for an npm project that depends on lodash 4.17.15 and mkdirp 0.5.1:
> scan_project .
depaudit scan of C:\work\demo
package-lock.json: 35 packages, 3 direct, 32 transitive [C:\work\demo\package-lock.json]
9 advisories across 4 vulnerable package versions: 1 CRITICAL, 4 HIGH, 3 MODERATE, 1 LOW
== package-lock.json (C:\work\demo\package-lock.json)
CRITICAL minimist 0.0.8 [transitive] fix: upgrade to >= 0.2.4
- GHSA-xvch-5gv4-984h (CVE-2021-44906) CRITICAL CVSS 9.8, fixed in 0.2.4: Prototype Pollution in minimist
- GHSA-vh95-rmgr-6w4m (CVE-2020-7598) MODERATE CVSS 5.6, fixed in 0.2.1: Prototype Pollution in minimist
via: mkdirp 0.5.1 > minimist 0.0.8
HIGH lodash 4.17.15 [direct] fix: upgrade to >= 4.18.0
- GHSA-35jh-r3h4-6jhm (CVE-2021-23337) HIGH CVSS 7.2, fixed in 4.17.21: Command Injection in lodash
...
> suggest_fixes .
1. minimist 0.0.8 -> 0.2.4 [transitive, minor] fixes 2 advisory/ies, worst CRITICAL BREAKING: major/0.x bump, read the changelog and run tests
do: upgrade the parent, or add "overrides": {"minimist": "0.2.4"} to package.json
pulled in by: mkdirp 0.5.1 > minimist 0.0.8
3. lodash 4.17.15 -> 4.18.1 [direct, minor] fixes 5 advisory/ies, worst HIGH
do: npm install lodash@4.18.1Note the lodash target: 4.18.0 is listed as the fix for one advisory, but OSV says 4.18.0
is itself affected by another, so the plan moves on to 4.18.1. Every proposed target is re-checked.
Related MCP server: @4da/mcp-server
Install
Needs Python 3.10+ and internet access to api.osv.dev and the package registries.
Claude Code
claude mcp add depaudit -- uvx depaudit-mcpClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"depaudit": { "command": "uvx", "args": ["depaudit-mcp"] }
}
}Without uv: pip install depaudit-mcp, then use depaudit-mcp as the command.
Tools
Tool | What it does |
| Finds lockfiles under |
| Minimal upgrade plan: the smallest version fixing every advisory (verified clean against OSV), a BREAKING flag for major and 0.x-minor bumps, the parent that pulls the package in, and the command or override to apply. Prints only; changes nothing. |
| Packages behind the latest release on PyPI, npm, crates.io or the Go proxy, labelled MAJOR / MINOR / PATCH. |
| One name and version, no lockfile needed. Also shows the latest release. |
| An advisory in detail: summary, severity and vector, affected ranges, fix, references. Accepts GHSA, CVE, PYSEC, RUSTSEC, GO ids. |
Try asking
"Scan this project for vulnerable dependencies and tell me the three most urgent fixes."
"Which of my vulnerable packages are transitive, and what pulls them in?"
"What is the smallest set of upgrades that gets rid of every critical and high advisory? Which ones are breaking?"
"Is requests 2.19.1 safe to ship? What does GHSA-x84v-xcm2-53pg actually let an attacker do?"
"Which direct dependencies are a major version behind?"
"Audit every lockfile in this monorepo and group the findings by service."
How it works, and what it cannot tell you
Lockfiles are parsed locally into packages, direct roots and dependency edges.
All distinct
(ecosystem, name, version)triples go to OSV's/v1/querybatchin chunks, followingnext_page_tokenuntil every page is read; each advisory record is then fetched once from/v1/vulns/{id}.Records that alias each other (GHSA, PYSEC, CVE, RUSTSEC) are merged into one issue. Severity is the advisory's own rating, or a CVSS v3 base score computed from its vector. Records with only a CVSS v4 vector and no rating show as UNKNOWN.
Latest versions come from the registries, concurrently, cached for an hour.
Limits to know about:
It reports published advisories for the exact locked versions. It does not know whether your code calls the vulnerable function, and it finds nothing about unpublished bugs.
Dev dependencies are included (they run in your CI). Optional and platform-specific dependencies are included when the lockfile lists them.
Fixed-in versions come from OSV
ECOSYSTEM/SEMVERranges. Advisories that only list affected versions (no ranges) show "no fix known".A fix for a transitive package may be blocked by the parent's version range. The plan names the parent; upgrading it is usually the right move.
requirements.txthas no graph (every pin shows as direct) andgo.sumcan list modules that are not in the build.Not supported: npm lockfile v1, pnpm before v6, Yarn Berry, pip
-rincludes (scan the included file).
Security and privacy
Read-only on disk. The server only opens lockfiles and the
package.json/pyproject.toml/go.modbeside them. It never writes.suggest_fixesprints commands; it does not run them.What leaves your machine: package names and exact versions (to
api.osv.devand the registriespypi.org,registry.npmjs.org,crates.io,proxy.golang.org), and advisory ids. File paths and contents do not leave. Private package names in a lockfile are sent too, so do not point it at a lockfile whose package names are confidential.pathis any path the agent passes. Like any tool that reads files, give an agent that can call it only the access you are comfortable with. It only parses files with the supported lockfile names.Requests have timeouts (20 s); 429 and 5xx responses are retried at most 3 times, honouring
Retry-After, then fail with an explicit error. Lookup failures are shown, never turned into "no vulnerabilities".For tests or mirrors, the endpoints can be redirected with
DEPAUDIT_OSV_URL,DEPAUDIT_PYPI_URL,DEPAUDIT_NPM_URL,DEPAUDIT_CRATES_URLandDEPAUDIT_GOPROXY_URL.
Tests
pip install ".[test]" "ruff==0.16.0" "mypy==2.3.0"
ruff check src tests && mypy --strict src
pytest tests # offline: real lockfiles, a real stdio MCP session, recorded API responses
pytest tests -m live # real OSV.dev / PyPI / npm / crates.io / Go proxyThe offline tests run the real HTTP client against a local server that replays responses recorded from the live
APIs (tests/fixtures/recorded/, produced by tests/record_fixtures.py), including pagination, 429 retries, timeouts
and error mapping. Lockfile fixtures for uv, poetry, npm, pnpm (v6 and v9) and Yarn v1 were generated by the real
tools; Cargo.lock, go.sum and requirements.txt fixtures are written by hand. The live tests check that
requests 2.19.1 and lodash 4.17.15 are reported by the real API and that proposed fix targets are clean.
Companion
The tutorial depaudit-mcp-the-hard-way builds a minimal version of this server from scratch.
License
MIT
Available Tools
5 toolscheck_packageA
Check one exact package version for known vulnerabilities, without a lockfile.
ecosystem: PyPI, npm, crates.io or Go. Also reports the latest release and how far behind this version is. Example: check_package("PyPI", "requests", "2.19.1").
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| version | Yes | ||
| ecosystem | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. It correctly signals a read-only advisory lookup and adds that the tool also returns the latest release and version lag, which is useful extra context, but it says nothing about network dependency, rate limits, caching, or what happens for an unknown/unpublished package version.
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 short lines, each earning its place: purpose and scope first, then the ecosystem vocabulary, then the bonus output, then a worked example. No filler or restatement of the tool name.
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?
An output schema exists, so the description need not detail return values, and it wisely only flags the notable extra fields. The remaining gap is failure behavior (invalid ecosystem, nonexistent version) for a three-required-parameter tool with no annotation coverage.
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 0% and the schema declares only bare property titles, so the description is doing real work: it enumerates the accepted ecosystem values (PyPI, npm, crates.io, Go) where the schema has no enum, and the example fixes the positional/argument order name→version. Only 'version' format (exact vs range) is left slightly ambiguous.
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 opens with a specific verb and resource ('Check one exact package version for known vulnerabilities') and adds the scoping qualifier 'without a lockfile', which separates it in spirit from scan_project and list_outdated. It does not name those siblings explicitly, so the differentiation is implied rather than stated.
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?
'Without a lockfile' and 'one exact package version' imply the usage context (an ad-hoc single-package lookup rather than a project scan), but no alternative tool is named and no when-not-to-use condition is given. An agent must infer that scan_project or list_outdated cover the project-level cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_vulnerabilityA
Explain one advisory: summary, severity, affected version ranges, fix, references.
id: an OSV-known id such as GHSA-x84v-xcm2-53pg, CVE-2018-18074, PYSEC-2018-28 or RUSTSEC-2020-0071.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description must carry behavioral disclosure. It does signal a read-only lookup and names the sections returned, but says nothing about data source/auth needs, network requirements, rate limits, or what happens when the id is unknown or not found.
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 output contents are front-loaded in the first clause and the id format guidance follows, with no filler. The line breaks make the parameter note slightly awkward to parse as prose 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?
This is a single-parameter lookup tool with an output schema, so return shape is already covered — and the description still previews what sections come back. The one remaining gap, error behavior on an unknown id, is minor given the schema richness and tool simplicity.
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 0% and the schema only declares a bare string "Id", so the description has to compensate — and it does, giving four concrete accepted identifier formats (GHSA-…, CVE-…, PYSEC-…, RUSTSEC-…). That is real added meaning the schema lacks; it could go further on case sensitivity or prefix requirements.
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 object ("Explain one advisory") and enumerates the content produced: summary, severity, affected version ranges, fix, references. That makes it distinguishable from siblings like scan_project and list_outdated, though it never names those siblings explicitly.
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?
Usage is only implied by the singular object "one advisory" — an agent can infer this is the per-advisory deep dive rather than a bulk scan, but there is no statement of when to prefer it over check_package or suggest_fixes, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_outdatedA
List packages in a project's lockfiles that are behind their latest release.
Compares each locked version with the latest stable version on PyPI, the npm registry, crates.io or the Go module proxy, and labels the gap MAJOR, MINOR or PATCH (biggest first). By default only direct dependencies are checked; set include_transitive=True for everything (more requests; transitive packages may be held back by their parents' version ranges). Lookups are concurrent and cached; packages whose lookup fails are listed, not hidden.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| include_transitive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so well: concurrent cached lookups, failed lookups surfaced rather than hidden, and the caveat that transitive packages may be held back by parents' version ranges. Read-only behavior is only implied by 'List' and supported ecosystems are stated, but permissions and request-volume specifics remain unaddressed.
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 tight sentences, front-loaded with what the tool does, then defaults, then caveats. The registry list and the parent-range parenthetical both add decision-relevant information, and nothing is restated from the schema or the name.
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 output schema exists, so return values need not be explained, and the description covers the hard parts of a multi-registry network tool: caching, concurrency, and failure surfacing. It falls short only on the ambiguous 'limit' parameter for a tool whose complexity makes result-count semantics worth one clause.
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 0%, so the description must compensate, and it fully explains include_transitive (default, cost, parent-range caveat). However, 'limit' (default 40) is never mentioned; an agent cannot tell whether it truncates results or paginates. 'path' is left as a bare string with no indication that it should point at a project root containing lockfiles.
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: 'List packages in a project's lockfiles that are behind their latest release,' and adds scope detail (four named registries, severity labels). It never names a sibling, so an agent must infer on its own that check_package handles single-package lookups and scan_project handles broader scans, which keeps it 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?
Gives useful parameter-level guidance ('By default only direct dependencies are checked; set include_transitive=True for everything') and a cost warning, but never states when to pick this tool over check_package or scan_project. Usage is implied by the word 'lockfiles' rather than spelled out as a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_projectA
Scan a project's lockfiles for known vulnerabilities (OSV.dev).
path: a project directory (lockfiles are found up to 3 levels deep, skipping node_modules and virtualenvs) or one lockfile. Supports uv.lock, poetry.lock, requirements.txt (== pins only), package-lock.json (v2/v3), pnpm-lock.yaml (v6-v9), yarn.lock (v1), Cargo.lock and go.sum.
Reports package counts (direct vs transitive) and, worst first, each vulnerable package version with its advisories (GHSA/PYSEC/CVE merged), severity, CVSS score, fixed-in version and, for transitive ones, the dependency path from a direct dependency. limit caps how many vulnerable packages are listed per lockfile. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden and does so well: it declares read-only, caps recursion at 3 levels, skips node_modules/virtualenvs, states result ordering ('worst first') and that advisories are merged (GHSA/PYSEC/CVE) with transitive dependency paths. It omits what happens on an unsupported or unreadable lockfile, whether network access to OSV.dev is required, and any error 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?
Front-loaded with purpose, then input forms, then supported formats, then output shape. The format enumeration is long but earns its place by preventing calls on unsupported files; the paragraph form is slightly dense compared to a bulleted list.
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 2-parameter scan tool with an output schema, the description covers inputs, supported ecosystem coverage, ordering, and dedup/merge behavior thoroughly. The main residual gaps are error handling for unsupported files and any note that the scan requires reaching OSV.dev.
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 0%, and the description compensates strongly for both parameters: `path` is defined as either a directory (with depth/skip rules and a full list of accepted lockfile formats/pin styles) or a single lockfile, and `limit` is explained as capping vulnerable packages listed per lockfile. It still lacks details an agent must guess, such as whether `path` is relative to the working directory or absolute and how non-matching pins in requirements.txt are treated.
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 ('Scan a project's lockfiles for known vulnerabilities') plus the data source (OSV.dev), making it clearly distinct from check_package (single package) and list_outdated (outdated, not vulnerable) among the siblings.
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?
Clearly signals the input scope: a project directory versus a single lockfile, including the recursion depth and skipped directories. It gives the agent a concrete picture of when this tool applies, but never names the alternatives (check_package, list_outdated) or states exclusions explicitly, leaving sibling routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_fixesA
Propose a minimal upgrade plan for the vulnerabilities in a project's lockfiles.
For each vulnerable package: the smallest version that fixes every advisory (re-checked against OSV so the target is not itself vulnerable), whether the bump is breaking (major, or minor on 0.x), the dependency path for transitive packages, and the command or manifest change to apply it. This tool NEVER modifies files; it only prints the plan.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does well: it states plainly that the tool never modifies files and only prints a plan, and it discloses that targets are re-checked against OSV so the suggested version is not itself vulnerable. It omits operational context such as network access requirements or behavior when no vulnerabilities exist, which keeps it below 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-loaded purpose sentence, then a compact enumeration of exactly what the plan contains, then a closing non-mutation guarantee. Every clause is substantive; the middle sentence is dense but the list structure keeps it scannable.
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 one-parameter, read-only planning tool this covers the important ground: what it produces, that it is safe, and that targets are verified. An output schema exists, so the return-value enumeration is somewhat redundant but harmless. The one genuine hole is the meaning of 'path', which an agent needs before it can call the tool 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 description coverage is 0% and the single required parameter is named only 'path'. The description hints that it refers to a project with lockfiles, but never clarifies whether it is a project root, a directory to scan recursively, or a specific lockfile — a meaningful ambiguity given lockfiles may be nested. The schema provides no help, so this gap is fully the description's responsibility.
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 first sentence gives a specific verb and resource: propose a minimal upgrade plan for vulnerabilities in a project's lockfiles. That is clearly distinguishable from scan_project or list_outdated, which detect rather than plan. It stops short of naming any sibling explicitly, so the differentiation is inferred rather than stated.
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?
Usage is only implied: an agent can infer this belongs after a scan, since it consumes detected vulnerabilities and emits remediation. There is no explicit when-to-use, when-not-to-use, or pointer to scan_project/list_outdated/check_package as the preceding or alternative step.
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.
5 tool updates
v0.1.0- First observed
check_package - First observed
explain_vulnerability - First observed
list_outdated - First observed
scan_project - First observed
suggest_fixes
TDQS
Scored across 5 tools
Each tool targets a clearly distinct action+resource: scan_project (lockfile vuln scan), check_package (single-version vuln check), list_outdated (version gap listing), explain_vulnerability (advisory detail), and suggest_fixes (remediation plan). The potential overlap between suggest_fixes and list_outdated is resolved by descriptions (fixes for vulnerabilities vs. behind-latest labels). An agent can unambiguously pick the right tool.
All five tools follow a strict verb_noun snake_case pattern: suggest_fixes, scan_project, list_outdated, check_package, explain_vulnerability. No stylistic deviations or mixed conventions.
Five tools is a tight, well-scoped set for a read-only dependency auditor, with no redundant or filler tools. Each operation (scan, check, list, explain, plan) earns its place.
The surface covers the audit lifecycle well: discover vulnerabilities, check individual packages, identify outdated deps, explain advisories, and plan fixes. The main intentional gap is any apply/upgrade operation (explicitly read-only), and there's no batch or export/report tool, but core workflows are complete.
Maintenance
Related MCP Connectors
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
Scan packages and lockfiles (npm, PyPI, Go, Maven, Cargo, NuGet) for vulnerabilities and malware.
Queries live Google OSV.dev vulnerability intelligence for any PyPI, npm, Go, or Rust crate and re
Related MCP Servers
- AlicenseAqualityDmaintenanceAI-powered dependency vulnerability and breaking change analyzer that scans dependencies, identifies vulnerabilities via OSV.dev, and uses AI to assess real impact and suggest fixes.3Apache 2.0

@4da/mcp-serverofficial
AlicenseAqualityAmaintenanceEnables AI coding agents to learn, from locally read lockfiles, what changes between the dependency version installed and a target version, which of the user's files that upgrade touches, and which vulnerabilities it resolves. It also performs OSV-matched vulnerability scans, ranks upgrade plans, and stores decision memory, running entirely on the user's machine with no account or API keys.11718 npmApache 2.0- AlicenseAqualityAmaintenanceEnables AI agents to submit npm, PyPI, Go, or Maven packages and manifests to the free OSV.dev database and receive per-package and per-advisory results with CVE mappings, CVSS scores, severities, and the versions that fix each issue. It also supports filtering by minimum severity, de-duplicating alias advisories, and machine-readable error/warning rows for CI gates and upgrade recommendations.3MIT
- AlicenseAqualityCmaintenanceEnables Claude to look up known vulnerabilities in a project's dependencies across OSV.dev, CVE.org, NVD, CISA KEV and EPSS, then rank the findings by real-world exploitation so the most urgent fixes surface first. It supports single-package checks, keyword CVE searches, and whole-lockfile scans, with upgrade-path reasoning.4MIT