Surfaces & authentication

AIGears has three front doors — the Dashboard, the HTTP API, and MCP — and this page explains how each one authenticates and why they all operate on the same data. It also anchors a convention you'll see throughout these docs: every operation is shown on all three surfaces, in tabs.

One product, three surfaces

A Surface is a way to read or write a Team's state. There are exactly three, and they converge on one service layer over one shared pile of Team state:

  • Dashboard — a logged-in human in the browser.
  • HTTP API — REST, for your code and non-MCP agent frameworks.
  • MCP — an MCP-capable agent, driven by an authenticated operator.

The important consequence: anything created on one surface is immediately visible on the others. An agent can register a schedule over MCP, your code can list it over the HTTP API, and you can cancel it from the Dashboard — because none of them has its own copy of the data. They are three doors into the same room.

Throughout the guides and examples, each operation is documented in a three-tab surfaces block. The tabs are sticky: pick the surface you're building on once, and it follows you from page to page.

Dashboard: you, logged in

The Dashboard authenticates you the ordinary way — a browser session from signing in. There is no token to manage. Its home is /a/<team_slug>/aigears/, and a team switcher lets you move between the Teams you belong to.

The Dashboard is the read-heavy, trust-and-inspection surface. It is where you watch what your agents did (the Activity feed / audit log), build things by hand, mint API Keys, and decide the things only a human should decide.

HTTP API: Bearer API key

The HTTP API authenticates with an API Key sent as a bearer token on every request:

Authorization: Bearer aigears_live_XXXXXXXXXXXXXXXXXXXXXXXX

The Team is derived from the key — you never pass a team id or slug to the API. Paths are versioned under /v1/, and errors come back in a consistent envelope:

{ "error": "some_error_code", "message": "Human-readable explanation." }

Because keys are credentials and not identities, several agents can share a Team's state simply by each carrying one of its keys.

MCP: OAuth operator + selected Team

MCP has no API key. The hosted MCP server authenticates the human operator over OAuth/OIDC, not the agent and not a static token. One operator may belong to several Teams, so an MCP session begins with no Team selected and must bootstrap before any product tool:

teams_list()              → the Teams you belong to
set_current_team("acme")  → the working Team for this session

Every subsequent tool call is scoped to that Team. Call a product tool before selecting one and it returns a no_team_selected error telling the agent to run teams_list then set_current_team first. (For the exact client configuration and OAuth flow, see the MCP server reference.)

How actions are attributed

Because all three surfaces write to the same state, the audit log records which surface produced each write in an actor_type field:

  • user — a human in the Dashboard.
  • api_key — the HTTP API.
  • mcp — an agent over the MCP server.

(Two more actors appear in the log but are not surfaces: approver, the human on the far end of an approval, and system, our own workers.)

The mcp-versus-user split is the one that matters day to day: it is what lets you tell "my agent did this" from "I did this" when you review the log.