VulnMCP
VulnMCP is an MCP server that gives AI agents tools for vulnerability analysis, lookup, and intelligence gathering.
Classify vulnerability severity from English, Chinese, or Russian descriptions.
Predict CWE categories and MITRE ATT&CK techniques from vulnerability text.
Look up detailed CVE information with optional comments, sightings, bundles, linked vulnerabilities, and KEV enrichment.
Search vulnerabilities by source, CWE, product, date, with pagination and KEV-aware prioritization.
Search and create sightings to track exploited, seen, or patched vulnerabilities.
Find most-sighted vulnerabilities to prioritize high-activity issues.
Search community comments and curated vulnerability bundles.
Browse and filter KEV catalog entries (CISA, CIRCL, EUVD) and check if a CVE is known exploited.
Guess CPE identifiers from product keywords using cpe-guesser.
Query the GCVE registry: list, search, and get Global Numbering Authorities (GNAs) and GCVE references.
Search CNA partners of the CVE Program and retrieve full partner records.
Easily extend the server with additional modular skills or tools.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@VulnMCPLook up CVE-2025-14847 and classify its severity"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
VulnMCP
VulnMCP is an MCP server built with FastMCP that provides AI clients, chat agents, and other automated systems with tools for vulnerability management. It offers modular "skills" that can be easily extended or integrated, enabling intelligent analysis and automated insights on software vulnerabilities.
Features
Vulnerability Severity Classification -- Automatically assess the criticality of vulnerabilities using CIRCL's fine-tuned NLP models: CIRCL/vulnerability-severity-classification-roberta-base (English), CIRCL/vulnerability-severity-classification-chinese-macbert-base (Chinese), and CIRCL/vulnerability-severity-classification-russian-ruRoberta-large (Russian).
CWE Classification -- Predict CWE categories from vulnerability descriptions using CIRCL/cwe-parent-vulnerability-classification-roberta-base.
ATT&CK Technique Classification -- Predict MITRE ATT&CK (Enterprise) techniques from vulnerability descriptions using CIRCL/vulnerability-attack-technique-classification-roberta-base, trained with VulnTrain on a curated gold set of CVE-to-technique mappings.
Vulnerability Lookup -- Query the Vulnerability Lookup API to get detailed information about specific CVEs, search vulnerabilities by source, CWE, product, or date, find community comments, and discover curated vulnerability bundles.
KEV Catalog -- Browse and filter Known Exploited Vulnerability (KEV) entries, check whether a CVE appears in a KEV catalog, find recently added entries, and filter by catalog origin (CISA KEV, CIRCL, EUVD KEV).
GCVE Registry -- Query the GCVE Global Numbering Authority (GNA) registry and references to discover vulnerability allocators and KEV catalog identifiers.
CNA Partners -- Search the CNA partners of the CVE Program (mirrored at gcve.eu) by name, country, role, or organization type, and retrieve a partner's full record including disclosure policy and security advisory links.
Modular Architecture -- Easily add new skills or tools to expand the functionality of the MCP server.
Related MCP server: Vulnerability Registry MCP Server
Installation
Requires Python 3.10+ and Poetry v2+.
git clone https://github.com/vulnerability-lookup/VulnMCP.git
cd VulnMCP
poetry installThis installs the CPU-only build of PyTorch, which is what you want on a machine without an NVIDIA GPU. Inference on the classification models runs fine on CPU.
On a GPU host, opt in to the CUDA build instead:
poetry install --extras cudaThis pulls torch from the CUDA 13.0 index along with the NVIDIA runtime
libraries -- roughly 2.5 GB more than the CPU build. There is no cpu extra:
CPU is simply the default when --extras cuda is not passed.
On macOS, torch always comes from PyPI and the cuda extra has no effect,
since NVIDIA CUDA builds do not exist for that platform.
Running the MCP server
stdio (default)
The default transport, used by most MCP clients (Claude Code, Claude Desktop, etc.):
poetry run vulnmcpHTTP transport
For network access or multiple concurrent clients:
poetry run fastmcp run vulnmcp/server.py --transport http --host 127.0.0.1 --port 9000Available tools
Tool | Description |
| Classify vulnerability severity (low/medium/high/critical) from a text description. Supports English, Chinese, and Russian with auto-detection. |
| Predict CWE categories from a vulnerability description. Returns top-5 predictions with parent CWE mapping. |
| Predict MITRE ATT&CK techniques from a vulnerability description. Returns ranked techniques with names and sigmoid scores; scores >= 0.5 are positive predictions. |
| Fetch the 3 most recent CVEs for a given CWE ID. |
| Look up a specific vulnerability by ID (e.g. CVE-2025-14847) with optional comments, sightings, bundles, linked vulnerabilities, and KEV enrichment. |
| Search vulnerabilities with filters: source, CWE, product, date range, pagination, and optional KEV-aware prioritization. |
| Search vulnerability sightings (seen/exploited/patched/etc.) with filters to identify what is actively discussed or abused. |
| Create a new sighting for a vulnerability (requires API permissions on most instances). |
| Retrieve a ranking of vulnerabilities by sighting activity to help prioritize important issues. |
| Search community comments related to vulnerabilities, with filters by vulnerability ID or author. |
| Search curated vulnerability bundles (grouped CVEs for a campaign, product, or incident), with filters by vulnerability ID or author. |
| List and filter KEV catalog entries by vulnerability ID, status reason, exploited flag, date range, author, or origin catalog UUID. |
| Query cpe-guesser with product keywords to infer likely CPE identifiers. |
| List all Global Numbering Authorities (GNA) from the GCVE registry. |
| Get a specific GNA entry by numeric ID or exact short name. |
| Search GNA entries by name (case-insensitive substring match). |
| List GCVE references including KEV catalog UUIDs for use with |
| Search the CNA partners of the CVE Program by name, country, program role, or organization type. |
| Get one CNA partner's full record (disclosure policy, advisory links, contacts) by exact short name. |
List all tools:
poetry run fastmcp list vulnmcp/server.pyTesting tools from the command line
Use fastmcp call to invoke any tool directly:
# Look up a specific CVE
poetry run fastmcp call vulnmcp/server.py get_vulnerability vulnerability_id=CVE-2025-14847
# Search for recent SQL injection vulnerabilities
poetry run fastmcp call vulnmcp/server.py search_vulnerabilities cwe=CWE-89 per_page=5
# Retrieve top most-sighted vulnerabilities
poetry run fastmcp call vulnmcp/server.py get_most_sighted_vulnerabilities limit=5
# Search comments for a specific CVE
poetry run fastmcp call vulnmcp/server.py search_comments vuln_id=CVE-2024-3094
# Search bundles related to a CVE
poetry run fastmcp call vulnmcp/server.py search_bundles vuln_id=CVE-2024-3094
# Check if a CVE is in a KEV catalog
poetry run fastmcp call vulnmcp/server.py list_kev_entries vuln_id=CVE-2021-44228
# List recent KEV entries from the last week
poetry run fastmcp call vulnmcp/server.py list_kev_entries date_from=2026-03-18 per_page=5
# List KEV entries from the CISA KEV catalog only
poetry run fastmcp call vulnmcp/server.py list_kev_entries vulnerability_lookup_origin=405284c2-e461-4670-8979-7fd2c9755a60 per_page=5
# Guess likely CPE values from product keywords
poetry run fastmcp call vulnmcp/server.py guess_cpes query='["outlook","connector"]'
# List all GNA entries from the GCVE registry
poetry run fastmcp call vulnmcp/server.py list_gna_entries
# Look up a specific GNA by short name
poetry run fastmcp call vulnmcp/server.py get_gna_entry short_name=CIRCL
# Search GNA entries
poetry run fastmcp call vulnmcp/server.py search_gna query=cert
# List GCVE references (includes KEV catalog UUIDs)
poetry run fastmcp call vulnmcp/server.py list_gcve_references
# Search CNA partners of the CVE Program
poetry run fastmcp call vulnmcp/server.py search_cna_partners country=Luxembourg
# Get one CNA partner's full record
poetry run fastmcp call vulnmcp/server.py get_cna_partner short_name=CIRCL
# Classify severity from a description
poetry run fastmcp call vulnmcp/server.py classify_severity \
description="A remote code execution vulnerability allows an attacker to execute arbitrary code via a crafted JNDI lookup."
# Classify CWE from a description
poetry run fastmcp call vulnmcp/server.py classify_cwe \
description="Fix buffer overflow in authentication handler"
# Predict ATT&CK techniques from a description
poetry run fastmcp call vulnmcp/server.py classify_attack_techniques \
description="A remote code execution vulnerability allows an attacker to execute arbitrary code via a crafted JNDI lookup." top_k=5Connecting to Claude Code
Register VulnMCP as an MCP server in Claude Code with:
claude mcp add vulnmcp -- poetry --directory /path/to/VulnMCP run vulnmcpOr with fastmcp install:
poetry run fastmcp install claude-code vulnmcp/server.py --name VulnMCPOnce registered, the tools are available to Claude Code. You can verify with:
claude mcp listConfiguration
Environment variable | Description | Default |
| Base URL for the Vulnerability Lookup API |
|
| Base URL for the cpe-guesser API |
|
| API key used for authenticated actions such as creating sightings | (unset) |
Contributing
Please read CONTRIBUTING.md before opening a pull request.
Note: this repository currently runs an experiment where only computer-assisted (AI-related) contributions are accepted.
License
Funding
AIPITCH (AI-Powered Innovative Toolkit for Cybersecurity Hubs) is a co-funded EU project supported by the European Cybersecurity Competence Centre (ECCC) under the DIGITAL-ECCC-2024-DEPLOY-CYBER-06-ENABLINGTECH program and CIRCL.
The project brings together an international consortium to develop AI-based tools that enhance the capabilities of operational cybersecurity teams. These tools are designed to support critical services, with a focus on national security teams, while also being applicable to internal security teams in companies and institutions.
Available Tools
16 toolsclassify_cweARead-onlyIdempotent
Classify a vulnerability description into CWE categories.
Uses CIRCL's fine-tuned RoBERTa model to predict the most likely CWE (Common Weakness Enumeration) categories, mapped to their parent CWEs.
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | The vulnerability description text (English). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds meaningful behavioral context by explaining the tool uses a ML model to predict categories and maps them to parent CWEs, which signals that outputs are predictions and not exact database matches. This goes beyond basic safety annotations without contradicting them.
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 two sentences, front-loaded with the core purpose, and each sentence provides distinct value—purpose and model behavior. No filler or redundancy.
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?
Given the simple tool with one input and an existing output schema, the description sufficiently explains the tool's behavior (classification with parent CWE mapping). It does not mention limitations like language support (already in schema) or probability scores, but these are not essential for correct selection and invocation. The sibling context makes the tool's niche clear.
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 covers the single parameter (description) with 100% coverage, including language specification (English). The description does not add extra parameter semantics such as length limits or examples, but the schema adequately defines the input, so no gap exists.
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 action ('Classify a vulnerability description into CWE categories') and distinguishes from siblings like classify_severity by specifying CWE categorization. It also mentions the model (CIRCL's RoBERTa) and mapping to parent CWEs, making the purpose 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?
The description implies the tool is for CWE classification but does not explicitly state when to use it versus alternatives such as classify_severity. No exclusions or alternative recommendations are provided, leaving usage context implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classify_severityARead-onlyIdempotent
Classify the severity of a vulnerability based on its description.
Uses CIRCL's fine-tuned transformer models:
English descriptions: RoBERTa-base model (low/medium/high/critical)
Chinese descriptions: MacBERT-base model (low/medium/high)
Russian descriptions: ruRoBERTa-large model (low/medium/high/critical)
Language is auto-detected from the text unless explicitly specified.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Optional language hint — "en" for English, "zh" for Chinese, "ru" for Russian. Auto-detected if omitted. | |
| description | Yes | The vulnerability description text (English, Chinese, or Russian). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds valuable behavioral context: language auto-detection, use of different models for different languages, and the fact that Chinese descriptions only yield low/medium/high (no critical). This goes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a single purpose sentence, followed by a compact bulleted list of model/language details, and a closing note on auto-detection. No unnecessary words or repetition.
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?
Given the tool's simplicity (2 params, output schema present), the description is complete. It covers purpose, supported languages, model variants, label sets, and the auto-detection behavior. Return values are not described, but the output schema exists so that is not a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'description' and 'language' clearly explained in the schema. The tool description does not add significant new meaning to the parameters; it only repeats the auto-detection note that is already in the language parameter description. Baseline 3 is appropriate.
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 clearly states the tool's function with a specific verb+resource: "Classify the severity of a vulnerability based on its description." It also distinguishes itself from the sibling tool classify_cwe by focusing on severity rather than CWE classification, and provides details about language-specific models.
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 context for when to use the tool: to classify severity of vulnerability descriptions. It does not explicitly mention alternatives or exclusions, but the sibling tools are clearly different in purpose (e.g., classify_cwe), making the use case clear without naming them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sightingA
Create a sighting for a vulnerability.
Requires an API key on most Vulnerability Lookup instances. Set VULNMCP_API_KEY to authenticate automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | URI, feed, or tool identifier describing the source. | |
| sighting_type | Yes | Type of sighting. | |
| vulnerability_id | Yes | Vulnerability identifier (e.g. "CVE-2025-1234"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, but the description adds valuable behavioral context by disclosing the authentication requirement ('Requires an API key on most Vulnerability Lookup instances') and the automatic authentication mechanism. This goes beyond the structured annotations, though it stops short of describing side effects or return details.
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 exceptionally concise, consisting of two short sentences. The first sentence states the core purpose, and the second provides essential authentication context. Every word earns its place, and the information is front-loaded for quick comprehension.
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?
Given the tool's simplicity (3 flat parameters, no nested objects), an output schema exists, and annotations cover safety hints, the description covers the key contextual need: authentication. It doesn't explain the return value, but that is presumably addressed by the output schema. A small gap is the lack of guidance on what constitutes a valid 'sighting_type' or 'source', but these are not strictly required for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters (vulnerability_id, sighting_type, source) individually described. The description adds no additional parameter semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.
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 clearly states the tool's purpose: 'Create a sighting for a vulnerability.' This is a specific verb+resource pairing that distinguishes it from sibling tools, which are mostly read/search operations. The addition of authentication context further clarifies the tool's nature without ambiguity.
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 implies usage by stating it creates a sighting, and mentions the API key requirement, which is a precondition. However, it does not explicitly contrast with alternatives or state when not to use it. The sibling context suggests this is the only create tool, but the description itself provides no comparative guidance, so it earns a middle score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gna_entryARead-onlyIdempotent
Get a specific GNA entry by its numeric ID or exact short name.
Exactly one of id or short_name must be provided.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The numeric GNA identifier (e.g. 3). | |
| short_name | No | The exact short name of the GNA (e.g. "CIRCL"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent, so the description's key added value is the exclusivity constraint between id and short_name. This is meaningful behavioral guidance beyond the structured data, though no error details or response format are included.
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 concise sentences, front-loaded with the purpose and immediately followed by the key constraint. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple getter with a complete input schema, strong read-only annotations, and an output schema. The description covers the essential identifier requirement; minor gaps like error behavior when both parameters are omitted are acceptable given the 'exactly one' statement.
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 schema fully documents both id and short_name with examples. The description restates the 'exact' requirement for short_name but does not add material semantics beyond what the schema already provides.
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 the tool gets a specific GNA entry by numeric ID or exact short name, using a clear verb and resource. It distinguishes from list/search siblings by emphasizing 'specific' and the exact-identifier constraint, but does not explicitly name 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?
The instruction 'Exactly one of id or short_name must be provided' gives clear usage context for invocation. It implies this tool is for known identifiers rather than broad search, though it does not explicitly contrast with list or search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_most_sighted_vulnerabilitiesARead-onlyIdempotent
Get vulnerabilities ranked by sighting activity.
This helps quickly prioritize vulnerabilities with high real-world activity and distinguish potentially important issues from minor ones.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of entries to return (default 10). | |
| date_to | No | Upper bound date (YYYY-MM-DD). | |
| date_from | No | Lower bound date (YYYY-MM-DD). | |
| sighting_type | No | Optional type filter (e.g. "exploited", "seen"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds that results are ranked by sighting activity and useful for prioritization, but does not disclose additional behavioral details like pagination or sorting direction beyond what the schema already provides.
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 concise, with two sentences: the first states exactly what the tool does, and the second explains the value. Every sentence earns its place; no redundant or vague text.
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?
Given the simple scope, full schema coverage, and presence of an output schema, the description is complete. It explains the tool's purpose and how to think about the result (prioritization), and the annotations cover safety and idempotence.
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 parameters (limit, date_to, date_from, sighting_type) are fully documented in the schema. The description does not add any extra meaning to these parameters, so the baseline score of 3 is appropriate.
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 clearly states the tool's function: 'Get vulnerabilities ranked by sighting activity.' This specifies the verb (get), the resource (vulnerabilities), and the ranking criterion (sighting activity), distinguishing it from sibling tools like search_vulnerabilities or get_recent_vulnerabilities_by_cwe.
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 provides clear usage context: it helps 'prioritize vulnerabilities with high real-world activity' and distinguish important from minor issues. It does not explicitly mention alternatives or when not to use, but the prioritization purpose implies when this tool is appropriate over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_vulnerabilities_by_cweARead-onlyIdempotent
Fetch the 3 most recent vulnerabilities for a given CWE ID from Vulnerability Lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| cwe_id | Yes | The CWE identifier (e.g. "CWE-79" or "79"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read operation. The description adds that it returns exactly 3 most recent vulnerabilities, which is useful behavioral detail. However, it does not disclose error handling, rate limits, or behavior when no vulnerabilities are found. With annotations covering the safety profile, the description adds moderate value, consistent with the 'get_calls' calibration example.
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 a single, concise sentence that front-loads the core action ('Fetch the 3 most recent vulnerabilities') and immediately specifies the input ('for a given CWE ID'). There is no waste, and every word earns its place. It is optimally structured for quick parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple tool with one well-documented parameter, comprehensive annotations, and an existing output schema (though not shown in the prompt). The description adequately conveys the tool's purpose and result scope without needing to explain return values, since the output schema covers that. It is complete for a recent-list retrieval tool of this simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for the only parameter (cwe_id), including a clear description and examples ('CWE-79' or '79'). The tool description does not add any parameter-specific information beyond what the schema already provides, 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?
The description clearly states the verb ('Fetch'), the resource ('the 3 most recent vulnerabilities'), and the scope ('for a given CWE ID'), which distinguishes it from sibling tools like get_vulnerability (which likely fetches by vulnerability ID) and search_vulnerabilities (which likely searches broader criteria). The inclusion of the count '3' and the CWE filter makes the purpose 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?
The description implies when to use this tool (when you need recent vulnerabilities for a specific CWE), but it does not explicitly state alternatives or exclusions. It lacks guidance such as 'for broader searches, use search_vulnerabilities' or 'if you have a specific vulnerability ID, use get_vulnerability'. The usage context is clear but not comprehensive relative to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vulnerabilityARead-onlyIdempotent
Get detailed information about a vulnerability by its ID from Vulnerability Lookup.
The base URL defaults to https://vulnerability.circl.lu and can be overridden with the VULNMCP_LOOKUP_URL environment variable.
| Name | Required | Description | Default |
|---|---|---|---|
| with_kev | No | Include KEV (Known Exploited Vulnerability) enrichment. | |
| with_linked | No | Include linked vulnerabilities. | |
| with_bundles | No | Include associated bundles. | |
| with_comments | No | Include community comments. | |
| with_sightings | No | Include sighting reports. | |
| vulnerability_id | Yes | The vulnerability identifier (e.g. "CVE-2025-14847"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, idempotent, and non-destructive behavior, so the description's burden is reduced. It adds useful context about the configurable base URL (default and environment variable override), which is beyond annotation data and helps in deployment contexts. No contradictions with annotations.
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 two sentences: the first immediately states the tool's purpose, and the second adds essential configuration context. Every word earns its place; no filler or redundancy. Front-loaded and efficient.
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?
Given the simple operation (lookup by ID with optional flags), the annotations, output schema, and parameter descriptions provide comprehensive context. The description adds configuration details and source identification, making the tool fully understandable for an agent without external documentation.
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% with descriptions for all parameters, so the baseline is 3. The description does not add meaning beyond the schema—it merely repeats that the lookup is by ID, which is already in the parameter description. No extra syntax or format details are provided.
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 clearly states the tool's function with a specific verb ('Get') and resource ('detailed information about a vulnerability by its ID from Vulnerability Lookup'), immediately distinguishing it from sibling tools like search_vulnerabilities and get_recent_vulnerabilities_by_cwe. No ambiguity.
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 implies use when the agent has a vulnerability ID, but does not explicitly contrast with alternative tools or state when not to use it. Since sibling tools exist for searching and other lookup modes, explicit exclusions would improve guidance. The context is clear but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
guess_cpesARead-onlyIdempotent
Guess CPE values from product-related keywords using cpe-guesser.
The base URL defaults to https://cpe-guesser.cve-search.org and can be overridden with the VULNMCP_CPE_GUESSER_URL environment variable.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A list of product keywords (e.g. ["outlook", "connector"]). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 adds behavioral context by explaining the default base URL (https://cpe-guesser.cve-search.org) and the VULNMCP_CPE_GUESSER_URL environment variable for override. This is useful configuration information but does not disclose details like response behavior or edge cases. With annotations, this extra context earns a 3, though richer operational details would push higher.
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 two sentences: the first clearly states the purpose, and the second provides necessary configuration details about the default URL and environment variable. Every sentence earns its place, and it is appropriately sized for the tool's simplicity.
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 tool with one parameter, full annotations, and an output schema, the description provides sufficient context. It includes purpose and configuration details. The output schema already handles return values, and annotations handle safety. There is no missing critical information that would prevent correct tool selection or invocation.
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%: the input schema already describes the 'query' parameter as 'A list of product keywords (e.g. ["outlook", "connector"]).' The description does not add additional parameter semantics beyond this. Per the rubric, when schema coverage is high, the baseline is 3 even with no extra param information, and no extra value is added here.
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 clearly states the tool 'Guess CPE values from product-related keywords using cpe-guesser.' This is a specific verb (guess) + resource (CPE values) + method (from keywords using cpe-guesser). It is easily distinguishable from sibling tools like search_vulnerabilities or classify_severity, which involve different operations.
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 implies usage: when you have product keywords and need CPE values, this tool guesses them. However, it provides no explicit when-to-use versus alternatives, no exclusions, and does not reference sibling tools. Usage context is clear but not elaborated, so it falls under 'implied usage.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gcve_referencesARead-onlyIdempotent
List GCVE references (vulnerability dataset sources and their GNA mappings).
This includes KEV catalog entries with their Vulnerability-Lookup origin UUIDs, which can be used with the list_kev_entries tool's vulnerability_lookup_origin parameter to query a specific catalog.
Downloads references if not already cached locally.
Returns: A dict with the reference categories and their entries, including KEV catalogs with uuid, short_name, and optional gna_id fields.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds value by disclosing a network-side effect ('Downloads references if not already cached locally') and describes the return shape, going beyond the annotations without contradicting them.
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 earning its place: 1) what it lists, 2) how the output relates to a sibling tool, 3) the downloading behavior, 4) the return format. No redundancy or 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?
With no parameters and a provided output schema, the description covers all necessary context: purpose, relationship to list_kev_entries, side effects, and return structure. It is complete for a read-only reference-listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to document. Baseline 4 for no parameters is appropriate; the description correctly focuses on output and usage rather than nonexistent inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List GCVE references' — a specific verb and resource — and clarifies the content as 'vulnerability dataset sources and their GNA mappings'. It also distinguishes from the sibling tool list_kev_entries by explaining how the returned UUIDs feed into that tool's parameter.
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 a concrete usage context: the KEV catalog UUIDs can be used with list_kev_entries' vulnerability_lookup_origin parameter. It also mentions the download-if-not-cached behavior, but does not explicitly contrast with alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gna_entriesARead-onlyIdempotent
List all Global Numbering Authorities (GNA) from the GCVE registry.
Downloads and verifies the registry if not already cached locally.
Returns: A dict with the total count and list of all GNA entries, each containing id, short_name, full_name, cpe_vendor_name, and URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses that the tool downloads and verifies the registry if not cached, and it also outlines the return structure (dict with count and list of entries with specific fields). This adds meaningful behavioral context.
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 three sentences: a clear purpose statement, a note on download/caching, and a return summary. No redundant 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 tool with no parameters and an output schema, the description covers the main behavior, the side effect (download/verify), and the return format. It is complete for an agent to select and invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so there is nothing for the description to clarify. The description adds the return structure, which is helpful but not strictly parameter-related. Baseline 4 for zero params.
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 uses the specific verb 'List' plus the resource 'Global Numbering Authorities (GNA)' and scopes it to the GCVE registry, which clearly distinguishes it from siblings like get_gna_entry and search_gna.
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 implies use when retrieving the full set of GNA entries ('List all'), but it does not explicitly mention alternatives or exclusion criteria. The sibling tools are not referenced, so usage guidance is clear but not optimally contrastive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_kev_entriesARead-onlyIdempotent
List and filter Known Exploited Vulnerability (KEV) entries.
Use this tool to browse KEV catalogs, check if a specific vulnerability is in a KEV catalog, or find recently added KEV entries.
KEV catalogs are identified by the UUID of their Vulnerability-Lookup origin instance. Use the list_gcve_references tool to discover available KEV catalogs and their UUIDs. Known catalogs include:
CISA KEV: 405284c2-e461-4670-8979-7fd2c9755a60
CIRCL: 1a89b78e-f703-45f3-bb86-59eb712668bd
EUVD KEV (ENISA): cce329bf-df49-4c6e-a027-80be2e6483bd
The base URL defaults to https://vulnerability.circl.lu and can be overridden with the VULNMCP_LOOKUP_URL environment variable.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| author | No | Filter by author login. | |
| date_to | No | Only return entries up to this date (YYYY-MM-DD). | |
| vuln_id | No | Filter by vulnerability ID (e.g. "CVE-2021-44228"). | |
| per_page | No | Number of results per page, max 1000 (default 10). | |
| date_from | No | Only return entries from this date onward (YYYY-MM-DD). | |
| exploited | No | Filter by exploited status (True/False). | |
| status_reason | No | Filter by status reason — one of "confirmed", "suspected", "disputed", "historical", "unknown". | |
| vulnerability_lookup_origin | No | Filter by origin Vulnerability-Lookup instance UUID (e.g. "405284c2-e461-4670-8979-7fd2c9755a60" for CISA KEV). Use list_gcve_references to find available UUIDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds meaningful context about how UUIDs identify KEV catalogs and that the base URL can be overridden via an environment variable. No contradictions with annotations.
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 a compact paragraph of four sentences. It front-loads the core purpose, follows with use cases, then gives essential UUID context and configuration details. Every sentence contributes necessary information with no redundancy.
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 tool with 9 optional parameters, an output schema, and a clear domain, the description covers all necessary operational context: what it does, when to use it, how to identify catalog UUIDs, known examples, and configurability. The existence of an output schema covers return value details, so nothing critical 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%, providing baseline 3. The description adds significant semantic value by explaining the 'vulnerability_lookup_origin' parameter in depth, listing known catalog UUIDs and repeating the pointer to list_gcve_references. This enriches the schema's terse description of that parameter.
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 uses a specific verb ('List and filter') paired with a clear resource ('Known Exploited Vulnerability (KEV) entries'). It further clarifies the scope with concrete use cases: browsing catalogs, checking for a specific vulnerability, and finding recent entries. This clearly differentiates it from sibling tools like list_gna_entries.
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 explicitly states when to use this tool ('Use this tool to browse... check... find...') and points to a specific alternative for discovering KEV catalogs ('Use the list_gcve_references tool to discover available KEV catalogs and their UUIDs'). It lacks an explicit 'when not to use' statement, but the guidance is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_bundlesARead-onlyIdempotent
Search bundles related to vulnerabilities on Vulnerability Lookup.
Bundles are curated collections of related vulnerabilities, useful for grouping CVEs that affect the same campaign, product, or incident.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| author | No | Filter by bundle author/login. | |
| vuln_id | No | Filter by vulnerability identifier (e.g. "CVE-2025-1234"). | |
| per_page | No | Number of results per page, max 100 (default 20). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, establishing a safe, idempotent read operation. The description adds conceptual context about bundles but does not disclose additional behavioral details such as pagination or filtering behavior, which are already covered by the schema and annotations.
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 two sentences long, with the first sentence stating the action and the second explaining what bundles are. Every sentence earns its place, and the content is front-loaded with the primary purpose.
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 paginated search tool, the description is sufficiently complete: it explains the domain concept of bundles, and the schema covers parameters while the output schema covers return values. Nothing critical is missing for an agent to select and invoke 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?
The input schema has 100% parameter description coverage, so the baseline score of 3 applies. The description does not add extra meaning to the parameters, leaving the schema as the primary source of parameter documentation.
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 uses the specific verb 'Search' with the resource 'bundles' on Vulnerability Lookup, clearly distinguishing it from sibling search tools like search_vulnerabilities and search_sightings. It also explains what bundles are (curated collections of related vulnerabilities), reinforcing the tool's unique purpose.
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 implies usage context by explaining that bundles are useful for grouping CVEs by campaign, product, or incident, which suggests when to use this tool. However, it does not explicitly mention alternatives or exclusions, relying on the domain explanation to convey applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_commentsARead-onlyIdempotent
Search comments related to vulnerabilities on Vulnerability Lookup.
Comments are community-contributed notes, analyses, or discussions attached to specific vulnerabilities.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| author | No | Filter by comment author/login. | |
| vuln_id | No | Filter by vulnerability identifier (e.g. "CVE-2025-1234"). | |
| per_page | No | Number of results per page, max 100 (default 20). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds semantic context about comments being community-contributed but does not disclose behavioral traits such as pagination behavior, result ordering, or rate limits. It does not contradict the annotations.
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 only two sentences, front-loaded with the primary action 'Search comments related to vulnerabilities'. It contains no redundant information and is appropriately sized for a simple search tool.
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 read-only filtered search tool with all parameters documented in the schema and an output schema present, the description is complete. It explains the domain (community comments on vulnerabilities) and the tool's purpose, and the schema handles parameter and return value specifics.
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 input schema has 100% description coverage, with each parameter (page, author, vuln_id, per_page) already explained. The description does not add parameter-specific meaning beyond what the schema provides, so the baseline score 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?
The description uses a specific verb and resource ('Search comments related to vulnerabilities') and clarifies that comments are community-contributed notes attached to specific vulnerabilities. This clearly distinguishes the tool from sibling search tools like search_vulnerabilities and search_sightings, which target different resources.
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 provides context about what comments are but does not explicitly state when to use this tool vs alternatives, nor does it mention exclusions or alternative tools. Usage is implied by the tool's name and description, but no proactive guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_gnaARead-onlyIdempotent
Search for GNA entries by name (case-insensitive substring match).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search term to match against GNA short names. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds valuable behavioral detail beyond the schema by specifying case-insensitive substring matching. No contradictions with annotations.
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 sentence, 10 words, front-loaded with the action and resource. Every word earns its place; no filler or redundancy.
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 one-parameter search tool with an output schema and comprehensive annotations, the description is complete. It covers the tool's purpose, matching semantics, and scope ('by name' = GNA short names as per schema). No critical 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 input schema has 100% coverage of the single parameter, describing it as a search term matching GNA short names. The description enhances this by specifying case-insensitive substring matching, which adds semantic detail not present in 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?
The description specifies a clear verb ('Search') and resource ('GNA entries'), and immediately clarifies the matching behavior ('case-insensitive substring match'). This distinguishes it from siblings like get_gna_entry (exact retrieval) and list_gna_entries (listing all).
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 provides clear context: use this tool to find GNA entries by name with case-insensitive substring matching. It does not explicitly mention alternatives or exclusions (e.g., use get_gna_entry for exact IDs), but the context is clear enough for an agent to infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sightingsARead-onlyIdempotent
Search sightings to identify actively discussed or exploited vulnerabilities.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1). | |
| author | No | Filter by sighting author/login. | |
| source | No | Filter by source (tool name, URL, or feed). | |
| date_to | No | Upper bound date (YYYY-MM-DD). | |
| vuln_id | No | Filter by vulnerability identifier (e.g. "CVE-2025-1234"). | |
| per_page | No | Number of records per page, max 100 (default 20). | |
| date_from | No | Lower bound date (YYYY-MM-DD). | |
| sighting_type | No | Type of sighting (e.g. "exploited", "seen", "patched"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds context about the data ('actively discussed or exploited') but does not disclose additional behavioral traits such as pagination behavior or filtering semantics beyond what the schema already provides.
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 a single, focused sentence that clearly states the tool's purpose without any redundant or vague wording. It is efficient and front-loaded.
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 a rich input schema and an output schema present, the description provides sufficient context for an agent to understand the tool's core function. It could be slightly more explicit about relationship to sibling tools, but overall it is complete for a search tool with well-documented parameters.
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 all 8 parameters are already documented in the schema. The description adds no extra parameter-level meaning, which aligns with the baseline score of 3.
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 uses a specific verb ('Search') and resource ('sightings'), clearly distinguishing it from siblings like 'search_vulnerabilities' and 'create_sighting'. The phrase 'actively discussed or exploited vulnerabilities' adds useful intent and scope.
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 implies usage for finding vulnerability sightings that are actively discussed or exploited, but it does not explicitly state when to choose this tool over alternatives like 'search_vulnerabilities' or 'get_vulnerability'. No exclusions or alternative mentions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_vulnerabilitiesBRead-onlyIdempotent
Search vulnerabilities on Vulnerability Lookup with filters.
The base URL defaults to https://vulnerability.circl.lu and can be overridden with the VULNMCP_LOOKUP_URL environment variable.
| Name | Required | Description | Default |
|---|---|---|---|
| cwe | No | Filter by CWE ID (e.g. "CWE-79"). | |
| page | No | Page number (default 1). | |
| since | No | Only return vulnerabilities after this date (ISO format, e.g. "2025-01-01"). | |
| source | No | Data source filter (e.g. "cvelistv5", "github", "nvd"). | |
| product | No | Filter by product name (case-insensitive). | |
| per_page | No | Number of results per page, max 100 (default 10). | |
| with_kev | No | Include KEV enrichment for each vulnerability (default False). | |
| date_sort | No | Sort field — "published", "updated", or "reserved" (default "published"). | published |
| sort_order | No | Sort order — "asc" or "desc" (default "desc"). | desc |
| prioritize_kev | No | Sort results with KEV entries first (default False). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds useful context about the default base URL and the VULNMCP_LOOKUP_URL environment variable override. However, it omits other behavioral traits like pagination or rate limits, but with annotations covering safety, a 3 is appropriate.
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 a concise two-sentence structure: the first sentence states the purpose, the second provides configuration context. It is front-loaded and contains no filler, making it efficient and well-structured.
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?
Given the tool's complexity (10 parameters, all optional) and the presence of an output schema, the description is notably minimal. It doesn't explain how filters interact, typical usage scenarios, or any behavioral details beyond the base URL. The output schema helps, but the description still feels under-specified for a tool of this scope.
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% — every parameter has a description, so the schema carries the full burden. The tool description itself adds no additional parameter semantics beyond what is already in the schema. Baseline 3 is correct.
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 clearly states it 'Search vulnerabilities on Vulnerability Lookup with filters,' which specifies the verb, resource, and scope. It distinguishes from sibling tools by naming the resource (vulnerabilities), though it doesn't explicitly contrast with alternatives like get_vulnerability. A solid, clear purpose.
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?
No guidance is provided on when to use this tool versus alternatives or how filters should be applied. The description only mentions the base URL and environment variable, which is configuration rather than usage guidance. There is no mention of exclusions or preferred contexts.
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. Dates show when Glama detected each change.
16 tool updates
v1.0.0- First observed
classify_cwe - First observed
classify_severity - First observed
create_sighting - First observed
get_gna_entry - First observed
get_most_sighted_vulnerabilities - First observed
get_recent_vulnerabilities_by_cwe - First observed
get_vulnerability - First observed
guess_cpes - First observed
list_gcve_references - First observed
list_gna_entries - First observed
list_kev_entries - First observed
search_bundles - First observed
search_comments - First observed
search_gna - First observed
search_sightings - First observed
search_vulnerabilities
TDQS
Each tool targets a distinct resource and action: classification, vulnerability lookup, sightings, KEV, comments, bundles, CPE guessing, and GNA registry. The GNA tools (get, list, search) are differentiated by query type, and no two tools appear to do the same thing.
All tool names follow a consistent lowercase snake_case verb_noun pattern (e.g., classify_severity, search_vulnerabilities, list_kev_entries). Verbs are uniform and predictable, with no mixing of conventions.
With 16 tools, the count is slightly above the ideal 3-15 range but each tool serves a distinct purpose in the vulnerability intelligence domain. The breadth of features (search, classify, sightings, KEV, comments, bundles, CPE guessing, GNA) justifies the size, though it borders on heavy.
The tool set covers vulnerability search, retrieval, classification, sightings, KEV, comments, bundles, CPE guessing, and GNA registry, providing a comprehensive read and analysis surface. Minor gaps exist such as no create/update/delete operations for comments or bundles, but these are likely out of scope for this server.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
31CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
ZEN SecDB MCP server for CVE intelligence, CVSS/EPSS scoring, advisories, SSVC, and package audits.
Related MCP Servers
- AlicenseAqualityBmaintenanceThis MCP server transforms Claude into a comprehensive security analyst by providing access to 27 security tools across 21 APIs for vulnerability intelligence. It enables users to query multiple sources like NVD, EPSS, CISA KEV, and threat intelligence platforms in parallel to get correlated security insights and risk assessments for CVEs.281,315Apache 2.0
- AlicenseAqualityDmaintenanceAn MCP server that exposes a legacy vulnerability database as tools for LLM clients, enabling security analysts to query vulnerabilities using natural language through six specialized tools for vendor lookup, vulnerability search, and risk analysis.6MIT
- AlicenseAqualityCmaintenanceMCP server for the NIST National Vulnerability Database — lets AI assistants search CVEs by keyword, severity, CPE, CWE, KEV status, and date range via natural language.2GPL 3.0
- AlicenseAqualityCmaintenanceMCP server that provides tools to search, filter, and retrieve CVE data from the NVD API, including by ID, keyword, severity, and recency.4MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vulnerability-lookup/VulnMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server