Der GSC Wizard MCP-Server ist eine entfernte, per OAuth geschützte Model-Context-Protocol-Ressource, die Claude Daten aus der Google Search Console, Bing Webmaster, GA4 und dem Merchant Center zur Verfügung stellt. Diese Seite ist die technische Referenz: Transport, die Authentifizierungskette, die Tool-Oberfläche, der Antwortvertrag, das Routing der Lesezugriffe und die Limits.
Wenn Sie stattdessen die Einrichtung Schritt für Schritt möchten, nutzen Sie die Anleitung zur Claude-Verbindung. Den Produktüberblick für alle Clients finden Sie unter Google Search Console MCP.
https://mcp.gscwizard.com/mcp
Streamable HTTP
OAuth 2.1 (DCR + PKCE) or Bearer key
128 · 96 read / 32 write
Der Server spricht MCP über Streamable HTTP. Es gibt keinen reinen SSE-Fallback-Endpunkt; Clients, die noch vom veralteten HTTP+SSE-Paar ausgehen, sollten auf den einzelnen Pfad /mcp zeigen, der das Streaming pro Anfrage aushandelt.
| Pfad | Auth | Zweck |
|---|---|---|
POST /mcp | Erforderlich | JSON-RPC über Streamable HTTP |
/v1/* | Erforderlich | REST-Oberfläche für Aufrufer ohne MCP |
GET /health | Öffentlich | Liefert { ok, sessions } |
GET /, /docs | Öffentlich | Gerenderter Tool-Katalog |
/.well-known/oauth-protected-resource | Öffentlich | RFC-9728-Ressourcen-Metadaten |
Die Sitzungskontinuität läuft über den Antwort-Header Mcp-Session-Id, den der Client bei Folgeanfragen zurückspielt. Jede Sitzung ist serverseitig an die user_id gebunden, die sie geöffnet hat. Wird eine Sitzungs-ID mit anderen Zugangsdaten erneut vorgelegt, wird sie abgelehnt und nicht stillschweigend neu zugeordnet. Eine abgeflossene Sitzungs-ID reicht allein also nicht aus, um ein Konto zu lesen.
MCP stdio, MCP Streamable HTTP und die REST-API unter /v1 laufen alle durch dieselbe runTool()-Pipeline. Autorisierung, Argumentvalidierung, Durchsetzung der Freigaben pro Property, die Abonnementprüfung, der Rate Limiter und das Audit-Protokoll werden an dieser einen Stelle angewendet und können deshalb zwischen den Transporten nicht auseinanderlaufen. Ein neu in die Registry aufgenommenes Tool ist auf allen dreien erreichbar und wird identisch gesteuert.
Zwei Verfahren, je nach Fähigkeiten des Clients. Die Connectors-Oberfläche von Claude nutzt OAuth 2.1; Clients mit Konfigurationsdatei und Headless-Clients legen einen festen API-Schlüssel vor.
Der MCP-Server ist der Resource Server; die App unter tool.gscwizard.com ist der Authorization Server. Claude durchläuft die Kette selbstständig:
Ein nicht authentifizierter GET auf die Ressource nennt den Authorization Server und die Scopes.
Claude ruft /.well-known/oauth-authorization-server beim Aussteller ab, um die Endpunkte zu finden.
Claude registriert sich selbst und erhält eine eigene Client-ID. Deshalb bleiben die Felder für Client-ID und Secret leer, wenn Sie den Connector hinzufügen: Wer sie ausfüllt, greift der Registrierung vor und bricht den Ablauf.
Ein authorization_code-Grant mit S256-Challenge, erneuerbar. Google-Anmeldung und Einwilligung finden auf dem Authorization Server statt, nie in Claude.
Ressourcen-Metadaten
GET https://mcp.gscwizard.com/.well-known/oauth-protected-resource
{
"resource": "https://mcp.gscwizard.com/mcp",
"authorization_servers": ["https://tool.gscwizard.com"],
"scopes_supported": ["mcp:read", "mcp:write"],
"bearer_methods_supported": ["header"]
}Metadaten des Authorization Servers
GET https://tool.gscwizard.com/.well-known/oauth-authorization-server
{
"issuer": "https://tool.gscwizard.com",
"authorization_endpoint": "https://tool.gscwizard.com/oauth/authorize",
"token_endpoint": "https://tool.gscwizard.com/api/oauth/token",
"registration_endpoint": "https://tool.gscwizard.com/api/oauth/register",
"revocation_endpoint": "https://tool.gscwizard.com/api/oauth/revoke",
"scopes_supported": ["mcp:read", "mcp:write"],
"response_types_supported": ["code"],
"grant_types_supported": ["authorization_code", "refresh_token"],
"code_challenge_methods_supported": ["S256"],
"token_endpoint_auth_methods_supported": [
"none", "client_secret_post", "client_secret_basic"
]
}Zwei Prüfungen, bevor ein Token ausgestellt wird. Der Authorize-Endpunkt verlangt ein aktives Abonnement und mindestens eine verbundene Search-Console-Property. Ein Konto, das keines von beidem hat, wird zuerst dorthin geschickt, statt ein Token zu erhalten, das jeder spätere Tool-Aufruf ablehnen würde.
Schlüssel tragen das Präfix gscw_live_, werden unter Konto → API-Schlüssel erstellt und als Authorization: Bearer übergeben. Gespeichert wird nur ein SHA-256-Hash. Der Klartext wird deshalb nur einmal bei der Erstellung angezeigt und lässt sich danach nicht wiederherstellen; eine Rotation bedeutet, einen neuen Schlüssel auszustellen und den alten zu widerrufen.
Jeder Schlüssel trägt einen bei der Erstellung festgelegten Scope. Ein Schlüssel mit Lese-Scope kann kein Mutations-Tool aufrufen: Die Prüfung läuft in der Pipeline vor dem Handler. Schreibgeschützt ist damit eine strukturelle Eigenschaft der Zugangsdaten und keine Anweisung, von der man das Modell abbringen könnte.
Vier Claude-Oberflächen, drei verschiedene Anbindungsarten.
Einstellungen → Connectors → Benutzerdefinierten Connector hinzufügen. Geben Sie die URL ein und lassen Sie beide OAuth-Felder leer.
URL: https://mcp.gscwizard.com/mcp
OAuth Client ID: (leave blank)
OAuth Secret: (leave blank)Ein einziger Befehl registriert den entfernten Server mit einem Schlüssel-Header. Prüfen Sie das mit /mcp innerhalb einer Sitzung.
claude mcp add --transport http gsc-wizard \
https://mcp.gscwizard.com/mcp \
--header "Authorization: Bearer gscw_live_..."Die Konfigurationsdatei der Desktop-App startet ausschließlich lokale stdio-Server, daher besteht ein Eintrag mit "type": "http" die Validierung nicht. Binden Sie den entfernten Server über mcp-remote an (erfordert Node.js), wenn Sie statt OAuth einen festen Schlüssel brauchen.
{
"mcpServers": {
"gsc-wizard": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://mcp.gscwizard.com/mcp",
"--header", "Authorization: Bearer gscw_live_..."
]
}
}
}Deklarieren Sie ihn in den Agent-Optionen als HTTP-MCP-Server; das SDK übernimmt den JSON-RPC-Handshake.
mcpServers: {
"gsc-wizard": {
type: "http",
url: "https://mcp.gscwizard.com/mcp",
headers: { Authorization: `Bearer ${process.env.GSCW_API_KEY}` }
}
}Verwenden Sie für alles, was unbeaufsichtigt läuft, einen Schlüssel mit Lese-Scope. Braucht der Agent nur eine Handvoll Tools, beschränken Sie zusätzlich die erlaubte Tool-Liste im Client: Eine kleinere Oberfläche ist pro Durchlauf günstiger und begrenzt, was eine Prompt Injection in abgerufenen Seiteninhalten erreichen könnte.
128 registrierte Tools: 96 lesende und 32 Mutationen, alle für jedes Konto verfügbar. Jedes Tool liefert MCP-Annotationen (readOnlyHint, destructiveHint, openWorldHint, title), sodass ein Client sie darstellen oder sperren kann, ohne Namen fest zu verdrahten.
| Gruppe | Typische Tools | Scope |
|---|---|---|
| Suchanalyse | query_search_analytics, query_top_queries, query_top_pages, query_countries, query_devices | Lesen |
| Analyse | find_decaying_content, analyze_cannibalization, get_ranking_changes, score_opportunities, analyze_ctr_curve | Lesen |
| Erkennung | detect_anomalies, detect_change_points, forecast_traffic, get_decay_overview | Lesen |
| Indexierung | inspect_url, bulk_inspect_urls, get_indexing_tracker, list_sitemaps | Lesen |
| Weitere Quellen | Bing Webmaster, GA4, Yandex, Merchant Center, Core Web Vitals | Lesen |
| Mutationen | submit_sitemap, submit_indexnow_urls, create_topic_cluster, create_annotation, add_site | Schreiben |
Die Analyse läuft serverseitig. Content Decay, Kannibalisierung, Modellierung der CTR-Kurve, Change-Point-Erkennung und Bewertung von Chancen werden im Server berechnet und als Ergebnisse zurückgegeben. Das Modell erhält Schlussfolgerungen und die zugrunde liegenden Zeilen, keinen Rohdatenberg, den es statistisch auswerten müsste. Das ist pro Durchlauf günstiger und frei von Rechenabweichungen.
Der vollständige Katalog pro Tool mit Argumentschemata und Beispiel-Payloads wird unter mcp.gscwizard.com dargestellt und per Test gegen die Registry abgeglichen. Er kann deshalb nicht unbemerkt hinter den tatsächlich registrierten Tools zurückfallen.
Zeilenlimits sind nicht das Risiko, sondern verschwiegene Limits. Ein Modell, das genau limit Zeilen erhält, kann eine vollständige Antwort nicht von einer abgeschnittenen unterscheiden und meldet dann selbstbewusst „Ihre Website hat 100 Suchanfragen“. Die Tools mit Zeilenlimit holen deshalb eine Probezeile zu viel, liefern höchstens limit Zeilen zurück und hängen einen Block an, der das Zeitfenster nennt, ob es mehr gibt und wie der nächste Aufruf genau lautet.
"pagination": {
"limit": 100,
"offset": 0,
"returned": 100,
"hasMore": true,
"note": "Showing rows 1-100. Call again with offset: 100 for the next page."
}query_search_analytics liefert standardmäßig 100 Zeilen statt der ursprünglichen 1.000: Bei 1.000 lieferte ein einzelner Aufruf rund 58k Tokens, mehr Kontext als die gesamte Tool-Liste. Analyse-Tools mit Rangliste begrenzen im gemeinsamen Analytics-Kern und enthalten keinen Paginierungsblock.
Kein Tool verlangt vom Aufrufer, das heutige Datum zu kennen. Fehlt ein Zeitfenster, gelten standardmäßig die letzten 28 abgeschlossenen Tage, unter Berücksichtigung der Berichtsverzögerung der Search Console von etwa drei Tagen; die Vergleichsbasis ist standardmäßig der vorherige Zeitraum gleicher Länge. Der Datums-Parser wandelt außerdem die Werte null, "null" und "", die LLM-Clients häufig senden, in „Standard verwenden“ um, statt die Validierung scheitern zu lassen. Das beseitigt eine ganze Klasse von Wiederholungsschleifen.
| Feld | Bedeutung |
|---|---|
dataSource | clickhouse oder api: über welchen Pfad dieser Lesezugriff bedient wurde |
settledThrough | Letztes Datum mit vollständigen Daten |
dataMaturity | Erstes unvollständiges Datum, Basis-Zeitzone, verwendete Probe |
note | Hinweis zur Aktualität in Prosa, den das Modell weitergeben soll |
Diese Felder gibt es, damit sich eine Antwort zuordnen lässt. Wenn Claude sagt, der Traffic sei in der letzten Woche gefallen, unterscheidet settledThrough einen echten Rückgang von der Berichtsverzögerung, dem mit Abstand häufigsten Fehlalarm in der automatisierten Search-Console-Analyse.
Die meisten Lesezugriffe gehen nicht an die Search-Console-API. Historische Leistungsdaten werden in ein ClickHouse-Warehouse eingespielt, und geeignete Lesezugriffe werden von dort bedient: mit längerem Verlauf als das 16-Monats-Fenster der API und ohne API-seitiges Sampling bei Properties mit hoher Kardinalität.
Acht Suchanalyse-Tools (query_search_analytics, query_top_queries, query_top_pages, query_countries, query_devices, get_site_summary, get_query_performance, get_page_performance) und elf Analyse-Tools.
Anfragen, die searchAppearance, den Typ googleNews, drei oder mehr verschiedene Dimensionen oder Paginierung benötigen. Außerdem jede Property, deren Backfill noch nicht abgeschlossen ist.
Das Routing erfolgt automatisch und pro Anfrage; der Aufrufer wählt nicht. Lesezugriffe auf das Warehouse nutzen eine schreibgeschützte Rolle und eine Row Policy, die am Konto hängt. Die Mandantengrenze wird also von der Datenbank durchgesetzt und nicht nur vom Query Builder. Auf einem Lesepfad schreibt der Server nie in das Warehouse.
Praktische Folge für Claude: Das Warehouse hinkt der Echtzeit etwa zwei Tage hinterher, die Live-API etwa drei, und aus dem Warehouse bediente Antworten sagen das in note. Fragen Sie nach „letzter Woche“, erhalten Sie vollständige Wochen und kein unvollständiges Ende, das als Einbruch dargestellt wird.
| Oberfläche | Pro Minute | Pro Stunde |
|---|---|---|
| MCP | 60 | 1.000 |
REST /v1 | 180 | 2.000 |
Gezählt wird pro Nutzer und Oberfläche. Ein gedrosselter Aufruf liefert zurück, welches Zeitfenster überschritten wurde und wie viele Sekunden zu warten sind, sodass ein Agent gezielt zurücktreten kann, statt zu raten. URL-Prüfungen unterliegen einem separaten Tageskontingent von Google, das sich mit get_inspection_quota abrufen lässt.
| Bedingung | Verhalten |
|---|---|
| Lese-Schlüssel ruft ein Schreib-Tool auf | Wird abgelehnt, bevor der Handler läuft |
| Property nicht verbunden oder nicht freigegeben | Die Freigabeprüfung lehnt mit Begründung ab |
| Integration nicht konfiguriert | Liefert notConfigured: true mit einer Begründung, statt einen Fehler zu werfen |
| Sitzungs-ID mit anderen Zugangsdaten erneut verwendet | Wird abgelehnt, nicht neu zugeordnet |
| Frisches Google-OAuth, Property noch nicht propagiert | Google liefert für kurze Zeit 403; versuchen Sie es kurz nach dem Verbinden erneut |
Die notConfigured-Konvention ist für Agenten wichtig: Eine nicht konfigurierte GA4- oder Merchant-Center-Verbindung ist ein Zustand, den man meldet, und keine Ausnahme, die man wiederholt. Wer beides unterscheidet, verhindert, dass eine Schleife ihr Rate Limit an einem Zustand verbrennt, den kein Wiederholen beheben kann.
Google-Zugangsdaten erreichen Claude nie. Search-Console-Tokens liegen serverseitig, werden verschlüsselt gespeichert und vom Server erneuert. Claude hält ein Token oder einen Schlüssel für GSC Wizard, nicht für Google.
Der Scope ist strukturell. Zugangsdaten mit Lese-Scope erreichen keinen Mutations-Handler. Das wird in der gemeinsamen Pipeline durchgesetzt und gilt daher identisch für MCP und REST.
Schlüssel werden gehasht. Nur SHA-256; der Klartext wird einmal angezeigt. Ein Widerruf wirkt sofort.
Jeder Aufruf wird im Audit-Protokoll festgehalten, ob erfolgreich oder fehlgeschlagen: Lesezugriffe ohne Argumente, Schreibzugriffe mit Argumenten. Die Aktionen eines Agenten lassen sich im Nachhinein rekonstruieren.
Der Property-Zugriff gilt pro Freigabe. Claude sieht nur die mit dem Konto verbundenen Properties, und geteilte Properties tragen eigene Berechtigungen pro Freigabe, einschließlich Nutzern mit reinem Lesezugriff, die das Crawl-Budget eines Inhabers nicht verbrauchen können.
Für einen unbeaufsichtigten Agenten empfiehlt sich ein Schlüssel mit Lese-Scope plus eine clientseitige Allowlist der Tools, die der Job wirklich braucht. Diese Kombination begrenzt den Schaden einer Prompt Injection, die über beliebige vom Agenten abgerufene Inhalte eintrifft.
Meistens wurde eine Client-ID oder ein Secret eingetragen. Der Server nutzt dynamische Client-Registrierung, daher müssen beide Felder leer bleiben. Entfernen Sie den Connector, fügen Sie ihn nur mit der URL erneut hinzu und lassen Sie Claude sich selbst registrieren.
Prüfen Sie die beiden Bedingungen, die der Authorize-Endpunkt durchsetzt: ein aktives Abonnement und mindestens eine mit dem Konto verbundene Search-Console-Property. Ein Token für ein Konto ohne verbundene Property darf nichts lesen.
Die Konfigurationsdatei startet nur lokale stdio-Prozesse, daher ist "type": "http" kein gültiger Eintrag. Nutzen Sie die Connectors-Oberfläche oder binden Sie den Server wie oben gezeigt über npx -y mcp-remote an.
Google braucht kurz, um eine neu erteilte Search-Console-Autorisierung zu propagieren. Ein 403 in den ersten Minuten nach dem Verbinden ist meist die Propagation und kein Berechtigungsfehler; versuchen Sie es erneut, bevor Sie den OAuth-Ablauf noch einmal durchlaufen.
Prüfen Sie dataSource und settledThrough in der Antwort. Ein aus dem Warehouse bedienter Lesezugriff und eine Ansicht in der Oberfläche können bei demselben nominalen Zeitraum an unterschiedlichen Daten enden, und die Oberfläche selbst sampelt Suchanfragen-Berichte mit hoher Kardinalität, das Warehouse dagegen nicht.
Meist eine Wiederholungsschleife gegen eine notConfigured-Antwort, die kein Wiederholen lösen kann, oder eine Iteration Seite für Seite, wo ein einziger Analyse-Aufruf genügt. Bevorzugen Sie die serverseitigen Analyse-Tools, statt Zeilen abzurufen und selbst darüber zu schlussfolgern.
Streamable HTTP unter https://mcp.gscwizard.com/mcp. Die Sitzungskontinuität läuft über den Antwort-Header Mcp-Session-Id, und jede Sitzung ist serverseitig an den Nutzer gebunden, der sie geöffnet hat. Eine mit anderen Zugangsdaten erneut verwendete Sitzungs-ID wird daher abgelehnt. Für lokale Builds gibt es einen stdio-Einstiegspunkt, und eine REST-Oberfläche unter /v1 liefert über dieselbe Pipeline schlichtes HTTP+JSON.
Der MCP-Server ist der OAuth-2.1-Resource-Server und veröffentlicht Metadaten der geschützten Ressource nach RFC 9728, die tool.gscwizard.com als Authorization Server nennen. Claude liest dann die RFC-8414-Metadaten dieses Ausstellers, registriert sich per dynamischer Client-Registrierung nach RFC 7591 und durchläuft einen authorization_code-Ablauf mit PKCE S256. Deshalb bleiben die Felder für Client-ID und Secret leer.
mcp:read und mcp:write. Bearer-Tokens werden nur im Authorization-Header akzeptiert. API-Schlüssel tragen dieselbe Unterscheidung als bei der Erstellung festgelegten Scope: Ein Lese-Schlüssel kann kein Mutations-Tool aufrufen, die Sperre ist also strukturell und keine Anweisung im Prompt.
128 registrierte Tools: 96 lesende und 32 Mutationen, alle für jedes Konto verfügbar. Alle drei Oberflächen laufen durch eine runTool()-Pipeline, sodass Autorisierung, Validierung, Durchsetzung der Freigaben und Audit-Protokoll zwischen ihnen nicht auseinanderlaufen können.
Die Konfigurationsdatei von Claude Desktop startet nur lokale stdio-Server, daher besteht ein Eintrag für einen entfernten HTTP-Server die Validierung nicht. Nutzen Sie entweder die Connectors-Oberfläche, die Streamable HTTP über OAuth nativ spricht, oder binden Sie den entfernten Server über npx mcp-remote an. Das erfordert Node.js und erlaubt es, stattdessen einen festen gscw_live_-API-Schlüssel zu verwenden.
Die MCP-Oberfläche erlaubt pro Nutzer 60 Aufrufe pro Minute und 1.000 pro Stunde. Die REST-Oberfläche unter /v1 erlaubt 180 pro Minute und 2.000 pro Stunde. Die Limits werden pro Nutzer und Oberfläche gezählt, und ein gedrosselter Aufruf liefert die Anzahl der Sekunden zurück, die vor dem nächsten Versuch zu warten sind.
Bei den meisten Lesezugriffen nicht. Acht Suchanalyse-Tools und elf Analyse-Tools werden automatisch an ein ClickHouse-Warehouse geleitet, das die historischen Search-Console-Daten des Kontos enthält. Das liefert einen längeren Verlauf und vermeidet das Sampling der API. Jede Antwort enthält ein Feld dataSource mit dem Wert clickhouse oder api, dazu settledThrough und bei Bedienung aus dem Warehouse einen Hinweis zur Aktualität. Anfragen, die searchAppearance, den Typ googleNews, drei oder mehr verschiedene Dimensionen oder Paginierung benötigen, fallen immer auf die Live-API zurück.
Tools mit Zeilenlimit holen eine einzelne Probezeile zu viel und liefern einen Paginierungsblock, der das Zeitfenster nennt, ob es weitere Zeilen gibt und wie der nächste Aufruf genau lautet. Stilles Abschneiden ist der Fehlermodus, den das Design ausschließen soll: Ein Modell, das genau limit Zeilen erhält, kann eine vollständige Antwort nicht von einer abgeschnittenen unterscheiden. query_search_analytics liefert standardmäßig 100 Zeilen, weil ein einzelner Aufruf bei 1.000 rund 58k Tokens zurückgab, mehr Kontext als die gesamte Tool-Liste.
Die Schritt-für-Schritt-Anleitung für Claude im Web, die Desktop-App und Claude Code.
Der Produktüberblick: was der Server in jedem MCP-Client leistet.
Die GA4-Oberfläche desselben Servers: Sitzungen, Key Events, E-Commerce und LLM-Traffic.
Die Yandex-Oberfläche desselben Servers: Qualitätsindex der Website, Suchanfragen und Indexierungsverlauf.
Die Shopping-Oberfläche desselben Servers: kostenlose Produkteinträge, Produktprobleme, Preise und ein Feed-Audit.
Cursor, VS Code, Windsurf, Gemini, Grok und ChatGPT neben Claude.
Dieselben Daten in der Gemini-App, der Antigravity CLI, Gemini Enterprise oder der Gemini API.
Ein ausgearbeiteter, unbeaufsichtigter Agent auf Basis dieses Servers plus eines Crawler-MCP.
Wie die Server mit Erstanbieter-Daten im Vergleich zu den Plattformen von Drittanbietern abschneiden.
Ein Endpunkt, OAuth oder ein Schlüssel mit begrenztem Scope und 128 Tools für die Properties, die Ihnen bereits gehören.
Praxisnahe GSC- und GA4-Workflows, Produktneuigkeiten und SEO-Experimente. Kein Spam, jederzeit abbestellbar.