MCP Sicherheit und Autorisierung
MCP standardisiert, wie Fähigkeiten beschrieben und aufgerufen werden. Es entscheidet nicht, welche Fähigkeiten ein Agent erhalten soll oder welchen Nebenwirkungen ein Benutzer zugestimmt hat.
Vier separate Entscheidungen
- Verbindungsauthentifizierung — darf dieser Client eine Verbindung zu diesem Server herstellen?
- Sichtbarkeit von Fähigkeiten — welche Tools und Ressourcen darf das Modell sehen?
- Ausführungsautorisierung — darf diese Identität diese spezifische Aktion auf dieser Ressource jetzt ausführen?
- Menschliche Freigabe — muss eine folgenreiche Aktion von einer Person bestätigt werden, einschließlich ihrer genauen Eingaben und Auswirkungen?
Fassen Sie diese Entscheidungen nicht in einer autoApprove-Konfigurationsliste zusammen.
Lokale stdio-Server
Ein lokaler Kindprozess erbt eine mächtige Position innerhalb des Anwendungshosts.
- Verwenden Sie einen absoluten, geprüften ausführbaren Pfad.
- Heften Sie Paket- und Binärversionen fest; vermeiden Sie
latest-Tags. - Übergeben Sie nur erforderliche Umgebungsvariablen.
- Platzieren Sie keine Geheimnisse in Befehlszeilenargumenten.
- Beschränken Sie Dateisystem-Roots und Arbeitsverzeichnisse.
- Wenden Sie ein OS-Sandbox-Profil an, wenn der Server nicht vertrauenswürdige Eingaben verarbeitet.
- Behandeln Sie Serverbeschreibungen, Ressourcen und Ergebnisse als nicht vertrauenswürdigen Inhalt.
Die JSON-Ladevorgangs- und Laufzeit-Add/Update-Pfade validieren Server-IDs.
McpServerManager sandboxiert den konfigurierten Befehl nicht.
Remote Streamable HTTP
McpHttpClientBuilder kann Folgendes anwenden:
- Bearer-Token;
- einen vom Aufrufer ausgewählten API-Key-Header;
- beliebige geprüfte Header;
- feste OAuth 2.0 Client-Credentials-Tokenanfrage;
- Request-Timeouts; und
- eine begrenzte Session-Neuinitialisierung nach einer Antwort wegen abgelaufener Sitzung.
OAuth2Config ist nicht der vollständige MCP-Autorisierungsablauf. Es führt keine
Entdeckung von Metadaten geschützter Ressourcen, keine Entdeckung des Autorisierungsservers, keine Browser-
Autorisierung, kein PKCE und keine Aushandlung von Ressourcen-Identifikatoren durch. Verwenden Sie rmcps
Autorisierungs-APIs oder eine Identitätskomponente, wenn die Bereitstellung diesen
Ablauf erfordert.
Begrenzen Sie die Tokenanfrage, damit ein langsamer oder nicht erreichbarer Autorisierungsserver die Verbindungsinitialisierung nicht blockieren kann, und beachten Sie, dass der Client das Client-Secret niemals zurückgibt — Fehlertexte des Token-Endpunkts werden redigiert, bevor sie Protokolle erreichen:
use adk_tool::mcp::OAuth2Config;
use std::time::Duration;
let auth = OAuth2Config::new(client_id, token_url)
.with_secret(client_secret)
.with_scopes(vec!["mcp.read".into(), "mcp.invoke".into()])
.with_timeout(Duration::from_secs(10)); // token request timeout
Das Standard-Timeout für Tokenanfragen beträgt 30 Sekunden.
Tool-Exposition und Ausführung
Verwenden Sie with_tools oder with_filter, um unnötige Fähigkeiten aus der
Modellanfrage herauszuhalten. Wenden Sie dann zur Ausführungszeit ADK-Rust-Toolautorisierung und Bestätigung an.
Für folgenreiche Tools:
- zeigen Sie der Person die final aufgelösten Argumente;
- unterscheiden Sie zwischen einmaliger Freigabe und dauerhafter Richtlinie;
- binden Sie die Freigabe an die exakte Funktionsaufruf-ID;
- machen Sie externe Schreibvorgänge, wo möglich, idempotent;
- speichern Sie die Freigabeentscheidung und das Tool-Ergebnis zusammen; und
- behandeln Sie eine erfolgreiche Protokollantwort niemals als Beweis für ein erfolgreiches Geschäftsergebnis, ohne die zurückgegebenen Nachweise zu prüfen.
Elicitation
Elicitation ist eine Serveranfrage nach weiteren Informationen, keine Anweisung, der die Anwendung folgen muss. Prüfen Sie die Nachricht, URL, angeforderte Felder und Metadaten. Lehnen Sie nicht unterstützte oder unerwartete Anfragen ab. Validieren Sie alle akzeptierten Formularwerte, bevor Sie sie verwenden.
Protokollierung und Geheimnisse
Redigieren Sie Umgebungsvariablen, Autorisierungsheader, API-Schlüssel, Elicitation- Antworten und sensible Tool-Argumente. Erfassen Sie stattdessen Server-ID, Tool-Name, Aufgaben-ID, Status, Zeitmessung, Freigabe und eine begrenzte Zusammenfassung des Ergebnisses.