关于 Implementing Streamable HTTP MCP Server with Browser-based OAuth
为 MCP 客户端授权流程提供示例实现的 Streamable HTTP 服务端项目。它通过浏览器和 GitHub OAuth 授权客户端,并处理带有效访问令牌的请求。
主要功能
- 01提供 Streamable HTTP 服务端
- 02通过浏览器进行 GitHub OAuth 授权
- 03验证访问令牌
- 04按会话处理客户端请求
适用场景
- 01构建带 GitHub 登录的 MCP 服务
- 02为客户端请求添加 OAuth 授权
- 03处理带会话标识的请求
MCP 相关
该 MCP 服务通过 Streamable HTTP 接收客户端请求,并实现 `/authorize` 与 `/token` 授权端点。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
还没有获取到工具列表
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
使用基于浏览器的 OAuth 实现 Streamable HTTP MCP 服务
概述
本项目旨在支持 MCP 客户端通过 MCP 服务请求授权。为此,需要为 GitHub 实现自定义 OAuthProvider。
因此,本项目提供:
- 一个 StreamableHTTP 服务
- 使用 GitHub OAuth 进行基于浏览器的客户端授权
- 处理已授权的客户端请求
高层执行流程
流程如下:
- 客户端向 /mcp 端点发送 POST 请求。
- 服务验证 Authorization 标头中包含的访问令牌。如果令牌已过期(或无法识别),服务会返回错误。如果访问令牌有效,服务会继续下一步。
- 如果客户端请求包含有效的 sessionId,服务会使用现有的传输连接;否则,会创建一个带有新 sessionId 的传输连接。服务通过该传输连接处理请求。
授权
服务通过 /authorize 和 /token 端点接收客户端的授权请求。这些端点由实现 OAuthServerProvider 的类提供支持。
对于发往 /authorize 端点的请求,服务的授权提供程序会:
- 生成 PKCE verifier 和 challenge
- 重定向到 GitHub OAuth 端点(必须设置 GITHUB_CLIENT_ID 和 GITHUB_CLIENT_SECRET 环境变量)
- 在回调过程中:
- 使用回调中返回的 code,从 GitHub 获取访问令牌
- 将此访问令牌与 clientId 一并存储
- 生成新的授权码并将其返回给客户端
当客户端携带此授权码访问 /token 端点时,服务会向客户端提供专属的访问令牌。
使用方法
- 克隆此仓库
- 安装依赖
npm install - 前往 GitHub 的 Developer Settings(位于 Settings 下)并创建一个 OAuth 应用。记下 Client ID 和 Client Secret。
- 在本地开发环境中设置 GITHUB_CLIENT_ID 和 GITHUB_CLIENT_SECRET 环境变量。
- 启动 MCP 服务
npx tsx server/index_streamable.ts
评论
支持 Markdown
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。