mcpField
M
mitre-cwe-mcp-server

mitre-cwe-mcp-server

远程服务
github.com/cyanheads安全14 天前更新
代码仓库

关于 mitre-cwe-mcp-server

面向安全研究人员和开发者的 MCP 服务,用于探索 MITRE CWE 弱点与 CAPEC 攻击模式,并查询缓解措施、代码示例及目录映射。

主要功能

  1. 01搜索 CWE 弱点和 CAPEC 模式
  2. 02获取缓解措施与代码示例
  3. 03浏览视图和 CWE 层级
  4. 04查看 CWE、CAPEC 与 ATT&CK 映射

适用场景

  1. 01调查软件弱点及其缓解措施
  2. 02查找与 CWE 关联的攻击模式
  3. 03浏览 CWE 视图中的弱点成员

MCP 相关

通过 STDIO 或 Streamable HTTP 向 MCP 客户端提供七种工具,支持目录搜索、详情查询和层级遍历。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mitre-cwe.caseyjhand.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npm@cyanheads/mitre-cwe-mcp-server0.1.4

工具

详细介绍

@cyanheads/mitre-cwe-mcp-server

通过 MCP 探索 MITRE CWE 弱点和 CAPEC 攻击模式、缓解措施、代码示例及映射。支持 STDIO 或 Streamable HTTP。

7 个工具

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

公开托管服务: https://mitre-cwe.caseyjhand.com/mcp


概述

MITRE 的 CWE 和 CAPEC 目录将软件和硬件弱点与攻击机制关联起来。搜索根本原因、查看缓解措施和代码示例、浏览 CWE 视图和实时层级结构,并追踪已记录的 CWE → CAPEC → ATT&CK 映射。

工具
工具描述
cwe_list_reference了解视图、筛选词汇、工作流指南和目录刷新状态
cwe_get_weakness获取 CWE 弱点或类别,包括选定章节和完整示例页面
cwe_get_attack_pattern获取 CAPEC 攻击模式、类别和视图:前提条件、执行步骤、缓解措施、成员及已记录的映射
cwe_search_weaknesses按文本、平台、抽象级别、后果、状态、映射使用情况、视图、分类映射(CERT C ARR30-C)或观测示例 CVE 搜索弱点
cwe_search_attack_patterns按文本、CWE 或 ATT&CK 映射、抽象级别、严重性或可能性搜索 CAPEC
cwe_get_view按发布顺序读取 CWE 视图的元数据和直接成员
cwe_get_hierarchy在视图范围内遍历实时 CWE 父项、子项、祖先项或后代项

能力参考

cwe_list_reference 工具
  • topic:views、abstraction_levels、mitigation_phases、platforms、relationship_natures、filter_values、workflow 或 versions;可选的 filter 会对标签应用全词元筛选,并遵循下文的词首与前缀边界规则(script 可找到 JavaScript)
  • views 会列出每个 CWE 视图及其直接成员数量,以及通过筛选器定义的视图的 filterDefinition
  • filter_values 会列出弱点状态、映射用法和分类法名称,以及后果影响、CAPEC 状态、严重程度和可能性
  • 列表使用 limit 分页(默认值为 20,最大值为 100),并提供 pagination.nextCursor;versions 还会列出每个已加载目录的版本、日期、数量和刷新错误

