# MCP separates capability providers from the loop

MCP provides a standard way to discover tools and call them through a server boundary. The harness still decides which tools become visible, when schemas refresh, how calls are authorized, how long they run, and what to do if a connection fails after an effect may have occurred.

Codex captures tool bindings and output-policy state for admitted MCP calls and can expose deferred tools through lexical search. Pi's built-in MCP integration handles configured connections and tool-list changes, adapting tools into the agent pipeline. Goose routes names through session-scoped extension leases. [Codex MCP handler][c-mcp] and [search][c-search], [pi MCP runtime][p-mcp], [Goose lease][g-mcp].

A tool catalog can change while work runs. If a model requested tool `lookup` under catalog A, refreshing to catalog B should not silently change what that already-admitted call means. Catalog lifetime and binding ownership are therefore correctness concerns, not only caching details.

Read-only annotations can guide scheduling or retry policy. They are metadata supplied by an integration, not proof that an arbitrary remote server has no effects. Similarly, an MCP connection standard does not imply that all servers are inside the same sandbox.

## Sidekick: hosting an agent does not establish native MCP

The inspected native executor routes registered system tools, configured CLI tools, and stored Python tools. No native MCP discovery/client path was established in the backend and Outpost review. The ACP adapter supplies an empty MCP-server list when creating or loading a session. ACP carries an agent session; MCP exposes capabilities such as tools. An independently configured wrapped harness may use MCP, but that is not evidence of a Sidekick-owned MCP client. [Native routing][s-routing], [ACP configuration][s-acp] (private source).

[c-mcp]: https://github.com/openai/codex/blob/8c076942cb70fba8e5c4732c23f1faabc4aed484/codex-rs/core/src/tools/handlers/mcp.rs#L135-L325
[c-search]: https://github.com/openai/codex/blob/8c076942cb70fba8e5c4732c23f1faabc4aed484/codex-rs/core/src/tools/handlers/tool_search.rs#L66-L358
[p-mcp]: https://github.com/earendil-works/pi/blob/482c1381a00d8d00bc81697e4a980c593db6803e/packages/coding-agent/src/extensions/mcp/runtime.ts#L278-L446
[g-mcp]: https://github.com/aaif-goose/goose/blob/34a222e3f2b95d8b4a43482b53c2cc957ecce26d/crates/goose/src/agents/extension_manager/lease.rs#L573-L729

[s-routing]: https://github.com/datex/sidekick/blob/463d653124e1c2cda46a3f14f01f3d6f384326b1/backend/src/sidekick_worker/tools/unified_executor.py#L88-L127
[s-acp]: https://github.com/datex/sidekick/blob/463d653124e1c2cda46a3f14f01f3d6f384326b1/outpost/src/agent_runtime/adapters/acp/adapter.py#L213-L242
