Code Mode
Pi が MCP サポートをするという文脈で coding agent の “code mode” なるものが言及されていた。いくつかの agentic tool にサポートされているパターンらしい。従来の MCP はツールの定義や記述がコンテクストを浪費するので嫌われ、スキルと CLI が人気を博するようになった。Pi もそうした風潮にあわせ MCP をサポートしていなかった。しかしこの “code mode” の普及にともない、方針を改め MCP をサポートすることにしたそうな。
Code mode とは: まず MCP をはじめとする各種ツール類を TypeScript の関数として定義(宣言)する。次にそのツール関数群が公開された JavaScript の実行環境を agent から使えるようにする。Coding agent はツール単位で直接 tool call をする(これを direct mode と呼ぶ)のではなく、JS のコードを生成してその中から関数呼び出しとしてツールを呼ぶ。agent には沢山のツール定義が見えるかわりに、JS のコードを実行する exec と関連する 2-3 のツールだけが見える。
Code mode は一年前に Cloudflare の agent が提唱・サポートし (ブログ記事 - Kenton!)、これによって MCP の色々な問題を解決できると主張した。たとえば MCP の呼び出しが巨大なテキストを返してきたらコンテクストが溢れてしまうし、入り組んだ JSON から必要な情報を読み出すのも堅牢性に不安がある。MCP を JavaScript でラップすれば、テキストの substring や JSON のフィタリングなどを JS のコードで実現できるし、複数の MCP コールを連鎖するのも簡単かつコンテクスト浪費ゼロ。いいでしょ、という理屈。
Cloudflare の当初の実装は MCP 記述を TypeScript に変換してコンテクストに流し込んだため、記述のコンテクスト浪費問題は対処されていなかった。現在は記述を動的に検索する API をランタイムに提供することで on-demand で MCP にアクセスできることになっている。code mode を提供する OpenClaw, Pi も同様のパターンに従っている。Codex CLI にも文書化されていない実験的な実装が含まれている。
coding agent はやたらとシェルコマンドを使うのが上手で、ビルトインのツールでコードを読み書きせず CLI や Python の one-liner を組み合わせ用を足そうとすることがある。シェルスクリプトと CLI および SKILL の組み合わせは広義の code mode と言えるかもしれない。シェルスクリプトと JS-based のコードモードを比べると、シェル組み込みの CLI がインターネットを通じて広く理解されている一方、JavaScript の方が言語としては強力で一長一短。Cloudflare が code mode を好むのは彼らの実行環境がシェルアクセスのない JS sandbox だからだろう。
Code mode, 素面になって考えると MCP の JS/TS のスタブを生成するのは Swagger のような従来の API 記述仕様から client stub を生成する技術と何が違うのか・・・と脱力しないでもない。が、これがテクノロジの進化の螺旋というものなのですね。