Skip to main content
Glama

Server Details

Query OSV.dev for package vulnerabilities and batch-audit dependency lists via MCP.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 69 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/osv-advisory-mcp-server
GitHub Stars
2
Server Listing
osv-advisory-mcp-server

TDQS

A4.6/5.0

Scored across 5 tools

Disambiguation4/5

The three query tools (package, batch, commit) target distinct input shapes — single package version, up to 1000 mixed entries, and a single commit hash — and osv_get_vulnerability is clearly ID-based, while osv_list_ecosystems is a pure helper. The only mild overlap is osv_query_package vs osv_query_batch, since batch is effectively a superset, but descriptions steer usage by scenario (single lookup vs audit/SBOM).

Naming Consistency5/5

All tools use the osv_ prefix with a consistent verb_noun pattern: get_vulnerability, list_ecosystems, query_package, query_batch, query_commit. Verb semantics are predictable (get for single record fetch, list for enumerations, query for searches).

Tool Count5/5

Five tools is well-scoped for an OSV advisory server — a lookup, three query variants covering the main input shapes, and an ecosystem helper. Each tool earns its place with no filler.

Completeness4/5

The surface covers the key OSV workflows: full advisory retrieval, single package, batch/lockfile triage, commit-based lookup, and ecosystem validation. Minor gaps exist — no lookup by CVE/alias ID and no ecosystem-wide advisory enumeration — but agents can chain to related servers for those.

Available Tools

5 tools
osv_get_vulnerabilityOsv Get VulnerabilityA
Read-onlyIdempotent
Inspect

Fetch the full advisory record for an OSV vulnerability ID. Returns the complete record: summary, full details text, CVE aliases, all affected packages and version ranges, fix versions, CVSS severity vectors, CWE weakness IDs, and references. Use when osv_query_package or osv_query_batch returns a vuln ID and you need the full advisory context — affected packages or remediation guidance. For overflow, repeat the original input with page: overflow.page. Continue the same path with offset: page.nextOffset and revision: page.revision until nextOffset is null. Retrieve each entries[].deferred.path separately at offset zero without a revision. Do not pass the output page object as input. Every page is a fresh lookup; restart a changed node without a revision. Transmission overflow and upstream truncation are separate; neither confirms clean.

NameRequiredDescriptionDefault
idYesOne exact, complete OSV advisory ID from any OSV source database, matched case-sensitively. Prefixes include "GHSA-" (GitHub), "PYSEC-" (PyPI), "RUSTSEC-" (Rust), "GO-" (Go), "DSA-"/"DLA-" (Debian), "USN-" (Ubuntu), "RHSA-" (Red Hat), and "CVE-". No wildcards or partial IDs — take IDs from osv_query_package or osv_query_batch results. Example: "GHSA-29mw-wpgm-hmr9".
pageNoRepeat id with page: overflow.page first; then select path, offset: page.nextOffset, revision: page.revision. Start deferred child paths without a revision.

Output Schema

NameRequiredDescription
idNoOSV vulnerability ID.
pageNoOne bounded page of an addressed normalized node.
errorNoPresent when the call failed. Absent on success.
cweIdsNoCWE weakness classifications (e.g. ["CWE-79"]). Present on GitHub Advisory Database records; empty otherwise.
aliasesNoAlternative IDs — usually CVE IDs. Accepted by nvd_get_cve on nist-nvd-mcp-server for CVSS base score and CISA KEV status.
detailsNoFull advisory text, typically in Markdown. May include proof-of-concept, reproduction steps, or remediation guidance.
previewNoCompact view; overflow identifies omissions. This is not the complete record.
summaryNoOne-line advisory description.
affectedNoAll affected packages and their version ranges. An advisory may span multiple packages or ecosystems.
modifiedNoISO 8601 timestamp of last modification.
overflowNoTransmission overflow disclosure; independent of upstream truncation.
severityNoRecord-level severity entries (CVSS vectors, Ubuntu priorities). Empty for unscored advisories and for advisories that score each affected package separately.
publishedNoISO 8601 timestamp when published.
withdrawnNoISO 8601 timestamp when this advisory was withdrawn. Present ONLY on withdrawn advisories — a withdrawn record has been retracted and must not be treated as an active vulnerability.
referencesNoAdvisory references — NVD links, patches, vendor advisories, PoC reports.
schemaVersionNoOSV schema version this record conforms to (e.g. "1.7.3").
severityLabelNoSeverity label ("LOW", "MODERATE", "HIGH", "CRITICAL") from the first source that yields one: database_specific.severity, an Ubuntu priority, then the highest CVSS v3/v4 score (0.1–3.9 LOW, 4.0–6.9 MODERATE, 7.0–8.9 HIGH, 9.0–10.0 CRITICAL). Uses every affected package severity entry when the record-level list is empty. Null when no source yields a label.
severitySourceNoThe severity entry severityLabel was derived from. Null exactly when the label is.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnly, idempotent, closed-world), and the description adds genuinely non-redundant behavior: the overflow/deferred-path protocol, revision staleness semantics ('restart a changed node without a revision'), the constraint that every page is a fresh lookup, the warning not to feed the output page object back in, and the distinction between transmission overflow and upstream truncation. That is substantial context beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then usage, then pagination protocol in three tight blocks; no filler sentences. The pagination block is dense and jargon-heavy (overflow, deferred, revision, stale_page_revision) but each clause carries operational detail, so it earns its length despite the reading burden.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return-value explanation is technically unnecessary, yet the field list is harmless orientation; the pagination, staleness, and re-entry rules fully cover the complexity introduced by the nested page object. An agent has everything needed to perform a complete lookup across pages.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds workflow sequencing the schema does not convey — repeating the original input with page: overflow.page, continuing with offset/revision until nextOffset is null, and fetching entries[].deferred.path at offset zero with no revision. It adds real meaning about how the parameters are chained across calls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Fetch the full advisory record for an OSV vulnerability ID') and immediately distinguishes itself from the query siblings, which return IDs rather than full advisories. The enumeration of returned content (aliases, affected ranges, fix versions, CVSS/CWE) makes the deliverable unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the trigger condition and the upstream tools: 'Use when osv_query_package or osv_query_batch returns a vuln ID and you need the full advisory context.' It even states the motivating need (affected packages or remediation guidance), leaving nothing to inference about when to call this instead of the query tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

osv_list_ecosystemsOsv List EcosystemsA
Read-onlyIdempotent
Inspect

Return the supported ecosystem identifier strings for osv_query_package and osv_query_batch: every ecosystem the OSV schema names that OSV.dev accepts at query time, plus GIT, as verified on 2026-09-24. Ecosystem strings are case-sensitive exact matches — passing "pypi" instead of "PyPI" returns an error from the API. Use this tool to discover valid ecosystem strings before querying, or to verify an ecosystem identifier from a lockfile format. The list is static and may lag ecosystems added after that date.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
noteNoAdvisory note about list currency and canonical source.
errorNoPresent when the call failed. Absent on success.
ecosystemsNoSupported ecosystem identifier strings. These are case-sensitive exact matches required by the ecosystem parameter of osv_query_package and osv_query_batch.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and idempotentHint=true, so the description doesn't need to repeat that. The description adds valuable context: ecosystem strings are case-sensitive, and the list is static and may lag behind new ecosystems as of the verified date. This helps set expectations about the tool's currentness and potential error behavior, which is beyond what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise but packed with useful information. It front-loads the purpose and then adds critical usage and caveat details in a logical sequence. Each sentence earns its place: purpose, case-sensitivity warning, usage guidance, and freshness caveat. No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is an output schema, so the description needn't detail the return format. The description covers everything an agent needs to use this tool correctly: what it returns, why it's useful, the case-sensitivity constraint, and the staleness caveat. Given the zero-parameter nature and strong annotations, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema coverage is 100% (no properties). The description still adds meaning by explaining the output (a list of ecosystem identifier strings) and its significance, which is useful even without parameters. Since there are no parameters to describe, the baseline of 4 is appropriate as it provides context about the output and its use.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 return supported ecosystem identifier strings for querying OSV. It specifies the exact resource (ecosystem identifiers) and the action (list), and mentions its role in supporting two sibling tools. It distinguishes itself from siblings by focusing on discovery of valid identifiers rather than querying vulnerabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use this tool: before querying (osv_query_package or osv_query_batch) to discover valid ecosystem strings, or to verify an identifier from a lockfile. It also mentions that passing incorrect case (e.g., 'pypi' vs 'PyPI') will cause an error, effectively guiding the agent to use this tool to avoid that. It implicitly differentiates from siblings by positioning this as a discovery/verification step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

osv_query_batchOsv Query BatchA
Read-onlyIdempotent
Inspect

