代码模式MCP服务器(无身份验证)
Cloudflare Workers上的远程MCP服务器实现了 代码模式 模式——一个通用的计算+存储平台,AI代理通过MCP连接,获取类型化API,并可以在沙盒V8隔离中执行代码。
- DO中的SQLite --每个实例的完整SQL数据库(高达10GB,零延迟)
- 代码模式 --使用类型化工具访问在沙盒V8隔离中执行JavaScript
- 无身份验证 --公共接入,发展和专用网络的理想选择
开始使用

npm install
npm run dev服务器运行于 http://localhost:8788
- 主页:
http://localhost:8788/ - MCP端点:
http://localhost:8788/mcp
可用工具
存储(SQL)
| 工具 | 参数 | 描述 |
|---|---|---|
sql_query | query, params? | 执行SELECT/PRAGMA/EXPLAIN查询。以JSON格式返回行。 |
sql_exec | query, params? | 执行DDL/DML(创建表、插入、更新、删除)。 |
sql_exec_batch | statements | 在一次调用中执行多个DDL/DML语句。比打电话快得多 sql_exec 在一个循环中。 |
代理可以创建自己的表、索引,并完全通过SQL管理数据。参数化查询可防止注入。 sql_exec 和 sql_exec_batch 为安全起见,应阻断连接、拆卸和载荷释放。
计算(代码模式)
| 工具 | 参数 | 描述 |
|---|---|---|
execute_code | code | 在沙盒V8隔离中执行JavaScript,并通过以下方式访问所有工具 codemode 对象。 |
get_type_schema | (none) | 返回所有工具的TypeScript类型定义,以便代理可以编写类型良好的代码。 |
代码模式如何工作
- 客服电话
get_type_schema获取所有可用工具的TypeScript定义 - 代理编写JavaScript代码 以这些类型为指导
- 客服电话
execute_code使用代码字符串 - 代码在沙盒V8隔离中运行 带着一个
codemode代理对象 - 隔离中的工具调用 (例如。,
codemode.sql_query(...))路由回MCP服务器 - 结果返回 给代理人
示例流程
Agent → get_type_schema()
Agent ← TypeScript definitions
Agent → execute_code({
code: `
await codemode.sql_exec({
query: "CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY, title TEXT, body TEXT)"
});
await codemode.sql_exec({
query: "INSERT INTO notes (title, body) VALUES (?, ?)",
params: ["Hello", "World"]
});
const notes = await codemode.sql_query({ query: "SELECT * FROM notes" });
return notes;
`
})
Agent ← [{ id: 1, title: "Hello", body: "World" }]注: Worker Loader API可能需要Cloudflare测试版访问。这 execute_code 如果LOADER绑定不可用,该工具将优雅地出错。所有其他工具都独立于代码模式工作。与MCP检查员联系
npx @modelcontextprotocol/inspector进入 http://localhost:8788/mcp 作为MCP服务器URL。
与克劳德桌面连接
添加到您的Claude桌面配置(Settings > Developer > Edit Config):
{
"mcpServers": {
"codemode": {
"command": "npx",
"args": ["mcp-remote", "http://localhost:8788/mcp"]
}
}
}部署到Cloudflare
npm run deploy然后更新Claude Desktop配置以使用部署的URL:
https://remote-mcp-server-authless..workers.dev/mcp建筑
MCP server diagram (without vs with Code Mode)
┌─────────────────────────────────────────────────────────────────┐
│ MCP Client (Claude Desktop, Inspector, etc.) │
└──────────────────────────┬──────────────────────────────────────┘
│ Streamable HTTP (/mcp)
▼
┌─────────────────────────────────────────────────────────────────┐
│ Cloudflare Worker (HTTP Router) │
│ src/index.ts │
└──────────────────────────┬──────────────────────────────────────┘
│ Routes to Durable Object
▼
┌─────────────────────────────────────────────────────────────────┐
│ MyMCP (Durable Object) │
│ src/mcp-shared/agent.ts │
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ ToolRegistry │ │
│ │ Registers tools, routes isolate calls, generates types │ │
│ └──────┬──────────────────────────────────┬─────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────────────┐ │
│ │ SQLite-in-DO │ ◄── Extension 1 │ Code Mode │ │
│ │ │ │ │ │
│ │ sql_query │ │ execute_code │ │
│ │ sql_exec │ │ get_type_schema │ │
│ │ sql_exec_ │ └──────────┬───────────┘ │
│ │ batch │ │ │
│ │ │ │ Worker Loader │
│ │ Embedded │ ▼ │
│ │ SQLite DB │ ┌──────────────────────┐ │
│ │ (up to 10GB)│ │ V8 Isolate │ │
│ │ │ │ (sandboxed) │ │
│ │ this.sql │ │ │ │
│ │ tagged │ │ User code runs here │ │
│ │ template │ │ with `codemode` │ │
│ │ │ │ proxy object │ │
│ └──────────────┘ └──────────┬───────────┘ │
│ ▲ │ │
│ │ ┌───────────────────┐ │ │
│ │ │ CodeModeProxy │◄──┘ │
│ │ │ (service binding)│ RPC call │
│ │ └────────┬──────────┘ │
│ │ │ Routes back to DO │
│ │ ▼ │
│ └───── registry.handleIsolateCall() ───────────────────│
│ (tool call completes, result returns to isolate) │
└─────────────────────────────────────────────────────────────────┘这些碎片是如何组合在一起的
- MCP服务器(核心) --The
MyMCP持久对象扩展了Cloudflare的McpAgent类。它承载MCP协议,管理会话,并拥有ToolRegistry所有工具都已注册。
- 扩展1:DO中的SQLite --每个DO实例都有一个嵌入式SQLite数据库,可通过以下方式访问
this.sql(标记的模板文字)。SQL工具(sql_query,sql_exec,sql_exec_batch)通过语句验证提供安全、参数化的访问。
- 扩展2:代码模式 -通过Cloudflare的Worker Loader API执行沙盒JavaScript。用户代码在临时V8隔离中运行
codemode代理对象。隔离内部的工具调用(例如。,codemode.sql_query(...))路线通过CodeModeProxy(自引用服务绑定)返回DOToolRegistry,它会分派给适当的工具处理程序。结果返回到隔离区。
- 自包含模板 --在中包含共享运行时的供应商副本
src/mcp-shared/因此Deploy to Workers可以直接从仓库构建
定制
工具定义见 src/mcp-shared/tools/。要添加新工具,请执行以下操作:
- 在中创建新文件
src/mcp-shared/tools/ - 出口A
ToolEntry[]数组(参见src/mcp-shared/tools/sql.ts图案) - 在中注册工具
src/mcp-shared/agent.ts在init()方法viathis.registry.add(...yourTools)
注册表自动处理MCP注册、隔离呼叫路由和类型生成,无需手动 callTool() 案件需要。类型生成的工具定义来自 registry.getDefinitions().
