jmaciasc-google/gti-mcp-server
GitHub: jmaciasc-google/gti-mcp-server
一个生产就绪的 Google 威胁情报 MCP 服务器,为 LLM Agent 提供 IOC 查询、文件行为分析和域名/IP 信誉检测等接口,支持安全的企业级云端与本地部署。
Stars: 0 | Forks: 0
# Google Threat Intelligence MCP Server
一个用于 Google Threat Intelligence (GTI) 的生产就绪、高度优化的 Model Context Protocol (MCP) 服务器(整合了 VirusTotal 和 Mandiant 的威胁分析功能)。该服务器支持通过 `stdio` 进行本地桌面集成,以及通过 Server-Sent Events (SSE) 进行云原生网络部署,使其能够完全兼容 Google Cloud Run 或任何其他容器原生环境。
## 项目起源与部署理念
本仓库 **100% 基于官方的 Google 开源实现**,该实现托管在 [google/mcp-security](https://github.com/google/mcp-security) 仓库中。
虽然官方项目被设计为一个广泛的、面向开发者的多工具 mono-repo,**但本项目专门为了让非技术用户、安全分析师和 IT 管理员**能够毫无阻碍地在几分钟内部署一个安全的企业级 Google Threat Intelligence (GTI) MCP 服务器而创建。
### 🔍 本仓库与官方 Mono-Repo 的区别
| 功能 / 方面 | 官方 Google `mcp-security` Mono-Repo | 本专用 GTI 项目 |
| :--- | :--- | :--- |
| **项目重点** | 多服务器(SCC、SecOps、SOAR、GTI)开发者工作区。 | **100% 专注于 Google Threat Intelligence (GTI)**。完全去除了不相关的臃肿内容。 |
| **嵌套结构** | 深度嵌套在 `/server/gti` 文件夹下。 | **扁平化至根目录**。干净的 git clone 和运行体验。 |
| **机密安全** | 基本环境变量(存在明文泄露风险)。 | **严格执行使用 Google Secret Manager**。 |
| **云端部署** | 最简化的开发者部署脚手架。 | **生产就绪的 Google Cloud Run 模板**。 |
| **用户引导** | 面向软件开发者和工程师。 | **专为非技术用户设计**,提供对新手友好的命令指南。 |
| **无 Agent 验证** | 需要设置并连接 LLM 桌面客户端。 | 通过动态、自动化的 `verify.sh` 脚本实现 **即时、零 Agent 验证**。 |
## 目录
1. [核心功能](#core-features)
2. [配置与自定义(可选)](#configuration--customization-optional)
3. [本地开发与设置](#local-development--setup)
4. [容器化与 Docker](#containerization--docker)
5. [生产环境 Google Cloud Run 部署(严格的 Secret Manager)](#production-google-cloud-run-deployment-strict-secret-manager)
6. [无需 Agent 的验证](#verification-without-an-agent)
7. [MCP 客户端配置](#mcp-client-configurations)
## 核心功能
此 MCP 服务器向任何兼容的 LLM Agent 公开高性能的威胁情报 endpoint。
### 🔍 情报与追踪
- **`search_iocs(query, limit)`**:使用高级搜索过滤器查询妥协指标。
- **`get_hunting_ruleset`** & **`get_entities_related_to_a_hunting_ruleset`**:访问并映射结构化的威胁检测签名。
### 📁 文件与制品
- **`get_file_report(hash)`**:检查 MD5、SHA1 或 SHA256 哈希,以验证多引擎检测和威胁行为者分类。
- **`get_file_behavior_report(id)`** & **`get_file_behavior_summary(hash)`**:获取深度的沙箱执行数据。
### 🌐 域名、IP 和 URL
- **`get_domain_report(domain)`** & **`get_entities_related_to_a_domain`**:解析被动 DNS 映射、注册商详情和信誉分类。
- **`get_ip_address_report(ip_address)`**:检索地理位置、自治系统号 (ASN) 和检测结果。
- **`get_url_report(url)`** & **`get_entities_related_to_an_url`**:检查特定的 URL。
## 配置与自定义(可选)
本项目已预配置,完全开箱即用。**您无需修改任何这些文件即可进行部署。** 但是,如果您有特定的网络或架构需求,可以自定义这些配置文件:
| 文件路径 | 用途 | 修改详情 |
| :--- | :--- | :--- |
| **`docker-compose.yml`** | 本地容器配置 | 根据需要更改容器端口映射或本地环境引用。 |
| **`Dockerfile`** | 镜像构建规范 | 自定义基础 Python 版本或更新构建阶段的包。 |
## 本地开发与设置
### 前置条件
- Python **3.11** 或更高版本。
- 有效的 Google Threat Intelligence (VirusTotal) API key。
### 快速开始(本地 Python)
1. **克隆仓库并进入目录:**
git clone
cd gti-mcp-server
2. **配置您的 API Key(仅在内存中):**
直接在您的终端会话中导出您的 Google Threat Intelligence API key。该 key 仅存在于您的 shell 临时 RAM 中,从不写入磁盘:
export VT_APIKEY="your_actual_gti_api_key_here"
3. **安装包和依赖项:**
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -e .
4. **在本地运行服务器:**
# 以 stdio 模式运行(默认,用于本地桌面 Agent):
gti-mcp-server
# 以 SSE/HTTP 网络模式运行(用于云模拟或容器测试):
TRANSPORT=sse PORT=8080 gti-mcp-server
## 容器化与 Docker
该服务器打包了高性能、安全的 **多阶段 Docker 构建**。构建器阶段将应用程序打包成 Python wheel,运行阶段将其安装在以受限制的非 root 系统用户(UID 为 10001 的 `mcpuser`)身份运行的精简环境中。
### 1. 构建 Docker 镜像
```
docker build -t gti-mcp-server:latest .
```
### 2. 使用 Docker Compose 运行
使用 Docker Compose 会将容器绑定到端口 `8080`,并从您的 `.env` 文件加载配置:
```
docker compose up -d
```
## 生产环境 Google Cloud Run 部署(严格的 Secret Manager)
本节提供了部署到 Google Cloud Run 的默认安全、分步演练。它使用 **Google Secret Manager** 进行凭据存储,并使用 **GCP IAM OIDC 身份验证** 限制调用(禁止未经身份验证的访问)。
### 步骤 1:设置您的部署变量
将下面的占位符值替换为您的 GCP 详情:
```
PROJECT_ID="your-gcp-project-id" # Your GCP Project ID
REGION="us-central1" # GCP Region to deploy to
REPO="mcp-servers" # Artifact Registry Repository name
IMAGE="gti-mcp-server" # Container Image name
```
### 步骤 2:启用所需的 GCP 服务
启用容器托管和安全密钥存储所需的 Google API:
```
# 设置您的活动 gcloud 项目上下文
gcloud config set project ${PROJECT_ID}
# 启用 Secret Manager、Artifact Registry 和 Cloud Run API
gcloud services enable \
secretmanager.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com
```
### 步骤 3:在 Google Secret Manager 中保护您的 API Key
创建一个托管密钥,以安全地托管您的 Google Threat Intelligence (VirusTotal) API key:
1. **创建 Secret 容器:**
gcloud secrets create VT_APIKEY --replication-policy="automatic"
2. **将您的 API key 值添加为密钥的版本 1:**
*将 `YOUR_ACTUAL_GTI_API_KEY` 替换为您的实际 token:*
echo -n "YOUR_ACTUAL_GTI_API_KEY" | gcloud secrets versions add VT_APIKEY --data-file=-
### 步骤 4:授予对 Cloud Run Service Account 的访问权限
Cloud Run 服务在指定的 service account 下运行。默认情况下,Cloud Run 使用 **Compute Engine 默认 service account** 来调用其他 GCP API。
1. **获取您的项目编号 (Project Number):**
PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
echo "Your Project Number is: ${PROJECT_NUMBER}"
2. **确定默认的 Service Account Email:**
默认的 service account email 遵循以下模式:`${PROJECT_NUMBER}-compute@developer.gserviceaccount.com`
3. **授予此 service account 密钥访问者权限:**
这授权 Cloud Run 容器在启动时获取并解密密钥:
gcloud secrets add-iam-policy-binding VT_APIKEY \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"
### 步骤 5:部署到 Cloud Run(选择您的路径)
您可以选择以下两条路径中的任意一条来编译和部署您的服务器。**强烈建议非技术用户选择选项 A,因为它不需要 Docker 或手动配置 registry!**
#### 🚀 选项 A:直接的源代码到云端部署(无需本地 Docker)
这是最快、最简单的方法。Google Cloud 将安全地打包您的源代码目录,将其上传,在后台使用您的 `Dockerfile` 运行 **Google Cloud Build**,在底层自动配置一个私有的 Artifact Registry,并部署服务。
只需在您的仓库根目录运行以下单条命令:
```
gcloud run deploy gti-mcp-server \
--source . \
--region=${REGION} \
--platform=managed \
--no-allow-unauthenticated \
--set-secrets="VT_APIKEY=VT_APIKEY:latest" \
--set-env-vars="TRANSPORT=sse,PORT=8080" \
--port=8080
```
#### 🐳 选项 B:传统的 Docker 构建、推送和部署
如果您更喜欢使用在笔记本电脑本地运行的 Docker 来编译、标记和推送容器镜像,请选择此路径:
1. **在 Artifact Registry 中创建 Docker repository:**
gcloud artifacts repositories create ${REPO} \
--repository-format=docker \
--location=${REGION} \
--description="MCP Servers Repository"
2. **验证 Docker 以推送到您的 GCP registry:**
gcloud auth configure-docker ${REGION}-docker.pkg.dev
3. **构建并标记镜像(Intel/AMD64 目标格式):**
docker build --platform linux/amd64 -t ${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO}/${IMAGE}:latest .
4. **将镜像推送到 GCP:**
docker push ${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO}/${IMAGE}:latest
5. **将推送的镜像部署到 Cloud Run:**
gcloud run deploy gti-mcp-server \
--image=${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO}/${IMAGE}:latest \
--region=${REGION} \
--platform=managed \
--no-allow-unauthenticated \
--set-secrets="VT_APIKEY=VT_APIKEY:latest" \
--set-env-vars="TRANSPORT=sse,PORT=8080" \
--port=8080
## 无需 Agent 的验证
由于云服务器禁用了未经身份验证的访问 (`--no-allow-unauthenticated`),标准的公共请求将被阻止。为了验证其是否正常工作,您的请求必须包含 **授权 OIDC Bearer Token**。
### 选项 A:自动本地验证脚本
确保您已通过 `gcloud` 本地登录到您的 GCP 账户,然后运行本地验证脚本,该脚本会自动处理 OIDC token 的生成并查询远程服务器:
```
# 确保脚本可执行
chmod +x verify.sh
# 针对您的远程 Cloud Run URL 运行
HOST="gti-mcp-server-xxxxxx-uc.a.run.app" PORT="443" ./verify.sh
```
### 选项 B:使用 Curl 进行手动验证
1. **生成与您的 Cloud Run 服务 URL 匹配的 Google ID Token:**
TARGET_URL="https://gti-mcp-server-xxxxxx-uc.a.run.app"
ID_TOKEN=$(gcloud auth print-identity-token --audiences="${TARGET_URL}")
2. **建立 SSE 连接(包含 token):**
curl -i -H "Authorization: Bearer ${ID_TOKEN}" "${TARGET_URL}/sse"
*预期响应:*
HTTP/1.1 200 OK
Content-Type: text/event-stream
...
event: endpoint
data: /messages/?session_id=da831f24d35e40a0bb5c3da42903e670
3. **发送 JSON-RPC POST 请求(包含 token):**
curl -s -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${ID_TOKEN}" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 1}' \
"${TARGET_URL}/messages/?session_id=da831f24d35e40a0bb5c3da42903e670"
## MCP 客户端配置
要将此安全的云端部署服务器连接到您的本地桌面 Agent 或云工作流,您必须提供您的 Google OIDC Bearer Token。
### Claude Desktop(连接到安全的 Cloud Run)
更新您的 Claude Desktop 设置 (`~/Library/Application Support/Claude/claude_desktop_config.json`):
```
{
"mcpServers": {
"gti-secure-cloud": {
"url": "https://gti-mcp-server-xxxxxx-uc.a.run.app/sse",
"headers": {
"Authorization": "Bearer YOUR_GOOGLE_OIDC_ID_TOKEN_HERE"
}
}
}
}
```
标签:Google Cloud Run, MCP服务, 威胁情报, 开发者工具, 请求拦截, 逆向工具