cc_server hosts one MCP (JSON-RPC 2.0) tool registry, served on the main server port (default 9030) at POST /mcp and GET /sse, protocol version 2024-11-05. Every client reaches the same registry: the desktop, the web build, external MCP clients and the built-in agent runtime. External MCP servers can be bridged into the same registry as a dynamic layer.
Registered in the base registry (server_mcp_registry.dart)
63
Registered post-boot as their services come up (cc_server_runtime.dart)
46
Of the base registry’s 63, conditional on a code-graph repository
5
The five code-graph tools are registered only when the host passes a code-graph repository to buildServerMcpRegistry. cc_server always passes one, so all 109 are live in the shipped binary.
The full registry is advertised in tools/list with no discovery gating. Ticket edits are typed tools; the CLI-args-in-JSON ticket_cli surface was removed.
Required on every tool that touches workspace-scoped data. A missing or invalid workspace_id returns an explicit error and a value that does not match the target entity’s workspace is rejected rather than silently ignored. Omit it only on the genuinely global tools (list_workspaces). When an agent is dispatched by the server, the workspace is forced server-side, so the agent cannot reach another workspace by passing a foreign id.
Both come from cc_mcp_client, not cc_mcp and both consult the mode guard so they report what is callable in the current conversation mode.
Tool
Description
search_tool_bm25
Search the tool catalogue by keyword; returns matching tools, their argument schemas and whether each is callable right now
list_my_tools
List the tools callable right now in this conversation, filtered by its mode
A third discovery tool, search_tools, exists only inside the built-in harness and is not part of this MCP registry. It ranks the run’s own tool surface and, unlike search_tool_bm25, loads the schemas of what it finds so the agent can call a match on its next turn. Agents on the harness should prefer it; MCP clients have search_tool_bm25.
Agents talk to each other over spaces (durable, roster-visible). ask_agent is request/reply with a mandatory timeout; delegate_task is guarded server-side by depth cap, cycle detection, budget envelope and autonomy ceiling.
Tool
Description
send_to_agent
Send a one-way message to another agent, addressed by to_agent_id or exact to_agent_name
ask_agent
Ask another agent a question and wait for its reply, or time out
delegate_task
Delegate a task to another agent as a tracked child ticket
consult_agent
Add the best-matching specialist by skills to the space and dispatch it with a focused brief
List the repos registered in a workspace. Agent callers receive their conversation’s isolated copy-on-write worktree paths, never the original checkouts
Registered only when the host supplies a code-graph repository. The index covers Dart, JavaScript, TypeScript, TSX and PHP; symbols in any other language are not present.
Tool
Description
search_code
Search indexed symbols by name, signature and doc comment (hybrid BM25 + semantic)
code_symbol
Look up symbols by exact name; returns file:line and signature
code_callers
List the symbols that call or depend on a symbol (incoming edges)
code_callees
List the symbols a symbol calls or depends on (outgoing edges)
code_impact
Compute the transitive impact radius of a symbol, to a depth
List tickets, optionally filtered by status or assignee
update_ticket
Update status, title, description, priority, or labels (status accepts aliases such as in_progress / completed)
assign_ticket
Assign a ticket to an agent and/or team
reassign_ticket
Reassign a ticket to a different agent
add_ticket_collaborator
Invite an agent to collaborate on a ticket (added to its space)
comment_on_ticket
Comment on a ticket
close_ticket
Close a ticket (marks it done) with optional output
fail_ticket
Mark a ticket failed with an error message
delegate_ticket
Delegate a ticket to an agent, creating a tracked ticket
ticket_pr_link
Link or unlink a ticket and a pull request by PR node id (action: link | unlink)
ticket_relation
Add or remove a relation between two tickets — blocked_by, blocking, related_to, duplicate_of, duplicated_by, sub_issue_of, parent_of (action: add | remove)
list_ticket_relations
List a ticket’s parent, sub-issues and dependency links
Drive disposable VMs — a browser, a Linux desktop, an Android device — from
inside a run. Registered post-boot, unconditionally: whether a machine can
actually boot is a probe question the tools answer per call. Repeated calls
in one conversation reuse one machine; screenshots come back as image
content with a one-image budget per result; extracted page/UI content is
fenced as untrusted data. All five declare the enclosureControlaction class (the use tools also
networkEgress and processSpawn), so read-only modes deny them outright.
The full verb vocabulary per surface is in the
rigs reference.
Tool
Description
computer_use
Drive a Linux desktop in an enclosed VM: move, click, drag, scroll, type, resize, clipboard, screenshot
browser_use
Drive a headless Chromium, Firefox or WebKit (engine): navigate, click, fill, extract (a11y/DOM/console), clipboard, screenshot
mobile_use
Drive an Android device over adb: tap, swipe, type, dump the view hierarchy, install, launch
rig_list
List a workspace’s rigs with surface, status, display size and controller
Calendar and meetings have no MCP tools. Agents cannot read your calendar, meetings, transcripts, action items, or decisions. The summary that produces action items and decisions runs as the built-in meeting_summary pipeline, not as a tool an agent can call.
Gating is enforced twice from one table (ModeToolPolicy): once in the MCP dispatcher for external CLI adapters and once in the built-in harness registry. A blocked call returns the reason.
Mode
Tool surface
chat
Every registered tool; no allow-list
plan
A curated allow-list. No worktree writes and no create / assign / delegate ticket verbs, but memory, artifacts, todos, submit_plan, exit_plan_mode and the ticket-completion verbs on the dispatched ticket are permitted
review
A curated allow-list: review participation, communication, read-only context fetchers and the full ticket verb set including create_ticket and assign_ticket
orchestrate
A curated allow-list: research and read tools plus propose_orchestration, create_playbook and run_playbook. Hiring, decomposition and ticket completion happen deterministically after approval, never mid-run
Being on an allow-list does not make a tool callable, and the reverse also holds: the operator-question capability is a harness tool (ask_user), so it never appears in this MCP catalogue at all.
A tool may declare requiresApproval. The dispatcher then builds an ApprovalPayload and surfaces it through the ConfirmationPort before the tool runs; cc_server wires that port, so the gate is live.
Independently, the unified action guardrails gate any tool that declares a non-empty ActionClass set. A prompt decision with no approver connected is denied. See Guardrails.
Not every capability in the product is reachable by an agent. These have no tool
at all, so a name you may have seen referenced elsewhere returns “unknown tool”:
Capability
Where it lives instead
Hiring, firing or editing an agent
The agents UI. There is no hire_agent / fire_agent / update_agent tool
Creating a workspace
workspace.upsert over RPC, which seeds and stamps ownership
Projects (create / list / update / file)
The tickets UI. Projects are an operator surface — see Projects
Asking the operator a blocking question
The harnessask_user tool, not MCP. It renders a form in the conversation and blocks on the answer