Skip to main content

Tool naming

Tools follow a namespace_verb convention: agent_list, mission_run, memory_save, data_query. Namespaces map 1:1 to app resources. Older verb-first names (list_agents, save_memory, query_data, …) remain permanent aliases: tools/call accepts both spellings, and keys whose stored scopes carry old names keep working. tools/list only ever advertises the canonical names. Federated (vertical) tools are namespaced with a double underscore: vertical__vertical_card, vertical__vertical_search (server prefix + __ + tool name).

Common parameters

Session bootstrap tools

These two tools are always callable, regardless of the key’s allowlist.

whoami

Who am I — identity, role, tenant, departments, missions and the enabled tool surface of this credential. Call this first in every session. Parameters: none. Returns: Example:
Permissions: always allowed.

get_context

The Operating-Manual context block (high-importance memories + knowledge; rights-aware, token-budgeted) — the same block the in-app chat auto-injects into its system prompt. Over MCP it is pull-only: call once at session start, right after whoami. Parameters: Returns: a formatted context block of the highest-importance entries the calling user may read. Example:
Permissions: always allowed; content is rights-filtered per user.

Errors

Responses are JSON-RPC 2.0. Application errors inside a successful tool call come back as an { "error": "…" } object in the tool result; protocol/authorization errors use JSON-RPC error codes: Database write failures are mapped to one actionable sentence plus the standard SQLSTATE class (e.g. Insert failed (23505) — a record with these values already exists.). Raw SQL/schema details are never returned.

Limits

Dry-run

Write tools that support dry_run:true validate the input, resolve all references and return the would-be effect (e.g. a field-level from → to diff) without persisting anything: agent_update, agent_schedule_manage, memory_save, skill_create, data_row_save, data_row_create, data_row_update. Mission runtime controls (mission_cancel, mission_pause, mission_resume, mission_budget_increase) use the confirm pattern instead: calling without confirm:true returns a would preview; only a second call with confirm:true executes.

Router mode (token-lean surface)

A key whose allowlist contains execute_tool is a router key: tools/list advertises only three meta-tools (plus whoami), and every other allowlist entry becomes an execution target. This cuts client input tokens dramatically for keys with large tool surfaces. Router mode is opt-in per key — it is never part of a default OAuth scope set.

search_tools

Find platform tools by free-text query over name + description (AND-matched terms; empty query lists everything reachable on this key). Returns: lean rows {name, write flag, summary}. Permissions: router keys only.

describe_tool

Full definition of one reachable tool: name, description and the complete inputSchema. Call before execute_tool so inputs are grounded in the real schema. Permissions: router keys only.

execute_tool

Execute one tool by name with the given input. Dispatches to the exact same implementation as a direct call and enforces the exact same per-key allowlist — the router can never widen a key. Router tools themselves cannot be executed (no recursion); each target still applies its own role gates. Example:
Permissions: router keys only; write targets keep their write gates.