跳转到内容
搜索文档

保护 MCP 服务器

最后更新 查看 MarkdownAgent 设置

您可以使用 Cloudflare Access 保护 模型上下文协议 (MCP) 服务器。根据管理 MCP 服务器代码和主机名的人员选择一种方法:

方法 最适用于 身份验证处理方
客户托管的第三方 MCP 服务器 在您于 Cloudflare 中控制的主机名上运行的第三方 MCP 服务器代码 第三方 MCP 服务器
SaaS 托管的第三方 MCP 服务器 由支持客户提供 OAuth 或 OIDC 身份设置的提供商托管的第三方 MCP 服务器 第三方 MCP 服务器,以 Access 作为 OIDC 提供商

客户托管的第三方 MCP 服务器

当 MCP 服务器运行在您于 Cloudflare 中控制的主机名上,但服务器代码由第三方管理且已处理其自身的 OAuth 流程时,使用此设置。在此设置中,请勿启用 Access 托管 OAuth。您也无需在生成的 Access 应用程序中将 MCP 服务器主机名添加为公共主机名。

  1. 确保在 Cloudflare DNS 中,MCP 服务器主机名已开启 Proxy status(代理状态)
  2. Cloudflare 仪表板中,转到 Zero Trust > Access controls(访问控制)> AI controls(AI 控制)
  3. 转到 **MCP servers(MCP 服务器)**选项卡。
  4. 选择 Add MCP server(添加 MCP 服务器)
  5. 输入服务器的名称。
  6. HTTP URL(HTTP 地址) 中,输入 MCP 服务器 URL,包括 MCP 路径。例如,https://mcp.example.com/mcp
  7. 配置 Access 策略以定义可以使用该 MCP 服务器的用户。
  8. 配置用户的身份验证方式:

    1. 选择您希望为应用程序启用的身份提供商

    2. (推荐)如果您计划仅允许通过单一 IdP 进行访问,请开启 Apply instant authentication。最终用户将不会看到 Cloudflare Access 登录页面,Cloudflare 将直接将用户重定向到您的 SSO 登录事件。

    3. (可选)开启 Authenticate with Cloudflare One Client,允许用户使用其 Cloudflare One Client 会话身份对应用程序进行身份验证。
  9. 选择 Save and connect server(保存并连接服务器)
  10. 如果 MCP 服务器提示您进行身份验证,请完成第三方的 OAuth 流程。

SaaS 托管的第三方 MCP 服务器

当第三方提供商托管 MCP 服务器并允许您配置自定义 OAuth 或 OIDC 身份提供商时,使用此设置。在此设置中,MCP 服务器针对 Cloudflare Access 实现 OAuth 授权码流程,并接收一个其可用于调用下游服务的 access_token

以下指南在 Cloudflare Workers 上使用远程 MCP 服务器来演示 Access for SaaS 设置。对于 SaaS 托管的服务器,请遵循您的提供商的设置说明,并使用在步骤 2 中创建的 Access for SaaS 值。当用户使用 MCP 客户端连接到 MCP 服务器时,系统会提示他们登录您的身份提供商,并且仅当他们符合您的 Access 策略时才会被授予访问权限。

前提条件

1. 部署示例 MCP 服务器

若要将我们的示例 MCP 服务器部署到您的 Cloudflare 账户:

  1. 选择以下按钮以启动快速启动流程:

    Deploy to Workers

  2. 选择包含您的 Zero Trust 组织的账户。

  3. 在 **Create an application(创建应用程序)**页面上,配置以下字段:

    • Git account(Git 账户):选择现有账户或连接新的 GitHub 或 GitLab 账户。
    • Create private Git repository(创建私有 Git 仓库):选择项目仓库是公开的还是私有的。
    • Project name(项目名称)mcp-server-cf-access
    • Select KV namespace(选择 KV 命名空间)Create new(新建)
    • Name your KV namespace(命名您的 KV 命名空间)OAUTH_KV

    我们将在后面的步骤中配置 ACCESS_CLIENT_ID 和其他机密值。

  4. 选择 Create and deploy(创建并部署)

