Daily Edition Sources +10

Pi Adds Built-In MCP—and Keeps the Tools Replaceable

The coding agent once left MCP to outside extensions. Its new release supplies an implementation, while giving extension authors a shared way to call tools and the ability to replace the defaults.

Pi defaults and a user extension feed a shared tool pipeline with validation, call hooks, tool execution and result hooks. A note says SDK users opt in.
Diagram PunkPi supplies the integrations while opening the execution path to replacements.
repo earendil-works/pi evidence
10 source signals 1 repo commit 8562bcf
Evidence: commit 8562bcf / September 30, 2026 / Daily Edition
Open Edition Evidence below

Pi now ships the integration it once deliberately omitted. The September 29 v0.99.0 release of earendil-works/pi adds built-in Model Context Protocol support, letting its terminal agent connect to external tool servers. It also adds Code Mode: model-written JavaScript that can combine tool calls and return selected results.

That updates a specific claim in our June account of Pi: there was no built-in MCP. But the larger promise in that article—that users could inspect and replace the surrounding machinery—has a more interesting continuation. Pi has added shared execution machinery beneath the integrations, while making the supplied implementations replaceable.

What users wanted to keep

The public proposal did not meet a uniformly grateful audience. One user, writing as spence-s, worried that bundled MCP and Code Mode would change a harness they valued for shaping themselves. That is a practical concern: an extension-based workflow becomes harder to maintain if the host suddenly claims the same commands or changes how tools run.

Armin Ronacher, the change's author, described composing tools for models such as Jev as the main motivation. Other extension authors made a useful distinction. Noctuid wanted the common execution interfaces even if the particular Code Mode implementation changed. Cv likewise asked that those interfaces remain public if MCP or Code Mode were later split out.

The resulting design gives those requests a concrete answer. An extension can call another registered tool through ctx.executeTool(). The runtime validates the input and sends the nested call through the same extension hooks that can block a call or change its result. The regression cases exercise parallel calls, blocking and result replacement. Extension authors gain a common route through the host instead of needing to invent their own route around it.

A smaller introduction to a large tool catalog

For a user connecting a document service or issue tracker, the visible gain is simpler setup. Pi supplies local-process and HTTP MCP connections, browser sign-in for supported OAuth servers, and a server manager. Project configuration is read only after the project is trusted, because local servers can execute commands.

Code Mode changes how the agent can use those tools. A script can fetch several results, filter them, and pass only the useful portion back to the model. This is useful plumbing, but putting every tool's instructions inside one large Code Mode description would still consume context. A September 27 review comment identified exactly that weakness in the proposal's earlier state.

The released contract includes discovery and deferred exposure. Selected declarations share a configurable budget; a script can search for the rest, or the model can use tool search to load tools for direct calls. The default budget estimates 3,000 tokens for those declarations, not for the entire prompt. It is a way to choose what the model sees, not evidence of a measured saving on completed work.

Bundled does not mean exclusive

The replacement rule is unusually specific. If an installed extension registers /mcp, Pi leaves the built-in MCP session extension out. An extension supplying codemode or tool_search can replace that built-in tool too. Users can also disable individual built-ins. A loader regression checks the competing-command case.

There are boundaries to that choice. The standalone pi mcp shell commands still use Pi's own implementation. SDK sessions do not load the built-in extensions automatically. And compatibility depends on the adapter version: the separate pi-mcp-adapter v3 release moved its main command and configuration to /mcp-adapter and mcp-adapter.json, leaving Pi's names available. Replacing the default and coexisting with it are different arrangements; the configuration migration alone does not establish compatibility between the released versions.

We inspected the release, implementation and test definitions; we did not run a live MCP session or benchmark. The JavaScript VM also does not confine the host tools it invokes. Those limits leave the useful finding intact: Pi now provides more functionality out of the box and more common machinery for people who want a different implementation.

Our June question was whether Pi could grow without losing its replaceability. This release answers part of it in code. The next test is in extension upgrades: can an existing workflow adopt the shared execution path while preserving its commands, policy hooks and results? For users choosing a harness, the consequential feature is now both the integration that ships and the supported route for replacing it.

Ask about this article

Pi Adds Built-In MCP—and Keeps the Tools Replaceable

Article link and summary included. Continue using your ChatGPT account; you may need to sign in.

If your question doesn’t appear in ChatGPT, copy it here and paste it there.

Your immediate reaction

How did this article land?

A thumb saves immediately. Notes stay private and are discussed with the editor before shaping future articles.

Evidence Trail

Receipts below the story

The article above is the public narrative. This section keeps the source trail and limits on the same page.

Edition
DateSeptember 30, 2026
LaneDaily Edition
Confidence91%
Sources10
Reposearendil-works/pi

Primary Evidence

Evidence Limits

  • Source and test definitions were inspected; upstream tests and live MCP integrations were not independently executed.
  • Release evidence establishes distributed functionality, not adoption, measured task quality, speed or cost savings.
  • The declaration budget uses token estimates and excludes other prompt material. Reduced intermediate output does not prove lower completed-task cost.
  • The JavaScript VM does not supply operating-system confinement for invoked host tools.
  • Replacement of the session integration does not replace standalone pi mcp shell commands. SDK sessions require explicit extension loading.
  • The adapter's configuration migration does not establish compatibility between the released Pi and adapter versions. Its released built-in identifier detection and current main differ.
  • Public discussion records specific participants' requests and stated motives, not a representative community verdict or private decision history.