cwe_get_weakness 工具
  • 1–200 个 CWE ID(CWE-79、CWE79、cwe 079、CWE_79 或 79);每次调用最多处理 20 个不同条目,其余条目会在 deferredIds 中返回。格式错误的条目会出现在 notFound 中,不会导致批处理失败;只有包含非空白控制字符的条目,或长度超过 150 个字符的非 ID 条目,才会导致调用被拒绝
  • sections:summary、consequences、mitigations、relations、examples、detection、observed、platforms、mappings、notes(默认:前四项);[] 会返回大纲
  • summary 包含记录的替代术语(XSS)、序数(Primary、Resultant、Indirect)和背景详情;platforms 会补充功能领域和受影响资源;relations 会列出每个相关弱点。notes 会返回 MITRE 为弱点和类别记录的所有注释,例如关系、维护、术语和研究空白注释
  • entries[].kind 为 full、partial(未能放入响应预算的默认部分会在 outline 中列出,并附上其大小;notice 会根据完整响应大小对重新调用进行分组,且仅在 examples 分组中保留示例参数)或 outline;notFound[].reason 为 not_found、wrong_type(属于 cwe_get_view 的视图,或其他目录中带前缀的 ID)或 invalid_id(不是 ID 的条目,会去除首尾空白后回显;NVD-CWE-noinfo 和 NVD-CWE-Other 会提供专门的指引)。类别会在此处解析
  • 示例可通过 exampleLanguage 筛选,并使用 exampleOffset 分页(默认值为 0)、exampleLimit 分页(默认值为 3,无固定上限),以及 examplePage.nextOffset。省略 sections 时,将这三个参数中的任意一个设为非默认值,都会在默认部分之后添加 examples(若无法放入响应,会列出大纲及其页面大小,并提供重新调用指引);显式指定的 sections 若不含 examples,则会忽略这些参数,且 guidance 会给出添加 examples 的重新调用方法。每个示例都会保留其按顺序排列的文字和代码,代码的排版方式与 MITRE 页面一致(每级缩进 4 个空格),并在 references 中列出其引用的参考资料

cwe_get_attack_pattern 工具
  • 1–200 个 CAPEC ID(CAPEC-66、CAPEC66、capec_066 或 66),包括 Deprecated 和 Obsolete;每次调用最多处理 20 个不同条目,其余 ID 会放在 deferredIds 中
  • sections:summary、prerequisites、execution、skills、consequences、mitigations、examples、relations、mappings、notes(默认值:攻击模式为 summary、prerequisites、execution、mitigations 和 mappings;类别和视图为 summary 和 relations);[] 返回大纲
  • entries[].type 为 attack_pattern、category 或 view,只有攻击模式才包含 abstraction。类别或视图的 relations 会按来源顺序列出其直接 members;对于筛选器定义的视图,则列出其来源 XPath,作为 filterDefinition;其 mappings 和 notes 包含记录的分类映射、引用和 MITRE 注释
  • 从视图 CAPEC-1000(攻击机制)或 CAPEC-3000(攻击领域)开始,按类别浏览攻击模式
  • entries[].kind 和 notFound 的约定与 cwe_get_weakness 相同;CAPEC 攻击模式、类别和视图都可在此解析,因此 wrong_type 仅标记带前缀的 CWE ID。映射会保留记录的 CWE 和 ATT&CK ID

cwe_search_weaknesses 工具
  • 可选的 filter 会对名称、MITRE 记录的替代术语(XSS、ReDoS、UAF)、描述和扩展描述执行全词元匹配;还可指定精确匹配的 language、technology、abstraction、consequenceImpact、status、mappingUsage、taxonomyName、taxonomyEntryId、observedCveId 和 viewId;不使用筛选条件时会浏览目录
  • filter 中的词元会匹配单词开头、_ 后的位置或驼峰命名的分界处(dos 可找到 ReDoS)。至少包含 4 个 Unicode 字母的词元,还会匹配单词开头恰好带有一个 un 或 mis 前缀的情况(trusted 可找到 untrusted;config 可找到 misconfiguration)。前缀不会递归剥离;拼写巧合仍可能匹配。其他复合词按原样搜索:serialization 不会找到 CWE-502,deserialization 则会。以数字结尾的词元不会匹配后面紧接另一个数字的情况(79 会跳过 RFC 793)
  • 每个结果都包含 MITRE 的 mappingUsage,例如 Allowed、Allowed-with-Review 或 Prohibited,用于说明该条目是否可用于映射漏洞
  • taxonomyName(例如 CERT C Secure Coding 或 ISA/IEC 62443)和 taxonomyEntryId(例如 ARR30-C 或 A1,不区分大小写)可查找记录了分类映射的弱点;两者同时提供时,会匹配同一映射;observedCveId(例如 CVE-2021-44228)可查找 MITRE 将该 CVE 引用为已观察示例的弱点,而非 NVD 的 CVE 到 CWE 的分配结果。每个结果随后都会列出所有匹配的映射(matchedTaxonomyMappings)或已观察示例(matchedObservedExamples)
  • viewId 会包含同一视图中的成员闭包;对于筛选器定义的视图,则会包含其来源 XPath 筛选器所选出的弱点(CWE-658 C、CWE-702 Implementation 等)。不包含类别;默认包含所有状态
  • 排序优先级依次为:名称或单个替代术语中匹配所有词元、描述中匹配所有词元、其他匹配,最后按数字 ID 排序;预览包含首句,cwe_get_weakness 会在 summary 中返回这些术语。limit 默认为 20,最大为 100;使用 pagination.nextCursor 继续获取结果
