Skip to main content
Glama

CWE Search MCP

A Python-based interface to MITRE's Common Weakness Enumeration (CWE) database via the official API, enabling seamless vulnerability research and integration with MCP-compatible systems.

Python Version License: MIT CWE API fastmcp uv

Twitter LinkedIn GitHub

Overview

The CWE Search MCP provides a robust Python implementation for interacting with MITRE's Common Weakness Enumeration (CWE) database through its official API. Designed for security researchers, developers, and vulnerability analysts, this mcp enables efficient querying of vulnerability information and integrates seamlessly with MCP-compatible systems using stdio transport.

This solution solves the problem of fragmented vulnerability research by providing a unified interface to:

  • Retrieve detailed CWE information programmatically

  • Explore vulnerability relationships and hierarchies

  • Integrate CWE data into security tooling and workflows

  • Automate vulnerability analysis and reporting

Related MCP server: CVE-Search MCP Server

Key Features

  • Comprehensive Vulnerability Lookup: Retrieve detailed information by CWE ID

  • Intelligent Search: Find vulnerabilities by keyword across descriptions

  • Taxonomy Navigation: Explore CWE categories and views

  • Relationship Mapping:

    • Parent/child vulnerability relationships

    • Full ancestor/descendant hierarchies

    • View-filtered relationship analysis

  • Automatic Normalization: Handles CWE IDs with or without "CWE-" prefix

  • Zero Configuration: No authentication required for MITRE's public API

  • MCP Integration: Ready for stdio transport with MCP-compatible systems

  • Batch Processing: Retrieve multiple vulnerabilities in single requests

Implemented API Endpoints

The mcp implements the following MITRE CWE API endpoints:

Endpoint

Description

/cwe/version

Get CWE content version information

/cwe/{id}

Retrieve metadata for specified CWE ID(s)

/weakness/{id(s)}

Get weaknesses by ID(s) or all weaknesses

/cwe/category/{id(s)}

Retrieve categories by ID(s) or all categories

/cwe/view/{id(s)}

Get views by ID(s) or all views

/cwe/{id}/parents

Get parents of a weakness (view-filtered)

/cwe/{id}/children

Get children of a weakness (view-filtered)

/cwe/{id}/ancestors

Get ancestors of a weakness (view-filtered)

/cwe/{id}/descendants

Get descendants of a weakness (view-filtered)

Getting Started

Prerequisites

  • Python 3.10+

  • uv package manager

Installation

  1. Clone the repository:

    git clone https://github.com/Bilel-Eljaamii/cwe-search_mcp.git
    cd cwe-search_mcp
  2. Install dependencies:

    pip install requests fast-mcp

Usage Guide

Standalone Execution

Run the mcp as a standalone module:

DANGEROUSLY_OMIT_AUTH=true mcp dev main.py

Output:

[06/28/25 12:46:09] INFO     Starting cwe-search_mcp
Starting MCP inspector...
āš™ Proxy server listening on 127.0.0.1:6277
⚠  WARNING: Authentication is disabled. This is not recommended.
New STDIO connection request
STDIO transport: command=/usr/bin/uv, args=run,--with,mcp,mcp,run,main.py
Created server transport
Created client transport
šŸ” MCP Inspec

assets/img/demoMCPdev.png

MCP Client Integration

To integrate the CWE Search Service with your MCP client:

  1. Locate Configuration: Open your MCP client configuration file

  2. Update Path: Set CWE_SEARCH_SERVICE_PATH to the absolute path of your local installation directory

  3. Add to your mcp client configuration file, modify the 3."CWE_SEARCH_SERVICE_PATH" as you self dir.

"cwe-search_mcp": {
  "autoApprove": [],
  "disabled": false,
  "timeout": 60,
  "type": "stdio",
  "command": "uv",
  "args": [
    "--directory",
    "CWE_SEARCH_SERVICE_PATH",
    "run",
    "main.py"
  ]
}

AnythingLLM

assets/img/AnythingLLM_integraton.png

Cline / VSCode

assets/img/Cline_integraton.png

Key Notes

  • Authentication: No credentials required - MITRE's CWE API is publicly accessible

  • Input Normalization: MCP automatically handles CWE ID formats:

    • 79 → Normalized to 79

    • CWE-79 → Normalized to 79

    • cwe79 → Normalized to 79

  • Batch Processing: Comma-separated IDs supported for most endpoints

  • all Keyword: Retrieve all items for weakness, category, and view endpoints

Dependencies

  • requests - HTTP library for API communication

  • fastmcp - The fast, Pythonic way to build MCP servers and clients.

# Using uv (recommended)
uv init
uv venv
source ./venv/bin/activate
uv pip install "mcp[cli]" "requests"

Contributing

We welcome contributions! Please follow these steps:

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/your-feature)

  3. Commit your changes (git commit -am 'Add some feature')

  4. Push to the branch (git push origin feature/your-feature)

  5. Open a pull request

