编程笑话服务器

一个简单的MCP服务器,通过Auth0 OAuth 2.0安全认证,返回随机编程笑话,专为ChatGPT设计。

  • by zer0tweets
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 zer0tweets/mcp-joke-server

使用说明

带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分钟)

  1. 注册Auth0 在https://auth0.com(免费套餐)

  2. 创建API:

    • 首选 应用程序 → 应用程序编程接口
    • 点击 创建API
    • 姓名: MCP Joke API
    • 标识符: https://mcp-joke-api (这是你的 观众)
    • 签名算法: RS256
    • 点击 创建
  3. 创建应用程序:

    • 首选 应用程序 → 应用程序
    • 点击 创建应用
    • 姓名: ChatGPT MCP Client
    • 类型: 机器对机器应用
    • 选择您的API(MCP Joke API)
    • 点击 授权
  4. 配置应用程序:

    • 转到您的应用程序 设置
    • 记下:
      • 领域 (例如。, your-tenant.auth0.com)
      • 客户端ID
      • 客户端密钥
    • 添加 允许的回调URL: https://chat.openai.com/aip/{YOUR_GPT_ID}/oauth/callback
      • (稍后您将从ChatGPT获得确切的URL)
    • 添加 允许的Web来源: https://chat.openai.com
    • 点击 保存更改
  5. 启用授权码流:

    • 在 应用程序设置,滚动到 高级设置
    • 点击 资助类型 标签
    • 确保 授权码 已检查
    • 点击 保存更改

步骤3:部署到Vercel(5分钟)

  1. 安装Vercel命令行界面:
npm install -g vercel
  1. 登录Vercel:
vercel login
  1. 部署:
vercel

按照提示操作:

  • 设置和部署? Y
  • 什么范围?(选择您的帐户)
  • 链接到现有项目? N
  • 你的项目叫什么名字? mcp-joke-server
  • 您的代码位于哪个目录中? ./
  • 想要覆盖这些设置吗? N
  1. 注意您的部署URL (例如。, https://mcp-joke-server.vercel.app)

步骤4:在Vercel中配置环境变量

  1. 转到您的Vercel仪表板:https://vercel.com/dashboard
  2. 选择您的项目(mcp-joke-server)
  3. 首选 设置 → 环境变量
  4. 添加以下变量:
变量 值 示例
AUTH0_DOMAIN 您的Auth0域名 your-tenant.auth0.com
AUTH0_AUDIENCE 您的API标识符 https://mcp-joke-api
  1. 点击 保存
  2. 重新部署 要应用更改:
vercel --prod

步骤5:配置ChatGPT(15分钟)

选项A:创建自定义GPT

  1. 首选https://chat.openai.com/
  2. 点击您的个人资料→ 我的GPTs → 创建GPT
  3. 点击 配置 标签
  4. 在...之下 行动,单击 创建新操作

选项B:向现有GPT添加操作

  1. 打开GPT
  2. 点击 编辑GPT
  3. 首选 配置 标签
  4. 在...之下 行动,单击 创建新操作

配置操作

  1. 导入OpenAPI架构:

    • 复制以下内容 openapi.json
    • 更新 YOUR_VERCEL_URL 使用您的实际Vercel URL
    • 更新 YOUR_AUTH0_DOMAIN 使用您的Auth0域
    • 粘贴到模式编辑器中
  2. 配置身份验证:

    • 身份验证类型: 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请求)
  3. 保存操作

  4. 更新Auth0回调URL:

    • 保存后,ChatGPT将显示回调URL
    • 复制它(看起来像: https://chat.openai.com/aip/g-XXXXX/oauth/callback)
    • 返回Auth0→ 您的申请→ 设置
    • 将此URL添加到 允许的回调URL
    • 点击 保存

🧪 测试

在ChatGPT中测试

  1. 打开GPT
  2. 类型: “给我讲个编程笑话”
  3. 首次使用时,您将被重定向到Auth0进行授权
  4. 授权后,ChatGPT将调用您的API并返回一个笑话!

使用cURL进行测试(可选)

  1. 从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"
  }'
  1. 使用令牌调用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

🔧 运作原理

  1. 用户询问ChatGPT 开个玩笑
  2. ChatGPT检查 如果它有有效的OAuth令牌
  3. 如果不是, ChatGPT重定向 用户到Auth0进行授权
  4. 用户授权 Auth0中的应用程序
  5. Auth0返回 ChatGPT的授权码
  6. ChatGPT交易所 访问令牌代码
  7. ChatGPT调用 您的Vercel端点带有Bearer令牌
  8. 您的API验证 带有Auth0的JWT令牌
  9. 您的API返回 一个随意的笑话
  10. ChatGPT显示 给用户的笑话

🎯 后续步骤

一旦成功,您可以:

  1. 添加更多工具:

    • 复制 api/mcp/call-tool.js 逻辑
    • 添加新的工具处理程序
    • 更新 openapi.json 随着新业务的开展
  2. 连接到ClickHouse:

    • 添加数据库查询工具
    • 实施机器人检测
    • 添加钱包分析
  3. 增强安全性:

    • 添加速率限制
    • 实现用户特定范围
    • 添加审核日志记录

🐛 故障排除

“无效令牌”错误

  • 检查一下 AUTH0_DOMAIN 和 AUTH0_AUDIENCE 在Vercel中设置正确
  • 验证令牌是否正在发送 Authorization: Bearer TOKEN 头球
  • 确保您的Auth0 API使用RS256签名算法

“回调URL不匹配”错误

  • 确保Auth0中的回调URL与ChatGPT提供的URL完全匹配
  • 检查尾部斜线
  • 等待几分钟,让Auth0更改传播

“找不到工具”错误

  • 验证请求正文是否包括 {"tool": "get_random_joke"}
  • 检查Vercel日志: vercel logs

📚 资源


📝 许可证

麻省理工学院