Skip to main content
Glama
google-search-console-mcp

google-search-console-mcp

by russjeffery

Google Search Console MCP

Ein MCP-Server für die Google Search Console API – Suchleistungsdaten, URL-Indexstatus, Sitemap-Verwaltung und Eigentümerliste.

Läuft auf drei Arten aus einer Codebasis: stdio (lokal, via npx), Streamable HTTP (selbst gehostet) und Cloudflare Workers (gehostet unter einer URL). Implementiert MCP 2026-07-28 mit automatischem Fallback auf 2025-11-25, 2025-06-18 und 2025-03-26, sodass es mit Clients auf beiden Seiten des Protokollwechsels funktioniert.

Null Laufzeitabhängigkeiten.


Schnellstart

npx google-search-console-mcp auth

Das führt dich durch die Erstellung eines Google-OAuth-Clients, führt den Zustimmungsfluss aus, prüft die Anmeldedaten gegen die Live-API und gibt einen fertig einzufügenden Konfigurationsblock für deinen MCP-Client aus. Drei Minuten, größtenteils Wartezeit auf der Google-Cloud-Oberfläche.

Dann fügst du das gedruckte JSON in deine Client-Konfiguration ein und startest ihn neu.


Related MCP server: searchconsole-mcp

Tools

Jede Methode in der Search Console API v1, plus zwei zusammengesetzte.

Tool

Funktion

API-Methode

list_sites

Alle Eigentümer, auf die du Zugriff hast, mit Berechtigungsstufen

sites.list

get_site

Eine Eigentümer und deine Berechtigung darauf

sites.get

query_search_analytics

Klicks, Impressionen, CTR, Position – gruppiert, gefiltert, paged

searchanalytics.query

compare_search_analytics

Zwei Zeiträume mit zeilenweisen und Gesamtdifferenzen

zusammengesetzt

list_sitemaps

Eingereichte Sitemaps oder die Kindobjekte eines Sitemap-Index

sitemap.list

get_sitemap

Der Status einer Sitemap und die eingereichten/indizierten Zähler

sitemaps.get

submit_sitemap

Sitemap einreichen oder erneut einreichen

sitemaps.submit

delete_sitemap

Sitemap abbestellen

sitemaps.delete

inspect_url

Vollständiger Indexstatus für eine URL

urlInspection.index.inspect

inspect_urls

Bis zu 25 URLs gleichzeitig, mit einer Coverage-Status-Zusammenfassung

zusammengesetzt

Seitenverifizierung und sites.add/sites.delete sind bewusst nicht verfügbar – das Hinzufügen und Verifizieren von Eigentümern ist ein Browserflow, der nicht Inhalt eines Agenten-Tools sein sollte.

