MCP Tools vs Resources vs Prompts: die richtige Wahl
Praxisvergleich von MCP Tools, Resources und Prompts nach Control Plane, Discovery, Schemas, Berechtigungen, Aktualität, UX, Tests und sicherem Serverdesign.
Artikelinhalt
- 01Kurzantwort: Aktion, Kontext und Interaktionsvorlage sind unterschiedliche Verträge
- 02Die Control Plane prägt die UX, erteilt aber keine Autorisierung
- 03Tools: typisierter Operationsvertrag mit dem höchsten Authority-Risiko
- 04Resources: URI, Aktualität und Context Budget müssen explizit sein
- 05Prompts: wiederverwendbarer Workflow mit sichtbaren Argumenten, keine Policy Boundary
- 06Decision Matrix und Anti-Patterns für einen Domain-Workflow
- 07Contract Tests, Canary Rollout und Rollback
Kurzantwort: Aktion, Kontext und Interaktionsvorlage sind unterschiedliche Verträge
Ein MCP Tool beschreibt eine Operation, deren Aufruf das Modell mit typisierten Argumenten vorschlagen kann, etwa eine Bestellung suchen, einen Tarif berechnen oder einen Entwurf erstellen. Eine Resource liefert Kontext, den die Host-Anwendung über eine URI lesen und in die Unterhaltung aufnehmen kann: Datei, Schema, Nachschlagewerk oder Snapshot. Ein Prompt ist eine parametrisierte Nachrichtenvorlage, die der Nutzer bewusst für einen wiederholbaren Workflow auswählt. Das sind drei unterschiedliche Control Planes und nicht drei Varianten derselben Funktion.
Wählen Sie das Primitive danach, wer den nächsten Schritt steuert. Für eine externe Operation oder einen autoritativen Lookup mit Runtime-Parametern eignet sich ein Tool. Wenn Nutzer oder Anwendung Material als Kontext auswählen und lesen sollen, ist eine Resource passend. Für eine sichtbare Startaktion mit Argumenten und vorbereiteten Messages eignet sich ein Prompt. Ein Server kann alle drei kombinieren: Prompt strukturiert die Aufgabe, Resource liefert Policy-Kontext, Tool führt den erlaubten Lookup aus. Prompt oder Resource dürfen keinen Side Effect verstecken, und ein Tool sollte nicht nur statischen Text transportieren.
- Ändert oder berechnet Zustand aus Runtime-Input → Tool.
- Liefert adressierbaren Inhalt als Kontext → Resource.
- Startet eine vom Nutzer gewählte wiederverwendbare Interaktion → Prompt.
- Benötigt zwei Rollen → Primitives mit getrennten Verträgen kombinieren.
Die Control Plane prägt die UX, erteilt aber keine Autorisierung
Die Spezifikation beschreibt Tools als model-controlled: Ein Client kann sie dem Modell anbieten und es einen Aufruf wählen lassen. Bei sensiblen Operationen sollte der Client Inputs anzeigen und eine Ablehnung ermöglichen. Resources sind application-driven; der Host entscheidet über Picker, Suche, automatische Einbindung oder andere Oberflächen. Prompts sind user-controlled und als nutzerzugängliche Befehle oder Templates gedacht, auch wenn das Protokoll keine konkrete UI vorschreibt.
Diese Labels sind keine Autorisierung. Die Wahl eines Tools durch das Modell gewährt kein Recht auf einen Side Effect; die Wahl einer Resource beweist keinen Zugriff auf jede URI; ein gestarteter Prompt autorisiert nicht alle darin beschriebenen Aktionen. Client und Server prüfen Identity, Scopes, Tenant, Target und aktuellen Zustand getrennt. Für folgenreiche Aktionen braucht es beim Ausführen Preview, Confirmation oder Policy Gate statt Vertrauen in eine frühere Prompt-Auswahl.
Resources: URI, Aktualität und Context Budget müssen explizit sein
Eine Resource besitzt eine eindeutige URI und kann Text oder Binärdaten mit MIME Type enthalten. Resource Templates veröffentlichen parametrisierte URIs, optionale Completion kann beim Argument helfen. Ein Client ruft zuerst resources/list oder templates/list und danach resources/read auf. Subscriptions und listChanged sind separate optionale Capabilities; Resource-Support bedeutet keine automatische Aktualisierung.
Für Production sollten Source Owner, Data Classification, Revision oder lastModified, erlaubtes Publikum, Size Budget und Cache Policy festgehalten werden. Annotations wie `audience`, `priority` und `lastModified` sind Hinweise für den Client, keine Access-Control-Entscheidungen. Der Server prüft URI, Authorization und Resource Permission bei jedem Read. Legen Sie keine Secrets in vorhersehbare URIs und nehmen Sie nicht an, dass ein nicht gelistetes Element nicht direkt gelesen werden kann.
Eine Resource eignet sich für Kontext, garantiert aber nicht, dass das Modell sie korrekt verwendet oder zitiert. Evals sollten aktuelle Revision, Passage Support, Conflict Disclosure, No-Answer-Verhalten und Cross-Scope-Canaries prüfen. Für häufig wechselnde Business Facts ist ein Read-only Tool mit autoritativem Lookup zur Request-Zeit oft besser; für browsable Dokumentation mit stabilen Identifiers bietet eine Resource einen besseren Discovery- und Cache-Vertrag.
- Stabiler browsable Content → Resource oder Resource Template.
- Live parametrisierter Fakt → häufig Read-only Tool.
- Subscription ersetzt keinen Revision Check vor wichtigen Entscheidungen.
- URI-Sichtbarkeit ist keine Berechtigung.
Prompts: wiederverwendbarer Workflow mit sichtbaren Argumenten, keine Policy Boundary
Eine Prompt-Definition hat Name, optionalen Titel und Beschreibung sowie eine Liste von Argumenten. prompts/get liefert Beschreibung und Messages, in die der Server validierte Argumente einsetzt. Messages können Text, Bild, Audio oder eingebettete Resources enthalten. Ein guter Prompt beschreibt Ergebnis und erwartete Inputs: `review_incident` mit Incident ID und Review-Tiefe ist nützlicher als ein unpräzises `analyze`.
Ein Prompt eignet sich für discoverable Slash Commands, Onboarding oder standardisierte Analyseabläufe. Er ist keine serverseitige Automation und garantiert nicht die Ausführung der Instruktionen durch das Modell. Verstecken Sie keine Approval, Credentials oder irreversible Aktion im Template. Braucht der Workflow ein Tool, kann der Prompt Messages vorbereiten und Analyse anfordern, aber der Client wendet weiterhin Tool Policy an und der Server autorisiert den Call erneut.
Versionieren Sie den Template-Inhalt oder speichern Sie mindestens dessen Hash in Evaluation Evidence. listChanged meldet eine Katalogänderung, doch eine aktive Unterhaltung kann bereits alte Messages enthalten. Regression Tests sollten Argument Escaping, Prompt Injection in nutzergegebenen Feldern, fehlende Argumente, Locale, Embedded-Resource-Permissions und Verhalten nach einer Template-Änderung prüfen.
Decision Matrix und Anti-Patterns für einen Domain-Workflow
Betrachten wir einen Support Server. `support://policies/refunds/2026-09` ist eine Resource, weil es versionierter Policy-Content zum Lesen ist. `draft_refund_review` ist ein Prompt, weil der Nutzer ein wiederverwendbares Review Template mit Ticket ID auswählt. `tickets.get` und `refunds.create_draft` sind Tools, weil sie Runtime Lookup und kontrollierten Draft erzeugen. Das finale `refunds.submit` sollte mit stärkerem Scope und Confirmation getrennt werden. So bleiben Source, Reasoning Workflow und Authority als eigene Grenzen sichtbar.
Typische Fehler sind: jede Datenbankzeile als Tool veröffentlichen, einen Write Request in einer Resource URI verstecken, stale Policy ohne Revision über ein Tool liefern, einen Prompt als System Policy verwenden, denselben Content in Prompt, Resource und Tool Description duplizieren oder ein Mega-Tool für alle APIs anbieten. Das verschlechtert Discovery, erhöht Context, verwischt Permissions und verhindert eine saubere Failure-Lokalisierung.
Vor der Implementierung sollte eine kurze Contract Card ausgefüllt werden: User Outcome, Controller, Data Owner, Freshness, Input/Output Shape, Side Effects, Permission Check, Audit Event, Failure Semantics, Context Cost und Rollback. Haben zwei Entitäten unterschiedliche Authority oder Lifecycle, sollten sie unterschiedliche Primitives erhalten, selbst wenn der Backend Endpoint gemeinsam ist.
- Context Failure → Resource Revision und Selection prüfen.
- Instruction Failure → Prompt Version und Argument Handling prüfen.
- Execution Failure → Tool Schema, Policy, Effect und Reconciliation prüfen.
- Gemischter Failure → separate Receipts für jede Grenze speichern.
Contract Tests, Canary Rollout und Rollback
Beginnen Sie die Contract Suite mit Capability-Kombinationen: Server mit jedem Primitive einzeln, allen drei zusammen und Katalogänderungen. Testen Sie Pagination, unbekannte Names oder URIs, ungültige Argumente, MIME Handling, Structured Output, listChanged und Resource Subscriptions nur bei deklarierter Capability. Negative Security Cases tauschen Tenant, Target, URI, Prompt Argument und Tool Result aus, fügen indirekte Injection in eine Resource ein und wiederholen einen Write nach unklarem Timeout.
Führen Sie einen End-to-End-Eval auf einem synthetischen Support Case durch: Der Nutzer wählt einen Prompt, der Client liest eine konkrete Policy Revision, das Modell schlägt ein Read Tool vor und der Write Draft benötigt separate Confirmation. Das Evidence Pack enthält Protocol Version, Capability Manifest, Catalog Hashes, Resource Revision, gerenderten Prompt, Tool Inputs/Results, Approval Receipt, Final State und Reviewer Verdict. So lässt sich die fehlerhafte Grenze bestimmen, ohne einer flüssigen Final Answer zu vertrauen.
Starten Sie den Rollout mit einer Read-only Resource, einem Prompt und einem Read-only Tool. Nach Prüfung von Scope und Audit folgt ein reversibler Draft Write; irreversible Aktionen bleiben bis zu einem separaten Approval Contract außerhalb der Model Authority. Rollback deaktiviert die betroffene Capability oder das Tool, widerruft Scope, pinnt die letzte geprüfte Resource- oder Prompt-Revision und erhält Read-only Diagnostics. Reaktivierung verlangt Regression Tests für das geänderte Primitive und die gesamte Komposition.
- Hard Gate → Cross-Tenant Read, versteckter Side Effect oder unautorisierter Write.
- Quality Gate → stale Revision, unbelegte Aussage oder unklarer Prompt Outcome.
- Compatibility Gate → deklarierte Capability passt nicht zum Method Behavior.
- Recovery Gate → Retry dupliziert keinen Effect und unterbricht die Audit Chain nicht.
Praktische Beispiele
Support Workflow mit drei Primitives
Der Nutzer startet einen Prompt für das Ticket Review. Der Client liest eine versionierte Refund-Policy-Resource. Das Modell ruft ein Read-only Ticket Tool auf, erstellt eine Bewertung und ruft erst nach separater Confirmation das Create-Draft Tool auf. Evidence speichert Revisions und Receipts an jeder Grenze.
Wann eine Resource besser als ein Tool ist
Der Server veröffentlicht einen Katalog versionierter API Schemas als Resource Templates. Der Host bietet einen Picker und cached unveränderte Revisions. Ein Tool wird nur für Live-Schema-Validierung gegen ein konkretes Deployment benötigt, nicht für wiederholte Übertragung eines statischen Dokuments.
FAQ
Was ist der Hauptunterschied zwischen MCP Tools, Resources und Prompts?
Ein Tool ist eine model-controlled Operation, eine Resource application-managed Context über URI und ein Prompt ein user-selected wiederverwendbares Message Template. Der konkrete Client bestimmt die UI; Authority und Permissions werden immer separat geprüft.
Kann ein Tool eine Resource zurückgeben?
Ja. Ein Tool Result kann eine eingebettete Resource oder einen Resource Link enthalten. Der Call bleibt dennoch ein Operationsvertrag mit Inputs, Errors und Audit; die Resource behält ihre eigenen URI-, Permission- und Freshness-Semantiken.
Wann sollte man Daten mit einem Tool und wann mit einer Resource lesen?
Eine Resource eignet sich für browsable, adressierbaren und oft versionierten Content. Ein Read-only Tool ist besser für Live-Parameter-Lookups, deren Resultat von Runtime Input, Authorization und autoritativem aktuellem Zustand abhängt.
Kann ein Prompt einen Tool Call automatisch genehmigen?
Nein. Das Starten eines Prompts ist keine Autorisierung für eine spätere Aktion. Der Client wendet Confirmation Policy an, und der Server prüft bei jedem folgenreichen Tool Call Identity, Scope, Target und State.
Verwandte Inhalte
Eine praxisnahe Entscheidung zwischen einer normalen Text- oder strukturierten MCP-Antwort und einer interaktiven MCP App: Nutzenkriterien, Architektur, Sicherheit, Fallback, Tests und Rollout.
MCP Tasks vs. synchrone Tool Calls: lange Operationen zuverlässig ausführenEine praxisnahe Entscheidung zwischen normalem MCP tools/call und experimentellen MCP Tasks für lange Operationen: Capability Negotiation, Zustände, Polling, Cancellation, Sicherheit, Tests und Rollout.
Human-in-the-loop für AIEine praxisnahe Production-Architektur für menschliche Aufsicht: Eine Person wird genau an einem Risikopunkt eingebunden und erhält genug Kontext für echte statt nur formale Kontrolle. Behandelt Verträge, Authority Boundaries, Failure Modes, Evaluation und kontrollierten Rollout.