Erste Schritte5 Minuten Lesezeit7 Sprachen

MCP Code Mode Rezepte: Monatsumsatz, Rechnungsabgleich und 100 Preisabfragen in einem Aufruf

Drei praxisnahe Code-Mode-Programme für AnythingMCP: Monatsumsatz über Onlineshop (Shopify) und Buchhaltung (Lexware Office), Bestellungen mit Rechnungen abgeglichen und 100 Kundenpreisabfragen in einem Tool-Aufruf statt in 100. Mit Code, den wichtigen Limits und der Frage, wann sich ein Programm als Tool speichern lässt.

HCVom HelpCode-TeamAktualisiert 5 Min. Lesezeit Open Source auf GitHub

Keine Kreditkarte · 7 Tage Test · Self-Hosting-Alternative verfügbar

  • 7 Tage kostenlos
    Keine Kreditkarte nötig
  • DSGVO & SOC 2 ready
    EU-Datenhaltung, Audit-Logs
  • Open Source auf GitHub
    Open-Source · AGPL-3.0
  • Funktioniert mit ChatGPT, Claude, Gemini
    Jeder MCP-kompatible Client

Zusammenfassung

Drei praxisnahe Code-Mode-Programme für AnythingMCP: Monatsumsatz über Onlineshop (Shopify) und Buchhaltung (Lexware Office), Bestellungen mit Rechnungen abgeglichen und 100 Kundenpreisabfragen in einem Tool-Aufruf statt in 100. Mit Code, den wichtigen Limits und der Frage, wann sich ein Programm als Tool speichern lässt.

TL;DR: Code Mode lohnt sich überall dort, wo ein Agent sonst denselben Aufruf viele Male ausführen oder zwei lange Listen lesen müsste, um sie zu vergleichen. Diese drei Rezepte zeigen das Muster: Summe über zwei Systeme bilden, zwei Listen abgleichen, eine Abfrage für viele Einträge wiederholen. Jedes ist ein kurzes JavaScript-Programm, das MCP-Tools über amcp.run aufruft und nur das Ergebnis zurückgibt. Führe sie inline aus (der Agent schreibt das Programm mit code_execute) oder speichere sie als Code-Tools, die dein Team beim Namen aufruft. Code Mode ist in self-hosted AnythingMCP ab v0.52.0 verfügbar und kommt bald in AnythingMCP Cloud.

Neu bei Code Mode? Starte mit Was ist MCP Code Mode? und Baue dein erstes Code-Tool.

Bevor du ein Programm kopierst

  • Tool-Namen sind echt, Strukturen variieren. Die Rezepte verwenden Tools der Connectors für Shopify und Lexware Office. Die Feldnamen folgen der jeweiligen API-Antwort; führe ein Tool einmal im Test-Bereich aus oder rufe amcp.describe(name) in einem Programm auf, bevor du dich auf ein Feld verlässt.
  • Zehn Sekunden pro Lauf. Ein Lauf stoppt nach 10 Sekunden. Hole Seiten und unabhängige Aufrufe parallel (höchstens 16 gleichzeitig), statt sie nacheinander auszuführen.
  • Nur lesend. Inline-Code ruft nie Tools auf, die Daten verändern; gespeicherte Code-Tools dürfen das nur, wenn ein Administrator es erlaubt, und zwar in Enterprise. Alle drei Rezepte lesen nur.
  • Erfundene Zahlen. Die gezeigten Ergebnisse sind erfundene Beispiele.

Rezept 1 — Monatsumsatz über Shop und Buchhaltung

Die Frage: „Wie hoch war unser Umsatz im Oktober: Onlineshop plus B2B-Rechnungen?"

Ohne Code Mode blättert der Agent durch Hunderte von Shop-Bestellungen und Rechnungen, liest jeden Datensatz in seinen Kontext ein und addiert Zahlen durch Lesen. Mit Code Mode bekommt er zwei Summen.

