返回市场
远程-mcp-oauth-github

远程-mcp-oauth-github

作者:tubone245 星标更新:2025-11-17

项目介绍

Cloudflare Workers MCP Server with OAuth

用于Claude.ai自定义集成的模型上下文协议(MCP)服务器,运行在Cloudflare Workers上,并使用GitHub OAuth认证。

演示(幻灯片)

https://slide-tubone24.pages.dev/slides/authmcp/1

特性

  • ✅ 支持Claude.ai自定义集成
  • ✅ 完全符合MCP认证规范
  • ✅ OAuth 2.0授权流程(GitHub)
  • ✅ 动态客户端注册(DCR)用于OAuth客户端
  • ✅ OAuth 2.0受保护资源元数据(RFC 9728)
  • ✅ 使用KV存储进行会话管理
  • ✅ 基于权限的访问控制
  • ✅ 用户信息、计算和GitHub仓库访问的MCP工具

架构

graph TB
    subgraph "Claude.ai平台"
        User[用户]
        Claude[Claude.ai]
        MCP[MCP客户端]
    end
    
    subgraph "Cloudflare Workers"
        Worker[MCP OAuth服务器]
        KV[(KV存储)]
        
        subgraph "OAuth端点"
            Auth["/auth"]
            Token["/token"]
            Register["/register"]
            Callback["/callback"]
        end
        
        subgraph "已知端点"
            AuthMeta["/.well-known/oauth-authorization-server"]
            ResourceMeta["/.well-known/oauth-protected-resource"]
        end
        
        subgraph "MCP端点"
            MCPHttp["/mcp"]
            SSE["/sse"]
        end
    end
    
    subgraph "外部服务"
        GitHub[GitHub OAuth API]
        GitHubAPI[GitHub API]
    end
    
    User --> Claude
    Claude --> MCP
    MCP --> Worker
    
    Worker --> Auth
    Worker --> Token
    Worker --> Register
    Worker --> Callback
    Worker --> AuthMeta
    Worker --> ResourceMeta
    Worker --> MCPHttp
    Worker --> SSE
    
    Worker --> KV
    Worker --> GitHub
    Worker --> GitHubAPI
    
    Auth --> GitHub
    Callback --> GitHub
    GitHub --> Callback

认证流程序列图

sequenceDiagram
    participant 用户
    participant Claude as Claude.ai
    participant MCP as MCP客户端
    participant Worker as Cloudflare Worker
    participant KV as KV存储
    participant GitHub as GitHub OAuth

    用户->>Claude: 开始带有集成的对话
    Claude->>MCP: 初始化MCP连接
    MCP->>Worker: GET /.well-known/oauth-protected-resource
    Worker-->>MCP: 返回资源元数据(RFC 9728)
    
    MCP->>Worker: POST /register (动态客户端注册)
    Worker->>KV: 存储客户端凭证
    Worker-->>MCP: 返回client_id & client_secret
    
    注释 over MCP: 生成PKCE code_verifier & code_challenge
    MCP->>用户: 请求授权
    用户->>Worker: GET /auth?client_id=...&redirect_uri=...&code_challenge=...&code_challenge_method=S256
    Worker->>KV: 存储状态、重定向URI及code_challenge
    Worker->>用户: 跳转到GitHub OAuth
    
    用户->>GitHub: 授权应用
    GitHub->>Worker: GET /callback?code=...&state=...
    Worker->>KV: 验证状态
    Worker->>GitHub: 交换代码以获取访问令牌
    GitHub-->>Worker: 返回访问令牌
    Worker->>KV: 存储带有认证上下文的会话
    Worker->>KV: 存储带有PKCE数据的授权码
    Worker->>用户: 带有授权码的跳转
    
    MCP->>Worker: POST /token (交换授权码+code_verifier)
    Worker->>KV: 验证授权码及客户端
    Worker->>Worker: 验证PKCE: SHA256(code_verifier) == code_challenge
    Worker->>KV: 创建MCP访问令牌
    Worker-->>MCP: 返回访问令牌
    
    MCP->>Worker: POST /mcp (带Bearer令牌)
    Worker->>KV: 验证访问令牌
    Worker->>KV: 获取认证上下文
    Worker-->>MCP: 返回MCP响应
    
    MCP->>Claude: 提供工具结果
    Claude->>用户: 显示结果

设置

1. 先决条件

  • Cloudflare账户
  • GitHub账户
  • Node.js 18+
  • Wrangler CLI

2. 设置Cloudflare Worker

