流式HTTP MCP服务器

一个支持基于浏览器的GitHub OAuth授权的流式HTTP MCP服务器,用于处理客户端请求和授权流程。

  • by asibyl
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 asibyl/mcp_oauth_server_web

使用说明

基于浏览器的OAuth实现流式HTTP MCP服务器

概述

本项目的目的是通过MCP服务器支持MCP客户端请求的授权。这需要为GitHub实现一个自定义的OAuthProvider。

因此,该项目提供:

  1. 流式HTTP服务器
  2. 使用GitHub的OAuth进行基于浏览器的客户端授权
  3. 处理授权客户请求

高级执行流程

流程如下:

  1. 客户端向/mcp端点发送POST请求。
  2. 服务器验证Authorization标头中包含的访问令牌。如果它已过期(或无法识别),服务器将返回错误。如果访问令牌有效,服务器将继续下一步。
  3. 如果客户端请求包含有效的sessionId,则服务器将使用现有的传输连接。如果没有,它将创建一个具有新会话ID的传输连接。服务器使用传输连接来处理请求。

授权

服务器通过以下方式接收客户端的授权请求 /authorize 和 /token 端点。这些是通过实现OAuthServerProvider的类来支持的。

对于向 /authorize 端点,服务器身份验证提供程序:

  1. 生成PKCE验证器和质询
  2. 重定向到GitHub OAuth端点(必须设置GitHub_CLIENT_ID和GitHub_LIENT_SECRET环境变量)
  3. 作为回叫的一部分,
    • 使用回调中返回的代码从GitHub获取其访问令牌
    • 将此访问令牌与clientId一起存储
    • 生成一个新的身份验证代码并将其返回给客户端

当客户点击 /token 使用此身份验证代码的端点,服务器向客户端提供自己的访问令牌。

如何使用

  1. 克隆此存储库
  2. 安装依赖项 npm install
  3. 转到GitHub上的开发人员设置(在设置下)并创建OAuth应用程序。注意客户端ID和客户端密码。
  4. 在本地开发环境中设置GITHUB_CLIENT_ID和GITHUB_LIENT_SECRET环境变量。
  5. 启动MCP服务器 npx tsx server/index_streamable.ts