Erste Schritte6 Minuten Lesezeit7 Sprachen

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.

HCVom HelpCode-TeamAktualisiert 6 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

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.

TL;DR: Vor einem Kundentermin bittet ein Vertriebsmitarbeiter den Assistenten um einen Überblick: die letzten Bestellungen aus dem ERP sowie den Account-Inhaber und die offenen Deals aus dem CRM. Ohne Code Mode sind das vier oder fünf Tool-Aufrufe, deren Ergebnisse das Modell jeweils vollständig lesen muss. Mit einem gespeicherten Code-Tool ist es ein einziger: customer_overview(customer) führt ein kurzes JavaScript-Programm aus, das die Aufrufe macht, nur das Wesentliche behält und eine kompakte Zusammenfassung zurückgibt. Diese Anleitung baut das Tool auf einem self-hosted AnythingMCP (v0.52.1 oder neuer) mit weclapp als ERP und HubSpot als CRM; dasselbe Muster funktioniert mit beliebigen zwei Connectors.

Was du brauchst

  • Self-hosted AnythingMCP v0.52.1 oder neuer. Der Code Mode kommt bald in AnythingMCP Cloud.
  • Zwei Connectors mit lesenden Tools, hier weclapp und HubSpot, installiert und funktionsfähig.
  • Administratorrechte im Workspace.

Neu bei dem Thema? Was ist der MCP-Code Mode? erklärt, warum ein Programm besser ist als viele Tool-Aufrufe.

Schritt 1 — Den Code-Runner starten

Code läuft nie direkt in AnythingMCP selbst. Er läuft in einem separaten code-runner-Container, und ohne ihn wird jede Code-Ausführung abgelehnt. Ergänze in deiner .env:

COMPOSE_PROFILES=code-runner
CODE_RUNNER_URL=ws://code-runner:8777

Wenn du bereits Profile verwendest, liste sie zusammen auf, zum Beispiel COMPOSE_PROFILES=files,code-runner. Dann:

docker compose up -d

Der Runner enthält keine Secrets, veröffentlicht keine Ports und hat keine Route ins Internet; nur das Backend spricht im internen Docker-Netzwerk mit ihm. Wie er jede Ausführung isoliert: Sichere Code-Ausführung für KI-Agenten.

Schritt 2 — Code Mode für den MCP-Server aktivieren

Der Code Mode ist pro MCP-Server standardmäßig aus, und gespeicherte Code-Tools werden auf einem Server abgelehnt, dessen Code Mode off ist. Setze den Code Mode des Servers, den dein Vertriebsteam nutzt, auf tools (nur gespeicherte Code-Tools). inline bietet dem Agenten zusätzlich code_execute und code_propose_tool an; für diese Anleitung brauchst du das nicht.

Öffne im Dashboard MCP-Server und dann den Server. Setze in der Karte Server-Einstellungen oben den Code-Modus auf Nur gespeicherte Code-Tools und klicke auf Speichern. Verbinde danach den KI-Client neu.

Lieber per API? PUT /api/mcp-servers/<id> mit {"codeMode": "tools"} macht dasselbe. Die Einstellung gibt es seit v0.52.1; auf v0.52.0 aktualisiere zuerst.

Schritt 3 — Die beiden Connector-IDs notieren

Ein Code-Tool legt fest, welche Connectors sein Programm aufrufen darf. Öffne jeden Connector im Dashboard: Seine ID ist der letzte Teil der Adresse, /connectors/<id>. Kopiere die IDs des weclapp- und des HubSpot-Connectors.

Schritt 4 — Das Code-Tool erstellen

Öffne den weclapp-Connector, gehe zu MCP Tools und klicke auf Add Tool. Setze Tool Type auf Code Tool und fülle dann aus:

  • Tool Name: customer_overview
  • Description: „Überblick über einen Kunden vor einem Gespräch: die letzten 10 Bestellungen aus dem ERP, der CRM-Account und seine offenen Deals. Übergib den Firmennamen oder einen Teil davon." Die Beschreibung liest die KI, um zu entscheiden, wann sie das Tool aufruft – schreibe also hinein, was es zurückgibt.
  • Input Parameters: ein Parameter, customer, Typ string, erforderlich.
