23 July 2026
!!BREAKING CHANGES!!
Summary
An emptymcp_filter (mcp_filter = []) now grants no MCP tools
instead of every MCP tool. This applies to orchestration workers
([orchestration.worker.<name>].mcp_filter) and to the single-agent
[agent].mcp_filter.
An omitted mcp_filter still grants every MCP tool, so existing configs
that don’t write the field are unaffected.
Why
Previouslymcp_filter = [] and an omitted filter both meant “all tools”,
which made two things impossible or dangerous:
- “No MCP tools” was unexpressible. Tool-free workers (like a writer
that only synthesizes text) had to resort to a non-matching dummy pattern
such as
["__none__"]. - Removing the last allowlist entry silently widened access. Editing
mcp_filter = ["logs_*"]down tomcp_filter = []expanded the worker from one tool family to every tool — the opposite of the intent.
The new rule
Migration
- If a config has
mcp_filter = []and relied on receiving all tools: delete the line (omit the field). - If a config used a non-matching dummy pattern (e.g.
["__none__"]) to keep a worker tool-free: replace it withmcp_filter = [].
client_tool_filter is unchanged: an empty client-tool filter still means
all client tools.
