On November 30, 2025, Pi creator Mario Zechner published a straightforward position: Pi would never support MCP. His reasoning was sound — a single MCP server like Chrome DevTools dumped roughly 18,000 tokens into context before the agent had done a thing. That’s 9% of a 200k context window, gone before the first file opens. Less than a year later, Earendil — the company that acquired Pi and employs Zechner — shipped MCP as a core feature. Pi 1.1, released October 7, is the polished follow-up. The reversal is not a flip-flop. It’s the explanation for Codemode.
What Pi Is (If You Haven’t Seen It) #
Pi is a minimal, MIT-licensed coding agent built around four tools: read, write, edit, and bash. Its entire system prompt fits under 1,000 tokens. Everything else — sub-agents, plan mode, approval prompts — is opt-in via TypeScript extensions. It is the opposite of Claude Code or Cursor: no bundled opinions, just a composable harness you extend yourself. In a 30-task benchmark, Pi completed 20 tasks at $0.028 per success. Claude Code completed 16 at $0.195 per success. The gap comes almost entirely from Pi sending roughly 3x less context per turn.
Why MCP Was a No #
Zechner’s original objection was not ideological — it was practical. MCP servers declare their full tool schema into the model’s context on every request. A browser-automation server brings in hundreds of tool definitions the agent will never call. The overhead compounds across turns. For Pi, whose entire value proposition is context discipline, an MCP server would have erased the advantage. His view: shell commands and code are more composable than any protocol layer.
What changed is that MCP added deferred tool — servers can now expose tools lazily, and Earendil contributed directly to that work. But Pi’s solution went further than just “use deferred MCP.” It built a sandbox.
Codemode: The Actual Fix #
Codemode flips the standard tool-call model. Instead of the agent picking a tool from a list in its context, the agent writes a short JavaScript script. That script calls tools — including MCP tools — when it runs. Only the script’s output goes back to the model. The 18,000-token MCP schema never enters the conversation.
The sandbox is QuickJS: no Node APIs, no direct filesystem or network access. MCP tools are addressed as mcp__<server>__<tool> and called with tools.mcp__<server>__<tool>(args). Scripts can parallelize calls and filter output before it hits context. One caveat: tool calls made inside a script are real. If the script errors partway through, the calls it already executed are not rolled back.
To add Codemode to a session: pi -t +codemode. To restrict the agent to Codemode only: set codemode.mode: "only" in config.
What Else Ships in 1.1 #
The tool modifier syntax is overdue. Previously, --tools replaced the default set entirely. Now you can use additive and subtractive modifiers: pi -t +codemode,-write adds Codemode and removes write without touching the rest. Pattern matching also works: --tools read,codemode,'mcp__radius__*'.
Claude Haiku 5.5 is now available as anthropic/claude-haiku-5-5, with adaptive thinking up to xhigh/max effort — useful for high-volume, budget-sensitive workloads. Pi 1.1 also adds OSC 7501 status reporting: terminals and dashboards that support the protocol get live Pi state (working, blocked, done, failed), which matters for teams running Pi in orchestration pipelines. GPT-6 Luna joins as a classifier model via the Decisions API, and codemode.models.classify() now accepts images for vision classifiers.
The Breaking Change You Need to Know #
Pi 1.1.0 has a dependency conflict that bites npm global installs. The package depends on pi-codemode@^1.1.0, which resolves to 1.2.0. That version removed MCP_TYPESCRIPT_PREAMBLE, breaking ESM linking at startup. The symptom: Pi fails immediately on launch. Track the fix on GitHub.
There are two clean fixes:
curl -fsSL https://pi.dev/install | bash
npm i -g --ignore-scripts @earendil-works/pi-coding-agent@1.2.0
If you’re on a version older than 1.0.3, also update your provider config: the Azure provider was renamed from azure-openai-responses to azure.
The pi.dev installer is the better long-term path. It manages exact dependency pins across releases, which is the root cause of this class of breakage. Earendil has committed to enforcing exact internal dep pins in future releases, but the npm package history already has the hole. See The Register’s coverage of the MCP reversal for more background on the broader story.