Patchwire
Server Details
Hourly security advisories for JS, AI and web3 packages: ranges, fixes and exploit conditions.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
Each tool has a distinct role: batch lookup by package (get_advisories), single-advisory detail (get_advisory), upgrade target (latest_safe), platform bulletins, and a cross-stack feed. The only mild overlap is get_advisories vs list_feed, but the descriptions explicitly steer ('to check your own packages, use get_advisories') and the plural/singular get pair is clarified by 'one advisory in full'.
Most names follow verb_noun (get_advisories, get_advisory, get_platform_bulletins, list_feed), but latest_safe breaks the pattern with an adjective-style name and no verb. Readable overall, but the convention is not uniform.
Five tools is well-scoped for an advisory/security lookup server: batch query, detail, feed, upgrade target, and non-npm bulletins. Each tool covers a distinct workflow step rather than padding the surface.
The lifecycle is well covered: discover advisories by package, drill into one by id, find a safe upgrade version, browse recent advisories, and check platform bulletins. Minor gaps remain around severity-based package queries or live dependency/lockfile scanning, but core workflows are complete.
Available Tools
5 toolsget_advisoriesAdvisories for packagesARead-onlyIdempotentInspect
Check npm packages for security advisories. Start here before installing, upgrading or deploying: send 1 to 50 package names (never versions) and get, per package, its total and up to 20 advisories of the last 120 days, newest first, each with vulnerable ranges, fixed versions and the conditions that make it exploitable. A package with none returns total 0. Compare the ranges with your lockfile. For one advisory in full use get_advisory; for the version to upgrade to, use latest_safe.
| Name | Required | Description | Default |
|---|---|---|---|
| packages | Yes | npm package names as written in package.json, 1 to 50, for example ["next", "@supabase/supabase-js"]. Names only, never versions: compare the returned ranges with your lockfile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (which only cover read-only/idempotent safety) by disclosing the 120-day window, the 20-advisories-per-package cap, newest-first ordering, and the zero-advisory case returning total 0. It also describes the payload fields (vulnerable ranges, fixed versions, exploitability conditions), which matters since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each doing distinct work: purpose, invocation contract, return shape, sibling routing. Front-loaded and free of filler despite the density of information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing exactly what comes back per package and how to act on it. An agent has everything needed to call it correctly and interpret the result without further exploration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already documents the array, 1-50 bounds and the name pattern, so the description supplements rather than carries the burden. It still adds real meaning by stressing "names only, never versions" and telling the agent to compare returned ranges against its lockfile.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Check npm packages for security advisories") and immediately distinguishes itself from siblings by naming get_advisory and latest_safe as different scopes. The scope (batch of package names, not versions) is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call it ("Start here before installing, upgrading or deploying") and routes to the correct alternatives for adjacent needs: get_advisory for a single advisory in full, latest_safe for the upgrade target. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_advisoryOne advisory in fullARead-onlyIdempotentInspect
Read one advisory in full by id: CVE, GHSA, MAL or Patchwire id, any case, aliases resolve. Returns its ranges, fixed versions, exploit conditions with the source sentence they come from, a summary and the sources. Use it after get_advisories or list_feed gave you an id. An unknown id, or one older than 120 days, returns an error.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | An advisory id: CVE (CVE-2026-12345), GHSA (GHSA-xxxx-xxxx-xxxx), MAL or a Patchwire id. Any case; aliases resolve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely new behavior: the payload contents (ranges, fixed versions, exploit conditions with their source sentence, summary, sources) and a 120-day retention cutoff that returns an error. The retention limit in particular is a constraint an agent cannot get from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and the id contract, then the return shape and error case. No filler and nothing repeated for its own sake.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by summarizing exactly what comes back. Combined with the id namespace rules and the error condition, an agent has everything needed to call this correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single `id` parameter already documents the accepted formats, case-insensitivity, and alias resolution with a regex pattern. The description restates the same facts rather than adding new constraint detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with explicit cardinality ('Read one advisory in full by id'), which cleanly separates it from the plural sibling get_advisories. It also enumerates the id namespaces (CVE, GHSA, MAL, Patchwire) so the agent knows exactly what kind of key to supply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use it after get_advisories or list_feed gave you an id' names the producing siblings and the condition under which this tool applies, giving clear routing instead of leaving the agent to infer. Failure conditions ('unknown id, or one older than 120 days, returns an error') further bound when a call will succeed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_platform_bulletinsPlatform bulletinsARead-onlyIdempotentInspect
Get the security bulletins and announced changes of hosting and data platforms, which are not npm packages and never show in a lockfile: Vercel, Supabase, Neon and the other platforms of the platform parameter. Returns up to 50, newest first; omit platform for all of them. For npm packages, use get_advisories.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | One platform: vercel, supabase, cloudflare, railway, neon, postgres, clerk. Omit for every platform. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds substantive behavioral detail beyond that: result cap of 50 and newest-first ordering, which an agent needs to interpret output. It does not explain what happens past the 50-item cap, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core scope front-loaded and the sibling redirect last. The mid-sentence parenthetical about lockfiles and the parameter reference are slightly redundant, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single optional-enum parameter and no output schema, the description supplies ordering and result-count behavior plus sibling routing, which is enough to call it correctly. Missing only the truncation/pagination story once the 50-item cap is hit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum values are fully documented there, including 'Omit for every platform.' The description restates the same semantics ('the other platforms of the platform parameter', 'omit platform for all of them') without adding syntax or edge-case meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: security bulletins and announced changes for hosting/data platforms. It explicitly carves out the boundary ('not npm packages and never show in a lockfile') and enumerates the covered platforms, so an agent can distinguish it from advisory-lookup tools without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both directions of routing: use this for platform bulletins, and 'For npm packages, use get_advisories.' It also states the omission behavior ('omit platform for all of them'), so the no-argument path is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
latest_safeSafe version per release lineARead-onlyIdempotentInspect
Find the version to upgrade to for one npm package. Returns, per release line (major, or minor for 0.x), the version that fixes every known advisory of the last 120 days; a line still affected has safe: null and the ids that keep it affected. Also lists advisories with no fix found, and says whether this package name itself is flagged as malicious. Use it after get_advisories, to pick one target version per line.
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes | One npm package name as written in package.json, for example "next" or "@solana/web3.js". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds substantive behavior: a 120-day advisory window, per-line resolution, 'safe: null' plus blocking ids when a line remains affected, unfixed advisories, and a malicious-package flag. Because there is no output schema, this return-shape disclosure is exactly what the agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in the first sentence, then return semantics, then the workflow hint. Dense but each clause carries information; the nested parenthetical about major/minor lines is slightly heavy but earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well by describing the response fields (per-line version, safe: null, blocking ids, unfixed advisories, malicious flag). Only minor gaps remain, such as response ordering or how release lines are enumerated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is fully documented in the schema, including the pattern and examples. The description only restates that it takes 'one npm package,' adding no format or edge-case guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it finds the version to upgrade to for one npm package, per release line. The scope is precise enough to distinguish it from the advisory-lookup siblings, which return advisories rather than a chosen target version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly sequences it: 'Use it after get_advisories, to pick one target version per line,' which tells the agent exactly where this fits in a workflow. It stops short of naming a when-not condition or an alternative tool for the same job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feedLatest advisoriesARead-onlyIdempotentInspect
List the latest advisories across every tracked stack, newest first, without a package list. Filter by sector (js, stack, ai, crypto) and severity; by default the last 7 days and at most 20 advisories (days 1 to 30, limit 1 to 50). An empty list means nothing matched. To check your own packages, use get_advisories instead.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days back, from 1 to 30. Default 7. | |
| limit | No | How many advisories at most, from 1 to 50. Default 20. | |
| section | No | Sector: js (JS runtimes and frameworks), stack (hosting and data platforms), ai (AI SDKs and agent tools), crypto (web3 libraries). Omit for every sector. | |
| severity | No | Only this severity; watch is an announced change or upcoming fix. Omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description adds context instead: ordering (newest first), default 7-day window, cap of 20, and the meaning of an empty result. It does not mention pagination or whether results are deduplicated across stacks, which is the only real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded paragraph with the scope first and the alternative last, which is the right order. It loses a little to redundancy, restating default values and numeric bounds that already live in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param filtered list with no output schema, the description covers return ordering, the empty-result case, and the sibling alternative. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description largely restates what the schema already documents (defaults 7/20, ranges 1-30 and 1-50, the five severity values). It adds only the light framing that filters are optional, so the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the latest advisories'), plus scope ('across every tracked stack, newest first, without a package list'). It explicitly distinguishes itself from get_advisories, so an agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both sides of the routing decision: use this for a broad feed, use get_advisories to check your own packages. Defaults and bounds are stated, and the sector/severity filters are framed as optional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- First observed
get_advisories - First observed
get_advisory - First observed
get_platform_bulletins - First observed
latest_safe - First observed
list_feed
Related MCP Connectors
Daily Ed25519-signed security intelligence for AI-agent stacks; CVEs & advisories, paid via x402.
Supply chain risk scoring for npm, PyPI, Cargo, and Go. 9 tools. Behavioral signals.
Package intelligence for AI agents across npm, PyPI, crates.io and deps.dev. No API keys.
Package intelligence for AI agents across npm, PyPI, crates.io and deps.dev. No API keys.
Related MCP Servers
- AlicenseAqualityCmaintenanceSupply chain risk scoring for npm, PyPI, and GitHub repos860 npm8MIT
- AlicenseAqualityAmaintenanceDependency intelligence for AI agents. CVE scanning, health checks, upgrade planning.9126 npm2Apache 2.0
- AlicenseAqualityFmaintenanceDependency security & health auditing for AI agents with no account or API key required.22MIT

EVIDIQ Lineageofficial
AlicenseNot gradedqualityBmaintenanceDeterministic supply-chain provenance, SBOM/AI-BOM generation, and dependency risk analysis for npm and PyPI packages, with 14 security rules and verifiable reports.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.