Zero and the MCP server

Zero, the assistant inside ZeroReach, and the MCP server that gives Claude, Cursor and other AI tools the same abilities.

ZeroReach exposes the same set of tools in two places:

Zero (in the app)MCP server
Who uses itA signed-in person, in the ZeroReach appClaude, Cursor, ChatGPT or any MCP client
CredentialThe person's sessionAn API key (ro_pat_...) or an OAuth token (ro_oat_...)
ToolsA curated subset (What Zero can do)Every tool the credential's scopes allow (MCP tool reference)
WritesShown as a plan; run only after the person confirmsRun when the client calls them

How a tool call works

Each tool maps to one existing API route. The server checks the scope, then runs the route's own handler as an internal request. So role checks, validation, compliance gates (suppressions, consent, calling windows, caps) and the audit log apply exactly as for an HTTP request. The MCP layer never talks to the database directly.

  • A 2xx answer becomes the tool result's structuredContent. A non-object body is wrapped as {"result": ...}.
  • Any other status becomes a tool error with {status, detail}, so scope and compliance denials reach the agent as readable errors.
  • Results are capped at 2 MB.
  • Tools that return lists are paged: pass the previous result's next_cursor as cursor.

The MCP server

  • Endpoint: POST /api/v1/mcp. It uses Streamable HTTP, is stateless (no MCP sessions) and answers in JSON.
  • Auth: Authorization: Bearer ro_pat_... (an API key) or an OAuth access token from a connector. Anything else is a 401 whose WWW-Authenticate header points to the OAuth discovery metadata.
  • Rate limits: every tool call counts towards the key's (or the connection's) request limit, like an API request.
  • Audit: mutating tool calls are audited with via: mcp.
  • stdio: for clients that launch a local process instead of connecting to a URL, the core-mcp bridge forwards stdio JSON-RPC to the same endpoint (see Connect).

The server tells clients how to start:

Start with whoami (who and where, local time, which scopes you have) and get_daily_briefing (what happened and what needs the user).

What stays with people

Email is never sent directly by a tool:

  • draft_email puts a draft in the review queue.
  • Only a signed-in person approves and sends drafts.
  • MCP clients can list, edit and reject drafts.

Zero goes further. It never sends email, places calls, starts or resumes a campaign, approves drafts, sends contracts for signature, approves discounts, changes roles or touches billing. The server refuses those routes for Zero even if a tool tried to reach one. See What Zero can do.