synackpwn
服务介绍
丰富 MCP 服务器
这是一个 Model Context Protocol (MCP) 服务器,用于根据提供的可观察对象执行丰富操作。配置的服务和提供的可观察对象将决定使用哪些丰富服务。
此工具提供了一个简单的实现,以使用常见的服务(例如 VirusTotal、Hybrid Analysis 等)进行第三方丰富。
此项目尚未在任何生产环境中使用。
功能
这个 enrichment-mcp MCP 服务器的实现公开了以下工具。
- observable-lookup - 一个通用端点,检查并路由给定的可观察对象到正确的工具。
- lookup-ipaddress - 对给定的 IPv4 地址执行丰富操作。
- lookup-domain - 对给定的域名执行丰富操作。
- lookup-url - 对给定的 URL(在某些情况下是域名)执行丰富操作。
- lookup-email - 对给定的电子邮件地址执行丰富操作。
如果您遇到确定的可观察类型的问题,请创建一个问题或我可以更新当前实现的正则表达式模式。
支持的服务
目前支持以下服务和可观察类型:
如果您有任何建议或认为应实现其他服务,请创建一个问题或拉取请求!
| 名称 | 需要 API 密钥 | 支持 IP | 支持域名 | 支持 URL | 支持电子邮件 |
|---|---|---|---|---|---|
| VirusTotal | 是 | 是 | 是 | 是 | 否 |
| HybridAnalysis | 是 | 是 | 是 | 是 | 否 |
| AlienVault | 是 | 是 | 是 | 是 | 否 |
| Shodan | 是 | 是 | 是 | 是 | 否 |
| Urlscan.io | 是 | 是 | 是 | 是 | 否 |
| AbuseIPDB | 是 | 是 | 否 | 否 | 否 |
| HaveIBeenPwned | 是 | 否 | 否 | 否 | 是 |
要求
此 MCP 服务实现了一个自定义配置文件,用于确定应使用哪些第三方丰富服务进行可观察对象查找。
由于这纯粹是为了开发/测试,目前在本地 Mac/系统上运行的最简单方法是:
bash
uv run --env-file .env server.py
这要求您使用提供的模板 .env.example 并创建一个新的 .env 文件,其中包含您的密钥。
config.yaml
此项目提供了一个自定义配置文件,我认为它非常容易理解。
首先,复制提供的 config.yaml.example 配置文件,并在使用此服务之前删除 .example 扩展名。
在此配置文件中,有两个主要的数据部分;server 和 enrichments。
默认情况下,所有支持的服务都映射到当前实现的丰富操作类型。目前,唯一的真正丰富操作类型是 lookups,但将来可能会实现其他类型。
在 lookups 下,我们有不同支持的丰富类型。
也就是说,每个单独的服务都可以有一个名为 apikey 的键以及该服务的 API 密钥值,但请考虑不要这样做。
您可以直接在 config.yaml.example 中设置这些键的值,但推荐的方式是使用 .env。
注意:在实现此服务时,强烈建议将密钥设置为环境变量。不要再存储密钥了,傻鹅。
为了让此服务发现这些变量,它们必须采用特定格式。以下是当前支持的变量列表:
- ENRICHMENT_MCP_VIRUSTOTAL_KEY
- ENRICHMENT_MCP_HYBRIDANALYSIS_KEY
- ENRICHMENT_MCP_ALIENVAULT_KEY* ENRICHMENT_MCP_SHODAN_KEY
- ENRICHMENT_MCP_URLSCAN_KEY
- ENRICHMENT_MCP_HIBP_KEY
服务器配置
这里的设置非常少,主要是为了沙箱和测试使用,但通常不需要更改这些设置即可使服务正常工作。
yaml
server:
host: 0.0.0.0 # 主机地址
port: 8000 # 端口
debug: false # 是否启用调试日志
log_level: INFO # 默认日志级别
丰富配置
每个丰富项在我们的配置文件中都位于 enrichments 键下。此外,我还区分了可以执行的不同类型的丰富操作。这意味着,在当前实现中,我们只有一个名为 lookups 的动作类型,但在未来可以扩展为 scans 或 queries 等。
在这些高层次的动作之下,我们列出了可观察类型及其支持该类型的服务列表。目前支持的可观察类型包括:
- ipaddress - IPv4 地址
- domain - 域名或网络位置
- url - 完整的 URL(包含协议等)
- email - 标准电子邮件地址
我们还支持以下类型,但目前尚未实现:
- md5 - 文件 MD5 哈希
- sha1 - 文件 SHA1 哈希
- sha256 - 文件 SHA256 哈希
每个服务必须有一个 name 和一个 template。可以提供 apikey 字段,但建议使用环境变量。
提示模板
每个服务和可观察类型都可以有自己的模板。这些模板位于 templates 目录中,并且所有模板都应存在于这里。
每个定义的服务都有一个使用 jinja2 模板的提示模板。您可以根据需要修改这些模板,但文件名格式必须保持不变。
这些文件具有以下文件名模式。
bash
{service.name}.{enrichment.type}.jinja2
此外,请确保响应对象在模板本身中具有正确的字段,否则您将收到错误。
下面是一个针对 Enrich this IP 91.195.240.94 提示的示例输出,其中包含一些错误:
python
{
"virustotal": "在 virustotal 中查找 IP 91.195.240.94 时发生错误",
"alienvault": "服务: alienvault
IP 地址:
信誉评分: 0
总投票数: ",
"shodan": "服务: shodan
IP 地址: 91.195.240.94
上次分析结果: 2025-04-25T21:02:52.644602
标签
附加信息包括:
- 纬度: 48.13743
- 经度: 11.57549
- ASN: AS47846
- 域名: ["servervps.net"]",
"hybridanalysis": "在 hybridanalysis 中查找 IP 91.195.240.94 时发生错误",
"urlscan": "服务: urlscan
结果: https://urlscan.io/api/v1/result/01966efe-c8fa-74a4-bfc0-1ed479838e85/
统计
-
uniqIPs - 6
-
uniqCountries - 2
-
dataLength - 432561
-
encodedDataLength - 218606
-
requests - 14
页面
- 国家 - DE
- 服务器 - Parking/1.0
- IP - 91.195.240.94
- MIME 类型 - text/html
- 标题 - wearab.orgxa0-xa0Informationen zum Thema wearab.
- URL - https://login.wearab.org/
- tlsValidDays - 364
- tlsAgeDays - 0
- tlsValidFrom - 2025-04-25T00:00:00.000Z
- 域名 - login.wearab.org
- 顶级域名 - wearab.org
- asnname - SEDO-AS SEDO GmbH, DE
- asn - AS47846
- tlsIssuer - Encryption Everywhere DV TLS CA - G2
- 状态 - 200
",
"abuseipdb": "服务: abuseripdb
IP 地址: 91.195.240.94
上次分析结果: 2025-03-30T14:04:45+00:00
评分: 7
用途: 数据中心/网站托管/传输
是否为 Tor: 否
是否列入白名单: 否
ISP: Sedo Domain Parking"
}
使用方法
对于使用预构建服务器,请参考此处的说明:https://modelcontextprotocol.io/quickstart/user
-
下载 Claude for Desktop
-
安装 uv
bash
curl -LsSf https://astral.sh/uv/install.sh | sh -
下载此仓库并添加到 Claude for Desktop 配置
- Claude for Desktop > 设置 > 开发者 > 编辑配置
这将在以下位置创建一个配置文件:
bash
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%Claudeclaude_desktop_config.json打开配置文件,使用任意文本编辑器。将文件内容替换为以下内容:
json
{
"mcpServers": {
"enrichment-mcp": {
"command": "/ABSOLUTE/PATH/TO/PARENT/FOLDER/uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/CLONED/REPOSITORY/enrichment-mcp",
"run",
"server.py"
]
}
}
}
- 重新启动 Claude for Desktop
现在你应该在聊天栏中看到两个图标:一个是锤子图标,显示可用的工具;另一个是连接图标,显示定义的提示和所需输入。
设计
在构建这个服务器时,我正在学习 astral uv 以及 MCP。我确实过度设计了这个项目,但过程很有趣。此外,我还考虑到了未来可能会用到的一些代码,因此在设计时也考虑到了这一点(后续会有更多介绍)。
另外,我特意改用了 Jinja2 模板,因为这可以更好地管理返回的提示/结果,并且同样适用于未来的使用场景。
请提供任何反馈、改进建议或功能请求;非常乐意听取您的意见。
贡献
欢迎贡献!请随时提交拉取请求。
免责声明
此工具仅用于教育和授权测试目的。