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 glob 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.
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 is not a special case: it uses the same handler path asaura-web-server, 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.
