受控MCP示例-空气质量服务器
我构建这个是为了说明治理 我可以通过Apigee在任何可以通过HTTP访问的MCP服务器上应用。
此仓库包含:
- 一个用python实现的MCP服务器示例,使用 [FastMCP框架
杰洛温](https://github.com/jlowin/fastmcp)服务器提供空气质量 位置的传感器读数。服务器不执行任何授权 检查。
- 一个示例Apigee API代理,作为该服务器的门面,提供
授权检查和401 WWW身份验证拦截。
免责声明
这个例子不是谷歌的官方产品,也不是 谷歌官方产品。
萤幕录影
这个屏幕 走过整个过程。 
使用它
你可以自己做。
要设置此项,您需要一个适用于Cloud Run的GCP项目和一个Apigee 例子您需要正确的角色和权限:
- 创建服务帐户,
- 将服务部署到Cloud Run,
- 在Secret Manager中创建和管理机密
- 并导入+部署Apigee代理。
安装脚本使用apigeecli和gcloud之类的东西。
先决条件
- 您需要获得TomTom和Open Air的证书(API密钥)
通过访问提供优质服务:
- https://developer.tomtom.com/ - https://docs.openaq.org/
- 您需要设置一个OpenID Connect IDP,并配置一个新的
客户端ID和密码对。具体步骤因情况而异 您的IDP。要设置Auth0,您可以尝试 这些步骤.
此示例适用于任何符合OIDC的IDP,但我没有 每个IDP的具体步骤。
- 如果您想使用Gemini CLI作为MCP客户端,您还需要Gemini的API密钥。得到一个在https://ai.studio
您也可以将VSCode用作MCP客户端、MCP检查器或其他客户端。 我没有使用这些选项的说明。
服务和代理配置步骤
- 使用文本编辑器,打开 env-sample.txt 文件,
并修改它以使用您的设置。
关于这些设置:
| 设置 | 描述 |
|---|---|
CLOUDRUN_PROJECT_ID | 将运行示例MCP服务器的GCP项目的ID。 |
CLOUDRUN_REGION | 该地区(例如 us-west1)用于Cloud Run服务 |
APIGEE_PROJECT_ID | 托管Apigee的GCP项目。这可以与Cloud Run项目相同,但并非必须如此 |
APIGEE_ENV | Apigee环境。 |
APIGEE_HOST | Apigee中定义的DNS主机名,将允许调用代理 |
OIDC_SERVER | #OIDC服务器的基础。请参阅下面的评论。 |
TOMTOM_API_KEY | TomTom的API密钥,您可以从中免费获得https://developer.tomtom.com/ |
OPENAQ_API_KEY | 用于Open AQ的API密钥,您可以从中免费获得https://docs.openaq.org/ |
CLOUDRUN_SERVICE_NAME | 云运行服务的名称。 |
CLOUDRUN_SHORT_SA | 云运行服务使用的服务帐户的名称。 |
与OIDC服务器相关:此示例使用OAuth2和授权码授权。它要求 OpenID连接身份提供者,如Auth0、Entra ID或ForgeRock等。 对于Auth0租户,其值类似于https://dev-RANDOM-CHARS-HERE.us.auth0.com/ .
无论你使用什么,它都应该符合IETF RFC 8414;MCP客户端将调用
GET ${OIDC_SERVER}/.well-known/oauth-authorization-server…以发现授权和令牌端点。这些通常是 /authorize 和 /token ,但并非总是如此。
在获得所有这些设置后,将修改保存到一个文件中,可能命名为 .env.
- 打开终端窗口。
_来源_ 您刚刚保存的修改后的文件,将所有这些设置放入您的环境中。
source .env- 为Cloud Run服务创建服务帐户。
./1-create-service-account-for-mcp-server.sh- 将秘密提供给秘密经理。这些包括
TomTom和OpenAQ密钥。
./2-provision-secrets.sh- 将MCP服务器部署到云端运行
./3-deploy-mcp-to-cloud-run.sh现在,您应该能够与MCP服务器进行交互 在部署脚本发出的端点处。
- 您可以使用 MCP检查员 为了做到这一点。
- 或者,使用 Gemini CLI,打开 或创建文件 ~/.gemini/settings.json 并提供此 配置:
{
"mcpServers": {
"air-quality": {
"httpUrl": "https://air-quality-1923-999999222.us-west1.run.app/mcp"
}
}
....
}将URL替换为Cloud Run服务中的URL。然后,开始 Gemini CLI,您应该能够与MCP服务器进行交互。
- 您还可以将VSCode用作MCP客户端。在这种情况下,请将此用于MCP配置:
{
"servers": {
"air-quality": {
"url": "https://air-quality-1923-999999222.us-west1.run.app/mcp"
"type": "http"
}
},
"inputs": []
}- 如果您还没有,请安装
apigeecli
./8-install-apigeecli.sh- 导入并部署Apigee代理:
./9-import-and-deploy-apigee-proxy.sh此时,如果将Apigee代理配置为MCP端点 并使用您的MCP客户端(Gemini CLI、VSCode、MCP检查器等), 您应该在适当的时候看到OpenID Connect登录。
- 要使用Gemini CLI执行此操作,请修改 ~/.gemini/settings.json 文件到 提供此配置:
{
"mcpServers": {
"air-quality-oauth": {
"httpUrl": "https://apigee.endpoint.for.you/air-quality-oauth/mcp",
"timeout": 4400,
"oauth": {
"enabled": true,
"clientId": "OPENID_CLIENT_ID",
"clientSecret": "OPENID_CLIENT_SECRET",
"audiences": ["air-quality-oauth"]
}
}
}
....
}将URL替换为Apigee代理中的URL,并使用相应的 OpenID IDP中的客户端ID和密码。然后,重新启动Gemini CLI并键入 /mcp auth air-quality-oauth,然后你会看到引援,然后你 将能够与服务交互。
- 如果您将VSCode用作MCP客户端,请停止并重新启动VSCode,以及何时 启动MCP服务器,您将看到登录体验。对于VScode你 不需要修改mcp.json文件,但是 _你需要交互式 提供客户端ID和密码_ 在运行时。
讨论
这只是一个例子。它说明了基础知识。也许你会想 根据你的目的扩展这个想法。以下是一些想法:
- 多个MCP虽然此示例显示单个API代理作为
单个MCP服务器的外观,在一般情况下,公司将有很多 MCP服务器。使用通配符基路径和简单的查找表 使用单个API代理作为大量MCP服务器的门面。
- API产品检查.通过在API中包含VerifyAPIKey策略
代理,您还可以检查客户端对特定API的授权 产品。
- 基于用户的授权检查.通过在策略中包含ServiceCallout
决策点(类似于OPA),您可以包含细粒度的动态 Apigee代理中的授权检查。
许可证
这种材料是 版权所有©2025谷歌有限责任公司. 并根据 Apache 2.0许可证.
支持
这个例子是开源软件。如果 你需要帮助,你可以试试问 谷歌云社区论坛 献给Apigee 没有服务级别 保证对发布到该网站的询问做出回应。
