内容
<p align="center">
<img src="docs/assets/misp-mcp-social-preview.jpg" alt="misp-mcp banner" width="900">
</p>
<p align="center">
<a href="https://lidless.dev"><img src="docs/assets/marks/misp-mcp-circle.png" width="48" alt="Lidless Labs"></a>
</p>
<h1 align="center">misp-mcp</h1>
<p align="center"><strong>从任意MCP客户端查询和管理MISP威胁情报平台。</strong></p>
<p align="center">
<a href="https://lidless.dev/misp-mcp"><strong>网站 & 文档 → lidless.dev/misp-mcp</strong></a>
</p>
<p align="center">
<img src="https://shieldcn.dev/github/ci/lidless-labs/misp-mcp.svg?branch=main&workflow=ci.yml" alt="CI">
<img src="https://shieldcn.dev/npm/misp-mcp.svg" alt="npm版本">
<img src="https://shieldcn.dev/badge/MCP-server-8A2BE2.svg" alt="MCP服务器">
<img src="https://shieldcn.dev/badge/license-MIT-green.svg" alt="MIT许可证">
</p>
misp-mcp是[MISP](https://www.misp-project.org/)的[模型上下文协议](https://modelcontextprotocol.io/)服务器。它允许像Claude这样的LLM客户端运行IOC查找、管理事件、发现跨事件关联并直接从MISP实例导出指标。与通用HTTP包装器不同,它提供了36种专门的工具、MISP感知资源和提示,以及一个确认门控,拒绝破坏性写入(删除、发布、取消标记),除非您明确批准。
## 它做什么
misp-mcp通过MISP的REST API将AI代理连接到MISP(恶意软件信息共享平台和威胁情报共享)实例,并将其公开为模型上下文协议工具、资源和提示。将其指向您的MISP服务器,带有API密钥和LLM,可以搜索威胁情报事件、查找和添加妥协指标(IOCs)、关联事件中的指标、附加MITRE ATT&CK星系集群、检查警告列表以防止假阳性,并以Suricata、Snort、STIX、CSV、RPZ或哈希列表等格式导出IOCs。默认情况下,读取路径是安全的;更改状态和破坏性操作受到明确确认标志的保护,因此代理无法在未经批准的情况下删除事件或发布给共享合作伙伴。
- **36个MCP工具**,涵盖事件、属性、关联、标签、导出、目击、警告列表、对象、星系、馈送、组织和服务器管理。
- **3个MCP资源**,用于浏览属性类型、实例统计和可用分类法。
- **3个MCP提示**,用于引导IOC调查、事件创建和威胁报告。
- **确认门控写入**,因此破坏性工具拒绝在未设置`confirm: true`(和`confirmHard: true`用于永久删除)的情况下运行。
- **MITRE ATT&CK集成**,通过星系集群搜索和附件。
- **导出格式**,包括CSV、STIX、Suricata、Snort、文本、RPZ和哈希列表。
- **SSL灵活性**,适用于在本地MISP部署中常见的自签名证书。
## 快速入门
不需要checkout。使用Node.js 20+安装,注册发布的软件包与任何MCP客户端。对于[Claude Code](https://docs.anthropic.com/en/docs/claude-code):
```bash
claude mcp add misp \
--env MISP_URL=https://misp.example.com \
--env MISP_API_KEY=your-api-key-here \
--env MISP_VERIFY_SSL=false \
-- npx -y misp-mcp
```
添加`--scope user`使其可从任何目录访问,而不仅仅是当前项目。
### MCP客户端配置(复制粘贴)
对于Claude Desktop、Cursor或任何读取JSON `mcpServers`块的客户端,请添加:
```json
{
"mcpServers": {
"misp": {
"command": "npx",
"args": ["-y", "misp-mcp"],
"env": {
"MISP_URL": "https://misp.example.com",
"MISP_API_KEY": "your-api-key-here",
"MISP_VERIFY_SSL": "false"
}
}
}
}
```
Claude Desktop从`~/Library/Application Support/Claude/claude_desktop_config.json`(macOS)或`%APPDATA%\Claude\claude_desktop_config.json`(Windows)读取此内容。编辑后重启客户端。
### 先决条件
- Node.js 20或更高版本。
- 运行中的MISP实例,具有API访问权限。
- MISP API密钥(MISP UI:管理 > 列表认证密钥)。
### 配置
| 变量 | 必需 | 默认值 | 描述 |
| --- | --- | --- | --- |
| `MISP_URL` | 是 | - | MISP实例基本URL |
| `MISP_API_KEY` | 是 | - | API身份验证密钥 |
| `MISP_VERIFY_SSL` | 否 | `true` | 设置`false`用于自签名证书 |
| `MISP_TIMEOUT` | 否 | `30` | 请求超时(秒) |
| `MISP_ALLOW_DESTRUCTIVE` | 否 | `false` | 设置`true`预授权破坏性工具,以便调用标志不需必填。永久(`hard`)删除仍需`confirmHard`。 |
### 破坏性动作安全性
更改状态和破坏性工具受到保护,拒绝在未明确确认的情况下运行:
- `misp_delete_event`、`misp_delete_attribute`、`misp_delete_object`、`misp_publish_event`和`misp_tag_event`(当`remove: true`)需要`confirm: true`。
- 设置`MISP_ALLOW_DESTRUCTIVE=true`预授权这些操作,以便可以省略`confirm`标志(适用于受信任的自动化)。
- 永久**硬**删除(`hard: true`在`misp_delete_attribute`/`misp_delete_object`上)需要第二个确认,`confirmHard: true`,除了`confirm: true`。环境变量选项不**绕过** `confirmHard`。
受保护的调用返回错误(`isError: true`)并带有`Refused:`消息,不执行任何MISP请求。
## 工具
针对服务器源验证(36个工具,注册在`src/tools/`)。
### 事件工具(6)
| 工具 | 描述 |
| --- | --- |
| `misp_search_events` | 按IOC值、类型、标签、日期范围、组织搜索事件 |
| `misp_get_event` | 获取事件详细信息,包括属性、对象、星系、相关事件 |
| `misp_create_event` | 创建具有威胁级别、分发和分析状态的新事件 |
| `misp_update_event` | 更新事件元数据(信息、威胁级别、分析、发布状态) |
| `misp_publish_event` | 发布事件以触发警报到共享合作伙伴(需要`confirm:true`) |
| `misp_tag_event` | 从事件中添加或删除标签(TLP、MITRE ATT&CK、自定义)(删除需要`confirm:true`) |
### 属性工具(4)
| 工具 | 描述 |
| --- | --- |
| `misp_search_attributes` | 按类型、类别和关联过滤器搜索IOC |
| `misp_add_attribute` | 向事件添加单个IOC |
| `misp_add_attributes_bulk` | 一次向事件添加多个IOC |
| `misp_delete_attribute` | 软或硬删除属性(需要`confirm:true`;硬删除还需要`confirmHard:true`) |
### 关联和情报工具(3)
| 工具 | 描述 |
| --- | --- |
| `misp_correlate` | 查找匹配值的事件和属性,具有跨事件关联 |
| `misp_get_related_events` | 发现通过共享IOC关联的事件 |
| `misp_describe_types` | 获取所有可用的属性类型和类别映射 |
### 标签和分类法工具(2)
| 工具 | 描述 |
| --- | --- |
| `misp_list_tags` | 列出可用的标签及其使用统计信息 |
| `misp_search_by_tag` | 按标签查找事件或属性 |
### 导出工具(2)
| 工具 | 描述 |
| --- | --- |
| `misp_export_iocs` | 以CSV、STIX、Suricata、Snort、文本或RPZ格式导出IOC |
| `misp_export_hashes` | 导出文件哈希(MD5、SHA1、SHA256)用于HIDS集成 |
### 目击和警告列表工具(2)
| 工具 | 描述 |
| --- | --- |
| `misp_add_sighting` | 报告IOC的目击、假阳性或过期 |
| `misp_check_warninglists` | 检查值是否出现在已知的良性/假阳性列表中 |
### 对象工具(4)
| 工具 | 描述 |
| --- | --- |
| `misp_list_object_templates` | 列出可用的MISP对象模板(文件、domain-ip、电子邮件等) |
| `misp_get_object_template` | 获取模板详细信息及必填/可选属性 |
| `misp_add_object` | 向事件添加结构化对象(分组属性) |
| `misp_delete_object` | 删除事件中的对象(需要`confirm:true`;硬删除还需要`confirmHard:true`) |
### 星系工具(4)
| 工具 | 描述 |
| --- | --- |
| `misp_list_galaxies` | 列出星系(MITRE ATT&CK、威胁行为者、恶意软件、工具等) |
| `misp_get_galaxy` | 获取星系详细信息及所有集群 |
| `misp_search_galaxy_clusters` | 按关键词搜索集群(查找ATT&CK技术、威胁行为者) |
| `misp_attach_galaxy_cluster` | 将集群(ATT&CK技术等)附加到事件或属性 |
### 馈送工具(4)
| 工具 | 描述 |
| --- | --- |
| `misp_list_feeds` | 列出配置的威胁情报馈送 |
| `misp_toggle_feed` | 启用或禁用馈送 |
| `misp_fetch_feed` | 从馈送触发获取/拉取 |
| `misp_cache_feed` | 本地缓存馈送数据以便关联 |
### 组织工具(2)
| 工具 | 描述 |
| --- | --- |
| `misp_list_organisations` | 列出本地和远程共享合作伙伴组织 |
| `misp_get_organisation` | 获取组织详细信息 |
### 服务器和管理员工具(3)
| 工具 | 描述 |
| --- | --- |
| `misp_server_status` | 获取MISP版本、权限和诊断信息 |
| `misp_list_sharing_groups` | 列出受控分发的共享组 |
| `misp_delete_event` | 删除MISP事件(需要`confirm:true`) |
## 资源
| 资源URI | 描述 |
| --- | --- |
| `misp://types` | 所有支持的属性类型、类别及其映射 |
| `misp://statistics` | MISP实例统计信息 |
| `misp://taxonomies` | 可用的分类法(TLP、MITRE ATT&CK等) |
## 提示
| 提示 | 描述 |
| --- | --- |
| `investigate-ioc` | 深入IOC调查:搜索、关联、检查警告列表、总结威胁上下文 |
| `create-incident-event` | 从事件描述中引导事件创建,并摄取IOC |
| `threat-report` | 从MISP数据生成威胁情报报告 |
## 使用示例
### 搜索IOC
> "在MISP中搜索IP地址203.0.113.50"
使用`misp_search_events`和`misp_search_attributes`查找引用此IP的所有事件和属性。
### 调查可疑域名
> "在MISP中调查可疑域名example.com"
触发`investigate-ioc`提示工作流:搜索域名、检查关联、查询警告列表并提供结构化威胁评估。
### 创建事件
<!-- content-guard: allow email -->
> "为针对我们财务团队的钓鱼活动创建MISP事件。钓鱼邮件来自attacker@phish.example并链接到https://harvest.phish.example/login"
使用`misp_create_event`后跟`misp_add_attributes_bulk`创建完全填充的事件。
### 导出Suricata规则
> "导出Suricata规则,导出过去7天的所有IOC"
使用`misp_export_iocs`,格式为"suricata",最后为"7d".
### 检查假阳性
> "192.0.2.123是否在任何MISP警告列表中?"
使用`misp_check_warninglists`验证值是否为已知良性指示符。
### 查找MITRE ATT&CK技术
> "在MITRE ATT&CK中搜索钓鱼技术"
使用`misp_search_galaxy_clusters`查找相关ATT&CK技术,然后使用`misp_attach_galaxy_cluster`将它们链接到事件。
### 添加结构化对象
> "向事件1添加文件对象,文件名encrypt.exe、SHA256哈希和文件大小"
使用`misp_add_object`,使用"file"模板创建结构化相关属性列表。
## 支持的属性类型
| 类型 | 类别 | 示例 |
| --- | --- | --- |
| `ip-src` | 网络活动 | 源IP地址 |
| `ip-dst` | 网络活动 | 目标IP地址 |
| `domain` | 网络活动 | 域名 |
| `hostname` | 网络活动 | 主机名 |
| `url` | 网络活动 | 完整URL |
| `email-src` | 载荷交付 | 发送者电子邮件地址 |
| `md5` | 载荷交付 | MD5文件哈希 |
| `sha1` | 载荷交付 | SHA1文件哈希 |
| `sha256` | 载荷交付 | SHA256文件哈希 |
| `filename` | 载荷交付 | 文件名 |
使用`misp_describe_types`获取支持的类型和类别的完整列表。
## 其他客户端和本地开发
<details>
<summary>从源代码运行或连接OpenClaw、Codex CLI、Hermes、Docker或独立Node。</summary>
### 从源代码
```bash
git clone https://github.com/lidless-labs/misp-mcp.git
cd misp-mcp
npm install
npm run build
```
然后将任何客户端的`command`/`args`指向`node /绝对路径/to/misp-mcp/dist/index.js`而不是`npx -y misp-mcp`。
### Claude Code(源代码checkout)
```bash
claude mcp add misp \
--env MISP_URL=https://misp.example.com \
--env MISP_API_KEY=your-api-key-here \
--env MISP_VERIFY_SSL=false \
-- node /绝对路径/to/misp-mcp/dist/index.js`
```
### OpenClaw
```bash
openclaw mcp set misp '{
"command": "npx",
"args": ["-y", "misp-mcp"],
"env": {
"MISP_URL": "https://misp.example.com",
"MISP_API_KEY": "your-api-key-here",
"MISP_VERIFY_SSL": "false"
}
' from source checkout
```bash
claude mcp add misp \
--env MISP_URL=https://misp.example.com \
--env MISP_API_KEY=your-api-key-here \
--env MISP_VERIFY_SSL=false \
-- npx -y misp-mcp
```
### OpenClaw
```bash
openclaw mcp set misp '{
"command": "npx",
"args": ["-y", "misp-mcp"],
"env": {
"MISP_URL": "https://misp.example.com",
"MISP_API_KEY": "your-api-key-here",
"MISP_VERIFY_SSL": "false"
}
}'
```
对于源代码checkout,请使用`"command": "node"`和`"args": ["/绝对路径/to/misp-mcp/dist/index.js"]`。然后重启网关并确认注册:
```bash
systemctl --user restart openclaw-gateway
openclaw mcp list # 确认"misp"已注册
```
### Codex CLI
```bash
codex mcp add misp \
--env MISP_URL=https://misp.example.com \
--env MISP_API_KEY=your-api-key-here \
--env MISP_VERIFY_SSL=false \
-- npx -y misp-mcp
```
Codex将条目写入`~/.codex/config.toml`下的 `[mcp_servers.misp]`。通过`codex mcp list`进行验证。
### Hermes Agent
[Hermes Agent](https://github.com/NousResearch/hermes-agent)从`~/.hermes/config.yaml`读取MCP配置,位于`mcp_servers`下:
```yaml
mcp_servers:
misp:
command: "npx"
args: ["-y", "misp-mcp"]
env:
MISP_URL: "https://misp.example.com"
MISP_API_KEY: "your-api-key-here"
MISP_VERIFY_SSL: "false"
```
然后在Hermes会话中执行`/reload-mcp`。
### Docker
```bash
docker build -t misp-mcp .
docker run -e MISP_URL=https://misp.example.com -e MISP_API_KEY=your-key -e MISP_VERIFY_SSL=false misp-mcp
```
### 独立
```bash
MISP_URL=https://misp.example.com MISP_API_KEY=your-key node dist/index.js
```
### 开发
```bash
MISP_URL=https://misp.example.com MISP_API_KEY=your-key npm run dev
```
</details>
## 测试
```bash
npm test # 单元测试(模拟)
npm run test:integration # 与实时MISP实例集成测试
npm run test:watch # 监视模式
npm run lint # 类型检查
```
集成测试需要环境变量`MISP_URL`、`MISP_API_KEY`和可选`MISP_VERIFY_SSL=false`。
## 项目结构
```
misp-mcp/
src/
index.ts # MCP服务器入口点
config.ts # 环境配置 + 验证
client.ts # MISP REST API客户端
guards.ts # 破坏性动作确认守卫
types.ts # MISP API类型定义
resources.ts # MCP资源
prompts.ts # MCP提示
tools/ # 每个工具系列一个模块(events, attributes, ...)
tests/ # 单元 + 集成测试
Dockerfile
package.json
```
## 贡献
欢迎提出问题和拉取请求。参见[CONTRIBUTING.md](CONTRIBUTING.md)了解贡献路径,参见[SECURITY.md](SECURITY.md)了解如何私密报告漏洞。参与即表示您同意[行为准则](CODE_OF_CONDUCT.md)。
## 为什么不使用MISP Web UI或原始API?
MISP Web UI和PyMISP对于浏览器中的分析师来说非常好。misp-mcp适用于操作员是LLM代理而不是浏览器中的人类的情况。它为每个常见的MISP操作提供了一个类型化的命名工具,验证输入并格式化响应,以便模型可以推理它们,而不是直接向模型提供原始REST端点和OpenAPI转储。它还添加了一个防护层,而原始API没有:破坏性操作在调用者选择加入之前会失败,因此过度热情的代理不会意外发布或删除情报。如果您想要一个人类驱动的控制台,请使用MISP UI。如果您想要PyMISP脚本,请使用PyMISP。当您想要聊天或客户端驱动MISP安全时,请使用misp-mcp。
## misp-mcp 不是什么
- **不是MISP服务器。** 它通过REST API与现有的MISP实例通信;它不存储、托管或替换MISP。
- **不是通用HTTP代理。** 它公开了一套精选的MISP操作作为MCP工具,而不是对每个MISP端点进行任意直通。
- **不是SIEM、EDR或警报系统。** 它读取和写入威胁情报;它不收集日志或自行生成警报。
- **不是凭证保险箱。** 它从环境中读取`MISP_URL`和`MISP_API_KEY`;请使用您自己的机密工具来管理和轮换这些密钥。
- **不是自主删除者。** 破坏性和发布操作具有设计上的确认门控。
## 许可证
[MIT](LICENSE)
---
<p align="center"><a href="https://lidless.dev">Part of <strong>Lidless Labs</strong></a> · the eye does not close</p>
<p align="center"><sub><strong>Security / SOC:</strong> <a href="https://github.com/lidless-labs/soc-stack">soc-stack</a> · <a href="https://github.com/lidless-labs/wazuh-mcp">wazuh-mcp</a> · <a href="https://github.com/lidless-labs/suricata-mcp">suricata-mcp</a> · <a href="https://github.com/lidless-labs/thehive-mcp">thehive-mcp</a> · <a href="https://github.com/lidless-labs/cortex-mcp">cortex-mcp</a> · <a href="https://github.com/lidless-labs/mitre-mcp">mitre-mcp</a> · <a href="https://github.com/lidless-labs/zeek-mcp">zeek-mcp</a> · <a href="https://github.com/lidless-labs/hotwash">hotwash</a></sub></p>
<p align="center"><sub><a href="https://lidless.dev">所有工具</a> · <a href="https://github.com/lidless-labs">Lidless Labs on GitHub</a></sub></p>
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器