认证MCP服务器
受Auth0 OAuth保护的远程MCP(模型上下文协议)服务器。它为经过身份验证的用户提供了工具(问候、书写提示)和可选的Gmail访问(列出登录用户的最新电子邮件)。
______________________________________________________________________
先决条件
- Python 3.13+
- 紫外线 (安装)
- Auth0帐户 (用于MCP认证)
- 谷歌云项目 (仅当您需要Gmail工具时)
______________________________________________________________________
端到端设置
1.克隆并安装
git clone
cd auth-mcp-remote
uv sync2.Auth0设置(必需)
您需要Auth0应用程序和API,以便MCP客户端可以进行身份验证。
- 创建Auth0帐户 在 auth0.com 并打开 仪表盘.
- 创建API (这是你的“听众”):
- 应用程序 → 应用程序编程接口 → 创建API - 名称:例如。 Auth MCP Server - 标识符:例如。 https://your-server.example.com/mcp (使用您的真实MCP URL;这是您的 观众) - 签名算法: RS256 → 创建
- 创建应用程序 (针对MCP客户端):
- 应用程序 → 应用程序 → 创建应用 - 名称:例如。 MCP Client - 类型: 机器对机器 (或 本土的 本地客户) - 选择您的API并授权它;授权范围: openid, profile, email - 注意 客户端ID 和 客户端密钥 如果你需要他们为客户
- 注意您的Auth0域 (例如。
your-tenant.auth0.com)从Auth0仪表板。
- 环境变量 (见下面的步骤5):您将设置:
- AUTH0_DOMAIN =您的租户域名(例如。 your-tenant.auth0.com) - AUTH0_AUDIENCE =您设置的API标识符(例如。 https://your-server.example.com/mcp) - RESOURCE_SERVER_URL =与受众相同,或与您的MCP服务器所在的公共URL相同(例如。 https://your-server.example.com/mcp)
3.谷歌云设置(可选,适用于Gmail工具)
只有你愿意的时候才需要 list_my_recent_emails 和 link_my_gmail.
- 创建或选择项目 在 谷歌云控制台.
- 启用Gmail API:
- API和服务 → 图书馆 → 搜索 Gmail API → 启用.
- 配置OAuth同意屏幕:
- API和服务 → OAuth同意屏幕. - 用户类型: 外部的 → 创建. - 应用程序信息:name(例如。 dibya-mcp-gmail),支持电子邮件,开发人员联系方式→ 保存并继续. - 范围 → 添加或删除作用域 → add https://www.googleapis.com/auth/gmail.readonly → 保存并继续. - 测试用户 (如果处于测试模式):添加将使用该应用程序的Gmail地址(例如您自己的)→ 保存并继续. - 摘要 → 返回仪表盘.
- 创建OAuth 2.0凭据:
- API和服务 → 凭证 → 创建凭据 → OAuth客户端ID. - 应用程序类型: 桌面应用 (或 Web应用程序 下面有重定向URI)。 - 名称:例如。 MCP Gmail. - 如果 Web应用程序:低于 授权重定向URI 精确添加: http://localhost:8080/. - 创建 → copy 客户端ID 和 客户端密钥.
- 环境变量 (见步骤5):您将设置:
- GOOGLE_CLIENT_ID =OAuth客户端客户端ID - GOOGLE_CLIENT_SECRET =OAuth客户端密码
4.获取Gmail刷新令牌(可选,适用于Gmail工具)
MCP服务器需要 刷新令牌 由...签发 你的 OAuth客户端(来自Google OAuth Playground的令牌将无法使用)。
- 在Google Cloud中添加重定向URI (如果还没有):
- API和服务 → 凭证 → 您的OAuth 2.0客户端ID。 - 在...之下 授权重定向URI 添加: http://localhost:8080/ (带尾随斜线)→ 保存.
- 运行一次性脚本 从项目根:
uv run python scripts/get_gmail_refresh_token.py- 如果需要,该脚本会打印出要添加的确切重定向URI。 - 按Enter键打开浏览器;使用您要使用其Gmail的Google帐户登录。 - 同意后,脚本会打印一个 刷新令牌。复制它。
- 将Gmail链接到MCP服务器 (在服务器运行并且您通过Auth0身份验证后):
- 调用MCP工具 link_my_gmail 使用该刷新令牌。服务器为您的Auth0用户存储它,以便 list_my_recent_emails 可以工作。
5.环境变量
在项目根目录中,创建 .env 文件(参见 .env.example):
必需(Auth0):
AUTH0_DOMAIN=your-tenant.auth0.com
AUTH0_AUDIENCE=https://your-server.example.com/mcp
RESOURCE_SERVER_URL=https://your-server.example.com/mcp可选(Gmail):
GOOGLE_CLIENT_ID=xxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=xxx可选: GMAIL_TOKEN_STORE_PATH=.gmail_tokens.json (默认情况下;存储每个用户的刷新令牌)。
6.运行服务器
uv run python main.py服务器运行于 http://0.0.0.0:8000/mcp (或您在生产中使用的URL,例如在反向代理后面)。MCP客户端必须使用API的有效Auth0访问令牌(承载器)发送请求。
______________________________________________________________________
MCP工具
| 工具 | 说明 |
|---|---|
greet_user | 按姓名问候经过身份验证的用户。 |
fetch_instructions(prompt_name) | 返回书写模板: write_blog_post, write_social_post, write_video_chapters. |
link_my_gmail(refresh_token) | 使用Google刷新令牌(一次性)链接当前Auth0用户的Gmail。 |
list_my_recent_emails(max_results) | 列出已验证用户的最近Gmail邮件(默认10封,最多20封)。需要先链接Gmail。 |
______________________________________________________________________
故障排除
- “未配置Gmail”\
集 GOOGLE_CLIENT_ID 和 GOOGLE_CLIENT_SECRET 在 .env,然后使用 link_my_gmail 使用来自的刷新令牌 scripts/get_gmail_refresh_token.py.
- “redirect_uri_mismatch”\
精确添加 http://localhost:8080/ 转到您的Google OAuth客户端 授权重定向URI 并保存。
- “此应用程序的请求无效”/“仅限开发人员批准的测试人员”\
OAuth应用程序已在 测试.In API和服务 → OAuth同意屏幕 → 测试用户,添加您的Gmail地址。或 发布应用程序 (在验证完成之前,您将看到“未验证的应用程序”警告)。
- 列出电子邮件时为“未经授权的客户端”\
刷新令牌必须来自 你的 OAuth客户端。买一个新的 uv run python scripts/get_gmail_refresh_token.py 并呼叫 link_my_gmail 再一次。
______________________________________________________________________
技术栈
- FastMCP –MCP服务器
- 身份验证0 –OAuth 2.0用于MCP身份验证
- 谷歌API –链接用户的Gmail只读
- 紫外线 Python依赖管理