MCP 服务器将部署到您的 *.workers.dev 子域,地址为 mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev。系统会在您的 GitHub 或 GitLab 账户上为您的 MCP 服务器建立一个新的 git 仓库,并配置为在您每次向仓库的主分支推送更改或合并拉取请求时自动部署到 Cloudflare。

您可以使用 Wrangler CLI 在本地计算机上创建 MCP 服务器并将其部署到 Cloudflare。

  1. 打开终端并克隆我们的示例项目:

    npm create cloudflare@latest -- mcp-server-cf-access --template=cloudflare/ai/demos/remote-mcp-cf-access

    在设置期间,选择以下选项:

    • 对于 是否要添加 AGENTS.md 文件以帮助 AI 编码工具理解 Cloudflare API?,选择 No
    • 对于 是否要使用 git 进行版本控制?,选择 No
    • 对于 是否要部署您的应用程序?,选择 No(我们将在部署前进行一些更改)。
  2. 转到项目目录:

    cd mcp-server-cf-access
  3. 创建一个 Workers KV 命名空间以存储密钥。如果您想照原样运行示例,绑定(binding)名称应为 OAUTH_KV

    npx wrangler kv namespace create "OAUTH_KV"

    该命令将输出绑定名称和 KV 命名空间 ID:

    {
    	"kv_namespaces": [
    		{
    			"binding": "OAUTH_KV",
    			"id": "<YOUR_KV_NAMESPACE_ID>"
    		}
    	]
    }
  4. 在编辑器中打开 wrangler.jsonc 并插入您的 OAUTH_KV 命名空间 ID:

    "kv_namespaces": [
    	{
    		"binding": "OAUTH_KV",
    		"id": "<YOUR_KV_NAMESPACE_ID>"
    	}
    ],
  5. 您现在可以将 Worker 部署到 Cloudflare 的全球网络:

    npx wrangler deploy

Worker 将部署到您的 *.workers.dev 子域,地址为 mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev

2. 创建 Access for SaaS 应用

  1. Cloudflare 仪表板中,转到 Zero Trust > Access controls(访问控制)> Applications(应用程序)

  2. 选择 Create new application(创建新应用程序)

  3. 选择 SaaS application(SaaS 应用程序)

  4. 在 **Application(应用程序)**中,输入自定义名称(例如,MCP server)并选择下方出现的文本框。

  5. 选择 OIDC 作为身份验证协议。

  6. 选择 Add application(添加应用程序)

  7. 在 **Redirect URLs(重定向 URL)**中,输入您的 MCP 服务器的授权回调 URL。我们的示例 MCP 服务器的回调 URL 是 https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/callback

  8. 复制以下值以输入到我们的示例 MCP 服务器中。其他 MCP 服务器可能需要不同的输入值组合。

    • Client secret(客户端密钥)
    • Client ID(客户端 ID)
    • Token endpoint(令牌端点)
    • Authorization endpoint(授权端点)
    • Key endpoint(密钥端点)
  9. (可选)在 **Advanced settings(高级设置)**下,如果您想减少用户需要登录身份提供商的次数,请开启 Refresh tokens(刷新令牌)。

  10. 配置 Access 策略以定义可以访问该 MCP 服务器的用户。

  11. 配置用户的身份验证方式:

    1. 选择您希望为应用程序启用的身份提供商

    2. (推荐)如果您计划仅允许通过单一 IdP 进行访问,请开启 Apply instant authentication。最终用户将不会看到 Cloudflare Access 登录页面,Cloudflare 将直接将用户重定向到您的 SSO 登录事件。

    3. (可选)开启 Authenticate with Cloudflare One Client,允许用户使用其 Cloudflare One Client 会话身份对应用程序进行身份验证。
  12. 选择 Create(创建)

  1. Access 应用程序端点发起 POST 请求:

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Apps and Policies Write
    Add an Access applicationbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "MCP server",
    		"type": "saas",
    		"saas_app": {
    				"auth_type": "oidc",
    				"redirect_uris": [
    						"https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/callback"
    				],
    				"grant_type": [
    						"authorization_code",
    						"refresh_tokens"
    				],
    				"refresh_token_options": {
    						"lifetime": "90d"
    				}
    		},
    		"policies": [
    				"f174e90a-fafe-4643-bbbc-4a0ed4fc8415"
    		],
    		"allowed_idps": []
    	}'
  2. 复制响应中返回的 client_idclient_secret

  3. 使用您的团队名称和响应中返回的 client_id 构建 OAuth 端点 URL:

    端点 URL
    Token endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/token
    Authorization endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/authorization
    Key endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/jwks

