Skip to content

MCP Gateway

Verwenden Sie jeden MCP-Server. Wir sichern die Grenze ab.

Das Model Context Protocol (MCP) ist der aufkommende Standard fuer Agent-zu-Tool-Kommunikation. Triggerfish bietet ein sicheres MCP Gateway, das Ihnen ermoeglicht, sich mit jedem MCP-kompatiblen Server zu verbinden und dabei Klassifizierungskontrollen, Tool-Level-Berechtigungen, Taint-Tracking und vollstaendiges Audit-Logging durchzusetzen.

Sie bringen die MCP-Server. Triggerfish sichert jede Anfrage und Antwort, die die Grenze ueberquert.

Funktionsweise

Das MCP Gateway sitzt zwischen Ihrem Agenten und jedem MCP-Server. Jeder Tool-Aufruf durchlaeuft die Policy-Durchsetzungsschicht, bevor er den externen Server erreicht, und jede Antwort wird klassifiziert, bevor sie in den Agenten-Kontext eintritt.

MCP Gateway-Ablauf: Agent → MCP Gateway → Policy-Schicht → MCP-Server, mit Ablehnungspfad zu BLOCKIERT

Das Gateway bietet fuenf Kernfunktionen:

  1. Server-Authentifizierung und -Klassifizierung -- MCP-Server muessen vor der Verwendung geprueft und klassifiziert werden
  2. Tool-Level-Berechtigungsdurchsetzung -- Einzelne Tools koennen erlaubt, eingeschraenkt oder blockiert werden
  3. Anfrage/Antwort-Taint-Tracking -- Session-Taint eskaliert basierend auf der Server-Klassifizierung
  4. Schema-Validierung -- Alle Anfragen und Antworten werden gegen deklarierte Schemas validiert
  5. Audit-Logging -- Jeder Tool-Aufruf, jede Entscheidung und jede Taint-Aenderung wird aufgezeichnet

MCP-Server-Zustaende

Alle MCP-Server starten standardmaessig als UNTRUSTED. Sie muessen explizit klassifiziert werden, bevor der Agent sie aufrufen kann.

ZustandBeschreibungAgent kann aufrufen?
UNTRUSTEDStandard fuer neue Server. Pruefung ausstehend.Nein
CLASSIFIEDGeprueft und mit einer Klassifizierungsstufe und pro-Tool-Berechtigungen versehen.Ja (innerhalb der Policy)
BLOCKEDExplizit vom Administrator verboten.Nein
MCP-Server-Zustandsmaschine: UNTRUSTED → CLASSIFIED oder BLOCKED

SICHERHEIT Ein UNTRUSTED MCP-Server kann unter keinen Umstaenden vom Agenten aufgerufen werden. Das LLM kann das System nicht bitten, ueberzeugen oder dazu verleiten, einen nicht klassifizierten Server zu verwenden. Klassifizierung ist eine Code-Level-Sperre, keine LLM-Entscheidung. :::

Konfiguration

MCP-Server werden in triggerfish.yaml als Map konfiguriert, die nach Server-ID schluesselt. Jeder Server verwendet entweder einen lokalen Unterprozess (stdio-Transport) oder einen Remote-Endpunkt (SSE-Transport).

Lokale Server (Stdio)

Lokale Server werden als Unterprozesse gestartet. Triggerfish kommuniziert mit ihnen ueber stdin/stdout.

yaml
mcp_servers:
  github:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: "keychain:github-pat"
    classification: CONFIDENTIAL

  filesystem:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/you/docs"]
    classification: INTERNAL

  weather:
    command: npx
    args: ["-y", "@mcp/server-weather"]
    classification: PUBLIC

Remote-Server (SSE)

Remote-Server laufen anderswo und werden ueber HTTP Server-Sent Events aufgerufen.

yaml
mcp_servers:
  remote_api:
    url: "https://mcp.example.com/sse"
    classification: CONFIDENTIAL

Konfigurationsschluessel

SchluesselTypErforderlichBeschreibung
commandstringJa (stdio)Auszufuehrendes Binary (z.B. npx, deno, node)
argsstring[]NeinArgumente fuer den Befehl
envmapNeinUmgebungsvariablen fuer den Unterprozess
urlstringJa (SSE)HTTP-Endpunkt fuer Remote-Server
classificationstringJaDaten-Sensitivitaetsstufe: PUBLIC, INTERNAL, CONFIDENTIAL oder RESTRICTED
enabledbooleanNeinStandard: true. Auf false setzen, um ohne Entfernung der Konfiguration zu ueberspringen.