cwe_search_attack_patterns 工具
  • 可选的全词元 filter,用于筛选名称、记录的备用术语(MITM)和描述;规则与 cwe_search_weaknesses 相同,采用词首匹配和有界前缀匹配;此外还支持 cweId、attackTechniqueId、abstraction、severity 和 likelihood。CWE 映射必须完全匹配,父级 ATT&CK 技术还会包含其记录的子技术
  • includeInactive(默认值为 false)会加入已弃用和已废弃的模式。排序优先级依次为:名称或单个备用术语中的所有词元、描述中的所有词元、其他匹配项、数字 ID;cwe_get_attack_pattern 会在 summary 中返回这些术语。limit 默认值为 20,最大值为 100;使用 pagination.nextCursor 继续获取

cwe_get_view 工具
  • 一个视图 id(来自主题为 views 的 cwe_list_reference);limit 默认值为 20,最大值为 100;使用 pagination.nextCursor 继续获取
  • 目标、受众、状态、筛选器定义、记录的备注,以及按发布顺序排列的直接 members。导航视图仅列出顶层成员;使用 cwe_get_hierarchy 可获取后代
  • 由筛选器定义的视图不列出成员:filterDefinition 是其来源 XPath,使用其 viewId 调用 cwe_search_weaknesses 会返回该筛选器选中的弱点。如果筛选器包含服务端不评估的部分,guidance 会对此作出说明,且该搜索不会返回任何结果,并会附带提示
  • found: false 会返回 not_found 或 wrong_type

cwe_get_hierarchy 工具
  • 一个 CWE id 和一个 direction:parents、children、ancestors 或 descendants;viewId 默认为 1000,或设为 all 以查询所有视图。primaryOnly 仅适用于祖先。父项和子项包含类别关系和视图关系,并与同一视图树的第一层相匹配
  • 按视图范围返回 nodes、从父项指向子项的 edges、found、retrievedAt 和 hierarchyFingerprint。空关系也视为成功;上游故障会作为错误返回,MITRE 暂时拒绝请求(HTTP 403)时,可在几分钟后重试。节点名称来自已加载的目录,可能滞后于实时 API
  • 总截止时间包含队列等待时间;超时会返回可重试的 hierarchy_timeout,而调用方取消请求则不可重试。源记录中的 relations 仍可通过 cwe_get_weakness 获取,但不能替代实时子项或后代
  • limit 默认值为 20,最多返回 100 条边;每页仅列出边所引用的节点,以及第一页中没有边的根节点。每次调用 pagination.nextCursor 都会重新获取遍历结果;invalid_cursor 表示拓扑结构或目录已更改,因此应从不带游标的请求重新开始

功能

基于 @cyanheads/mcp-ts-core:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),以及结构化日志记录和可选的 OpenTelemetry 跟踪。

