Your AI writes your commit messages by now, reads your logs and explains unfamiliar code to you. Your field data was not part of that. For those numbers you still went to the dashboard, picked a range, filtered a country and typed the result out by hand. Since 2 September you can just ask instead.
fastmon has an MCP server. You connect your own AI client to it, Claude, Claude Code or Cursor, and it fetches the data itself. The model stays yours. What that means for your data is spelled out further down, in full.
What MCP is
MCP stands for Model Context Protocol, an open standard that lets an AI client hook into external services. Instead of copying numbers out of a dashboard into a chat, the client looks them up itself. Claude calls these connections connectors, Cursor calls them MCP servers, other clients call them something else again. The protocol underneath is the same everywhere.
For you it means this: enter one address, log in once through OAuth, then ask questions the way you would ask a colleague with dashboard access.
What you can ask
Nineteen tools are available, all of them read-only. What they return are the same aggregates and rankings that sit behind your dashboard. Three situations where we use it ourselves.
The regression after a deploy
A release went out on Friday afternoon, and on Monday something is slower. Instead of lining up two ranges in the dashboard, you have them compared.
- Compare LCP and INP for the last seven days with the seven days before
- What changed since the release on Friday?
compare_periods and detect_changes do the work. The second one hunts for the anomalies itself, rather than waiting for you to guess the right dimension.
The question from the meeting
Someone wants to know why the site looks worse on mobile, and is not expecting a lecture on percentiles but an answer.
- What is LCP p75 in Germany on mobile, broken down by page type?
- Which third parties cost the most load time?
get_breakdown gives you the breakdown, get_cwv_distribution the distribution behind it, get_third_party_impact the foreign scripts. It stops at fifty rows, which is plenty for a conversation and was never meant for an export.
The error only Safari sees
A JS error shows up, but it may only affect one browser version, and you want to know whether the work is worth it.
- Which JS errors are new this week?
- Show me details on this error, which browsers and which pages
get_errors and get_error_detail. What comes back are error signatures and counts, not the sessions of individual visitors.
What comes out of it
The most useful answer we got while testing was not a number. The question was how LCP had developed, and the reply was that it was too early to say.

Two daily buckets are noise, not a trend. So the client changed the question.
Two days of data, 574 ms and 708 ms, is not a trend, and the client said so instead of drawing a line through two points. What it offered instead was the breakdown that actually helps: of the 628 ms until the largest paint, 494 ms are gone before the browser has a single byte. The browser spends about 134 ms turning the response into a picture. On a local machine with no network latency, that is the server doing all the work.
For the sake of honesty: this is a local development environment, domain localhost, running Shopware, with almost no traffic. It is not a glamour shot. It does show the difference between a number and an answer, which is why it is here instead of something prettier.
What the server cannot do
All nineteen tools are read-only. Not one of them changes a setting, deletes anything or starts a synthetic run. If your client gets the idea to try, it finds nothing to try with.
There is no raw data either. What comes back are aggregates and rankings, never individual beacon rows. Plus a few hard limits:
| Limit | Value |
|---|---|
| Range per query | 90 days maximum |
| Rows per breakdown | 50 maximum |
| Requests per person | 120 per minute |
| Minute-level buckets | only up to a 6 hour range |
| Runtime per query | cut off after 30 seconds |
The rate limit applies per person, not per organisation, so one talkative client cannot block your colleagues. Hit it and you get a 429 with the wait time in seconds.
Three of the nineteen tools cover Lighthouse runs and additionally need Synthetic Monitoring on your plan plus the synthetic:read scope. If either is missing, the server says so instead of returning an empty list.
AI and privacy
This is where it gets interesting, because the moment you connect your client, data goes somewhere that is not us.
What leaves are the same field data your dashboard shows: page URLs, referrers, UTM parameters, country, device and browser, timestamps, error signatures. The recipient is the AI provider running your client. Not fastmon. We do not pick that provider and we are not a party to the relationship, which in plain words means responsibility for this transfer sits with your organisation. We write it out this bluntly because it is the point where MCP differs from every other feature we have built.
What was possible on our side, we did:
- Off by default. An owner has to switch MCP on in the organisation settings. That writes an audit log entry, so nobody has to guess later when the access was opened.
- OAuth instead of keys. There is no key to copy. The endpoint rejects personal keys, organisation keys and session cookies, because a key carries no audience and therefore cannot say whether it was issued for this endpoint.
- The connection is yours, not the organisation’s. Its rights come from your current role on every request. Get downgraded and it takes effect immediately. Leave the team and the connection is worthless.
- Disconnecting takes one click. You cut it under Account and Access, and the access tokens expire within minutes.
- No configuration access. Tokens, members, billing: there is no tool for any of it.
Do not confuse any of this with the Ask assistant in the dashboard. That one runs under our own DPA, so it is a different recipient with a different consent. If you do not want data going to a third provider at all, use Ask and leave MCP off.
How to connect your client
An owner switches MCP on under Settings and MCP server, and the rest takes two minutes. Every client uses the same address, exactly like this, with no trailing slash:
https://api.fastmon.eu/mcp
Claude Code
One line in the terminal:
claude mcp add --transport http fastmon https://api.fastmon.eu/mcp
Then open /mcp, pick fastmon and log in.
Claude and Cursor
In Claude under Settings and Connectors, in Cursor under MCP, enter the address in either case. Leave the OAuth fields empty. Both send you to fastmon, where you get to see who is actually asking:

The note that we have not checked the app is deliberate. Anyone can register an app under any name.
This screen is also where you pick the organisation. No tool takes an organisation as a parameter later on, the context is fixed by your consent.
On the first tool call your client asks again, this time on its own side:

Two consents on two levels: fastmon asks about the access, your client asks about every tool call.
For agencies
Partners connect individually to each customer organisation, and the customer is named on the consent screen. Rights resolve per request. When the partnership ends, the access ends in the same moment. Whether MCP is open at all stays the customer’s decision.
The full list
All nineteen tools with their parameters, the OAuth details for building your own client including the resource parameter per RFC 8707 and the well-known document per RFC 9728, plus setup for further clients: it is all in the MCP docs.
And if you try it and your client cannot find something it should be able to find, tell us. Nineteen tools are a start, not a finished list.