zkace01/threat-intel-mcp
GitHub: zkace01/threat-intel-mcp
一个可复用的威胁情报富化 MCP 服务器,将 AbuseIPDB、MISP、YARA 的查询结果统一标准化为 STIX 2.1,并同时作为 MCP 工具和 Cortex XSOAR 集成供 AI 代理与 SOAR playbook 调用。
Stars: 0 | Forks: 0
# threat-intel-mcp
一个用于威胁情报查询和富化的 MCP 服务器,支持 STIX 2.1 标准化、MISP/YARA 富化,以及基于此构建的真实 Cortex XSOAR 集成。
## 目标
本项目提供了一个可重用的威胁情报富化构建块,可以通过两种方式使用:
1. **作为 MCP 工具** — 任何兼容 MCP 的 AI 客户端(Claude、内部 SOC 副驾驶等)都可以调用它来查询指标(IP、哈希、域名),并获得一个标准化的、符合 STIX 规范的答案,而不需要模型直接知道如何调用 AbuseIPDB 或 MISP。
2. **作为 Cortex XSOAR 集成** — 相同的富化逻辑被作为一个标准的 XSOAR 集成(使用 `demisto-sdk` 构建)公开,因此它可以在 playbook 中作为自动化步骤运行,而不仅仅是由聊天代理驱动的对话。
以这种方式构建的意义在于,富化逻辑只需编写一次,就可以从 AI 代理环境和经典的 SOAR 自动化环境中同时使用 —— 这正是安全自动化工程师角色所面临的“AI + SOAR”问题的实际形态,而不是两个互不相连的演示。
次要目标:这是一个作品集项目。它的构建旨在供评估 MCP 服务器开发、威胁情报数据建模(STIX)和 SOAR 集成开发方面实际技能的人阅读 —— 它不是一个生产系统。
## 架构
```
┌──────────────────┐ ┌───────────────────┐
│ MCP Client │ │ Cortex XSOAR │
│ (Claude / agent) │ │ Playbook │
└────────┬─────────┘ └─────────┬───────────┘
│ MCP protocol │ calls integration
│ │ (demisto-sdk)
┌────────▼───────────────────────────────────▼───────────┐
│ Enrichment Core │
│ (shared Python package, no protocol-specific code)│
│ │
│ - lookup_indicator(value, type) -> NormalizedResult │
│ - enrich(indicator) -> EnrichedResult │
└────────────────────────┬─────────────────────────────────┘
│
┌─────────────────────────┼─────────────────────────┐
│ │ │
┌───────▼──────┐ ┌────────────▼────────┐ ┌──────────────▼──────┐
│ AbuseIPDB │ │ MISP │ │ YARA engine │
│ client │ │ (local, Docker) │ │ (sample/IOC │
│ (httpx) │ │ (pymisp) │ │ enrichment) │
└───────┬──────┘ └────────────┬────────┘ └──────────────┬──────┘
│ │ │
└─────────────────────────┼─────────────────────────┘
│
┌────────▼─────────┐
│ STIX 2.1 │
│ normalization │
│ (stix2) │
└────────┬─────────┘
│
┌────────▼─────────┐
│ Storage backend │
│ (abstract; │
│ in-memory by │
│ default, pluggable│
│ SQLite/Postgres) │
└───────────────────┘
```
**值得说明的设计决策:**
- **富化核心与协议无关。** MCP 服务器和 XSOAR 集成都是同一个核心包的轻量级适配器 —— 无论是 MCP 工具定义还是 demisto-sdk 集成脚本都不包含业务逻辑。这才是让“可从 AI 代理和 SOAR playbook 中同时使用”成为现实的原因,而不是两个随后会产生偏差的独立实现。
- **XSOAR 集成是真实的,而非模拟的。** 使用官方的 `demisto-sdk` (`demisto-sdk init --integration`) 构建,生成的是实际可安装的集成(YAML 规范 + Python 脚本),而不是模拟的调用。
- **没有用户管理。** 这不是多用户系统。MCP 服务器具有简单的 API 密钥认证来保护 endpoint —— 这是身份验证,而不是用户管理,这也是范围内唯一的访问控制问题。
- **存储被抽象化,没有预先实现。** 从一开始就存在一个 `StorageBackend` 接口 (`save_lookup()` / `get_cached()`),默认使用内存存储。这使得 MVP 保持无状态,同时让以后插入 SQLite 或 Postgres(例如,用于缓存查询或保留富化历史记录)变得非常简单,且无需触及核心逻辑。
**组件:**
- `core/` — 与协议无关的富化逻辑(`lookup_indicator`、`enrich`),由两个适配器共享
- `clients/` — 外部源客户端(AbuseIPDB、MISP、YARA)
- `normalization/` — 将每个源的响应转换为 STIX 对象(Indicator、Observable)
- `storage/` — 抽象存储后端 + 内存实现
- `models/` — 用于请求/响应的 Pydantic schema
- `mcp_server/` — MCP 适配器(暴露工具:`check_ip`、`enrich_indicator`、`query_misp`)
- `xsoar/` — Cortex XSOAR 集成(使用 `demisto-sdk` 构建),调用 `core/`
- `tests/`
## 技术栈
- Python 3.12
- `httpx` — HTTP 客户端
- `pydantic` — schema 验证
- `stix2` — 标准化为 STIX 2.1
- `pymisp` — MISP 客户端
- `yara-python` — 规则匹配
- 官方 MCP SDK (Python) 用于服务器
- Docker 中的 MISP(本地实例,仅用于开发/演示)
- Cortex XSOAR Community Edition(用于测试 playbook 集成)
## 安装说明
```
git clone
cd threat-intel-mcp
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 复制并填写环境变量
cp .env.example .env
# ABUSEIPDB_API_KEY=
# MISP_URL=
# MISP_API_KEY=
# MCP_SERVER_API_KEY=
# 启动本地 MISP(可选,仅在测试 MISP 集成时需要)
docker compose up -d misp
# 运行 MCP server
python -m mcp_server.main
# 搭建 / 运行 XSOAR 集成(需要 demisto-sdk)
pip install demisto-sdk
demisto-sdk init --integration -o xsoar/
```
## 项目路线图
1. **MVP:** 带有针对 AbuseIPDB 的单一工具 (`check_ip`) 的 MCP 服务器,暂不支持 STIX —— 验证 MCP 协议和基本流程是否可以端到端工作,然后再添加建模复杂性。
2. 对 AbuseIPDB 响应进行 STIX 2.1 标准化,并将富化逻辑重构到与协议无关的 `core/` 包中。
3. 将本地 MISP 集成 (Docker) 作为第二来源,重用 STIX 标准化层。
4. 使用 `yara-python` 对样本/IOC 进行富化。
5. 真实的 Cortex XSOAR 集成(通过 `demisto-sdk`),调用 `core/`,并接入示例 playbook。
6. 最终文档:架构图、README、设计决策。
## 状态
工作进行中 —— 作品集项目,不用于生产环境。
## 待定决策 / 探讨中
- **MVP 优先于 STIX 的顺序:** 我倾向于在添加 STIX 之前,先针对原始 AbuseIPDB JSON 验证 MCP 服务器,而不是从第一天起就开始标准化。理由是:STIX 增加了建模复杂性;如果基本的 MCP 协议流程需要返工,最好在投入标准化之前发现。如果您更希望从一开始就使用 STIX 以避免以后重写,请明说,我们将更改顺序。
- **在 Docker 中运行本地 MISP:** 仅为演示增加了非同小可的基础设施(启动、维护、填充数据)。更轻量级的替代方案:使用 fixture 模拟 MISP 响应,并让真实集成保持“有文档记录但未部署”的状态。这取决于您想在该部分上花费多少时间,还是分配给其余部分。
- **从一开始就将 `core/` 作为共享包:** 我建议 MCP 服务器和 XSOAR 集成都建立在共享的、与协议无关的 `core/` 包之上,而不是各自实现自己的富化逻辑。这需要更多的前期设置(一个额外的抽象层),但避免了以后两个适配器产生偏差。如果时间紧迫,另一种替代方案是先构建 MCP 服务器,使其端到端工作,仅在 XSOAR 集成启动时(第 5 步)才提取 `core/` —— 前期设计较少,但以后会有一些重构风险。由您决定。
标签:AI编程协议(MCP), Cortex XSOAR, IP 地址批量处理, MISP集成, SOAR自动化, STIX标准, YARA, 云资产可视化, 威胁情报, 开发者工具, 请求拦截, 运行时操纵, 逆向工具