MITRE 专属功能:

  • 无需 API 密钥。服务器接受请求前,会将两个 XML 目录加载到内存中。每次成功下载都会保存到缓存目录(CWE_CACHE_DIR),后续启动时会加载已保存的副本,不必等待 MITRE 响应,因此即使 MITRE 无法访问,重启也能正常运行。首次启动,或启动时没有可用的已保存副本,都需要从 MITRE 的 CWE 和 CAPEC 下载源获取数据
  • CWE 每 24 小时检查一次新版本,CAPEC 每周刷新一次;从缓存加载的目录会在启动后立即检查,如果检查失败,则会在 5、10、20、40 分钟后再次检查,之后每隔 60 分钟检查一次。刷新失败时会保留已加载的数据,并在 cwe_list_reference 的 versions 主题中显示;该主题还会报告每个目录来自缓存还是下载
  • MITRE 可能会对来自同一地址的突发请求拒绝服务,并在几分钟内返回 HTTP 403。目录下载、版本检查和层级查询会将其报告为暂时性、可重试的失败,不会立即重试
  • 层级查询会调用实时 CWE REST API,并保留多个父项和视图标识;搜索和详情则基于本地目录执行
  • MITRE 状态和缺失的章节会明确呈现。CAPEC 映射和执行流程并不完整:缺少映射不能证明不存在关联,也不能证明某个 ATT&CK ID 当前有效

便于 Agent 使用的输出:

  • 每个响应都包含溯源信息:目录版本和日期、加载时间、来源链接及归属信息
  • 两种输出形式合计有 24,000 字节的预算,包含补充数据。完整 ID、条目或边会延后到下一次调用;默认详情选择会省略无法纳入预算的完整章节,并列出这些章节以便重新调用;显式选择的内容会完整返回,单条记录或条目超出预算时会完整返回并附带提示
  • 通过 deferredIds、pagination.nextCursor 或 examplePage.nextOffset 继续获取结果;过期游标会返回 invalid_cursor,未知词汇会返回 unknown_filter,其消息会指出字段和值,并列出支持的值或相应的 cwe_list_reference 主题
  • CWE 和 CAPEC ID 输入可带可选前缀,大小写不限,前缀后可使用 -、_、空格或不加分隔符,并会移除前导零。ATT&CK 技术 ID 可采用 Tdddd 或 Tdddd.ddd,也可省略 T,且大小写不限(T1059、t1059.001、1059)。格式错误的单个 ID 会作为无效参数处理,错误消息会列出可接受的格式
  • content[] 和 structuredContent 包含相同的值,也包括有序的示例代码。目录中的说明文字和代码是参考数据,不是指令

开始使用

公共托管实例

可通过 https://mitre-cwe.caseyjhand.com/mcp 使用公共实例,无需安装。通过 Streamable HTTP 将任意 MCP 客户端指向该实例:

{
  "mcpServers": {
    "mitre-cwe-mcp-server": {
      "type": "streamable-http",
      "url": "https://mitre-cwe.caseyjhand.com/mcp"
    }
  }
}
自托管 / 本地运行

将以下内容添加到 MCP 客户端配置文件中。

{
  "mcpServers": {
    "mitre-cwe-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/mitre-cwe-mcp-server@latest"],
      "env": { "MCP_TRANSPORT_TYPE": "stdio", "MCP_LOG_LEVEL": "info" }
    }
  }
}

也可以使用 npx(无需 Bun):

{
  "mcpServers": {
    "mitre-cwe-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/mitre-cwe-mcp-server@latest"],
      "env": { "MCP_TRANSPORT_TYPE": "stdio", "MCP_LOG_LEVEL": "info" }
    }
  }
}

也可以使用 Docker:

{
  "mcpServers": {
    "mitre-cwe-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "-v", "mitre-cwe-cache:/usr/src/app/.cache", "ghcr.io/cyanheads/mitre-cwe-mcp-server:latest"]
    }
  }
}

