The desk gateway serves one MCP endpoint per seat, at /mcp/<seat>. It maps an OAuth token to one seat and serves only that seat's tool roster. Each roster holds the eight core tools that all seats share, plus that seat's own tools. Bots never join the tailnet and never hold an upstream credential. The gateway makes every upstream call for them.
The gateway applies four checks to each tool call:
- The arguments are validated against the roster's input schema, which rejects any field the schema does not declare.
- Arguments that have the shape of a credential are refused.
- Each call has a 20-second deadline.
- Each call is written to an audit trail as a redacted
tool.call event.
Gated write tools carry the gate tags g5 or g6. A g5 tool requires the rollback_plan and approval_id fields. A g6 tool requires the approval_id field. Both fail closed when their upstream is not configured. Read tools fail open and return not_configured with a reason.