pi-cli-mcp
pi-cli-mcp
ローカルにインストールされた pi CLI にコーディングタスクを委任する MCP サーバーです。
エージェントの独自コピーをバンドルする代わりに、実際の pi バイナリをラップするため、すべての呼び出しは
~/.pi/agent/settings.json を継承します — プロバイダー、モデル、思考レベル、拡張機能、AGENTS.md /
CLAUDE.md の検出など。モデルスタックに関する情報はここに複製されず、pi をアップグレードしてもサーバーはドリフトしません。
プライマリエージェント(Claude Code、Cursor、任意の MCP クライアント)が pi に作業を委任したい場合に使用します:異なるモデルによるセカンドオピニオン、メインのコンテキストウィンドウの外に保ちたい調査、または並行作業など。
インストール
npx -y pi-cli-mcp # no install
npm install -g pi-cli-mcp # or globalNode ≥ 20 と、PATH 上で動作する pi が必要です(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: ✔ Connected寛大な timeout が重要です:実際の委任タスクは数分間実行されることがあります。
その他の MCP クライアント
{
"mcpServers": {
"pi": { "command": "npx", "args": ["-y", "pi-cli-mcp"] }
}
}サーバー名は短く(pi)保ってください:モデルが表示するツール名の一部になります。
ツール
ツール | 目的 |
| pi セッションを開始します。 |
| ID でセッションを続行します。pi は以前のターンを保持しています。 |
| 到達可能なモデルを一覧表示します(プロバイダー、ID、コンテキスト、最大出力、思考、画像)。 |
| 既知のセッションを新しい順に、作業ディレクトリとともに一覧表示します。 |
pi
引数 | メモ |
| 必須。自己完結型である必要があります — pi はあなたの会話を見ることができません。 |
| 絶対パス。pi はここから |
| 例: |
|
|
| 許可リスト。例:読み取り専用実行の場合は |
| プロンプトテキストに対する純粋な推論。 |
| pi のシステムプロンプトに追加される追加テキスト。 |
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 には権限システムがありません。 デフォルトのツールでは、
cwd内でユーザーとしてファイルを編集し、シェルコマンドを実行します。 タスクが分析の場合は、toolsまたはno_toolsを渡してください。サンドボックスが必要な場合はPI_MCP_WRAPを使用してください。
返されるもの
pi の最終回答と集計統計のみ — トランスクリプト、ツール引数、ツール出力は決して返されません:
[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「最終回答」は
stopReasonによって定義されます、位置ではありません:最後に確定したアシスタントメッセージ —stopReasonがtoolUseではない最後のメッセージ(pi がツール呼び出しステップをマークする方法)。実行途中のナレーションは、前文がツール呼び出しとメッセージを共有している場合でも破棄されます。確定したメッセージにテキストがない場合、それは以前の前文に静かに遡るのではなく、壊れた実行として報告されます。何も確定しなかった場合、最後に生成されたテキストが返され、そのようにラベル付けされます。回答は決して切り詰められません。 上限を設定したい場合は
PI_MCP_MAX_OUTPUTを設定してください。診断情報のみが制限されます。pi wrote:は pi が実際にファイルを書き込んだ場合にのみ表示されます、そのため副作用チェックとしても機能します。不正な
stopReasonは呼び出しを失敗させ、フェイルクローズします。stop/lengthは成功です;error、aborted、stopReasonの欠落、および既知の語彙外のものはすべて、回答を添付したエラーとして報告されます。検証されるstopReasonは、返されるメッセージに属するものであり、最後に到着したイベントのものではありません。pi はクリーンに確定しなかったターンで終了コード 0 で終了することがあるため、終了コードだけは信頼されません。生の stdout は回答として返されることはありません。 イベントストリームが期待される契約に一致しない場合、応答はその旨を述べ、到着したものの形状(メッセージ数、
stopReason値、ツール呼び出し数、バイト数)を説明します — トランスクリプト自体は決して返されません。ナレーション、ツール引数、ツール結果が漏洩するためです。
セッション
pi はセッション ID を返し、pi_reply はそれを続行します。会話は pi 自身のセッションファイルに保存されるため、このサーバーを再起動してもフォローアップは機能し続けます — セッション → ディレクトリのマップは ~/.local/state/pi-mcp/sessions.json に永続化されます。
1 つのセッションへの同時返信は直列化されます:2 つの pi プロセスが 1 つのセッションファイルに書き込むと破損する可能性があります。ID が不明な場合、pi は新しい会話を開始し、回答には既存のセッションを続行しているふりをする代わりに、明示的な [warning: no existing session …] が含まれます。
プロセス間の注意点。 セッションミューテックスはプロセスローカルです。2 つの MCP クライアントを 2 つのサーバープロセスに対して実行し、両方が 同じ セッション ID に同時に返信する場合、それらを直列化するものはありません。状態ファイルは再読み取りしてからマージする方式で書き込まれるため、一方のプロセスが学習したセッションが他方によって消去されることはありませんが、基になる pi セッションファイルにはそのような保護はありません。実際には、1 つのクライアントがセッションを所有します;厳密な保証が必要な場合は、サーバープロセスを 1 つに保ってください。
キャンセル
MCP notifications/cancelled は pi を SIGTERM で強制終了し、猶予期間後に SIGKILL にエスカレーションします。子プロセスも一緒に終了します:pi は独自のプロセスグループで実行され、ツリー全体にシグナルが送信されるため、pi がシグナルを転送できなくても、中断された sleep 120 は存続しません。
キャンセルは、呼び出しが並行スロットまたはセッションロックのキューに入る前に登録されるため、待機中にキャンセルされた呼び出しは pi をまったく起動しません。
シャットダウン — stdin EOF、SIGTERM、SIGINT、SIGHUP、または閉じた stdout — は、終了する前に実行中のすべての pi ツリーを回収します。切り離された子プロセスには、それらをクリーンアップする他の親プロセスがありません。
環境
変数 | デフォルト | 意味 |
|
| pi バイナリへのパス。 |
| pi の設定 | すべての呼び出しのデフォルトモデル。 |
| pi の設定 | デフォルトの思考レベル。 |
|
| pi が強制終了されるまでの呼び出しごとの壁時計。 |
|
| 並行 pi プロセス数。 |
| 未設定 | 回答の上限。未設定は切り詰めなしを意味します。 |
|
| 応答に含まれる stderr の末尾。 |
|
| 暴走ストリームに対する読み取りバッファガード。 |
|
| pi からの最長の単一イベント行。それを超えると破棄されます。 |
|
| クライアントからの最長の単一 JSON-RPC フレーム。 |
|
| 最も古いものが破棄される前に記憶されるセッション数。 |
|
| SIGTERM → SIGKILL の猶予期間。 |
|
| セッション → cwd マップ。 |
| 未設定 | コマンドプレフィックス。例: |
設計
呼び出しごとにプロセス。 pi 自身のセッションファイルが信頼できる情報源であり、それがこのサーバーの再起動後もフォローアップが存続する理由です。
pi -p --mode json。 JSON イベントストリームから、ターン、ツール呼び出し、トークン使用量、コストが得られます — 人間が読める出力のスクレイピングはありません。依存関係なし。 改行区切りの JSON-RPC 2.0 を直接話すため、同期を保つ SDK も、監査するファイルも 1 つだけです。
長いプロンプトやダッシュで始まるプロンプト は
@file添付として渡されます。pi には--セパレータがなく、argv には OS のサイズ制限があるためです。
代替案を選ばない理由
pandysp/pi-mcp-server は @mariozechner/pi-coding-agent@^0.52.9 に依存しています — pi の以前のパッケージ名の下にある古いフォーク — そのため、CLI の代わりにバンドルされたはるかに古いエージェントのコピーを実行し、固定されたプロバイダーリストのみを知っています。エコシステム内の他のすべて(pi-mcp-adapter、pi-mcp-extension およびフォーク)は逆方向に実行されます:pi への MCP サーバー。pi 自体にはネイティブの mcp-server サブコマンドはありません。
テスト
npm testスイートは stdio を介して実際のサーバーを駆動し、ライブモデルがオンデマンドで生成できないパス(不正な stopReason、過大な回答、キャンセル)には偽の pi バイナリを使用するため、API アクセスは不要で、トークンも消費しません。
ライセンス
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