ZEN SecDB
Server Details
ZEN SecDB MCP server for CVE intelligence, CVSS/EPSS scoring, advisories, SSVC, and package audits.
- Status
- Healthy
- Uptime
- 93.9% over 56 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 11 tools
Each tool targets a distinct concern: search, single-CVE detail, CVSS/EPSS scoring, EPSS history, sightings, SSVC, feed reports, and audits. The main overlap is between vulnerability_info (full record) and vulnerability_score (CVSS/EPSS snapshot), but the descriptions explicitly cross-reference each other and recommend when to use which, keeping misselection risk low.
All names are lowercase snake_case, which is consistent and readable. The convention is domain_or_resource + noun (vulnerability_info, feed_report, linux_audit), with no verb prefix, so it's slightly less predictable than a verb_noun scheme but still coherent throughout.
Eleven tools is well within the ideal range and each tool earns its place covering a distinct area of the vulnerability-intelligence domain. No redundant or filler tools.
Coverage is strong: full-text search, single-CVE detail, scoring, EPSS trends, real-world sightings, SSVC prioritization, aggregated reports, and Linux/PURL audits. Minor gaps exist, such as no dedicated advisory or CWE lookup tool and no batch multi-CVE operation, but agents can work around these via vulnerability_search.
Available Tools
11 toolsepss_timeseriesARead-onlyIdempotentInspect
Get the historical EPSS time series for a specific CVE.
What this tool does
Returns the historical EPSS score, percentile, and model version available for a CVE across time, ordered by date. Useful for analyzing how exploitability likelihood has evolved over time.
When to use this tool
Use this tool when the user asks about:
EPSS trend over time
how exploitability probability changed
whether EPSS spiked or dropped
historical comparison of risk
If the user only wants the current EPSS score, use vulnerability_score instead.
Inputs
cve_id: valid CVE identifier (
CVE-YYYY-NNNNN).
Outputs
series: array of objects, each containing:
date: measurement date in ISO formatscore: EPSS scorepercentile: EPSS percentilemodel: EPSS model version
LLM usage guidelines
Never guess EPSS values-use this tool for all EPSS time-series questions.
If
cve_idis malformed or incomplete, ask the user to correct it before calling.If the user mentions multiple CVEs, call the tool once per CVE as needed.
If no historical data is available, return an empty series and state that no EPSS history was found.
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes | CVE identification (CVE-YYYY-NNNNN) |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe read-only, idempotent operation. The description adds useful behavior beyond that: results are ordered by date, empty series should be returned when no history exists, and malformed CVE IDs should be corrected before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and clearly structured with headers and bullets. It is somewhat longer than necessary for a one-parameter tool, and the Outputs section is partly redundant because an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple CVE history lookup, the description is complete: it covers purpose, usage, alternatives, input expectations, output shape, and empty-result behavior. No critical agent-facing information 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?
The schema has 100% coverage and already documents cve_id as a CVE-YYYY-NNNNN string. The description reinforces that format and adds validation behavior for malformed or incomplete IDs, plus guidance to call once per CVE when multiple are mentioned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: getting the historical EPSS time series for a specific CVE. It also explicitly distinguishes this from the sibling tool vulnerability_score by saying to use that tool for the current EPSS score.
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?
It gives concrete user intents that should trigger this tool, such as EPSS trend questions, spiking/dropping, and historical comparisons. It names an alternative tool for current-score questions and covers multi-CVE and malformed-CVE handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feed_reportARead-onlyIdempotentInspect
Run a public ZEN SecDB feed report.
What this tool does
Executes a predefined report on ZEN SecDB public feed data and returns structured results for analytics, trends, distributions, and top-N summaries.
Supported reports can cover public datasets such as:
CVEs
security advisories
EPSS
weaknesses
CPE vendors and products
exploit references
sightings and IOC-related data
Use feed_report_catalog to discover the list of available reports and their supported input parameters.
When to use this tool
Use this tool when the user asks about:
distributions, trends, or counts across public vulnerability data
top CVEs, top weaknesses, top vendors, or similar rankings
timeline-based summaries such as yearly or monthly trends
aggregated views over public SecDB feed data
Do not use this tool when the user asks for details about a single CVE, advisory, or exploit. Use the dedicated lookup tools instead.
Inputs
report_id: identifier of the report to execute
filters: optional object with report-specific filters
limit: optional maximum number of results to return, when supported by the selected report
Outputs
summary: Optional Markdown summary of the report results
report: structured JSON object containing:
report_id: executed report identifierfilters: applied filtersdata: structured report rows or aggregated values
LLM usage guidelines
Use
feed_report_catalogwhen you need to discover which public reports are available or which parameters they support.Do not guess report IDs-use the catalog when uncertain.
Present
summarydirectly to the user-it is already Markdown.Use
reportfor structured follow-up analysis, comparisons, or tool chaining.If the selected report does not exist, return a clear not-found error instead of guessing an alternative.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | optional maximum number of results to return, when supported by the selected report | |
| filters | No | optional object with report-specific filters | |
| report_id | Yes | identifier of the report to execute |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | structured report rows or aggregated values |
| filters | No | optional JSON schema describing supported input parameters |
| summary | No | Optional Markdown summary of the report results |
| report_id | Yes | executed report identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by documenting error behavior ('return a clear not-found error instead of guessing an alternative') and the shape of the response (summary + structured report). It stops short of noting rate limits or auth requirements, but for a read-only report runner this is solid.
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 and clearly sectioned with headers, so an agent can scan it quickly. It is somewhat long, and the Outputs section partially duplicates the existing output schema, which is minor redundancy rather than noise.
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 an output schema present, the description needn't explain return values, yet it still summarizes them for chaining guidance. Combined with full schema coverage and rich annotations, nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents report_id, filters, and limit, and the description's Inputs section largely restates them. It does add one useful semantic point: report-specific filters and the instruction not to guess report IDs, directing the agent to the catalog. Baseline 3 is appropriate since 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?
The description states a specific verb ('Run/Executes') and resource ('predefined report on ZEN SecDB public feed data') and enumerates the domains covered (CVEs, advisories, EPSS, weaknesses, etc.). It clearly separates this aggregate/analytics tool from the sibling lookup tools (vulnerability_info, vulnerability_search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use list (distributions, trends, top-N rankings, timeline summaries) plus an explicit when-not-to-use rule directing single-item requests to the dedicated lookup tools. It also names feed_report_catalog as the discovery route, which is the correct alternative for finding report IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feed_report_catalogARead-onlyIdempotentInspect
List available public ZEN SecDB feed reports.
What this tool does
Returns the catalog of available ZEN SecDB public feed reports, including their identifiers, descriptions, and supported input parameters.
This tool helps discover which reports can be executed through feed_report.
When to use this tool
Use this tool when:
the user asks what public reports are available
you need to discover the correct report ID before running a report
you need to inspect supported filters or input parameters
you are unsure which report best matches the user request
Inputs
This tool does not require any input.
Outputs
reports: array of report definitions, each containing:
report_id: report identifiertitle: human-readable report titledescription: short explanation of what the report returnsinput_schema: optional JSON schema describing supported input parameters
LLM usage guidelines
Use this tool before
feed_reportwhenever the correct report ID or supported parameters are not already known.Do not invent report IDs or parameters not present in the catalog.
Prefer the most specific matching report for the user request.
When useful, briefly summarize the most relevant available reports before calling
feed_report.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| reports | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful context beyond that: no input is required, the call is purely a catalog lookup, and results must be treated as the authoritative set of valid IDs. It stops short of describing ordering or size/caching behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line summary and clean headers, so an agent can skim it quickly. It is somewhat longer than necessary for a zero-parameter discovery tool, since the 'discovers reports for feed_report' point is repeated in the purpose, usage, and LLM guidelines sections.
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?
Everything needed to call it correctly is present: no inputs, the role relative to `feed_report`, and a description of the returned catalog fields. Although an output schema exists, the description still names the key return fields (report_id, title, description, input_schema), which helps the agent chain into `feed_report`.
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?
The tool takes zero parameters, so the baseline is 4. The description correctly and explicitly states 'This tool does not require any input', matching the empty schema with no contradiction.
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 available public ZEN SecDB feed reports') and immediately frames the tool as a discovery counterpart to `feed_report`. An agent can distinguish it from every sibling 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 an explicit when-to-use list (discover report IDs, inspect filters, unsure which report matches) and names the alternative tool `feed_report` with the ordering rule 'use before feed_report whenever the correct report ID is not already known'. It also states the negative constraint not to invent report IDs or parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_auditARead-onlyIdempotentInspect
Perform a Linux package vulnerability audit using SecDB.
What this tool does
Analyzes the installed packages of a Linux system-identified by OS and OS version-and returns vulnerability information plus a Markdown summary. The audit results are based exclusively on the package list provided by the user.
When to use this tool
Use this tool when the user wants to determine:
whether installed packages contain known vulnerabilities
whether a host, VM, container, or base image is affected by security advisories
which packages require patching or upgrading
If the user does not know the valid values for os or version, first call the linux_os tool to retrieve the exact supported combinations.
Inputs
os: Linux distribution identifier supported by SecDB (use
linux_osto obtain allowed values).version: OS version or codename corresponding to the selected distribution.
packages: list of installed packages, one per line, generated using the appropriate system command:
For RPM-based distributions (RHEL, CentOS, Rocky, Alma, SUSE)
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n'For DEB-based distributions (Ubuntu, Debian)
dpkg-query -W -f='${Package} ${Version} ${Architecture}\n'For Alpine Linux
apk list -IThe raw output of these commands can be passed directly as the packages input (one package per line).
...
python3 3.12.3-0ubuntu2.1 amd64
systemd 255.4-1ubuntu8.10 amd64
tmux 3.4-1ubuntu0.1 amd64
...Outputs
report: structured objects describing the advisories affecting the audited packages.
summary: Markdown summary including total vulnerabilities, severity breakdown, and key findings.
LLM usage guidelines
Never guess whether a package is vulnerable-always call this tool for Linux audits.
If
osorversionis unclear or missing, calllinux_osand ask the user to choose a valid combination.Normalize the package list to “one entry per line” if the user provides unstructured output.
The
summaryis already Markdown and can be shown directly.Use
reportwhen deeper technical analysis is required.
| Name | Required | Description | Default |
|---|---|---|---|
| os | Yes | Linux distribution identifier supported by SecDB (use `linux_os` to obtain allowed values) | |
| version | Yes | OS version or codename corresponding to the selected distribution | |
| packages | Yes | list of installed packages, **one per line**, generated using the appropriate system command |
Output Schema
| Name | Required | Description |
|---|---|---|
| report | No | |
| summary | No | Markdown summary including total vulnerabilities, severity breakdown, and key findings |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuinely new behavioral context: results are based exclusively on the user-supplied package list, the summary is pre-rendered Markdown safe to show directly, and the agent is warned never to guess vulnerability status. It stops short of stating failure modes (e.g., unsupported os/version handling) or limits.
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?
Heavily structured with front-loaded headers and zero wasted sentences; the command snippets and example output directly serve the tool's strict input format requirement. Minor restatement of schema field text is offset by the otherwise high signal density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still labels the two return fields (`report`, `summary`) and their intended use cases. Combined with input format guidance and prerequisite routing to `linux_os`, an agent has everything needed to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by giving the exact generation commands per distro family (rpm -qa, dpkg-query, apk list) and a sample package list, which is real added meaning for the `packages` parameter that the schema does not supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (audit), a specific resource (installed Linux packages), and the backing data source (SecDB). It is clearly distinguishable from the sibling `purl_audit` (which would audit by package URL) and from `linux_os` (which only enumerates supported OS/version pairs).
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?
Contains an explicit 'When to use this tool' section with three concrete triggering conditions, plus an explicit routing rule: if `os`/`version` are unknown, call `linux_os` first. This is a direct when/when-not/alternative disclosure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linux_osARead-onlyIdempotentInspect
List supported Linux operating systems and their corresponding versions for use with the linux_audit tool.
What this tool does
Returns an array of supported OS/version pairs, each in the form:
{"os":"name", "versions":["version or codename"]}This allows the LLM and the user to know exactly which inputs are valid for the linux_audit tool.
When to use this tool
Use this tool when:
the user does not know which OS names or versions are supported
the user provides unclear or ambiguous OS information
you need to validate
os/versionbefore performing a Linux audit
This tool should typically be called before linux_audit whenever parameters are uncertain.
Inputs
This tool does not require any input.
Outputs
Returns an array of objects:
os: supported Linux distribution identifier
versions: corresponding list of supported release or codename
Example:
[
{"os": "ubuntu", "versions": ["noble","focal"]},
{"os": "debian", "versions": ["bookworm","sid"]},
{"os": "redhat", "version": ["redhat-9.0"]}
]LLM usage guidelines
Use this tool to validate or suggest correct OS/version combinations before calling
linux_audit.If the user provides invalid or misspelled OS names, retrieve the official list here and ask them to select one.
Do not guess operating system identifiers-always rely on this tool to confirm correctness.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| supported | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: it is a static reference lookup requiring no input, returns a fixed OS/version array, and should never be guessed at. It does not mention caching or freshness of the list, 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?
The opening sentence is well front-loaded, but the body is padded: the validation guidance is repeated across 'When to use this tool' and 'LLM usage guidelines,' and a full JSON example is shown even though an output schema already exists. The headers add structure but the content is roughly twice the necessary length.
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-param lookup with an output schema, the description is more than sufficient: it explains the call ordering relative to `linux_audit` and the validity-checking role. The example output partially duplicates the output schema, but nothing an agent needs to invoke 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?
The tool takes zero parameters, so the baseline is 4. The description confirms 'This tool does not require any input,' which is consistent with the empty schema, though it adds no further semantic detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('List supported Linux operating systems and their corresponding versions') and explicitly ties it to the `linux_audit` sibling tool. An agent can distinguish it from every other sibling in the list without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use conditions (user doesn't know supported OS names/versions, ambiguous OS info, need to validate before an audit) and states a sequencing rule: call this before `linux_audit` when parameters are uncertain. The 'do not guess' instruction further routes behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purl_auditARead-onlyIdempotentInspect
Perform a software package vulnerability audit using SecDB.
What this tool does
Analyzes a list of software packages identified by PURL (Package URL) and returns vulnerability information plus a Markdown summary. The audit results are based exclusively on the package list provided.
When to use this tool
Use this tool when the user wants to determine:
whether application dependencies contain known vulnerabilities
whether a project is affected by security advisories
which packages require patching or upgrading
Supported ecosystems
npm - Node.js packages (e.g. pkg:npm/lodash@4.17.21)
maven - Java/JVM packages (e.g. pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1)
pypi - Python packages (e.g. pkg:pypi/django@4.2.0)
gem - Ruby gems (e.g. pkg:gem/rails@7.0.0)
cargo - Rust crates (e.g. pkg:cargo/openssl-src@111.10)
nuget - .NET packages (e.g. pkg:nuget/Newtonsoft.Json@13.0.1)
golang - Go modules (e.g. pkg:golang/github.com/gin-gonic/gin@1.9.1)
composer - PHP packages (e.g. pkg:composer/symfony/symfony@6.4.0)
Inputs
purls: list of Package URLs, one per entry. Generate them from your project manifest files:
Node.js: package.json / package-lock.json
Python: requirements.txt / Pipfile.lock / pyproject.toml
Ruby: Gemfile.lock
Go: go.mod / go.sum
Rust: Cargo.lock
PHP: composer.lock
Java: pom.xml / build.gradle
.NET: *.csproj / packages.lock.json
Outputs
report: structured JSON objects describing the advisories affecting the audited packages.
summary: Markdown summary including total vulnerabilities, severity breakdown, and key findings.
LLM usage guidelines
Never guess whether a package is vulnerable — always call this tool.
Only submit PURLs from the supported ecosystems listed above; others will be ignored.
The
summaryis already Markdown and can be shown directly.Use
reportwhen deeper technical analysis is required.
| Name | Required | Description | Default |
|---|---|---|---|
| purls | Yes | List of Package URLs (PURL) to audit |
Output Schema
| Name | Required | Description |
|---|---|---|
| report | No | |
| summary | No | Markdown summary including total vulnerabilities, severity breakdown, and key findings |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description still adds real behavior beyond that: results depend exclusively on the supplied package list, unsupported ecosystems are silently ignored, and the summary/report outputs are distinguished. It doesn't disclose rate limits or failure modes, so a 4 rather than 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?
Content is front-loaded with a one-line purpose followed by cleanly separated What/When/Ecosystems/Inputs/Outputs/Guidelines sections. It is long, and the ecosystem table plus manifest list are verbose, but each block carries actionable information rather than 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-parameter, annotated, read-only tool with an output schema, the definition covers everything an agent needs: when to use it, supported inputs, and what report vs summary contain. Nothing required for correct invocation 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% for the single 'purls' parameter, so baseline is 3. The description adds meaningful semantics beyond the schema — per-ecosystem PURL syntax examples and a mapping of which manifest files (package.json, requirements.txt, Cargo.lock, etc.) each should be generated from, which genuinely helps correct invocation.
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 ('Perform a software package vulnerability audit') and pins the scope to PURL-identified packages backed by SecDB, which clearly separates it from OS-level or feed-oriented siblings like linux_audit and feed_report. An agent can identify what it does and its input domain 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?
The 'When to use this tool' section gives three concrete triggering conditions (dependency CVEs, advisory impact, patching needs) and even an imperative 'always call this tool' rather than guessing. It lacks explicit 'when not to use' or named alternatives among siblings, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sightings_searchARead-onlyIdempotentInspect
Search real-world vulnerability sightings in SecDB.
What this tool does
Retrieves information about where and how a vulnerability appears in the real world, including:
Exploit-DB, Metasploit modules, PoCs
Scanner plugins (Nessus, OpenVAS/Greenbone)
Vendor advisories
Social/media references (Reddit, Mastodon, Bluesky)
MISP threat-intel sightings
When to use this tool
Use this tool when the user asks:
"Is this CVE exploited in the wild?"
"Is there a PoC or exploit available?"
"Does Nessus or OpenVAS have a plugin for this CVE?"
"Is this vulnerability being discussed online?"
"Show me all advisories/exploits for this CVE/product."
Inputs
Any of the following may be used:
cve_id: search by specific CVE
query: full-text search (name, product, advisory ID, exploit reference, etc.)
category: filter sightings by type (e.g.,
exploit,nasl,advisory,scanner,poc,social,misp)status: filter by sighting state (
exploited,mitigated,seen,confirmed, etc.)
Outputs
Returns an array of sightings, typically containing:
cve_idstatuscategoryreferencedetails(object with additional structured data)
LLM usage guidelines
Use
cve_idwhen the question targets a specific vulnerability.Use
queryfor broad or exploratory searches.Only use valid enum values for
categoryandstatus.Use this tool instead of assuming exploitation, PoCs, or plugin availability.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Full-text-search for vulnerability name, CVE ID or Advisory ID, categories, etc. | |
| cve_id | No | CVE identification (CVE-YYYY-NNNN) | |
| status | No | Sighting status | |
| category | No | Sighting category (scanner, exploit, advisory, nasl, etc.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds value beyond that by disclosing the data provenance (external exploit/scanning/social/MISP feeds), the shape of the result set, and the constraint that only valid enum values are accepted. It omits anything about result volume, pagination, or freshness of the aggregated feeds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening line is front-loaded and the headed sections are easy to scan. The 'Inputs' section, however, largely restates parameters the schema already documents at 100% coverage, which is redundant padding in an otherwise tight document.
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 documenting the returned array and its fields (cve_id, status, category, reference, details). Combined with input semantics and usage triggers, an agent has everything needed to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description rises above it by giving selection semantics rather than restating types: use cve_id for a targeted vulnerability, query for broad/exploratory searches, and only valid enum values for category/status. That is genuinely decision-useful guidance the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Search real-world vulnerability sightings in SecDB') and enumerates the concrete data it covers (Exploit-DB, Metasploit, Nessus/OpenVAS plugins, advisories, social, MISP). It is clear on its own, but never explicitly differentiates itself from close siblings like vulnerability_search or vulnerability_info, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides strong contextual guidance via example user questions ('Is this CVE exploited in the wild?', 'Does Nessus have a plugin?') and an explicit preference statement ('Use this tool instead of assuming exploitation, PoCs, or plugin availability'). It does not, however, name the alternative sibling tools or state when *not* to use it, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ssvc_calculatorARead-onlyIdempotentInspect
Compute CISA SSVC (Stakeholder-Specific Vulnerability Categorization) for a CVE.
What this tool does
Calculates the SSVC decision (Track, Track*, Attend, Act) using:
exploitation status
technical impact
automatable exploitation
mission prevalence (user-provided)
public well-being impact (user-provided)
This reflects CISA's official SSVC prioritization model.
When to use this tool
Use this tool when the user asks about:
how urgently a CVE should be remediated
CISA SSVC priority or risk category
a structured decision model for remediation
Inputs
cve_id: the vulnerability to evaluate (
CVE-YYYY-NNNNN)mission_prevalence:
M,S, orE(must be provided by the user)public_well_being_impact:
M,A, orI(must be provided by the user)
Outputs
decision: one of Track, Track*, Attend, Actexploitationtechnical_impactautomatablemission_prevalencepublic_well_being_impactmission_and_well_being_impact_valuevector_stringsummary: Markdown explanation of the outcome
LLM usage guidelines
Always ask the user for mission_prevalence (M/S/E) and public_well_being_impact (M/A/I) before calling.
Never guess these values—SSVC depends on user context.
Use the
summaryto explain clearly why the decision was returned.Combine with
vulnerability_scoreorsightings_searchif the user needs additional context.
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes | CVE ID | |
| mission_prevalence | Yes | # Mission Prevalence A mission essential function (MEF) is a function directly related to accomplishing the organization's mission as set forth in its statutory or executive charter. Identifying MEFs is part of business continuity planning or crisis planning. In contrast to non-essential functions, an organization must perform a [MEF] during a disruption to normal operations. The mission is the reason an organization exists, and MEFs are how that mission is realized. Non- essential functions support the smooth delivery or success of MEFs rather than directly supporting the mission. ## Possible values - "M" or "Minimal" Neither support nor essential apply. The vulnerable component may be used within the entities, but it is not used as a mission-essential component, nor does it provide impactful support to mission-essential functions. - "S" or "Support" The vulnerable component only supports MEFs for two or more entities. - "E" or "Essential" The vulnerable component directly provides capabilities that constitute at least one MEF for at least one entity; component failure may (but does not necessarily) lead to overall mission failure. ## Instructions for LLM Ask the user for the "Mission Prevalence" value before calling the tool. | |
| public_well_being_impact | Yes | # Public Well-being Impact ## Possible values - "M" or "Minimal" **Type of Harm -> All**, The effect is below the threshold for all aspects described in material. - "A" or "Material" **Type of Harm -> Physical harm**, Does one or more of the following: - Causes physical distress or injury to system users. - Introduces occupational safety hazards. - Reduces and/or results in failure of cyber-physical system safety margins. **Type of Harm -> Environment**, Major externalities (property damage, environmental damage, etc.) are imposed on other parties. **Type of Harm -> Financial**, Financial losses likely lead to bankruptcy of multiple persons. **Type of Harm -> Psychological**, Widespread emotional or psychological harm, sufficient to necessitate counseling or therapy, impact populations of people. - "I" or "Irreversible" **Type of Harm -> Physical harm**, One or both of the following are true: - Multiple fatalities are likely. - The cyber-physical system, of which the vulnerable component is a part, isl ikely lost or destroyed. **Type of Harm -> Environment**, Extreme or serious externalities (immediate public health threat, environmental damage leading to small ecosystem collapse, etc.) are imposed on other parties. **Type of Harm -> Financial**, Social systems (elections, financial grid, etc.) supported by the software are destabilized and potentially collapse. **Type of Harm -> Psychological N/A ## Instructions for LLM Ask the user for the "Public Well-being Impact" value before calling the tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | No | Summary |
| decision | Yes | Decision |
| automatable | Yes | Automatable |
| exploitation | Yes | State of Exploitation (Evidence of Active Exploitation of a Vulnerability) |
| vector_string | Yes | SSVC Vector String |
| technical_impact | Yes | Technical Impact (Technical Impact of Exploiting the Vulnerability) |
| mission_prevalence | Yes | Mission Prevalence (Impact on Mission Essential Functions of Relevant Entities) |
| public_well_being_impact | Yes | Public Well-being Impact |
| mission_and_well_being_impact_value | Yes | Mission and Well-Being Impact Value |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive, closed-world), and the description adds real behavioral context: the tool cannot be called meaningfully without two user-supplied context values, and the summary field should be used to explain the decision. It does not discuss failure modes for unknown CVEs or rate limits, so it stops 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?
Header-delimited and front-loaded, so an agent can scan purpose, triggers, inputs, and outputs quickly. However, the 'Outputs' section enumerates fields that an output schema already provides, and the LLM usage bullets partially duplicate the When-to-use section.
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 three-parameter, deterministic calculator with full schema coverage, an output schema, and rich annotations, nothing an agent needs is missing: purpose, trigger conditions, input provenance requirements, and downstream composition with sibling tools are all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds the cve_id format (CVE-YYYY-NNNNN) that the schema omits and reinforces that M/S/E and M/A/I values are user-context inputs rather than derivable. The mission/well-being value explanations largely restate the schema, limiting the gain.
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 ('Compute CISA SSVC ... for a CVE') and names the exact decision categories returned (Track, Track*, Attend, Act). It clearly distinguishes itself from siblings like vulnerability_score and sightings_search, which are explicitly called out as complements rather than alternatives.
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?
Includes a dedicated 'When to use this tool' section listing three concrete user intents (remediation urgency, CISA SSVC priority, structured decision model) plus explicit LLM instructions to always collect mission_prevalence and public_well_being_impact before calling and never guess. It also names sibling tools to combine with.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vulnerability_infoARead-onlyIdempotentInspect
Get detailed information about a specific CVE.
What this tool does
Retrieves the full vulnerability record for a CVE from SecDB, including:
official description and summary
CVSS metrics (all versions available)
EPSS metadata (if present)
affected products and versions
vendor/security advisories
references and upstream sources
weakness classification (CWE)
exploit and patch information (if included in the record)
All information is returned in a structured Markdown format suitable for direct display.
When to use this tool
Use this tool when the user asks:
"Give me details about CVE-XYZ."
"Which products are affected by this vulnerability?"
"Show me advisories or references for this CVE."
"Explain what this vulnerability is and how serious it is."
This tool is ideal for deep inspection of a single vulnerability. For multiple CVEs, call the tool once per CVE.
Inputs
cve_id: valid CVE identifier (
CVE-YYYY-NNNNN).
Outputs
Markdown-formatted vulnerability information including:
detailed description
severity metrics (CVSS, vectors)
affected products list
advisory list
references
weakness (CWE) details
additional structured metadata from SecDB
LLM usage guidelines
Always prefer this tool when the user needs factual information about a specific CVE.
If multiple CVEs are mentioned, call the tool once per CVE.
Combine with:
vulnerability_score- to enrich output with numerical CVSS/EPSS metricssightings_search- to check real-world exploitation, PoCs, plugins, advisoriesssvc_calculator- to compute prioritization based on the vulnerability data
Do not hallucinate product lists, advisories, or details—use what the tool returns.
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes | CVE identification (CVE-YYYY-NNNNN) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: the SecDB data source, the structured Markdown return format, which fields may be absent ('if present', 'if included in the record'), and an explicit anti-hallucination instruction. It does not say what happens for a malformed or unknown CVE ID.
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?
Header-based structure is scannable and the purpose is front-loaded, but the field inventory is duplicated almost verbatim under 'What this tool does' and 'Outputs,' and the 'LLM usage guidelines' section restates the multi-CVE rule already given above. Roughly a third of the text is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so thoroughly, listing every field family returned and the Markdown format. The only real gap is error/not-found behavior for an invalid CVE ID, which matters for a lookup tool with a single required key.
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 schema already documents cve_id with the same CVE-YYYY-NNNNN format string the description repeats. The description adds no syntax, validation, or normalization guidance beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get detailed information about a specific CVE') and scopes itself explicitly to 'deep inspection of a single vulnerability,' which implicitly separates it from the multi-CVE siblings like vulnerability_search. The enumerated contents (CVSS, EPSS, advisories, CWE) make the resource concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use trigger phrases, states the multi-CVE handling rule ('call the tool once per CVE'), and names three complementary siblings (vulnerability_score, sightings_search, ssvc_calculator) with the condition for combining them. Nothing about selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vulnerability_scoreARead-onlyIdempotentInspect
Get CVSS and current EPSS score for a specific CVE.
What this tool does
Returns a full risk snapshot for a CVE, including:
CVSS version
CVSS base score
CVSS severity
CVSS vector string
human-readable explanation of the CVSS vector
current EPSS score
The field cvss_explain provides a natural-language interpretation of the CVSS vector (attack conditions, privileges, user interaction, impact breakdown).
Example:
For CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, the explanation may read:
"The vulnerability can be exploited remotely over the network with low complexity,
without authentication and without user interaction. Exploitation may lead to high
impact on confidentiality, high impact on integrity, and high impact on availability."
When to use this tool
Use this tool when the user asks:
"What is the CVSS/EPSS of this CVE?"
"Explain the CVSS vector of this vulnerability."
"What is the severity and why?"
"Give me the risk profile for this CVE."
For EPSS historical trends, use epss_timeseries.
Inputs
cve_id: valid CVE identifier (
CVE-YYYY-NNNNN).
Outputs
cvss_versioncvss_base_scorecvss_base_severitycvss_vector_stringcvss_explain- human-readable explanation of the CVSS vectorepss_score
LLM usage guidelines
Never guess CVSS or EPSS values—always call this tool.
Use the
cvss_explainfield directly when the user wants an interpretation of the vector string.If multiple CVEs are referenced, call the tool once per CVE.
Combine this tool with
sightings_searchorssvc_calculatorfor more complete risk assessments.
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes | CVE identification (CVE-YYYY-NNNNN) |
Output Schema
| Name | Required | Description |
|---|---|---|
| epss_score | Yes | EPSS score |
| cvss_explain | No | Explain CVSS |
| cvss_version | Yes | CVSS version |
| cvss_base_score | Yes | CVSS base score |
| cvss_base_severity | Yes | CVSS base severity |
| cvss_vector_string | Yes | CVSS vector string |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real behavioral value beyond that: it explains what cvss_explain contains, instructs the agent never to guess values, and says to call once per CVE for multi-CVE requests. It does not discuss caching, rate limits, or behavior on unknown/invalid CVEs, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded and clearly sectioned, but it is long for a one-parameter tool and repeats the schema in an 'Inputs' section and the output schema in an 'Outputs' section, neither of which earns its place. The illustrative CVSS vector example is useful but disproportionate.
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 annotations covering safety/idempotency and an output schema present, the description already does more than required: it lists returned fields, explains the one non-obvious field (cvss_explain), and gives usage guidance. An agent has everything needed to call it correctly and interpret the result.
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 there is a single required parameter, so the schema already documents cve_id fully. The description restates the same CVE-YYYY-NNNNN format without adding validation rules, error behavior, or format nuances beyond the schema. 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+resource (get CVSS and current EPSS score for a specific CVE) and enumerates exactly what the risk snapshot contains. It also names the sibling that handles the adjacent case (epss_timeseries for historical trends), so an agent can differentiate 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?
Provides an explicit 'When to use this tool' section with four concrete user phrasings, names the exclusion condition for EPSS historical trends, and routes to related tools (sightings_search, ssvc_calculator) for fuller assessments. Nothing about selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vulnerability_searchARead-onlyIdempotentInspect
Perform a full-text vulnerability search in SecDB.
What this tool does
Searches across:
CVE entries
Security advisories
Exploit references
Product and vendor vulnerability data
Results are formatted in Markdown and include a search summary.
Searchable fields (Lucene syntax supported):
type: result type - cve, cwe, advisory, nasl, exploitdb, nuclei
id: exact identifier (e.g. id:CVE-2026-12345, id:RHSA-2026:1234)
title: resource title or name
summary: short summary
description: full description text
alias: known vulnerability names (e.g. alias:log4shell)
severity: critical, high, medium, low
kev: true/false — CISA KEV catalog membership
status: NVD status (CVE only) e.g. analyzed, modified
published: publication date (e.g. published:[2026-01-01 TO 2026-12-31])
modified: last modification date
source: CNA or advisory source (e.g. source:"Red Hat", source:fortinet)
cve: related CVE ID (e.g. cve:CVE-2026-44827)
cwe: related CWE ID (e.g. cwe:CWE-79)
tag: advisory tag (e.g. tag:scada, tag:ics)
attack_vector: network, adjacent, local, physical
cvss_score: CVSS base score (e.g. cvss_score:[7.0 TO 10.0])
Default operator is AND. Use OR for alternatives, quotes for exact phrases, * for wildcards.
Examples:
"apache struts rce" → RCE vulnerabilities in Apache Struts
"id:CVE-2026-44827" → exact CVE lookup
"source:fortinet AND severity:critical" → critical Fortinet advisories
"alias:log4shell" → Log4Shell by alias
"cve:CVE-2026-44827 AND type:exploitdb" → ExploitDB entries for a CVE
"cvss_score:[9.0 TO 10.0] AND kev:true" → critical KEV CVEs
"tag:scada AND severity:high" → high severity ICS/SCADA advisories
When to use this tool
Use this tool when the user asks:
to look up a CVE, advisory, exploit, or product
"show vulnerabilities for X"
"search for advisories about Y"
exploratory or broad vulnerability discovery
Inputs
query: free-text search term (CVE ID, advisory ID, product name, exploit name, vendor, keyword, etc.)
Outputs
results: array of Markdown-formatted search hits
summary: Markdown summary with counts and a link to continue searching on SecDB
LLM usage guidelines
Use this tool instead of assuming whether a CVE/advisory/exploit exists.
Present
resultsandsummarydirectly to the user-they are already Markdown.Combine with
vulnerability_score,epss_timeseries, orsightings_searchfor deeper analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | CVE ID, vulnerability name, Advisory ID, Exploit, etc. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | No | |
| summary | No | Search summary with found records (ID) and link for continue the search on SecDB |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior. The description adds substantial behavioral context beyond that: the exact searchable fields, supported Lucene syntax, default AND operator, result formatting as Markdown, and the presence of a search summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is long but well structured with headings and front-loaded purpose, making it easy to scan. Some sections, particularly Inputs and Outputs, repeat what the schema and output schema already convey, so it is not maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter search tool with rich annotations and an output schema, the description is highly complete: it explains scope, syntax, examples, output format, and usage guidance. An agent has everything needed to call and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is only one parameter, but the description dramatically enriches its meaning by explaining Lucene syntax, listing searchable fields with examples, and showing concrete query patterns. This goes far beyond the schema's brief parameter note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — performing a full-text vulnerability search in SecDB — and enumerates the exact content types covered. It further distinguishes its exploratory search role from sibling analysis tools by naming vulnerability_score, epss_timeseries, and sightings_search as complementary functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use guidance with concrete user request examples such as looking up a CVE, advisory, exploit, or product, and labels the tool for exploratory or broad discovery. It does not explicitly name a when-not or a direct alternative for detailed single-record lookups, though it does route deeper analysis to siblings.
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 tool update
- Changed
purl_audit1 field changed- added
Output schema / properties / report / items / additionalPropertiesAdded value: +true
11 tool updates
- First observed
epss_timeseries - First observed
feed_report - First observed
feed_report_catalog - First observed
linux_audit - First observed
linux_os - First observed
purl_audit - First observed
sightings_search - First observed
ssvc_calculator - First observed
vulnerability_info - First observed
vulnerability_score - First observed
vulnerability_search
Related MCP Connectors
Free MCP server of security & dev API tools -- supply-chain, CVE, DNS, WHOIS, OFAC, Cosmos SDK.
CVE, KEV, EPSS, SBOM and advisory lookups; per-CVE exposure from Shodan data (© Shodan). Keyless.
CVE patch-priority API + MCP: CISA KEV, EPSS, CVSS, SSVC. Keys $19/mo; 200 free calls/day.
CVE intelligence: exploitation (KEV/EPSS), detection coverage, fixed versions, CPE configurations.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server to query and manage CISA Known Exploited Vulnerabilities catalog with EPSS overlay, enabling vulnerability checks and remediation deadline tracking.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for querying live CISA KEV, EPSS, and enriched vulnerability feeds with full provenance. Enables natural-language access to auditable security-intelligence data from Claude Desktop and other MCP clients.MIT
- AlicenseAqualityBmaintenanceMCP server for querying CVE and package vulnerability data from NVD and OSV.dev, allowing CVE lookups and dependency scanning.41MIT
- AlicenseAqualityCmaintenanceUnifies NVD, EPSS, CISA KEV, GitHub Advisory, and OSV into a single MCP server, enabling AI agents to query vulnerability intelligence conversationally with 23 tools for incident response, prioritization, dependency audits, and threat monitoring.41292 npm30MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.