anythingmcp.internal/connectors
Edit-Tool-Formular eines Connectors namens Accounting: Tool-Name revenue_by_month, Tool Type Code Tool, ein Program-Feld mit JavaScript, das amcp.run aufruft, das Uses-(connectors)-JSON mit einer connectorId, Run as Invoker (die eigenen Berechtigungen des Aufrufers), die nicht angehakte Checkbox Allow write tools und Input Parameters
Der Tool-Editor mit Tool Type Code Tool, hier für ein anderes Beispiel-Tool (revenue_by_month) in einem Demo-Workspace. Program, Uses, Run as und Allow write tools sind die Felder, die du in dieser Anleitung ausfüllst.

Schritt 5 — Das Programm schreiben

Das Program ist der Rumpf einer asynchronen JavaScript-Funktion. Die Eingaben des Tools stehen in args; amcp.run(name, args) ruft ein anderes Tool auf und liefert dessen Ergebnis als geparstes JSON zurück (und wirft einen Fehler, wenn das Tool fehlschlägt). Was du mit return zurückgibst, erhält die KI.

// Input: args.customer, a company name or part of it.
const name = String(args.customer ?? '').trim();
if (!name) return { error: 'Pass a customer name.' };

// ERP (weclapp): the customer, then its latest sales orders.
const parties = await amcp.run('weclapp_list_customers', {
  filter: `company-ilike=%${name}%`,
  pageSize: 5,
});
const customer = (parties.result ?? [])[0];
if (!customer) return { error: `No customer matching "${name}" in the ERP.` };

const orders = await amcp.run('weclapp_list_sales_orders', {
  filter: `customerId-eq=${customer.id}`,
  sort: '-orderDate',
  pageSize: 10,
});

// CRM (HubSpot): the company record and its open deals.
const companies = await amcp.run('hubspot_search_objects', {
  object_type: 'companies',
  query: customer.company,
  properties: ['name', 'domain', 'hubspot_owner_id', 'lifecyclestage'],
  limit: 1,
});
const company = companies.results?.[0];

let deals = [];
if (company) {
  const found = await amcp.run('hubspot_search_objects', {
    object_type: 'deals',
    filter_groups: [{ filters: [
      { propertyName: 'associations.company', operator: 'EQ', value: company.id },
      { propertyName: 'hs_is_closed', operator: 'EQ', value: 'false' },
    ] }],
    properties: ['dealname', 'amount', 'dealstage', 'closedate'],
    limit: 20,
  });
  deals = found.results ?? [];
}

// Only this goes back to the model.
return {
  customer: { number: customer.customerNumber, name: customer.company },
  lastOrders: (orders.result ?? []).map((o) => ({
    number: o.orderNumber, date: o.orderDate, status: o.status, net: o.netAmount,
  })),
  crm: company
    ? { owner: company.properties.hubspot_owner_id, stage: company.properties.lifecyclestage }
    : null,
  openDeals: deals.map((d) => ({
    name: d.properties.dealname, amount: d.properties.amount,
    stage: d.properties.dealstage, close: d.properties.closedate,
  })),
};

Die Feldnamen sind die, die die weclapp- und HubSpot-APIs zurückgeben. Bevor du dich auf ein Feld verlässt, führe das zugrunde liegende Tool einmal im zugehörigen Test-Panel aus und sieh dir das Ergebnis an; innerhalb des Programms liefert await amcp.describe('weclapp_list_sales_orders') das Eingabeschema eines Tools.

Ein Hinweis zur Verknüpfung. Dieses Programm ordnet die CRM-Firma über den Namen zu, was für ein Briefing gut genug ist. Wenn du die ERP-Kundennummer in einer HubSpot-Property speicherst, filtere stattdessen danach, dann ist die Zuordnung exakt.

Schritt 6 — Festlegen, was das Programm verwenden darf

Uses (connectors) listet die Connectors und optional die genauen Tools auf, die das Programm aufrufen darf. Füge die beiden IDs aus Schritt 3 ein:

[
  { "connectorId": "<weclapp connector id>", "tools": ["weclapp_list_customers", "weclapp_list_sales_orders"] },
  { "connectorId": "<hubspot connector id>", "tools": ["hubspot_search_objects"] }
]

