CIRCL CVE SEARCH MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CIRCL CVE SEARCH MCP ServerGet details for CVE-2021-44228"
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.
CIRCL CVE SEARCH MCP Server
A Model Context Protocol (MCP) server for accessing CIRCL's Vulnerability-Lookup platform, providing comprehensive, cross-source vulnerability and security information.
This server previously used the legacy
cve.circl.lucve-search API. CIRCL has superseded that service with Vulnerability-Lookup, so this server now talks tohttps://vulnerability.circl.lu/api.
Features
This MCP server provides reliable tools to access:
CVE Information: Get detailed information about specific Common Vulnerabilities and Exposures
Vendor Browsing: Browse known products for a vendor to discover security issues in specific vendors' products
CWE Information: Get Common Weakness Enumeration information for understanding vulnerability types
CAPEC Information: Get Common Attack Pattern Enumeration and Classification data for understanding attack methods
Recent Vulnerabilities: Get the most recently published/updated vulnerabilities, correlated across all sources tracked by the platform
Related MCP server: mcp-nvd
Key Improvements
Retry Logic: Automatic retry with exponential backoff for reliable API calls
Enhanced Formatting: Structured, readable response formatting with key information highlighted
Better Error Handling: Clear, actionable error messages with troubleshooting guidance
Input Validation: Comprehensive validation and sanitization of all inputs
Installation
npm install @cyreslab/circl-cve-search-mcp-serverUsage
Add this server to your MCP client configuration:
{
"mcpServers": {
"circl-cve-search": {
"command": "npx",
"args": ["@cyreslab/circl-cve-search-mcp-server"]
}
}
}Available Tools
get_cve
Get detailed information about a specific CVE by its ID.
Parameters:
cve_id(required): CVE identifier (e.g., "CVE-2021-44228")
Example:
{
"name": "get_cve",
"arguments": {
"cve_id": "CVE-2021-44228"
}
}Response Format:
Structured CVE data with key information highlighted
Summary, publication dates, CVSS scores
Associated weakness types (CWE) and reference counts
Full raw data for detailed analysis
browse_vendor
Browse known products for a vendor, sorted by most recent vulnerability activity.
Parameters:
vendor(required): Vendor name (e.g., "apache", "microsoft", "google")limit(optional): Number of results to return (default: 10, max: 50)
Example:
{
"name": "browse_vendor",
"arguments": {
"vendor": "apache",
"limit": 15
}
}Response Format:
List of known products for the specified vendor, each with a last-change timestamp
Total count and displayed count
Vendor name normalization
get_cwe
Get Common Weakness Enumeration (CWE) information by ID.
Parameters:
cwe_id(required): CWE identifier (e.g., "CWE-79", "CWE-89")
Example:
{
"name": "get_cwe",
"arguments": {
"cwe_id": "CWE-79"
}
}Response Format:
CWE name and detailed description
Extended descriptions and weakness ordinalities
Likelihood of exploit information
Full raw data for comprehensive analysis
get_capec
Get Common Attack Pattern Enumeration and Classification (CAPEC) information by ID.
Parameters:
capec_id(required): CAPEC identifier (e.g., "CAPEC-66", "CAPEC-89")
Example:
{
"name": "get_capec",
"arguments": {
"capec_id": "CAPEC-66"
}
}Response Format:
Attack pattern name and description
Typical severity and likelihood of attack
Prerequisites and related weaknesses
Complete raw data for in-depth analysis
get_recent_vulnerabilities
Get the most recently published/updated vulnerabilities, correlated across all sources tracked by the platform (e.g. NVD, GitHub, PySec, GSD, CSAF advisories from various vendors).
Parameters:
limit(optional): Number of results to return (default: 10, max: 50)
Example:
{
"name": "get_recent_vulnerabilities",
"arguments": {
"limit": 10
}
}Response Format:
List of recently changed vulnerabilities, normalized across the platform's different native record formats (OSV-style records, CVE 5.x records, and CSAF advisories)
Identifier(s), publication/modification dates, a truncated summary, severity, and reference count for each
Data Source
This server uses CIRCL's Vulnerability-Lookup platform, which superseded the legacy cve-search service formerly hosted at cve.circl.lu. It provides:
Cross-source correlated vulnerability data (NVD, GitHub, PySec, GSD, CSAF advisories from various vendors, and more)
Common Platform Enumeration (CPE) information
Common Weakness Enumeration (CWE) data
Common Attack Pattern Enumeration and Classification (CAPEC) data
Continuous updates with the latest vulnerability information
Rate Limiting
The CIRCL Vulnerability-Lookup API is free to use and doesn't require authentication. However, please use it responsibly and avoid making excessive requests that could impact the service.
Error Handling
The server handles various error conditions:
Invalid CVE/CWE/CAPEC ID formats
Empty search queries
API rate limiting
Network errors
Invalid parameters
Development
Building
npm run buildRunning in Development
npm run devLicense
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Support
For issues and questions:
GitHub Issues: Report an issue
CIRCL Vulnerability-Lookup API Documentation: https://vulnerability.circl.lu/api/
Available Tools
5 toolsbrowse_vendorARead-only
Browse known products for a vendor, sorted by most recent vulnerability activity
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (default: 10, max: 50) | |
| vendor | Yes | Vendor name (e.g., "apache", "microsoft", "google") |
Output Schema
| Name | Required | Description |
|---|---|---|
| vendor | Yes | |
| showing | Yes | |
| products | Yes | |
| total_found | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description doesn't need to restate safety. It does add the sorting-by-recent-activity behavior, which is useful, but it doesn't clarify whether products without any vulnerability activity are included or what 'vulnerability activity' precisely means. The added value is moderate but not deficient.
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 action and resource, then adds the sorting detail. Every word earns its place with 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?
For a simple browse tool, the description covers the purpose, the target resource, and the ordering. An output schema exists to describe return values, and the annotations cover safety and open-world semantics. Nothing critical for calling the tool 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% – both 'vendor' and 'limit' are fully described in the input schema, including defaults and constraints. The description adds no parameter-specific meaning beyond the schema, so a 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 states a specific verb ('Browse'), a clear resource ('known products for a vendor'), and a sorting criterion ('most recent vulnerability activity'). It clearly distinguishes this from siblings like get_cve or get_recent_vulnerabilities, which operate on vulnerability records rather than vendor product lists.
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 browsing vendor products, but it does not explicitly state when to use this tool versus the sibling tools (e.g., get_recent_vulnerabilities for global vulnerability feeds). The differentiation is clear from the purpose, but there are no explicit 'use when' or 'instead of' instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_capecARead-only
Get Common Attack Pattern Enumeration and Classification (CAPEC) information by ID
| Name | Required | Description | Default |
|---|---|---|---|
| capec_id | Yes | CAPEC identifier (e.g., "CAPEC-66", "CAPEC-89") |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| details | No | |
| capec_id | Yes | |
| raw_data | No | Full raw CAPEC record as returned by the platform |
| description | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety and scope. The description adds no additional behavioral traits such as output size, pagination, or authentication needs. It is consistent with annotations but contributes no extra context beyond the minimal purpose.
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?
A single, focused sentence that front-loads the action and resource. There is no fluff or redundancy; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and an output schema, which covers return value expectations. The description is minimal but sufficient for an agent to invoke it correctly. A tiny bit more context (e.g., typical use case) would push it to 5, but nothing essential 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 description coverage is 100%, and the schema fully documents the capec_id parameter with a pattern and example. The description adds no semantic detail 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 'Get' and the resource 'CAPEC information by ID'. It is unambiguous and distinct from siblings like get_cwe and get_cve, which target different vulnerability classification systems.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the name and description (for retrieving CAPEC details by ID), but there is no explicit guidance on when to choose this over siblings, nor any exclusions or alternative tools mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cveARead-only
Get detailed information about a specific CVE by its ID with enhanced data analysis
| Name | Required | Description | Default |
|---|---|---|---|
| cve_id | Yes | CVE identifier (e.g., "CVE-2021-44228") |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| cve_id | Yes | |
| summary | Yes | |
| raw_data | No | Full raw CVE record as returned by the platform |
| discovery | No | |
| references | No | |
| weaknesses | No | |
| affected_systems | No | |
| security_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only 'enhanced data analysis,' which is too vague to meaningfully disclose behavior such as enrichment, external lookups, or response shaping. No contradiction exists, but the description contributes limited additional behavioral context beyond 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 a single, front-loaded sentence that immediately identifies the resource and operation. It is not bloated, but the trailing 'with enhanced data analysis' is vague and does not earn its place with concrete information, keeping it slightly below a perfect score.
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, read-only lookup tool with full schema documentation, an output schema, and safety annotations, the description is almost sufficient. It lacks explicit sibling differentiation or guidance about what 'enhanced data analysis' includes, but the core invocation context is adequately covered.
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 the cve_id parameter fully documented including a pattern and example. The description restates the concept of 'by its ID' but adds no new parameter semantics beyond what the schema already provides. Baseline 3 is appropriate since the schema carries the documentation burden.
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: 'Get detailed information about a specific CVE by its ID.' This clearly distinguishes it from sibling tools like get_recent_vulnerabilities (which lists by recency) and get_cwe/get_capec (which query different knowledge bases). The only minor weakness is the vague phrase 'enhanced data analysis,' but it does not obscure the core 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 phrase 'specific CVE by its ID' provides clear usage context: call this tool when you already have a concrete CVE identifier. It does not explicitly name alternatives or state when not to use it, but the scope is clear enough to route an agent correctly relative to the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cweARead-only
Get Common Weakness Enumeration (CWE) information by ID
| Name | Required | Description | Default |
|---|---|---|---|
| cwe_id | Yes | CWE identifier (e.g., "CWE-79", "CWE-89") |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| cwe_id | Yes | |
| details | No | |
| raw_data | No | Full raw CWE record as returned by the platform |
| description | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description does not contradict them. It adds no extra behavioral detail such as not-found handling or exact-match guarantees, but for a simple lookup with an output schema this is acceptable.
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 one concise, front-loaded sentence that states the action and target resource with 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?
With one fully documented required parameter, an output schema, and read-only annotations, the essential call contract is covered. The only real gap is routing among sibling tools, which is already reflected in the usage_guidelines score.
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 fully documents cwe_id with a pattern and example, so the description need not repeat parameter details. The phrase 'by ID' adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Identifies a specific action ('Get'), a precise resource ('Common Weakness Enumeration (CWE) information'), and the lookup key ('by ID'). The resource name clearly differentiates it from CVE or CAPEC lookups at a surface level.
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 no guidance on when to use this tool instead of siblings like get_cve or get_capec. The phrase 'by ID' implies exact-ID lookup, but no alternatives or exclusion criteria are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_vulnerabilitiesARead-only
Get the most recently published/updated vulnerabilities, correlated across all sources tracked by the platform
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results to return (default: 10, max: 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| vulnerabilities | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds that results are the most recently published/updated and correlated across sources, providing extra behavioral context. However, it does not clarify what 'correlated' entails (e.g., deduplication) or mention pagination.
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 and resource, with no redundant words or filler. It efficiently conveys the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one well-documented parameter and an output schema present, the description adequately conveys what is returned (recent vulnerabilities) and the source scope. The term 'correlated' is slightly ambiguous but not blocking. It could optionally mention sorting, but the output schema likely covers return details.
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 fully documents the single 'limit' parameter with a description, default, and max. The tool description adds no additional parameter-specific meaning, so the baseline of 3 is appropriate given the schema coverage is 100%.
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 ('Get') with a clear resource ('most recently published/updated vulnerabilities') and adds the distinctive scope 'correlated across all sources tracked by the platform.' This differentiates it from siblings that target specific vendors, CWEs, CAPECs, or CVEs.
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 this is a general feed for recent vulnerabilities, but it does not explicitly state when to use this versus the sibling tools (e.g., 'for a specific CVE use get_cve'). Guidance is only implicit, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v2.2.0- First observed
browse_vendor - First observed
get_capec - First observed
get_cve - First observed
get_cwe - First observed
get_recent_vulnerabilities
TDQS
Scored across 5 tools
Each tool targets a distinct resource: browsing by vendor, retrieving CWE/CAPEC by ID, listing recent vulnerabilities, and fetching specific CVE details. No overlap or ambiguity between tool purposes.
All tool names follow a consistent verb_noun pattern using snake_case: browse_vendor, get_cwe, get_capec, get_recent_vulnerabilities, get_cve. The verbs (browse, get) and noun targets are uniform, making the API predictable.
Five tools is well-scoped for a read-only CVE search server. Each tool serves a clear purpose without redundancy, and the count falls comfortably within the ideal 3-15 range.
The tool surface covers core workflows: fetching individual CVEs, browsing by vendor, accessing CWE/CAPEC reference data, and retrieving recent vulnerabilities. Minor gaps exist, such as the lack of a general keyword search or a way to list CVEs by CWE ID, but these are non-essential for the server's stated purpose.
Maintenance
Related MCP Connectors
ZEN SecDB MCP server for CVE intelligence, CVSS/EPSS scoring, advisories, SSVC, and package audits.
CIRCL Vulnerability-Lookup — aggregated vulnerability records
MCP server for ScanMalware.com URL scanning, malware detection, and analysis.
Cybersecurity MCP server for URL scanning, threat intelligence, and domain reputation.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol (MCP) server for querying the CVE-Search API. This server provides comprehensive access to CVE-Search, browse vendor and product、get CVE per CVE-ID、get the last updated CVEs.6107MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server implementation to query the NIST National Vulnerability Database (NVD) via its API.214MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that retrieves CVE information from the National Vulnerability Database, allowing AI models to access up-to-date vulnerability data.17Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for querying the NIST National Vulnerability Database (NVD) API, enabling search and retrieval of CVE details, temporal context, and KEV catalog entries.14MIT