mcpField
M
MITRE ATT&CK

MITRE ATT&CK

本地服务
github.com/Montimage安全154 周前更新

关于 MITRE ATT&CK

MITRE ATT&CK 是面向安全分析师、威胁猎手和开发者的 MCP 服务,可结构化访问 ATT&CK 数据。它覆盖 Enterprise、Mobile 和 ICS 领域,提供索引查询、缓存以及 stdio 或 HTTP 传输。

主要功能

  1. 01覆盖 Enterprise、Mobile 和 ICS
  2. 02查询技术、战术、组织与软件
  3. 03查询缓解措施及关联关系
  4. 04缓存数据并按条件刷新
  5. 05支持 stdio 和 HTTP 传输

适用场景

  1. 01查询某威胁组织使用的技术
  2. 02查找与某战术相关的技术
  3. 03查看针对技术的缓解措施
  4. 04在自动化工作流中查询 ATT&CK 数据

MCP 相关

该服务通过工具向 MCP 客户端提供 MITRE ATT&CK 数据,包括技术、战术、组织、软件和缓解措施查询。支持 stdio 和 HTTP 连接。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"luongnv89-mitre": {
"command": "uvx",
"args": [
"mitre-mcp"
]
}
}
}
启动命令uvx mitre-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimitre-mcp0.3.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mitre-mcp:MITRE ATT&CK MCP 服务

MCP Registry PyPI 下载量

PyPI 版本 Python 版本 测试状态 许可证 代码风格:black Pre-commit

面向生产环境的模型上下文协议(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)。

快速开始

安装
  1. 创建并激活虚拟环境:
python3 -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate.bat
  1. 从 PyPI 安装:
pip install mitre-mcp
  1. 验证安装:
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_TIMEOUT120下载数据包时的 HTTP 超时时间(秒)
MITRE_CACHE_EXPIRY_DAYS14刷新缓存数据前允许的最长时间
MITRE_REQUIRED_SPACE_MB200下载前检查的磁盘空间阈值
MITRE_DEFAULT_PAGE_SIZE / MITRE_MAX_PAGE_SIZE20 / 200列表工具返回记录的默认数量和最大数量
MITRE_MAX_DESC_LENGTH500响应中截断后的描述长度
MITRE_LOG_LEVELINFO日志详细程度(DEBUG、INFO、WARNING 等)
MITRE_CORS_ORIGINSlocalhost 来源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 数据,以提升性能:

  1. 首次运行时,下载数据并将其存储在每位用户的缓存目录中 (默认为 $XDG_CACHE_HOME/mitre-mcp 或 ~/.cache/mitre-mcp)
  2. 后续运行时,如果缓存数据的时间不足 14 天,则使用缓存数据
  3. 自动刷新超过 14 天的数据,并使用条件请求——收到 304 Not Modified 响应时会复用缓存的数据包。 过期但仍存在的数据会立即提供,同时在后台运行刷新;启动过程不会因此受阻,刷新失败时则保留现有缓存。
  4. 缓存文件以原子方式写入(临时文件 + 重命名),因此下载失败不会损坏有效缓存
  5. 启动时只解析 enterprise 域;mobile 和 ICS 数据包会在首次使用时延迟加载,因此未查询这些数据时,冷启动仍然很快
  6. 使用 --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]

评论

支持 Markdown

第一次接触 MCP?

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

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