您可以使用 Cloudflare Access 保护 模型上下文协议 (MCP) 服务器 ↗。根据管理 MCP 服务器代码和主机名的人员选择一种方法:
| 方法 | 最适用于 | 身份验证处理方 |
|---|---|---|
| 客户托管的第三方 MCP 服务器 | 在您于 Cloudflare 中控制的主机名上运行的第三方 MCP 服务器代码 | 第三方 MCP 服务器 |
| SaaS 托管的第三方 MCP 服务器 | 由支持客户提供 OAuth 或 OIDC 身份设置的提供商托管的第三方 MCP 服务器 | 第三方 MCP 服务器,以 Access 作为 OIDC 提供商 |
当 MCP 服务器运行在您于 Cloudflare 中控制的主机名上,但服务器代码由第三方管理且已处理其自身的 OAuth 流程时,使用此设置。在此设置中,请勿启用 Access 托管 OAuth。您也无需在生成的 Access 应用程序中将 MCP 服务器主机名添加为公共主机名。
- 确保在 Cloudflare DNS 中,MCP 服务器主机名已开启 Proxy status(代理状态)。
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> AI controls(AI 控制)。
- 转到 **MCP servers(MCP 服务器)**选项卡。
- 选择 Add MCP server(添加 MCP 服务器)。
- 输入服务器的名称。
- 在 HTTP URL(HTTP 地址) 中,输入 MCP 服务器 URL,包括 MCP 路径。例如,
https://mcp.example.com/mcp。 - 配置 Access 策略以定义可以使用该 MCP 服务器的用户。
配置用户的身份验证方式:
选择您希望为应用程序启用的身份提供商。
(推荐)如果您计划仅允许通过单一 IdP 进行访问,请开启 Apply instant authentication。最终用户将不会看到 Cloudflare Access 登录页面,Cloudflare 将直接将用户重定向到您的 SSO 登录事件。
- (可选)开启 Authenticate with Cloudflare One Client,允许用户使用其 Cloudflare One Client 会话身份对应用程序进行身份验证。
- 选择 Save and connect server(保存并连接服务器)。
- 如果 MCP 服务器提示您进行身份验证,请完成第三方的 OAuth 流程。
当第三方提供商托管 MCP 服务器并允许您配置自定义 OAuth 或 OIDC 身份提供商时,使用此设置。在此设置中,MCP 服务器针对 Cloudflare Access 实现 OAuth 授权码流程,并接收一个其可用于调用下游服务的 access_token。
以下指南在 Cloudflare Workers 上使用远程 MCP 服务器来演示 Access for SaaS 设置。对于 SaaS 托管的服务器,请遵循您的提供商的设置说明,并使用在步骤 2 中创建的 Access for SaaS 值。当用户使用 MCP 客户端连接到 MCP 服务器时,系统会提示他们登录您的身份提供商,并且仅当他们符合您的 Access 策略时才会被授予访问权限。
- 创建 Zero Trust 组织。
- 配置一次性 PIN 码或连接第三方身份提供商。
若要将我们的示例 MCP 服务器 ↗部署到您的 Cloudflare 账户:
-
选择以下按钮以启动快速启动流程:
-
选择包含您的 Zero Trust 组织的账户。
-
在 **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和其他机密值。 -
选择 Create and deploy(创建并部署)。
MCP 服务器将部署到您的 *.workers.dev 子域,地址为 mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev。系统会在您的 GitHub 或 GitLab 账户上为您的 MCP 服务器建立一个新的 git 仓库,并配置为在您每次向仓库的主分支推送更改或合并拉取请求时自动部署到 Cloudflare。
您可以使用 Wrangler CLI 在本地计算机上创建 MCP 服务器并将其部署到 Cloudflare。
-
打开终端并克隆我们的示例项目:
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(我们将在部署前进行一些更改)。
- 对于 是否要添加 AGENTS.md 文件以帮助 AI 编码工具理解 Cloudflare API?,选择
-
转到项目目录:
cd mcp-server-cf-access -
创建一个 Workers KV 命名空间以存储密钥。如果您想照原样运行示例,绑定(binding)名称应为
OAUTH_KV。npx wrangler kv namespace create "OAUTH_KV"该命令将输出绑定名称和 KV 命名空间 ID:
{ "kv_namespaces": [ { "binding": "OAUTH_KV", "id": "<YOUR_KV_NAMESPACE_ID>" } ] } -
在编辑器中打开
wrangler.jsonc并插入您的OAUTH_KV命名空间 ID:"kv_namespaces": [ { "binding": "OAUTH_KV", "id": "<YOUR_KV_NAMESPACE_ID>" } ], -
您现在可以将 Worker 部署到 Cloudflare 的全球网络:
npx wrangler deploy
Worker 将部署到您的 *.workers.dev 子域,地址为 mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev。
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Applications(应用程序)。
-
选择 Create new application(创建新应用程序)。
-
选择 SaaS application(SaaS 应用程序)。
-
在 **Application(应用程序)**中,输入自定义名称(例如,
MCP server)并选择下方出现的文本框。 -
选择 OIDC 作为身份验证协议。
-
选择 Add application(添加应用程序)。
-
在 **Redirect URLs(重定向 URL)**中,输入您的 MCP 服务器的授权回调 URL。我们的示例 MCP 服务器的回调 URL 是
https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/callback。 -
复制以下值以输入到我们的示例 MCP 服务器中。其他 MCP 服务器可能需要不同的输入值组合。
- Client secret(客户端密钥)
- Client ID(客户端 ID)
- Token endpoint(令牌端点)
- Authorization endpoint(授权端点)
- Key endpoint(密钥端点)
-
(可选)在 **Advanced settings(高级设置)**下,如果您想减少用户需要登录身份提供商的次数,请开启 Refresh tokens(刷新令牌)。
-
配置 Access 策略以定义可以访问该 MCP 服务器的用户。
配置用户的身份验证方式:
选择您希望为应用程序启用的身份提供商。
(推荐)如果您计划仅允许通过单一 IdP 进行访问,请开启 Apply instant authentication。最终用户将不会看到 Cloudflare Access 登录页面,Cloudflare 将直接将用户重定向到您的 SSO 登录事件。
- (可选)开启 Authenticate with Cloudflare One Client,允许用户使用其 Cloudflare One Client 会话身份对应用程序进行身份验证。
-
选择 Create(创建)。
-
向 Access 应用程序端点发起
POST请求:
At least one of the following token permissions is required:Required API token permissions
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": [] }' -
复制响应中返回的
client_id和client_secret。 -
使用您的团队名称和响应中返回的
client_id构建 OAuth 端点 URL:端点 URL Token endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/tokenAuthorization endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/authorizationKey endpoint https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/sso/oidc/<CLIENT_ID>/jwks
您的 MCP 服务器需要执行 OAuth 2.0 授权流程,以从在步骤 2 中创建的 SaaS 应用获取 access_token。在您的 MCP 服务器上设置 OAuth 客户端时,您需要粘贴来自 Access for SaaS 应用的 OAuth 端点和凭据。
若要向我们的示例 MCP 服务器添加 OAuth 端点和凭据:
-
在 Cloudflare 仪表板 ↗中,转到 Workers & Pages 页面。
Go to Workers & Pages ↗ -
选择
mcp-server-cf-accessWorker。 -
转到 Settings(设置)。
-
在 **Variables and Secrets(变量和机密)**下,用从 Access for SaaS 应用获取的相应值更新每个机密。
Workers 机密 SaaS 应用字段 ACCESS_CLIENT_IDClient ID(客户端 ID) ACCESS_CLIENT_SECRETClient secret(客户端密钥) ACCESS_TOKEN_URLToken endpoint(令牌端点) ACCESS_AUTHORIZATION_URLAuthorization endpoint(授权端点) ACCESS_JWKS_URLKey endpoint(密钥端点) -
对于
COOKIE_ENCRYPTION_KEY,您可以使用以下命令生成一个随机字符串:openssl rand -hex 32将此命令的输出输入到
COOKIE_ENCRYPTION_KEY中。
-
创建以下 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 -
当提示输入机密值时,粘贴从 Access for SaaS 应用获取的相应值。
Workers 机密 SaaS 应用字段 ACCESS_CLIENT_IDClient ID ACCESS_CLIENT_SECRETClient secret ACCESS_TOKEN_URLToken endpoint ACCESS_AUTHORIZATION_URLAuthorization endpoint ACCESS_JWKS_URLKey endpoint -
为 cookie 加密密钥生成一个随机字符串:
openssl rand -hex 32将此命令的输出存储在 Workers 机密中:
npx wrangler secret put COOKIE_ENCRYPTION_KEY
现在,您可以使用 Workers AI Playground ↗、MCP 检查器 (MCP inspector) ↗ 或其他支持远程 MCP 服务器的 MCP 客户端连接到您的 MCP 服务器,地址为 https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcp。
若要在 Workers AI Playground 中进行测试:
-
在 **MCP Servers(MCP 服务器)**下,为 MCP 服务器 URL 输入
https://mcp-server-cf-access.<YOUR_SUBDOMAIN>.workers.dev/mcp。 -
选择 Connect(连接)。
-
将出现一个弹出窗口请求访问 MCP 服务器。选择 Approve(批准)。
-
按照提示登录您的身份提供商。
Workers AI Playground 将显示 **Connected(已连接)**状态。MCP 服务器应该成功从 Cloudflare Access 获取 access_token。
要允许 MCP 服务器代表用户向其他自托管应用程序发起经过身份验证的请求,请在下游应用程序上创建一个关联应用令牌(Linked App Token)策略。MCP 服务器会将它从 Access 接收到的 Cf-Access-Jwt-Assertion 标头作为 Cf-Access-Token 标头转发给下游应用程序。