Please ensure your code follows PEP 8 style guidelines and includes appropriate tests.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgements & Resources


Empower your vulnerability research with direct access to MITRE's CWE database through this lightweight, integration-ready MCP. Contribute, customize, and enhance your security workflows today!

Available Tools

9 tools
get_cwe_ancestorsA

Get ancestors of a specified CWE weakness, filtered by view and primary flag

Args: cwe_id: CWE ID (with/without 'CWE-') view: Optional view identifier to filter relationships primary: Limit ancestors to include only primary parents

Returns: Dictionary with "Ancestors" array or error information

Inputs: cwe_id (required), view, primary. Returns: result

get_cwe_categoryA

Get CWE categories by ID(s) or all categories

Args: ids: Comma-separated category IDs (with/without 'CWE-') or "all" Examples: "123", "CWE-456,789", "all"

Returns: Dictionary with "Categories" array or error information

Inputs: ids (required). Returns: result

get_cwe_childrenA

Get children of a specified CWE weakness, filtered by view

Args: cwe_id: CWE ID (with/without 'CWE-') view: Optional view identifier to filter relationships

Returns: Dictionary with "Children" array or error information

Inputs: cwe_id (required), view. Returns: result

get_cwe_content_versionA

Get CWE content version information Calls endpoint: GET /version

Inputs: no named parameters. Returns: result

get_cwe_descendantsA

Get descendants of a specified CWE weakness, filtered by view

Args: cwe_id: CWE ID (with/without 'CWE-') view: Optional view identifier to filter relationships

Returns: Dictionary with "Descendants" array or error information

Inputs: cwe_id (required), view. Returns: result

get_cwe_infoA

Get metadata for specified CWE ID(s)

Args: ids: Comma-separated list of CWE IDs (with or without 'CWE-' prefix) Example: "79" or "CWE-79" or "79,89,CWE-22"

Returns: Dictionary with CWE metadata or error information

Inputs: ids (required). Returns: result

get_cwe_parentsA

Get parents of a specified CWE weakness, filtered by view

Args: cwe_id: CWE ID (with/without 'CWE-') view: Optional view identifier to filter relationships

Returns: Dictionary with "Parents" array or error information

Inputs: cwe_id (required), view. Returns: result

get_cwe_viewA

Get CWE views by ID(s) or all views

Args: ids: Comma-separated view IDs (with/without 'CWE-') or "all" Examples: "1000", "CWE-1010,1020", "all"

Returns: Dictionary with "Views" array or error information

Inputs: ids (required). Returns: result

get_cwe_weaknessA

Get CWE weaknesses by ID(s) or all weaknesses

Args: ids: Comma-separated CWE IDs or "all" to retrieve all weaknesses Examples: "79", "CWE-89,125", "all"

Returns: Dictionary with "Weaknesses" array or error information

Inputs: ids (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 9 tools

    Disambiguation4/5

    Each tool targets a distinct aspect of CWE data: version, metadata, weakness, category, view, and specific relationship directions (parents, children, descendants, ancestors). There is minor overlap between get_cwe_info and get_cwe_weakness, but their scopes differ (metadata vs full weakness details).

    Naming Consistency5/5

    All tools consistently use the 'get_cwe_' prefix followed by a specific noun or relationship, forming a clear and predictable verb_noun pattern. The naming convention is uniform across the entire set.

    Tool Count5/5

    With 9 tools, the server is well-scoped for a CWE lookup and traversal service. Each tool serves a clear purpose without redundancy or bloat, covering all major CWE resource types and relationship queries.

    Completeness4/5

    The server provides comprehensive coverage for CWE retrieval: metadata, weaknesses, categories, views, and all four relationship directions (parents, children, ancestors, descendants). The main gap is the lack of a keyword-based search, but the core ID- and relationship-based workflows are fully supported.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables querying MITRE Common Weakness Enumeration (CWE) data, including weaknesses, categories, views, and their relationships, through natural language or direct tools.
      308 npm
      MIT
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables querying the CVE-Search API to browse vendors and their products, retrieve vulnerabilities per vendor/product, look up specific CVE IDs, fetch the latest 30 CVEs with CAPEC, CWE and CPE expansions, and check database metadata. This gives MCP clients conversational access to public vulnerability data.
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables querying the CVE-Search API to browse vendors and products, retrieve vulnerabilities by vendor/product or CVE ID, fetch the latest CVEs with CAPEC/CWE/CPE details, and check database update status via MCP tools.
      -
    • F
      license
      Not graded
      quality
      A
      maintenance
      Enables querying the CVE-Search API to browse vendors, list products for a vendor, retrieve vulnerabilities for a vendor and product, fetch individual CVE records, get the latest CVEs with CAPEC/CWE/CPE expansions, and inspect current database version information. This gives MCP clients direct, structured access to public vulnerability data.
      -