The problem it solves
A complete SEO analysis means crossing several sources: Search Console for queries, Analytics 4 for behaviour, PageSpeed and CrUX for performance, Merchant Center for the product feed, Business Profile for local. Every source has its own interface, its own exports, its own details. Putting them together by hand means opening each tool one at a time and downloading dozens of CSV files to analyse.
MCP (Model Context Protocol) is an open standard that lets a language model call external tools. I wrote a server that exposes the Google APIs as tools, and now the analysis happens in conversation with your AI of choice: "which pages have many impressions and no clicks", "does this redirect actually exist", "how have the Core Web Vitals moved over the past few months". The question in plain language, real data in return.
What it does
Thirty-five tools across six domains, all read only:
- Search Console (11): flexible queries, keywords in positions 11 to 20, cannibalisation, period comparison, sitemap status, bulk indexing coverage
- Analytics 4 (8): reports, funnels, search queries crossed with conversions
- Technical SEO (9): on-page audit, Core Web Vitals over time, live HTTP status, redirect chains, dead pages, rich result validation with correct JSON-LD generation
- Content (2): content gaps from search data, per-page optimisation briefs
- Local SEO (2) and Merchant Center (3): local listing performance, product feed health
A single codebase serves several clients: only the configuration file changes.
The choices that matter
Read only by design. The server doesn't submit sitemaps, doesn't modify properties, doesn't touch feeds. The Google scopes are read-only where Google provides one, and where it doesn't, read-only comes from the user role granted. It is a project constraint, not a missing feature: a tool that reads a client's data must not be able to change it.
One environment per client. Each client runs in a separate environment that knows only its own credentials. This isn't a naming convention: it is a technical impossibility to query the wrong client's data by mistake. The same holds for the cache, which lives inside the environment.
Audit trail. Every call leaves a line in an append-only log per client: which tool, when, with which parameters, with what outcome. Sensitive keys are redacted recursively before writing.
Respect for robots.txt. Every tool that downloads the content of a page goes first through a single checkpoint, which reads the site's robots.txt and stops if that page is excluded: the same behaviour as a Google crawler. The exception is the reachability check on outbound links, which only verifies the HTTP response code without downloading or analysing anything.
Cache for latency, not for quota. The bottleneck isn't the number of calls available, it is time: a Core Web Vitals analysis runs Lighthouse and can take thirty or forty seconds. In consulting you ask the same question over and over. With the cache, forty-one thousand milliseconds become zero.
Output always capped. Every tool has a row limit and declares when it truncates. A response with thousands of rows breaks the display and degrades the reasoning of the model that has to read it.
205 tests. They cover the pure logic (validation, HTML and robots parsing, pagination, redirect chains, brand traffic exclusion, secret redaction in the log) with the native Node JS runner, without extra dependencies. They never contact the Google APIs.
What it doesn't do, and why I write it down
An analysis tool that doesn't state its own limits produces numbers you can't trust.
Expected CTR is blind to the SERP. The tool that flags snippets worth optimising compares the real CTR against an average curve by position. If an AI Overview appears above the result, CTR drops even with a flawless title, and the code has no way of noticing. Since June 2026 Search Console has a report dedicated to impressions in generative features, but it is on partial rollout, reports impressions only and doesn't come through the APIs. Even when it does, it will answer a different question: it will say whether the page was cited inside an AI Overview, not whether an AI Overview took up the space above the link. It is the most frequent false positive: before rewriting a title, look at the SERP by hand.
Average position is not a position. An average of 9 can describe a page sitting third on half the impressions and fifteenth on the other half. It isn't a point where the page actually sits, and it is the reason an average should always be read together with the distribution behind it.
Search Console and Analytics 4 don't define the day the same way. The first reports on Pacific time, the second on the timezone set in the property: for an Italian site that is nine hours apart, and neither API lets you realign them. The gap shows up mostly at the edges of the period. It isn't even the main reason search clicks and organic sessions never match: cookie consent weighs more, and so does the fact that a click and a session are two different things. Those numbers are there to understand the relationship between pages, not to balance a ledger.
Real performance data exists only if there is traffic. Field Core Web Vitals come from CrUX, which publishes a figure only when the sample is large enough. Below that threshold only lab data remains: useful for debugging, not for saying how the site is actually doing.
Status and availability
The suite is running with one real client, where it is completing its field testing. Development continues based on what comes out of daily use: the limits listed above come from practice, not from a theoretical analysis done before writing the code.
The code isn't public and the suite isn't distributed. It is the tool I run analyses with on the projects I look after: what the client receives is the work, not the software. Whoever trusts me with the SEO of a site gets diagnoses that cross different sources in timeframes that wouldn't be sustainable by hand.
On e-commerce catalogues the analysis turns into action: I write about that on the page dedicated to SEO Product with AI.