Docs menu

Guides

MCP Server

Point an LLM client — Claude Code, Claude Desktop, Cursor — at your xcelera performance data and ask questions in plain language:

  • "Which of my pages is slowest, and what should I fix first?"
  • "When did LCP regress on the homepage, and what deploy caused it?"
  • "Did PR #123 make anything worse?"
  • "How stable were my audits over the last 7 days — is this noise or real?"

The server speaks the Model Context Protocol over HTTP at POST /mcp, authenticated with an xcelera API token. Most tools are read-only queries; start_audit, create_page and archive_page are the writes, and need a full-access token.

It exposes the same data as the API — same selectors, same metric shape, same error codes.

Connecting a client

Create an API token (Settings → API Tokens), then add the server. For Claude Code:

claude mcp add --transport http xcelera https://xcelera.dev/mcp \
  --header "Authorization: Bearer $XCELERA_TOKEN"

Other clients (Claude Desktop, Cursor) take the same URL, transport, and Authorization header in their MCP config.

A read-only token is the safe default to hand to an LLM — it can inspect your data but can't trigger audits or change which pages you track. Only generate a full-access token if you want the agent to run start_audit (the change → audit → verify loop). Tick "Read-only" when generating the token unless you need writes.

Tools

ToolAnswers
list_pagesHow's everything looking — worst page, which pages fail CWV
get_page_historyWhen did a metric regress, what deploy caused it, is it noise
get_auditWhy is this page slow, what to fix first (insights + report)
compare_auditsDid this PR / commit make anything worse (metric + insight diff)
start_auditTrigger a fresh audit for a page, then poll get_audit (write)
create_pageRegister a url to audit and get back its ref (write)
archive_pageStop tracking a page (write)

Audits resolve by id, latest, git commit hash, or PR number — so you can ask about a specific deploy without knowing internal ids. Each metric comes back as {raw, display, rating}: raw is the machine value in canonical units (milliseconds for LCP/FCP/SI/TBT, unitless for CLS, 0–100 for category scores), display is the same value formatted for humans. compare_audits reports its deltas in the same canonical units, always between two audits of the same page — so the same url, device and region on both sides.

create_page is an upsert: the same url and device is one page, and registering it again returns the existing page with created: false. archive_page is not reversible from an LLM client — registering the url again creates a new page with no history.

Rate limits

MCP requests are limited per token. If a client hits the limit it receives a 429 with a Retry-After header; well-behaved clients back off automatically.

The server never returns raw Lighthouse reports (they're megabytes and would blow the client's context window). get_audit instead hands back a presigned link to the full HTML report when you want the detail. The link is valid for one hour.

Prefer scripts and CI to a chat client? The same operations are available over HTTP and from the command line — see API & CLI and the API Reference.

Help