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
| Tool | Answers |
|---|---|
list_pages | How's everything looking — worst page, which pages fail CWV |
get_page_history | When did a metric regress, what deploy caused it, is it noise |
get_audit | Why is this page slow, what to fix first (insights + report) |
compare_audits | Did this PR / commit make anything worse (metric + insight diff) |
start_audit | Trigger a fresh audit for a page, then poll get_audit (write) |
create_page | Register a url to audit and get back its ref (write) |
archive_page | Stop 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.