关于 MITRE ATT&CK
MITRE ATT&CK 是面向安全分析师、威胁猎手和开发者的 MCP 服务,可结构化访问 ATT&CK 数据。它覆盖 Enterprise、Mobile 和 ICS 领域,提供索引查询、缓存以及 stdio 或 HTTP 传输。
主要功能
- 01覆盖 Enterprise、Mobile 和 ICS
- 02查询技术、战术、组织与软件
- 03查询缓解措施及关联关系
- 04缓存数据并按条件刷新
- 05支持 stdio 和 HTTP 传输
适用场景
- 01查询某威胁组织使用的技术
- 02查找与某战术相关的技术
- 03查看针对技术的缓解措施
- 04在自动化工作流中查询 ATT&CK 数据
MCP 相关
该服务通过工具向 MCP 客户端提供 MITRE ATT&CK 数据,包括技术、战术、组织、软件和缓解措施查询。支持 stdio 和 HTTP 连接。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
mitre-mcp:MITRE ATT&CK MCP 服务
面向生产环境的模型上下文协议(MCP)服务,可向大模型、AI 助手和自动化工作流提供 MITRE ATT&CK® 框架。基于官方 MCP Python SDK 和 mitreattack-python 库构建,可安全、高性能地访问对手的战术、技术、组织、软件和缓解措施。
已在 MCP Registry 上架(搜索 io.github.luongnv89/mitre-mcp)。
亮点
- 面向大模型的体验 – 与 Claude、Windsurf、Cursor 及任何兼容 MCP 的客户端无缝集成
- 默认安全 – 验证输入、校验 TLS、检查磁盘空间并进行结构化错误处理
- 高性能 – 使用预构建索引实现 O(1) 技术查询(比扫描快 80-95%)
- 灵活部署 – 可通过 stdio 为本地客户端提供服务,也可运行 HTTP 服务以支持 Web 集成
目录
功能特性
- 全面覆盖 MITRE ATT&CK - 涵盖所有技术、战术、组织、软件和缓解措施
- 支持多个领域 - Enterprise、Mobile 和 ICS ATT&CK 领域
- 智能缓存 - 以用户为单位的原子缓存,支持条件刷新、后台刷新以提供过期数据,以及可配置的过期时间(默认:14 天)
- 快速启动 - Enterprise 域会在启动时加载;Mobile 和 ICS 域会在首次使用时延迟加载
- 性能优化 - 使用预构建索引实现 O(1) 查找(速度提升 80-95%)
- 双传输模式 - 为本地客户端提供 stdio,为 Web 集成提供 HTTP
- 启用 CORS 的 HTTP 服务 - 支持异步通知和跨域请求
- 全面测试 - pytest 测试套件,并强制要求达到覆盖率门槛
- 提交前质量检查 - 自动格式化、代码检查、类型检查和安全扫描
- 输入验证 - 默认安全,输入经过验证,响应经过清理
- 编程 API - Python 和 Node.js 客户端(请参阅 API-INTEGRATION.md)
可用的 MCP 工具
| 工具名称 | 描述 |
|---|---|
get_techniques | 列出所有技术,并提供筛选选项 |
get_technique_by_id | 按 ID 查找特定技术(例如,T1055) |
get_techniques_by_tactic | 获取特定战术对应的技术(例如,persistence) |
get_tactics | 列出所有战术类别 |
get_groups | 列出所有威胁行为者组织 |
get_techniques_used_by_group | 获取特定组织使用的技术(例如,APT29) |
get_software | 列出恶意软件和工具,并提供筛选功能 |
get_mitigations | 列出所有安全缓解措施 |
get_techniques_mitigated_by_mitigation | 获取特定缓解措施所应对的技术 |
所有列表和关系工具都接受 limit/offset 分页参数
(默认页面大小为 20,最大为 200 — 请参阅 CONTRIBUTING.md 中的 MITRE_DEFAULT_PAGE_SIZE 和
MITRE_MAX_PAGE_SIZE),并返回一个 pagination
块(total、offset、limit、has_more)。
快速开始
安装
- 创建并激活虚拟环境:
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate.bat
- 从 PyPI 安装:
pip install mitre-mcp
- 验证安装:
mitre-mcp --help
HTTP 模式(推荐)
启动服务:
mitre-mcp --http
预期输出:
2025-11-17 22:40:10,991 - mitre_mcp.mitre_mcp_server - INFO - Starting MITRE ATT&CK MCP Server (HTTP mode on localhost:8000)
======================================================================
MITRE ATT&CK MCP Server is ready (Streamable HTTP mode)
Server URL: http://localhost:8000
MCP Endpoint: http://localhost:8000/mcp
Add this to your MCP client configuration:
{
"mcpServers": {
"mitreattack": {
"url": "http://localhost:8000/mcp"
}
}
}
======================================================================
配置 MCP 客户端:
将此 JSON 添加到客户端的配置文件中:
{
"mcpServers": {
"mitreattack": {
"url": "http://localhost:8000/mcp"
}
}
}
配置文件位置:
- macOS(Claude Desktop):
~/Library/Application Support/Claude/claude_desktop_config.json - Windows(Claude Desktop):
%APPDATA%\Claude\claude_desktop_config.json - Linux(Claude Desktop):
~/.config/Claude/claude_desktop_config.json - VSCode:在 MCP 扩展设置中配置
自定义主机和端口:
mitre-mcp --http --host 0.0.0.0 --port 8080
然后在客户端配置中使用 http://your-server-ip:8080/mcp。
安全 — 默认情况下,绑定到非环回地址时无需身份验证。 绑定
--host 0.0.0.0(或任何非环回地址)会将 MCP 端点暴露给整个网络:数据是公开的,但该端点 可被用于消耗大量 CPU 和内存。请设置MITRE_HTTP_AUTH_TOKEN, 以要求每个请求都携带Authorization: Bearer <token>:MITRE_HTTP_AUTH_TOKEN=$(openssl rand -hex 32) mitre-mcp --http --host 0.0.0.0 --port 8080或在仅绑定到环回地址的服务前放置一个需要身份验证的反向代理 — nginx 示例(TLS + 基本身份验证 →
127.0.0.1:8000):server { listen 443 ssl; server_name mcp.example.com; ssl_certificate /etc/nginx/certs/mcp.example.com.pem; ssl_certificate_key /etc/nginx/certs/mcp.example.com.key; location / { auth_basic "mitre-mcp"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; } }如果绑定到非环回主机时未设置
MITRE_HTTP_AUTH_TOKEN,服务会在启动时记录警告。
为什么使用 HTTP 模式?
- 多个客户端可同时连接
- 并发和异步支持更好
- 使用 HTTP 工具更容易调试
- 支持 Web 客户端的 CORS
- 无需配置路径
stdio 模式(替代方案)
适用于需要 stdio 传输的纯本地客户端:
mitre-mcp
客户端配置:
{
"mcpServers": {
"mitreattack": {
"command": "/absolute/path/to/.venv/bin/python",
"args": ["-m", "mitre_mcp.mitre_mcp_server"]
}
}
}
**注意:**请使用绝对路径。对于大多数使用场景,推荐使用 HTTP 模式。
强制下载数据
强制重新下载 MITRE ATT&CK 数据:
mitre-mcp --http --force-download
示例截图
VSCode 配置:

