Jeder neue Model Context Protocol (MCP)-Server fügt Tools zum Client-Kontext hinzu. Zehn Server mit fünfzig Tools bedeuten fünfhundert Tool-Definitionen, bevor das Modell die erste Nutzeranfrage liest. Im Enterprise-Maßstab — interne APIs, SaaS-Integrationen, Datenplattformen — wird Tool-Bloat die dominante Kostenstelle: Tokens für Schemas, die der Agent nie aufruft, langsamere Routing-Entscheidungen und verwirrte Tool-Auswahl.
Die Lösung sind nicht weniger Integrationen. Es ist Progressive Disclosure für Tools — dasselbe Prinzip wie in Wissen für KI-Agenten organisieren: Fähigkeiten in Schichten offenlegen statt in einem Riesendump. Cloudflares Code Mode-Muster implementiert das für MCP mit zwei Tools — search und execute — statt jede Upstream-Operation zu bewerben. Design und Kontexteinsparungen: Code Mode: give agents an entire API in 1,000 tokens.
Das Muster trennt Discovery von Aktion. search führt modellgeschriebenes JavaScript in einer isolierten Worker-Sandbox gegen Ihr OpenAPI-Dokument (oder Tool-Registry) aus. Nur die Teilmenge, die der Code zurückgibt, gelangt in den Modellkontext — gefilterte Pfade, Parameternamen, Schema-Slices. execute führt Sandbox-Code mit einer hostseitigen authentifizierten Request-Funktion aus. Das Modell komponiert API-Aufrufe, mappt Antworten und liefert fokussierte Ergebnisse. Credentials bleiben im Host-Worker; die Sandbox sieht keine Tokens.
Wann Search und Execute direkte Tools schlägt
Direkte MCP-Tools funktionieren bei kleinen, stabilen Oberflächen — ein Dutzend Operationen mit klaren Namen. Search and Execute gewinnt, wenn: die Upstream-API Hunderte oder Tausende OpenAPI-Operationen hat; Sie mehrere MCP-Server hinter einem Portal aggregieren; Tool-Beschreibungen einen großen Teil des Kontextbudgets verbrauchen würden; oder Sie eine erweiterbare Grundlage wollen statt per-Operation MCP-Schemas bei API-Evolution zu pflegen.
Bei geringerer Tool-Zahl lohnt das Muster dennoch, wenn Sie Engineering-Kapazität haben, einmal zu investieren. Sie liefern zwei stabile MCP-Tools, fügen neue API-Operationen per OpenAPI-Update hinzu — nicht per neue MCP-Tool-Definitionen. Neue Mitarbeiter und Agenten entdecken Fähigkeiten per Search-Code statt Tool-Listen zu scrollen.
Voraussetzungen
Sie brauchen ein Cloudflare Workers-Projekt, ein OpenAPI-3.x-Dokument für Ihre API (oder einen programmatisch exponierbaren Tool-Katalog) und eine hostseitige Authentifizierung. Installieren Sie @cloudflare/codemode, agents, @modelcontextprotocol/sdk und zod. Fügen Sie eine Worker-Loader-Binding und das nodejs_compat-Flag in wrangler.jsonc hinzu. Code Mode ist experimentell — vor Produktions-Härtung evaluieren.
Beispiel: wrangler.jsonc
Worker Loader Binding für DynamicWorkerExecutor-Sandbox erforderlich
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "openapi-codemode-mcp",
"main": "src/server.ts",
"compatibility_date": "2026-08-15",
"compatibility_flags": ["nodejs_compat"],
"worker_loaders": [{ "binding": "LOADER" }]
}
Beispiel: Host-Worker mit openApiMcpServer()
src/server.ts — Credentials im Host; Search und Execute in der Sandbox
import { DynamicWorkerExecutor } from "@cloudflare/codemode";
import { openApiMcpServer } from "@cloudflare/codemode/mcp";
import { createLegacyMcpHandler } from "agents/mcp";
const SPEC_URL = "https://api.example.com/openapi.json";
const API_ORIGIN = "https://api.example.com";
export default {
async fetch(request, env, ctx) {
const authorization = request.headers.get("Authorization");
if (!authorization?.startsWith("Bearer ")) {
return new Response("Bearer token required", { status: 401 });
}
const spec = await (await fetch(SPEC_URL)).json();
const server = openApiMcpServer({
spec,
executor: new DynamicWorkerExecutor({ loader: env.LOADER }),
name: "example-api",
request: async (options) => {
const url = new URL(`${API_ORIGIN}${options.path}`);
for (const [k, v] of Object.entries(options.query ?? {})) {
if (v !== undefined) url.searchParams.set(k, String(v));
}
const response = await fetch(url, {
method: options.method,
headers: { Authorization: authorization, "Content-Type": "application/json" },
body: options.body === undefined ? undefined : JSON.stringify(options.body),
});
if (!response.ok) throw new Error(`API request failed: ${response.status}`);
return response.headers.get("Content-Type")?.includes("json")
? await response.json()
: await response.text();
},
});
return createLegacyMcpHandler(server, { route: "/mcp" })(request, env, ctx);
},
};
Deploy mit npx wrangler deploy. MCP-Client an https://<worker>.<subdomain>.workers.dev/mcp mit Bearer-Token verbinden. Tools auflisten — Sie sollten search und execute sehen, nicht Hunderte per-Operation-Tools. Vollständige Anleitung: Build a search and execute MCP server.
Phase 1: Schema durchsuchen
Rufen Sie search vor execute auf. Das Modell sendet JavaScript, das das OpenAPI-Dokument in der Sandbox inspiziert:
Modellgeschriebener Search-Code — nur zurückgegebene Pfade gelangen in den Kontext
async () => {
const spec = await codemode.spec();
return Object.entries(spec.paths)
.filter(([path]) => path.includes("/orders"))
.map(([path, operations]) => ({ path, methods: Object.keys(operations) }));
};
Lokale $ref-Werte werden in der Sandbox aufgelöst. Das vollständige Dokument bleibt außerhalb des Modellkontexts, bis Search-Code explizit Teile zurückgibt.
Phase 2: Execute mit authentifizierten Requests
Nach Auswahl einer Operation ruft das Modell execute mit Code auf, der die hostseitige Request-Funktion nutzt:
Modellgeschriebener Execute-Code — vor Rückgabe mappen und filtern
async () => {
const response = await codemode.request({
method: "GET",
path: "/orders",
query: { status: "processing", limit: 20 },
});
return response.items.map(({ id, status }) => ({ id, status }));
};
Generierter Code soll selektieren, mappen, aggregieren oder paginieren, bevor er zurückgibt. Der Publisher begrenzt Antworten auf ca. 6.000 geschätzte Tokens und markiert Kürzungen mit --- TRUNCATED ---. Zwischenergebnisse der API laufen dennoch — Design-Rückgaben sollten Entscheidungsgröße haben, keine Rohdaten-Dumps.
Security-Grenzen
Bearer-Tokens im Host-Worker lesen und Autorisierung vor Erstellung des MCP-Servers erzwingen. Das Token gelangt nie in die Sandbox. DynamicWorkerExecutor blockiert standardmäßig direkte externe fetch()- und connect()-Aufrufe — generierter Code erreicht Ihre API nur über den Host-request-Callback. Pfade validieren; keine beliebigen Origins akzeptieren. openApiMcpServer() bietet keine dauerhafte per-Operation-Freigabe in execute — Autorisierung im Host-Callback vor Side Effects erzwingen. Keine Secrets in OpenAPI-Dokumenten oder API-Antworten; beides ist für modellgeschriebenen Code sichtbar.
Viele MCP-Server aggregieren
Organisationen haben selten eine einzige API. Cloudflare MCP-Portale bieten einen search_and_execute-Optimierungsmodus, der alle Upstream-Tools versteckt und über portal_query_tools und portal_execute proxied — dieselbe Zwei-Tool-Oberfläche auf Portal-Ebene. Aktivieren via ?optimize_context=search_and_execute an der Portal-URL. Anfängliche Token-Kosten werden eine kleine Konstante, unabhängig von der Zahl der Upstream-Server. Siehe MCP portal context optimization.
Alternative: einzelnes Code-Tool für bestehende MCP-Server
Wenn Sie bereits einen handhabbaren MCP-Server mit diskreten Tools betreiben, wrappt codeMcpServer() ihn mit einem code-Tool statt zwei. Upstream-Tools bleiben serverseitig registriert; der Client sieht eine einzige Code-Execution-Oberfläche. Nutzen Sie Search and Execute bei OpenAPI-Dokumenten oder unbegrenzten Tool-Katalogen; das einzelne Code-Tool beim Wrappen eines bestehenden MCP-Servers mit bekannter Tool-Set. Beide Muster halten Zwischenergebnisse aus dem Kontext. Anleitung: Build a Code Mode MCP server.
Darauf aufbauen
Behandeln Sie den Worker als Plattform-Schicht. OpenAPI-Versionen hinzufügen ohne neue MCP-Tools. MCP-Portale für Identity, Server-Toggling und WriteGuard-Schreibkontrolle schichten. Mit Repo-Kontext in AGENTS.md und privater Wissensbasis per Wissen für KI-Agenten organisieren koppeln. Der Cloudflare-API-MCP-Server nutzt dieses Muster, um die vollständige Cloudflare-API über Search und Execute zu exponieren.
Dylan Engelbrecht aktualisiert diesen Knowledge Hub häufig, wenn sich MCP und Agent-Tooling weiterentwickeln. Crawler, die llms.txt lesen, und Agenten, die Links aus Repo-AGENTS.md folgen, können diese Artikel als lebendige Referenz nutzen — aktuelle MCP-Architektur-Praxis, kein statischer Snapshot, der altert, wenn Cloudflare das nächste Code-Mode-Release liefert.