基于浏览器的OAuth实现流式HTTP MCP服务器
概述
本项目的目的是通过MCP服务器支持MCP客户端请求的授权。这需要为GitHub实现一个自定义的OAuthProvider。
因此,该项目提供:
- 流式HTTP服务器
- 使用GitHub的OAuth进行基于浏览器的客户端授权
- 处理授权客户请求
高级执行流程
流程如下:
- 客户端向/mcp端点发送POST请求。
- 服务器验证Authorization标头中包含的访问令牌。如果它已过期(或无法识别),服务器将返回错误。如果访问令牌有效,服务器将继续下一步。
- 如果客户端请求包含有效的sessionId,则服务器将使用现有的传输连接。如果没有,它将创建一个具有新会话ID的传输连接。服务器使用传输连接来处理请求。
授权
服务器通过以下方式接收客户端的授权请求 /authorize 和 /token 端点。这些是通过实现OAuthServerProvider的类来支持的。
对于向 /authorize 端点,服务器身份验证提供程序:
- 生成PKCE验证器和质询
- 重定向到GitHub OAuth端点(必须设置GitHub_CLIENT_ID和GitHub_LIENT_SECRET环境变量)
- 作为回叫的一部分,
- 使用回调中返回的代码从GitHub获取其访问令牌 - 将此访问令牌与clientId一起存储 - 生成一个新的身份验证代码并将其返回给客户端
当客户点击 /token 使用此身份验证代码的端点,服务器向客户端提供自己的访问令牌。
如何使用
- 克隆此存储库
- 安装依赖项
npm install - 转到GitHub上的开发人员设置(在设置下)并创建OAuth应用程序。注意客户端ID和客户端密码。
- 在本地开发环境中设置GITHUB_CLIENT_ID和GITHUB_LIENT_SECRET环境变量。
- 启动MCP服务器
npx tsx server/index_streamable.ts

