How it works
The server honors atools array on incoming chat completion requests. Whether those tools are actually attached to the LLM is a per-agent opt-in in TOML — there is no server-wide flag. Tools that get attached are registered as passthrough tools: the LLM sees them alongside any server-side MCP tools and can call them, but instead of executing server-side, the stream terminates with finish_reason: "tool_calls" so the client can run the tool locally and submit the result back as a role: "tool" follow-up.
tools field on the request is silently dropped; the server runs MCP tools as usual but never asks the client to execute anything. Per-agent opt-in is the design. Accepting client-supplied tool definitions means trusting the client to execute them, so it should be a deliberate config decision.
Single-agent configurations only
Client-side tools are not supported in orchestrated (multi-agent) configurations. When[orchestration].enabled = true, any tools array on the request is dropped with a warning. The reason: the passthrough mechanism requires terminating the user-facing SSE stream with finish_reason: "tool_calls", which doesn’t compose with the coordinator/worker pipeline. If you need local tools, use a single-agent config.
Server-side configuration
enable_client_tools and client_tool_filter are per-agent [agent] fields — see [agent] in the configuration reference for the full field table.
client_tool_filter is a list of patterns matched against the request’s tools[].function.name. An empty or omitted filter means all client tools are available. A request that supplies tools never reaches an agent that did not opt in.
The patterns use the same syntax as mcp_filter, including *, ?, [abc], and {a,b}. See Tool-Name Patterns. A pattern outside that syntax, such as one containing a space, stops the config from loading. Client-side tools don’t come from an MCP server, so a <namespace>:<name> pattern never matches one.
Client-side configuration (AURA CLI)
The AURA CLI is the reference client implementation.--enable-client-tools (or AURA_ENABLE_CLIENT_TOOLS=true) turns on advertisement of its local tools (Shell, Read, Update, ListFiles, FindFiles, SearchFiles, FileInfo); the CLI’s permission system (.aura/permissions.json) then governs which of those actually execute without a prompt. See the CLI Reference for the flag/env var syntax, precedence rules, and the permission system.
Backend symmetry
Both halves of the system gate this independently and both must opt in for local tools to fire, in HTTP mode and standalone mode alike. Standalone runs the same handler path in-process, so the agent’s[agent].enable_client_tools = true is required there too.
If local tools never fire when you expect them to, check that both sides are opted in: the agent’s TOML has
enable_client_tools = true (and the config is single-agent), and the client has local tools enabled.
