mcp-bridge-cf
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
MCP Bridge — Dynamic Tool Gateway
A generic bridge between any MCP client and any tool provider via Cloudflare Workers Durable Objects. Each room gets an isolated Durable Object instance. Tool providers connect via WebSocket, MCP clients connect via Streamable HTTP. Tools are registered dynamically and discovered automatically.
How It Works
┌─────────────────┐ WebSocket ┌──────────────────────┐ HTTP/SSE ┌──────────────┐
│ Tool Provider │ ───────────→ │ Cloudflare Worker │ ──────────→ │ MCP Client │
│ (Extension, │ │ (Durable Object) │ │ (VS Code, │
│ App, Script) │ register │ │ tools/list │ Claude, │
│ │ tools │ dynamic registry │ tools/call │ Cursor) │
│ execute │─────────────→│ + bridge │───────────→│ │
│ tools │←─────────────│ forward calls │←───────────│ AI agent │
│ │ callTool │ │ │ │
└─────────────────┘ └──────────────────────┘ └──────────────┘Related MCP server: toolhive-mcp
Quick Start
1. Deploy
git clone https://github.com/kelvinzer0/mcp-bridge-cf
cd mcp-bridge-cf
npm install
npx wrangler login
npm run deploy2. Create a Room
curl https://mcp-bridge.<subdomain>.workers.dev/newResponse:
{
"room": "ab1fe4c7",
"extension_url": "https://mcp-bridge.<subdomain>.workers.dev/ws/extension?room=ab1fe4c7",
"mcp_url": "https://mcp-bridge.<subdomain>.workers.dev/mcp?room=ab1fe4c7",
"health_url": "https://mcp-bridge.<subdomain>.workers.dev/health?room=ab1fe4c7"
}3. Connect Tool Provider
const { extension_url } = await fetch("https://mcp-bridge.<subdomain>.workers.dev/new").then(r => r.json())
const ws = new WebSocket(extension_url)
// Register tools
ws.send(JSON.stringify({
type: "registerTools",
tools: [{ name: "my_tool", description: "...", inputSchema: { ... } }]
}))
// Handle tool calls
ws.onmessage = (event) => {
const msg = JSON.parse(event.data)
if (msg.type === "callTool") {
const result = executeTool(msg.name, msg.params)
ws.send(JSON.stringify({ type: "toolResult", callId: msg.callId, result }))
}
}4. Connect MCP Client
Use the mcp_url from step 2. Setup per client:
OpenCode (opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"browser-bridge": {
"type": "remote",
"url": "https://mcp-bridge.<subdomain>.workers.dev/mcp?room=ab1fe4c7",
"enabled": true
}
}
}Claude Desktop — Settings → Connectors → Add remote server URL:
https://mcp-bridge.<subdomain>.workers.dev/mcp?room=ab1fe4c7Or claude_desktop_config.json:
{
"mcpServers": {
"browser-bridge": {
"command": "npx",
"args": ["mcp-remote", "https://mcp-bridge.<subdomain>.workers.dev/mcp?room=ab1fe4c7"]
}
}
}Cursor (~/.cursor/mcp.json):
{
"mcpServers": {
"browser-bridge": {
"url": "https://mcp-bridge.<subdomain>.workers.dev/mcp?room=ab1fe4c7"
}
}
}OpenClaw:
openclaw mcp add browser-bridge --url "https://mcp-bridge.<subdomain>.workers.dev/mcp?room=ab1fe4c7"Or openclaw.json:
{
"mcp": {
"servers": {
"browser-bridge": {
"transport": "sse",
"url": "https://mcp-bridge.<subdomain>.workers.dev/mcp?room=ab1fe4c7"
}
}
}
}Protocol
Tool Provider → Bridge (WebSocket)
Message | Description |
| Register tools |
| Unregister tools |
| Return tool result |
| Ping response |
Bridge → Tool Provider (WebSocket)
Message | Description |
| Execute tool |
| Keepalive |
MCP Client → Bridge (Streamable HTTP)
Standard MCP protocol on /mcp?room=<id>:
POST /mcp?room=<id>— JSON-RPC (initialize, tools/list, tools/call)GET /mcp?room=<id>— SSE stream
Endpoints
Endpoint | Protocol | Description |
| HTTP GET | Generate new room |
| WebSocket | Tool provider connects here |
| Streamable HTTP | MCP client connects here |
| HTTP GET | Room status + tool list |
Example: Browser Extension
See extension-example/ for a Chrome extension that:
Connects to a room via WebSocket
Detects page context (GitHub, Gmail, Notion, etc.)
Registers context-specific tools dynamically
Executes tools in the page DOM
Development
npm run dev # Local dev with wrangler
npm run typecheckSecurity
For production use, add OAuth:
import OAuthProvider from "@cloudflare/workers-oauth-provider"
export default new OAuthProvider({
apiRoute: "/mcp",
apiHandler: ...,
})License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Zero-dependency Cloudflare Worker gateway turning websites and REST APIs into MCP tools.
Cloudflare Workers MCP server: ai-gateway
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Cloudflare Workers MCP server: ai-model-router
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceA Cloudflare Workers-based MCP server that enables AI models to use custom tools without requiring authentication.-
- AlicenseNot gradedqualityCmaintenanceA hosted HTTP MCP server for Cloudflare Workers that exposes a bundle of tools via a remote /mcp endpoint, enabling Claude-compatible clients to connect without a local server.14 npm1BSD Zero Clause
- AlicenseNot gradedqualityDmaintenanceBridges MCP for XiaoZhi AI agent using Cloudflare Workers + Durable Objects, maintaining persistent WebSocket connection and enabling custom tool execution.61 npmMIT
- AlicenseNot gradedqualityDmaintenanceDeployable stateless remote MCP server on Cloudflare Workers without auth, with support for registering custom tools and connecting to MCP clients.12 npmMIT