Tools

Tool Design Guide

Wie MCP-Tools nach einem einheitlichen Contract-Standard beschrieben, klassifiziert und abgesichert werden, von Low bis Forbidden.

Ein MCP-Tool ist kein Funktionsaufruf. Es ist ein Vertrag. Es beschreibt, was das System kann, wer es aufrufen darf, was dabei passiert, und was schiefgehen kann. Dieser Vertrag muss maschinenlesbar, typisiert und vollständig sein, bevor ein Agent oder ein Benutzer das Tool überhaupt aufruft.

Ein Tool ohne Contract ist eine Blackbox. Eine Blackbox ist kein MCP-first System.

Das Prinzip

Der Tool Contract Standard

Jedes MCP-Tool wird nach einem einheitlichen Schema beschrieben. Das Schema umfasst nicht nur Eingabe- und Ausgabetypen, sondern auch Risikostufe, Berechtigungen, Side Effects, Audit Events und mögliche Fehlerfälle. Nur wer alle Felder kennt, kann ein Tool sicher einsetzen, ob durch einen Agenten, eine Webapp oder einen automatisierten Workflow.

Die Felder im Überblick:

  • Name, eindeutiger, maschinenlesbarer Bezeichner im Format domain.verb
  • Description, natürlichsprachige Beschreibung des Zwecks für Agents und Entwickler
  • Category, fachliche Einordnung (z. B. communication, files, billing)
  • Risk Level, Klassifizierung nach dem Risikomodell (Low bis Forbidden)
  • Autonomous Execution, ob ein Agent das Tool ohne menschliche Freigabe aufrufen darf
  • Confirmation, ob eine explizite Nutzerbestätigung erforderlich ist
  • Step-up Auth, ob eine zusätzliche Authentifizierung nötig ist und wann
  • Input Schema, typisierte Parameter inkl. optionaler Felder
  • Output Schema, typisierte Rückgabewerte inkl. Statuscodes
  • Permissions, welche Berechtigungen das Tool erfordert
  • Side Effects, alle Zustandsänderungen außerhalb des Rückgabewerts
  • Audit Event, welches Event ins Audit Log geschrieben wird
  • Failure Modes, vollständige Liste aller möglichen Fehlercodes

Das folgende Beispiel zeigt den vollständigen Contract für emails.send_external, ein Tool mit Critical-Risiko, das externe Kommunikation auslöst:

emails.send_external
Critical

Sendet eine externe E-Mail an einen oder mehrere Empfänger.

Kategorie
communication
Autonome Ausführung
nicht erlaubt
Bestätigung
ja
Step-up Auth
optional, je nach Empfängerzahl und Anhang
Audit-Event
email.external.sent

Input-Schema

  • to: string[]
  • subject: string
  • body: string
  • attachments?: fileId[]
  • projectId?: string

Output-Schema

  • emailId: string
  • status: sent | scheduled | failed

Berechtigungen

  • emails:send
  • contacts:read
  • files:read

Fehlerfälle

  • permission_denied
  • confirmation_required
  • invalid_recipient
  • attachment_too_large
  • rate_limit_exceeded
  • policy_violation

Side Effects

  • Externe Kommunikation wird versendet.
  • E-Mail wird Teil der Kommunikationshistorie.
  • Audit-Event wird erzeugt.

Jedes Feld hat eine Funktion im System: permissions steuert die Policy Engine, sideEffects informiert die Confirmation UI, failureModes werden im Error Handling ausgewertet, auditEvent wird ins Audit Log geschrieben. Der Contract ist damit nicht nur Dokumentation, er ist Teil der Laufzeit.

Das Risikomodell

MCP-first klassifiziert jedes Tool in eine von fünf Risikostufen. Die Stufe bestimmt, ob ein Agent das Tool autonom aufrufen darf, ob eine Bestätigung erforderlich ist und ob Step-up Auth verlangt wird. Die Einstufung ist nicht optional, sie ist Teil des Contracts.

Low

Low

Tools dieser Stufe sind rein lesend oder erzeugen keine dauerhaften Effekte. Sie dürfen von Agents autonom ausgeführt werden, ohne Bestätigung oder Step-up Auth. Typisch sind Listenabfragen, Suchen und Hilfe-Ressourcen.

Low Risk, Beispiele
  • list_projects Low
  • get_current_user Low
  • search_contacts Low
  • get_help_article Low
  • create_reminder Low

Medium

Medium

Tools dieser Stufe erzeugen Daten oder Zustände, aber in einem eng begrenzten Scope ohne externe Wirkung. Sie dürfen autonom ausgeführt werden, wenn Scope und Kontext eindeutig aus dem Workflow hervorgehen. Bei unklarem Kontext ist Bestätigung ratsam.

