使用说明
带Auth0+Vercel的MCP笑话服务器
一个简单的模型上下文协议(MCP)服务器,返回随机编程笑话,用Auth0 OAuth 2.0保护,设计用于与ChatGPT配合使用。
📋 先决条件
- 已安装Node.js 18+
- Vercel帐户(免费):https://vercel.com
- Auth0帐户(免费):https://auth0.com
- ChatGPT Plus或ChatGPT团队(用于自定义GPT/操作)
🚀 快速开始
步骤1:安装依赖项
cd mcp-joke-server
npm install
步骤2:设置Auth0(10分钟)
-
注册Auth0 在https://auth0.com(免费套餐)
-
创建API:
- 首选 应用程序 → 应用程序编程接口
- 点击 创建API
- 姓名:
MCP Joke API - 标识符:
https://mcp-joke-api(这是你的 观众) - 签名算法:
RS256 - 点击 创建
-
创建应用程序:
- 首选 应用程序 → 应用程序
- 点击 创建应用
- 姓名:
ChatGPT MCP Client - 类型: 机器对机器应用
- 选择您的API(
MCP Joke API) - 点击 授权
-
配置应用程序:
- 转到您的应用程序 设置
- 记下:
- 领域 (例如。,
your-tenant.auth0.com) - 客户端ID
- 客户端密钥
- 领域 (例如。,
- 添加 允许的回调URL:
https://chat.openai.com/aip/{YOUR_GPT_ID}/oauth/callback- (稍后您将从ChatGPT获得确切的URL)
- 添加 允许的Web来源:
https://chat.openai.com - 点击 保存更改
-
启用授权码流:
- 在 应用程序设置,滚动到 高级设置
- 点击 资助类型 标签
- 确保 授权码 已检查
- 点击 保存更改
步骤3:部署到Vercel(5分钟)
- 安装Vercel命令行界面:
npm install -g vercel
- 登录Vercel:
vercel login
- 部署:
vercel
按照提示操作:
- 设置和部署? Y
- 什么范围?(选择您的帐户)
- 链接到现有项目? N
- 你的项目叫什么名字?
mcp-joke-server - 您的代码位于哪个目录中?
./ - 想要覆盖这些设置吗? N
- 注意您的部署URL (例如。,
https://mcp-joke-server.vercel.app)
步骤4:在Vercel中配置环境变量
- 转到您的Vercel仪表板:https://vercel.com/dashboard
- 选择您的项目(
mcp-joke-server) - 首选 设置 → 环境变量
- 添加以下变量:
| 变量 | 值 | 示例 |
|---|---|---|
AUTH0_DOMAIN |
您的Auth0域名 | your-tenant.auth0.com |
AUTH0_AUDIENCE |
您的API标识符 | https://mcp-joke-api |
- 点击 保存
- 重新部署 要应用更改:
vercel --prod
步骤5:配置ChatGPT(15分钟)
选项A:创建自定义GPT
- 首选https://chat.openai.com/
- 点击您的个人资料→ 我的GPTs → 创建GPT
- 点击 配置 标签
- 在...之下 行动,单击 创建新操作
选项B:向现有GPT添加操作
- 打开GPT
- 点击 编辑GPT
- 首选 配置 标签
- 在...之下 行动,单击 创建新操作
配置操作
-
导入OpenAPI架构:
- 复制以下内容
openapi.json - 更新
YOUR_VERCEL_URL使用您的实际Vercel URL - 更新
YOUR_AUTH0_DOMAIN使用您的Auth0域 - 粘贴到模式编辑器中
- 复制以下内容
-
配置身份验证:
- 身份验证类型: OAuth
- 点击 添加身份验证
- 客户端ID:(来自Auth0)
- 客户端密码:(来自Auth0)
- 授权URL:
https://YOUR_AUTH0_DOMAIN.auth0.com/authorize - 令牌URL:
https://YOUR_AUTH0_DOMAIN.auth0.com/oauth/token - 范围:(留空或使用
openid profile email) - 代币兑换方式: 默认值(POST请求)
-
保存操作
-
更新Auth0回调URL:
- 保存后,ChatGPT将显示回调URL
- 复制它(看起来像:
https://chat.openai.com/aip/g-XXXXX/oauth/callback) - 返回Auth0→ 您的申请→ 设置
- 将此URL添加到 允许的回调URL
- 点击 保存
🧪 测试
在ChatGPT中测试
- 打开GPT
- 类型: “给我讲个编程笑话”
- 首次使用时,您将被重定向到Auth0进行授权
- 授权后,ChatGPT将调用您的API并返回一个笑话!
使用cURL进行测试(可选)
- 从Auth0获取访问令牌:
curl --request POST \
--url https://YOUR_AUTH0_DOMAIN.auth0.com/oauth/token \
--header 'content-type: application/json' \
--data '{
"client_id":"YOUR_CLIENT_ID",
"client_secret":"YOUR_CLIENT_SECRET",
"audience":"https://mcp-joke-api",
"grant_type":"client_credentials"
}'
- 使用令牌调用API:
curl -X POST https://your-app.vercel.app/mcp/call-tool \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"tool": "get_random_joke"}'
📁 项目结构
mcp-joke-server/
├── api/
│ └── mcp/
│ └── call-tool.js # Main API endpoint with Auth0 verification
├── jokes.txt # Database of jokes
├── openapi.json # OpenAPI spec for ChatGPT
├── package.json # Dependencies
├── vercel.json # Vercel configuration
└── README.md # This file
🔧 运作原理
- 用户询问ChatGPT 开个玩笑
- ChatGPT检查 如果它有有效的OAuth令牌
- 如果不是, ChatGPT重定向 用户到Auth0进行授权
- 用户授权 Auth0中的应用程序
- Auth0返回 ChatGPT的授权码
- ChatGPT交易所 访问令牌代码
- ChatGPT调用 您的Vercel端点带有Bearer令牌
- 您的API验证 带有Auth0的JWT令牌
- 您的API返回 一个随意的笑话
- ChatGPT显示 给用户的笑话
🎯 后续步骤
一旦成功,您可以:
-
添加更多工具:
- 复制
api/mcp/call-tool.js逻辑 - 添加新的工具处理程序
- 更新
openapi.json随着新业务的开展
- 复制
-
连接到ClickHouse:
- 添加数据库查询工具
- 实施机器人检测
- 添加钱包分析
-
增强安全性:
- 添加速率限制
- 实现用户特定范围
- 添加审核日志记录
🐛 故障排除
“无效令牌”错误
- 检查一下
AUTH0_DOMAIN和AUTH0_AUDIENCE在Vercel中设置正确 - 验证令牌是否正在发送
Authorization: Bearer TOKEN头球 - 确保您的Auth0 API使用RS256签名算法
“回调URL不匹配”错误
- 确保Auth0中的回调URL与ChatGPT提供的URL完全匹配
- 检查尾部斜线
- 等待几分钟,让Auth0更改传播
“找不到工具”错误
- 验证请求正文是否包括
{"tool": "get_random_joke"} - 检查Vercel日志:
vercel logs
📚 资源
📝 许可证
麻省理工学院