Google Gemini Enterprise — A2A MCP 封装器
概述
本仓库展示了 Neo4j 图数据库与 Google Gemini Enterprise 之间基于 Agent-to-Agent (A2A) 协议的生产级集成。此架构采用了去耦合的微服务方案。
-
MCP 工具服务:独立部署在 Google Cloud Run 上的官方 Neo4j 模型上下文协议 (MCP) 服务器。
-
ADK 代理服务:一个封装在 A2A 协议中的定制化 Google 代理开发工具 (ADK) 应用程序,同样托管在 Cloud Run 上。它具有自定义的 Starlette/FastAPI ASGI 中间件层,可直接根据 Google 的身份服务器安全验证终端用户的 OAuth 2.0 访问令牌;此外还配有一个专用的 Neo4j 令牌跟踪数据库,用于监控和限制每个用户的每日 LLM 使用量(可选功能)。
核心功能
-
去耦合架构:将 Neo4j MCP 二进制文件与 Python 推理代理分离,使两个 Cloud Run 服务能够独立扩展。
-
原生图查询:通过 HTTP 使用远程 Neo4j MCP 服务器,自主探索图模式并执行 Cypher 查询。
-
自定义 Python 工具:使用专门的硬编码业务逻辑(例如 get_investments)扩展 MCP 功能。
-
安全令牌验证:纯 ASGI 中间件实时拦截并验证 Gemini Enterprise OAuth 2.0 访问令牌,提取用户的电子邮件地址。
-
精细化令牌管理(可选):使用 ADK 回调来计算每个请求的精确计费令牌,并在辅助 Neo4j 数据库中跟踪每个用户的每日使用限额。
架构流程
-
发现:Gemini Enterprise 发送
/.well-known/agent.json请求。该服务返回详细说明代理技能并确认需要身份验证的 AgentCard(清单)。 -
身份验证:Gemini 提示用户通过 Google OAuth 2.0 登录。
-
执行:Gemini 发送包含用户提示词和
Authorization: Bearer <TOKEN>请求头的POST /请求。 -
验证:自定义 Python 中间件拦截该请求,通过 Google 的 tokeninfo 端点验证令牌,提取用户邮箱,并检查其在跟踪数据库中的每日令牌限额。
-
推理:Google ADK
LlmAgent确定是使用 Neo4j MCP 模式工具还是自定义投资工具来制定响应。 -
跟踪:响应生成后,ADK 回调会捕获确切的令牌使用量并更新跟踪数据库中的用户记录。
先决条件
在部署之前,请确保具备以下条件:
-
已启用结算功能的 Google Cloud 项目。
-
已安装并完成身份验证的 Google Cloud CLI (
gcloud)。 -
具有凭据的 Neo4j 数据库(AuraDB 或自托管)。
-
已启用的 Google Cloud API:
-
Cloud Run API (
run.googleapis.com) -
Secret Manager API (
secretmanager.googleapis.com)
-
第 1 步:部署独立的 Neo4j MCP 服务器
将官方 Neo4j MCP 镜像部署为 Cloud Run 后端服务。我们将主数据库凭据注入此处,以便它能安全地连接到您的图数据库。详细指南请见此处。
gcloud run deploy <INSTANCE_NAME> \
- service-account=mcp-server-sa@<PROJECT_ID>.iam.gserviceaccount.com \
- no-allow-unauthenticated \
- region=<LOCATION> \
- image=docker.io/mcp/neo4j:latest \
- port=80 \
- set-env-vars="NEO4J_MCP_TRANSPORT=http,NEO4J_MCP_HTTP_PORT=80,NEO4J_MCP_HTTP_HOST=0.0.0.0" \
- set-secrets="NEO4J_URI=<URI_SECRET_NAME>:latest,NEO4J_DATABASE=<DATABASE_SECRET_NAME>:latest" \
- min-instances=0 \
- max-instances=1
第 2 步:安全配置 (Secret Manager)
我们使用 Google Cloud Secret Manager 存储凭据。与跟踪相关的凭据是可选的。如果您希望跟踪令牌使用情况,请将环境变量 TRACK_TOKEN_USAGE 设置为 True。
echo -n "your-tracking-db-uri" | gcloud secrets create TRACKING_NEO4J_URI --data-file=-
echo -n "tracking-db-username" | gcloud secrets create TRACKING_NEO4J_USER --data-file=-
echo -n "tracking-db-password" | gcloud secrets create TRACKING_NEO4J_PASS --data-file=-
echo -n "daily token limit value" | gcloud secrets create DAILY_TOKEN_LIMIT --data-file=-
echo -n "your-google-api-key" | gcloud secrets create GOOGLE_API_KEY --data-file=-
echo -n "https://your-mcp-cloud-run-url/mcp" | gcloud secrets create MCP_URL --data-file=-
echo -n "https://your-expected-adk-cloud-run-url" | gcloud secrets create SERVICE_URL --data-file=-
echo -n "neo4j db username" | gcloud secrets create NEO4J_USERNAME --data-file=-
echo -n "neo4j db password" | gcloud secrets create NEO4J_PASSWORD --data-file=-
设置 3:授予 Cloud Run 读取密钥的权限
# Grants the Secret Accessor role to the default Compute Engine service account
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUM=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
gcloud projects add-iam-policy-binding $PROJECT_ID
--member="serviceAccount:${PROJECT_NUM}-compute@developer.gserviceaccount.com"
--role="roles/secretmanager.secretAccessor"
第 4 步:部署 ADK AgentDeployment
将容器部署到 Cloud Run。我们必须使用 --allow-unauthenticated,以便服务能够被公开访问,同时完全依赖我们的 Python 中间件来进行授权。
gcloud run deploy neo4j-a2a-service
--source .
--region us-central1
--allow-unauthenticated
--set-secrets="NEO4J_URI=NEO4J_URI:latest,NEO4J_USERNAME=NEO4J_USERNAME:latest,NEO4J_PASSWORD=NEO4J_PASSWORD:latest,NEO4J_DATABASE=NEO4J_DATABASE:latest,GOOGLE_API_KEY=GOOGLE_API_KEY:latest,SERVICE_URL=SERVICE_URL:latest"
第 3 步:Gemini Enterprise 配置
在 Gemini Enterprise 门户中注册已部署的代理。
-
导航到 Gemini Enterprise 中的添加代理配置页面。
-
提供代理卡(Agent Card),可从(例如:
https://neo4j-a2a-service-xxxx-uc.a.run.app/.well-known/agent.card)检索。 -
将身份验证类型设置为 OAuth 2.0。
-
使用您的 GCP 凭据(API 和服务 → 凭据 → OAuth 2.0 客户端 ID)填写 OAuth 详细信息。
-
客户端 ID:
your-client-id.apps.googleusercontent.com -
客户端密钥:
your-client-secret -
授权 URL:
https://#/o/oauth2/v2/auth -
作用域:
openid email https://www.googleapis.com/auth/cloud-platform
-
-
确保将以下重定向 URI 添加到您的 Google Cloud OAuth 客户端 ID 配置中:
Gemini Enterprise 用户界面。
-
在 Gemini Enterprise 聊天机器人 UI 中提出与您的数据库相关的问题(例如:“@Neo4j-Secured 系统中有多少个用户?”)。
-
Gemini 将提示您登录并通过 OAuth 授权访问您的电子邮件地址。
-
一旦经过身份验证,ADK 代理将处理请求、调用远程 MCP/自定义工具,并将答案流式传输回 UI。
-
(可选)如果用户超过了 Neo4j 跟踪数据库中设置的每日令牌限额,代理将优雅地返回一条“达到限额”的消息。
参考文档
Neo4j • Neo4j & MCP
ADK 代理 • 代理开发工具 (Agent Development Kit)
A2A 协议 • A2A Protocol
Gemini Enterprise & Agents • Gemini for Google Workspace / Enterprise