Medium Risk, Beispiele
  • create_note Medium
  • update_task_status Medium
  • generate_summary Medium
  • create_draft Medium

High

High

Tools dieser Stufe ändern relevante Systemzustände oder betreffen andere Nutzer und externe Ressourcen. Sie erfordern in der Regel eine explizite Bestätigung. Ein Agent darf sie nicht stillschweigend ausführen.

High Risk, Beispiele
  • change_project_status High
  • invite_calendar_attendee High
  • share_file_link High
  • update_customer_data High

Critical

Critical

Tools dieser Stufe lösen externe Kommunikation, Zahlungen, Datenlöschungen oder Berechtigungsänderungen aus. Sie erfordern immer eine explizite Bestätigung und häufig Step-up Auth. Autonome Ausführung ist nicht erlaubt.

Critical Risk, Beispiele
  • emails.send_external Critical
  • bulk_export Critical
  • delete_user Critical
  • change_permissions Critical
  • execute_payment Critical
  • send_contract Critical

Forbidden for AI

Forbidden for AI

Tools dieser Stufe dürfen von einem KI-Agenten weder gelesen noch ausgeführt werden. Sie sind aus der Tool Discovery für Agents vollständig ausgeblendet. Die Klassifizierung ist eine harte Grenze, keine Policy-Entscheidung.

Forbidden, Beispiele
  • read_private_key Forbidden for AI
  • read_password Forbidden for AI
  • read_raw_access_token Forbidden for AI
  • disable_audit_log Forbidden for AI
  • export_full_database_without_approval Forbidden for AI

Was ein Agent nicht sehen darf, darf er nicht finden. Forbidden-Tools erscheinen nicht in Discovery-Antworten.

Idempotenz

Viele Tools werden in Agenten-Workflows mehrfach aufgerufen, durch Retries, Parallelausführung oder fehlerhafte Planung. MCP-first empfiehlt, Tools wo möglich idempotent zu gestalten: gleicher Input führt bei mehrfachem Aufruf zum selben Ergebnis, ohne unerwünschte Duplikate oder Nebenwirkungen zu erzeugen.

Das Tool create_download_link ist ein gutes Beispiel. Wenn für eine Datei mit demselben fileId und demselben expiresAt bereits ein gültiger Link existiert, gibt das Tool diesen zurück, statt einen zweiten zu erzeugen:

create_download_link(fileId: "f_abc123", expiresAt: "2025-12-31T23:59:00Z")

→ Erster Aufruf: erzeugt neuen Link, gibt linkId + url zurück
→ Zweiter Aufruf (gleiche Parameter, Link noch gültig): gibt denselben Link zurück
→ Dritter Aufruf (Link abgelaufen): erzeugt neuen Link

Idempotenz muss explizit implementiert werden, sie entsteht nicht automatisch. Das Tool Contract Feld sideEffects sollte das Verhalten bei Wiederholung beschreiben, damit Agents und Clients es korrekt einplanen können.

Dry Run

Riskante Tools, insbesondere solche mit Massen-Effekten, sollten einen Dry-Run-Modus anbieten. Der Dry Run führt alle Validierungen und Prüfungen durch, erzeugt aber keine echten Side Effects. Das Ergebnis zeigt, was passieren würde, ohne dass etwas tatsächlich passiert.

emails.bulk_send mit dryRun: true liefert eine vollständige Vorschau:

// Request
{
  "tool": "emails.bulk_send",
  "params": {
    "templateId": "tmpl_newsletter_q3",
    "segmentId": "seg_active_customers",
    "dryRun": true
  }
}

// Response
{
  "dryRun": true,
  "recipientCount": 4821,
  "sampleMessages": [
    {
      "to": "[email protected]",
      "subject": "Ihr Q3-Update ist da",
      "previewText": "Liebe Anna, im dritten Quartal haben wir…"
    },
    {
      "to": "[email protected]",
      "subject": "Ihr Q3-Update ist da",
      "previewText": "Lieber Max, im dritten Quartal haben wir…"
    }
  ],
  "warnings": [
    "43 Empfänger haben keinen Vornamen, Fallback 'Hallo' wird verwendet.",
    "12 E-Mail-Adressen sind als unzustellbar markiert und werden übersprungen."
  ],
  "missingPermissions": [],
  "expectedSideEffects": [
    "4821 externe E-Mails werden versendet.",
    "4821 Audit-Events vom Typ email.external.sent werden erzeugt.",
    "Kampagnen-Status wird auf 'sent' gesetzt."
  ],
  "estimatedDurationMs": 18400
}

Erst nach Prüfung des Dry-Run-Ergebnisses und expliziter Bestätigung durch den Nutzer erfolgt der echte Aufruf ohne dryRun. Der Agent darf den Dry Run nicht überspringen, wenn das Tool ihn als erforderlich deklariert.