MCP tools reference

Every registered MCP tool: purpose, who may call it, parameters, and a minimal example.

orch MCP tool reference

Generated by go run ./cmd/orch-docs from mcp.ToolDefs() (client/internal/mcp/server.go) — the same manifest tools/list serves. 46 tools total, 7 Chair-only (denyWorkerFanout, client/internal/mcp/spawn.go); every other tool is callable from any seat.

architecture#

Who may call it: any seat

Purpose: Directory-level map of the workspace: symbols per directory and edge counts between them. Read this before deciding where a change belongs.

parameter type required default description
session string no

Minimal example:

{
  "arguments": {},
  "name": "architecture"
}

ask#

Who may call it: any seat

Purpose: Worker: ask the Chair a blocking question and wait for the answer. Use when a decision is not yours to make; do not guess and do not spawn.

parameter type required default description
context string no what you already know; keep it telegraphic
options array<string> no when given, the answer must be one of these
question string yes
timeout_sec integer no default 600
to_project string no registered project id — ask that project's running Chair instead
to_session string no defaults to the running Chair of this project

Minimal example:

{
  "arguments": {
    "question": "..."
  },
  "name": "ask"
}

ask_answer#

Who may call it: any seat

Purpose: Chair: answer a blocking ask by id; the worker unblocks immediately. For "how did you solve X" across projects, add symbol_ref instead of pasting code — the asker fetches it with code_snippet{project}.

parameter type required default description
answer string yes
by string no
id integer yes
symbol_ref object no points at the symbol that answers the question; must resolve under project, shared scope only (fields: line, path, project, symbol)

Minimal example:

{
  "arguments": {
    "answer": "...",
    "id": 0
  },
  "name": "ask_answer"
}

ask_list#

Who may call it: any seat

Purpose: Chair: list asks (status open|answered|timeout|all, default open)

parameter type required default description
limit integer no
session string no
status string no

Minimal example:

{
  "arguments": {},
  "name": "ask_list"
}

code_snippet#

Who may call it: any seat

Purpose: One symbol's body by line range instead of the whole file — the preferred read path for "show me how X works". Capped at max_lines.

