From 30b17d510ee14244d56a13baf3b5a215852ccbbc Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Fri, 24 Apr 2026 22:48:35 +0200 Subject: [PATCH 1/7] Draft: Blog post about nanoclaw-mcp-ext and Carson --- .../blog/pi-carson-mcp-extension/index.de.md | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 content/blog/pi-carson-mcp-extension/index.de.md diff --git a/content/blog/pi-carson-mcp-extension/index.de.md b/content/blog/pi-carson-mcp-extension/index.de.md new file mode 100644 index 0000000..2c45360 --- /dev/null +++ b/content/blog/pi-carson-mcp-extension/index.de.md @@ -0,0 +1,70 @@ +--- +title: "Wenn KI mit KI spricht: Wie Pi dank einer neuen MCP-Extension mit Carson plaudert" +date: 2026-04-24 +description: "Ich habe eine kleine Extension namens nanoclaw-mcp-ext entwickelt. Damit kann mein Coding-Assistent Pi direkt mit meinem digitalen Butler Carson kommunizieren. Ein spannender Use Case für das Model Context Protocol." +translationKey: "pi-carson-mcp-post" +--- + +Vor ein paar Wochen habe ich von [Carson](/blog/ki-bewerbungsagent/) erzählt. Damals lag der Fokus noch auf seiner Rolle als KI-Bewerbungsagent. Inzwischen ist Carson aber weit mehr als das: Er ist ein vollwertiger digitaler Butler geworden. Er 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 weiss dank Standort-Tracking sogar, wo ich mich gerade befinde. Kurzum: Er nimmt mir massiv den administrativen Alltag ab. + +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 Code und mir fällt plötzlich ein privates Todo ein, oder ich möchte Carson eine Anweisung geben (z.B. "Setz noch Kaffee auf die Einkaufsliste"), ohne mein Terminal und den Pi-Kontext zu verlassen. + +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 Carson (oder meinen Kalender) separat öffnen müssen. Heute sieht das so aus: + +**Ich (zu Pi):** *"Frag Carson 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 Carson, wartet auf dessen Kalender-Check und gibt mir die Antwort direkt im Terminal aus. + +Beispiel-Output von Pi im Terminal: +> *Carson 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 Carson, er soll Kaffeebohnen auf meine Bring!-Einkaufsliste setzen."* Pi leitet das an Carson weiter, Carson nutzt seine Bring!-Integration, 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 Carson konsultieren muss, um meine Fragen zu beantworten oder Aufgaben zu delegieren. + +## Ein Blick unter die Haube + +Für alle, die es technisch interessiert: Die Extension ist in TypeScript geschrieben. Beim Start einer Pi-Session (via `session_start` Event) baut Pi eine `StreamableHTTPClientTransport`-Verbindung auf. + +```typescript +// Ein kleiner Auszug, wie Pi die Carson-Tools 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, die Carson anbietet, werden für Pi verfügbar gemacht +for (const tool of tools) { + pi.registerTool({ + name: tool.name, + description: tool.description, + // ... + }); +} +``` + +Aus Sicherheitsgründen wird die Verbindung in der Regel über einen **SSH-Tunnel** abgesichert, da Carson auf einem entfernten Rechner läuft und 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! From d7d0438ee71f46aed672dc653c775d071d55e5dd Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Sat, 25 Apr 2026 08:35:42 +0200 Subject: [PATCH 2/7] Refined blog post style to match persona and humor --- content/blog/pi-carson-mcp-extension/index.de.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/blog/pi-carson-mcp-extension/index.de.md b/content/blog/pi-carson-mcp-extension/index.de.md index 2c45360..cd93d07 100644 --- a/content/blog/pi-carson-mcp-extension/index.de.md +++ b/content/blog/pi-carson-mcp-extension/index.de.md @@ -5,9 +5,9 @@ description: "Ich habe eine kleine Extension namens nanoclaw-mcp-ext entwickelt. translationKey: "pi-carson-mcp-post" --- -Vor ein paar Wochen habe ich von [Carson](/blog/ki-bewerbungsagent/) erzählt. Damals lag der Fokus noch auf seiner Rolle als KI-Bewerbungsagent. Inzwischen ist Carson aber weit mehr als das: Er ist ein vollwertiger digitaler Butler geworden. Er 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 weiss dank Standort-Tracking sogar, wo ich mich gerade befinde. Kurzum: Er nimmt mir massiv den administrativen Alltag ab. +Vor ein paar Wochen habe ich von [Carson](/blog/ki-bewerbungsagent/) erzählt. Damals lag der Fokus noch auf seiner Rolle als mein persönlicher KI-Bewerbungsagent. Inzwischen ist Carson aber weit mehr als das: Er ist zu einem vollwertigen digitalen Butler in meiner "Main-Gruppe" herangewachsen. Er 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 weiss dank Standort-Tracking sogar, wo ich mich gerade befinde. Kurzum: Er 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 Code und mir fällt plötzlich ein privates Todo ein, oder ich möchte Carson eine Anweisung geben (z.B. "Setz noch Kaffee auf die Einkaufsliste"), ohne mein Terminal und den Pi-Kontext zu verlassen. +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 Carson 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?** @@ -35,7 +35,7 @@ Beispiel-Output von Pi im Terminal: Ein anderes alltägliches Szenario: Ich trinke beim Coden die letzte Tasse Kaffee. Ich sage Pi einfach: *"Sag Carson, er soll Kaffeebohnen auf meine Bring!-Einkaufsliste setzen."* Pi leitet das an Carson weiter, Carson nutzt seine Bring!-Integration, 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 Carson konsultieren muss, um meine Fragen zu beantworten oder Aufgaben zu delegieren. +Es ist also nicht mehr nur ein Mensch, der mit einer KI chattet, sondern Pi entscheidet selbstständig, *wann* er Carson 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 From f570c140b29dc3116915bc62d9b086c09bfc59b2 Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Sat, 25 Apr 2026 08:39:44 +0200 Subject: [PATCH 3/7] Added technical details about MCP server implementation --- content/blog/pi-carson-mcp-extension/index.de.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/content/blog/pi-carson-mcp-extension/index.de.md b/content/blog/pi-carson-mcp-extension/index.de.md index cd93d07..4e02d35 100644 --- a/content/blog/pi-carson-mcp-extension/index.de.md +++ b/content/blog/pi-carson-mcp-extension/index.de.md @@ -39,7 +39,8 @@ Es ist also nicht mehr nur ein Mensch, der mit einer KI chattet, sondern Pi ents ## Ein Blick unter die Haube -Für alle, die es technisch interessiert: Die Extension ist in TypeScript geschrieben. Beim Start einer Pi-Session (via `session_start` Event) baut Pi eine `StreamableHTTPClientTransport`-Verbindung auf. +### Die Extension (Pi-Seite) +Für alle, die es technisch interessiert: Die Extension ist in TypeScript geschrieben. Beim Start einer Pi-Session (via `session_start` Event) baut Pi eine `StreamableHTTPClientTransport`-Verbindung zu deiner NanoClaw-Instanz auf. ```typescript // Ein kleiner Auszug, wie Pi die Carson-Tools lädt: @@ -61,7 +62,17 @@ for (const tool of tools) { } ``` -Aus Sicherheitsgründen wird die Verbindung in der Regel über einen **SSH-Tunnel** abgesichert, da Carson auf einem entfernten Rechner läuft und ich das MCP-Protokoll nicht direkt dem Internet aussetzen möchte. +### 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 von Carson 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 NanoClaw-Chatkanal. +- **Warten:** Ein `Promise` wartet mit einem Timeout darauf, dass Carson eine Antwort in diesen spezifischen Kanal schreibt. +- **Debounce:** Da Carson oft in mehreren Nachrichten antwortet, nutzt der MCP-Kanal ein "Debounce"-Verfahren, das erst nach einer kurzen Stille (wenn Carson fertig getippt hat) die gesammelten Text-Chunks zu einer Antwort zusammenfügt. + +So wird Carson 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 From ea6a5c2f250cc71cf380c7fb0c65c14a42394431 Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Sun, 26 Apr 2026 08:13:41 +0200 Subject: [PATCH 4/7] Update blog post title --- content/blog/pi-carson-mcp-extension/index.de.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/pi-carson-mcp-extension/index.de.md b/content/blog/pi-carson-mcp-extension/index.de.md index 4e02d35..bd93daf 100644 --- a/content/blog/pi-carson-mcp-extension/index.de.md +++ b/content/blog/pi-carson-mcp-extension/index.de.md @@ -1,5 +1,5 @@ --- -title: "Wenn KI mit KI spricht: Wie Pi dank einer neuen MCP-Extension mit Carson plaudert" +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 digitalen Butler Carson kommunizieren. Ein spannender Use Case für das Model Context Protocol." translationKey: "pi-carson-mcp-post" From 44f0804a8fb39b2c45a2fd5a9f10b69bec819c05 Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Sun, 26 Apr 2026 08:21:02 +0200 Subject: [PATCH 5/7] Neutralize agent naming (Carson -> Agent) --- .../blog/pi-carson-mcp-extension/index.de.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/content/blog/pi-carson-mcp-extension/index.de.md b/content/blog/pi-carson-mcp-extension/index.de.md index bd93daf..5cbcae9 100644 --- a/content/blog/pi-carson-mcp-extension/index.de.md +++ b/content/blog/pi-carson-mcp-extension/index.de.md @@ -1,13 +1,13 @@ --- 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 digitalen Butler Carson kommunizieren. Ein spannender Use Case für das Model Context Protocol." +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 [Carson](/blog/ki-bewerbungsagent/) erzählt. Damals lag der Fokus noch auf seiner Rolle als mein persönlicher KI-Bewerbungsagent. Inzwischen ist Carson aber weit mehr als das: Er ist zu einem vollwertigen digitalen Butler in meiner "Main-Gruppe" herangewachsen. Er 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 weiss dank Standort-Tracking sogar, wo ich mich gerade befinde. Kurzum: Er nimmt mir massiv den administrativen Alltag ab – und das meistens besser (und geduldiger), als ich es jemals könnte. +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 in meiner "Main-Gruppe" 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 weiss dank Standort-Tracking sogar, wo ich mich gerade befinde. 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 Carson eine Anweisung geben (z.B. "Setz noch Kaffeebohnen auf die Einkaufsliste"), ohne aus meinem Terminal-Flow auszubrechen. +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?** @@ -24,18 +24,18 @@ Sobald Pi gestartet wird, authentifiziert sich die Extension mit einem Token, fr 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 Carson (oder meinen Kalender) separat öffnen müssen. Heute sieht das so aus: +Bisher hätte ich das Terminal verlassen und meinen Kalender separat öffnen müssen. Heute sieht das so aus: -**Ich (zu Pi):** *"Frag Carson mal, ob ich in den nächsten zwei Stunden noch Termine habe. Wenn nicht, fangen wir mit dem grossen Datenbank-Refactoring an."* +**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 Carson, wartet auf dessen Kalender-Check und gibt mir die Antwort direkt im Terminal aus. +**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: -> *Carson meldet, dass du bis 17:30 Uhr keine Termine hast. Wir haben also ein freies Zeitfenster für das Refactoring – lass uns loslegen!* +> *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 Carson, er soll Kaffeebohnen auf meine Bring!-Einkaufsliste setzen."* Pi leitet das an Carson weiter, Carson nutzt seine Bring!-Integration, und das Problem ist delegiert, ohne dass ich meinen Arbeitsfluss auch nur für eine Sekunde unterbrechen musste. +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 Carson konsultieren muss, um meine Fragen zu beantworten oder Aufgaben zu delegieren. Das fühlt sich fast ein bisschen wie KI-Magie an. +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 @@ -63,14 +63,14 @@ for (const tool of tools) { ``` ### 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 von Carson fungiert. +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 NanoClaw-Chatkanal. -- **Warten:** Ein `Promise` wartet mit einem Timeout darauf, dass Carson eine Antwort in diesen spezifischen Kanal schreibt. -- **Debounce:** Da Carson oft in mehreren Nachrichten antwortet, nutzt der MCP-Kanal ein "Debounce"-Verfahren, das erst nach einer kurzen Stille (wenn Carson fertig getippt hat) die gesammelten Text-Chunks zu einer Antwort zusammenfügt. +- **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 Carson 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. +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. From ca44b70c0cdb4ce7ab1a83e55b1442745ebf83c1 Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Sun, 26 Apr 2026 10:33:14 +0200 Subject: [PATCH 6/7] Clarify intent of location tracking --- content/blog/pi-carson-mcp-extension/index.de.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/pi-carson-mcp-extension/index.de.md b/content/blog/pi-carson-mcp-extension/index.de.md index 5cbcae9..846e56b 100644 --- a/content/blog/pi-carson-mcp-extension/index.de.md +++ b/content/blog/pi-carson-mcp-extension/index.de.md @@ -5,7 +5,7 @@ description: "Ich habe eine kleine Extension namens nanoclaw-mcp-ext entwickelt. 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 in meiner "Main-Gruppe" 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 weiss dank Standort-Tracking sogar, wo ich mich gerade befinde. Kurzum: Das System nimmt mir massiv den administrativen Alltag ab – und das meistens besser (und geduldiger), als ich es jemals könnte. +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. From f1eb9111bf01b4eac0e754aa55c584faf2cf51ea Mon Sep 17 00:00:00 2001 From: Markus Graf Date: Sun, 26 Apr 2026 11:15:45 +0200 Subject: [PATCH 7/7] Document MCP integration for both Pi and Claude Code --- .../blog/pi-carson-mcp-extension/index.de.md | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/content/blog/pi-carson-mcp-extension/index.de.md b/content/blog/pi-carson-mcp-extension/index.de.md index 846e56b..92e9c51 100644 --- a/content/blog/pi-carson-mcp-extension/index.de.md +++ b/content/blog/pi-carson-mcp-extension/index.de.md @@ -40,19 +40,15 @@ Es ist also nicht mehr nur ein Mensch, der mit einer KI chattet, sondern Pi ents ## Ein Blick unter die Haube ### Die Extension (Pi-Seite) -Für alle, die es technisch interessiert: Die Extension ist in TypeScript geschrieben. Beim Start einer Pi-Session (via `session_start` Event) baut Pi eine `StreamableHTTPClientTransport`-Verbindung zu deiner NanoClaw-Instanz auf. +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 Carson-Tools lädt: -const client = new Client( - { name: "pi-mcp-client", version: "1.0.0" }, - { capabilities: { tools: {} } } -); - +// 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, die Carson anbietet, werden für Pi verfügbar gemacht +// Alle Tools werden für Pi verfügbar gemacht for (const tool of tools) { pi.registerTool({ name: tool.name, @@ -62,6 +58,20 @@ for (const tool of tools) { } ``` +### 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.