Skip to main content
Glama
vorticmateja

mcp-access-oauth

by vorticmateja

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

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

您可以将其部署到自己的 Cloudflare 账户中,创建自己的 Access for SaaS OIDC 应用后,就能获得一个功能完备的远程 MCP 服务器,供用户使用。用户只需通过您的 Access 身份提供商登录,即可连接到您的 MCP 服务器。

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

  • 对您的 MCP 客户端充当 OAuth 服务器

  • 对您的真实 OAuth 服务器(此处为 Access)充当 OAuth 客户端

快速开始

克隆仓库并安装依赖:npm install

生产环境部署

创建一个新的 Access for SaaS OIDC 应用:

  • 对于授权回调 URL,填写 https://mcp-access-oauth.<your-subdomain>.workers.dev/callback;如果在本地开发,则填写 http://localhost:8788/callback。

  • 记下您的客户端 ID 和客户端密钥。

  • 通过 Wrangler 设置密钥

wrangler secret put ACCESS_CLIENT_ID
wrangler secret put ACCESS_CLIENT_SECRET
wrangler secret put ACCESS_TOKEN_URL
wrangler secret put ACCESS_AUTHORIZATION_URL
wrangler secret put ACCESS_JWKS_URL
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-access-oauth.<your-subdomain>.workers.dev/mcp 并点击连接。完成认证流程后,您将看到工具正常显示:

至此,您已成功部署了一个远程 MCP 服务器!

访问控制

该 MCP 服务器使用 Access 进行身份认证。所有通过 Access 认证的用户都可以使用基础工具,如"add"。

"generateImage" 工具则仅限于 ALLOWED_USERNAMES 配置中列出的特定 Access 用户使用:

// Add user emails for image generation access
const ALLOWED_EMAILS = new Set(["employee1@mycompany.com", "teammate1@mycompany.com"]);

从 Claude Desktop 访问远程 MCP 服务器

打开 Claude Desktop,进入设置 -> 开发者 -> 编辑配置。该配置文件控制着 Claude 可以访问哪些 MCP 服务器。

将内容替换为以下配置。重启 Claude Desktop 后,浏览器窗口将打开并显示您的 OAuth 登录页面。完成认证流程后,Claude 即可访问您的 MCP 服务器。认证完成后,工具即可正常使用。

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

当工具(🔨 图标下)出现在界面中后,您就可以让 Claude 使用它们了。例如:"你能用数学工具计算 23 加 19 吗?"。Claude 将调用该工具并显示 MCP 服务器返回的结果。

本地开发

如果您希望在本地环境中进行迭代和测试,可以按以下方式操作。

  • 对于主页 URL,填写 http://localhost:8788

  • 对于授权回调 URL,填写 http://localhost:8788/callback

  • 记下您的客户端 ID 并生成客户端密钥。

  • 在项目根目录创建 .dev.vars 文件,内容如下:

ACCESS_CLIENT_ID=<your client id>
ACCESS_CLIENT_SECRET=<your client secret>
ACCESS_TOKEN_URL=<your Access for SaaS token url>
ACCESS_AUTHORIZATION_URL=<your Access for SaaS authorization url>
ACCESS_JWKS_URL=<your Access for SaaS JWKS url>
COOKIE_ENCRYPTION_KEY=COOKIE_ENCRYPTION_KEY

开发与测试

在本地运行服务器,使其在 http://localhost:8788 上可用 wrangler dev

要测试本地服务器,请在 Inspector 中输入 http://localhost:8788/mcp 并点击连接。按照提示操作后,您就可以看到"工具列表"。

使用 Claude 和其他 MCP 客户端

当您使用 Claude 连接远程 MCP 服务器时,可能会看到一些错误信息。这是因为 Claude Desktop 目前尚不支持远程 MCP 服务器,有时会出现混淆。要确认 MCP 服务器是否已连接,请查看 Claude 界面右下角的 🔨 图标。如果已连接,您应该能在其中看到可用的工具。

使用 Cursor 和其他 MCP 客户端

要在 Cursor 中连接 MCP 服务器,请选择 类型:"命令",并在 命令 字段中组合命令和参数(例如 npx mcp-remote https://<your-worker-name>.<your-subdomain>.workers.dev/mcp)。

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

您还可以通过打开客户端的配置文件,添加与 Claude 配置相同的 JSON 内容,然后重启 MCP 客户端,即可将 MCP 服务器连接到 Windsurf 等其他 MCP 客户端。

Related MCP server: cloudflare-mcp-google-auth

工作原理

OAuth 提供方

OAuth 提供方库为 Cloudflare Workers 提供了完整的 OAuth 2.1 服务器实现。它处理了 OAuth 流程中的所有复杂环节,包括令牌签发、验证和管理。在本项目中,它扮演着双重角色:

  • 对连接到您服务器的 MCP 客户端进行身份认证

  • 管理与 Access 的连接,处理 Access 的 OAuth 服务

安全存储

安全存储模块利用 Cloudflare 的 KV 存储和 Durable Objects,为 OAuth 流程提供可靠的状态管理:

  • 为您的 MCP 服务器提供持久化状态管理

  • 在请求之间安全存储认证上下文

  • 通过 this.props 提供已认证用户的信息访问

  • 支持根据用户身份条件性地开放工具权限

MCP 远程库

MCP 远程库使您的服务器能够向 MCP 客户端(如 Inspector)暴露工具。它:

  • 定义了客户端与服务器之间的通信协议

  • 提供了一种结构化的工具定义方式

  • 处理请求和响应的序列化与反序列化

  • 维护客户端与服务器之间的服务器发送事件(SSE)连接

Related MCP Connectors

Related MCP Servers