远程MCP服务器

一个支持远程MCP连接并内置GitHub OAuth认证的服务器,可用于构建和部署自定义MCP工具。

  • by ztxtxwd
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ztxtxwd/open-reddit-mcp-server

使用说明

模型上下文协议(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 会询问你是否想要创建一个新的工作者。输入“Y”以创建新的工作者并保存该秘密。

设置一个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的持久化对象(Durable Objects)扩展了基础MCP的功能,提供了:

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

MCP 远程

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

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