3. 配置您的 MCP 服务器

您的 MCP 服务器需要执行 OAuth 2.0 授权流程,以从在步骤 2 中创建的 SaaS 应用获取 access_token。在您的 MCP 服务器上设置 OAuth 客户端时,您需要粘贴来自 Access for SaaS 应用的 OAuth 端点和凭据。

若要向我们的示例 MCP 服务器添加 OAuth 端点和凭据:

  1. Cloudflare 仪表板中,转到 Workers & Pages 页面。

    Go to Workers & Pages ↗
  2. 选择 mcp-server-cf-access Worker。

  3. 转到 Settings(设置)

  4. 在 **Variables and Secrets(变量和机密)**下,用从 Access for SaaS 应用获取的相应值更新每个机密。

    Workers 机密 SaaS 应用字段
    ACCESS_CLIENT_ID Client ID(客户端 ID)
    ACCESS_CLIENT_SECRET Client secret(客户端密钥)
    ACCESS_TOKEN_URL Token endpoint(令牌端点)
    ACCESS_AUTHORIZATION_URL Authorization endpoint(授权端点)
    ACCESS_JWKS_URL Key endpoint(密钥端点)
  5. 对于 COOKIE_ENCRYPTION_KEY,您可以使用以下命令生成一个随机字符串:

    openssl rand -hex 32

    将此命令的输出输入到 COOKIE_ENCRYPTION_KEY 中。

  1. 创建以下 Workers 机密

    npx wrangler secret put ACCESS_CLIENT_ID
    npx wrangler secret put ACCESS_CLIENT_SECRET
    npx wrangler secret put ACCESS_TOKEN_URL
    npx wrangler secret put ACCESS_AUTHORIZATION_URL
    npx wrangler secret put ACCESS_JWKS_URL
  2. 当提示输入机密值时,粘贴从 Access for SaaS 应用获取的相应值。

    Workers 机密 SaaS 应用字段
    ACCESS_CLIENT_ID Client ID
    ACCESS_CLIENT_SECRET Client secret
    ACCESS_TOKEN_URL Token endpoint
    ACCESS_AUTHORIZATION_URL Authorization endpoint
    ACCESS_JWKS_URL Key endpoint
  3. 为 cookie 加密密钥生成一个随机字符串:

    openssl rand -hex 32

    将此命令的输出存储在 Workers 机密中:

    npx wrangler secret put COOKIE_ENCRYPTION_KEY

4. 测试连接

现在,您可以使用 Workers AI PlaygroundMCP 检查器 (MCP inspector)其他支持远程 MCP 服务器的 MCP 客户端连接到您的 MCP 服务器,地址为 https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcp

若要在 Workers AI Playground 中进行测试:

  1. 转到 Workers AI Playground

  2. 在 **MCP Servers(MCP 服务器)**下,为 MCP 服务器 URL 输入 https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcp

  3. 选择 Connect(连接)

  4. 将出现一个弹出窗口请求访问 MCP 服务器。选择 Approve(批准)

  5. 按照提示登录您的身份提供商。

Workers AI Playground 将显示 **Connected(已连接)**状态。MCP 服务器应该成功从 Cloudflare Access 获取 access_token

后续步骤

要允许 MCP 服务器代表用户向其他自托管应用程序发起经过身份验证的请求,请在下游应用程序上创建一个关联应用令牌(Linked App Token)策略。MCP 服务器会将它从 Access 接收到的 Cf-Access-Jwt-Assertion 标头作为 Cf-Access-Token 标头转发给下游应用程序。

这篇文档对您有帮助吗?