Remote MCP Server with GitHub OAuth

by danrthompson

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

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

您可以将其部署到您自己的 Cloudflare 帐户,在创建您自己的 Github OAuth 客户端应用后,您将拥有一个功能齐全的远程 MCP 服务器,并可在此基础上进行构建。用户只需使用他们的 GitHub 帐户登录即可连接到您的 MCP 服务器。

您可以将此作为参考示例,了解如何使用workers-oauth-provider将其他 OAuth 提供程序与部署到 Cloudflare 的 MCP 服务器集成。

MCP 服务器(由Cloudflare Workers提供支持):

  • 充当 MCP 客户端的 OAuth服务器
  • 充当真实OAuth 服务器(在本例中为 GitHub)的 OAuth客户端

入门

直接克隆 repo 并安装依赖项: 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
设置KV命名空间
  • 创建 KV 命名空间: wrangler kv:namespace create "OAUTH_KV"
  • 使用 KV ID 更新 Wrangler 文件
部署和测试

部署 MCP 服务器,使其在您的 workers.dev 域上wrangler deploy

使用Inspector测试远程服务器:

npx @modelcontextprotocol/inspector@latest

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

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

访问控制

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

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

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

从 Claude Desktop 访问远程 MCP 服务器

打开 Claude Desktop,前往“设置”->“开发者”->“编辑配置”。这将打开配置文件,该文件控制 Claude 可以访问哪些 MCP 服务器。

将内容替换为以下配置。重启 Claude Desktop 后,将打开一个浏览器窗口,显示您的 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

要测试本地服务器,请在 Inspector 中输入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

Durable MCP 通过 Cloudflare 的 Durable Objects 扩展了基本 MCP 功能,提供:

  • MCP 服务器的持久状态管理
  • 请求之间的身份验证上下文的安全存储
  • 通过this.props访问已认证用户信息
  • 支持根据用户身份有条件地提供工具
MCP 远程

MCP Remote 库使您的服务器能够公开可由 MCP 客户端(例如 Inspector)调用的工具。它:

  • 定义客户端和服务器之间的通信协议
  • 提供定义工具的结构化方法
  • 处理请求和响应的序列化和反序列化
  • 维护客户端和服务器之间的服务器发送事件 (SSE) 连接
-
security - not tested
-
license - not tested
-
quality - not tested

一个模型上下文协议服务器,支持远程连接并通过 GitHub OAuth 对用户进行身份验证,允许他们根据其 GitHub 身份访问工具。

  1. 入门
    1. 用于生产
    2. 访问控制
    3. 从 Claude Desktop 访问远程 MCP 服务器
    4. 为了地方发展
  2. 它是如何工作的?
    1. OAuth 提供程序
    2. 耐用的 MCP
    3. MCP 远程
ID: bttey7bfuf