登录Cloudflare(如果尚未登录)

npx wrangler auth login

如需更改,请更新wrangler.toml中的worker名称

name = "your-mcp-server-name"

3. 创建GitHub OAuth应用

  1. 前往GitHub设置 > 开发者设置 > OAuth应用
  2. 创建一个新的OAuth应用:
    • 应用名称MCP Auth Demo
    • 主页URLhttps://your-worker.workers.dev
    • 授权回调URLhttps://your-worker.workers.dev/callback
  3. 保存Client ID和Client Secret

4. 创建Cloudflare KV命名空间

npx wrangler kv namespace create "OAUTH_KV"

用生成的ID更新wrangler.toml

[[kv_namespaces]]
binding = "OAUTH_KV"
id = "your-kv-namespace-id"

5. 配置环境变量

使用Wrangler CLI设置以下密钥:

# 设置GitHub OAuth凭证
wrangler secret put GITHUB_CLIENT_ID
wrangler secret put GITHUB_CLIENT_SECRET

# 设置cookie加密密钥(生成一个随机字符串)
wrangler secret put COOKIE_ENCRYPTION_KEY

# 可选:限制特定GitHub用户名的访问(逗号分隔)
wrangler secret put ALLOWED_USERNAMES

6. 部署

# 安装依赖
npm install

# 部署到Cloudflare Workers
npm run deploy

Claude.ai配置

添加自定义集成

  1. 登录Claude.ai(需要团队/企业计划)
  2. 前往设置 > 集成
  3. 点击“添加自定义集成”
  4. 输入以下信息:
    • 名称:MCP Auth Demo
    • MCP服务器URLhttps://your-worker.workers.dev/mcp
    • OAuth授权URLhttps://your-worker.workers.dev/auth
    • OAuth令牌URLhttps://your-worker.workers.dev/token
    • 客户端注册URLhttps://your-worker.workers.dev/register

使用方法

  1. 在Claude中开始新的对话
  2. 启用集成
  3. 当提示时,使用GitHub进行身份验证
  4. MCP工具变得可用

可用工具

1. get_user_info

检索经过身份验证的用户信息。

用户:显示我的用户信息
Claude:使用get_user_info工具...

2. calculate

执行基本算术运算。

用户:计算7的8次方
Claude:使用calculate工具...

3. get_github_repos

列出用户的GitHub仓库。

用户:显示我的GitHub仓库
Claude:使用get_github_repos工具...

OAuth端点

已知端点

  • /.well-known/oauth-authorization-server - OAuth 2.0授权服务器元数据
  • /.well-known/oauth-protected-resource - OAuth 2.0受保护资源元数据(RFC 9728)

OAuth流程端点

  • /auth - 授权端点
  • /callback - OAuth回调端点
  • /token - 令牌交换端点
  • /register - 动态客户端注册端点

MCP端点

  • /mcp - HTTP POST端点用于MCP请求
  • /sse - 用于流传输的Server-Sent Events端点

开发

本地开发

# 启动开发服务器
npm run dev

# 生成TypeScript类型
npm run cf-typegen

测试

你可以使用Claude Code Inspector测试MCP服务器:

  1. 启动Inspector

    npx @modelcontextprotocol/inspector https://your-worker.workers.dev/mcp
    
  2. 测试OAuth 2.0元数据端点

    • 访问https://your-worker.workers.dev/.well-known/oauth-authorization-server
    • 访问https://your-worker.workers.dev/.well-known/oauth-protected-resource
    • 验证RFC 9728合规性
  3. 测试动态客户端注册

    curl -X POST https://your-worker.workers.dev/register \
      -H "Content-Type: application/json" \
      -d '{
        "client_name": "Test MCP Client",
        "redirect_uris": ["urn:ietf:wg:oauth:2.0:oob"]
      }'
    
  4. 测试OAuth流程(使用Inspector):

    • Inspector将自动处理OAuth流程
    • 按照GitHub身份验证提示操作
    • 验证成功的令牌交换
  5. 测试MCP工具: 一旦认证成功,可以在Inspector中测试可用工具:

    • get_user_info - 检索经过身份验证的用户信息
    • calculate - 执行算术运算
    • get_github_repos - 列出GitHub仓库
  6. 验证服务器健康状况

    curl https://your-worker.workers.dev/health
    

Inspector提供了一个全面的界面来测试带有OAuth认证的MCP服务器,使验证所有功能是否正确工作变得容易。

资源

许可证

MIT许可证