pi-cli-mcp
pi-cli-mcp
MCP-Server, der Programmieraufgaben an Ihre lokal installierte pi CLI delegiert.
Es kapselt die echte pi-Binärdatei, anstatt eine eigene Kopie des Agents zu bündeln, sodass jeder Aufruf Ihre ~/.pi/agent/settings.json erbt – Provider, Modelle, Denkstufe, Erweiterungen, AGENTS.md / CLAUDE.md-Erkennung. Nichts an Ihrem Modell-Stack wird hier dupliziert, und der Server driftet nicht, wenn Sie pi aktualisieren.
Verwenden Sie es, wenn Ihr primärer Agent (Claude Code, Cursor, jeder MCP-Client) Arbeiten an pi übergeben soll: eine zweite Meinung von einem anderen Modell, eine Untersuchung, die Sie aus dem Hauptkontextfenster heraushalten möchten, oder parallele Arbeit.
Installation
npx -y pi-cli-mcp # no install
npm install -g pi-cli-mcp # or globalErfordert Node ≥ 20 und ein funktionierendes pi auf PATH (npm i -g @earendil-works/pi-coding-agent).
Claude Code
claude mcp add-json pi -s user '{
"type": "stdio",
"command": "npx",
"args": ["-y", "pi-cli-mcp"],
"timeout": 3600000
}'
claude mcp list | grep '^pi:' # expect: ✔ ConnectedDas großzügige timeout ist wichtig: Eine echte delegierte Aufgabe kann Minuten dauern.
Jeder andere MCP-Client
{
"mcpServers": {
"pi": { "command": "npx", "args": ["-y", "pi-cli-mcp"] }
}
}Halten Sie den Servernamen kurz (pi): Er wird Teil der Toolnamen, die Ihr Modell sieht.
Werkzeuge
Werkzeug | Zweck |
| Startet eine pi-Sitzung. Gibt |
| Setzt eine Sitzung anhand der ID fort. pi behält die vorherigen Turns. |
| Listet erreichbare Modelle auf (Provider, ID, Kontext, maximale Ausgabe, Denken, Bilder). |
| Listet bekannte Sitzungen auf, neueste zuerst, mit ihrem Arbeitsverzeichnis. |
pi
Argument | Hinweise |
| Erforderlich. Muss in sich geschlossen sein – pi kann Ihre Konversation nicht sehen. |
| Absoluter Pfad. pi liest |
| z. B. |
|
|
| Zulassungsliste, z. B. |
| Reine Argumentation über den Prompt-Text. |
| Zusätzlicher Text, der an pi's Systemprompt angehängt wird. |
pi({
prompt: "Map how retries are wired in src/http.rs. Report call sites only.",
cwd: "/abs/path/to/repo",
tools: "read,grep,find,ls"
})pi hat kein Berechtigungssystem. Mit seinen Standardwerkzeugen bearbeitet es Dateien und führt Shell-Befehle als Ihr Benutzer innerhalb von
cwdaus. Übergeben Sietoolsoderno_tools, wenn die Aufgabe eine Analyse ist. Verwenden SiePI_MCP_WRAP, wenn Sie eine Sandbox möchten.
Was zurückkommt
Nur pi's endgültige Antwort plus aggregierte Statistiken – niemals das Transkript, Tool-Argumente oder Tool-Ausgabe:
[session: 0927adc5-a840-4b68-93ca-5ca344c9fafb]
Created note.md containing "hello" and updated target.txt to read "new content".
---
pi: bifrost/minimax/MiniMax-M3 · 5 turns · 4 tool calls: bash, read, write, edit · 11k in / 276 out · 9.8s
pi wrote: note.md, target.txt„Endgültige Antwort" wird durch
stopReasondefiniert, nicht durch die Position: die letzte Assistenten-Nachricht, die sich gesetzt hat – die letzte, derenstopReasonnichttoolUseist, so markiert pi Tool-Aufruf-Schritte. Erzählungen während des Laufs werden verworfen, selbst wenn eine Präambel eine Nachricht mit einem Tool-Aufruf teilt. Wenn die gesetzte Nachricht keinen Text hat, wird dies als fehlerhafter Lauf gemeldet, anstatt stillschweigend auf eine frühere Präambel zurückzugreifen. Wenn nichts gesetzt wurde, wird der letzte erzeugte Text zurückgegeben, entsprechend gekennzeichnet.Die Antwort wird nie abgeschnitten. Setzen Sie
PI_MCP_MAX_OUTPUT, wenn Sie eine Obergrenze möchten. Nur Diagnosen sind begrenzt.pi wrote:erscheint nur, wenn pi tatsächlich Dateien geschrieben hat, dient also als Nebenwirkungsprüfung.Ein schlechter
stopReasonlässt den Aufruf fehlschlagen, fail-closed.stop/lengthsind Erfolg;error,aborted, ein fehlenderstopReasonund alles außerhalb des bekannten Vokabulars werden als Fehler gemeldet, wobei die Antwort weiterhin angehängt ist. Der validiertestopReasongehört zu der zurückgegebenen Nachricht, nicht zu dem Ereignis, das zuletzt eingetroffen ist. pi kann mit Exit-Code 0 beenden, wenn ein Turn nicht sauber abgeschlossen wurde, daher wird dem Exit-Code allein nicht vertraut.Rohes stdout wird nie als Antwort zurückgegeben. Wenn der Ereignisstrom nicht dem erwarteten Vertrag entspricht, sagt die Antwort dies und beschreibt die Form des Angekommenen (Nachrichtenzahl,
stopReason-Werte, Tool-Aufruf-Zahl, Byte-Zahl) – niemals das Transkript selbst, das Erzählung, Tool-Argumente und Tool-Ergebnisse preisgeben würde.
Sitzungen
pi gibt eine Sitzungs-ID zurück; pi_reply setzt sie fort. Die Konversation lebt in pi's eigenen Sitzungsdateien, sodass Folgeanfragen über Neustarts dieses Servers hinweg funktionieren – die Zuordnung Sitzung → Verzeichnis wird in ~/.local/state/pi-mcp/sessions.json gespeichert.
Gleichzeitige Antworten auf eine Sitzung werden serialisiert: Zwei pi-Prozesse, die eine Sitzungsdatei schreiben, würden sie beschädigen. Wenn eine ID unbekannt ist, startet pi eine neue Konversation und die Antwort trägt eine explizite [warning: no existing session …]-Warnung, anstatt so zu tun, als würde sie fortgesetzt.
Prozessübergreifender Hinweis. Der Sitzungs-Mutex ist prozesslokal. Wenn Sie zwei MCP-Clients gegen zwei Serverprozesse ausführen und beide gleichzeitig auf dieselbe Sitzungs-ID antworten, serialisiert nichts sie. Die Zustandsdatei wird mit erneutem Lesen und anschließendem Zusammenführen geschrieben, sodass Sitzungen, die ein Prozess gelernt hat, nicht vom anderen gelöscht werden, aber die zugrunde liegende pi-Sitzungsdatei hat keinen solchen Schutz. In der Praxis besitzt ein Client eine Sitzung; wenn Sie eine harte Garantie benötigen, halten Sie einen Serverprozess.
Abbruch
MCP notifications/cancelled beendet pi mit SIGTERM, eskaliert nach einer Gnadenfrist zu SIGKILL. Kinder gehen mit: pi läuft in einer eigenen Prozessgruppe und der gesamte Baum wird signalisiert, sodass ein unterbrochenes sleep 120 nicht überlebt, selbst wenn pi das Signal nicht weiterleitet.
Der Abbruch registriert sich, bevor der Aufruf für einen Parallelitätsslot oder eine Sitzungssperre in die Warteschlange geht, sodass ein Aufruf, der abgebrochen wird, während er noch wartet, pi überhaupt nie startet.
Herunterfahren – stdin EOF, SIGTERM, SIGINT, SIGHUP oder ein geschlossenes stdout – erntet jeden laufenden pi-Baum, bevor es beendet wird. Abgekoppelte Kinder haben keinen anderen Elternteil, der sie aufräumt.
Umgebung
Variable | Standard | Bedeutung |
|
| Pfad zur pi-Binärdatei. |
| pi's Einstellung | Standardmodell für jeden Aufruf. |
| pi's Einstellung | Standard-Denkstufe. |
|
| Wanduhrzeit pro Aufruf, bevor pi beendet wird. |
|
| Gleichzeitige pi-Prozesse. |
| nicht gesetzt | Obergrenze für die Antwort. Nicht gesetzt bedeutet keine Kürzung. |
|
| stderr-Ende, das in die Antwort aufgenommen wird. |
|
| Lesepuffer-Schutz gegen einen außer Kontrolle geratenen Stream. |
|
| Längste einzelne Ereigniszeile von pi, bevor sie verworfen wird. |
|
| Längster einzelner JSON-RPC-Rahmen vom Client. |
|
| Erinnerte Sitzungen, bevor die älteste verworfen wird. |
|
| Gnadenfrist von SIGTERM → SIGKILL. |
|
| Zuordnung Sitzung → cwd. |
| nicht gesetzt | Befehlspräfix, z. B. |
Design
Prozess pro Aufruf. pi's eigene Sitzungsdateien sind die Quelle der Wahrheit, was Folgeanfragen über einen Neustart dieses Servers hinweg überleben lässt.
pi -p --mode json. Der JSON-Ereignisstrom liefert Turns, Tool-Aufrufe, Token-Nutzung und Kosten – kein Scraping von menschenlesbarer Ausgabe.Keine Abhängigkeiten. Newline-getrenntes JSON-RPC 2.0 wird direkt gesprochen, sodass es kein SDK gibt, das synchron gehalten werden muss, und nichts zu prüfen ist außer einer Datei.
Lange oder mit Bindestrich beginnende Prompts werden als
@file-Anhang übergeben, da pi kein---Trennzeichen hat und argv eine OS-Größenbeschränkung hat.
Warum nicht die Alternativen
pandysp/pi-mcp-server hängt von @mariozechner/pi-coding-agent@^0.52.9 ab – dem alten Fork unter pi's früherem Paketnamen –, sodass es eine gebündelte Kopie eines viel älteren Agents anstelle Ihrer CLI ausführt und nur eine feste Providerliste kennt. Alles andere im Ökosystem (pi-mcp-adapter, pi-mcp-extension und Forks) läuft in die entgegengesetzte Richtung: MCP-Server in pi. pi selbst hat keinen nativen mcp-server-Unterbefehl.
Tests
npm testDie Suite treibt den echten Server über stdio und verwendet eine gefälschte pi-Binärdatei für die Pfade, die ein Live-Modell nicht auf Abruf erzeugen kann (schlechter stopReason, überdimensionierte Antworten, Abbruch), sodass sie keinen API-Zugriff benötigt und keine Tokens verbraucht.
Lizenz
MIT
This server cannot be installed
Maintenance
Related MCP Connectors
The team layer for AI coding agents: shared contracts, collision alerts, E2EE sessions.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Real-time chat hub for AI agents — Claude Code, Cursor, Cline, Codex over MCP or REST.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/minmax/pi-cli-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server