lidless-labs/maltego-mcp
GitHub: lidless-labs/maltego-mcp
一个允许 LLM 自动编写 Maltego .mtgx 图文件并执行 whois、DNS、ASN、crt.sh 等 OSINT 查询的 MCP 服务器。
Stars: 6 | Forks: 1
maltego-mcp
一个允许 LLM 编写 Maltego 图文件并运行基础 OSINT 查询的 MCP 服务器。
网站
maltego-mcp 是一个模型上下文协议(MCP)服务器,允许 LLM 在 agent 会话中编写 Maltego `.mtgx` 图文件并运行基础 OSINT 查询(whois、DNS、ASN、crt.sh)。它的诞生是因为在 Maltego Desktop 中进行图形驱动的 OSINT 调查通常是点击操作,而一个已经能够对指标进行推理的 agent 应该能够直接生成图形,而不是向人类口述点击操作。它与 Maltego 转换包的不同之处在于,它首先驻留在 agent 层:图形通过工具调用构建并保存到磁盘,然后在 Maltego 中打开,因此即使在基础版且没有付费连接器的情况下也能工作。第二个可选层(Phase B)确实在 Maltego Desktop 内部添加了原生的右键转换,供也需要此功能的团队使用。
## 它的功能
maltego-mcp 是一个**用于 Maltego Desktop OSINT 的 MCP 服务器**,它为 LLM agent 提供了一个小型的、类型化的工具集,用于构建 Maltego 图形并丰富危害指标。 agent 调用这些工具来创建图形、添加实体和链接、运行 whois / DNS / ASN / 证书透明度查询、将 IP 或域名扩展为枢纽图,并将结果写入您在 Maltego Graph Desktop 中打开的 `.mtgx` 文件。关键词:Maltego、MCP 服务器、OSINT、威胁情报、图形、whois、DNS、ASN、crt.sh、危害指标。
它作为两个协作层发布:
- **Phase A(TypeScript MCP 服务器):** 允许 LLM 编写 Maltego `.mtgx` 图文件并运行基础 OSINT 查询(whois / DNS / ASN / crt.sh)。图形保存在磁盘上,您可以在 Maltego Desktop 中打开它们。
- **Phase B(`.mtz` 中的 Python TRX 转换):** 直接在 Maltego Desktop 内部添加针对 MISP、TheHive、Cortex 和内置 MITRE ATT&CK 数据集的右键枢轴。参见 [`transforms/README.md`](transforms/README.md)。
这两个阶段共享仓库,除此之外没有其他联系。卸载任一层都不会破坏另一层。
## 安装
```
npm install -g maltego-mcp
```
或从源码安装(Phase B 转换需要):
```
git clone https://github.com/solomonneas/maltego-mcp.git
cd maltego-mcp
npm install
npm run build
```
## 快速开始
全局安装并将其注册到 MCP 客户端:
```
npm install -g maltego-mcp
```
将其添加到您的 MCP 客户端配置中(以 Claude Desktop 为例;相同的 `command` 适用于任何 stdio MCP 客户端):
```
{
"mcpServers": {
"maltego": {
"command": "maltego-mcp"
}
}
}
```
重启客户端,`maltego_*` 工具就会出现。如果是从源码检出,请改为将客户端指向构建的入口点:
```
{
"mcpServers": {
"maltego": {
"command": "node",
"args": ["/absolute/path/to/maltego-mcp/dist/mcp-server.js"]
}
}
}
```
## 工具(Phase 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、前缀、国家、组织
- `maltego_crtsh(domain)` — 证书透明度条目
**便捷扩展器**
- `maltego_expand_ip(ip, outputPath, overwrite?)` — IP + ASN + 网段,保存为 `.mtgx`
- `maltego_expand_domain(domain, outputPath, overwrite?)` — 域名 + whois + DNS + 每个 A 记录的 ASN
- `maltego_build_ioc_graph(ioc, outputPath, ...)` — hash 实体(在后续版本中扩展)
- `maltego_build_ioc_graph(ioc, outputPath, ...)` — 一个 IOC 加上来自其他 MCP 的丰富摘要,保存为 `.mtgx`
### 实体类型
标准 Maltego 本体:`IPv4Address`、`IPv6Address`、`Domain`、`URL`、`Hash`、`EmailAddress`、`Netblock`、`AS`、`Website`、`Company`、`Person`。对于没有标准类型的概念,请使用带有类别前缀的 `Phrase`(`[T1566] Phishing`、`[TheHive] Case #42`)。
### 与其他 MCP 组合
maltego-mcp 不嵌入第三方威胁情报客户端。对于 MISP 事件、ATT&CK 技术和 Cortex 报告等,请调用专用的 MCP(`misp-mcp`、`mitre-mcp`、`cortex-mcp` 等),并将结果通过管道传递给 `maltego_add_entity` / `maltego_add_link`。或者,对于 Maltego 内部的枢轴操作,请安装 Phase 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` | 单次查询的超时时间(以 ms 为单位)(目前仅应用于 `crt.sh`;`whois`、`dns`、`asn` 使用库默认值) |
### Claude Desktop
添加到 `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) 或 `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
```
{
"mcpServers": {
"maltego": {
"command": "maltego-mcp"
}
}
}
```
或者,当从源码检出而不是通过全局 npm 安装运行时:
```
{
"mcpServers": {
"maltego": {
"command": "node",
"args": ["/absolute/path/to/maltego-mcp/dist/mcp-server.js"]
}
}
}
```
重启 Claude Desktop。 `maltego_*` 工具应该会出现。
### Claude Code
```
claude mcp add maltego -- maltego-mcp
```
或从源码检出运行:
```
claude mcp add maltego -- node /absolute/path/to/maltego-mcp/dist/mcp-server.js
```
添加 `--scope user` 以使其能从任何目录使用,而不仅限于当前项目。
### OpenClaw
**推荐:通过 ClawHub 作为 OpenClaw 插件安装。**
```
openclaw plugins install clawhub:maltego
openclaw plugins list # confirm "maltego" is registered
```
这会将相同的包作为原生 OpenClaw 插件安装——工具调用将直接通过插件 SDK 进行,而不是生成单独的 stdio MCP 进程。在 OpenClaw 的插件配置 UI 或 JSON 配置文件中配置 `outputDir` 和 `lookupTimeoutMs`。安装后重启 OpenClaw 网关,以便加载插件。
**或者,注册为 stdio MCP 服务器(手动):**
```
openclaw mcp set maltego '{
"command": "maltego-mcp"
}'
```
或者,当从源码检出运行时:
```
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) 从 `mcp_servers` 键下的 `~/.hermes/config.yaml` 读取 MCP 配置。添加一个条目:
```
mcp_servers:
maltego:
command: "maltego-mcp"
```
或者,当从源码检出运行时:
```
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 服务器:
```
codex mcp add maltego -- maltego-mcp
```
或从源码检出运行:
```
codex mcp add maltego -- node /absolute/path/to/maltego-mcp/dist/mcp-server.js
```
Codex 将条目写入 `[mcp_servers.maltego]` 下的 `~/.codex/config.toml`。使用 `codex mcp list` 进行验证。
## 要求
- Node.js 20+
- Maltego Graph Desktop(基础版、专业版或企业版),以使任一层发挥作用
- 仅 Phase B:Maltego 主机上需有 Python 3.11+
### Maltego 基础版兼容性
默认工作流对基础版友好:使用 Phase 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 连接器:
```
npm run demo:basic
```
输出默认为 `dist/maltego-mcp-basic-soc-demo.mtgx`。在
Maltego Graph Desktop 中打开该文件。要选择不同的路径:
```
npm run demo:basic -- --output ~/MaltegoGraphs/basic-soc-demo.mtgx
```
该演示使用文档安全的指标,例如 `203.0.113.42` 和
`example.invalid`;它旨在证明图形格式和可视化工作流,
而不是执行实时丰富。
## Phase B:Maltego 内部转换 (.mtz)
一个独立的 Python 转换层在 Maltego Desktop 内部直接发布了针对 MISP、TheHive、Cortex 和 ATT&CK 的右键枢轴。完整设置请参见 [`transforms/README.md`](transforms/README.md)。
快速开始(从源码检出,在 Maltego 主机上):
```
npm run setup:transforms # creates transforms/.venv with maltego-trx pinned
npm run build:mtz # writes dist/maltego-mcp-transforms.mtz
# 然后在 Maltego 中:Import -> Configuration -> dist/maltego-mcp-transforms.mtz
```
构建过程将 `transforms/.venv` 的绝对路径固化到清单中,因此 `.mtz` 绑定到构建它的主机。如果移动了仓库,请重新运行 `npm run build:mtz`。
## 示例提示词
调用 `maltego_expand_domain` 并返回保存的 `.mtgx` 的路径。
调用 `maltego_expand_ip`。
调用 `maltego_crtsh` 并返回匹配的证书。
使用如下输入调用 `maltego_build_ioc_graph`:
```
{
"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 转换在桌面客户端中已经打开调查后非常有用,但它们假定由人类来驱动画布,并且对于实时
远程数据,通常需要付费计划或连接器。 maltego-mcp 将图形编写放在
agent 层,以便 LLM 可以根据它已经在推理的指标构建并保存 `.mtgx`,而无需画布点击和连接器要求。如果
您还想要 Maltego 内部的右键枢轴,Phase B 会将它们作为您导入的 `.mtz` 发布。您不必被迫选择:运行 MCP 服务器、转换或
两者兼有。
## 为什么不直接给 LLM 原始的 whois/DNS 工具?
您可以这样做,但这样模型就必须在每次调用时记住 Maltego `.mtgx` XML 格式、
实体本体和链接连线。 maltego-mcp 将其编码一次:
查询返回规范化的字段,图形工具发出有效的 `.mtgx`
并能在 Maltego Desktop 中顺利打开。扩展器将常见的枢轴
(IP 到 ASN 到网段,域名到 whois 到 DNS 到 ASN)捆绑在一个调用中,这样
agent 就不必每次都重新推导它们。
## maltego-mcp 不是什么
- **不是 Maltego 的替代品。** 它生成 `.mtgx` 文件;您仍然需要在 Maltego Graph Desktop 中打开并
驱动它们。
- **不是威胁情报平台。** 它不嵌入 MISP、TheHive、Cortex 或
VirusTotal 客户端。它与这些工具的专用 MCP 组合使用。
- **不是付费连接器的绕道工具。** 实时转换结果仍受限于您的
Maltego 计划和连接器限制。
- **不是批量扫描器。** 查询是旨在构建图形的基础的单目标丰富,
而不是大批量侦察引擎。
## 开发
```
npm test # Phase A unit tests (vitest)
npm run test:integration
npm run test:all
npm run typecheck
npm run test:transforms # Phase B pytest suite
```
## 贡献
欢迎提交 issue 和 pull request。请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解哪些内容容易合并,[SECURITY.md](
) 了解如何私下报告漏洞,以及 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)。
## 许可证
[MIT](LICENSE)
标签:ESC4, GitHub, LLM Agent, Maltego, MCP, MITM代理, OSINT, UDP扫描, 威胁情报, 安全, 实时处理, 开发者工具, 暗色界面, 网络资产测绘, 自动化攻击, 超时处理, 进程管理, 逆向工具