Die Tools zu benennen ist optional (ohne "tools" ist der gesamte Connector erlaubt), aber eine kurze Liste macht das Tool leicht überprüfbar. Es werden nur Connectors desselben Workspaces akzeptiert. Ein Tool außerhalb dieser Liste schlägt mit einem Fehler fehl, selbst wenn der Benutzer es direkt aufrufen könnte.

Schritt 7 — Als Invoker ausführen, nur lesend

  • Run as: Invoker (die eigenen Berechtigungen des Aufrufers). Jeder innere Aufruf wird gegen die Rolle der Person geprüft, die das Tool verwendet. Ein Vertriebsmitarbeiter ohne HubSpot-Zugriff erhält für den HubSpot-Teil einen Fehler, genau als hätte er HubSpot direkt aufgerufen. (Definer läuft stattdessen mit der Kuratierung des Autors, wie eine Stored Procedure; das ist für Administratoren und Enterprise gedacht.)
  • Allow write tools: aus. Das Programm darf dann nur lesende Tools aufrufen; weclapp_list_* und hubspot_search_objects sind Lesezugriffe. Code-Tools mit Schreibrechten erfordern Enterprise.

Klicke auf Create Tool.

Schritt 8 — Mit Claude oder ChatGPT ausprobieren

Prüfe das Programm zuerst mit dem Test-Button des Tools im Dashboard: Er führt den Code über den Code Runner aus, mit denselben Regeln wie ein echter Aufruf. Teste es dann mit einem KI-Client, der mit dem MCP-Server verbunden ist. Das Tool ist auf jedem Server verfügbar, der den weclapp-Connector hat und bei dem der Code Mode aktiviert ist. Verbinde den KI-Client neu oder aktualisiere seine Tools und frage:

„Ich telefoniere in zehn Minuten mit Lindenhof Bau. Was haben sie zuletzt bestellt, wer betreut den Account und gibt es offene Deals?"

Der Assistent ruft customer_overview einmal auf und verfasst das Briefing aus dem kompakten Ergebnis, statt vollständige Bestelllisten und CRM-Datensätze zu lesen. Wenn etwas nicht stimmt, sagt das Tool-Ergebnis, was: ein Aufruf außerhalb von Uses ('hubspot_search_objects' is not a tool this code tool can use), ein von der API zurückgegebener Fehler oder ein Timeout. Korrigiere das Programm, speichere und frage erneut.

Was bei jedem Aufruf passiert

  • Ein Lauf, ein Eintrag. Jeder Aufruf des Tools wird als Code-Lauf aufgezeichnet, und jeder Tool-Aufruf, den das Programm macht, steht wie jeder andere Aufruf mit dem Benutzer im Audit-Log.
  • Limits. Ein Lauf darf bis zu 10 Sekunden dauern, bis zu 500 Tool-Aufrufe machen (16 gleichzeitig) und bis zu 1 MB zurückgeben. Ein Programm, das ein Limit überschreitet, stoppt mit einer klaren Fehlermeldung und beeinträchtigt nichts anderes.
  • Keine Verschachtelung. Ein Code-Tool kann kein anderes Code-Tool aufrufen.
  • Nur auf deinen Servern. Code-Tools werden auf den eigenen MCP-Servern des Workspaces bereitgestellt, nie auf dem gemeinsamen /mcp-Endpunkt.

Tarife

Gespeicherte Code-Tools pro Edition, wie mit v0.52 angekündigt: Community 3, Starter 5, Team 20, Enterprise unbegrenzt. Code-Tools mit Schreibrechten und „Run as Definer" sind Enterprise. Tarife vergleichen.

FAQ

Muss ich JavaScript können? Grundlegende JavaScript-Kenntnisse genügen: await, Objekte, map und filter. Du kannst das Programm auch vom Agenten entwerfen lassen und es dir zur Prüfung als Tool vorschlagen lassen.

Kann das Programm eine externe API direkt aufrufen? Nein. Es hat keinen Netzwerkzugriff. Es kann nur die in Uses aufgeführten MCP Tools aufrufen; um eine andere API zu erreichen, füge sie zuerst als Connector hinzu.

Bei welchem Connector soll das Code-Tool liegen? Bei einem beliebigen der von ihm verwendeten Connectors; das Tool erscheint überall dort, wo dieser Connector zugewiesen ist. Wähle den, dessen Zielgruppe das Tool erhalten soll.

Verwandte Themen

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

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.

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.