Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Code Mode MCP サーバーのパターン

最終更新 Markdown で表示Agent セットアップ

Code Mode MCP サーバーは、任意の Model Context Protocol (MCP) クライアントが、自前のサンドボックスなしでモデルが書いたコードを使えるようにします。MCP サーバーはコード実行をツールインターフェースとして公開し、生成した JavaScript を分離された Worker で実行します。

Code Mode MCP サーバーには、次の 2 つのパターンがあります。

パターン MCP ツール モデル向け API 使うとき
単一コードツール code 上流ツールごとの型付きメソッド 管理しやすいツールセットを持つ MCP サーバーがすでにある場合
Search and execute searchexecute OpenAPI ドキュメントとリクエスト関数 完全なスキーマをコンテキストに載せたくない大規模 API がある場合

どちらのパターンも、生成コードが操作を組み合わせ、中間結果をモデルコンテキストの外に保てます。違いは、モデルが利用可能な操作をどう発見するかです。

単一コードツール

単一ツールパターンは、既存の MCP サーバーを codeMcpServer() でラップします。上流ツールを個別に公開する代わりに、サーバーは code ツール 1 つだけを公開します。

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 クライアントは外側のツール呼び出しを 1 回行います。サンドボックス内では、コードが依存する上流呼び出しを行い、中間データを絞り込み、最終結果だけを返せます。

生成した型宣言が code ツールの説明に無理なく収まるときに、このパターンはよく機能します。モデルは MCP ツールを読み込むときに、それらの宣言を受け取ります。

このパターンの実装は、単一ツールの Code Mode MCP サーバーを構築する を参照してください。

Search and execute

大規模 API には数千の操作があることがあります。すべての操作を 1 つのツール説明に含めると、コンテキストを大きく消費します。search-and-execute パターンは、機能の発見と認証済み API 呼び出しを分けます。

サーバーは次の 2 つの MCP ツールを公開します。

  • search は、OpenAPI ドキュメントに対して生成コードを実行します。タスクに必要な操作、パラメーター、スキーマだけを返します。
  • execute は、認証済みのリクエスト関数付きで生成コードを実行します。選んだ操作を呼び出し、応答を組み合わせ、焦点を絞った結果を返せます。

モデルはまず、次のようなコードで 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 }));
};

認証はホストのリクエストコールバックに留まります。生成コードが受け取るのはリクエスト関数であり、資格情報ではありません。

Cloudflare API MCP サーバー は、このパターンで Cloudflare API を searchexecute 経由に公開します。設計の意図とコンテキスト削減については、Code Mode: give agents an entire API in 1,000 tokens を参照してください。

このパターンの実装は、search and execute MCP サーバーを構築する を参照してください。

サンドボックスと認可の境界

モデルが書いたコードは、分離された Worker で実行されます。外向きの直接ネットワークアクセスは、デフォルトでブロックされます。生成コードが外部システムに届くのは、上流の MCP ツールか、ホストが提供するリクエストコールバック経由だけです。

コード実行は認可の代わりにはなりません。副作用を適用する前に、上流ツールハンドラーまたはホストのリクエストコールバック内で、権限と必要な承認を強制します。ツール結果や OpenAPI ドキュメント経由で資格情報を公開しないでください。

パターンの選び方

既存の MCP サーバーが、モデルに必要な操作とスキーマをすでに定義しているときは codeMcpServer() を使います。大規模な OpenAPI カタログで段階的な発見と、固定のモデルコンテキストフットプリントが必要なときは openApiMcpServer() を使います。

役に立ちましたか?