Skip to main content
Mirrors hosts an MCP server, so there’s nothing to install or run yourself. Point any MCP client at the hosted endpoint; on first use the client opens your browser to sign in and approve access (standard MCP OAuth — no API keys to paste).
https://api.runmirrors.com/mcp
Use the URL without a trailing slash (…/mcp). It must match the OAuth resource the server advertises, and some clients (Cursor) strip a trailing slash before comparing — a /mcp/ config fails its token exchange. Both forms are served on the wire, but configure the slashless one.
The server exposes the full Mirrors surface — the same operations as the CLI and the web app, so an AI client never has to touch the UI: list_mirrors / get_schema / get_drift, build_mirror / ingest_mirror, query_mirror / chat_mirror, container_start, add_context / distill_summary, generate_proposal / accept_proposal, generate_eval_set / run_eval_set, and more.

Connect a client

Run in your terminal:
claude mcp add --transport http mirrors https://api.runmirrors.com/mcp
Then run /mcpmirrorsAuthenticate via browser.

Other clients

The server is a standard MCP OAuth remote, so any client that speaks streamable HTTP works (Zed, Warp, Goose, Amp, opencode, Cline, LM Studio, Raycast, Windsurf, …):
{
  "mcpServers": {
    "mirrors": {
      "url": "https://api.runmirrors.com/mcp"
    }
  }
}
For stdio-only clients (e.g. JetBrains AI Assistant), bridge via mcp-remote:
{
  "mcpServers": {
    "mirrors": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.runmirrors.com/mcp"]
    }
  }
}

Headless / CI setups

To skip the browser flow, mint a workspace key in the web app (Settings → API keys) and send it as a header. Every request is scoped to the authenticated workspace:
{
  "mcpServers": {
    "mirrors": {
      "url": "https://api.runmirrors.com/mcp",
      "headers": { "Authorization": "Bearer mk_live_YOUR_KEY" }
    }
  }
}
Most clients disable the OAuth sign-in fallback the moment headers.Authorization is set — a placeholder value means the connection fails until you replace it with a real key.