Query vulnerabilities for multiple packages in one call — the primary tool for dependency audits, SBOM scanning, and lockfile triage. Pass up to 1000 mixed {name, ecosystem, version} tuples and {purl, version?} identifiers, with exactly one embedded or separate version per PURL. Each entry in the response corresponds positionally to the input. Each finding includes CVE aliases for chaining to nist-nvd-mcp-server for CVSS scoring. Large replies retain the complete summary. For overflow, repeat the original packages array with page: overflow.page. Continue the same path with offset: page.nextOffset and revision: page.revision until nextOffset is null. Retrieve each entries[].deferred.path separately at offset zero without a revision. Do not pass the output page object as input. /results/17 selects original input row 17, even when earlier rows failed. Pages are fresh lookups and do not recompute the initial summary; restart a changed node without a revision. Transmission overflow and upstream truncated are separate; neither confirms clean.

NameRequiredDescriptionDefault
pageNoRepeat the original packages array with page: overflow.page first. Continue using path, offset: page.nextOffset and revision: page.revision. /results/17/... keeps original row index 17; start deferred children without a revision.
packagesYesPackages to audit. One entry per dependency. Positional: result[i] corresponds to packages[i].

Output Schema

NameRequiredDescription
pageNoOne bounded page of an addressed normalized node.
errorNoPresent when the call failed. Absent on success.
noticeNoPresent on all-clean or all-errors batches — the aggregate outcome for content-only clients.
previewNoCompact view; overflow identifies omissions. This is not the complete record.
resultsNoPer-package results, positionally matching the input array.
summaryNoAggregate statistics across the full batch.
overflowNoTransmission overflow disclosure; independent of upstream truncation.
effectiveQueryNoCompact scan summary (package and outcome counts), echoed on edge-case batches for content-only clients.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations: documents positional result mapping, summary retention in large replies, the overflow→page→nextOffset→revision continuation protocol, deferred-path retrieval at offset zero without revision, and the caveat that overflow/truncation do not imply a clean result. These are real behavioral traits an agent cannot infer from the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and the primary qualifier (1000 mixed identifiers) before paging rules, which is the right ordering. However, the tail of the description is a dense run of paging clauses that partly restate the page.path/offset/revision schema descriptions, and a few phrases ("restart a changed node without a revision") are terse to the point of ambiguity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity tool with nested input, 2 parameters, and an output schema, the description covers the gaps structured fields cannot: positional correspondence, per-entry failure handling via /results/N, overflow recovery, and the distinction between overflow and upstream truncation. Return-shape detail is correctly left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 value by explaining that offset/revision continuation is tied to the same path, that a revision must be omitted on first calls to deferred children, and that output page objects must not be fed back as input. Some paging detail is duplicated from the schema rather than newly added, keeping it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Query vulnerabilities for multiple packages in one call") and immediately scopes it against the single-package sibling by emphasizing batch semantics and the 1000-entry limit. An agent can distinguish this from osv_query_package without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names concrete use cases (dependency audits, SBOM scanning, lockfile triage) and prescribes when to use tuple vs PURL vs embedded version, plus a downstream chaining path to nist-nvd-mcp-server. It does not explicitly say when to prefer osv_query_package or osv_query_commit instead, so the sibling exclusion is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

osv_query_commitOsv Query CommitA
Read-onlyIdempotent
Inspect

Query known vulnerabilities for one full Git commit hash (40 hexadecimal SHA-1 or 64 hexadecimal SHA-256 characters, case-insensitive). Abbreviated hashes are rejected. Returns advisory summaries, record-wide severity and GIT ranges with repositories and ordered fix events; use osv_get_vulnerability for full records. No package-specific fixedVersions are inferred. For overflow, repeat the original input with page: overflow.page. Continue the same path with offset: page.nextOffset and revision: page.revision until nextOffset is null. Retrieve entries[].deferred.path separately at offset zero without a revision. Do not pass the output page object as input. Pages are fresh lookups; restart a changed node without a revision. Transmission overflow and upstream truncated are separate; neither confirms clean.

NameRequiredDescriptionDefault
pageNoRepeat the original commit with page: overflow.page first, then select path, offset: page.nextOffset and revision: page.revision.
commitYesFull Git commit hash: 40 SHA-1 or 64 SHA-256 hex characters, case-insensitive.

Output Schema

NameRequiredDescription
pageNoOne bounded page of an addressed normalized node.
errorNoPresent when the call failed. Absent on success.
vulnsNoMatching advisories. Empty confirms no known vulnerabilities only when truncated is false.
previewNoCompact view; overflow identifies omissions. This is not the complete record.
overflowNoTransmission overflow disclosure; independent of upstream truncation.
queryMetaNoEffective commit query and retrieved count.
truncatedNoMore OSV pages remain beyond the fetch cap; an empty truncated list is not confirmed clean.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/closed-world, and the description layers on genuinely new behavior: no package-specific fixedVersions inferred, pages are fresh lookups rather than snapshots, how to restart after a changed/stale node, the distinction between transmission overflow and upstream truncated, and the warning not to feed the output page object back as input.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the full-hash constraint are front-loaded in the first two sentences, and the remaining sentences are all load-bearing pagination/error rules. It is dense and somewhat repetitive of the inline page-field descriptions, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return shape need not be described, and the description instead covers the hard part: multi-step pagination, deferred paths, staleness recovery, and overflow vs truncation semantics. An agent has everything needed to drive this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains the loop pattern (path + offset: page.nextOffset + revision: page.revision), that deferred children start at offset zero without a revision, and that the page object is not valid input. The only gap is that it largely mirrors the page field descriptions rather than introducing new syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Query known vulnerabilities for one full Git commit hash') and constrains the input precisely (40-char SHA-1 or 64-char SHA-256, case-insensitive, abbreviated rejected). It also routes to the sibling osv_get_vulnerability for full records, distinguishing this from that tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names an alternative ('use osv_get_vulnerability for full records') and gives detailed when/how rules for pagination (repeat original input with overflow.page, follow nextOffset/revision). It does not, however, contrast with osv_query_package or osv_query_batch, so the choosing-by-input-shape guidance is left partly implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

osv_query_packageOsv Query PackageA
Read-onlyIdempotent
Inspect

Query known vulnerabilities for a single package version using {name, ecosystem, version} or {purl, version?}; supply exactly one embedded or separate version. Returns all matching OSV advisories with severity (CVSS vectors), CVE aliases, affected version ranges, and the fixed versions listed for the queried package. Use osv_list_ecosystems to validate the ecosystem string before querying — ecosystem strings are case-sensitive exact matches and an invalid value returns an error, not empty results. For overflow, repeat the original input with page: overflow.page. Continue the same path with offset: page.nextOffset and revision: page.revision until nextOffset is null. Retrieve each entries[].deferred.path separately at offset zero without a revision. Do not pass the output page object as input. Set page.advisoryId to an announced ID to fetch its fields with fixes and severity for the queried package; retain advisoryId on subsequent pages. Pages are fresh lookups; restart a changed node without a revision. Transmission overflow and upstream truncated are separate; neither confirms clean.

NameRequiredDescriptionDefault
nameNoExact package name in its ecosystem.
pageNoRepeat the original input with page: overflow.page first; later select path, offset: page.nextOffset and revision: page.revision. Retain advisoryId when set.
purlNoPURL alternative to name and ecosystem; supply one embedded or separate version.
versionNoExact package version, never a range.
ecosystemNoCase-sensitive ecosystem identifier from osv_list_ecosystems.

Output Schema

