内容
<p align="center">
<img src="docs/assets/maltego-mcp-banner.jpg" alt="maltego-mcp banner" width="900">
</p>
<h1 align="center">maltego-mcp</h1>
<p align="center"><strong>一个允许LLM作者创建Maltego图形文件并运行原始OSINT查找的MCP服务器。</strong></p>
<p align="center">
<a href="https://lidless.dev/maltego-mcp"><b>官网</b></a>
</p>
<p align="center">
<img src="https://img.shields.io/npm/v/maltego-mcp?style=for-the-badge&logo=npm&label=npm" alt="npm版本">
<img src="https://img.shields.io/github/actions/workflow/status/lidless-labs/maltego-mcp/ci.yml?branch=main&style=for-the-badge&label=ci" alt="持续集成">
<img src="https://img.shields.io/badge/MCP-server-8A2BE2?style=for-the-badge" alt="MCP服务器">
<img src="https://img.shields.io/badge/license-MIT-green?style=for-the-badge" alt="MIT许可证">
</p>
maltego-mcp是一个模型上下文协议(MCP)服务器,允许LLM作者创建Maltego `.mtgx`图形文件并运行原始OSINT查找(whois、DNS、ASN、crt.sh)从代理会话内部。它存在是因为Maltego Desktop中的图形驱动的OSINT调查通常是点击式工作,而可以已经推理指标的代理应该能够直接生成图形,而不是命令人类点击。它的工作原理与Maltego转换包不同,它首先位于代理层:图形由工具调用构建并保存到磁盘,然后在Maltego中打开,因此即使在基本计划和没有付费连接器的情况下也起作用。第二个可选层(B阶段)为需要它的团队在Maltego Desktop中添加本地右键单击转换。
## 功能
maltego-mcp是一个**Maltego Desktop OSINT的MCP服务器**,为LLM代理提供了一套小型、键入的工具集,用于构建Maltego图形和丰富妥协指标。代理调用这些工具来创建图形、添加实体和链接、运行whois / DNS / ASN /证书透明度查找、将IP或域名扩展为枢纽图,并将结果写入`.mtgx`文件以在Maltego Graph Desktop中打开。关键词:Maltego,MCP服务器,OSINT,威胁情报,图形,whois,DNS,ASN,crt.sh,妥协指标。
它作为两个协作层交付:
- **A阶段(TypeScript MCP服务器):** 允许LLM作者创建Maltego `.mtgx`图形文件并运行原始OSINT查找(whois / DNS / ASN / crt.sh)。图形着陆在磁盘上,您在Maltego Desktop中打开它们。
- **B阶段(Python TRX转换器在一个`.mtz`文件中):** 在Maltego Desktop中添加右键单击到MISP,TheHive,Cortex和捆绑的MITRE ATT&CK数据集的枢纽。参见[`transforms/README.md`](transforms/README.md)。
两个阶段共享存储库,其他则不然。任一层都可以卸载而不会破坏另一层。
## 安装
```bash
npm install -g maltego-mcp
```
或从源代码(B阶段转换器所需):
```bash
git clone https://github.com/solomonneas/maltego-mcp.git
cd maltego-mcp
npm install
npm run build
```
## 快速入门
全局安装并在MCP客户端中注册:
```bash
npm install -g maltego-mcp
```
将其添加到MCP客户端配置中(显示Claude Desktop;相同的`command`在任何stdio MCP客户端中都有效):
```json
{
"mcpServers": {
"maltego": {
"command": "maltego-mcp"
}
}
}
```
重启客户端,`maltego_*`工具就会出现。从源代码检出中,指向构建的入口点:
```json
{
"mcpServers": {
"maltego": {
"command": "node",
"args": ["/absolute/path/to/maltego-mcp/dist/mcp-server.js"]
}
}
}
```
> 状态:npm包已发布(最新标签`v0.3.0`);`0.4.0`正在开发中,从源代码构建中交付。B阶段转换器需要源代码检出。有关所有客户端配方,请参见[安装](#安装)。
## 工具(A阶段)
maltego-mcp注册了**13个MCP工具**,针对`src/tools/index.ts`进行了验证:
**图形创作**
- `maltego_create_graph(name)` — 返回`graphId`
- `maltego_add_entity(graphId, type, value, properties?)` — 返回`entityId`
- `maltego_add_link(graphId, from, to, label?, properties?)` — 返回`linkId`
- `maltego_save_graph(graphId, path, overwrite?)` — 写入`.mtgx`
- `maltego_load_graph(path)` — 解析现有的`.mtgx`为新句柄
**原始查找**
- `maltego_whois(domain)` — 注册商、名称服务器、日期
- `maltego_dns(domain)` — A/AAAA/MX/NS/TXT
- `maltego_asn(ip)` — Team Cymru ASN、prefix、country、org
- `maltego_crtsh(domain)` — 证书透明度条目
**便捷扩展器**
- `maltego_expand_ip(ip, outputPath, overwrite?)` — IP + ASN + netblock,已保存为`.mtgx`
- `maltego_expand_domain(domain, outputPath, overwrite?)` — 域名 + whois + DNS + ASN按A记录
- `maltego_expand_hash(hash, outputPath, algorithm?, overwrite?)` — 哈希实体(在后续版本中扩展)
- `maltego_build_ioc_graph(ioc, outputPath, ...)` — 一个IOC加上来自其他MCP的丰富摘要,已保存为`.mtgx`
### 实体类型
标准Maltego本体:`IPv4Address`,`IPv6Address`,`Domain`,`URL`,`Hash`,`EmailAddress`,`Netblock`,`AS`,`Website`,`Company`,`Person`。对于没有标准类型的概念,请使用带有类别前缀的`Phrase`(`[T1566] 钓鱼`,`[TheHive] 案例 #42`)。
### 与其他MCP组合
maltego-mcp不嵌入第三方威胁情报客户端。对于MISP事件、ATT&CK技术、Cortex报告等,请调用专用MCP(`misp-mcp`、`mitre-mcp`、`cortex-mcp`等)并将结果导入`maltego_add_entity` / `maltego_add_link`。或者,对于Maltego中的右键单击,请安装B阶段(如下)。
对于常见的“一个IOC,许多丰富”的情况,请使用
`maltego_build_ioc_graph`:调用`misp-mcp`、`thehive-mcp`、`cortex-mcp`和
`mitre-mcp`,首先总结它们的结果到工具的`mispEvents`,
`thehiveCases`,`cortexReports`和`attackTechniques`数组,然后保存一个
组合的`.mtgx`。该工具将服务调用排除在此包之外,同时仍然
通过单个MCP调用使图形桥接。
## 配置
两个环境变量都是可选的。
| 变量 | 默认值 | 描述 |
|---|---|---|
| `MALTEGO_MCP_OUTPUT_DIR` | `~/MaltegoGraphs` | `.mtgx`文件的默认输出目录 |
| `MALTEGO_MCP_LOOKUP_TIMEOUT_MS` | `30000` | 查找超时时间(毫秒)(目前仅应用于`crt.sh`;`whois`,`dns`,`asn`使用库默认值) |
### Claude Desktop
添加到 `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)或 `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
```json
{
"mcpServers": {
"maltego": {
"command": "maltego-mcp"
}
}
}
```
或在从源代码检出而不是全局npm安装时:
```json
{
"mcpServers": {
"maltego": {
"command": "node",
"args": ["/absolute/path/to/maltego-mcp/dist/mcp-server.js"]
}
}
}
```
重启Claude Desktop。`maltego_*`工具应该会出现。
### Claude Code
```bash
claude mcp add maltego -- maltego-mcp
```
或从源代码检出:
```bash
claude mcp add maltego -- node /absolute/path/to/maltego-mcp/dist/mcp-server.js
```
添加 `--scope user` 以使其在任何目录中都可用,而不仅仅是当前项目。
### OpenClaw
**推荐:通过ClawHub作为OpenClaw插件安装。**
```bash
openclaw plugins install clawhub:maltego
openclaw plugins list # 确认“maltego”已注册
```
这与原生OpenClaw插件安装相同的包 - 工具调用直接通过插件SDK进行,而不是启动单独的stdio MCP进程。在OpenClaw的插件配置UI或通过JSON配置文件中配置`outputDir`和`lookupTimeoutMs`。安装后重启OpenClaw网关,以便获取插件。
**或,作为stdio MCP服务器注册(手动):**
```bash
openclaw mcp set maltego '{
"command": "maltego-mcp"
}'
```
或在从源代码检出时:
```bash
openclaw mcp set maltego '{
"command": "node",
"args": ["/absolute/path/to/maltego-mcp/dist/mcp-server.js"]
}'
```
然后重启OpenClaw网关以获取新的服务器,并使用`openclaw mcp list`确认注册。
### Hermes Agent
[Hermes Agent](https://github.com/NousResearch/hermes-agent) 从 `~/.hermes/config.yaml` 下的 `mcp_servers` 键读取MCP配置。添加一个条目:
```yaml
mcp_servers:
maltego:
command: "maltego-mcp"
```
或在从源代码检出时:
```yaml
mcp_servers:
maltego:
command: "node"
args: ["/absolute/path/to/maltego-mcp/dist/mcp-server.js"]
```
然后在Hermes会话内重新加载MCP:
```
/reload-mcp
```
### Codex CLI
[Codex CLI](https://github.com/openai/codex) 通过 `codex mcp add` 注册MCP服务器:
```bash
codex mcp add maltego -- maltego-mcp
```
或从源代码检出:
```bash
codex mcp add maltego -- node /absolute/path/to/maltego-mcp/dist/mcp-server.js
```
Codex将条目写入 `~/.codex/config.toml` 下的 `[mcp_servers.maltego]`。使用 `codex mcp list` 验证。
## 要求
- Node.js 20+
- Maltego Graph Desktop(基本版、专业版或企业版)任一层都很有用
- B阶段仅需:Maltego主机上的Python 3.11+
### Maltego基本版兼容性
默认工作流程是基本版友好的:使用A阶段生成`.mtgx`文件,然后在Maltego Graph Desktop中打开或导入它们。包含的演示图保持在24个实体以下,以便在基本版的每个转换结果限制下仍然有用。本地TRX转换器在基本版上受支持,但其实时结果仍然受您的Maltego计划和连接器限制。参见Maltego当前的产品和计划 [产品和计划](https://docs.maltego.com/en/support/solutions/articles/15000036759-maltego-products-and-plans) 和 [基本数据访问说明](https://docs.maltego.com/en/support/solutions/articles/15000058711-data-pass-and-connectors-for-maltego-community-edition-version-4-8-0-).
## 基本友好演示图
生成一个无需联网的`.mtgx`演示图,展示IOC如何连接到MISP,TheHive,Cortex,MITRE ATT&CK和分诊剧本,无需API密钥或付费Maltego连接器:
```bash
npm run demo:basic
```
输出默认为 `dist/maltego-mcp-basic-soc-demo.mtgx`。打开该文件在 Maltego Graph Desktop 中。要选择不同的路径:
```bash
npm run demo:basic -- --output ~/MaltegoGraphs/basic-soc-demo.mtgx
```
演示使用文档安全指示器,例如 `203.0.113.42` 和 `example.invalid`;它旨在证明图形格式和视觉工作流程,而不是执行实时丰富。
## B阶段:Maltego内转换(.mtz)
一个单独的Python转换层提供右键单击到MISP,TheHive,Cortex和ATT&CK的枢纽,直接在Maltego Desktop中。参见 [`transforms/README.md`](transforms/README.md) 了解完整设置。
快速启动(从源代码检出,在Maltego主机上):
```bash
npm run setup:transforms # 创建transforms/.venv并锁定maltego-trx
npm run build:mtz # 写入dist/maltego-mcp-transforms.mtz
# 然后在Maltego中:导入 -> 配置 -> dist/maltego-mcp-transforms.mtz
```
构建将 `transforms/.venv` 的绝对路径烘焙到清单中,因此`.mtz`与构建它的主机绑定。如果存储库移动,请重新运行 `npm run build:mtz`。
## 示例提示
> 为域名`example.com`构建一个包含whois、DNS和ASN扩展的Maltego图形。
调用 `maltego_expand_domain` 并返回保存的 `.mtgx` 的路径。
> 从这个IP跳转 - 给我一个ASN + netblock作为Maltego图形。
调用 `maltego_expand_ip`。
> 查找 `example.com` 的证书透明度日志。
调用 `maltego_crtsh` 并返回匹配的证书。
> 为这个哈希值构建一个Maltego图形,使用我们已经收集的MISP事件,TheHive案例,Cortex报告和ATT&CK技术。
调用 `maltego_build_ioc_graph` 并输入类似以下内容:
```json
{
"ioc": {
"type": "Hash",
"value": "d41d8cd98f00b204e9800998ecf8427e",
"properties": { "algorithm": "md5" }
},
"outputPath": "hash-investigation.mtgx",
"mispEvents": [{ "id": 1001, "info": "demo phishing cluster" }],
"thehiveCases": [{ "id": 42, "title": "Phishing triage", "severity": "high" }],
"cortexReports": [{ "analyzer": "HashLookup", "verdict": "suspicious" }],
"attackTechniques": [{ "id": "T1566", "name": "Phishing", "tactic": "Initial Access" }]
}
```
## 为什么不是一个Maltego转换包?
原生Maltego转换在已经打开的Desktop客户端中非常有用,但它们假设人类正在驱动画布,对于实时远程数据,通常需要付费计划或连接器。maltego-mcp将图形创作放在代理层,以便LLM可以从已经推理的指标中构建和保存`.mtgx`,无需画布点击和连接器要求。如果您还想要Maltego中的右键单击枢纽,B阶段提供它们作为一个`.mtz`导入。您不必选择:运行MCP服务器、转换或两者。
## 为什么不直接使用原始whois/DNS工具?
您可以直接使用,但模型必须记住Maltego `.mtgx` XML格式、实体本体和每次调用的链接布线。maltego-mcp对其进行编码一次:查找返回规范化字段,图形工具发出有效的`.mtgx`,在Maltego Desktop中打开干净。扩展程序将常见枢纽(IP到ASN到网络块,域名到whois到DNS到ASN)打包到一个调用中,以便代理不会每次重新派生它们。
## 什么是maltego-mcp?
- **不是Maltego的替代品。** 它生成`.mtgx`文件;您仍然在Maltego Graph Desktop中打开和驱动它们。
- **不是威胁情报平台。** 它不嵌入MISP、TheHive、Cortex或VirusTotal客户端。它与那些MCP客户端组合使用。
- **不是付费连接器绕过。** 实时转换结果仍然受您的Maltego计划和连接器限制。
- **不是批量扫描器。** 查找是原始的、单目标丰富,旨在构建图形,而不是高容量侦察引擎。
## 开发
```bash
npm test # A阶段单元测试(vitest)
npm run test:integration
npm run test:all
npm run typecheck
npm run test:transforms # B阶段pytest套件
```
## 贡献
欢迎提出问题和拉取请求。参见 [CONTRIBUTING.md](CONTRIBUTING.md) 了解容易实施的内容, [SECURITY.md](SECURITY.md) 了解如何私下报告漏洞, [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
## 许可证
[MIT](LICENSE)