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 banner

maltego-mcp

一个允许 LLM 编写 Maltego 图文件并运行基础 OSINT 查询的 MCP 服务器。

网站

npm version ci MCP server license MIT

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扫描, 威胁情报, 安全, 实时处理, 开发者工具, 暗色界面, 网络资产测绘, 自动化攻击, 超时处理, 进程管理, 逆向工具