Code Mode MCP 服务器让任何 Model Context Protocol (MCP) 客户端使用模型编写的代码,而无需客户端自行提供沙箱。MCP 服务器将代码执行作为其工具接口,并在隔离的 Worker 中运行生成的 JavaScript。
Code Mode MCP 服务器遵循两种模式:
| 模式 | MCP 工具 | 面向模型的 API | 适用场景 |
|---|---|---|---|
| 单代码工具 | code |
每个上游工具的带类型方法 | 已有 MCP 服务器且工具数量可控。 |
| 搜索并执行 | search、execute |
OpenAPI 文档与请求函数 | 拥有大型 API,完整 schema 应保持在上下文之外。 |
两种模式都让生成的代码组合操作,并将中间结果保留在模型上下文之外。区别在于模型如何发现可用操作。
单工具模式使用 codeMcpServer() 包装现有 MCP 服务器。服务器不再分别通告每个上游工具,而是通告一个 code 工具。
code 工具描述包含为每个上游工具生成的 TypeScript 定义。模型针对 codemode 命名空间编写 JavaScript:
async () => {
const projects = await codemode.list_projects({ status: "active" });
const tasks = [];
for (const project of projects) {
tasks.push(...(await codemode.list_tasks({ projectId: project.id })));
}
return tasks.filter((task) => task.status === "blocked");
};MCP 客户端发起一次外层工具调用。在沙箱内,代码可进行依赖的上游调用、过滤中间数据,并仅返回最终结果。
当生成的类型声明能舒适地放入 code 工具描述时,此模式效果良好。模型在加载 MCP 工具时会收到这些声明。
要实现此模式,请参阅构建单工具 Code Mode MCP 服务器。
大型 API 可能包含数千个操作。将所有操作放入一个工具描述仍会消耗大量上下文。搜索并执行模式将能力发现与已认证的 API 调用分离。
服务器暴露两个 MCP 工具:
search针对 OpenAPI 文档运行生成的代码。仅返回任务所需的操作、参数或 schema。execute使用已认证的 request 函数运行生成的代码。可调用所选操作、组合响应并返回聚焦的结果。
模型首先用如下代码调用 search:
async () => {
const spec = await codemode.spec();
return Object.entries(spec.paths)
.filter(([path]) => path.includes("/rulesets"))
.map(([path, operations]) => ({
path,
methods: Object.keys(operations),
}));
};完整 OpenAPI 文档保留在沙箱内。仅返回的子集进入模型上下文。
选定操作后,模型调用 execute:
async () => {
const response = await codemode.request({
method: "GET",
path: `/zones/${zoneId}/rulesets`,
});
return response.result.map(({ id, name, phase }) => ({ id, name, phase }));
};认证保留在宿主请求回调中。生成的代码接收 request 函数,而非凭证。
Cloudflare API MCP 服务器 使用此模式,通过 search 与 execute 暴露 Cloudflare API。有关设计理由与上下文节省,请参阅 Code Mode: give agents an entire API in 1,000 tokens ↗。
要实现此模式,请参阅构建搜索并执行 MCP 服务器。
模型编写的代码在隔离 Worker 中运行。默认阻止直接出站网络访问。生成的代码仅通过上游 MCP 工具或宿主提供的 request 回调访问外部系统。
代码执行不能替代授权。在应用副作用前,于上游工具处理程序或宿主 request 回调内强制执行权限及任何所需审批。不要通过工具结果或 OpenAPI 文档暴露凭证。
当现有 MCP 服务器已定义模型所需的操作与 schema 时,使用 codeMcpServer()。当大型 OpenAPI 目录需要渐进发现且模型上下文占用固定时,使用 openApiMcpServer()。