Der Server bietet außerdem Prompts (performance_review, indexing_audit, query_opportunities, sitemap_health) und Ressourcen (gsc://guide/search-analytics, gsc://guide/url-inspection, gsc://guide/sitemaps), die Agenten bei Bedarf lesen können.


Authentifizierung

Schritt 1 – einen Google-OAuth-Client erstellen

Das Juchst du nur einmal. Der Server kann das nicht für dich tun: Google verlangt einen Menschen in seiner Kommandobestätigung.

  1. Öffne die Google Cloud Console und wähle ein Projekt aus oder erstelle eines.

  2. Aktiviere die Search Console API für dieses Projekt.

  3. Konfiguriere den OAuth-Zustimmungsbildschirm. External ist für persönlichen Gebrauch in Ordnung. Füge dein eigenes Google-Konto unter Testnutzer hinzu.

  4. Gehe zu Anmeldedaten → Anmeldedaten erstellen → OAuth-Client-ID. Wähle den Anwendungstyp Desktop-App.

  5. Kopiere die Client-ID und den Clientgeheimnis.

Testen vs. Veröffentlicht. Solange sich der Zustimmungsbildschirm im Test befindet, läuft Googles Ablaufdatum der Aktualisierungstokens nach 7 Tagen ab und du wirst auth wöchentlich erneut ausführen müssen. Wenn du die App veröffentlichst (Zustimmungsbildschirm → App veröffentlichen), werden sie dauerhaft. Für ein Einzelbenutzer-Internal-Tool ist das Veröffentlichen sicher und erfordert keine Verifizierungsprüfung durch Google, solange du innerhalb der Bereiche webmasters Geschütze von der Suchkonsole bleibst.

Schritt 2 – Einrichtungsablauf ausführen

npx google-search-console-mcp auth

Dies öffnet eine kleine Seteingsseite, die von 127.0.0.1 aus geliefert wird. Füge Client-ID und Clientgeheimnis ein, wähle vollständigen oder schreibgeschützten Zugriff, und es führt den Zustimmungsablauf aus, tauscht den Code (mit PKCE) gegen ein Refresh-Token ein und ruft list_sites auf, um zu verfizieren, dass die Anmeldedaten funktionieren – und zeigt dir die genauen Eigenschaften, die sie erreichen.

Die Abschlussseite gibt dir den Anmeldedaten-Blob und eine fertig einzufügende Konfiguration für Claude Desktop, Claude Code und Remote-Bereitstellend mit jeweils einer Kopieren-Schaltfläche. Dieselben Werte werden zur Sicherung auf der Terminal ausgegeben.

Auf einem Headless-Rechner oder über SSH verwende stattdessen auth --terminal für die promptgesteuerte Variante.

Das Ergebnis ist ein Anmeldeblob – base64url-codiertes JSON, das deine Client-ID, dein Clientgeheimnis und dein Refresh-Token enthält:

eyJ2IjoxLCJjcmVkZW50aWFscyI6eyJ0eXBlIjoib2F1dGhfcmVmcmVzaF90b2tlbiIsImNsaWVu…

Behandle den Blob als Passwort. Jeder, der ihn hat, hat bis zu deinen Wideruf unter myaccount.google.com/permissions Zugriff auf die Search Console. (Übersetzungsanmerkung: "Jeder" hier maskulin.)

Er ist ein einziger opaquekartiger String, sodass ein Wert alles enthält, was der Server braucht – er passt direkt in eine Umgebungsvariable oder einen Authorization-Header, ohne dass eine Anmeldedaten-Datei auf der Festplatte erforderlich Durch OAuth-Ablauf

Servicekonto. Nützlich für CI und für teamverwaltete Eigenschaften. Erstellt ein Servicekonto in Google Cloud und fügt dann client_email als Benutzer für die Eigenschaft in der Search Console hinzu (Einstellungen → Benutzer und Berechtigungen). Codiere die heruntergeladene Schlüsseldatei direkt:

base64 -i service-account.json | tr -d '\n'

Der Server akzeptiert einen rohen Servicekonto-Schlüssel als Blob – keine Hülle erforderlich.

Bestehendes Zugriffstoken. Setze {"type":"access_token","access_token":"ya29..."}. Kein Refresh möglich, daher nur für kurzlive Skripte.

Scopes

Scope

Gewährt

https://www.googleapis.com/auth/webmasters.readonly

Alles außer Sitemap einreichen/löschen

https://www.googleapis.com/auth/webmasters

Voller Zugriff (Standard)

Read-only während auth fordert den engeren Scope an. --read-only am Server ist zusätzlich, eine defensivere Blockerie, die Mutationstools ablehnt, bevor sie die API erreichen.


Ausführung

Lokal (stdio)

Die von auth gedruckte Konfiguration:

{
  "mcpServers": {
    "google-search-console": {
      "command": "npx",
      "args": ["-y", "google-search-console-mcp"],
      "env": { "GSC_CREDENTIALS": "<your blob>" }
    }
  }
}

Konfigurationsdatei-Speicherorte:

Client

Pfad

Claude Desktop (macOS)

~/Library/Application Support/Claude/claude_desktop_config.json

Claude Desktop (Windows)Br />

%APPDATA%\Claude\claude_desktop_config.json

Claude Code

claude mcp add google-search-console --env GSC_CREDENTIALS=<blob> -- npx -y google-search-console-mcp

Cursor

~/.cursor/mcp.json

VS Code

.vscode/mcp.json

Installiere es ordentlich, wenn du nicht jedes Mal durch npx gehen willst:

npm install -g google-search-console-mcp

Selbst gehostetes HTTP

GSC_CREDENTIALS=<blob> npx google-search-console-mcp http --port 8787

Bietet POST http://127.0.0.1:8787/mcp. Bindet standardmäßig an die Loopback-Schnittstelle – übergib --host 0.0.0.0 bewusst, wenn du es tatsächlich Öallenge-Leuchтать, um TLS zu schützen, falls du das tust.

Browserbasierte Clients werden abgewiesen, es sei denn, du nennst sie namentlich, weil ein Server, der eigene Anmeldedaten hält, sonst von jeder Seite steuertbar wäre, die du besuchst. Normale MCP-Clients senden keinen Ursprungsheader und sind nicht betroffen; eine browserbasiertes Client benötigt eine nicht zugelassene Liste von Ursprüngen:

npx google-search-console-mcp http --allowed-origins http://localhost:6274   # MCP Inspector

Ein abgelehnte Ursprung erhält einen 403–den der Browser nicht lesen kann (keine CORS-Header bei einer Verweigerung, standardmäßig), sodass er als generischer CORS-Fehler erscheint – prüfe die Startzeit Origins: des Servers, wenn ein Browserclient keine Verbindung herstellen kann. --allowed-origins '*' deaktiviert die Prüfung.

Cloudflare Workers

git clone https://github.com/russjeffery/google-search-console-mcp.git
cd google-search-console-mcp
npm install
npx wrangler deploy

Dein Endpunkt ist https://google-search-console-mcp.<subdomain>.workers.dev/mcp.

Standardmäßig speichert der Worker keine Geheimnisse. Jeder Client sendet seinen eigenen Anmelde-Blob als Bearer-Token, sodass eine gemeinsame Bereitstellung nie Googles Daten von jemandem, egal wer, d.h. alle geheim bleibt, und verschiedene Benutzer derselben URL sehen nur ihre eigenen Eigenschaften.

Für eine private Single-Tenant-Bereitstellung direkt:

npx wrangler secret put GSC_CREDENTIALS     # your blob
npx wrangler secret put MCP_SHARED_SECRET   # token clients must present

Clients senden dann das gemeinsame Geheimnis, nicht den Blob.

Optionale vars in wrangler.jsonc:

Variable

Wirkung

MCP_ENDPOINT

Pfad, auf dem geserved werden soll. Standard /mcp script

GSC_READ_ONLY

"1" deaktiviert Sitemap-Senden/Löschen

ALLOWED_ORIGINS

Komma-getrennte Browser-Ursprünge. * erlaubt alle . Nicht gesetzt = nur Nicht-Browser-Clients

MCP_STRICT_HEADERS

"0" entspannt Bestätigung der 2026-07-28`-Header-Spiegelung

Durch Verbindung eines Clients zum Remote-Server

{
  "mcpServers": {
    "google-search-console": {
      "type": "http",
      "url": "https://your-worker.workers.dev/mcp",
      "headers": { "Authorization": "Bearer <your blob>" }
    }
  }
}

In der Claude-Web- oder Desktop-Oberfläche unter Einstellungen → Konnektoren → Benutzerdefinierten Konnektor hinzufügen.

Drucke das für deine Bereitstellung aus:

npx google-search-console-mcp config --url https://your-worker.workers.dev/mcp

CLI

google-search-console-mcp [command] [options]

  stdio     Run as a stdio MCP server (default)
  http      Run a local Streamable HTTP MCP server
  auth      Guided setup in your browser: OAuth flow, blob, client config
  config    Print client config for existing credentials
  doctor    Verify credentials by calling the API

doctor ist das erste Werkzeug, wenn etwas nicht funktioniert – es trennt „Anmeldedaten sind falsch" von „Client kann den Server nicht starten".

Optionen: --credentials <blob>, --site <siteUrl>, --read-only, --port, --host, --endpoint, --secret, --allowed-origins, --url, --terminal, --no-browser.

--allowed-origins akzeptiert eine durch Komma getrennte Liste; nicht gesetzt bedeutet nur Nicht-Browser-Clients. Einträge werden ohne Beachtung der Groß-/Kleinschreibung abgeglichen, und ein nachgestellter Schrägstrich wird ignoriert.

--site setzt eine Standard-Eigenschaft, sodass Tools siteUrl weglassen können – ist praktisch, wenn eine Bereitstellung nur eine einzige Site abdeckt.


Protokollunterstützung

Die Revision 2026-07-28 hat Streamable HTTP grundlegend geändert: kein initialize-Handshake, keine Sitzungen, kein Mcp-Session-Id, kein GET-Stream, und Zweersts-Metadaten in params._meta, die in HTTP-Header gespiegelt wird. Das offizielle TypeScript-SDK implementiert das ­noch nicht, daher ist die Protokollebene hier handgeschrieben und dual, auch in beiden Ärchs.

Client spricht

Serververhalten

2026-07-28

Zustandslos. Validiert _meta. Antwortet auf server/discover. Ergebnisse tragen resultType und serverInfo.

2025-11-25 und früher

Standard initialize-Handshake. Es wird keine Sitzungs-ID ausgegeben – der Server ist übergreifend zustandslos.

Die Ära wird pro Anfrage erkannt:Eine Anfrage mit modernem _meta wird als modern behandelt, ein initialize wählt Legacy aus. GET und DELETE auf dem Endpunkt geben 405 zurück, wie es die Revision vorschreibt.

Header- Validierung ist standardmäßig strikt, gemäß Spezifikation. Wenn ein Client modernes _meta ohne die Header zu senden, setzt du MCP_STRICT_HEADERS=0 (oder --loose-headers) ein, statt herabzstufen.

{"type": "text"}

Zur Autorisierung: Der OAuth-2.1-Ablauf der Spezifikation geht davon aus, dass der Server ein Ressourcenserver mit eigenem Autorisierungsserver ist. Dieser Server verwendet stattdessen das Bearer-Token, um Ihre Google-Anmeldedaten direkt zu übertragen – die Spezifikation erlaubt benutzerdefinierte Strategien, und das bedeutet, dass eine gehostete Bereitstellung keine Geheimnisse speichert und keine Benutzerdatenbank benötigt. Der Nachteil ist, dass Clients, die eine automatische OAuth-Erkennung erwarten, den Header manuell konfigurieren müssen, wie oben gezeigt.


Arbeiten mit den Daten

Vier Eigenschaften von Search-Console-Daten führen zu den meisten falschen Schlussfolgerungen. Die Tool-Beschreibungen und die gebündelte Fähigkeit behandeln diese ausführlich; kurz:

  1. Daten hinken ~3 Tage hinterher. Verwenden Sie lastDays und die Tools wählen ein sicheres Fenster. Ein Bereich, der heute endet, zeigt einen falschen Rückgang.

  2. Abfragedaten sind datenschutzgefiltert. Die Gruppierung nach query verwirft seltene Abfragen stillschweigend, sodass Klicks auf Abfrageebene nie die Gesamtsumme der Property ergeben. Diese Lücke ist kein verlorener Traffic.

  3. Position ist invertiert. Position 3 schlägt Position 8; eine negative Änderung ist eine Verbesserung. compare_search_analytics gibt ein explizites improved-Flag zurück.

  4. Durchschnittswerte heben sich auf. Flache Schlagzeilenzahlen verbergen regelmäßig große gegenläufige Bewegungen. Gruppieren Sie nach Seite oder Abfrage, bevor Sie schlussfolgern, dass sich nichts geändert hat.

Kontingente

  • Suchanalysen: ~1.200 Abfragen/Minute pro Property.

  • URL-Inspektion: ~2.000/Tag pro Property – die bindende Einschränkung. Bewusst stichprobenartig vorgehen.

Nicht über die API verfügbar

Der aggregierte Index-Coverage-Bericht, Live-URL-Tests, das Anfordern der Indexierung, Core Web Vitals, manuelle Maßnahmen, Sicherheitsprobleme, Linkberichte und Entfernungen haben kein API-Äquivalent und sind daher nicht enthalten. Die URL-spezifische inspect_url ist der nächste Ersatz für Coverage-Fragen.


Agent-Fähigkeit

skills/google-search-console/ ist eine sofort installierbare Fähigkeit, die einem Agenten beibringt, diese Tools gut zu nutzen – die oben genannten Fallstricke, eine Diagnoseleiter für Traffic-Änderungen, Heuristiken zum Finden von Chancen und eine Nachschlagetabelle für den Coverage-Status.

cp -r skills/google-search-console ~/.claude/skills/

Das gleiche Referenzmaterial ist zur Laufzeit über die gsc://guide/*-Ressourcen des Servers verfügbar, sodass Agenten ohne installierte Fähigkeit es weiterhin lesen können.


Entwicklung

npm install
npm run build       # compile to dist/
npm run typecheck
npm test
npm run cf:dev      # Worker locally via wrangler

Schneller manueller Check gegen den HTTP-Transport:

GSC_CREDENTIALS=<blob> npm run build && node dist/bin/cli.js http &

curl -s http://127.0.0.1:8787/mcp \
  -H 'content-type: application/json' \
  -H 'MCP-Protocol-Version: 2026-07-28' \
  -H 'Mcp-Method: tools/list' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}' | jq '.result.tools[].name'

Fehlerbehebung

Symptom

Ursache und Lösung

invalid_grant

Refresh-Token widerrufen oder der Zustimmungsbildschirm befindet sich im Testmodus (7-Tage-Ablauf). Führen Sie auth erneut aus; veröffentlichen Sie die App, um das Wiederauftreten zu stoppen.

403 insufficient permission auf einer Property

Die siteUrl stimmt nicht genau überein. Führen Sie list_sites aus und kopieren Sie die Zeichenfolge wörtlich – https://example.com/ und sc-domain:example.com sind unterschiedliche Properties.

403 mit Hinweis auf deaktivierte API

Aktivieren Sie die Search-Console-API im Google-Cloud-Projekt, das die Anmeldedaten ausgestellt hat.

Leeres list_sites

Erfolgreich als Google-Konto ohne Properties authentifiziert. Sie haben wahrscheinlich das falsche Konto auf dem Zustimmungsbildschirm ausgewählt.

Traffic sieht so aus, als wäre er in den letzten Tagen abgestürzt

Die Daten sind noch nicht endgültig. Verwenden Sie lastDays.

Server startet nicht in Claude Desktop

Führen Sie npx google-search-console-mcp doctor in einem Terminal aus, um Anmeldedaten von Client-Startproblemen zu isolieren.

-32020 HeaderMismatch

Client sendet modernes _meta, ohne Header zu spiegeln. Setzen Sie MCP_STRICT_HEADERS=0.


Sicherheit

  • Der Anmeldedaten-Blob ist Ihr Google-Zugriff. Committen Sie ihn nicht, fügen Sie ihn nicht in freigegebene Dokumente ein. Widerrufen Sie unter myaccount.google.com/permissions.

  • Der HTTP-Modus bindet standardmäßig an 127.0.0.1 und validiert Origin gegen ALLOWED_ORIGINS, um DNS-Rebinding zu blockieren. Nicht gesetzt bedeutet, dass keine Browser-Origin erlaubt ist – listen Sie sie explizit auf oder verwenden Sie *, um die Prüfung zu deaktivieren. /health und / sind ausgenommen; sie legen keine berechtigte Fähigkeit offen.

  • Der Vergleich des gemeinsamen Geheimnisses ist längenüberprüft und konstantzeitig.

  • Die Standard-Worker-Bereitstellung speichert überhaupt keine Anmeldedaten.

  • --read-only / GSC_READ_ONLY=1 blockiert Sitemap-Mutationen unabhängig vom gewährten OAuth-Bereich.

Lizenz

MIT

Available Tools

11 tools
check_setupCheck server setup and credentialsA
Read-only

Diagnose this server's configuration: whether credentials are present, whether they still work against Google, and which properties they reach. Call it when another tool fails with an authentication or permission error, when the user is setting the server up, or when the user asks why it is not working. It is the only tool that works before credentials are configured, and it returns remediation steps rather than failing. Do not call it as a warm-up before ordinary requests - list_sites already proves access.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, and the description adds meaningful behavioral context beyond those: it works before credentials exist and returns remediation steps instead of failing. This gives the agent a clear model of the tool's failure semantics without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with the diagnosis scope first and usage conditions following. Each sentence contributes useful guidance, though the final negative instruction could arguably be merged with earlier guidance without much loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter diagnostic tool with no output schema, this description covers the key decision factors: when to call it, when not to, what it checks, why it is unique, and what it returns. There is no missing information an agent would need to invoke or route to this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description does not need to explain parameter meaning. The baseline for zero-parameter tools is 4, and the description appropriately focuses on behavior rather than inventing parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Diagnose') and resource ('this server's configuration'), then enumerates exactly what it checks: credential presence, validity against Google, and property reach. It clearly differentiates from sibling tools by noting it is the only tool that works before credentials are configured.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit call conditions: after an authentication/permission error, during setup, or when the user asks why it is not working. It also states a concrete negative case—do not use it as a warm-up—and names list_sites as the correct alternative for proving access.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_search_analyticsCompare two periodsA
Read-only

Run the same search-analytics query over two periods and return per-row and total deltas. Use it for "is traffic up or down", "what lost rankings", or "which pages grew" questions.

By default the comparison period is the equal-length window immediately before the current one. Set comparison to "yearOverYear" for the same window 364 days earlier (364 rather than 365 keeps weekdays aligned), or "custom" with explicit compareStartDate and compareEndDate.

Rows are matched on their dimension values and sorted by absolute click change, so the biggest movers in either direction come first. Rows present in only one period are included, with the missing side reported as zero.

NameRequiredDescriptionDefault
typeNo
limitNoHow many of the biggest movers to return. Defaults to 50.
endDateNoInclusive end date, YYYY-MM-DD, in Pacific Time. Ignored if lastDays is set.
siteUrlNoSearch Console property, exactly as it appears in `list_sites`. URL-prefix properties include the scheme and a trailing slash ("https://example.com/"); domain properties use the "sc-domain:" prefix ("sc-domain:example.com"). These are distinct properties with different data.
lastDaysNoShorthand for a trailing window, e.g. 28 for "the last 28 days". The window ends 3 days ago because Search Console data is not final before then. Prefer this over startDate/endDate unless you need a specific window.
rowLimitNoRows to fetch per period. Defaults to 1000.
startDateNoInclusive start date, YYYY-MM-DD, in Pacific Time. Ignored if lastDays is set.
comparisonNoWhich period to compare against. Defaults to "previousPeriod".
dimensionsNoDimensions to group and match on. Omit to compare property-level totals only. Avoid "date" here: it makes every row unique and the comparison meaningless.
compareEndDateNoEnd of the comparison period. Required when comparison is "custom".
compareStartDateNoStart of the comparison period. Required when comparison is "custom".
dimensionFilterGroupsNoFilter groups. Filters inside a group are ANDed together; supplying multiple groups is currently equivalent to one combined AND group in the API.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnlyHint/openWorldHint annotations by disclosing concrete behaviors: the comparison window defaults to an equal-length preceding period, yearOverYear uses 364 days to keep weekdays aligned, rows are matched on dimension values, results are sorted by absolute click change, and rows present in only one period are reported with zeroes. This is exactly the kind of behavioral detail an agent needs to interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: three paragraphs each serve a distinct purpose — what the tool does, how the comparison period is selected, and how rows are matched and sorted. There is no filler or repetition of annotation information, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only comparison tool with no output schema, the description adequately covers input semantics, period selection, row matching, sorting, and treatment of missing rows. An agent can understand what the tool returns and how to configure it without needing additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 92%, so the schema already documents most parameters well. The description adds meaningful semantics beyond the schema: the meaning of the default comparison period, why yearOverYear uses 364 days, and the caution that using the date dimension makes comparisons meaningless. This improves parameter understanding without repeating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Compare') and resource ('search-analytics query') and clearly states the return value ('per-row and total deltas'), which differentiates it from the single-period sibling query_search_analytics. The title and description align with the tool name, and the use-case list makes its purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit use cases ('is traffic up or down', 'what lost rankings', 'which pages grew') and explains the default comparison window and the three comparison modes. It does not explicitly name the alternative single-period tool or state when not to use it, but the context is clear enough that an agent can select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_sitemapRemove a sitemapA
DestructiveIdempotent

Remove a sitemap from a property. This unsubmits the sitemap from Search Console; it does not delete the file from the site and does not remove any indexed URLs. It is destructive only in that the submission history for that sitemap is lost.

NameRequiredDescriptionDefault
siteUrlYesSearch Console property, exactly as it appears in `list_sites`. URL-prefix properties include the scheme and a trailing slash ("https://example.com/"); domain properties use the "sc-domain:" prefix ("sc-domain:example.com"). These are distinct properties with different data.
feedpathYesFull URL of the sitemap to remove, e.g. "https://example.com/sitemap.xml".

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable context by specifying that destruction is limited to loss of submission history. It also clarifies open-world effects: the sitemap file remains on the site and indexed URLs are unaffected. This exceeds what the annotations alone provide and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. The first sentence states the core action, while the second and third add critical caveats that prevent misuse. Each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with fully documented schema, safety annotations, and no output schema, the description covers all essential behavioral context: what the tool does, what it does not do, and the precise destructive impact. There is no meaningful gap for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters with full 100% coverage, including examples and distinctions for siteUrl. The description adds little parameter-specific meaning beyond restating the general context of a 'property' and a 'sitemap', so it does not compensate meaningfully beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Remove a sitemap from a property') and then clarifies the actual behavior: it unsubmits from Search Console rather than deleting the file or indexed URLs. This distinguishes it clearly from sibling tools like submit_sitemap or list_sitemaps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context by explaining what the tool does and does not do: it unsubmits a sitemap, does not delete the site file, and does not remove indexed URLs. This acts as an implicit usage boundary, though it does not explicitly name alternative sibling tools or provide a direct 'use when...' condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_siteGet one propertyA
Read-only

Fetch a single Search Console property and the permission level the authenticated account holds on it. Useful to confirm access before a longer sequence of calls; list_sites is usually more efficient.

NameRequiredDescriptionDefault
siteUrlYesSearch Console property, exactly as it appears in `list_sites`. URL-prefix properties include the scheme and a trailing slash ("https://example.com/"); domain properties use the "sc-domain:" prefix ("sc-domain:example.com"). These are distinct properties with different data.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context beyond annotations by explaining the tool returns the authenticated account's permission level and is appropriate for pre-flight access confirmation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary action is front-loaded, and the usage guidance and alternative are clearly separated without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one fully documented parameter, read-only annotations, and no output schema, the description provides sufficient context: what is fetched, what information is returned, when to use it, and when to prefer an alternative. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter is fully documented in the input schema. The description adds no additional parameter-level details, so the baseline score of 3 is appropriate; the schema carries the semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch'), names the exact resource ('a single Search Console property'), and states the returned information (permission level). It also distinguishes itself from the sibling list_sites by emphasizing it returns the permission level for one property.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly recommends when to use this tool ('useful to confirm access before a longer sequence of calls') and names the more efficient alternative ('list_sites is usually more efficient'). This gives an agent clear decision criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sitemapGet one sitemapA
Read-only

Fetch details for a single submitted sitemap: when it was last submitted and downloaded, whether processing is still pending, its type, and how many URLs were submitted versus indexed per content type. Treat the indexed counts as a lower bound - Google has long under-reported them here.

NameRequiredDescriptionDefault
siteUrlYesSearch Console property, exactly as it appears in `list_sites`. URL-prefix properties include the scheme and a trailing slash ("https://example.com/"); domain properties use the "sc-domain:" prefix ("sc-domain:example.com"). These are distinct properties with different data.
feedpathYesFull URL of the sitemap, e.g. "https://example.com/sitemap.xml". Must match a path returned by `list_sitemaps`.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is consistent with readOnlyHint=true, framing the operation as a fetch. It goes beyond annotations by adding the important caveat that indexed counts are under-reported by Google and should be treated as a lower bound. This gives the agent useful reliability context that the annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The first sentence front-loads the operation and the returned fields, and the second adds a high-value caveat. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing return values, and it does so by listing the key fields returned and adding the data-reliability caveat. It may not describe error behavior or exact response formatting, but for a simple read-only fetch tool with rich schema descriptions, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are already richly documented in the schema: siteUrl explains URL-prefix vs domain properties, and feedpath gives an example and requires a path from list_sitemaps. The description adds little to parameter understanding beyond referencing 'per content type,' which relates more to the output than the inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch details') and resource ('a single submitted sitemap'), then enumerates exactly what information is returned: submission/download times, processing state, type, and submitted vs indexed URL counts. This clearly distinguishes it from siblings like list_sitemaps (listing), submit_sitemap (creating), and delete_sitemap (removing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'single submitted sitemap' implies this is for retrieving details about one already-submitted sitemap, and the schema requires feedpath to match a path from list_sitemaps. However, the description itself does not explicitly state when to use this tool instead of alternatives or mention any exclusions, leaving the agent to infer routing from sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_urlInspect a URL in the indexA
Read-only

Inspect one URL as Google sees it: whether it is indexed, its coverage state, robots.txt status, last crawl time, the canonical Google chose versus the one you declared, which sitemaps reference it, plus AMP, mobile-usability and rich-results verdicts where applicable.

This is the tool for "why is this page not indexed" questions. Read indexStatusResult.coverageState first: it carries the specific reason, such as "Crawled - currently not indexed", "Discovered - currently not indexed", or "Duplicate without user-selected canonical".

Quota is roughly 2000 inspections per property per day, so inspect a considered sample rather than every URL. The URL must belong to the property being inspected. Results describe the indexed version only - this API cannot run the live test that the Search Console UI offers.

NameRequiredDescriptionDefault
siteUrlYesSearch Console property, exactly as it appears in `list_sites`. URL-prefix properties include the scheme and a trailing slash ("https://example.com/"); domain properties use the "sc-domain:" prefix ("sc-domain:example.com"). These are distinct properties with different data.
languageCodeNoBCP-47 code for human-readable messages. Defaults to "en-US".
inspectionUrlYesFully-qualified URL to inspect. Must be under the property, e.g. "https://example.com/pricing".

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and openWorldHint annotations, the description discloses important operational behavior: the rough quota, that results describe the indexed version only, that it cannot run the live test offered in the UI, and that the inspected URL must belong to the property. It also tells the agent which field to read first when diagnosing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, all information-dense and free of filler. The most distinguishing information is front-loaded, followed by the use case, quota caveat, and limitation. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description names the critical return field (indexStatusResult.coverageState), gives example values, lists the categories of results, and covers quota, scoping, and the live-test limitation. This is sufficient context for an agent to invoke the tool correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline applies: the schema already documents siteUrl, inspectionUrl, and languageCode. The description adds one useful constraint ('The URL must belong to the property being inspected') but does not significantly extend parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Inspect one URL as Google sees it,' and enumerates the concrete result areas (coverage state, robots.txt, crawl time, canonicals, sitemaps, AMP, mobile usability, rich results). The phrase 'one URL' distinguishes it from the sibling inspect_urls without needing to open the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit use case: 'This is the tool for "why is this page not indexed" questions,' and adds quota-based sampling guidance. It does not name alternatives or state when not to use it, but the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_urlsInspect several URLsA
Read-only

Inspect up to 25 URLs in one call, run concurrently, returning a compact per-URL summary plus a count of how many URLs fell into each coverage state. Use it to audit a set of pages - for example the top landing pages from query_search_analytics, or URLs listed in a sitemap.

Failures are reported per URL rather than aborting the batch, so one bad URL will not cost you the rest of the results. Each URL consumes one unit of the roughly 2000/day per-property inspection quota.

NameRequiredDescriptionDefault
siteUrlYesSearch Console property, exactly as it appears in `list_sites`. URL-prefix properties include the scheme and a trailing slash ("https://example.com/"); domain properties use the "sc-domain:" prefix ("sc-domain:example.com"). These are distinct properties with different data.
languageCodeNoBCP-47 code. Defaults to "en-US".
inspectionUrlsYesFully-qualified URLs to inspect. All must belong to the property.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond the annotations: concurrent execution, per-URL failure handling rather than whole-batch abortion, and quota consumption of roughly 2000/day per property. This is exactly the kind of operational behavior an agent needs to know.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably concise and front-loaded with the most important facts: batch size, concurrency, output shape, and usage examples. The second paragraph adds valuable failure and quota details without excessive padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core invocation requirements, return shape at a high level, failure behavior, and quota implications. It does not enumerate exact response fields, but for a batch inspection tool with a clear purpose and well-described schema, this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented. The description reinforces the 25-URL limit and mentions that all URLs must belong to the property, but it does not add meaning beyond the schema's existing field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool inspects up to 25 URLs in one call, runs concurrently, and returns a per-URL summary plus coverage-state counts. It is immediately distinguishable from the singular sibling `inspect_url` by its batch orientation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage context: auditing sets of pages, such as top landing pages from `query_search_analytics` or URLs from a sitemap. It does not explicitly state when to prefer `inspect_url` over this tool, but the batch purpose is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sitemapsList sitemapsA
Read-only

List the sitemaps submitted for a property, with submission and download timestamps, error and warning counts, and per-content-type submitted and indexed counts. Pass sitemapIndex to list the child sitemaps inside a sitemap index file instead of the top-level submissions.

NameRequiredDescriptionDefault
siteUrlYesSearch Console property, exactly as it appears in `list_sites`. URL-prefix properties include the scheme and a trailing slash ("https://example.com/"); domain properties use the "sc-domain:" prefix ("sc-domain:example.com"). These are distinct properties with different data.
sitemapIndexNoFull URL of a sitemap index file. When set, returns the sitemaps listed inside that index rather than the property own submissions.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint and openWorldHint annotations already cover the safety and external-state aspects. The description adds meaningful behavioral detail by stating exactly what the tool returns—timestamps, error/warning counts, and per-content-type counts—and how sitemapIndex changes the result set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no redundant filler, and the primary purpose is front-loaded. The second sentence earns its place by explaining the optional parameter behavior without repeating schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with two parameters and no output schema, the description provides enough information about return contents and the special sitemapIndex behavior. Annotations cover safety, and the schema covers parameter formats, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters, so the schema carries the parameter documentation burden. The description largely restates the sitemapIndex behavior already in the schema, adding only the phrase 'child sitemaps' and 'top-level submissions' as clarifying vocabulary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'List the sitemaps submitted for a property,' and further specifies the returned metadata (timestamps, counts, per-content-type values). It also clarifies the sitemapIndex variant, which distinctively separates top-level listing from child-sitemap listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the main use case and explicitly explains when to pass sitemapIndex to list child sitemaps instead of top-level submissions. It does not name alternative sibling tools like get_sitemap or submit_sitemap, but the context is clear and the parameter guidance is practical.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sitesList Search Console propertiesA
Read-only

List every Search Console property the authenticated account can access, with its permission level. Call this first in any session: the exact siteUrl strings it returns are required by every other tool, and permission level tells you what you can do (siteOwner and siteFullUser can read analytics and manage sitemaps; siteRestrictedUser has limited read access; siteUnverifiedUser cannot read data).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds useful behavioral context about the output including permission levels and downstream dependency on siteUrl. It does not discuss pagination or potential response size, but openWorldHint partially covers the open-ended nature of the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences deliver a clear purpose statement and high-value usage guidance without redundancy. The critical 'call this first' instruction is front-loaded and the permission details are compactly organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with no output schema, the description fully explains what is returned (properties with permission levels), why it matters (siteUrl needed by other tools), and how to interpret permission levels. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4 and there is no parameter semantics burden on the description. The description adds no parameter detail, but none is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('every Search Console property the authenticated account can access'), and it clarifies that the result includes permission levels. This clearly distinguishes it from sibling tools like get_site, which presumably targets a single property.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to 'Call this first in any session' and explains that the returned siteUrl strings are required by every other tool. It also maps permission levels to capabilities, giving concrete guidance on what actions are possible for each role.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_search_analyticsQuery search performance dataA
Read-only

Query clicks, impressions, CTR and average position from the Search Console Performance report - the core tool for all traffic and ranking analysis.

Group by one or more dimensions (query, page, country, device, searchAppearance, date, hour). Rows come back sorted by clicks descending, and only rows with data are returned. Omitting dimensions returns a single totals row for the whole property.

Behaviours worth planning around:

  • Data is final only up to about 3 days ago; use lastDays to get a safe window automatically.

  • Grouping by query triggers privacy filtering: rare queries are omitted entirely, so query-level clicks will not sum to the property total. Never present that gap as lost traffic.

  • Combining page and query is capped harder than either alone, so expect fewer rows than you might predict.

  • rowLimit maxes at 25000 per call; page with startRow for more.

NameRequiredDescriptionDefault
typeNoSearch surface. Defaults to "web". "discover" and "googleNews" support only a limited set of dimensions and have no query dimension at all.
endDateNoInclusive end date, YYYY-MM-DD, in Pacific Time. Ignored if lastDays is set.
siteUrlNoSearch Console property, exactly as it appears in `list_sites`. URL-prefix properties include the scheme and a trailing slash ("https://example.com/"); domain properties use the "sc-domain:" prefix ("sc-domain:example.com"). These are distinct properties with different data.
lastDaysNoShorthand for a trailing window, e.g. 28 for "the last 28 days". The window ends 3 days ago because Search Console data is not final before then. Prefer this over startDate/endDate unless you need a specific window.
rowLimitNoRows to return, 1-25000. Defaults to 1000.
startRowNoZero-based offset for pagination. Defaults to 0.
dataStateNo"final" (default) returns only finalised data. "all" includes fresh, still-changing data for the most recent days. "hourly_all" is required when using the "hour" dimension.
startDateNoInclusive start date, YYYY-MM-DD, in Pacific Time. Ignored if lastDays is set.
dimensionsNoGroup results by these dimensions, in order. Omit for property-level totals. "date" gives a time series; "hour" requires dataState "hourly_all" and only covers roughly the last 10 days.
aggregationTypeNoHow to aggregate. Leave as "auto" unless you specifically need byPage or byProperty; changing it changes what a click counts as.
dimensionFilterGroupsNoFilter groups. Filters inside a group are ANDed together; supplying multiple groups is currently equivalent to one combined AND group in the API.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, and the description adds substantial behavioral detail beyond that: data finality lag, query-level privacy filtering, row limits, the cap on combining page and query, sorted output, and omission of empty rows. No contradiction exists between the description and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then gives grouping and return behavior, then uses a compact bulleted list for the most important planning caveats. Every sentence carries useful information and the structure makes the caveats scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter tool with no output schema, the description covers the key behavioral gaps an agent needs before calling it: what is returned, how default totals work, data freshness, privacy filtering, expected row counts, and pagination. The remaining parameter details are already well documented in the input schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: sorting by clicks descending, only returning rows with data, the privacy-filtering effect of grouping by query, the harder cap when combining page and query, and pagination guidance for rowLimit/startRow. It does not cover every parameter, but the schema already does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: querying clicks, impressions, CTR, and average position from the Search Console Performance report. It also names the available dimensions and distinguishes its role as the core traffic and ranking analysis tool, making its purpose immediately identifiable relative to siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: how to get totals, how to group, how to paginate, and why to use lastDays for a safe data window. It does not explicitly name alternatives like compare_search_analytics or state when not to use this tool, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_sitemapSubmit a sitemapA
Idempotent

Submit or resubmit a sitemap for a property. Resubmitting an existing sitemap is a safe way to nudge Google into re-downloading it after content changes. The sitemap must already be reachable at the given URL and must live under the property. Returns no data on success; call get_sitemap afterwards to check processing status.

NameRequiredDescriptionDefault
siteUrlYesSearch Console property, exactly as it appears in `list_sites`. URL-prefix properties include the scheme and a trailing slash ("https://example.com/"); domain properties use the "sc-domain:" prefix ("sc-domain:example.com"). These are distinct properties with different data.
feedpathYesFull URL of the sitemap to submit, e.g. "https://example.com/sitemap.xml".

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds value beyond annotations by explaining that resubmission is a safe nudge, that the sitemap must already be reachable, and that no data is returned on success. It also directs the caller to get_sitemap for status, which is useful behavioral context not present in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences with no wasted words. The core action is front-loaded, and each sentence contributes essential information: what the tool does, when resubmission is useful, prerequisites, and expected return behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with no output schema, the description fully covers what an agent needs: prerequisites, behavior, and follow-up action. It even preempts confusion about the empty response by telling the agent to check get_sitemap afterward.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with strong parameter descriptions containing examples and format guidance. The description adds further meaning by specifying that the sitemap must be reachable and must live under the property, which clarifies feedpath requirements beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (submit or resubmit), the resource (sitemap), and the target context (a property). It clearly differentiates from siblings like get_sitemap, list_sitemaps, and delete_sitemap by naming the operation and its resubmission role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for when to use it, including resubmitting after content changes and the prerequisites that the sitemap must be reachable and under the property. It does not explicitly exclude alternatives like list_sitemaps or get_sitemap, but the guidance is sufficient for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv1.0.0
    • First observedcheck_setup
    • First observedcompare_search_analytics
    • First observeddelete_sitemap
    • First observedget_site
    • First observedget_sitemap
    • First observedinspect_url
    • First observedinspect_urls
    • First observedlist_sitemaps
    • First observedlist_sites
    • First observedquery_search_analytics
    • First observedsubmit_sitemap

TDQS

A4.4/5.0

Scored across 11 tools

Disambiguation5/5

Each tool maps to a distinct resource or action: sites, analytics, sitemaps, URL inspection, and setup. The only close pairs are list/get for sites and sitemaps plus inspect_url/inspect_urls, but plural vs. singular and single vs. batch behavior make them unambiguous.

Naming Consistency5/5

Tool names consistently follow a verb_noun pattern with snake_case throughout: list_sites, get_site, submit_sitemap, inspect_url, check_setup. Plural and singular forms match the tool's behavior, so the naming convention is predictable and coherent.

Tool Count5/5

Eleven tools is well-scoped for the Google Search Console domain. Each tool covers a meaningful capability without bloating the surface, and the count aligns with the major API areas: sites, analytics, sitemaps, URL inspection, and configuration.

Completeness4/5

The set covers the primary Search Console workflows well: property listing, search analytics with comparison, full sitemap lifecycle, and single/batch URL inspection. Minor gaps exist such as adding or deleting properties and deeper permission management, but these are not core to typical agent use and can be worked around.

Maintenance

ActivityStale
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for Google Search Console, enabling querying search analytics, URL inspection, sitemap management, and more via natural language.
    31,535 npm
    3
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A lightweight, fast MCP server for Google Search Console. Query search analytics, manage sitemaps, and inspect URLs directly from your AI assistant.
    7
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for Google Search Console, enabling querying search performance, listing properties, and inspecting URL indexing status from MCP-compatible clients.
    4
    18 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Self-hosted MCP server for Google Search Console. Enables natural language queries to list sites, analyze search analytics, inspect URLs, and check sitemaps through AI assistants.
    MIT