跳转到内容
搜索文档

Code Mode MCP 服务器模式

最后更新 查看 MarkdownAgent 设置

Code Mode MCP 服务器让任何 Model Context Protocol (MCP) 客户端使用模型编写的代码,而无需客户端自行提供沙箱。MCP 服务器将代码执行作为其工具接口,并在隔离的 Worker 中运行生成的 JavaScript。

Code Mode MCP 服务器遵循两种模式:

模式 MCP 工具 面向模型的 API 适用场景
单代码工具 code 每个上游工具的带类型方法 已有 MCP 服务器且工具数量可控。
搜索并执行 searchexecute 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 服务器 使用此模式,通过 searchexecute 暴露 Cloudflare API。有关设计理由与上下文节省,请参阅 Code Mode: give agents an entire API in 1,000 tokens

要实现此模式,请参阅构建搜索并执行 MCP 服务器

沙箱与授权边界

模型编写的代码在隔离 Worker 中运行。默认阻止直接出站网络访问。生成的代码仅通过上游 MCP 工具或宿主提供的 request 回调访问外部系统。

代码执行不能替代授权。在应用副作用前,于上游工具处理程序或宿主 request 回调内强制执行权限及任何所需审批。不要通过工具结果或 OpenAPI 文档暴露凭证。

选择模式

当现有 MCP 服务器已定义模型所需的操作与 schema 时,使用 codeMcpServer()。当大型 OpenAPI 目录需要渐进发现且模型上下文占用固定时,使用 openApiMcpServer()

这篇文档对您有帮助吗?