// Input: args.month as "YYYY-MM", e.g. "2026-10".
const [y, m] = String(args.month).split('-').map(Number);
const from = `${y}-${String(m).padStart(2, '0')}-01`;
const to = m === 12 ? `${y + 1}-01-01` : `${y}-${String(m + 1).padStart(2, '0')}-01`;

// Shop: paid orders created in the month (Shopify search syntax), 250 per page.
let shop = 0, shopOrders = 0, after = undefined;
do {
  const res = await amcp.run('shopify_search_orders', {
    query: `created_at:>=${from} created_at:<${to} financial_status:paid test:false`,
    first: 250,
    after,
  });
  const page = res.orders ?? res.data?.orders; // depends on how the tool wraps the GraphQL result
  for (const o of page.nodes) {
    shop += Number(o.currentTotalPriceSet.shopMoney.amount);
    shopOrders++;
  }
  after = page.pageInfo.hasNextPage ? page.pageInfo.endCursor : undefined;
} while (after);

// Accounting: sales invoices dated in the month, without drafts and voided ones.
let b2b = 0, invoices = 0, p = 0, last = false;
const lastDay = new Date(Date.UTC(y, m, 0)).toISOString().slice(0, 10);
while (!last) {
  const res = await amcp.run('lexware_office_list_vouchers', {
    voucherType: 'salesinvoice',
    voucherStatus: 'open,paid,paidoff',
    voucherDateFrom: from,
    voucherDateTo: lastDay,
    size: 250,
    page: p++,
  });
  for (const v of res.content ?? []) { b2b += Number(v.totalAmount); invoices++; }
  last = res.last ?? true;
}

return {
  month: args.month,
  shop: { orders: shopOrders, gross: Math.round(shop * 100) / 100 },
  invoices: { count: invoices, gross: Math.round(b2b * 100) / 100 },
  total: Math.round((shop + b2b) * 100) / 100,
};

Zurück kommen vier Zahlen, nicht 600 Datensätze:

{ "month": "2026-10", "shop": { "orders": 412, "gross": 38214.9 }, "invoices": { "count": 57, "gross": 91380.12 }, "total": 129595.02 }

Prüfe die Definition, bevor du der Summe vertraust. Wenn Shop-Bestellungen zusätzlich in der Buchhaltung fakturiert werden, zählt die Addition beider Werte doppelt; filtere die Rechnungen dann auf B2B-Kunden. Beide Beträge sind hier Bruttobeträge in der Währung des Shops und der Buchhaltung; Erstattungen und Gutschriften werden nicht abgezogen. Halte diese Entscheidungen in der Beschreibung des Tools fest, damit die KI sagt, was die Zahl bedeutet.

Rezept 2 — Bestellungen ohne Rechnung, Rechnungen ohne Bestellung

Die Frage: „Welche bezahlten Shop-Bestellungen aus dem letzten Monat haben keine Rechnung in der Buchhaltung, und bei welchen stimmen die Beträge nicht überein?"

Das ist die Aufgabe, bei der Modelle durch bloßes Lesen am schlechtesten abschneiden: zwei Listen mit je einigen hundert Zeilen, per Augenmaß verglichen. Im Code ist es ein Dictionary-Lookup.

// Where your accounting keeps the shop order number. Adapt to your setup:
// many shop integrations write it into the invoice's reference or title.
const orderRefOf = (invoice) => invoice.orderReference;

const orders = args.orders;     // [{ name: "#1042", total: 89.9 }, ...] from a first step
const invoices = args.invoices; // [{ orderReference: "#1042", totalAmount: 89.9, voucherNumber: "RE0815" }, ...]

const byOrder = new Map(invoices.map((i) => [orderRefOf(i), i]));
const missing = [], mismatched = [];
for (const o of orders) {
  const inv = byOrder.get(o.name);
  if (!inv) missing.push(o.name);
  else if (Math.abs(Number(inv.totalAmount) - Number(o.total)) > 0.01)
    mismatched.push({ order: o.name, invoice: inv.voucherNumber, order_total: o.total, invoice_total: inv.totalAmount });
}
const orderNames = new Set(orders.map((o) => o.name));
const orphanInvoices = invoices.filter((i) => !orderNames.has(orderRefOf(i))).map((i) => i.voucherNumber);