命名卷会在使用 --rm 的容器之间保留目录缓存,因此后续启动时无需连接 MITRE。

对于 Streamable HTTP,请设置传输方式并启动服务器:

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp after both catalogs load
先决条件
  • Bun v1.4.0 或更高版本(或 Node.js v24+)。
  • 可通过出站 HTTPS 访问 cwe.mitre.org 和 capec.mitre.org,以下载目录(至少需要访问一次来填充缓存);还需访问 cwe-api.mitre.org,用于版本检查和实时层级查询。
安装
  1. 克隆代码仓库:
git clone https://github.com/cyanheads/mitre-cwe-mcp-server.git
  1. 进入目录:
cd mitre-cwe-mcp-server
  1. 安装依赖:
bun install
  1. 配置环境:
cp .env.example .env
# edit .env for optional transport, authentication, and logging settings

配置

无需设置环境变量。目录源、刷新间隔和响应限制均为固定值;框架存储设置不会持久化这些目录。

变量说明默认值
CWE_CACHE_DIR保存最近一次成功下载的 CWE 和 CAPEC 文件的目录(cwec_latest.xml.zip、capec_latest.xml,每个文件均附有一个 .json 记录)。相对路径相对于工作目录解析。如果 MITRE 无法访问,可将下载的文件以这些名称复制到空缓存中。用户缓存目录(~/Library/Caches、%LOCALAPPDATA% 或 $XDG_CACHE_HOME / ~/.cache)下的 mitre-cwe-mcp-server;Docker 中为 /usr/src/app/.cache
MCP_TRANSPORT_TYPE传输方式:stdio 或 http。stdio
MCP_HTTP_PORTHTTP 服务端口。3010
MCP_HTTP_HOSTHTTP 绑定地址。127.0.0.1
MCP_SESSION_MODEHTTP 会话模式:stateless、stateful 或 auto。stateless
MCP_AUTH_MODE身份验证:none、jwt 或 oauth。none
MCP_LOG_LEVEL日志级别(debug、info、warning、error 等)。info
LOGS_DIR日志文件目录(仅限 Node.js)。<app-root>/logs
STORAGE_PROVIDER_TYPE存储后端:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。in-memory
OTEL_ENABLED启用 OpenTelemetry。false

完整的可选覆盖项列表请参阅 .env.example。

运行服务

本地开发
  • 构建并运行生产版本:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:http
    # or
    bun run start:stdio
    
  • 运行检查和测试:

    bun run devcheck  # Lints, formats, type-checks, and more
    bun run test      # Runs the test suite
    

项目结构

目录用途
src/mcp-server/tools/definitions七个只读工具。
src/mcp-server/tools共享输出架构、分节投影、预算和分页。
src/config服务环境配置(CWE_CACHE_DIR)。
src/services/catalog目录获取、最近一次成功缓存、XML 规范化、索引、刷新生命周期和实时层级结构。
tests/单元测试和集成测试,结构与 src/ 对应。
docs/设计文档和生成的目录参考。

开发指南

开发指南和架构规则请参阅 CLAUDE.md。简要说明:

  • 处理程序抛出异常,框架负责捕获——工具逻辑中不要使用 try/catch
  • 使用 ctx.log 记录日志,使用 ctx.state 存储数据
  • 在 src/index.ts 的 createApp() 数组中注册新工具和资源
  • 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出架构;绝不伪造缺失字段

贡献

欢迎提交问题。提交前请运行检查和测试:

bun run devcheck
bun run test

许可证

本项目采用 Apache 2.0 许可证授权。详情请参阅 LICENSE 文件。

CWE 数据:Copyright © 2006–2026, The MITRE Corporation。CAPEC 数据:Copyright © 2007–2026, The MITRE Corporation。CWE 和 CAPEC 是 MITRE 的商标;其数据许可证和免责声明转载于 THIRD_PARTY_NOTICES.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。