谷歌威胁情报MCP服务器(独立)
这是一个独立的MCP(模型上下文协议)服务器,用于与谷歌的威胁情报套件进行交互。它为像克劳德这样的人工智能助手提供了全面的威胁情报功能 本地开发 和 生产云部署 模式。
关键能力:
- 🔍 威胁情报搜索(活动、威胁行为者、恶意软件家族)
- 📁 文件分析和行为报告
- 🌐 域、IP和URL信誉检查
- 🎯 IOC(妥协指标)搜索
- 📊 威胁配置文件和狩猎规则集
建筑
了解GTI MCP服务器在不同部署模式下的工作原理:
组件概述
graph TB
subgraph "MCP Clients"
A1[Claude Desktop]
A2[Cline]
A3[Cursor]
A4[Custom Frontend]
end
subgraph "Transport Layer"
B1[stdio - Local]
B2[SSE/HTTP - Remote]
end
subgraph "GTI MCP Server"
C1[MCP Tools]
C2[VT API Client]
end
D[VirusTotal/GTI API]
A1 --> B1
A2 --> B1
A3 --> B1
A4 --> B2
B1 --> C1
B2 --> C1
C1 --> C2
C2 --> D
style C1 fill:#e1f5ff
style C2 fill:#e1f5ff本地部署流程
对于在本地运行MCP服务器的个人开发人员:
sequenceDiagram
participant Client as MCP Client
participant Server as GTI MCP Server
participant Env as Environment
participant VT as VirusTotal API
Client->>Server: Launch via stdio
Server->>Env: Read VT_APIKEY
Env-->>Server: API Key
Client->>Server: Call tool (e.g., get_file_report)
Server->>VT: API Request with VT_APIKEY
VT-->>Server: Response
Server-->>Client: Tool ResultAPI密钥管理: 服务器读取 VT_APIKEY 启动时的环境变量。
云部署流程
对于部署集中式服务的团队:
sequenceDiagram
participant Frontend as Frontend Client
participant CloudRun as Cloud Run (SSE)
participant Auth as Auth Middleware
participant Server as GTI MCP Server
participant VT as VirusTotal API
Frontend->>CloudRun: Connect to /sse endpoint
CloudRun->>Auth: Validate X-Mcp-Authorization header
Auth-->>CloudRun: Authorized
CloudRun-->>Frontend: SSE Connection Established
Frontend->>CloudRun: Call tool with api_key parameter
CloudRun->>Server: Execute tool
Server->>VT: API Request with client-provided api_key
VT-->>Server: Response
Server-->>CloudRun: Tool Result
CloudRun-->>Frontend: SSE Event with ResultAPI密钥管理: 客户通过 api_key 每个工具调用的参数。服务器通过以下方式对连接进行身份验证 MCP_AUTH_TOKEN 但对VirusTotal请求使用客户端提供的API密钥。
安全说明: 该体系结构允许团队部署共享MCP服务器,同时维护单个用户API配额和访问控制。
特性
收款(威胁)
get_collection_report(id):通过其ID检索特定的收集报告(例如。,report--,threat-actor--).get_entities_related_to_a_collection(id, relationship_name, limit=10):获取给定集合ID的相关实体(域、文件、IP、URL、其他集合)。get_collection_timeline_events(id):检索集合的策划时间线事件。get_collection_rules(id):获取与集合关联的检测规则(YARA和Sigma)。get_collection_feature_matches(id):检索集合的功能匹配项。get_collection_mitre_tree(id):获取集合的MITRE ATT&CK框架树。get_collections_commonalities(ids):查找多个集合之间的共性。create_collection(name, description):创建新的威胁集合。update_collection_attributes(id, attributes):更新集合的元数据和属性。update_iocs_in_collection(id, iocs):更新集合中的妥协指标。search_threats(query, limit=5, order_by="relevance-"):使用GTI查询语法对威胁(集合)执行一般搜索。search_campaigns(query, limit=10, order_by="relevance-"):专门搜索类型的集合campaign.search_threat_actors(query, limit=10, order_by="relevance-"):专门搜索类型的集合threat-actor.search_malware_families(query, limit=10, order_by="relevance-"):专门搜索类型的集合malware-family.search_software_toolkits(query, limit=10, order_by="relevance-"):专门搜索类型的集合software-toolkit.search_threat_reports(query, limit=10, order_by="relevance-"):专门搜索类型的集合report.search_vulnerabilities(query, limit=10, order_by="relevance-"):专门搜索类型的集合vulnerability.
文件
get_file_report(hash):根据文件的MD5、SHA1或SHA256哈希值检索文件的综合分析报告。get_entities_related_to_a_file(hash, relationship_name, limit=10):获取给定文件哈希的相关实体(域、IP、URL、行为等)。get_file_behavior_report(file_behaviour_id):检索文件的特定沙盒行为报告。get_file_behavior_summary(hash):检索文件哈希的所有沙盒行为报告的摘要。analyse_file(file_path):上传并分析文件,返回全面的威胁情报报告。
情报搜索
search_iocs(query, limit=10, order_by="last_submission_date-"):使用高级GTI查询语法搜索妥协指标(文件、URL、域、IP)。search_digital_threat_monitoring(query, limit=10):在数字威胁监控数据中搜索品牌保护、网络钓鱼和冒充威胁。
网络位置(域和IP)
get_domain_report(domain):检索域的综合分析报告。get_entities_related_to_a_domain(domain, relationship_name, limit=10):获取给定域的相关实体。get_ip_address_report(ip_address):检索IPv4或IPv6地址的综合分析报告。get_entities_related_to_an_ip_address(ip_address, relationship_name, limit=10):获取给定IP地址的相关实体。
网址
get_url_report(url):检索URL的综合分析报告。get_entities_related_to_an_url(url, relationship_name, limit=10):获取给定URL的相关实体。
狩猎
get_hunting_ruleset:从Google威胁情报获取狩猎规则集对象。get_entities_related_to_a_hunting_ruleset:检索与给定狩猎规则集相关的实体。
威胁概况
list_threat_profiles:在谷歌威胁情报中列出您的威胁档案。get_threat_profile(profile_id):获取威胁配置文件对象。get_threat_profile_recommendations(profile_id, limit=10):返回与给定威胁配置文件关联的对象列表。get_threat_profile_associations_timeline(profile_id):检索给定威胁配置文件的关联时间线。
快速启动(地方发展)
适用于希望将GTI MCP服务器与Claude Desktop、Cline、Cursor或其他MCP客户端一起使用的开发人员。
先决条件
安装
# Clone the repository
git clone https://github.com/googleSandy/gti-mcp-standalone.git
cd gti-mcp-standalone
# Install with uv (recommended)
uv tool install -e .
# Or run directly without installation
uv run gti_mcpAPI密钥设置
设置 VT_APIKEY 环境变量:
macOS/Linux:
export VT_APIKEY="your-virustotal-api-key"Windows PowerShell:
$Env:VT_APIKEY = "your-virustotal-api-key"永久设置(推荐):
将导出命令添加到shell配置文件中(~/.bashrc, ~/.zshrc,或 ~/.bash_profile):
echo 'export VT_APIKEY="your-virustotal-api-key"' >> ~/.zshrc
source ~/.zshrcMCP客户端配置
克劳德桌面版
编辑 ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"gti": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/gti-mcp-standalone",
"run",
"gti_mcp"
],
"env": {
"VT_APIKEY": "${VT_APIKEY}"
}
}
}
}macOS用户注意事项: 如果您已安装 uv 使用独立安装程序,使用uv二进制文件的完整路径(例如。, /Users/yourusername/.local/bin/uv)而不是仅仅 uv.
克莱恩
编辑 .cline/mcp.json 或使用设置UI:
{
"mcpServers": {
"gti": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/gti-mcp-standalone",
"run",
"gti_mcp"
],
"env": {
"VT_APIKEY": "${VT_APIKEY}"
}
}
}
}光标
编辑 .cursor/mcp.json:
{
"mcpServers": {
"gti": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/gti-mcp-standalone",
"run",
"gti_mcp"
],
"env": {
"VT_APIKEY": "${VT_APIKEY}"
}
}
}
}验证
- 重新启动MCP客户端(Claude Desktop、Cline或Cursor)
- 检查GTI服务器是否出现在MCP工具列表中
- 尝试一个简单的查询:“使用GTI检查google.com的声誉”
如果一切正常,你应该看到谷歌威胁情报的结果!
生产部署(云运行)
对于希望部署集中式GTI MCP服务的团队,多个用户或前端应用程序可以通过SSE(服务器发送事件)访问该服务。
为什么要部署云?
- 集中式服务: 一个部署服务于多个用户/应用程序
- 无本地设置: 用户通过HTTP/SSE连接,无需安装Python或依赖项
- 团队分享: 安全团队可以为多个前端应用程序提供威胁情报
- 可扩展性: Cloud Run可根据需求自动扩展
先决条件
- 启用计费的Google Cloud Platform帐户
- gcloud命令行界面 已安装并配置
- 启用云运行API的项目
部署步骤
1.克隆存储库
git clone https://github.com/googleSandy/gti-mcp-standalone.git
cd gti-mcp-standalone2.配置部署脚本
编辑 gti-remotemcp-deploy.sh 并更新配置部分:
# Edit these three values:
PROJECT_ID="your-gcp-project-id" # Find at console.cloud.google.com
SERVICE_NAME="gti-remotemcp-server" # Name for your Cloud Run service
REGION="us-central1" # Your preferred region3.运行部署
chmod +x gti-remotemcp-deploy.sh
./gti-remotemcp-deploy.sh脚本将:
- 使用Google Cloud Buildpack构建容器
- 部署到云端运行
- 输出服务URL和身份验证令牌
4.保存部署信息
脚本输出:
- 服务URL:
https://gti-remotemcp-server-xyz.a.run.app - SSE端点:
https://gti-remotemcp-server-xyz.a.run.app/sse - 身份验证令牌: 随机生成的用于身份验证的令牌
重要提示: 安全地保存身份验证令牌!你需要它来连接客户。
建筑细部
运输: 通过HTTP的SSE(服务器发送事件)
身份验证:
- 服务器访问:
X-Mcp-Authorization标题与MCP_AUTH_TOKEN - API调用:
api_key每次工具调用时传递的参数
API关键策略:
- 服务器不存储病毒API密钥总数
- 每次工具调用必须包括
api_key参数 - 允许每个用户API配额和访问控制
- 客户端应用程序管理API密钥分发
安全注意事项
- 保护身份验证令牌: 商店
MCP_AUTH_TOKEN安全(环境变量、机密管理器) - 仅限HTTPS: Cloud Run默认强制使用HTTPS
- API密钥处理: 客户端应用程序不应在前端代码中公开VT API密钥
- 访问控制: 考虑添加额外的身份验证层以供生产使用
- 速率限制: VirusTotal强制每个API密钥的速率限制
前端集成
适用于构建连接到部署的Cloud Run服务的自定义前端应用程序的开发人员。
连接概述
- 协议: SSE(服务器发送事件)用于事件,HTTP POST用于JSON-RPC消息
- 运输:
@modelcontextprotocol/sdk/client/sse - 身份验证: 熊式代币
X-Mcp-Authorization头球 - API密钥: 通过
api_key每个工具调用的参数
配置参数
- 服务URL: 您的Cloud Run服务URL+
/sse
- 例子: https://gti-remotemcp-server-xyz.a.run.app/sse
- 身份验证令牌: 这
MCP_AUTH_TOKEN从部署输出 - VT API密钥: VirusTotal API密钥(托管客户端,每个工具调用传递)
React/TypeScript示例
使用MCP SDK完成实施:
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
// Configuration (use environment variables in production)
const MCP_SERVER_URL = process.env.REACT_APP_MCP_SERVER_URL || "https://your-service.a.run.app/sse";
const MCP_AUTH_TOKEN = process.env.REACT_APP_MCP_AUTH_TOKEN || "your-auth-token";
const VT_API_KEY = process.env.REACT_APP_VT_API_KEY || "your-vt-api-key";
// Create SSE transport with authentication
const transport = new SSEClientTransport(
new URL(MCP_SERVER_URL),
{
// Headers for SSE connection (GET request)
eventSourceInit: {
headers: {
"X-Mcp-Authorization": MCP_AUTH_TOKEN,
}
},
// Headers for JSON-RPC messages (POST requests)
requestInit: {
headers: {
"X-Mcp-Authorization": MCP_AUTH_TOKEN,
}
}
}
);
// Create MCP client
const client = new Client(
{
name: "gti-frontend-client",
version: "1.0.0",
},
{
capabilities: {
tools: {},
resources: {},
},
}
);
// Connect to server
async function connectToGTI() {
try {
await client.connect(transport);
console.log("✅ Connected to GTI MCP Server");
return true;
} catch (error) {
console.error("❌ Connection failed:", error);
return false;
}
}
// Example: Call a tool
async function checkFileReputation(fileHash: string) {
try {
const result = await client.callTool({
name: "get_file_report",
arguments: {
hash: fileHash,
api_key: VT_API_KEY // ⚠️ Required: Pass API key with each call
}
});
console.log("File report:", result);
return result;
} catch (error) {
console.error("Tool call failed:", error);
throw error;
}
}
// Example: Search for threats
async function searchThreats(query: string) {
try {
const result = await client.callTool({
name: "search_threats",
arguments: {
query: query,
limit: 10,
api_key: VT_API_KEY // ⚠️ Required: Pass API key with each call
}
});
console.log("Threat search results:", result);
return result;
} catch (error) {
console.error("Search failed:", error);
throw error;
}
}
// Initialize
connectToGTI().then(success => {
if (success) {
// Example usage
checkFileReputation("44d88612fea8a8f36de82e1278abb02f");
searchThreats("APT28");
}
});重要提示:API密钥处理
每次工具调用必须包括 api_key 参数:
const result = await client.callTool({
name: "any_gti_tool",
arguments: {
// ... other tool-specific arguments ...
api_key: VT_API_KEY // ⚠️ Always required
}
});为什么? 云运行部署不存储API密钥。这允许:
- 用户API配额
- 个人访问控制
- 客户端安全密钥管理
安全最佳实践:
- 切勿在前端代码中硬编码API密钥
- 使用环境变量或安全配置
- 考虑后端代理以提高安全性
- 实施适当的关键轮换政策
CORS注意事项
服务器允许通过传递跨源请求 OPTIONS 通过身份验证中间件发出请求。如果您遇到CORS问题:
- 验证您的请求是否包括
X-Mcp-Authorization头球 - 检查浏览器控制台是否存在特定的CORS错误
- 确保您对云运行URL使用HTTPS
- 考虑添加Starlette的
CORSMiddleware如果需要严格的CORS执行
故障排除
连接失败:
- 验证服务URL是否正确(必须以结尾
/sse) - 检查
MCP_AUTH_TOKEN匹配部署输出 - 确保Cloud Run服务正在运行(
gcloud run services list)
工具调用失败:
- 验证
api_key参数包含在参数中 - 检查病毒API总密钥是否有效
- 查看您的VirusTotal帐户的速率限制
身份验证错误:
- 确认
X-Mcp-Authorization标题设置正确 - 重新部署期间未重新生成校验令牌
发展
项目结构
.
├── gti_mcp/
│ ├── __init__.py
│ ├── server.py # Main MCP server implementation
│ ├── utils.py # VirusTotal API utilities
│ └── tools/ # Tool implementations
│ ├── __init__.py
│ ├── collections.py # Threat collections tools
│ ├── files.py # File analysis tools
│ ├── intelligence.py # IOC search tools
│ ├── netloc.py # Domain/IP tools
│ ├── threat_profiles.py
│ └── urls.py # URL analysis tools
├── tests/ # Test suite
│ ├── conftest.py
│ ├── test_tools.py
│ ├── test_utils.py
│ └── test_files_errors.py
├── pyproject.toml # Package configuration
├── Dockerfile # Cloud Run container
├── gti-remotemcp-deploy.sh # Deployment script
└── README.md运行测试
# Install test dependencies
uv pip install -e ".[test]"
# Run all tests
pytest
# Run with coverage
pytest --cov=gti_mcp
# Run specific test file
pytest tests/test_tools.py -v
# Run specific test
pytest tests/test_tools.py::test_get_file_report -v贡献
要修改或扩展此服务器,请执行以下操作:
- 分叉和克隆 存储库
- 创建要素分支:
git checkout -b feature/your-feature - 做出改变 在
gti_mcp/tools/遵循现有模式 - 添加测试 在
tests/对于新功能 - 运行测试 验证:
pytest - 更新README 如果添加新功能或更改API
- 提交更改:使用清晰、描述性的提交消息
- 推送并创建PR 到原始存储库
添加新工具
添加新工具的示例模式:
# In gti_mcp/tools/your_category.py
async def your_new_tool(param1: str, api_key: str) -> dict:
"""
Tool description for MCP clients.
Args:
param1: Description of parameter
api_key: VirusTotal API key (required for cloud deployment)
Returns:
Tool result as dictionary
"""
import vt
async with vt.Client(api_key) as client:
result = await client.your_operation(param1)
return result.to_dict()
# Register in gti_mcp/tools/__init__.py许可和归属
该项目根据 Apache许可证2.0 -看看 许可证 文件以获取详细信息。
原始来源
这是从官方网站上独立提取的谷歌威胁情报MCP服务器 mcp安全 存储库。
原作者: 谷歌安全运营团队 原始存储库: https://github.com/google/mcp-security 原始许可证: Apache 2.0
此独立版本独立维护,但保留所有原始许可和归属。
第三方图书馆
- 主控程序 -模型上下文协议SDK(MIT许可证)
- vt-py -VirusTotal Python SDK(Apache 2.0)
- 斯塔雷特 -ASGI框架(BSD许可证)
- 优维康 -ASGI服务器(BSD许可证)
支持
获取帮助
- 文档: 此README和 MCP协议文件
- 问题: 报告问题 原始mcp安全存储库
- 病毒API总量: API官方文件
常见问题
Q: 我需要付费的VirusTotal帐户吗? A: 不,免费的VirusTotal帐户可以使用。请注意,免费帐户的费率限制较低,即使MCP工具和功能显示为可用,也并非所有工具和功能都能正常工作。
Q: 我可以将其用于OpenAI或其他LLM提供商吗? A: 是的!这是一个MCP服务器。任何兼容MCP的客户端都可以使用它,而不仅仅是Claude。
Q: 我的API密钥在云部署中是否安全? A: 服务器从不存储API密钥。客户每次呼叫都会传递它们,使您能够实施自己的密钥管理策略。
Q: 我可以部署到Cloud Run以外的平台吗? A: 是的!包含的Dockerfile适用于任何容器平台(AWS ECS、Azure容器实例等)。Cloud Run只是默认设置。
Q: 这和最初的mcp安全回购有什么区别? A: 这是GTI组件的独立提取,使其更容易独立部署。原始仓库包含多个安全工具。
______________________________________________________________________
内置于❤️ 使用 模型上下文协议
