Référence du serveur

MCP Search Console pour Claude

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.

Point de terminaison
https://mcp.gscwizard.com/mcp
Transport
Streamable HTTP
Authentification
OAuth 2.1 (DCR + PKCE) or Bearer key
Outils
128 · 96 read / 32 write
01

Point de terminaison et transport

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 /mcpObligatoireJSON-RPC sur Streamable HTTP
/v1/*ObligatoireInterface REST pour les appelants hors MCP
GET /healthPublicRenvoie { ok, sessions }
GET /, /docsPublicCatalogue d'outils généré
/.well-known/oauth-protected-resourcePublicMétadonnées de ressource RFC 9728

Sessions

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.

Trois interfaces, un seul pipeline

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.

02

Authentification

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.

Chaîne de découverte OAuth 2.1

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 :

  1. 1

    Métadonnées de ressource protégée (RFC 9728)

    Un GET non authentifié sur la ressource indique le serveur d'autorisation et les scopes.

  2. 2

    Métadonnées du serveur d'autorisation (RFC 8414)

    Claude récupère /.well-known/oauth-authorization-server auprès de l'émetteur pour localiser les points de terminaison.

  3. 3

    Enregistrement dynamique du client (RFC 7591)

    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.

  4. 4

    Code d'autorisation + PKCE

    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.

Clés API

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.

03

Configuration du client

Quatre interfaces Claude, trois mécanismes de branchement différents.

Claude web et desktop (Connecteurs)

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)

Claude Code

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_..."

Fichier de configuration de Claude Desktop

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_..."
      ]
    }
  }
}

Par programmation (Claude Agent SDK)

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.

04

Périmètre des outils

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 recherchequery_search_analytics, query_top_queries, query_top_pages, query_countries, query_deviceslecture
Analysefind_decaying_content, analyze_cannibalization, get_ranking_changes, score_opportunities, analyze_ctr_curvelecture
Détectiondetect_anomalies, detect_change_points, forecast_traffic, get_decay_overviewlecture
Indexationinspect_url, bulk_inspect_urls, get_indexing_tracker, list_sitemapslecture
Autres sourcesBing Webmaster, GA4, Yandex, Merchant Center, Core Web Vitalslecture
Modificationssubmit_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.

05

Contrat de réponse

La pagination plutôt que la troncature silencieuse

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.

Les dates sont facultatives partout

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.

Champs de provenance

ChampSignification
dataSourceclickhouse ou api : le chemin qui a servi cette lecture
settledThroughDernière date avec des données complètes
dataMaturityPremière date incomplète, fuseau horaire de référence, sonde utilisée
noteRé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.

06

Routage des lectures

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é.

Servi par l'entrepôt

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.

Toujours l'API en direct

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.

07

Limites et erreurs

InterfacePar minutePar heure
MCP601 000
REST /v11802 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.

Les formes d'erreur à gérer

ConditionComportement
Une clé en lecture appelle un outil d'écritureRefusé avant l'exécution du gestionnaire
Propriété non connectée ou non accordéeLe contrôle des droits refuse et en donne la raison
Intégration non configuréeRenvoie notConfigured: true avec une raison au lieu de lever une erreur
Identifiant de session rejoué avec d'autres identifiants d'accèsRefusé, pas rattaché
OAuth Google tout juste effectué, propriété non propagéeGoogle 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.

08

Modèle de sécurité

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.

09

Dépannage

Le connecteur échoue dès son ajout

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.

L'autorisation aboutit mais chaque outil renvoie « unauthorized »

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.

Claude Desktop rejette l'entrée de configuration comme invalide

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.

Des erreurs 403 juste après la connexion à Google

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.

Les chiffres diffèrent de l'interface Search Console

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.

L'agent épuise sa limite de débit

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.

10

Questions fréquentes

Quel transport le MCP Search Console pour Claude utilise-t-il ?

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.

Comment fonctionne la découverte OAuth pour le connecteur Claude ?

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.

Quels scopes OAuth le serveur prend-il en charge ?

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.

Combien d'outils le serveur expose-t-il à Claude ?

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.

Pourquoi Claude Desktop rejette-t-il une entrée "type": "http" dans le fichier de configuration ?

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_.

Quelles sont les limites de débit ?

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.

Claude lit-il directement l'API Search Console ?

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.

Comment empêche-t-on le modèle de saturer son propre contexte ?

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.

Voir aussi

Pointez Claude vers vos propres données Search Console

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 astuces Search Console dans votre boîte mail

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.