ClawdDotNet als MCP-Server: durch dieselben Pruefstellen (#713)
Eine fremde Laufzeit oder der eigene Claude Code des Menschen spricht per MCP mit der Instanz. Der Server bietet genau die Werkzeuge des Agenten hinter dem Token an; jeder Aufruf laeuft durch die Engine wie ein Aufruf des eigenen Modells (Rechtetor, Vorpruefung, Werkzeugrechte, Staging, Audit mit Quelle mcp, Rahmung), und der Aufrufer gilt als Leser fremder Inhalte (#715). Eigener Socket mcp.sock statt manager.sock: ueber den Instanz-Socket antwortet die Verwaltung ohne Token, ueber mcp.sock gibt es nur /mcp und nur mit MCP-Token. Lauf-Tokens nur im Speicher, enden mit dem Lauf; persoenliche Tokens (hoechstens 90 Tage, widerrufbar, nur als SHA-256) in der Agentenansicht. Transporte: HTTP auf mcp.sock, Weboberflaeche und Manager (/mcp/{instanz}), stdio ueber ClawdDotNet --mcp-bridge (Token nur aus Umgebung oder 0600-Datei). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b5f65b8cf7
commit
cb46289bb6
@@ -782,6 +782,33 @@ vier Regeln:
|
||||
an den Rechten vorbei. Das Token gilt einen Lauf lang und wird nie in der
|
||||
Befehlszeile übergeben.
|
||||
|
||||
*Der MCP-Server ist gebaut (2026-09-25, #713).* So umgesetzt, mit einer Abweichung vom Plan:
|
||||
|
||||
- **Eigener Socket statt des Instanz-Sockets.** Das Konzept sah HTTP über den
|
||||
Unix-Socket der Instanz vor. Über `manager.sock` antwortet aber die ganze Verwaltung
|
||||
ohne Token, weil dort das Dateisystem die Grenze ist. Eine fremde Laufzeit darf ihn
|
||||
deshalb nie bekommen. Der Server hat einen eigenen Socket `mcp.sock` (0600; unter
|
||||
Windows eine eigene Named Pipe). Über ihn gibt es nur `/mcp`, jeder andere Pfad
|
||||
antwortet 404, und `/mcp` öffnet nur ein MCP-Token. Diesen einen Socket bindet später
|
||||
die Sandbox (#654) ein.
|
||||
- **Ein Weg für alle Aufrufe:** `AgentEngine.ExecuteExternalToolCallAsync` führt jeden
|
||||
Aufruf durch dieselbe Kette wie einen Aufruf des eigenen Modells: Rechtetor,
|
||||
Vorprüfung, Werkzeugrechte, Staging, Audit (Quelle `mcp`), Rahmung. Der Aufrufer gilt
|
||||
als Leser fremder Inhalte (#715, Quelle `external-runtime`): Eine fremde Laufzeit
|
||||
schreibt keine Prosa in den Kontext ihrer Leitung.
|
||||
- **Tokens:** Das Lauf-Token (`McpGrants.OpenRun`) lebt nur im Speicher. Es endet mit dem
|
||||
Handle des Laufs und spätestens nach vier Stunden. Persönliche Tokens für den eigenen
|
||||
Claude Code des Menschen (Agentenansicht, „Externer Zugang“) sind höchstens 90 Tage
|
||||
gültig, jederzeit widerrufbar und nur als SHA-256 gespeichert. Ein Token nennt den
|
||||
Agenten, als der gearbeitet wird; das WebUI-Token öffnet `/mcp` nicht.
|
||||
- **Transporte:** HTTP (`POST /mcp`, JSON-Antworten, keine Sitzungen, kein Ereignisstrom;
|
||||
Anfragen mit `Origin` werden abgewiesen) auf `mcp.sock` und auf dem Port der
|
||||
Weboberfläche. Über den Manager ist der Server unter `POST /mcp/{instanz}` erreichbar;
|
||||
der Manager reicht nur weiter, zum MCP-Socket und nie zum Instanz-Socket. Für lokal
|
||||
gestartete Laufzeiten gibt es stdio über `ClawdDotNet --mcp-bridge --instance <dir>`.
|
||||
Das Token kommt aus `CLAWD_MCP_TOKEN` oder aus einer Datei in `CLAWD_MCP_TOKEN_FILE`;
|
||||
die Brücke lehnt die Datei ab, wenn andere sie lesen dürfen.
|
||||
|
||||
### Kosten, die nichts kosten
|
||||
|
||||
Mit einem Abo kostet ein Lauf 0 $ und verbraucht trotzdem etwas: Kontingent. Die
|
||||
|
||||
Reference in New Issue
Block a user