mcpField
I
Implementing Streamable HTTP MCP Server with Browser-based OAuth

Implementing Streamable HTTP MCP Server with Browser-based OAuth

本地服务
github.com/asibyl开发工具077 周前更新

关于 Implementing Streamable HTTP MCP Server with Browser-based OAuth

为 MCP 客户端授权流程提供示例实现的 Streamable HTTP 服务端项目。它通过浏览器和 GitHub OAuth 授权客户端,并处理带有效访问令牌的请求。

主要功能

  1. 01提供 Streamable HTTP 服务端
  2. 02通过浏览器进行 GitHub OAuth 授权
  3. 03验证访问令牌
  4. 04按会话处理客户端请求

适用场景

  1. 01构建带 GitHub 登录的 MCP 服务
  2. 02为客户端请求添加 OAuth 授权
  3. 03处理带会话标识的请求

MCP 相关

该 MCP 服务通过 Streamable HTTP 接收客户端请求,并实现 `/authorize` 与 `/token` 授权端点。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"mcp_oauth_server_web": {
"command": "npx",
"args": [
"-y",
"tsx"
],
"env": {
"GITHUB_CLIENT_ID": "<GITHUB_CLIENT_ID>",
"GITHUB_CLIENT_SECRET": "<GITHUB_CLIENT_SECRET>"
}
}
}
}
启动命令npx -y tsx
需要配置的环境变量
GITHUB_CLIENT_ID
GITHUB_CLIENT_SECRET密钥

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmtsx

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

使用基于浏览器的 OAuth 实现 Streamable HTTP MCP 服务

概述

本项目旨在支持 MCP 客户端通过 MCP 服务请求授权。为此,需要为 GitHub 实现自定义 OAuthProvider。

因此,本项目提供:

  1. 一个 StreamableHTTP 服务
  2. 使用 GitHub OAuth 进行基于浏览器的客户端授权
  3. 处理已授权的客户端请求
高层执行流程

流程如下:

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

服务通过 /authorize 和 /token 端点接收客户端的授权请求。这些端点由实现 OAuthServerProvider 的类提供支持。

对于发往 /authorize 端点的请求,服务的授权提供程序会:

  1. 生成 PKCE verifier 和 challenge
  2. 重定向到 GitHub OAuth 端点(必须设置 GITHUB_CLIENT_ID 和 GITHUB_CLIENT_SECRET 环境变量)
  3. 在回调过程中:
    • 使用回调中返回的 code,从 GitHub 获取访问令牌
    • 将此访问令牌与 clientId 一并存储
    • 生成新的授权码并将其返回给客户端

当客户端携带此授权码访问 /token 端点时,服务会向客户端提供专属的访问令牌。

使用方法

  1. 克隆此仓库
  2. 安装依赖 npm install
  3. 前往 GitHub 的 Developer Settings(位于 Settings 下)并创建一个 OAuth 应用。记下 Client ID 和 Client Secret。
  4. 在本地开发环境中设置 GITHUB_CLIENT_ID 和 GITHUB_CLIENT_SECRET 环境变量。
  5. 启动 MCP 服务 npx tsx server/index_streamable.ts

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。