Merge pull request 'feature/pi-carson-mcp-blog' (#7) from feature/pi-carson-mcp-blog into main
Reviewed-on: https://codeberg.org/gurix/markusgraf_ch/pulls/7
This commit is contained in:
@@ -0,0 +1,91 @@
|
|||||||
|
---
|
||||||
|
title: "Wenn KI mit KI spricht: MCP-Extension für simple Agent-Abfragen"
|
||||||
|
date: 2026-04-24
|
||||||
|
description: "Ich habe eine kleine Extension namens nanoclaw-mcp-ext entwickelt. Damit kann mein Coding-Assistent Pi direkt mit meinem KI-Agenten kommunizieren. Ein spannender Use Case für das Model Context Protocol."
|
||||||
|
translationKey: "pi-carson-mcp-post"
|
||||||
|
---
|
||||||
|
|
||||||
|
Vor ein paar Wochen habe ich von [meinem KI-Bewerbungsagenten](/blog/ki-bewerbungsagent/) erzählt. Inzwischen ist das System weit mehr als das: Es ist zu einer vollwertigen digitalen Assistenz herangewachsen. Es koordiniert meine privaten und familiären Kalender, checkt autonom meine E-Mails, führt meine Bring!-Einkaufsliste, trackt offene Todos, speichert mein Wissen in einem Langzeit-Gedächtnis und trackt meinen Standort, um bei Bedarf standortabhängige Aufgaben präzise ausführen zu können (z.B. für lokale Empfehlungen oder Mobilitätsplanung). Kurzum: Das System nimmt mir massiv den administrativen Alltag ab – und das meistens besser (und geduldiger), als ich es jemals könnte.
|
||||||
|
|
||||||
|
Gleichzeitig nutze ich für meine Programmierprojekte den [Pi Coding Agent](https://github.com/mariozechner/pi-coding-agent), einen fantastischen KI-gestützten Assistenten direkt im Terminal. Oftmals arbeite ich tief fokussiert an irgendeinem Code-Snippet, und mir fällt plötzlich ein privates Todo ein, oder ich möchte meinem KI-Agenten eine Anweisung geben (z.B. "Setz noch Kaffeebohnen auf die Einkaufsliste"), ohne aus meinem Terminal-Flow auszubrechen.
|
||||||
|
|
||||||
|
Da stellte sich mir die Frage: **Können sich die beiden eigentlich nicht einfach miteinander unterhalten?**
|
||||||
|
|
||||||
|
Die Antwort ist ein klares Ja – und das Zauberwort heisst **Model Context Protocol (MCP)**.
|
||||||
|
|
||||||
|
## Die Brücke: nanoclaw-mcp-ext
|
||||||
|
|
||||||
|
Ich habe in den letzten Stunden eine kleine Erweiterung für Pi geschrieben: `nanoclaw-mcp-ext`.
|
||||||
|
Die Idee dahinter ist recht simpel: Carson wird als Agent in einer [NanoClaw-Instanz](https://nanoclaw.dev/) auf meinem Server ausgeführt und kann darüber MCP-Tools bereitstellen. Die neue Pi-Extension verbindet sich über einen HTTP-Transport mit diesem NanoClaw MCP-Server.
|
||||||
|
|
||||||
|
Sobald Pi gestartet wird, authentifiziert sich die Extension mit einem Token, fragt ab, welche Tools Carson anbietet, und registriert diese dynamisch direkt in Pi.
|
||||||
|
|
||||||
|
### Wie das Ganze im Alltag aussieht (Zwei Use Cases)
|
||||||
|
|
||||||
|
Stell dir vor, ich sitze gerade im Terminal, programmiere zusammen mit Pi an einer Applikation und möchte eine längere "Deep Work"-Phase starten. Ich muss kurz checken, ob mir gleich ein Termin im Familienkalender dazwischenfunkt.
|
||||||
|
|
||||||
|
Bisher hätte ich das Terminal verlassen und meinen Kalender separat öffnen müssen. Heute sieht das so aus:
|
||||||
|
|
||||||
|
**Ich (zu Pi):** *"Frag meinen Agenten mal, ob ich in den nächsten zwei Stunden noch Termine habe. Wenn nicht, fangen wir mit dem grossen Datenbank-Refactoring an."*
|
||||||
|
|
||||||
|
**Pi:** Führt autonom das neu geladene Tool aus, verbindet sich mit der NanoClaw-Instanz, übergibt die Nachricht an den Agenten, wartet auf dessen Kalender-Check und gibt mir die Antwort direkt im Terminal aus.
|
||||||
|
|
||||||
|
Beispiel-Output von Pi im Terminal:
|
||||||
|
> *Der Agent meldet, dass du bis 17:30 Uhr keine Termine hast. Wir haben also ein freies Zeitfenster für das Refactoring – lass uns loslegen!*
|
||||||
|
|
||||||
|
Ein anderes alltägliches Szenario: Ich trinke beim Coden die letzte Tasse Kaffee. Ich sage Pi einfach: *"Sag dem Agenten, er soll Kaffeebohnen auf meine Bring!-Einkaufsliste setzen."* Pi leitet das an mein System weiter, welches seine Bring!-Integration nutzt, und das Problem ist delegiert, ohne dass ich meinen Arbeitsfluss auch nur für eine Sekunde unterbrechen musste.
|
||||||
|
|
||||||
|
Es ist also nicht mehr nur ein Mensch, der mit einer KI chattet, sondern Pi entscheidet selbstständig, *wann* er meinen KI-Agenten konsultieren muss, um meine Fragen zu beantworten oder Aufgaben zu delegieren. Das fühlt sich fast ein bisschen wie KI-Magie an.
|
||||||
|
|
||||||
|
## Ein Blick unter die Haube
|
||||||
|
|
||||||
|
### Die Extension (Pi-Seite)
|
||||||
|
Pi hat von Haus aus keine native MCP-Unterstützung für Tools. Deshalb habe ich die Extension `nanoclaw-mcp-ext` entwickelt. Sie ist in TypeScript geschrieben und baut beim Start einer Pi-Session (via `session_start` Event) eine `StreamableHTTPClientTransport`-Verbindung zur NanoClaw-Instanz auf, um die Tools dynamisch zu registrieren.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Ein kleiner Auszug, wie Pi die Tools meines KI-Agenten lädt:
|
||||||
|
const client = new Client({ name: "pi-mcp-client", version: "1.0.0" }, { capabilities: { tools: {} } });
|
||||||
|
await client.connect(transport);
|
||||||
|
const { tools } = await client.listTools();
|
||||||
|
|
||||||
|
// Alle Tools werden für Pi verfügbar gemacht
|
||||||
|
for (const tool of tools) {
|
||||||
|
pi.registerTool({
|
||||||
|
name: tool.name,
|
||||||
|
description: tool.description,
|
||||||
|
// ...
|
||||||
|
});
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Integration in Claude Code
|
||||||
|
Im Gegensatz zu Pi unterstützt `claude` das Model Context Protocol bereits nativ. Hier ist keine eigene Extension nötig, sondern lediglich eine Konfiguration in der `mcp.json`. Ich habe dort einfach den Endpunkt meines KI-Agenten hinterlegt, und schon greift auch `claude` direkt darauf zu:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {
|
||||||
|
"nanoclaw": {
|
||||||
|
"command": "bash",
|
||||||
|
"args": ["-c", "curl -s -H \"Authorization: Bearer $NANOCLAW_MCP_TOKEN\" http://localhost:3002/mcp"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Die Serverseite (NanoClaw-Seite)
|
||||||
|
Das Herzstück der Kommunikation liegt in der `mcp-server.ts` innerhalb der NanoClaw-Instanz. Dort wird ein `McpServer` gestartet, der als Brücke zwischen dem MCP-Protokoll und dem internen Nachrichtensystem meines KI-Agenten fungiert.
|
||||||
|
|
||||||
|
Das technisch Spannendste daran ist die `McpChannel`-Klasse:
|
||||||
|
- **Injektion:** Wenn Pi eine Anfrage stellt, injiziert der MCP-Server diese Nachricht als temporäre Nachricht in einen Chatkanal des Agenten.
|
||||||
|
- **Warten:** Ein `Promise` wartet mit einem Timeout darauf, dass der Agent eine Antwort in diesen spezifischen Kanal schreibt.
|
||||||
|
- **Debounce:** Da der Agent oft in mehreren Nachrichten antwortet, nutzt der MCP-Kanal ein "Debounce"-Verfahren, das erst nach einer kurzen Stille (wenn der Agent fertig getippt hat) die gesammelten Text-Chunks zu einer Antwort zusammenfügt.
|
||||||
|
|
||||||
|
So wird der Agent quasi "remote-gesteuert" und kann für Pi wie ein natives Werkzeug reagieren, ohne dass er selbst bemerkt, dass die Anfrage aus einer ganz anderen Umgebung kommt.
|
||||||
|
|
||||||
|
Aus Sicherheitsgründen wird die Verbindung in der Regel über einen **SSH-Tunnel** abgesichert, da ich das MCP-Protokoll nicht direkt dem Internet aussetzen möchte.
|
||||||
|
|
||||||
|
## Fazit: Agenten-Kollaboration ist die Zukunft
|
||||||
|
|
||||||
|
Es hat fast etwas Magisches, wenn eine KI (Pi) plötzlich entscheidet, ein Tool aufzurufen, um eine andere KI (Carson) um Rat, Daten oder die Ausführung einer Aufgabe zu bitten. Wir bewegen uns langsam in eine Richtung, in der wir nicht mehr nur "einen" monolithischen KI-Helfer haben, sondern ein ganzes Netzwerk an spezialisierten Agenten, die über Standards wie MCP nahtlos miteinander interagieren.
|
||||||
|
|
||||||
|
Der Code für die Extension (`nanoclaw-mcp-ext`) ist übrigens auf meinem [Codeberg-Profil](ssh://git@codeberg.org/gurix/nanoclaw-mcp-ext.git) zu finden. Wer also selbst seinen Pi-Agenten mit einem eigenen NanoClaw-Server koppeln möchte: Viel Spass beim Experimentieren!
|
||||||
Reference in New Issue
Block a user