用于Claude.ai自定义集成的模型上下文协议(MCP)服务器,运行在Cloudflare Workers上,并使用GitHub OAuth认证。
https://slide-tubone24.pages.dev/slides/authmcp/1
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->>用户: 显示结果
登录Cloudflare(如果尚未登录)
npx wrangler auth login
如需更改,请更新wrangler.toml中的worker名称
name = "your-mcp-server-name"
MCP Auth Demohttps://your-worker.workers.devhttps://your-worker.workers.dev/callbacknpx wrangler kv namespace create "OAUTH_KV"
用生成的ID更新wrangler.toml:
[[kv_namespaces]]
binding = "OAUTH_KV"
id = "your-kv-namespace-id"
使用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
# 安装依赖
npm install
# 部署到Cloudflare Workers
npm run deploy
https://your-worker.workers.dev/mcphttps://your-worker.workers.dev/authhttps://your-worker.workers.dev/tokenhttps://your-worker.workers.dev/registerget_user_info检索经过身份验证的用户信息。
用户:显示我的用户信息
Claude:使用get_user_info工具...
calculate执行基本算术运算。
用户:计算7的8次方
Claude:使用calculate工具...
get_github_repos列出用户的GitHub仓库。
用户:显示我的GitHub仓库
Claude:使用get_github_repos工具...
/.well-known/oauth-authorization-server - OAuth 2.0授权服务器元数据/.well-known/oauth-protected-resource - OAuth 2.0受保护资源元数据(RFC 9728)/auth - 授权端点/callback - OAuth回调端点/token - 令牌交换端点/register - 动态客户端注册端点/mcp - HTTP POST端点用于MCP请求/sse - 用于流传输的Server-Sent Events端点# 启动开发服务器
npm run dev
# 生成TypeScript类型
npm run cf-typegen
你可以使用Claude Code Inspector测试MCP服务器:
启动Inspector:
npx @modelcontextprotocol/inspector https://your-worker.workers.dev/mcp
测试OAuth 2.0元数据端点:
https://your-worker.workers.dev/.well-known/oauth-authorization-serverhttps://your-worker.workers.dev/.well-known/oauth-protected-resource测试动态客户端注册:
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"]
}'
测试OAuth流程(使用Inspector):
测试MCP工具: 一旦认证成功,可以在Inspector中测试可用工具:
get_user_info - 检索经过身份验证的用户信息calculate - 执行算术运算get_github_repos - 列出GitHub仓库验证服务器健康状况:
curl https://your-worker.workers.dev/health
Inspector提供了一个全面的界面来测试带有OAuth认证的MCP服务器,使验证所有功能是否正确工作变得容易。
MIT许可证