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.