NameRequiredDescription
pageNoOne bounded page of an addressed normalized node.
errorNoPresent when the call failed. Absent on success.
vulnsNoVulnerabilities matching this package version. An empty array means no known vulnerabilities ONLY when truncated is false.
noticeNoPresent on the clean path — confirms no known vulnerabilities for the queried package.
previewNoCompact view; overflow identifies omissions. This is not the complete record.
overflowNoTransmission overflow disclosure; independent of upstream truncation.
queryMetaNoQuery parameters as submitted.
truncatedNoTrue when OSV returned more result pages than the fetch cap could follow — the vulnerability list may be INCOMPLETE. A truncated empty list is NOT a clean result; raise OSV_QUERY_MAX_PAGES or narrow the query.
effectiveQueryNoThe package@version (ecosystem) tuple as queried, echoed for content-only clients.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/idempotent/closed-world safety; the description adds the transactional behavior an agent actually needs: case-sensitive exact-match ecosystems that error rather than return empty, page-freshness and stale-revision restart rules, the instruction not to feed the output page object back as input, and the warning that transmission overflow and upstream truncation are distinct and neither implies a clean result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and every sentence carries protocol detail, but the pagination/offset/revision instructions are partly duplicated between the description and the nested page object's schema description, making it longer than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a nested page object and an output schema, the description supplies everything an agent needs to drive the lookup end to end: ecosystem validation, version uniqueness, overflow entry point, offset/revision continuation, deferred child retrieval, and advisoryId-based follow-up. Return fields (CVSS, aliases, ranges, fixes) are summarized where the output schema does the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds a constraint the schema does not encode (no oneOf/required list exists): exactly one of {name, ecosystem} or purl must be supplied, with exactly one embedded or separate version. It also clarifies advisoryId retention and the offset-zero/no-revision rule for deferred paths, which goes beyond the field-level text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Query known vulnerabilities for a single package version') plus the exact input shapes accepted ({name, ecosystem, version} or {purl, version?}). The scoping word 'single' distinguishes it from the batch and commit siblings without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to osv_list_ecosystems before querying and explains the consequence of skipping it (error, not empty results). It also details the overflow/deferred-page continuation protocol, but never names osv_query_batch, osv_query_commit, or osv_get_vulnerability as alternatives for other scopes, so the when-not is left implicit.

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.

  1. 4 tool updates
    • Changedosv_get_vulnerability9 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"Retrieve an announced pointer; repeat id and continue with nextOffset and revision."New value: +"Repeat id with page: overflow.page first; then select path, offset: page.nextOffset, revision: page.revision. Start deferred child paths without a revision."
      • changedInput schema / properties / page / properties / offset / description
        Previous value: -"Entry offset, or Unicode code-point offset for text."New value: +"Start at zero; on later calls set this to the previous page.nextOffset until it is null. Text offsets count Unicode code points."
      • changedInput schema / properties / page / properties / path / description
        Previous value: -"RFC 6901 pointer into normalized output; empty string selects its root."New value: +"Field pointer announced by overflow or entries[].deferred.path; empty string selects the root. Keep the same path while following nextOffset."
      • changedInput schema / properties / page / properties / revision / description
        Previous value: -"Revision returned for this node; omit on first retrieval."New value: +"Use page.revision only when continuing the same path. Omit on the first call to any deferred child path; restart without it after stale_page_revision."
      • changedOutput schema / properties / aliases / description
        Previous value: -"Alternative IDs — usually CVE IDs. Accepted by nvd_get_cve on nist-nvd-mcp-server for CVSS base score, EPSS exploitation probability, and CISA KEV status."New value: +"Alternative IDs — usually CVE IDs. Accepted by nvd_get_cve on nist-nvd-mcp-server for CVSS base score and CISA KEV status."
      • changedOutput schema / properties / overflow / properties / page / description
        Previous value: -"First retrieval arguments; repeat the original tool input."New value: +"Repeat the original tool input with page: overflow.page. Later select path, offset: page.nextOffset and revision: page.revision; do not pass the output page object."
      • changedOutput schema / properties / overflow / properties / page / properties / offset / description
        Previous value: -"Entry offset, or Unicode code-point offset for text."New value: +"Start at zero; on later calls set this to the previous page.nextOffset until it is null. Text offsets count Unicode code points."
      • changedOutput schema / properties / overflow / properties / page / properties / path / description
        Previous value: -"RFC 6901 pointer into normalized output; empty string selects its root."New value: +"Field pointer announced by overflow or entries[].deferred.path; empty string selects the root. Keep the same path while following nextOffset."
      • changedOutput schema / properties / overflow / properties / page / properties / revision / description
        Previous value: -"Revision returned for this node; omit on first retrieval."New value: +"Use page.revision only when continuing the same path. Omit on the first call to any deferred child path; restart without it after stale_page_revision."
    • Changedosv_query_batch14 fields changed
      • addedInput schema / properties / packages / items / anyOf
        Added value: +[
        +  {
        +    "description": "Exact package tuple.",
        +    "properties": {
        +      "ecosystem": {
        +        "description": "Case-sensitive ecosystem identifier from osv_list_ecosystems.",
        +        "pattern": "\\S",
        +        "type": "string"
        +      },
        +      "name": {
        +        "description": "Exact package name in its ecosystem.",
        +        "pattern": "\\S",
        +        "type": "string"
        +      },
        +      "purl": {
        +        "description": "Use purl instead of the tuple, never together with name or ecosystem.",
        +        "type": "string"
        +      },
        +      "version": {
        +        "description": "Exact package version, never a range.",
        +        "pattern": "\\S",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "ecosystem",
        +      "version"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "description": "PURL alternative with exactly one version source.",
        +    "properties": {
        +      "purl": {
        +        "description": "Complete Package URL, such as pkg:pypi/jinja2@3.1.4. Supply its version either here or separately, exactly once.",
        +        "type": "string"
        +      },
        +      "version": {
        +        "description": "Exact version only when the PURL does not embed one.",
        +        "pattern": "\\S",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "purl"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / packages / items / properties
        Removed value: -{
        -  "ecosystem": {
        -    "description": "Ecosystem identifier. Case-sensitive exact match. Use osv_list_ecosystems to validate.",
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "name": {
        -    "description": "Package name as it appears in the ecosystem.",
        -    "pattern": "\\S",
        -    "type": "string"
        -  },
        -  "version": {
        -    "description": "Exact version string to check.",
        -    "pattern": "\\S",
        -    "type": "string"
        -  }
        -}
      • removedInput schema / properties / packages / items / required
        Removed value: -[
        -  "name",
        -  "ecosystem",
        -  "version"
        -]
      • removedInput schema / properties / packages / items / type
        Removed value: -"object"
      • changedInput schema / properties / page / description
        Previous value: -"Retrieve original-index rows at /results or a selected /results/17/... node with the original packages array."New value: +"Repeat the original packages array with page: overflow.page first. Continue using path, offset: page.nextOffset and revision: page.revision. /results/17/... keeps original row index 17; start deferred children without a revision."
      • changedInput schema / properties / page / properties / offset / description
        Previous value: -"Entry offset, or Unicode code-point offset for text."New value: +"Start at zero; on later calls set this to the previous page.nextOffset until it is null. Text offsets count Unicode code points."
      • changedInput schema / properties / page / properties / path / description
        Previous value: -"RFC 6901 pointer into normalized output; empty string selects its root."New value: +"Field pointer announced by overflow or entries[].deferred.path; empty string selects the root. Keep the same path while following nextOffset."
      • changedInput schema / properties / page / properties / revision / description
        Previous value: -"Revision returned for this node; omit on first retrieval."New value: +"Use page.revision only when continuing the same path. Omit on the first call to any deferred child path; restart without it after stale_page_revision."
      • changedOutput schema / properties / overflow / properties / page / description
        Previous value: -"First retrieval arguments; repeat the original tool input."New value: +"Repeat the original tool input with page: overflow.page. Later select path, offset: page.nextOffset and revision: page.revision; do not pass the output page object."
      • changedOutput schema / properties / overflow / properties / page / properties / offset / description
        Previous value: -"Entry offset, or Unicode code-point offset for text."New value: +"Start at zero; on later calls set this to the previous page.nextOffset until it is null. Text offsets count Unicode code points."
      • changedOutput schema / properties / overflow / properties / page / properties / path / description
        Previous value: -"RFC 6901 pointer into normalized output; empty string selects its root."New value: +"Field pointer announced by overflow or entries[].deferred.path; empty string selects the root. Keep the same path while following nextOffset."
      • changedOutput schema / properties / overflow / properties / page / properties / revision / description
        Previous value: -"Revision returned for this node; omit on first retrieval."New value: +"Use page.revision only when continuing the same path. Omit on the first call to any deferred child path; restart without it after stale_page_revision."
      • addedOutput schema / properties / results / items / properties / purl
        Added value: +{
        +  "description": "Original PURL when supplied; name, ecosystem and version show its effective coordinate on success.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / results / items / properties / vulns / items / properties / aliases / description
        Previous value: -"CVE IDs and other aliases. Accepted by nist-nvd-mcp-server for CVSS/KEV/EPSS context."New value: +"CVE IDs and other aliases. Accepted by nist-nvd-mcp-server for CVSS scores and CISA KEV status."
    • Addedosv_query_commit
    • Changedosv_query_package18 fields changed
      • changedInput schema / properties / ecosystem / description
        Previous value: -"Ecosystem identifier. Must be an exact match (case-sensitive). Use osv_list_ecosystems to see valid values. Examples: \"npm\", \"PyPI\", \"crates.io\", \"Go\", \"Maven\", \"NuGet\"."New value: +"Case-sensitive ecosystem identifier from osv_list_ecosystems."
      • changedInput schema / properties / name / description
        Previous value: -"Package name as it appears in the ecosystem (e.g. \"express\", \"requests\", \"serde\"). Case-sensitive."New value: +"Exact package name in its ecosystem."
      • changedInput schema / properties / page / description
        Previous value: -"Retrieve an announced field or advisory with the original package tuple."New value: +"Repeat the original input with page: overflow.page first; later select path, offset: page.nextOffset and revision: page.revision. Retain advisoryId when set."
      • changedInput schema / properties / page / properties / advisoryId / description
        Previous value: -"ID announced in this package advisory list; one GET with package-scoped normalization."New value: +"ID from this query’s advisory list. Retain this ID when continuing its fields with fixes and severity for the original package."
      • changedInput schema / properties / page / properties / offset / description
        Previous value: -"Entry offset, or Unicode code-point offset for text."New value: +"Start at zero; on later calls set this to the previous page.nextOffset until it is null. Text offsets count Unicode code points."
      • changedInput schema / properties / page / properties / path / description
        Previous value: -"RFC 6901 pointer into normalized output; empty string selects its root."New value: +"Field pointer announced by overflow or entries[].deferred.path; empty string selects the root. Keep the same path while following nextOffset."
      • changedInput schema / properties / page / properties / revision / description
        Previous value: -"Revision returned for this node; omit on first retrieval."New value: +"Use page.revision only when continuing the same path. Omit on the first call to any deferred child path; restart without it after stale_page_revision."
      • addedInput schema / properties / purl
        Added value: +{
        +  "description": "PURL alternative to name and ecosystem; supply one embedded or separate version.",
        +  "type": "string"
        +}
      • changedInput schema / properties / version / description
        Previous value: -"Package version to check (e.g. \"4.17.1\", \"3.1.4\", \"1.0.0\"). Must be an exact version string, not a range."New value: +"Exact package version, never a range."
      • removedInput schema / required
        Removed value: -[
        -  "name",
        -  "ecosystem",
        -  "version"
        -]
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_page_path`: The pointer is unknown or cannot fit a bounded page. `stale_page_revision`: The re-fetched node changed after its revision was announced. `advisory_not_found`: The selected advisory no longer exists. `invalid_ecosystem`: The ecosystem string is not recognized by OSV. Ecosystem names are case-sensitive exact matches. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_purl`: The PURL is malformed. `unsupported_purl`: OSV does not support this PURL type or namespace. `invalid_purl_version`: Both or neither version sources were supplied. `invalid_purl_query`: OSV rejected the PURL query. `invalid_page_path`: The pointer is unknown or cannot fit a bounded page. `stale_page_revision`: The re-fetched node changed after its revision was announced. `advisory_not_found`: The selected advisory no longer exists. `invalid_ecosystem`: The ecosystem string is not recognized by OSV. Ecosystem names are case-sensitive exact matches. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_page_path",
        -  "stale_page_revision",
        -  "advisory_not_found",
        -  "invalid_ecosystem"
        -]New value: +[
        +  "invalid_purl",
        +  "unsupported_purl",
        +  "invalid_purl_version",
        +  "invalid_purl_query",
        +  "invalid_page_path",
        +  "stale_page_revision",
        +  "advisory_not_found",
        +  "invalid_ecosystem"
        +]
      • changedOutput schema / properties / overflow / properties / page / description
        Previous value: -"First retrieval arguments; repeat the original tool input."New value: +"Repeat the original tool input with page: overflow.page. Later select path, offset: page.nextOffset and revision: page.revision; do not pass the output page object."
      • changedOutput schema / properties / overflow / properties / page / properties / offset / description
        Previous value: -"Entry offset, or Unicode code-point offset for text."New value: +"Start at zero; on later calls set this to the previous page.nextOffset until it is null. Text offsets count Unicode code points."
      • changedOutput schema / properties / overflow / properties / page / properties / path / description
        Previous value: -"RFC 6901 pointer into normalized output; empty string selects its root."New value: +"Field pointer announced by overflow or entries[].deferred.path; empty string selects the root. Keep the same path while following nextOffset."
      • changedOutput schema / properties / overflow / properties / page / properties / revision / description
        Previous value: -"Revision returned for this node; omit on first retrieval."New value: +"Use page.revision only when continuing the same path. Omit on the first call to any deferred child path; restart without it after stale_page_revision."
      • addedOutput schema / properties / queryMeta / properties / purl
        Added value: +{
        +  "description": "Original PURL when used instead of the package tuple.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / vulns / items / properties / aliases / description
        Previous value: -"Alternative IDs — typically CVE IDs (e.g. [\"CVE-2020-28500\"]). Accepted by nist-nvd-mcp-server for CVSS scores, EPSS, and CISA KEV status."New value: +"Alternative IDs — typically CVE IDs (e.g. [\"CVE-2020-28500\"]). Accepted by nist-nvd-mcp-server for CVSS scores and CISA KEV status."
  2. 3 tool updates
    • Changedosv_get_vulnerability7 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Retrieve an announced pointer; repeat id and continue with nextOffset and revision.",
        +  "properties": {
        +    "offset": {
        +      "default": 0,
        +      "description": "Entry offset, or Unicode code-point offset for text.",
        +      "maximum": 9007199254740991,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "path": {
        +      "description": "RFC 6901 pointer into normalized output; empty string selects its root.",
        +      "maxLength": 1024,
        +      "pattern": "^(?:\\/(?:[^~]|~[01])*)?$",
        +      "type": "string"
        +    },
        +    "revision": {
        +      "description": "Revision returned for this node; omit on first retrieval.",
        +      "pattern": "^[a-f0-9]{64}$",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "path"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "id",
        -      "summary",
        -      "details",
        -      "aliases",
        -      "published",
        -      "modified",
        -      "severity",
        -      "severityLabel",
        -      "severitySource",
        -      "affected",
        -      "cweIds",
        -      "references",
        -      "schemaVersion"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    }
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `vulnerability_not_found`: The requested OSV ID does not exist in the database. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_page_path`: The pointer is unknown or cannot fit a bounded page. `stale_page_revision`: The re-fetched node changed after its revision was announced. `vulnerability_not_found`: The requested OSV ID does not exist in the database. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "vulnerability_not_found"
        -]New value: +[
        +  "invalid_page_path",
        +  "stale_page_revision",
        +  "vulnerability_not_found"
        +]
      • addedOutput schema / properties / overflow
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Transmission overflow disclosure; independent of upstream truncation.",
        +  "properties": {
        +    "complete": {
        +      "description": "Complete top-level fields retained in this response.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "notice": {
        +      "description": "Transmission omission and fresh re-fetch semantics.",
        +      "type": "string"
        +    },
        +    "omitted": {
        +      "description": "Omitted values, all addressable through page.path.",
        +      "items": {
        +        "additionalProperties": false,
        +        "description": "An oversized child; parent offset advances past this descriptor.",
        +        "properties": {
        +          "path": {
        +            "description": "Exact child pointer to retrieve separately.",
        +            "type": "string"
        +          },
        +          "total": {
        +            "description": "Number of child entries or Unicode code points; one for scalars.",
        +            "type": "number"
        +          },
        +          "type": {
        +            "description": "Child value kind.",
        +            "enum": [
        +              "array",
        +              "object",
        +              "string",
        +              "scalar"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "path",
        +          "type",
        +          "total"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "page": {
        +      "additionalProperties": false,
        +      "description": "First retrieval arguments; repeat the original tool input.",
        +      "properties": {
        +        "offset": {
        +          "default": 0,
        +          "description": "Entry offset, or Unicode code-point offset for text.",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "path": {
        +          "description": "RFC 6901 pointer into normalized output; empty string selects its root.",
        +          "maxLength": 1024,
        +          "pattern": "^(?:\\/(?:[^~]|~[01])*)?$",
        +          "type": "string"
        +        },
        +        "revision": {
        +          "description": "Revision returned for this node; omit on first retrieval.",
        +          "pattern": "^[a-f0-9]{64}$",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "path",
        +        "offset"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "complete",
        +    "omitted",
        +    "page",
        +    "notice"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / page
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "One bounded page of an addressed normalized node.",
        +  "properties": {
        +    "entries": {
        +      "description": "Source-order entries for arrays, objects and scalars.",
        +      "items": {
        +        "additionalProperties": false,
        +        "description": "One source entry, complete or deferred.",
        +        "properties": {
        +          "deferred": {
        +            "additionalProperties": false,
        +            "description": "Retrievable child descriptor when its value does not fit.",
        +            "properties": {
        +              "path": {
        +                "description": "Exact child pointer to retrieve separately.",
        +                "type": "string"
        +              },
        +              "total": {
        +                "description": "Number of child entries or Unicode code points; one for scalars.",
        +                "type": "number"
        +              },
        +              "type": {
        +                "description": "Child value kind.",
        +                "enum": [
        +                  "array",
        +                  "object",
        +                  "string",
        +                  "scalar"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "path",
        +              "type",
        +              "total"
        +            ],
        +            "type": "object"
        +          },
        +          "key": {
        +            "description": "Object key or original array index.",
        +            "type": "string"
        +          },
        +          "value": {
        +            "description": "Complete child value, unmodified."
        +          }
        +        },
        +        "required": [
        +          "key"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "nextOffset": {
        +      "description": "Next offset, strictly greater or null when finished.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "notice": {
        +      "description": "Fresh re-fetch disclosure; no saved historical snapshot.",
        +      "type": "string"
        +    },
        +    "offset": {
        +      "description": "Starting entry or code-point offset.",
        +      "type": "number"
        +    },
        +    "path": {
        +      "description": "Addressed JSON pointer.",
        +      "type": "string"
        +    },
        +    "revision": {
        +      "description": "SHA-256 revision of the addressed normalized node; batch collection uses original input order.",
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "Verbatim Unicode code-point slice for strings.",
        +      "type": "string"
        +    },
        +    "total": {
        +      "description": "Total entries or Unicode code points.",
        +      "type": "number"
        +    },
        +    "type": {
        +      "description": "Addressed value kind.",
        +      "enum": [
        +        "array",
        +        "object",
        +        "string",
        +        "scalar"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "type",
        +    "offset",
        +    "total",
        +    "nextOffset",
        +    "revision",
        +    "notice"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / preview
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Compact view; overflow identifies omissions. This is not the complete record.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedosv_query_batch7 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Retrieve original-index rows at /results or a selected /results/17/... node with the original packages array.",
        +  "properties": {
        +    "offset": {
        +      "default": 0,
        +      "description": "Entry offset, or Unicode code-point offset for text.",
        +      "maximum": 9007199254740991,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "path": {
        +      "description": "RFC 6901 pointer into normalized output; empty string selects its root.",
        +      "maxLength": 1024,
        +      "pattern": "^(?:\\/(?:[^~]|~[01])*)?$",
        +      "type": "string"
        +    },
        +    "revision": {
        +      "description": "Revision returned for this node; omit on first retrieval.",
        +      "pattern": "^[a-f0-9]{64}$",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "path"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "results",
        -      "summary"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    }
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_page_path`: The pointer is unknown or cannot fit a bounded page. `stale_page_revision`: The re-fetched node or input order changed. Other values are possible when a failure originates below the handler."
      • addedOutput schema / properties / error / properties / data / properties / reason / examples
        Added value: +[
        +  "invalid_page_path",
        +  "stale_page_revision"
        +]
      • addedOutput schema / properties / overflow
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Transmission overflow disclosure; independent of upstream truncation.",
        +  "properties": {
        +    "complete": {
        +      "description": "Complete top-level fields retained in this response.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "notice": {
        +      "description": "Transmission omission and fresh re-fetch semantics.",
        +      "type": "string"
        +    },
        +    "omitted": {
        +      "description": "Omitted values, all addressable through page.path.",
        +      "items": {
        +        "additionalProperties": false,
        +        "description": "An oversized child; parent offset advances past this descriptor.",
        +        "properties": {
        +          "path": {
        +            "description": "Exact child pointer to retrieve separately.",
        +            "type": "string"
        +          },
        +          "total": {
        +            "description": "Number of child entries or Unicode code points; one for scalars.",
        +            "type": "number"
        +          },
        +          "type": {
        +            "description": "Child value kind.",
        +            "enum": [
        +              "array",
        +              "object",
        +              "string",
        +              "scalar"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "path",
        +          "type",
        +          "total"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "page": {
        +      "additionalProperties": false,
        +      "description": "First retrieval arguments; repeat the original tool input.",
        +      "properties": {
        +        "offset": {
        +          "default": 0,
        +          "description": "Entry offset, or Unicode code-point offset for text.",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "path": {
        +          "description": "RFC 6901 pointer into normalized output; empty string selects its root.",
        +          "maxLength": 1024,
        +          "pattern": "^(?:\\/(?:[^~]|~[01])*)?$",
        +          "type": "string"
        +        },
        +        "revision": {
        +          "description": "Revision returned for this node; omit on first retrieval.",
        +          "pattern": "^[a-f0-9]{64}$",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "path",
        +        "offset"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "complete",
        +    "omitted",
        +    "page",
        +    "notice"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / page
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "One bounded page of an addressed normalized node.",
        +  "properties": {
        +    "entries": {
        +      "description": "Source-order entries for arrays, objects and scalars.",
        +      "items": {
        +        "additionalProperties": false,
        +        "description": "One source entry, complete or deferred.",
        +        "properties": {
        +          "deferred": {
        +            "additionalProperties": false,
        +            "description": "Retrievable child descriptor when its value does not fit.",
        +            "properties": {
        +              "path": {
        +                "description": "Exact child pointer to retrieve separately.",
        +                "type": "string"
        +              },
        +              "total": {
        +                "description": "Number of child entries or Unicode code points; one for scalars.",
        +                "type": "number"
        +              },
        +              "type": {
        +                "description": "Child value kind.",
        +                "enum": [
        +                  "array",
        +                  "object",
        +                  "string",
        +                  "scalar"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "path",
        +              "type",
        +              "total"
        +            ],
        +            "type": "object"
        +          },
        +          "key": {
        +            "description": "Object key or original array index.",
        +            "type": "string"
        +          },
        +          "value": {
        +            "description": "Complete child value, unmodified."
        +          }
        +        },
        +        "required": [
        +          "key"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "nextOffset": {
        +      "description": "Next offset, strictly greater or null when finished.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "notice": {
        +      "description": "Fresh re-fetch disclosure; no saved historical snapshot.",
        +      "type": "string"
        +    },
        +    "offset": {
        +      "description": "Starting entry or code-point offset.",
        +      "type": "number"
        +    },
        +    "path": {
        +      "description": "Addressed JSON pointer.",
        +      "type": "string"
        +    },
        +    "revision": {
        +      "description": "SHA-256 revision of the addressed normalized node; batch collection uses original input order.",
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "Verbatim Unicode code-point slice for strings.",
        +      "type": "string"
        +    },
        +    "total": {
        +      "description": "Total entries or Unicode code points.",
        +      "type": "number"
        +    },
        +    "type": {
        +      "description": "Addressed value kind.",
        +      "enum": [
        +        "array",
        +        "object",
        +        "string",
        +        "scalar"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "type",
        +    "offset",
        +    "total",
        +    "nextOffset",
        +    "revision",
        +    "notice"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / preview
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Compact view; overflow identifies omissions. This is not the complete record.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
    • Changedosv_query_package7 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Retrieve an announced field or advisory with the original package tuple.",
        +  "properties": {
        +    "advisoryId": {
        +      "description": "ID announced in this package advisory list; one GET with package-scoped normalization.",
        +      "maxLength": 1024,
        +      "type": "string"
        +    },
        +    "offset": {
        +      "default": 0,
        +      "description": "Entry offset, or Unicode code-point offset for text.",
        +      "maximum": 9007199254740991,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "path": {
        +      "description": "RFC 6901 pointer into normalized output; empty string selects its root.",
        +      "maxLength": 1024,
        +      "pattern": "^(?:\\/(?:[^~]|~[01])*)?$",
        +      "type": "string"
        +    },
        +    "revision": {
        +      "description": "Revision returned for this node; omit on first retrieval.",
        +      "pattern": "^[a-f0-9]{64}$",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "path"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "vulns",
        -      "truncated",
        -      "queryMeta"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    }
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / error / properties / data / properties / reason / description
        Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_ecosystem`: The ecosystem string is not recognized by OSV. Ecosystem names are case-sensitive exact matches. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_page_path`: The pointer is unknown or cannot fit a bounded page. `stale_page_revision`: The re-fetched node changed after its revision was announced. `advisory_not_found`: The selected advisory no longer exists. `invalid_ecosystem`: The ecosystem string is not recognized by OSV. Ecosystem names are case-sensitive exact matches. Other values are possible when a failure originates below the handler."
      • changedOutput schema / properties / error / properties / data / properties / reason / examples
        Previous value: -[
        -  "invalid_ecosystem"
        -]New value: +[
        +  "invalid_page_path",
        +  "stale_page_revision",
        +  "advisory_not_found",
        +  "invalid_ecosystem"
        +]
      • addedOutput schema / properties / overflow
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Transmission overflow disclosure; independent of upstream truncation.",
        +  "properties": {
        +    "complete": {
        +      "description": "Complete top-level fields retained in this response.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "notice": {
        +      "description": "Transmission omission and fresh re-fetch semantics.",
        +      "type": "string"
        +    },
        +    "omitted": {
        +      "description": "Omitted values, all addressable through page.path.",
        +      "items": {
        +        "additionalProperties": false,
        +        "description": "An oversized child; parent offset advances past this descriptor.",
        +        "properties": {
        +          "path": {
        +            "description": "Exact child pointer to retrieve separately.",
        +            "type": "string"
        +          },
        +          "total": {
        +            "description": "Number of child entries or Unicode code points; one for scalars.",
        +            "type": "number"
        +          },
        +          "type": {
        +            "description": "Child value kind.",
        +            "enum": [
        +              "array",
        +              "object",
        +              "string",
        +              "scalar"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "path",
        +          "type",
        +          "total"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "page": {
        +      "additionalProperties": false,
        +      "description": "First retrieval arguments; repeat the original tool input.",
        +      "properties": {
        +        "offset": {
        +          "default": 0,
        +          "description": "Entry offset, or Unicode code-point offset for text.",
        +          "maximum": 9007199254740991,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "path": {
        +          "description": "RFC 6901 pointer into normalized output; empty string selects its root.",
        +          "maxLength": 1024,
        +          "pattern": "^(?:\\/(?:[^~]|~[01])*)?$",
        +          "type": "string"
        +        },
        +        "revision": {
        +          "description": "Revision returned for this node; omit on first retrieval.",
        +          "pattern": "^[a-f0-9]{64}$",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "path",
        +        "offset"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "complete",
        +    "omitted",
        +    "page",
        +    "notice"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / page
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "One bounded page of an addressed normalized node.",
        +  "properties": {
        +    "entries": {
        +      "description": "Source-order entries for arrays, objects and scalars.",
        +      "items": {
        +        "additionalProperties": false,
        +        "description": "One source entry, complete or deferred.",
        +        "properties": {
        +          "deferred": {
        +            "additionalProperties": false,
        +            "description": "Retrievable child descriptor when its value does not fit.",
        +            "properties": {
        +              "path": {
        +                "description": "Exact child pointer to retrieve separately.",
        +                "type": "string"
        +              },
        +              "total": {
        +                "description": "Number of child entries or Unicode code points; one for scalars.",
        +                "type": "number"
        +              },
        +              "type": {
        +                "description": "Child value kind.",
        +                "enum": [
        +                  "array",
        +                  "object",
        +                  "string",
        +                  "scalar"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "path",
        +              "type",
        +              "total"
        +            ],
        +            "type": "object"
        +          },
        +          "key": {
        +            "description": "Object key or original array index.",
        +            "type": "string"
        +          },
        +          "value": {
        +            "description": "Complete child value, unmodified."
        +          }
        +        },
        +        "required": [
        +          "key"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "nextOffset": {
        +      "description": "Next offset, strictly greater or null when finished.",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "notice": {
        +      "description": "Fresh re-fetch disclosure; no saved historical snapshot.",
        +      "type": "string"
        +    },
        +    "offset": {
        +      "description": "Starting entry or code-point offset.",
        +      "type": "number"
        +    },
        +    "path": {
        +      "description": "Addressed JSON pointer.",
        +      "type": "string"
        +    },
        +    "revision": {
        +      "description": "SHA-256 revision of the addressed normalized node; batch collection uses original input order.",
        +      "type": "string"
        +    },
        +    "text": {
        +      "description": "Verbatim Unicode code-point slice for strings.",
        +      "type": "string"
        +    },
        +    "total": {
        +      "description": "Total entries or Unicode code points.",
        +      "type": "number"
        +    },
        +    "type": {
        +      "description": "Addressed value kind.",
        +      "enum": [
        +        "array",
        +        "object",
        +        "string",
        +        "scalar"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "path",
        +    "type",
        +    "offset",
        +    "total",
        +    "nextOffset",
        +    "revision",
        +    "notice"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / preview
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Compact view; overflow identifies omissions. This is not the complete record.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
  3. 3 tool updates
    • Changedosv_get_vulnerability12 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"OSV vulnerability ID. Accepts any prefix: \"GHSA-\" (GitHub), \"PYSEC-\" (Python), \"RUSTSEC-\" (Rust), \"GO-\" (Go), \"DSA-\"/\"DLA-\" (Debian), \"CVE-\" (fallback direct lookups). Example: \"GHSA-29mw-wpgm-hmr9\"."New value: +"One exact, complete OSV advisory ID from any OSV source database, matched case-sensitively. Prefixes include \"GHSA-\" (GitHub), \"PYSEC-\" (PyPI), \"RUSTSEC-\" (Rust), \"GO-\" (Go), \"DSA-\"/\"DLA-\" (Debian), \"USN-\" (Ubuntu), \"RHSA-\" (Red Hat), and \"CVE-\". No wildcards or partial IDs — take IDs from osv_query_package or osv_query_batch results. Example: \"GHSA-29mw-wpgm-hmr9\"."
      • removedInput schema / properties / id / minLength
        Removed value: -1
      • changedInput schema / properties / id / pattern
        Previous value: -"\\S"New value: +"^[A-Za-z][A-Za-z0-9_]*-\\S(.*\\S)?$"
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "not": {
        -      "required": [
        -        "error"
        -      ]
        -    },
        -    "required": [
        -      "id",
        -      "summary",
        -      "details",
        -      "aliases",
        -      "published",
        -      "modified",
        -      "severity",
        -      "severityLabel",
        -      "affected",
        -      "cweIds",
        -      "references",
        -      "schemaVersion"
        -    ]
        -  },
        -  {
        -    "required": [
        -      "error"
        -    ]
        -  }
        -]New value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "id",
        +      "summary",
        +      "details",
        +      "aliases",
        +      "published",
        +      "modified",
        +      "severity",
        +      "severityLabel",
        +      "severitySource",
        +      "affected",
        +      "cweIds",
        +      "references",
        +      "schemaVersion"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • changedOutput schema / properties / affected / items / properties / ranges / items / properties / fixed / description
        Previous value: -"First safe version (convenience view — the last \"fixed\" event; see events[])."New value: +"The last \"fixed\" event of this range (convenience view — a multi-interval range carries several; see events[])."
      • addedOutput schema / properties / affected / items / properties / severity
        Added value: +{
        +  "description": "Severity entries scoped to this package. Present only when the advisory scores packages separately; the record-level severity is then empty.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One package-level severity entry.",
        +    "properties": {
        +      "score": {
        +        "description": "CVSS vector string, or the Ubuntu priority (e.g. \"medium\") for type \"Ubuntu\".",
        +        "type": "string"
        +      },
        +      "type": {
        +        "description": "Severity type: \"CVSS_V3\", \"CVSS_V4\", \"CVSS_V2\", or \"Ubuntu\".",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "score"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / severity / description
        Previous value: -"CVSS severity entries. Empty for unscored advisories."New value: +"Record-level severity entries (CVSS vectors, Ubuntu priorities). Empty for unscored advisories and for advisories that score each affected package separately."
      • changedOutput schema / properties / severity / items / description
        Previous value: -"One CVSS severity entry."New value: +"One record-level severity entry."
      • changedOutput schema / properties / severity / items / properties / score / description
        Previous value: -"CVSS vector string."New value: +"CVSS vector string, or the Ubuntu priority (e.g. \"medium\") for type \"Ubuntu\"."
      • changedOutput schema / properties / severity / items / properties / type / description
        Previous value: -"CVSS version: \"CVSS_V3\", \"CVSS_V4\", or \"CVSS_V2\"."New value: +"Severity type: \"CVSS_V3\", \"CVSS_V4\", \"CVSS_V2\", or \"Ubuntu\"."
      • changedOutput schema / properties / severityLabel / description
        Previous value: -"Human-readable severity label (\"LOW\", \"MODERATE\", \"HIGH\", \"CRITICAL\"). Present on GHSA-sourced records; null when not available."New value: +"Severity label (\"LOW\", \"MODERATE\", \"HIGH\", \"CRITICAL\") from the first source that yields one: database_specific.severity, an Ubuntu priority, then the highest CVSS v3/v4 score (0.1–3.9 LOW, 4.0–6.9 MODERATE, 7.0–8.9 HIGH, 9.0–10.0 CRITICAL). Uses every affected package severity entry when the record-level list is empty. Null when no source yields a label."
      • addedOutput schema / properties / severitySource
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "computedScore": {
        +          "description": "CVSS score computed from the vector as published: a CVSS 4.0 vector over every metric group it carries (threat and environmental included), a CVSS 3.x vector with its temporal metrics. Present only for CVSS sources.",
        +          "type": "number"
        +        },
        +        "score": {
        +          "description": "The published value the label came from: the database_specific.severity text, the Ubuntu priority, or the CVSS vector.",
        +          "type": "string"
        +        },
        +        "type": {
        +          "description": "Source kind: the database_specific.severity label, an Ubuntu priority, or a CVSS vector.",
        +          "enum": [
        +            "database_specific",
        +            "Ubuntu",
        +            "CVSS_V3",
        +            "CVSS_V4"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "score"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The severity entry severityLabel was derived from. Null exactly when the label is."
        +}
    • Changedosv_query_batch6 fields changed
      • removedInput schema / properties / packages / items / properties / ecosystem / minLength
        Removed value: -1
      • removedInput schema / properties / packages / items / properties / name / minLength
        Removed value: -1
      • removedInput schema / properties / packages / items / properties / version / minLength
        Removed value: -1
      • changedOutput schema / properties / results / items / properties / vulns / items / properties / fixedVersions / description
        Previous value: -"First safe version(s) to upgrade to. Empty if no fix exists."New value: +"Every fixed version the advisory lists for this row's package, in record order — one per affected interval, typically one per release line. Excludes other packages' fixes and GIT commits. Empty when the advisory lists no fix for this package."
      • changedOutput schema / properties / results / items / properties / vulns / items / properties / fixedVersions / items / description
        Previous value: -"A first-safe version string."New value: +"A version that fixes the vulnerability for this package."
      • changedOutput schema / properties / results / items / properties / vulns / items / properties / severityLabel / description
        Previous value: -"Severity label: \"LOW\", \"MODERATE\", \"HIGH\", \"CRITICAL\", or null."New value: +"Severity label: \"LOW\", \"MODERATE\", \"HIGH\", \"CRITICAL\", or null. Same derivation as osv_query_package: database_specific.severity, then an Ubuntu priority, then the highest CVSS v3/v4 score, using this row's package-level severity entries when the record has none."
    • Changedosv_query_package13 fields changed
      • removedInput schema / properties / ecosystem / minLength
        Removed value: -1
      • removedInput schema / properties / name / minLength
        Removed value: -1
      • removedInput schema / properties / version / minLength
        Removed value: -1
      • changedOutput schema / properties / vulns / items / properties / affectedRanges / items / properties / fixed / description
        Previous value: -"First safe version — the version to upgrade to (convenience view — see events[])."New value: +"The last \"fixed\" event of this range (convenience view — a multi-interval range carries several; see events[])."
      • changedOutput schema / properties / vulns / items / properties / fixedVersions / description
        Previous value: -"First safe version(s) per affected package entry. Empty if no fix exists yet."New value: +"Every fixed version the advisory lists for the queried package, in record order. A multi-interval range contributes one per interval (typically one per release line); affectedRanges shows which interval each one closes. Excludes other packages' fixes and GIT commits. Empty when the advisory lists no fix for this package."
      • changedOutput schema / properties / vulns / items / properties / fixedVersions / items / description
        Previous value: -"A first-safe version string."New value: +"A version that fixes the vulnerability for the queried package."
      • changedOutput schema / properties / vulns / items / properties / severity / description
        Previous value: -"CVSS severity entries. May be empty for advisories not yet scored."New value: +"Record-level severity entries (CVSS vectors, Ubuntu priorities). Empty for advisories not yet scored and for advisories that score each affected package separately — severitySource then carries the queried package entry used."
      • changedOutput schema / properties / vulns / items / properties / severity / items / description
        Previous value: -"One CVSS severity entry."New value: +"One record-level severity entry."
      • changedOutput schema / properties / vulns / items / properties / severity / items / properties / score / description
        Previous value: -"CVSS vector string (e.g. \"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L\")."New value: +"CVSS vector string (e.g. \"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L\"), or the Ubuntu priority (e.g. \"medium\") for type \"Ubuntu\"."
      • changedOutput schema / properties / vulns / items / properties / severity / items / properties / type / description
        Previous value: -"CVSS version: \"CVSS_V3\", \"CVSS_V4\", or \"CVSS_V2\"."New value: +"Severity type: \"CVSS_V3\", \"CVSS_V4\", \"CVSS_V2\", or \"Ubuntu\"."
      • changedOutput schema / properties / vulns / items / properties / severityLabel / description
        Previous value: -"Human-readable severity label (\"LOW\", \"MODERATE\", \"HIGH\", \"CRITICAL\"). Present on GHSA-sourced records; null otherwise."New value: +"Severity label (\"LOW\", \"MODERATE\", \"HIGH\", \"CRITICAL\") from the first source that yields one: database_specific.severity, an Ubuntu priority, then the highest CVSS v3/v4 score (0.1–3.9 LOW, 4.0–6.9 MODERATE, 7.0–8.9 HIGH, 9.0–10.0 CRITICAL). Uses the queried package's affected-level severity entries when the record-level list is empty. Null when no source yields a label."
      • addedOutput schema / properties / vulns / items / properties / severitySource
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "computedScore": {
        +          "description": "CVSS score computed from the vector as published: a CVSS 4.0 vector over every metric group it carries (threat and environmental included), a CVSS 3.x vector with its temporal metrics. Present only for CVSS sources.",
        +          "type": "number"
        +        },
        +        "score": {
        +          "description": "The published value the label came from: the database_specific.severity text, the Ubuntu priority, or the CVSS vector.",
        +          "type": "string"
        +        },
        +        "type": {
        +          "description": "Source kind: the database_specific.severity label, an Ubuntu priority, or a CVSS vector.",
        +          "enum": [
        +            "database_specific",
        +            "Ubuntu",
        +            "CVSS_V3",
        +            "CVSS_V4"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "score"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "The severity entry severityLabel was derived from. Null exactly when the label is."
        +}
      • changedOutput schema / properties / vulns / items / required
        Previous value: -[
        -  "id",
        -  "summary",
        -  "aliases",
        -  "severity",
        -  "severityLabel",
        -  "fixedVersions",
        -  "affectedRanges",
        -  "cweIds",
        -  "published",
        -  "modified"
        -]New value: +[
        +  "id",
        +  "summary",
        +  "aliases",
        +  "severity",
        +  "severityLabel",
        +  "severitySource",
        +  "fixedVersions",
        +  "affectedRanges",
        +  "cweIds",
        +  "published",
        +  "modified"
        +]
  4. 3 tool updates
    • Changedosv_get_vulnerability2 fields changed
      • removedOutput schema / properties / severityLabel / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / severityLabel / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedosv_query_batch6 fields changed
      • removedOutput schema / properties / results / items / properties / error / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / error / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / vulns / items / properties / severityLabel / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / vulns / items / properties / severityLabel / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / summary / properties / worstSeverity / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / summary / properties / worstSeverity / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedosv_query_package2 fields changed
      • removedOutput schema / properties / vulns / items / properties / severityLabel / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / vulns / items / properties / severityLabel / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  5. 4 tool updates
    • Changedosv_get_vulnerability6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "id",
        +      "summary",
        +      "details",
        +      "aliases",
        +      "published",
        +      "modified",
        +      "severity",
        +      "severityLabel",
        +      "affected",
        +      "cweIds",
        +      "references",
        +      "schemaVersion"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `vulnerability_not_found`: The requested OSV ID does not exist in the database. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "vulnerability_not_found"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "id",
        -  "summary",
        -  "details",
        -  "aliases",
        -  "published",
        -  "modified",
        -  "severity",
        -  "severityLabel",
        -  "affected",
        -  "cweIds",
        -  "references",
        -  "schemaVersion"
        -]
    • Changedosv_list_ecosystems6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "ecosystems",
        +      "note"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "ecosystems",
        -  "note"
        -]
    • Changedosv_query_batch6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "results",
        +      "summary"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "results",
        -  "summary"
        -]
    • Changedosv_query_package6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "vulns",
        +      "truncated",
        +      "queryMeta"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_ecosystem`: The ecosystem string is not recognized by OSV. Ecosystem names are case-sensitive exact matches. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_ecosystem"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "vulns",
        -  "truncated",
        -  "queryMeta"
        -]
  6. 3 tool updates
    • Changedosv_get_vulnerability2 fields changed
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"\\S"
    • Changedosv_query_batch6 fields changed
      • addedInput schema / properties / packages / items / properties / ecosystem / minLength
        Added value: +1
      • addedInput schema / properties / packages / items / properties / ecosystem / pattern
        Added value: +"\\S"
      • addedInput schema / properties / packages / items / properties / name / minLength
        Added value: +1
      • addedInput schema / properties / packages / items / properties / name / pattern
        Added value: +"\\S"
      • addedInput schema / properties / packages / items / properties / version / minLength
        Added value: +1
      • addedInput schema / properties / packages / items / properties / version / pattern
        Added value: +"\\S"
    • Changedosv_query_package6 fields changed
      • addedInput schema / properties / ecosystem / minLength
        Added value: +1
      • addedInput schema / properties / ecosystem / pattern
        Added value: +"\\S"
      • addedInput schema / properties / name / minLength
        Added value: +1
      • addedInput schema / properties / name / pattern
        Added value: +"\\S"
      • addedInput schema / properties / version / minLength
        Added value: +1
      • addedInput schema / properties / version / pattern
        Added value: +"\\S"
  7. 3 tool updates
    • Changedosv_get_vulnerability9 fields changed
      • changedOutput schema / properties / affected / items / properties / ecosystem / description
        Previous value: -"Affected package ecosystem."New value: +"Affected package ecosystem. Empty for source-only advisories."
      • changedOutput schema / properties / affected / items / properties / packageName / description
        Previous value: -"Affected package name."New value: +"Affected package name. Empty for source-only advisories (GIT ranges with no package identity)."
      • addedOutput schema / properties / affected / items / properties / ranges / items / properties / events
        Added value: +{
        +  "description": "Ordered event boundaries defining the affected interval(s) — the loss-free view preserving multiple introduced/fixed pairs the scalar fields collapse.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One ordered range event.",
        +    "properties": {
        +      "type": {
        +        "description": "Event boundary type: \"introduced\", \"fixed\", \"last_affected\", or \"limit\".",
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Version string or commit identifier at this boundary.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "value"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / affected / items / properties / ranges / items / properties / fixed / description
        Previous value: -"First safe version."New value: +"First safe version (convenience view — the last \"fixed\" event; see events[])."
      • changedOutput schema / properties / affected / items / properties / ranges / items / properties / introduced / description
        Previous value: -"First affected version."New value: +"First affected version (convenience view — the last \"introduced\" event; see events[] for full interval order)."
      • changedOutput schema / properties / affected / items / properties / ranges / items / properties / lastAffected / description
        Previous value: -"Last affected version when no fix exists."New value: +"Last affected version when no fix exists (convenience view — see events[])."
      • addedOutput schema / properties / affected / items / properties / ranges / items / properties / repo
        Added value: +{
        +  "description": "Source repository URL for GIT ranges. Absent on version ranges.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / affected / items / properties / versions
        Added value: +{
        +  "description": "Explicit affected versions enumerated by the advisory. Absent or empty when affected versions are expressed only as ranges.",
        +  "items": {
        +    "description": "An explicitly-listed affected version.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / withdrawn
        Added value: +{
        +  "description": "ISO 8601 timestamp when this advisory was withdrawn. Present ONLY on withdrawn advisories — a withdrawn record has been retracted and must not be treated as an active vulnerability.",
        +  "type": "string"
        +}
    • Changedosv_query_batch5 fields changed
      • addedOutput schema / properties / results / items / properties / truncated
        Added value: +{
        +  "description": "True when OSV paginated beyond the fetch cap for this package — its result may be INCOMPLETE. A truncated row with no vulnerabilities is NOT confirmed clean.",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "name",
        -  "ecosystem",
        -  "version",
        -  "vulnerable",
        -  "error",
        -  "vulnCount",
        -  "vulns"
        -]New value: +[
        +  "name",
        +  "ecosystem",
        +  "version",
        +  "vulnerable",
        +  "truncated",
        +  "error",
        +  "vulnCount",
        +  "vulns"
        +]
      • changedOutput schema / properties / summary / properties / cleanCount / description
        Previous value: -"Packages with no vulnerabilities."New value: +"Packages confirmed clean — no vulnerabilities, no error, and not truncated."
      • addedOutput schema / properties / summary / properties / truncatedCount
        Added value: +{
        +  "description": "Packages whose OSV results were truncated (may be incomplete). A truncated package with no findings is NOT counted as clean.",
        +  "type": "number"
        +}
      • changedOutput schema / properties / summary / required
        Previous value: -[
        -  "totalPackages",
        -  "vulnerableCount",
        -  "cleanCount",
        -  "errorCount",
        -  "totalVulns",
        -  "worstSeverity"
        -]New value: +[
        +  "totalPackages",
        +  "vulnerableCount",
        +  "cleanCount",
        +  "truncatedCount",
        +  "errorCount",
        +  "totalVulns",
        +  "worstSeverity"
        +]
    • Changedosv_query_package11 fields changed
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when OSV returned more result pages than the fetch cap could follow — the vulnerability list may be INCOMPLETE. A truncated empty list is NOT a clean result; raise OSV_QUERY_MAX_PAGES or narrow the query.",
        +  "type": "boolean"
        +}
      • changedOutput schema / properties / vulns / description
        Previous value: -"Vulnerabilities matching this package version. Empty array means no known vulnerabilities."New value: +"Vulnerabilities matching this package version. An empty array means no known vulnerabilities ONLY when truncated is false."
      • changedOutput schema / properties / vulns / items / properties / affectedRanges / items / properties / ecosystem / description
        Previous value: -"Affected package ecosystem."New value: +"Affected package ecosystem. Empty for source-only advisory ranges."
      • addedOutput schema / properties / vulns / items / properties / affectedRanges / items / properties / events
        Added value: +{
        +  "description": "Ordered event boundaries for this range — the loss-free view preserving multiple introduced/fixed pairs the scalar fields collapse.",
        +  "items": {
        +    "additionalProperties": false,
        +    "description": "One ordered range event.",
        +    "properties": {
        +      "type": {
        +        "description": "Event boundary type: \"introduced\", \"fixed\", \"last_affected\", or \"limit\".",
        +        "type": "string"
        +      },
        +      "value": {
        +        "description": "Version string or commit identifier at this boundary.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "type",
        +      "value"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / vulns / items / properties / affectedRanges / items / properties / fixed / description
        Previous value: -"First safe version — the version to upgrade to."New value: +"First safe version — the version to upgrade to (convenience view — see events[])."
      • changedOutput schema / properties / vulns / items / properties / affectedRanges / items / properties / introduced / description
        Previous value: -"First affected version."New value: +"First affected version (convenience view — see events[])."
      • changedOutput schema / properties / vulns / items / properties / affectedRanges / items / properties / lastAffected / description
        Previous value: -"Last affected version. Present when no fix exists."New value: +"Last affected version. Present when no fix exists (convenience view — see events[])."
      • changedOutput schema / properties / vulns / items / properties / affectedRanges / items / properties / packageName / description
        Previous value: -"Affected package name (may differ from queried name for umbrella advisories)."New value: +"Affected package name (may differ from queried name for umbrella advisories). Empty for source-only advisory ranges."
      • addedOutput schema / properties / vulns / items / properties / affectedRanges / items / properties / repo
        Added value: +{
        +  "description": "Source repository URL for GIT ranges. Absent on version ranges.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / vulns / items / properties / affectedRanges / items / properties / versions
        Added value: +{
        +  "description": "Explicit affected versions listed on this package entry. Absent or empty when affected versions are expressed only as ranges.",
        +  "items": {
        +    "description": "An explicitly-listed affected version.",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "vulns",
        -  "queryMeta"
        -]New value: +[
        +  "vulns",
        +  "truncated",
        +  "queryMeta"
        +]
  8. 2 tool updates
    • Changedosv_query_batch2 fields changed
      • addedOutput schema / properties / effectiveQuery
        Added value: +{
        +  "description": "Compact scan summary (package and outcome counts), echoed on edge-case batches for content-only clients.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Present on all-clean or all-errors batches — the aggregate outcome for content-only clients.",
        +  "type": "string"
        +}
    • Changedosv_query_package2 fields changed
      • addedOutput schema / properties / effectiveQuery
        Added value: +{
        +  "description": "The package@version (ecosystem) tuple as queried, echoed for content-only clients.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Present on the clean path — confirms no known vulnerabilities for the queried package.",
        +  "type": "string"
        +}
  9. 1 tool update
    • Changedosv_list_ecosystems1 field changed
      • changedOutput schema / properties / ecosystems / description
        Previous value: -"Supported ecosystem identifier strings. These are case-sensitive exact matches required by the ecosystem parameter of osv_query and osv_query_batch."New value: +"Supported ecosystem identifier strings. These are case-sensitive exact matches required by the ecosystem parameter of osv_query_package and osv_query_batch."
  10. 2 tool updates
    • Removedosv_query
    • Addedosv_query_package
  11. 1 tool update
    • Changedosv_query_batch2 fields changed
      • removedInput schema / properties / canvas_id
        Removed value: -{
        -  "description": "Reuse an existing DataCanvas table token to append results. Omit to create a new canvas. Only relevant when package count >= 200.",
        -  "type": "string"
        -}
      • removedOutput schema / properties / canvas_id
        Removed value: -{
        -  "description": "DataCanvas table token. Present when the package count is >= 200 or a canvas_id was provided. Use to run SQL queries across the full result set via the canvas tools.",
        -  "type": "string"
        -}
  12. 4 tool updates
    • First observedosv_get_vulnerability
    • First observedosv_list_ecosystems
    • First observedosv_query
    • First observedosv_query_batch

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables 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.
    130 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A local MCP server that scans repository dependencies for known vulnerabilities (CVEs) using OSV.dev, enriches findings with NVD and CISA KEV data, and supports triage, remediation, and accepted risk management directly from an AI coding assistant.
    6
    18 npm
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.