关于 Remote MCP Server on Cloudflare
这是一个在 Cloudflare Workers 上构建和部署远程 MCP 服务的示例,包含 OAuth 登录、示例工具及独立客户端,便于测试连接。
主要功能
- 01OAuth 登录流程
- 02SSE 传输
- 03部署到 Cloudflare Workers
- 04add 和 xkcd 示例工具
- 05独立客户端示例
适用场景
- 01搭建受 OAuth 保护的远程 MCP 服务
- 02使用 MCP Inspector 测试工具
- 03让 Claude Desktop 连接本地或已部署服务
MCP 相关
通过 SSE 向 MCP 客户端提供工具,并支持 OAuth 登录。项目包含 MCP Inspector 和 Claude Desktop 的连接示例。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Cloudflare 上的远程 MCP 服务
让我们在 Cloudflare Workers 上运行一个远程 MCP 服务,并配备 OAuth 登录功能!
本地开发
# clone the repository
git clone [email protected]:hemanth/remote-mcp-server.git
# install dependencies
cd remote-mcp-server
npm install
# run locally
npm run dev
你应该可以在浏览器中打开 http://localhost:8787/
将 MCP Inspector 连接到你的服务
要探索新的 MCP API,可以使用 MCP Inspector。
- 运行
npx @modelcontextprotocol/inspector@latest - 在 Inspector 中,将 Transport Type 切换为
SSE,输入http://localhost:8787/sse作为要连接的 MCP 服务 URL,然后点击“Connect” - 你将进入一个(模拟的)用户名/密码登录页面。输入任意邮箱和密码即可登录。
- 随后你会被重定向回 MCP Inspector,现在可以列出并调用所有已定义的工具!
将 Claude Desktop 连接到本地 MCP 服务
MCP Inspector 很好用,但我们真正想做的是将它连接到 Claude!按照 Anthropic 的快速入门指南操作,然后在 Claude Desktop 中前往“设置” > “开发者” > “编辑配置”以找到配置文件。
用文本编辑器打开该文件,并将其替换为以下配置:
{
"mcpServers": {
"math": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8787/sse"
]
}
}
}
这会运行一个本地代理,让 Claude 通过 HTTP 与你的 MCP 服务通信。
打开 Claude 时,应该会弹出浏览器窗口供你登录。你应该能在右下角看到可用工具。使用合适的提示词时,Claude 应该会请求调用该工具。
部署到 Cloudflare
npx wrangler@latest kv namespace create remote-mcp-server-oauth-kv- 按照说明将 kv 命名空间 ID 添加到
wrangler.jsonc npm run deploy
从远程 MCP 客户端调用新部署的远程 MCP 服务
和上面“本地开发”部分一样,运行 MCP Inspector:
npx @modelcontextprotocol/inspector@latest
然后在 Inspector 中输入你的 Worker 的 workers.dev URL(例如:worker-name.account-name.workers.dev/sse),作为要连接的 MCP 服务 URL,并点击“Connect”。
现在,你已从远程 MCP 客户端连接到 MCP 服务。
使用独立 MCP 客户端示例
此项目包含一个独立 MCP 客户端示例,演示如何以编程方式连接到 MCP 服务并调用其工具。这对于测试、集成或构建与 MCP 服务交互的自定义应用很有帮助。
客户端代码位于 src/client/mcp-client.ts,运行示例脚本为 src/run-client.ts。
前提条件
- 服务正在运行:确保 MCP 服务正在运行,可以是在本地(
npm run dev或npx nx dev remote-mcp-server),也可以是已部署的服务。 - 客户端凭据:客户端使用 OAuth 2.0 客户端凭据进行身份验证。
- 对于本地开发,示例客户端(
src/run-client.ts)已预先配置测试凭据(test-client/test-secret)。如果服务端没有实现特定的客户端注册机制,默认 OAuth 提供方配置会使用这些凭据。 - 如果你的 OAuth 服务上有特定的客户端注册系统,则需要注册客户端并获取客户端 ID 和密钥。
- 对于本地开发,示例客户端(
运行客户端示例
-
设置环境变量(可选): 客户端脚本
src/run-client.ts可通过环境变量进行配置:MCP_SERVER_URL:MCP 服务的基础 URL(例如,http://localhost:8787或已部署的 worker URL)。默认值为http://localhost:8787。MCP_CLIENT_ID:OAuth 客户端 ID。默认值为test-client。MCP_CLIENT_SECRET:OAuth 客户端密钥。默认值为test-secret。
你可以在 shell 中设置这些变量:
export MCP_SERVER_URL="http://your-server-url" export MCP_CLIENT_ID="your-client-id" export MCP_CLIENT_SECRET="your-client-secret" -
执行脚本: 在项目根目录运行以下命令:
npm run run:client这将使用
ts-node执行src/run-client.ts。脚本会尝试连接服务、完成身份验证,并调用示例add工具。注意:此客户端的初始版本在
src/client/mcp-client.ts中,对实际的 SDK 客户端实例化(new McpClient(...))和工具调用(client.callTool(...))采用了占位实现。为了使工具调用成功,你可能需要根据@modelcontextprotocol/sdk提供的具体 API 更新这些部分(待 API 最终确定后)。如果服务的 OAuth/token端点正常运行,身份验证部分(getAccessToken)应该可以正常工作。
将 Claude Desktop 连接到远程 MCP 服务
更新 Claude 配置文件,将其指向你的 workers.dev URL(例如:worker-name.account-name.workers.dev/sse),然后重启 Claude
{
"mcpServers": {
"math": {
"command": "npx",
"args": [
"mcp-remote",
"https://worker-name.account-name.workers.dev/sse"
]
}
}
}
调试
如果出现问题,重启 Claude,或尝试在命令行中直接连接到 MCP 服务,运行以下命令可能会有所帮助。
npx mcp-remote@latest http://localhost:8787/sse
在少数情况下,清除添加到 ~/.mcp-auth 的文件可能会有所帮助
rm -rf ~/.mcp-auth
使用 xkcd 工具
xkcd 工具会获取一张随机 xkcd 漫画图片的 URL 及其替代文本。使用方法如下:
- 按照上文所述,使用 MCP Inspector 或 Claude Desktop 连接到 MCP 服务。
- 调用
xkcd工具。
使用 MCP Inspector 的示例:
- 在 MCP Inspector 中,从可用工具列表中选择
xkcd工具。 - 点击“Invoke”以获取一张随机 xkcd 漫画。
使用 Claude Desktop 的示例:
- 打开 Claude Desktop,并确认其已连接到 MCP 服务。
- 使用类似“使用 xkcd 工具获取一张随机 xkcd 漫画。”的提示词。
响应中会包含随机 xkcd 漫画的图片 URL 和替代文本。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。