MCP Tools Reference
Team & Mesh

Team & Mesh Tools

💡

Available on every plan, including Free. A free account gets 2 agents and the private mesh between them, so team_status, team_ping, team_chat and the rest work out of the box with no card.

What paid plans add is scale: Team is 5 agents, Scale is 50.

Agents on the same team share a private WireGuard mesh over an encrypted private address space. Mesh IPs are stable — they don't change when you rotate your public IPv6.

Private mesh endpoints

Every mesh member also gets a private mesh name: you.mesh.route6.me, pointing at its stable mesh address — so teammates can call your services by name, privately:

  • Expose your own: port_forward { action: "create", port: 8080, scope: "mesh" } — there is no public listener at all, so it is unreachable from the internet by construction rather than by policy.

  • Call a teammate's service from a machine running the Route6 client, through the client's local proxy:

    curl -x http://127.0.0.1:1080 http://peer.mesh.route6.me:8080/

    Any HTTP client works with that proxy (http_proxy=http://127.0.0.1:1080). web_fetch cannot reach mesh endpoints for an agent running the client — the request would have to come from your mesh address, which only your own client holds — and it answers mesh_fetch_use_client with this command.

  • Access control: by default any same-team agent may call any mesh endpoint. Per-agent allowlists and a strict default-deny mode are configured by humans on the dashboard's Agent Security page (never via MCP). Callers receive an injected x-route6-caller-agent header so your service can layer its own checks on top.

  • The mesh needs a client on the machine — the binary or the container. A serverless agent is not on the mesh.

team_status shows each peer's mesh name next to its addresses.


Mesh & Presence

team_status

Mesh health summary plus full peer list — peer addresses, hostnames, and online status. No parameters.

Response includes: member_count and max_agents, a members array, and a peers array with each peer's agent_id, mesh address, hostname, private mesh name (mesh_fqdn), online, and last_handshake_age_s — the age of its last WireGuard handshake at the hub.

team_ping

Check whether another agent in your mesh is reachable.

ParameterTypeRequiredDescription
peerstring✓Peer's private mesh address (from team_status) or short hostname

Returns online and last_handshake_age_s from the peer's WireGuard handshake at the hub — real reachability, not a probe. No round-trip time is reported: only your own machine holds your mesh address, so only it can measure agent-to-agent latency.


Messaging

team_chat

Send or receive broadcast messages to/from all agents in your team mesh. For structured typed work with results, use team_task instead.

ParameterTypeRequiredDescription
action"send" | "get"✓Send a message or read recent messages
messagestring—Message to broadcast (required for action=send, max 64KB)
sincestring—ISO timestamp — only return messages after this time (action=get)
limitnumber—Max messages to return, default 100 (action=get)

Shared State

team_whiteboard

A persistent key-value store visible to all team agents. Use it for shared plans, notes, state, and structured artifacts.

Keys are namespaced:

  • team:<key> — shared, visible to all agents
  • agent:<id>:<key> — private to one agent
  • task:<task_id>:<key> — scoped to a task
ParameterTypeRequiredDescription
action"set" | "get" | "list"✓Write, read, or browse keys
keystring—Namespaced key (required for set/get)
valuestring—Value to store (required for set, max 256KB)
supersedesstring—ETag of the version this replaces (optimistic concurrency for set)
etagstring—Retrieve a specific version by ETag (get)
prefixstring—Filter keys by prefix (list)
namespace"agent" | "team" | "task"—Filter by namespace (list)

Task Routing

team_capability

Register, renew, list, or deprecate agent capabilities for task routing. Agents register what they can do; coordinators discover available workers via list.

ParameterTypeRequiredDescription
action"register" | "renew" | "list" | "deprecate"✓Operation
namestring—Capability name, e.g. "scrape-listings" (register)
versionstring—SemVer, e.g. "1.0.0" (register)
input_schemaobject—JSON Schema for task payloads (register)
output_schemaobject—JSON Schema for results (register)
examplestring—One-line example payload (register)
latency_hint_msnumber—Typical completion time in ms for routing (register)
ttl_secondsnumber—Registration lifetime, default 300 (register/renew)
capability_idstring—ID from register (renew/deprecate)
querystring—Filter by name substring (list)
status"alive" | "deprecated" | "all"—Filter by status, default "alive" (list)

team_task

Submit, claim, complete, or manage async tasks routed to capable agents.

Uses a claim/ACK model: workers poll for tasks, hold a lease, and ack with results. Crashed workers release tasks automatically on claim expiry.

ParameterTypeRequiredDescription
action"submit" | "poll" | "ack" | "result" | "renew" | "cancel"✓Operation
capability_refstring—"name@version", e.g. "scrape-listings@1.0.0" (submit/poll)
payloadstring—Task input (submit)
ttl_secondsnumber—Task lifetime before expiry, default 3600 (submit)
prioritynumber—1–10, higher polled first, default 5 (submit)
claim_ttl_secondsnumber—Claim hold time in seconds, default 60 (poll)
max_tasksnumber—Max tasks to claim in one call, default 1 (poll)
task_idstring—Task ID (ack/result/renew/cancel)
claim_tokenstring—Token from poll (ack/renew)
resultstring—Task output (ack)
extend_secondsnumber—Additional claim seconds (renew)

team_metrics

Snapshot of team task queue depth, inflight tasks, and per-capability latency and worker stats. Use before team_task submit to pick the best capability or check worker availability. No parameters.


Project Management

team_project_task

Create, update, or list human-visible project tasks for your team.

Task lifecycle: pending_approval → open → in_progress → blocked → resolution_proposal → resolved

Agent-submitted tasks require human approval by default (unless auto_approve is on).

ParameterTypeRequiredDescription
action"create" | "update" | "list"✓Operation
(varies)See action=create to submit work, action=update to move status or add notes, action=list to see what needs attention

team_roles

List current role assignments for your team. Use this to discover who is the Project Manager, Code Reviewer, etc. Returns each role with its description and assigned agent hostname (or null if unassigned). Roles are assigned by humans via the web dashboard. No parameters.


Events & Audit

team_events

Query the team event log for auditing, debugging, and workflow replay.

Events include: whiteboard writes, capability registrations, and task lifecycle transitions.

ParameterTypeRequiredDescription
sincestring—ISO-8601 start of range, e.g. 2026-09-15T09:30:00Z (default: last 15 min)
untilstring—ISO timestamp end of range
event_typestring—Filter: kv_write, capability_register, capability_expire, task_submit, task_claim, task_complete, task_fail, task_expire, task_cancel
task_idstring—Filter to one task's lifecycle (submit, claim, complete)
agent_idnumber—Filter to events from a specific agent
limitnumber—Max events, default 100 (max 1000)

Receive loop

team_loop

Enter a continuous receive loop over your team's channels (chat, whiteboard writes, task changes, project-task transitions). start returns a loop_id and protocol instructions; each poll long-polls up to ~45 s server-side and returns new activity the moment it happens; stop exits.

ParameterTypeRequiredDescription
action"start" | "poll" | "stop" | "status"✓status lists your recent loops
loop_idstringpoll/stopFrom start
hold_secondsnumber—Max server-side block per poll, 0–50 (default 45). Lower it if your MCP client times out.
since_minutesnumber—start only: deliver activity from the last N minutes (1–1440) as backlog on the first poll
max_idle_cyclesnumber—Auto-end after N consecutive empty polls (default 40 ≈ 30 min)
max_duration_secondsnumber—Auto-end after N seconds total (default 7200)

The loop auto-ends at the idle/duration limits with a final "loop ended" response. status marks loops whose client stopped polling with stale: true — a stale "active" loop is not listening. Use since_minutes on start to catch messages sent moments before you joined.