MCP Form- vs. URL-Elicitation: Nutzerdaten sicher abfragen
Eine praxisnahe Entscheidung zwischen Form- und URL-Elicitation in MCP: Capability Negotiation, sensible Daten, Third-Party OAuth, Completion, Phishing-Schutz, Tests und Rollout.
Artikelinhalt
- 01Kurzantwort: Formulare erfassen nicht geheime Felder, URLs isolieren sensible Interaktionen
- 02Capability Negotiation bestimmt die verfügbare UX vor dem ersten Request
- 03Form-Modus braucht minimales Schema, Preview und Validierung auf beiden Seiten
- 04URL-Modus trennt Navigationszustimmung vom Abschluss des externen Flows
- 05Third-Party-Autorisierung darf nicht mit MCP-Client-Autorisierung verwechselt werden
- 06Die Testmatrix prüft Privacy, Association und Recovery
- 07Der Rollout beginnt mit einem Read-only-Formular und einem allowlisted URL-Flow
Kurzantwort: Formulare erfassen nicht geheime Felder, URLs isolieren sensible Interaktionen
Nutzen Sie den Form-Modus für eine kleine Menge nicht geheimer strukturierter Antworten, die der Nutzer im MCP-Client prüfen und senden kann: Umgebungsname, Berichtsformat, Datumsbereich oder Parameterbestätigung. Der URL-Modus ist erforderlich, wenn die Interaktion Passwort, API-Key, Access Token, Zahlungsdaten oder Third-Party-Autorisierung enthält. Diese Werte werden außerhalb des Clients eingegeben und nicht im ElicitResult-Content zurückgegeben.
Elicitation ist keine Erlaubnis für das Modell zu handeln und ersetzt keine Autorisierung. Sie gibt dem Server nur einen kontrollierten Weg, während eines auslösenden Requests die Mitwirkung des Nutzers anzufordern. Nach der Antwort prüft der Server erneut Identität, Scope, Business Policy und den aktuellen Objektzustand. Ist ein Wert bereits aus einem autoritativen System bekannt oder für die Ausführung unnötig, sollte keine Elicitation erfolgen: Jeder zusätzliche Prompt erhöht Friction und Phishing-Angriffsfläche.
- Nicht geheime primitive Felder → Form-Modus.
- Credentials, Payment oder externes OAuth → URL-Modus.
- Freigabe einer folgenreichen Aktion → separater Policy-/Approval-Gate statt beliebigem Formularfeld.
- Client kündigt den benötigten Modus nicht an → kontrollierter Fallback oder Ablehnung.
- Autoritativer Wert existiert bereits → aus dem System of Record lesen.
Capability Negotiation bestimmt die verfügbare UX vor dem ersten Request
Der Client kündigt während der Initialisierung seine Elicitation-Capability und die unterstützten Form- und/oder URL-Modi an. Ein leeres Elicitation-Objekt ist mit Form-only-Verhalten kompatibel; der Server darf daraus keine URL-Unterstützung ableiten. Speichern Sie das Session-Capability-Manifest zusammen mit ausgehandelter Protocol- und Implementation-Version und prüfen Sie vor elicitation/create den benötigten Modus. Ein Anwendungsname oder ein Button in einem Client beweist keine Kompatibilität in einem anderen Deployment.
Server-to-client Elicitation muss mit einem auslösenden Client-Request wie tools/call oder resources/read verbunden sein. Bauen Sie keinen unabhängigen Kanal für unerbetene Prompts. Der Router bestimmt die Voraussetzung vor jedem Side Effect: Form unterstützt, URL unterstützt, No-Elicitation-Fallback oder blockiert. Kann ein Workflow ohne URL-Modus kein Credential sicher erhalten, ist ein Setup-Link außerhalb des Workflows oder eine klare Ablehnung der richtige Fallback — nicht die Secret-Abfrage in einem Textfeld.
Form-Modus braucht minimales Schema, Preview und Validierung auf beiden Seiten
Ein Form-Request enthält eine verständliche Nachricht und ein eingeschränktes JSON Schema: ein flaches Objekt mit primitiven Properties. Diese Begrenzung ist sinnvoll, weil Elicitation eine kurze Interaktion bleibt statt zu einer versteckten Formularplattform zu werden. Namen, Beschreibungen, Defaults, Enum-Labels und Pflichtfelder müssen die Konsequenz der Antwort erklären. Fügen Sie keine klickbaren URLs in Formularfelder ein und fragen Sie keine Secrets ab, auch wenn das Schema technisch Strings akzeptiert.
Der Client lässt den Nutzer die Antwort prüfen, ändern, akzeptieren, ablehnen oder abbrechen und validiert den Content gegen das Schema. Der Server wiederholt Schema- und Domain-Validierung: Range, Tenant-Zugehörigkeit, Objektexistenz, aktuelle Version und erlaubte Transitions. Accept bedeutet, dass Werte gesendet wurden; es genehmigt keine spätere Hochrisikoaktion automatisch. Decline beendet den Request ohne versteckten Default, und Cancel darf nicht als negative Business-Entscheidung interpretiert werden.
- Nur Felder erfassen, die für den aktuellen Request nötig sind.
- Schema-Gültigkeit von Business-Autorisierung trennen.
- Vollständigen Content nicht ohne Retention-Zweck und Data Classification loggen.
- Nach Decline oder Cancel den Prompt nicht in einer endlosen Agent Loop wiederholen.
Third-Party-Autorisierung darf nicht mit MCP-Client-Autorisierung verwechselt werden
MCP Authorization schützt den Zugriff des Clients auf den MCP Server. URL Elicitation löst ein anderes Problem: Der Server bittet den Nutzer, einen Downstream Service zu verbinden oder eine sichere Out-of-Band-Interaktion abzuschließen. Der Bearer Token zwischen Client und MCP Server ändert sich durch diesen Flow nicht. Geben Sie einen Downstream Token niemals über Model Context, Tool Result oder Form Content zurück; der Server speichert das Credential in einem verwalteten Vault und bindet es an verifizierte Identität und Scope.
Die Connect-URL muss Phishing Relay widerstehen. Der Server prüft, dass der Browser-Nutzer derselbe autoritative Subject ist, für den die Elicitation erstellt wurde, statt E-Mail oder Name aus einem Query Parameter zu vertrauen. State und Nonce sind einmalig, kurzlebig und an Provider sowie Redirect Target gebunden. Der Callback prüft Issuer, Audience, State und erlaubte Redirect URI. Erneutes Öffnen, Nutzerwechsel oder ein abgelaufener Record enden ohne Credential Attachment.
- MCP Token → Client-to-Server Access.
- Downstream Grant → Server-to-Third-Party Access für einen bestimmten Nutzer oder Tenant.
- elicitationId → Korrelations-Handle, kein Nachweis für Identität oder Completion.
- Browser Session + verifizierter Subject → autoritative Bindung.
Die Testmatrix prüft Privacy, Association und Recovery
Contract Tests decken Initialisierung mit Form-only, URL-only, beiden Modi und ohne Elicitation ab; omitted mode als Form; unsupported mode; Accept, Decline und Cancel; Schema-Rejection; unbekannte oder doppelte Completion IDs sowie Request Association. URL-Fälle prüfen, dass der Client die Adresse nicht vorlädt, den Host zeigt, Consent verlangt und keinen externen Content im Protocol Result zurückgibt. Form-Fälle blockieren Password-, Token-, API-Key- und Payment-Fixtures unabhängig vom Feldnamen.
Security Tests versuchen elicitationId, Tenant, Provider, Redirect, State und Browser Subject zu verändern, Callback zu wiederholen, abgelaufene URL zu nutzen, Punycode Host einzusetzen oder ein Secret aus Logs und Traces zu lesen. Recovery Tests verlieren Accept Response, Completion Notification und auslösenden Retry. Assertions verlangen idempotentes Resume: Ein wiederholter Tool Request reconciled zuerst Elicitation State und Downstream Connection statt einen zweiten OAuth Grant oder Payment zu erzeugen.
- Hard Gate → Secret im Formular, automatische Navigation, Identity Mismatch oder Credential Leakage.
- Protocol Gate → Request ohne Association oder Modus ohne Capability.
- Recovery Gate → verlorene Notification darf keinen doppelten externen Effekt erzeugen.
- UX Gate → Server, Zweck, Domain sowie Decline/Cancel sind vor Consent verständlich.
Der Rollout beginnt mit einem Read-only-Formular und einem allowlisted URL-Flow
Starten Sie Form Mode für einen reversiblen Read-only-Workflow mit zwei oder drei nicht geheimen Feldern. Messen Sie Completion, Decline/Cancel, Validation Failures, wiederholte Prompts und Time-to-Resume, ohne Raw Values in allgemeine Telemetry zu schreiben. Fügen Sie danach einen URL-Flow zu einem allowlisted HTTPS Origin mit gepinnter Redirect Policy, verifizierter Identity Binding, Expiry, Replay Protection, Vault Storage, Audit Evidence und Kill Switch hinzu.
Promoten Sie den Canary erst nach erfolgreichen Contract-, Privacy-, Phishing-, Recovery- und Accessibility-Gates. Rollback blockiert neue Elicitation Requests, behält Reconciliation für In-flight Records, widerruft unvollständige State Handles und stellt einen dokumentierten manuellen Setup-Pfad wieder her. Retests sind nach Änderungen an MCP Revision, SDK/Client, Capability Manifest, Browser Container, Identity Provider, Downstream-OAuth-Konfiguration oder Data Classification nötig. Das Verdict gilt immer für eine konkrete Client-Server-Flow-Kombination, nicht für eine universelle Sicherheit des URL-Modus.
Praktische Beispiele
Formular für Read-only-Exportparameter
Dem Tool fehlen Berichtsformat und Zeitraum. Der Server fragt Enum-Format und Datumsbereich ab, der Client zeigt eine Preview, und der Server validiert Range und Tenant erneut. Decline beendet den Export ohne Side Effect; das Formular sammelt keine Credentials.
URL zum Verbinden eines CRM
Der Server erstellt einen kurzlebigen Elicitation Record und zeigt eine allowlisted HTTPS URL. Der Browser-Nutzer durchläuft Third-Party OAuth, der Callback prüft Subject und State, und der Token gelangt direkt in den Server Vault. Der Client erhält ein Completion Signal, sieht das Credential aber nie.
FAQ
Darf Form Elicitation einen API-Key abfragen?
Nein. Die Spezifikation verbietet Form Mode für Passwörter, API-Keys, Access Tokens und Zahlungsdaten. Verwenden Sie URL Mode mit einem sicheren Out-of-Band-Flow.
Bedeutet Accept im URL-Modus, dass OAuth abgeschlossen ist?
Nein. Es ist nur die Zustimmung, zur URL zu navigieren. Ein serverseitiger Flow bestätigt Completion; eine Completion Notification kann den Client informieren, Retry und Reconciliation bleiben jedoch nötig.
Ersetzt URL Elicitation die MCP-Autorisierung?
Nein. MCP Authorization kontrolliert Client-to-Server Access. URL Elicitation kann einen Third-Party Grant für den Server erhalten, ohne den Bearer Token des Clients zu verändern.
Was tun, wenn der Client nur Form Mode unterstützt?
Senden Sie keinen URL Request. Bieten Sie einen sicheren manuellen Setup-Pfad außerhalb des Workflows, einen kompatiblen Client oder eine klare Fehlermeldung an; sammeln Sie das Secret niemals als Fallback im Formular.
Verwandte Inhalte
Eine 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.
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.