mcp.servers catalog of a
layer-root settings.yaml (~/.ziro/settings.yaml or
<project>/.ziro/settings.yaml), merged across layers with tokens interpolated.
An agent’s own mcp section (was mcp_servers.yaml) is a selector over that
catalog: enable / deny globs over catalog ids, plus an optional inline
servers map for private servers. No enable means the agent connects nothing.
Loaded servers register their tools under the server name as a namespace and
enter the same progressive discovery surface as native tools, so the model finds
them with search_tools and activates them with load_tools. A server that
fails to connect is non-fatal: the rest of the session continues.
stdio, sse, streamable_http, and
websocket), OAuth acquisition and refresh including the device-code flow used
when running headless, and the live MCP manager that holds one persistent session
per server so repeat tool calls reuse an open connection instead of reconnecting.
Finally it will cover the control panel: Ctrl+O or /mcp in the TUI opens a
table of servers with state, transport, auth, and tool count, mapping connect,
disconnect, and reconnect to the manager, with a tool peek and an OAuth prompt
modal. In the REPL, /mcp [server] prints the same information as a table.
This page is in progress. Until it lands, the shipped
mcp.servers catalog and
the per-agent mcp selectors are the best worked examples. Legacy split
mcp_servers.yaml files still resolve at each layer as an alternative to the
mcp section. An untrusted project’s catalog is ignored wholesale.mcp section resolves.