关于 mitre-cwe-mcp-server
面向安全研究人员和开发者的 MCP 服务,用于探索 MITRE CWE 弱点与 CAPEC 攻击模式,并查询缓解措施、代码示例及目录映射。
主要功能
- 01搜索 CWE 弱点和 CAPEC 模式
- 02获取缓解措施与代码示例
- 03浏览视图和 CWE 层级
- 04查看 CWE、CAPEC 与 ATT&CK 映射
适用场景
- 01调查软件弱点及其缓解措施
- 02查找与 CWE 关联的攻击模式
- 03浏览 CWE 视图中的弱点成员
MCP 相关
通过 STDIO 或 Streamable HTTP 向 MCP 客户端提供七种工具,支持目录搜索、详情查询和层级遍历。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mitre-cwe.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-mitre-cwe https://mitre-cwe.caseyjhand.com/mcp{"mcpServers":{"cyanheads-mitre-cwe":{"type":"http","url":"https://mitre-cwe.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-mitre-cwe":{"type":"http","url":"https://mitre-cwe.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-mitre-cwe":{"type":"http","url":"https://mitre-cwe.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-mitre-cwe":{"serverUrl":"https://mitre-cwe.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
@cyanheads/mitre-cwe-mcp-server
通过 MCP 探索 MITRE CWE 弱点和 CAPEC 攻击模式、缓解措施、代码示例及映射。支持 STDIO 或 Streamable HTTP。
概述
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 视图及其直接成员数量,以及通过筛选器定义的视图的filterDefinitionfilter_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,用于版本检查和实时层级查询。
安装
- 克隆代码仓库:
git clone https://github.com/cyanheads/mitre-cwe-mcp-server.git
- 进入目录:
cd mitre-cwe-mcp-server
- 安装依赖:
bun install
- 配置环境:
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_PORT | HTTP 服务端口。 | 3010 |
MCP_HTTP_HOST | HTTP 绑定地址。 | 127.0.0.1 |
MCP_SESSION_MODE | HTTP 会话模式: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。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。