远程MCP服务器

一个支持GitHub OAuth的远程Model Context Protocol服务器,可用于构建和扩展MCP工具。

  • by alice-cloudflare
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 alice-cloudflare/mcp-github-oauth

使用说明

模型上下文协议(MCP)服务器 + GitHub OAuth

这是一个 模型上下文协议(MCP) 支持远程MCP连接的服务器,内置Github OAuth。

您可以将其部署到您自己的Cloudflare账户中,创建完自己的GitHub OAuth客户端应用程序后,您将拥有一个功能齐全的远程MCP服务器,可以在此基础上进行开发。用户将能够通过使用他们的GitHub账户登录来连接到您的MCP服务器。

你可以将此作为参考示例,了解如何使用(此处原文未完整,假设后续内容为相关方法或工具)将其他OAuth提供商与部署在Cloudflare上的MCP服务器进行集成 workers-oauth-provider 图书馆。

MCP服务器(由……提供支持) Cloudflare Workers(云防护网络工作者)):

  • 作为OAuth(的一种) 服务器 给您的MCP客户端
  • 作为OAuth(认证授权) 客户 致你的 真实的 OAuth服务器(在此情况下为GitHub)

入门指南

直接克隆仓库并安装依赖项: npm install。

或者,您可以使用以下命令行在本地机器上创建远程MCP服务器:

npm create cloudflare@latest -- my-mcp-server --template=cloudflare/ai/demos/remote-mcp-github-oauth

用于生产

创建一个新的 GitHub OAuth 应用:

  • 对于主页URL,请指定 https://mcp-github-oauth.<your-subdomain>.workers.dev
  • 对于授权回调URL,请指定 https://mcp-github-oauth.<your-subdomain>.workers.dev/callback
  • 记下您的客户端ID并生成客户端密钥。
  • 通过 Wrangler 设置秘密
wrangler secret put GITHUB_CLIENT_ID
wrangler secret put GITHUB_CLIENT_SECRET
wrangler secret put COOKIE_ENCRYPTION_KEY # add any random string here e.g. openssl rand -hex 32

[!重要] 当你创建第一个密钥时,Wrangler 会询问你是否想要创建一个新的 Worker。输入“Y”以创建新的 Worker 并保存该密钥。

设置一个KV命名空间

  • 创建KV命名空间: wrangler kv namespace create "OAUTH_KV"
  • 使用KV ID更新Wrangler文件

部署与测试

部署MCP服务器,使其在workers.dev域名上可用 wrangler deploy

使用(工具/方法)测试远程服务器 检查员:

npx @modelcontextprotocol/inspector@latest

输入 https://mcp-github-oauth.<your-subdomain>.workers.dev/sse 然后点击连接。一旦您完成了身份验证流程,您就会看到工具正在运行:

您现在已经部署了一个远程MCP服务器!

访问控制

这个MCP服务器使用GitHub OAuth进行身份验证。所有经过身份验证的GitHub用户都可以访问基本工具,如“add”和“userInfoOctokit”。

“generateImage”工具仅限于列表中特定的GitHub用户使用 ALLOWED_USERNAMES 配置:

// Add GitHub usernames for image generation access
const ALLOWED_USERNAMES = new Set([
  'yourusername',
  'teammate1'
]);

从Claude Desktop访问远程MCP服务器

打开Claude桌面版,导航至“设置”->“开发者”->“编辑配置”。这将打开控制Claude可以访问的MCP服务器的配置文件。

将内容替换为以下配置。一旦您重启Claude桌面应用,将会打开一个浏览器窗口,显示您的OAuth登录页面。完成认证流程以授予Claude访问您的MCP服务器的权限。授权后,相关工具即可供您使用。

{
  "mcpServers": {
    "math": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp-github-oauth.<your-subdomain>.workers.dev/sse"
      ]
    }
  }
}

一旦工具(位于🔨下方)出现在界面上,你就可以要求Claude使用它们。例如:“你能用数学工具来计算23加19吗?”Claude应该调用该工具,并显示由MCP服务器生成的结果。

用于本地开发

如果您想迭代并测试您的MCP服务器,您可以在本地开发环境中进行。这将要求您在GitHub上创建另一个OAuth应用程序:

  • 对于主页URL,请指定 http://localhost:8788
  • 对于授权回调URL,请指定 http://localhost:8788/callback
  • 记下您的客户端ID并生成一个客户端密钥。
  • 创建一个 .dev.vars 在项目根目录下创建文件,内容为:
GITHUB_CLIENT_ID=your_development_github_client_id
GITHUB_CLIENT_SECRET=your_development_github_client_secret

开发与测试

在本地运行服务器,以便在 http://localhost:8788 wrangler dev

要测试本地服务器,请输入 http://localhost:8788/sse 进入“检查器”并点击“连接”。按照提示操作后,您将能够“列出工具”。

使用Claude和其他MCP客户端

当你使用Claude连接到你的远程MCP服务器时,可能会看到一些错误信息。这是因为Claude Desktop目前还不支持远程MCP服务器,所以有时会感到困惑。要验证MCP服务器是否已连接,请将鼠标悬停在Claude界面右下角的🔨图标上。你应该能看到你的工具在那里显示。

使用Cursor和其他MCP客户端

要将Cursor连接到您的MCP服务器,请选择 Type“命令”和在 Command 字段,将命令字段和参数字段合并为一个(例如。 npx mcp-remote https://<your-worker-name>.<your-subdomain>.workers.dev/sse)。

请注意,虽然 Cursor 支持 HTTP+SSE 服务器,但它不支持身份验证,因此您仍然需要使用 mcp-remote (并且使用STDIO服务器,而不是HTTP服务器)。

你可以通过打开客户端的配置文件,添加用于设置Claude的相同JSON内容,然后重启MCP客户端,将你的MCP服务器连接到其他MCP客户端,如Windsurf。

它是怎么工作的?

OAuth 提供者

OAuth 提供者库为 Cloudflare Workers 提供了一个完整的 OAuth 2.1 服务器实现。它处理 OAuth 流程中的复杂性,包括令牌的颁发、验证和管理。在这个项目中,它扮演着双重角色:

  • 验证连接到您服务器的MCP客户端
  • 管理与GitHub OAuth服务的连接
  • 在键值存储(KV存储)中安全地存储令牌和认证状态

耐用型MCP(多层陶瓷封装)

持久化MCP通过Cloudflare的持久化对象扩展了基础MCP的功能,提供了:

  • 为您的MCP服务器提供持久化状态管理
  • 在请求之间安全地存储认证上下文
  • 通过(某种方式)访问经过验证的用户信息 this.props
  • 根据用户身份支持有条件地提供工具可用性

MCP 远程(或:MCP 远程控制)

MCP Remote库使您的服务器能够暴露工具,这些工具可以被MCP客户端(如Inspector)调用。它

  • 定义客户端与您的服务器之间的通信协议
  • 提供一种结构化的方式来定义工具
  • 处理请求和响应的序列化与反序列化
  • 维护客户端与服务器之间的服务器发送事件(SSE)连接