parameter type required default description
id string no numeric symbol id (alternative to symbol)
max_lines integer no default 120
project string no fetch from another registered project (shared scope only, unless it's your own project)
session string no
symbol string no symbol name

Minimal example:

{
  "arguments": {},
  "name": "code_snippet"
}

context_crush#

Who may call it: any seat

Purpose: Crush repetitive success/log noise (Headroom-like, in-house)

parameter type required default description
text string yes

Minimal example:

{
  "arguments": {
    "text": "..."
  },
  "name": "context_crush"
}

context_externalize#

Who may call it: any seat

Purpose: Crush (if enabled) and externalize bulky text to .orch/context; returns stub + id

parameter type required default description
text string yes

Minimal example:

{
  "arguments": {
    "text": "..."
  },
  "name": "context_externalize"
}

context_retrieve#

Who may call it: any seat

Purpose: Retrieve full externalized context blob by id (CCR)

parameter type required default description
id string yes

Minimal example:

{
  "arguments": {
    "id": "..."
  },
  "name": "context_retrieve"
}

Who may call it: any seat

Purpose: FTS search over externalized context chunks (BM25-like)

parameter type required default description
limit integer no
query string yes

Minimal example:

{
  "arguments": {
    "query": "..."
  },
  "name": "context_search"
}

dispatch_worker#

Who may call it: Chair-only

Purpose: Chair (any BYO seat): one-shot spawn a worker via orch (agent id + prompt). Creates a Board task row. Async by default, so two workers can run side by side and review each other; the verdict arrives as a handoff message. Prefer when user says run a worker with orch — never open that CLI yourself.

parameter type required default description
actor string no
agent string yes worker agent id (codex, commandcode, …)
force boolean no
inplace boolean no
keep_worktree boolean no
name string no
project string no
prompt string yes
session string no
timeout_sec integer no
title string no
wait boolean no block until the worker exits (default false: return as soon as it is running)

Minimal example:

{
  "arguments": {
    "agent": "...",
    "prompt": "..."
  },
  "name": "dispatch_worker"
}

entitlements_status#

Who may call it: any seat

Purpose: Active plan, quotas, and capability catalog (allowed vs LOCKED with upgrade hints)

No parameters.

Minimal example:

{
  "arguments": {},
  "name": "entitlements_status"
}

impact#

Who may call it: any seat

Purpose: What a change reaches: symbols declared in the given paths plus their callers up to two hops. With no paths, uses the workspace's own git diff --name-only.

parameter type required default description
git_range string no e.g. main...HEAD; ignored when paths is given
paths array<string> no
session string no

Minimal example:

{
  "arguments": {},
  "name": "impact"
}

inspect_symbol#

Who may call it: any seat

Purpose: Inspect a shared symbol by name or numeric id

parameter type required default description
name string yes

Minimal example:

{
  "arguments": {
    "name": "..."
  },
  "name": "inspect_symbol"
}

lock_acquire#

Who may call it: any seat

Purpose: Acquire shared-path semaphore before editing shared/**

parameter type required default description
holder string yes session id
path string yes
ttl_min integer no

Minimal example:

{
  "arguments": {
    "holder": "...",
    "path": "..."
  },
  "name": "lock_acquire"
}

lock_check#

Who may call it: any seat

Purpose: Deny unless holder has a valid lock on shared/** path (enforce before edit)

parameter type required default description
holder string yes
path string yes

Minimal example:

{
  "arguments": {
    "holder": "...",
    "path": "..."
  },
  "name": "lock_check"
}

lock_release#

Who may call it: any seat

Purpose: Release shared-path semaphore

parameter type required default description
holder string yes
path string yes

Minimal example:

{
  "arguments": {
    "holder": "...",
    "path": "..."
  },
  "name": "lock_release"
}

lock_status#

Who may call it: any seat

Purpose: Status of one lock path, or list held locks if path empty

parameter type required default description
path string no

Minimal example:

{
  "arguments": {},
  "name": "lock_status"
}

memory_conflicts#

Who may call it: any seat

Purpose: List active memories that share type+title but differ in body

No parameters.

Minimal example:

{
  "arguments": {},
  "name": "memory_conflicts"
}

memory_export#

Who may call it: any seat

Purpose: Export the memory estate as OKF-lite markdown (v0.2-compatible)

parameter type required default description
all boolean no include expired/superseded
dir string no output dir (default memory.okf_dir)
limit integer no

Minimal example:

{
  "arguments": {},
  "name": "memory_export"
}

memory_forget#

Who may call it: any seat

Purpose: Soft-expire a memory by id

parameter type required default description
id string yes

Minimal example:

{
  "arguments": {
    "id": "..."
  },
  "name": "memory_forget"
}

memory_import#

Who may call it: any seat

Purpose: Import OKF-lite markdown files into the memory estate

parameter type required default description
dir string no input dir (default memory.okf_dir)

Minimal example:

{
  "arguments": {},
  "name": "memory_import"
}

memory_list#

Who may call it: any seat

Purpose: List active memories (optional type filter)

parameter type required default description
limit integer no
type string no

Minimal example:

{
  "arguments": {},
  "name": "memory_list"
}

memory_recall#

Who may call it: any seat

Purpose: FTS recall of active memories (brief before reinventing)

parameter type required default description
limit integer no
query string no
type string no

Minimal example:

{
  "arguments": {},
  "name": "memory_recall"
}

memory_remember#

Who may call it: any seat

Purpose: Store a durable typed memory in the local orch estate (decision/fact/preference/…)

parameter type required default description
source string no
tags string no
text string yes
title string no
type string no

Minimal example:

{
  "arguments": {
    "text": "..."
  },
  "name": "memory_remember"
}

memory_sweep#

Who may call it: any seat

Purpose: Expire memories past retention_days (yaml or defaults)

No parameters.

Minimal example:

{
  "arguments": {},
  "name": "memory_sweep"
}

msg_ack#

Who may call it: any seat

Purpose: Ack a message as recipient (session and/or agent must match; session defaults like msg_inbox)

parameter type required default description
agent string no
id integer yes
session string no

Minimal example:

{
  "arguments": {
    "id": 0
  },
  "name": "msg_ack"
}

msg_inbox#

Who may call it: any seat

Purpose: Read inbox for session and/or agent (session defaults to ORCH_SESSION, then to this Chair's own seat when orch mcp runs as a pure MCP-server Chair)

parameter type required default description
agent string no
limit integer no
session string no
unread boolean no

Minimal example:

{
  "arguments": {},
  "name": "msg_inbox"
}

msg_peers#

Who may call it: any seat

Purpose: List discoverable sessions; pass session for kinship roster, to_project for that project's peers, or to_worker to locate one worker's live session

parameter type required default description
session string no from-session → project family roster
to_project string no registered project id — peers under that project only
to_worker string no stable worker id → its current session

Minimal example:

{
  "arguments": {},
  "name": "msg_peers"
}

msg_roster#

Who may call it: any seat

Purpose: Project family roster (parent/child/sibling) relative to session

parameter type required default description
session string yes

Minimal example:

{
  "arguments": {
    "session": "..."
  },
  "name": "msg_roster"
}

msg_send#

Who may call it: any seat

Purpose: Send disco note/handoff/alert; optional to_worker (stable worker id), to_role=parent|child|sibling (project kinship) or to_project= (that project's running Chair)

parameter type required default description
body string yes
from_agent string no
from_session string no
kind string no
name string no target name/session/agent when using to_role
parent_id integer no
payload_path string no
to_agent string no
to_project string no registered project id — routes to that project's running Chair
to_role string no parent|child|sibling
to_session string no
to_worker string no stable worker id; resolves to that worker's current session

Minimal example:

{
  "arguments": {
    "body": "..."
  },
  "name": "msg_send"
}

msg_stale#

Who may call it: any seat

Purpose: List unread alerts older than older_min minutes

parameter type required default description
older_min integer no

Minimal example:

{
  "arguments": {},
  "name": "msg_stale"
}

search_shared_symbols#

Who may call it: any seat

Purpose: Search the shared symbol registry (FTS/LIKE); every hit carries the registered project it resolves under, if any

parameter type required default description
limit integer no
project string no registered project id — only hits under that project's path
query string yes

Minimal example:

{
  "arguments": {
    "query": "..."
  },
  "name": "search_shared_symbols"
}

task_add#

Who may call it: Chair-only

Purpose: Chair (any BYO seat): create a task (optional agent assignee). Prefer over shelling orch task add.

parameter type required default description
acceptance_criteria array<string> no each is shown to the worker and must come back met/not in its verification report
agent string no assignee agent id (e.g. codex, commandcode)
body string no task body / worker prompt
context string no standing background the worker needs (constraints, ownership, where the code lives)
ledger string no ledger item ref
title string yes

Minimal example:

{
  "arguments": {
    "title": "..."
  },
  "name": "task_add"
}

task_assign#

Who may call it: Chair-only

Purpose: Chair: assign task to an agent id

parameter type required default description
agent string yes
id string yes

Minimal example:

{
  "arguments": {
    "agent": "...",
    "id": "..."
  },
  "name": "task_assign"
}

task_claim#

Who may call it: any seat

Purpose: Any seat: atomically claim one ledger checklist item ("- [ ] N.") via shared_locks; fails clearly if another live session holds it

parameter type required default description
holder string yes session id
item integer yes checklist item number, e.g. 36 for "- [ ] 36."
ledger string yes ledger file path, e.g. .workflow/LEDGER-R2.md
ttl_min integer no

Minimal example:

{
  "arguments": {
    "holder": "...",
    "item": 0,
    "ledger": "..."
  },
  "name": "task_claim"
}

task_done#

Who may call it: any seat

Purpose: Mark task done or failed

parameter type required default description
id string yes
status string no done|failed

Minimal example:

{
  "arguments": {
    "id": "..."
  },
  "name": "task_done"
}

task_list#

Who may call it: any seat

Purpose: List chair tasks (optional status filter)

parameter type required default description
limit integer no
status string no open|assigned|running|done|failed

Minimal example:

{
  "arguments": {},
  "name": "task_list"
}

task_release#

Who may call it: any seat

Purpose: Release a ledger item claim (holder must match, or holder=*)

parameter type required default description
holder string yes
item integer yes
ledger string yes

Minimal example:

{
  "arguments": {
    "holder": "...",
    "item": 0,
    "ledger": "..."
  },
  "name": "task_release"
}

task_run#

Who may call it: Chair-only

Purpose: Chair (any BYO seat): dispatch an assigned task as a worker session (ledger-gated). Async by default — returns once the worker is running; the verdict arrives as a handoff message. Never spawn vendor CLIs outside orch.

parameter type required default description
actor string no
force boolean no bypass clarify_before_spawn ledger gate
id string yes
inplace boolean no
keep_worktree boolean no
name string no
project string no
session string no
timeout_sec integer no
wait boolean no block until the worker exits (default false: return as soon as it is running)

Minimal example:

{
  "arguments": {
    "id": "..."
  },
  "name": "task_run"
}

trace_path#

Who may call it: any seat

Purpose: Call graph around one symbol: who calls it, what it calls, with a confidence per edge (1.0 resolved by package or file, 0.7 by receiver type, 0.4 name heuristic). Prefer this over reading files to understand how code connects.

parameter type required default description
depth integer no hops, 1-5 (default 2)
direction string no
session string no session id, for content-free usage measurement
symbol string yes symbol name or numeric id

Minimal example:

{
  "arguments": {
    "symbol": "..."
  },
  "name": "trace_path"
}

usage_status#

Who may call it: any seat

Purpose: Token spend and crush savings for this workspace: by session, by worker, by model — or, with view, the same leak/governance telemetry orch usage --leaks/--governance print (rereads, repeats, oversized results, silent streaks; conflict/duplicate rate, cross-session file collisions). Content-free — the gateway ledger never stores prompts.

parameter type required default description
recent integer no summary view only: also return the N most recent attempts
view string no summary (default) | leaks | governance

Minimal example:

{
  "arguments": {},
  "name": "usage_status"
}

verify_report#

Who may call it: any seat

Purpose: Worker: attach verification evidence to this session (tests run, shared symbols exported/reused, acceptance criteria met). Call before finishing; orch adds guardrails and touched files when the session closes.

parameter type required default description
criteria array<object> no
session string no defaults to ORCH_SESSION
summary string no one telegraphic line
symbols array<object> no
task string no defaults to ORCH_TASK
tests array<object> no

Minimal example:

{
  "arguments": {},
  "name": "verify_report"
}

verify_status#

Who may call it: any seat

Purpose: Read the verification report for a session (defaults to ORCH_SESSION)

parameter type required default description
session string no

Minimal example:

{
  "arguments": {},
  "name": "verify_status"
}

worktree_promote#

Who may call it: Chair-only

Purpose: Merge orch/ into base (fail-closed on conflicts; no auto-push)

parameter type required default description
base string no
project string no
session string yes
strategy string no merge|rebase

Minimal example:

{
  "arguments": {
    "session": "..."
  },
  "name": "worktree_promote"
}

worktree_prune#

Who may call it: Chair-only

Purpose: Prune orphan orch worktree dirs and orch/* branches

parameter type required default description
project string no

Minimal example:

{
  "arguments": {},
  "name": "worktree_prune"
}

worktree_status#

Who may call it: Chair-only

Purpose: List orch session git worktrees (dirty/orphan) for the project

parameter type required default description
base string no base branch override
project string no

Minimal example:

{
  "arguments": {},
  "name": "worktree_status"
}