工具调用:

结果:

Web 前端
React 聊天界面位于 frontend/。托管版本见
https://montimage.github.io/mitre-mcp/。此公共 HTTPS 页面可调用
云端大模型提供商(Gemini、OpenRouter)。它无法访问本机上的任何内容 ——
包括 localhost:8000 上的 mitre-mcp、Ollama、LM Studio,或
任何其他环回端点。浏览器会阻止公共网站访问环回地址空间(如果它将
MCP URL 升级为 https://localhost:8000/mcp,会出现
net::ERR_SSL_PROTOCOL_ERROR;访问
http://localhost:…/v1/models 时会出现 CORS / 私有网络错误)。
如果 MCP 服务或大模型运行在你的计算机上,请使用本地 UI。
本地设置(MCP 服务 + 聊天 UI)
在两个终端中,从本仓库的克隆目录开始操作。
1. 安装并启动 MCP 服务(Python >= 3.11):
uv sync --locked --extra dev
source .venv/bin/activate
mitre-mcp --http
等待出现 MCP Endpoint: http://localhost:8000/mcp。首次启动时,
会将 ATT&CK 数据下载到 ~/.cache/mitre-mcp。
2. 启动聊天 UI(Node 24):
cd frontend
npm ci
npm run dev
打开 http://localhost:5173/ — 不要打开 GitHub Pages URL。
3. 设置(聊天标题栏中的齿轮图标):
| 设置 | 本地值 |
|---|---|
| MCP 主机 / 端口 | localhost / 8000(开发代理会将 /mcp 转发到服务) |
| LLM 提供商 | Ollama、Gemini、OpenRouter 或 OpenAI-compatible |
对于本地 OpenAI-compatible 服务(LM Studio、llama.cpp、vLLM 等):
- 提供商:OpenAI-compatible
- 端点 URL:
http://localhost:<port>/v1(例如:http://localhost:20128/v1) - 模型:端点在
/v1/models中列出的某个 ID - API 密钥:留空,除非该服务要求填写
端点必须允许来自 http://localhost:5173 的 CORS。如果 Ollama
未运行,请勿选中 Ollama — 默认探测会访问
localhost:11434,且 Vite 会记录 http proxy error: /api/tags。
更多详情,请参阅 frontend/README.md。
文档
我们提供三份全面指南,适用于不同的使用场景:
1. 入门指南
Beginner-Playbook.md - 面向刚开始接触 MITRE ATT&CK 或网络安全的读者
适用于:
- 非技术用户
- 安全意识培训
- 基础威胁情报
- 通用网络安全教育
2. 高级手册
Playbook.md - 面向使用 MCP 客户端的安全专业人员
适用于:
- 安全分析师
- 威胁狩猎人员
- 事件响应人员
- 安全工程师
包含 10 个可直接使用的场景:
- 威胁情报
- 检测工程
- 威胁狩猎
- 红队演练
- 安全评估
- 事件响应
- 安全运营
- 安全培训
- 供应商评估
- 风险管理
3. API 集成指南
API-INTEGRATION.md - 面向构建自动化和自定义集成的开发者
适用于:
- 后端开发者
- 自动化工程师
- 数据管道开发者
- 自定义工具项目
包含:
- 完整的 Python 和 Node.js 客户端实现
- 协议要求和示例
- 测试和调试工具
- 常见集成模式
配置
环境变量
在启动 mitre-mcp 前设置,以自定义行为:
| 变量 | 默认值 | 用途 |
|---|---|---|
MITRE_ENTERPRISE_URL、MITRE_MOBILE_URL、MITRE_ICS_URL | 官方 MITRE CTI GitHub URL | 覆盖 ATT&CK 数据包位置,或指向内部镜像 |
MITRE_DATA_DIR | ~/.cache/mitre-mcp | 将缓存的数据包存储在自定义目录中 |
MITRE_DOWNLOAD_TIMEOUT | 120 | 下载数据包时的 HTTP 超时时间(秒) |
MITRE_CACHE_EXPIRY_DAYS | 14 | 刷新缓存数据前允许的最长时间 |
MITRE_REQUIRED_SPACE_MB | 200 | 下载前检查的磁盘空间阈值 |
MITRE_DEFAULT_PAGE_SIZE / MITRE_MAX_PAGE_SIZE | 20 / 200 | 列表工具返回记录的默认数量和最大数量 |
MITRE_MAX_DESC_LENGTH | 500 | 响应中截断后的描述长度 |
MITRE_LOG_LEVEL | INFO | 日志详细程度(DEBUG、INFO、WARNING 等) |
MITRE_CORS_ORIGINS | localhost 来源 | HTTP 模式允许的 CORS 来源(以逗号分隔的列表;* 表示明确选择允许所有来源) |
MITRE_HTTP_AUTH_TOKEN | 未设置(无身份验证) | 设置后,每个 HTTP 请求都必须携带 Bearer 令牌;建议用于绑定到非回环地址的情况 |
若要让托管式 UI(例如 Netlify 部署)跨域调用服务,请将 MITRE_CORS_ORIGINS 设置为其来源,例如 MITRE_CORS_ORIGINS="https://mitre-mcp.netlify.app,http://localhost:5173"。任何 CORS 配置都不允许使用凭据。
数据缓存
服务会自动缓存 MITRE ATT&CK 数据,以提升性能:
- 首次运行时,下载数据并将其存储在每位用户的缓存目录中
(默认为
$XDG_CACHE_HOME/mitre-mcp或~/.cache/mitre-mcp) - 后续运行时,如果缓存数据的时间不足 14 天,则使用缓存数据
- 自动刷新超过 14 天的数据,并使用条件请求——收到
304 Not Modified响应时会复用缓存的数据包。 过期但仍存在的数据会立即提供,同时在后台运行刷新;启动过程不会因此受阻,刷新失败时则保留现有缓存。 - 缓存文件以原子方式写入(临时文件 + 重命名),因此下载失败不会损坏有效缓存
- 启动时只解析 enterprise 域;mobile 和 ICS 数据包会在首次使用时延迟加载,因此未查询这些数据时,冷启动仍然很快
- 使用
--force-download强制重新下载
性能
| 场景 | 提升 | 说明 |
|---|---|---|
| 企业技术查询 | 快 80-95% | 为组、缓解措施和技术预构建 O(1) 索引 |
| ATT&CK 数据下载 | 快 20-40% | 通过 TLS 会话复用实现 HTTP 连接池 |
| 热缓存启动 | <2s | 复用缓存包,实现大模型查询即时响应 |
基准测试环境:macOS 14 / Apple M3 Pro,Python 3.11。使用 MITRE_LOG_LEVEL=DEBUG 查看计时日志。
程序化 API
如需自动化、自定义集成和批处理,请参阅 API-INTEGRATION.md。
快速示例(Python):
from clients.python.mini_mcp_client import MitreMCPClient
async def main():
client = MitreMCPClient(host="localhost", port=8000)
# Get all tactics
tactics = await client.call_tool("get_tactics", {"domain": "enterprise-attack"})
# Get techniques for a group
techniques = await client.call_tool(
"get_techniques_used_by_group", {"group_name": "APT29", "domain": "enterprise-attack"}
)
可用客户端:
- Python:
clients/python/mini-mcp-client.py,带完整命令行界面 - Node.js:
clients/nodejs/mini-mcp-client.js,带完整命令行界面
完整文档请参阅 API-INTEGRATION.md。
开发
克隆并安装
git clone https://github.com/montimage/mitre-mcp.git
cd mitre-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
安装 Pre-commit 钩子
pre-commit install
此操作会在每次提交前自动运行代码质量检查。
运行测试
pytest # Full test suite with coverage
pre-commit run --all-files # All quality checks
代码质量工具
格式化:
- black - Python 代码格式化工具
- isort - 导入语句整理工具
- prettier - YAML/JSON/Markdown 格式化工具
Lint 和类型检查:
- flake8 - Python lint 工具
- mypy - 静态类型检查器
- pydocstyle - 文档字符串检查器
安全:
- bandit - 安全漏洞扫描器
- 文件验证器 - YAML、JSON、TOML、私钥检测
测试:
- pytest - 测试套件,提交前设有覆盖率门槛
- 安装测试 - 包验证
- 导入验证 - 模块可导入性检查
- CLI 测试 - 入口点验证
故障排除
下载失败,提示“磁盘空间不足”
- 在数据目录中至少释放 200 MB,或设置
MITRE_DATA_DIR=/path/to/storage
数据始终不更新
- 缓存包会在 14 天后自动刷新
- 强制刷新:
mitre-mcp --force-download,或删除~/.cache/mitre-mcp
工具调用返回错误
- 确保技术 ID 符合
T####或T####.###格式 - 名称/战术长度不得超过 100 个字符
MCP 客户端无法发现服务
- 确认客户端配置指向正确的 Python 路径
- 手动测试:运行
mitre-mcp并确认服务已启动 - 对于 HTTP 模式:确保正确设置
url字段
聊天 UI:POST https://localhost:8000/mcp net::ERR_SSL_PROTOCOL_ERROR
- GitHub Pages UI 使用 HTTPS,因此会将
localhost改写为https://localhost:8000。mitre-mcp --http不支持 TLS。请改为打开 http://localhost:5173(参见[Web 前端](#web-frontend))。
聊天 UI:调用本地 LLM 时出现 CORS / “loopback address space”错误
- 原因相同:公共来源无法获取
http://localhost:…。请在本地运行 前端,并将 OpenAI 兼容提供程序指向http://localhost:<port>/v1。
找不到模块:mcp.server.fastmcp
- 在虚拟环境中重新安装固定版本的 MCP SDK:
pip install "mcp>=1.28.1,<2"(如果还需要 CLI 扩展,也可安装mcp[cli]>=1.28.1,<2)——fastmcp发行包不提供mcp.server.fastmcp;该包声明的固定版本则提供
常见问题
mitre-mcp 能否离线运行?
- 可以。缓存包后,服务可离线运行,直至缓存过期。
支持哪些 Python 版本?
- Python 3.11 至 3.14(参见
pyproject.toml)。
数据多久刷新一次?
- 默认每 24 小时刷新一次。可调整
MITRE_CACHE_EXPIRY_DAYS或使用--force-download。
HTTP 模式适合在生产环境中使用吗?
- HTTP 模式默认在 localhost:8000 上提供服务。如需对外开放,请使用防火墙或反向代理。
许可证
MIT 许可证 - 详情请参阅 LICENSE 文件。
关于 Montimage
mitre-mcp 由网络安全公司 Montimage 开发并维护,该公司专注于网络监控、安全分析和 AI 驱动的威胁检测解决方案。我们开发创新工具,帮助组织保护其数字资产并确保网络安全。
如有疑问或需要支持,请联系:[email protected]
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。