Jeder Server muss entweder command (lokal) oder url (remote) haben. Server ohne beides werden uebersprungen.

Lazy Connection

MCP-Server verbinden sich im Hintergrund nach dem Start. Sie muessen nicht warten, bis alle Server bereit sind, bevor Sie Ihren Agenten verwenden.

  • Server versuchen es erneut mit exponentiellem Backoff: 2s → 4s → 8s → 30s Maximum
  • Neue Server werden dem Agenten verfuegbar, sobald sie sich verbinden -- kein Session-Neustart erforderlich
  • Wenn ein Server nach allen Versuchen keine Verbindung herstellt, geht er in den failed-Zustand und kann beim naechsten Daemon-Neustart erneut versucht werden

Die CLI- und Tidepool-Oberflaechen zeigen den MCP-Verbindungsstatus in Echtzeit an. Siehe CLI-Kanal fuer Details.

Server deaktivieren

Um einen MCP-Server voruebergehend zu deaktivieren, ohne seine Konfiguration zu entfernen:

yaml
mcp_servers:
  github:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
    classification: CONFIDENTIAL
    enabled: false # Wird beim Start uebersprungen

Umgebungsvariablen und Secrets

Env-Werte mit dem Praefix keychain: werden beim Start aus dem Betriebssystem-Schluesselbund aufgeloest:

yaml
env:
  API_KEY: "keychain:my-secret-name" # Wird aus dem Betriebssystem-Schluesselbund aufgeloest
  PLAIN_VAR: "literal-value" # Wird direkt uebergeben

Nur PATH wird von der Host-Umgebung geerbt (damit npx, node, deno usw. korrekt aufgeloest werden). Keine anderen Host-Umgebungsvariablen gelangen in MCP-Server-Unterprozesse.

Speichern Sie Secrets mit triggerfish config set-secret <name> <wert>. Dann referenzieren Sie sie als keychain:<name> in Ihrer MCP-Server-Env-Konfiguration. :::

Tool-Benennung

Tools von MCP-Servern werden als mcp_<serverId>_<toolName> namensraumisiert, um Kollisionen mit eingebauten Tools zu vermeiden. Wenn beispielsweise ein Server namens github ein Tool namens list_repos bereitstellt, sieht der Agent es als mcp_github_list_repos.

Klassifizierung und Standard-Ablehnung

Wenn Sie classification weglassen, wird der Server als UNTRUSTED registriert und das Gateway lehnt alle Tool-Aufrufe ab. Sie muessen explizit eine Klassifizierungsstufe waehlen. Siehe den Klassifizierungsleitfaden fuer Hilfe bei der Wahl der richtigen Stufe.

Tool-Aufruf-Ablauf

Wenn der Agent einen MCP-Tool-Aufruf anfordert, fuehrt das Gateway eine deterministische Folge von Pruefungen durch, bevor die Anfrage weitergeleitet wird.

1. Vorab-Pruefungen

Alle Pruefungen sind deterministisch -- keine LLM-Aufrufe, kein Zufall.

PruefungFehlerresultat
Server-Status ist CLASSIFIED?Blockiert: "Server nicht genehmigt"
Tool ist fuer diesen Server erlaubt?Blockiert: "Tool nicht erlaubt"
Benutzer hat erforderliche Berechtigungen?Blockiert: "Berechtigung verweigert"
Session-Taint kompatibel mit Server-Klassifizierung?Blockiert: "Wuerde Write-Down verletzen"
Schema-Validierung bestanden?Blockiert: "Ungueltige Parameter"

Wenn der Session-Taint hoeher als die Server-Klassifizierung ist, wird der Aufruf blockiert, um Write-Down zu verhindern. Eine auf CONFIDENTIAL getaintete Session kann keine Daten an einen PUBLIC MCP-Server senden. :::

2. Ausfuehren

Wenn alle Vorab-Pruefungen bestanden sind, leitet das Gateway die Anfrage an den MCP-Server weiter.

3. Antwortverarbeitung

Wenn der MCP-Server eine Antwort zurueckgibt:

  • Antwort gegen das deklarierte Schema validieren
  • Antwortdaten auf der Klassifizierungsstufe des Servers klassifizieren
  • Session-Taint aktualisieren: taint = max(aktueller_taint, server_klassifizierung)
  • Lineage-Datensatz erstellen, der den Datenursprung verfolgt