return { checked: orders.length, missing, mismatched, orphanInvoices };

Diese Version nimmt beide Listen als Eingaben entgegen, damit die Abgleichslogik lesbar bleibt. Hole sie in einem gespeicherten Code-Tool innerhalb des Programms mit den Paging-Schleifen aus Rezept 1 (Bestellungen von shopify_search_orders, Rechnungen von lexware_office_list_vouchers, dazu lexware_office_get_invoice, wo du das Referenzfeld brauchst). So ruft die KI ein Tool mit einem Monat auf und bekommt drei kurze Listen zurück:

{ "checked": 412, "missing": ["#1077", "#1139"], "mismatched": [{ "order": "#1101", "invoice": "RE0902", "order_total": 129.0, "invoice_total": 119.0 }], "orphanInvoices": [] }

Rezept 3 — 100 Preisabfragen in einem Aufruf statt in 100

Die Frage: „Hier sind 100 Artikelnummern aus der Kundenanfrage. Wie lauten die Preise für diesen Kunden?"

Viele ERPs berechnen einen kundenspezifischen Preis pro Artikel und Kunde, jeweils in einer eigenen Anfrage. Angenommen, dein eigener REST-Connector für das ERP hat ein Tool erp_get_customer_price mit den Eingaben article und customer (ein Beispielname; so machst du aus einer REST-API MCP-Tools). Ohne Code Mode macht der Agent 100 Aufrufe und liest 100 Ergebnisse. Mit Code Mode:

// Inputs: args.customer, args.articles (array of article numbers).
const articles = [...new Set(args.articles.map(String))];
const rows = [];
const BATCH = 10; // at most 16 calls may be in flight at once

for (let i = 0; i < articles.length; i += BATCH) {
  const batch = articles.slice(i, i + BATCH);
  const results = await Promise.all(batch.map(async (article) => {
    try {
      const r = await amcp.run('erp_get_customer_price', { article, customer: args.customer });
      return { article, price: r.netPrice, unit: r.priceUnit, currency: r.currency };
    } catch (e) {
      return { article, error: String(e.message ?? e) };
    }
  }));
  rows.push(...results);
}

return {
  customer: args.customer,
  found: rows.filter((r) => !r.error).length,
  notFound: rows.filter((r) => r.error).map((r) => r.article),
  prices: rows.filter((r) => !r.error),
};

Zehn Aufrufe laufen gleichzeitig, sodass 100 Abfragen mit je einigen hundert Millisekunden problemlos innerhalb des 10-Sekunden-Limits fertig werden. Ein fehlschlagender Artikel stoppt die übrigen nicht; er landet in notFound. Das Modell erhält eine Tabelle, die es in einen Angebotsentwurf oder eine E-Mail umwandeln kann, statt 100 einzelner Tool-Ergebnisse.

Prüfe zuerst, ob du überhaupt Code brauchst. Wenn die API in einer Anfrage nach einer Liste von Artikeln filtern kann (weclapp filtert Artikelnummern zum Beispiel mit einem in-Operator), ist ein einzelner gewöhnlicher Tool-Aufruf einfacher. Code Mode ist für die APIs gedacht, die das nicht können.

Inline oder gespeichert?

Inline (code_execute)Gespeichertes Code-Tool
Wer das Programm schreibtDer Agent, für diese FrageEin Administrator, einmalig (oder der Agent schlägt es vor)
Geeignet fürEinmalige Analysen, ErkundungFragen, die das Team jede Woche stellt
BerechtigungenDie eigenen des Aufrufers, nur lesendAufrufer oder Definierer, nur lesend, sofern Schreiben nicht erlaubt ist (Enterprise)
Edition (wie mit v0.52 angekündigt)Team und EnterpriseCommunity 3, Starter 5, Team 20, Enterprise unbegrenzt

Ein Muster, das der Agent zweimal inline löst, ist ein Kandidat für ein gespeichertes Tool. Ist Inline-Code aktiviert, kann der Agent es vorschlagen, und ein Administrator genehmigt es mit einem Klick.

