Skip to main content

Core tools

The tool catalog combines built-in tools, connected MCP tools, and optional capabilities such as memory and skills. Every tool uses the same tool.Tool interface and permission path.

Two dispatch rules govern execution:

  • Read-only tools from the same turn can run concurrently.
  • Mutating tools run one at a time.

Each tool declares its behavior through ReadOnly(). The dispatcher enforces the declaration.

Core tool table​

These tools appear in a default session. Use their catalog names in tool specs and permission rules.

Catalog namePurposeRead-only?
ReadRead a file. Supported images return typed image content when the model accepts images.Yes
ListDirList one directory's sorted immediate children. Local workspaces can list a policy-authorized external absolute directory.Yes
WriteCreate a file or replace a previously read, unchanged file.No
EditReplace exact, unique text in a previously read, unchanged file.No
CopyCopy a regular file to a new path without overwriting.No
MoveMove a file or directory to a new path without overwriting.No
RemoveRemove one file or empty physical directory. It is never recursive.No
ShellRun a permission-controlled shell command, optionally in the background.No
ShellStatusList, inspect, wait for, collect, or cancel this run's background jobs.Yes
GrepSearch file contents with a regular expression or literal pattern.Yes
GlobList files that match a glob pattern.Yes
DiscoverModelsList resolved provider and model selection handles.Yes
WebFetchFetch readable text from a public HTTP or HTTPS URL.Yes
WebSearchSearch the web.Yes
ToolSearchLoad hidden tools by keyword when progressive disclosure is enabled.Yes

Read detects images by content. Image reads are limited to 10 MiB, do not support offset or limit, and return a text fallback when the model cannot accept images.

Fetching a page without MCP​

WebFetch returns readable text from an absolute HTTP or HTTPS URL. Use WebSearch to find a page and WebFetch to read a known URL.

It rejects private, loopback, link-local, metadata, and reserved destinations, pins the validated DNS result for the connection, and repeats those checks after redirects. It does not use browser cookies, proxy settings, custom headers, or credentials. Limits include five redirects, 5 MiB response bodies, and 25,000 bytes of model-visible output.

Mecatl removes active HTML, repairs invalid UTF-8, and marks fetched text as untrusted. The default model-backed guardrails inspect WebFetch results when guardrails are enabled.

WebSearch is enabled by default and uses Exa's public MCP endpoint anonymously. Set EXA_API_KEY to use Exa's paid tier, BRAVE_API_KEY to use Brave Search, or SEARXNG_URL to use a self-hosted SearXNG /search endpoint. SearXNG must enable JSON output because Mecatl requests format=json.

For another HTTP JSON service, set --websearch-url and WEBSEARCH_API_KEY. Results must contain title, url, and one of snippet, content, or description. Use --websearch-auth-header for a raw-key header or --websearch-query-param to replace the default q parameter.

Set --websearch=off to disable outbound search. Queries are sent verbatim, results are marked as untrusted, redirects are refused, and calls have timeout and concurrency limits. Use permissions or guardrails for additional exfiltration controls.

Shell is mutating

Shell is always mutating. Use ListDir, Grep, or Glob for concurrent read-only work.

An operator can disable shell access for the entire deployment. mecated serve --no-shell removes the Shell tool, and --shell "" has the same effect. The user-global command_runner.shell setting selects the default interpreter, while command_runner.environment.inherit can grant named external variables only to built-in main runners. See Configure Mecatl for precedence and credential-boundary details. This applies whether or not a client requests the no-fs session profile. See Run mecated standalone.

Managed temporary storage (Linux and macOS)​

On Linux and macOS, Shell uses private managed temporary storage. Mecatl removes it after normal completion and later reclaims validated, abandoned leases. It never sweeps unrelated system files. Other platforms must set temporary_storage.mode: system or Mecatl will not start.

Set temporary_storage.mode: system in user-global settings to use system temporary storage. Existing managed leases remain for manual inspection or removal. A model request for temp_scope: system requires both Shell permission and the ShellSystemTemp capability. See the configuration reference for cleanup settings.

Background commands​

Shell with background: true returns a bashcmd-<id> job ID. Call ShellStatus without arguments to list jobs, use job_id to inspect or collect one, use wait_ms to wait, or pass an ID to cancel to stop it. Background commands run in the real workspace, so their changes can overlap later tool calls. Mecatl cancels them when the run ends.

The no-filesystem execution selection​

A session created with execution: {none: {}} removes Read/ListDir/Write/Edit/Copy/Move/Remove/Grep/Glob/Shell/ShellStatus/Parallel/SkillDraft from the catalog. WebFetch, WebSearch, memory, and MCP tools remain. Children inherit the file-less catalog. Clients choose execution when creating the session; the model cannot change it. See Execution environments for filesystem and no-filesystem placement.

Execution placement providers​

Set the operator-tier execution.default_placement to microvm-local to run filesystem and Shell tools in a local VM. An explicit mecated serve flag takes precedence for that invocation. mecatui uses this setting for its embedded server; mecatui connect uses the remote server's placement.

The server applies the configured placement to ordinary session creation. Clients receive bounded PlacementMetadata and can select execution.none to remove filesystem access, but cannot submit a placement alias, workspace path, or exact environment reference. The daemon controls images, resources, egress, lifecycle, and attestation. If placement is unavailable, session creation fails without falling back to the host.

Guest IPv4 access is permissive by default; external IPv6 is unrouted. Operators can restrict IPv4 with execution.microvm.guest_egress.mode: deny-all, or use allowlist with allow: [HOST:PORT/tcp|udp]. Explicit mecated serve flags override settings for one invocation. HTTP/gRPC clients and project settings cannot weaken this policy. See Local microVM environments for setup and artifact requirements.

Optional tool groups​

Configured memory stores add project and user-memory tools. Delegation adds Subagent, Parallel, and Team. These tools use the same catalog and permission path as the core tools.

See Memory and user model for memory lifecycle operations and Subagents, teams, and parallel work for delegation behavior.

The tool catalog model​

Tools register in tool.Catalog with a name, JSON-schema specification, and ReadOnly() behavior. Built-in and MCP tools use the same registration path.

A call that mutates parent state, such as Subagent in mode: read-write, runs serially even if the tool is usually read-only.

MCP tools use mcp__<server>__<tool> names, which prevent collisions with built-ins and serve as permission-rule identifiers.

Tools that implement tool.Disclosable remain hidden until ToolSearch loads them. Other tools always appear in the model's catalog.

The Skill tool loads instruction bundles on demand. See Skills, commands, and soul for discovery, activation, and slash-command behavior.

Next steps​

  • MCP client to connect external MCP servers. Their catalog names use the mcp__<server>__<tool> format.
  • Tool catalog extension point to add custom tools, configure skills, and control what the model can see.