4. Audit

Jeder Tool-Aufruf wird protokolliert mit: Server-Identitaet, Tool-Name, Benutzer-Identitaet, Policy-Entscheidung, Taint-Aenderung und Zeitstempel.

Antwort-Taint-Regeln

MCP-Server-Antworten erben die Klassifizierungsstufe des Servers. Session-Taint kann nur eskalieren.

Server-KlassifizierungAntwort-TaintSession-Auswirkung
PUBLICPUBLICKeine Taint-Aenderung
INTERNALINTERNALTaint eskaliert auf mindestens INTERNAL
CONFIDENTIALCONFIDENTIALTaint eskaliert auf mindestens CONFIDENTIAL
RESTRICTEDRESTRICTEDTaint eskaliert auf RESTRICTED

Sobald eine Session auf einer bestimmten Stufe getaintet ist, bleibt sie auf dieser Stufe oder hoeher fuer den Rest der Session. Ein vollstaendiger Session-Reset (der den Gespraechsverlauf loescht) ist erforderlich, um den Taint zu reduzieren.

Benutzer-Authentifizierungs-Durchleitung

Fuer MCP-Server, die benutzerspezifische Authentifizierung unterstuetzen, leitet das Gateway die delegierten Anmeldedaten des Benutzers weiter, anstatt System-Anmeldedaten zu verwenden.

Wenn ein Tool mit requires_user_auth: true konfiguriert ist:

  1. Das Gateway prueft, ob der Benutzer diesen MCP-Server verbunden hat
  2. Ruft die delegierten Anmeldedaten des Benutzers aus dem sicheren Credential Store ab
  3. Fuegt Benutzer-Authentifizierung zu den MCP-Anfrage-Headern hinzu
  4. Der MCP-Server setzt Berechtigungen auf Benutzerebene durch

Das Ergebnis: Der MCP-Server sieht die Identitaet des Benutzers, nicht eine System-Identitaet. Berechtigungsvererbung funktioniert ueber die MCP-Grenze hinweg -- der Agent kann nur auf das zugreifen, worauf der Benutzer zugreifen kann.

Benutzer-Auth-Durchleitung ist das bevorzugte Muster fuer jeden MCP-Server, der Zugangskontrolle verwaltet. Es bedeutet, dass der Agent die Berechtigungen des Benutzers erbt, anstatt uneingeschraenkten Systemzugang zu haben. :::

Schema-Validierung

Das Gateway validiert alle MCP-Anfragen und -Antworten gegen deklarierte Schemas, bevor sie weitergeleitet werden:

typescript
// Anfrage-Validierung (vereinfacht)
function validateMcpRequest(
  serverConfig: McpServerConfig,
  toolName: string,
  params: Record<string, unknown>,
): Result<void, McpError> {
  const toolSchema = serverConfig.getToolSchema(toolName);

  if (!toolSchema) {
    return err(new McpError("Unknown tool"));
  }

  // Parameter gegen JSON-Schema validieren
  if (!validateJsonSchema(params, toolSchema.inputSchema)) {
    return err(new McpError("Invalid parameters"));
  }

  // Auf Injection-Muster in String-Parametern pruefen
  for (const [, value] of Object.entries(params)) {
    if (typeof value === "string" && containsInjectionPattern(value)) {
      return err(new McpError("Potential injection detected"));
    }
  }

  return ok(undefined);
}

Schema-Validierung faengt fehlerhafte Anfragen ab, bevor sie den externen Server erreichen, und markiert potenzielle Injection-Muster in String-Parametern.

Enterprise-Kontrollen

Enterprise-Bereitstellungen haben zusaetzliche Kontrollen fuer MCP-Server-Verwaltung:

  • Admin-verwaltete Server-Registry -- Nur von Administratoren genehmigte MCP-Server koennen klassifiziert werden
  • Pro-Abteilung-Tool-Berechtigungen -- Verschiedene Teams koennen unterschiedlichen Tool-Zugriff haben
  • Compliance-Logging -- Alle MCP-Interaktionen in Compliance-Dashboards verfuegbar
  • Rate-Limiting -- Pro-Server- und Pro-Tool-Rate-Limits
  • Server-Gesundheitsueberwachung -- Gateway verfolgt Server-Verfuegbarkeit und Antwortzeiten