FAQ

Können diese Programme schreiben, also zum Beispiel die fehlenden Rechnungen erstellen? Nicht inline. Ein gespeichertes Code-Tool kann Schreib-Tools nur aufrufen, wenn ein Administrator Allow write tools aktiviert, was Enterprise erfordert. Halte Programme, die Daten verändern, schreibgeschützt und lass eine Person die Aktion bestätigen.

Was, wenn ein Lauf mehr als 10 Sekunden braucht? Teile ihn auf: ein Lauf pro Monat statt für ein ganzes Jahr oder weniger Einträge pro Aufruf. Läufe, die ein Limit überschreiten, brechen mit einem Fehler ab; nichts wird halb geschrieben, weil sie nur lesen.

Sendet das Programm meine Daten irgendwohin? Nein. Das Programm läuft in einem isolierten Runner ohne Netzwerk. Es erreicht deine Systeme nur über die MCP-Tools, unter deiner Rolle. Siehe Sichere Code-Ausführung für KI-Agenten.

Weiterführend

War dieser Guide hilfreich?

MCP für deinen Stack in 60 Sekunden.

Starte AnythingMCP in der verwalteten Cloud oder hoste es selbst auf deiner Infrastruktur. 7 Tage kostenlos, keine Kreditkarte.

Verwandte Anleitungen

GS
Erste Schritte

Code Mode: Token-Verbrauch von KI-Agenten senken, indem Tools in einem Schritt laufen

Mit Code Mode führt ein KI-Agent ein kurzes Programm aus, das viele MCP-Tools in einem einzigen Aufruf orchestriert, statt pro Tool eine Hin- und Rückreise zu machen. Filtern und Verknüpfen passieren in einer abgeschotteten Sandbox, sodass nur die endgültige Antwort zurückkommt — das senkt den Token-Verbrauch bei datenintensiven Workflows um bis zu 90–99 %.

GS
Erste Schritte

Dein erstes MCP Code-Tool: ERP-Bestellungen und CRM-Account in einem Aufruf

Eine Schritt-für-Schritt-Anleitung für den AnythingMCP-Code Mode: Code-Runner starten, Code Mode aktivieren und ein Code-Tool speichern, das die letzten Bestellungen aus dem ERP (weclapp) sowie den Account und die offenen Deals aus dem CRM (HubSpot) in einem Tool-Aufruf liest. Nur lesend, mit den Berechtigungen des Aufrufers, auditiert.

GS
Erste Schritte

Was ist der MCP Code Mode? Weniger Tokens und Roundtrips für KI-Agenten

Der Code Mode lässt einen KI-Agenten ein kurzes Programm ausführen, das mehrere MCP-Tools aufruft, statt sie einzeln über das Modell anzusprechen. Warum das Tokens und Roundtrips spart, wann es hilft und wann nicht, und wie AnythingMCP es umsetzt: gespeicherte Code-Tools, Inline-Code und Agent-Vorschläge, in einem isolierten Runner.

GS
Erste Schritte

AnythingMCP mit Claude verbinden: eine URL für alle deine Business-APIs

AnythingMCP in fünf Minuten als Claude-Connector einrichten. Anmelden, MCP-Server auswählen und weclapp, DATEV, Etsy, Deutsche Bahn oder die eigene API in natürlicher Sprache abfragen.

GS
Erste Schritte

Der MCP-Wissensgraph: ein Connector, der lernt, wie deine Systeme zusammenhängen

AnythingMCP ist nicht nur ein MCP-Proxy — es baut einen Wissensgraphen deiner Tools, damit KI-Agenten wissen, wie sie einen Kunden aus deinem CRM mit seinen Bestellungen im ERP verketten. So funktioniert der smarte Connector.

GS
Erste Schritte

Was ist das Model Context Protocol (MCP)?

Ein umfassender Leitfaden zum Verständnis des Model Context Protocol — wie es funktioniert, warum es wichtig ist und wie du loslegen können.