Le serveur MCP de GSC Wizard est une ressource Model Context Protocol distante, protégée par OAuth, qui expose à Claude les données de Google Search Console, Bing Webmaster, GA4 et Merchant Center. Cette page est la référence technique : transport, chaîne d'authentification, périmètre des outils, contrat de réponse, routage des lectures et limites.
Si vous préférez la configuration pas à pas, consultez le guide de connexion à Claude. Pour la présentation du produit, tous clients confondus, voir le MCP Google Search Console.
https://mcp.gscwizard.com/mcp
Streamable HTTP
OAuth 2.1 (DCR + PKCE) or Bearer key
128 · 96 read / 32 write
Le serveur parle MCP via Streamable HTTP. Il n'existe pas de point de terminaison de repli en SSE seul : les clients qui supposent encore l'ancien couple HTTP+SSE doivent être dirigés vers l'unique chemin /mcp, qui négocie le streaming requête par requête.
| Chemin | Authentification | Rôle |
|---|---|---|
POST /mcp | Obligatoire | JSON-RPC sur Streamable HTTP |
/v1/* | Obligatoire | Interface REST pour les appelants hors MCP |
GET /health | Public | Renvoie { ok, sessions } |
GET /, /docs | Public | Catalogue d'outils généré |
/.well-known/oauth-protected-resource | Public | Métadonnées de ressource RFC 9728 |
La continuité de session repose sur l'en-tête de réponse Mcp-Session-Id, que le client renvoie dans les requêtes suivantes. Chaque session est liée côté serveur au user_id qui l'a ouverte. Présenter un identifiant de session avec un autre identifiant d'accès est refusé au lieu d'être rattaché en silence, si bien qu'un identifiant de session divulgué ne suffit pas, à lui seul, à lire un compte.
MCP stdio, MCP Streamable HTTP et l'API REST sur /v1 s'exécutent toutes via le même pipeline runTool(). L'autorisation, la validation des arguments, le contrôle des droits par propriété, la vérification de l'abonnement, le limiteur de débit et la piste d'audit sont appliqués à cet unique endroit, et ne peuvent donc pas diverger d'un transport à l'autre. Un outil ajouté au registre est accessible, et soumis aux mêmes règles, sur les trois.
Deux mécanismes, choisis selon les capacités du client. L'interface Connecteurs de Claude utilise OAuth 2.1 ; les clients à fichier de configuration et les clients sans interface présentent une clé API statique.
Le serveur MCP est le serveur de ressources ; l'app sur tool.gscwizard.com est le serveur d'autorisation. Claude parcourt la chaîne sans intervention :
Un GET non authentifié sur la ressource indique le serveur d'autorisation et les scopes.
Claude récupère /.well-known/oauth-authorization-server auprès de l'émetteur pour localiser les points de terminaison.
Claude s'enregistre lui-même et reçoit son propre identifiant client. C'est pourquoi les champs d'identifiant et de secret client restent vides lors de l'ajout du connecteur : les remplir court-circuite l'enregistrement et casse le flux.
Un flux authorization_code avec challenge S256, renouvelable. La connexion à Google et le consentement ont lieu sur le serveur d'autorisation, jamais dans Claude.
Métadonnées de ressource
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"]
}Métadonnées du serveur d'autorisation
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"
]
}Deux contrôles avant l'émission d'un jeton. Le point de terminaison d'autorisation exige un abonnement actif et au moins une propriété Search Console connectée. Un compte qui n'a ni l'un ni l'autre est invité à les mettre en place d'abord, plutôt que de recevoir un jeton que tous les appels d'outils suivants rejetteraient.
Les clés ont le préfixe gscw_live_, se créent sous Compte → Clés API et se présentent sous la forme Authorization: Bearer. Seul un hash SHA-256 est stocké : la clé en clair n'est affichée qu'une fois, à la création, et ne peut pas être récupérée ensuite ; faire tourner une clé revient à en émettre une nouvelle et à révoquer l'ancienne.
Chaque clé porte un scope fixé à la création. Une clé en lecture seule ne peut pas appeler un outil de modification : la vérification s'exécute dans le pipeline avant le gestionnaire, de sorte que la lecture seule est une propriété structurelle de l'identifiant, et non une consigne dont on pourrait convaincre le modèle de s'écarter.
Quatre interfaces Claude, trois mécanismes de branchement différents.
Paramètres → Connecteurs → Ajouter un connecteur personnalisé. Saisissez l'URL et laissez les deux champs OAuth vides.
URL: https://mcp.gscwizard.com/mcp
OAuth Client ID: (leave blank)
OAuth Secret: (leave blank)Une seule commande enregistre le serveur distant avec un en-tête de clé. Vérifiez avec /mcp dans une session.
claude mcp add --transport http gsc-wizard \
https://mcp.gscwizard.com/mcp \
--header "Authorization: Bearer gscw_live_..."Le fichier de configuration de Claude Desktop ne lance que des serveurs stdio locaux : une entrée "type": "http" échoue donc à la validation. Passez par mcp-remote (Node.js requis) pour relier le serveur distant si vous voulez une clé statique plutôt qu'OAuth.
{
"mcpServers": {
"gsc-wizard": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://mcp.gscwizard.com/mcp",
"--header", "Authorization: Bearer gscw_live_..."
]
}
}
}Déclarez-le comme serveur MCP HTTP dans les options de l'agent ; le SDK gère la poignée de main JSON-RPC.
mcpServers: {
"gsc-wizard": {
type: "http",
url: "https://mcp.gscwizard.com/mcp",
headers: { Authorization: `Bearer ${process.env.GSCW_API_KEY}` }
}
}Utilisez une clé en lecture seule pour tout ce qui tourne sans surveillance. Si l'agent n'a besoin que de quelques outils, restreignez aussi la liste des outils autorisés côté client : un périmètre plus réduit coûte moins cher à chaque tour et limite ce qu'une injection de prompt présente dans le contenu d'une page récupérée pourrait atteindre.
128 outils enregistrés : 96 de lecture et 32 de modification, tous disponibles pour chaque compte. Chaque outil publie des annotations MCP (readOnlyHint, destructiveHint, openWorldHint, title), ce qui permet à un client de les présenter ou de les filtrer sans coder les noms en dur.
| Groupe | Outils représentatifs | Scope |
|---|---|---|
| Analyse de la recherche | query_search_analytics, query_top_queries, query_top_pages, query_countries, query_devices | lecture |
| Analyse | find_decaying_content, analyze_cannibalization, get_ranking_changes, score_opportunities, analyze_ctr_curve | lecture |
| Détection | detect_anomalies, detect_change_points, forecast_traffic, get_decay_overview | lecture |
| Indexation | inspect_url, bulk_inspect_urls, get_indexing_tracker, list_sitemaps | lecture |
| Autres sources | Bing Webmaster, GA4, Yandex, Merchant Center, Core Web Vitals | lecture |
| Modifications | submit_sitemap, submit_indexnow_urls, create_topic_cluster, create_annotation, add_site | écriture |
L'analyse s'exécute côté serveur. Le déclin, la cannibalisation, la modélisation de la courbe de CTR, la détection de points de rupture et la notation des opportunités sont calculés par le serveur et renvoyés sous forme de résultats. Le modèle reçoit des conclusions et les lignes qui les étayent, pas un export brut à analyser statistiquement : c'est moins cher à chaque tour et cela évite toute dérive de calcul.
Le catalogue complet, outil par outil, avec les schémas d'arguments et des exemples de charges utiles, est généré sur mcp.gscwizard.com et testé en couverture par rapport au registre : il ne peut donc pas prendre du retard en silence sur les outils réellement enregistrés.
Le risque n'est pas le plafond de lignes, mais le plafond non annoncé. Un modèle qui reçoit exactement limit lignes ne peut pas distinguer une réponse complète d'une réponse tronquée, et affirmera avec aplomb « votre site a 100 requêtes ». Les outils à plafond de lignes récupèrent donc une ligne témoin en trop, renvoient au plus limit lignes et joignent un bloc qui indique la fenêtre, s'il y a une suite, et l'appel exact à faire ensuite.
"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 renvoie 100 lignes par défaut, et non plus les 1 000 d'origine : à 1 000, un seul appel produisait environ 58k tokens, soit plus de contexte que toute la liste des outils. Les outils d'analyse classés plafonnent dans le noyau d'analyse partagé et n'ont pas de bloc de pagination.
Aucun outil n'exige que l'appelant connaisse la date du jour. Une fenêtre omise correspond par défaut aux 28 derniers jours consolidés, en tenant compte du délai de remontée d'environ trois jours de Search Console, et la période de comparaison correspond par défaut à la période précédente de même durée. L'analyseur de dates convertit aussi les valeurs null, "null" et "", que les clients LLM émettent couramment, en « utiliser la valeur par défaut » au lieu d'échouer à la validation, ce qui supprime toute une catégorie de boucles de nouvelles tentatives.
| Champ | Signification |
|---|---|
dataSource | clickhouse ou api : le chemin qui a servi cette lecture |
settledThrough | Dernière date avec des données complètes |
dataMaturity | Première date incomplète, fuseau horaire de référence, sonde utilisée |
note | Réserve sur la fraîcheur, rédigée pour que le modèle la relaie |
Ces champs existent pour qu'une réponse puisse être sourcée. Quand Claude annonce que le trafic a baissé la semaine dernière, c'est settledThrough qui distingue une vraie baisse du délai de remontée des données, première cause de fausses alertes dans l'analyse automatisée de Search Console.
La plupart des lectures n'appellent pas l'API Search Console. Les données de performance historiques sont ingérées dans un entrepôt ClickHouse, et les lectures éligibles y sont servies : un historique plus long que la fenêtre de 16 mois de l'API, et aucun échantillonnage côté API sur les propriétés à forte cardinalité.
Huit outils d'analyse de la recherche (query_search_analytics, query_top_queries, query_top_pages, query_countries, query_devices, get_site_summary, get_query_performance, get_page_performance) et onze outils d'analyse.
Les requêtes qui nécessitent searchAppearance, le type googleNews, trois dimensions distinctes ou plus, ou la pagination. Ainsi que toute propriété dont le remplissage de l'historique n'est pas terminé.
Le routage est automatique et se fait requête par requête ; l'appelant ne choisit pas. Les lectures de l'entrepôt utilisent un rôle en lecture seule et une politique de lignes liée au compte : la frontière entre clients est donc garantie par la base de données, et pas seulement par le constructeur de requêtes. Le serveur n'écrit jamais dans l'entrepôt lors d'une lecture.
Conséquence pratique pour Claude : l'entrepôt a environ deux jours de retard sur le temps réel, contre environ trois pour l'API en direct, et les réponses servies par l'entrepôt l'indiquent dans note. Demandez « la semaine dernière » et vous obtenez des semaines complètes, pas une fin de période partielle présentée comme une chute.
| Interface | Par minute | Par heure |
|---|---|---|
| MCP | 60 | 1 000 |
REST /v1 | 180 | 2 000 |
Comptées par utilisateur et par interface. Un appel limité indique quelle fenêtre a été dépassée et combien de secondes attendre, ce qui permet à un agent de temporiser avec précision plutôt qu'à l'aveugle. Les inspections d'URL ont un quota quotidien distinct côté Google, consultable avec get_inspection_quota.
| Condition | Comportement |
|---|---|
| Une clé en lecture appelle un outil d'écriture | Refusé avant l'exécution du gestionnaire |
| Propriété non connectée ou non accordée | Le contrôle des droits refuse et en donne la raison |
| Intégration non configurée | Renvoie notConfigured: true avec une raison au lieu de lever une erreur |
| Identifiant de session rejoué avec d'autres identifiants d'accès | Refusé, pas rattaché |
| OAuth Google tout juste effectué, propriété non propagée | Google renvoie un 403 pendant une courte période ; réessayez peu après la connexion |
La convention notConfigured compte pour les agents : une connexion GA4 ou Merchant Center non configurée est un état à signaler, pas une exception à retenter, et faire la différence évite qu'une boucle épuise sa limite de débit sur une situation qu'aucune nouvelle tentative ne peut résoudre.
Les identifiants Google n'atteignent jamais Claude. Les jetons Search Console sont conservés côté serveur, chiffrés au repos, et renouvelés par le serveur. Claude détient un jeton ou une clé propre à GSC Wizard, pas à Google.
Le scope est structurel. Un identifiant en lecture seule ne peut pas atteindre un gestionnaire de modification. Ce contrôle est appliqué dans le pipeline partagé, et vaut donc à l'identique pour MCP et REST.
Les clés sont hachées. SHA-256 uniquement ; la clé en clair n'est affichée qu'une fois. La révocation est immédiate.
Chaque appel est journalisé pour l'audit, qu'il réussisse ou échoue : les lectures sans leurs arguments, les écritures avec. Les actions d'un agent peuvent être reconstituées après coup.
L'accès aux propriétés se règle droit par droit. Claude ne voit que les propriétés connectées au compte, et les propriétés partagées portent leurs propres autorisations par accès, y compris pour les bénéficiaires en lecture seule, qui ne peuvent pas consommer le budget de crawl d'un propriétaire.
Pour un agent sans surveillance, la configuration recommandée est une clé en lecture seule, plus une liste d'autorisation côté client limitée aux outils dont la tâche a besoin. Cette combinaison borne les dégâts possibles d'une injection de prompt arrivant par n'importe quel contenu que l'agent récupère.
Le plus souvent, un identifiant ou un secret client a été renseigné. Le serveur utilise l'enregistrement dynamique du client : les deux champs doivent donc rester vides. Supprimez le connecteur, ajoutez-le à nouveau avec la seule URL, et laissez Claude s'enregistrer lui-même.
Vérifiez les deux contrôles appliqués par le point de terminaison d'autorisation : un abonnement actif, et au moins une propriété Search Console connectée au compte. Un jeton émis pour un compte sans propriété connectée n'a rien qu'il soit autorisé à lire.
Le fichier de configuration ne lance que des processus stdio locaux : "type": "http" n'y est donc pas une entrée valide. Utilisez l'interface Connecteurs, ou passez par npx -y mcp-remote comme indiqué plus haut.
Google a besoin d'un court délai pour propager une autorisation Search Console qui vient d'être accordée. Un 403 dans les premières minutes suivant la connexion est généralement dû à cette propagation plutôt qu'à une erreur de permissions ; réessayez avant de relancer le flux OAuth.
Vérifiez dataSource et settledThrough dans la réponse. Une lecture servie par l'entrepôt et une vue de l'interface sur la même plage nominale peuvent se terminer à des dates différentes, et l'interface échantillonne elle-même les rapports de requêtes à forte cardinalité, ce que l'entrepôt ne fait pas.
Il s'agit généralement d'une boucle de nouvelles tentatives sur une réponse notConfigured, qu'aucun nouvel essai ne peut résoudre, ou d'une itération page par page alors qu'un seul outil d'analyse répondrait en un appel. Privilégiez les outils d'analyse côté serveur plutôt que de récupérer des lignes pour raisonner dessus.
Streamable HTTP sur https://mcp.gscwizard.com/mcp. La continuité de session passe par l'en-tête de réponse Mcp-Session-Id, et chaque session est liée côté serveur à l'utilisateur qui l'a ouverte : un identifiant de session rejoué avec d'autres identifiants d'accès est donc refusé. Un point d'entrée stdio existe pour les builds locaux, et une interface REST sur /v1 sert du HTTP+JSON classique via le même pipeline.
Le serveur MCP est le serveur de ressources OAuth 2.1 et publie des métadonnées de ressource protégée RFC 9728 qui désignent tool.gscwizard.com comme serveur d'autorisation. Claude lit ensuite les métadonnées RFC 8414 de cet émetteur, s'enregistre via l'enregistrement dynamique du client RFC 7591, puis exécute un flux authorization_code avec PKCE S256. C'est pourquoi les champs d'identifiant et de secret client restent vides.
mcp:read et mcp:write. Les jetons Bearer ne sont acceptés que dans l'en-tête Authorization. Les clés API portent la même distinction sous forme d'un scope fixé à la création : une clé de lecture ne peut pas appeler un outil de modification, si bien que le contrôle est structurel et non une simple consigne dans un prompt.
128 outils enregistrés : 96 de lecture et 32 de modification, tous disponibles pour chaque compte. Les trois interfaces s'exécutent via un seul pipeline runTool() : l'autorisation, la validation, le contrôle des droits et la piste d'audit ne peuvent donc pas diverger entre elles.
Le fichier de configuration de Claude Desktop ne lance que des serveurs stdio locaux, si bien qu'une entrée HTTP distante échoue à la validation. Utilisez l'interface Connecteurs, qui parle nativement Streamable HTTP avec OAuth, ou reliez le serveur distant via npx mcp-remote, qui nécessite Node.js et permet de présenter à la place une clé API statique gscw_live_.
L'interface MCP autorise 60 appels par minute et 1 000 par heure et par utilisateur. L'interface REST sur /v1 autorise 180 appels par minute et 2 000 par heure. Les limites sont comptées par utilisateur et par interface, et un appel limité renvoie le nombre de secondes à attendre avant de réessayer.
Pas pour la plupart des lectures. Huit outils d'analyse de la recherche et onze outils d'analyse sont routés automatiquement vers un entrepôt ClickHouse qui contient l'historique Search Console du compte, ce qui offre un historique plus long et évite l'échantillonnage de l'API. Chaque réponse porte un champ dataSource valant clickhouse ou api, ainsi que settledThrough et une note de fraîcheur lorsqu'elle est servie par l'entrepôt. Les requêtes qui nécessitent searchAppearance, le type googleNews, trois dimensions distinctes ou plus, ou la pagination retombent toujours sur l'API en direct.
Les outils à plafond de lignes récupèrent une seule ligne témoin en trop et renvoient un bloc de pagination qui indique la fenêtre, s'il reste des lignes et l'appel exact à faire ensuite. La troncature silencieuse est le mode de défaillance qu'on cherche à éliminer : un modèle qui reçoit exactement limit lignes ne peut pas distinguer une réponse complète d'une réponse tronquée. query_search_analytics renvoie 100 lignes par défaut parce qu'à 1 000, un seul appel produisait environ 58k tokens, soit plus de contexte que toute la liste des outils.
Le guide de configuration pas à pas pour Claude web, desktop et Claude Code.
La présentation du produit : ce que fait le serveur avec chaque client MCP.
L'interface GA4 du même serveur : sessions, événements clés, ecommerce et trafic des LLM.
L'interface Yandex du même serveur : indice de qualité du site, requêtes et historique d'indexation.
L'interface shopping du même serveur : fiches gratuites, problèmes produits, prix et audit de flux.
Cursor, VS Code, Windsurf, Gemini, Grok et ChatGPT, en plus de Claude.
Les mêmes données dans l'app Gemini, Antigravity CLI, Gemini Enterprise ou l'API Gemini.
Un exemple complet d'agent autonome bâti sur ce serveur et sur un MCP de crawler.
Comment les serveurs de données first-party se comparent aux plateformes tierces.
Un seul point de terminaison, OAuth ou une clé limitée, et 128 outils sur les propriétés que vous possédez déjà.
Des méthodes concrètes pour GSC et GA4, les nouveautés du produit et des expériences SEO. Pas de spam, désinscription à tout moment.