该项目是一个模型上下文协议(MCP)服务器,用于根据提供的可观测数据执行丰富化处理。配置的服务与提供的可观测数据相结合,将决定调用哪些丰富化服务。
此工具提供了一个简单的MCP服务器实现,使用常见的服务(如VirusTotal、Hybrid Analysis等)进行第三方丰富化处理,利用security-cli Python包来执行丰富化操作或与不同服务通信。
此enrichment-mcp MCP服务器的实现公开了以下工具:
当前支持以下服务和可观测类型:
如果您有任何建议或认为应实现其他服务,请创建一个问题或拉取请求!
| 名称 | 需要API密钥 | 支持IP | 支持域名 | 支持URL | 支持电子邮件 |
|---|---|---|---|---|---|
| VirusTotal | 是 | 是 | 是 | 是 | 否 |
| HybridAnalysis | 是 | 是 | 是 | 是 | 否 |
| AlienVault | 是 | 是 | 是 | 是 | 否 |
| Shodan | 是 | 是 | 是 | 是 | 否 |
| Urlscan.io | 是 | 是 | 是 | 是 | 否 |
| AbuseIPDB | 是 | 是 | 否 | 否 | 否 |
| HaveIBeenPwned | 是 | 否 | 否 | 否 | 是 |
此MCP服务使用security-cli和自定义的config.yaml.example文件来确定支持哪些第三方丰富化服务以供可观测数据查询。
在本地Mac/系统上运行此服务最简单的方法是:
uv run --env-file .env server.py
这需要您使用提供的模板.env.example并创建一个新的包含您的密钥的.env文件。
注意:请查阅security-cli的文档以获取有关配置不同服务的信息。 默认设置对于大多数用例来说已经足够。
注意:强烈建议在实现此服务时将密钥设置为环境变量。停止存储秘密,愚蠢的鹅。
为了让security-cli包能够发现这些变量,它们必须采用特定的格式。以下是目前支持的变量列表:
每个丰富化服务都在securiy-cli配置文件中定义。此外,我还区分了可以执行的不同类型的丰富化。这意味着,在当前实现中,我们有一个名为enrich的操作类型,但在未来可以扩展为诸如扫描或查询等其他类型。
在这些高层次操作之下,我们列出了可观测类型,随后是一系列支持该类型的可用服务。目前支持的可观测类型包括:
我们也支持这些类型,但目前尚未实现:
每个服务都必须具有名称和模板。可以提供apikey字段,但我们建议使用环境变量。
每个服务和可观测类型都可以有自己的响应模板。这些模板位于security-cli的templates目录下,并且所有模板都应存在于这里。
每个定义的服务都有一个使用Jinja2模板的提示模板。您可以根据需要修改这些模板,但文件名格式必须保持不变。
这些文件遵循以下文件名模式:
{service.name}.{enrichment.type}.jinja2
确保响应对象在模板本身中具有正确的字段,否则您将收到错误。
下面是一个带有某些错误的丰富化此IP 91.195.240.94提示的示例输出:
{
"virustotal": "在VirusTotal中查找IP 91.195.240.94时发生错误",
"alienvault": "服务:alienvault\nIP地址:\n信誉评分:0\n总投票数:",
"shodan": "服务:shodan\nIP地址:91.195.240.94\n最后分析结果:2025-04-25T21:02:52.644602\n\n标签\n\n\n附加信息包括:\n\n* 纬度:48.13743\n* 经度:11.57549\n* ASN:AS47846\n* 域名:[\"servervps.net\"]",
"hybridanalysis": "在HybridAnalysis中查找IP 91.195.240.94时发生错误",
"urlscan": "服务:urlscan\n结果:https://urlscan.io/api/v1/result/01966efe-c8fa-74a4-bfc0-1ed479838e85/\n\n统计\n\n* uniqIPs - 6\n\n* uniqCountries - 2\n\n* dataLength - 432561\n\n* encodedDataLength - 218606\n\n* requests - 14\n\n\n页面\n* 国家 - DE\n* 服务器 - Parking/1.0\n* IP - 91.195.240.94\n* MIME类型 - text/html\n* 标题 - wearab.org\xa0-\xa0关于wearab主题的信息。\n* URL - https://login.wearab.org/\n* TLS有效期天数 - 364\n* TLS年龄天数 - 0\n* TLS有效开始时间 - 2025-04-25T00:00:00.000Z\n* 域名 - login.wearab.org\n* 顶级域名 - wearab.org\n* ISP名称 - SEDO-AS SEDO GmbH, DE\n* ASN - AS47846\n* TLS颁发者 - Encryption Everywhere DV TLS CA - G2\n* 状态 - 200\n",
"abuseipdb": "服务:abuseripdb\nIP地址:91.195.240.94\n最后分析结果:2025-03-30T14:04:45+00:00\n分数:7\n用途:数据中心/网络托管/传输\n是否为Tor节点:否\n是否被列入白名单:否\nISP:Sedo Domain Parking"
}
对于使用预构建服务器,从这里获取说明:https://modelcontextprotocol.io/quickstart/user
curl -LsSf https://astral.sh/uv/install.sh | sh
您可以复制提供的.desktop_config.example.json文件
如果您想自己创建,这是Claude桌面版的路径。
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
在任何文本编辑器中打开配置文件。替换文件内容如下:
{
"mcpServers": {
"enrichment-mcp": {
"命令": "/绝对路径/到/父文件夹/uv",
"参数": [
"--directory",
"/绝对路径/到/克隆的仓库/enrichment-mcp",
"run",
"server.py"
]
}
}
}
现在您应该会在聊天栏看到两个图标,一个锤子图标显示可用的工具,另一个连接图标显示定义的提示和所需的输入。
欢迎贡献!请随时提交拉取请求。