Ce guide répond à : à quoi sert Agent Registry pour un serveur MCP ? Comment y déclarer sheets-mcp et ses 17
outils, par script, Terraform ou console ? Comment un agent ADK le retrouve-t-il par son nom ?
Testé en vrai (14 octobre 2026) :
./scripts/deployer.sh registrea créé « Google Sheets (MCP) », et la liste du registre montre les 17 outils avec leurs annotations. Au 1er essai, Agent Registry a exigé le schéma des paramètres (inputSchema) de chaque outil : c'est corrigé dansgen_toolspec.py.
Deux entrées : « Google Sheets (MCP) » (17 outils) et « Google Slides (MCP) » (20 outils), depuis
terraform/toolspec-sheets.jsonettoolspec-slides.json. Les exemples ci-dessous parlent de Sheets ; Slides est identique.
1. À quoi ça sert
Agent Registry est le catalogue des agents et des serveurs MCP de l'organisation. Y déclarer sheets-mcp, c'est :
- le rendre visible : console → Agent Registry → onglet MCP servers, avec la description et les outils ;
- gouverner : savoir quels outils existent, lesquels sont en lecture seule ou destructifs ;
- le retrouver par son nom depuis un agent ADK, sans écrire son URL en dur : si l'URL change, on met le registre à jour, pas les agents.
Le registre ne remplace ni le connecteur (10-5) ni l'agent (10-6) : il les accompagne.
2. Pourquoi une liste d'outils (toolspec.json)
Une déclaration manuelle enregistre l'URL, mais Agent Registry n'interroge pas le serveur. Pour que les outils
soient visibles, il faut les fournir : c'est terraform/toolspec.json. Il est généré depuis le code, donc il ne
peut pas diverger :
python3 scripts/gen_toolspec.pyRésultat obtenu : terraform/toolspec.json : 17 outils, 6917 octets (maximum Agent Registry : 10 Ko).
Format (extrait) :
{"tools":[{"name":"read_range","description":"Lit les valeurs d'une plage (liste de lignes).",
"inputSchema":{"properties":{"spreadsheet_id":{"type":"string"},"range_a1":{"type":"string"},"render":{"enum":[…],"type":"string"}},
"required":["spreadsheet_id","range_a1"],"type":"object"},
"annotations":{"title":"Lire une plage","readOnlyHint":true}}, …]}Le bouton Import tools de la console ne marche que pour un serveur public. Le nôtre est privé, d'où ce fichier.
3. Déclarer
Script : ./scripts/deployer.sh registre. Il lance :
gcloud agent-registry services create sheets-mcp --location=europe-west1 --project=$PROJET \
--display-name="Google Sheets (MCP)" --description="Lecture et modification de Google Sheets au nom de l'utilisateur…" \
--mcp-server-spec-type=tool-spec --mcp-server-spec-content="$(cat terraform/toolspec.json)" \
--interfaces="url=$MCP_URL,protocolBinding=jsonrpc"
gcloud agent-registry mcp-servers list --location=europe-west1 --project=$PROJETTerraform : google_agent_registry_service.mcp (register_in_agent_registry = true, par défaut).
Console : Agent Registry → europe-west1 → MCP servers → Add MCP server :
- nom, description ;
- endpoint
…/mcp; - collez
toolspec.json; - Next → cochez les outils → Save.
Région : une région (europe-west1) ou global. La déclaration manuelle n'est pas possible en eu ni en
us (documentation Google).
Droit : roles/agentregistry.editor sur le projet. ./scripts/deployer.sh verifier le contrôle.
Déclaration automatique : gcloud run deploy … --functional-type=mcp-server déclare un service Cloud Run tout
seul, dans le même projet. Nous déclarons à la main, pour publier la liste des outils d'un serveur privé et garder
une déclaration relisible.
4. Un agent ADK qui retrouve le serveur par son nom
Le projet 04 le fait (04-mcp-server-cloud-run-registry/agent/shop_agent/agent.py) :
from google.adk.integrations.agent_registry import AgentRegistry
registry = AgentRegistry(project_id=PROJET, location="europe-west1", header_provider=entetes)
serveur = next(s for s in registry.list_mcp_servers().get("mcpServers", []) if s.get("displayName") == "Google Sheets (MCP)")
outils = registry.get_mcp_toolset(serveur["name"])Notre agent (10-6) garde une URL fixe (MCP_URL) : c'est plus simple, et il n'a pas de dépendance au registre au
démarrage. Passez au registre quand plusieurs agents partagent le serveur.
4 bis. La découverte par Agent Gateway (vue dans la console Acme)
La console Gemini Enterprise de Acme montre, dans la section « MCP servers » de l'app :
- « MCP servers from your project's configured Agent Gateway registries, or a custom … » ;
- le bandeau « Configure Agent Gateway to discover and use MCP servers from your … ».
Autrement dit, quand une Agent Gateway est configurée pour l'app et reliée à des registres, les serveurs MCP
déclarés dans Agent Registry (comme sheets-mcp, partie 3) apparaissent directement dans cette liste. Il n'y a
alors plus besoin de les saisir à la main.
Ce qui reste pareil :
- le serveur est privé : le compte de l'app doit avoir
run.invoker(10-5, étape 3) ; - le jeton de l'utilisateur doit venir d'un client OAuth accepté par le serveur.
Statut : vu dans la console, pas encore testé (il faut une app et une Agent Gateway). Le chemin manuel « Custom MCP Server » (10-5) marche sans gateway. Référence : Route Gemini Enterprise traffic through Agent Gateway.
5. Si ça bloque
| Symptôme | Cause → solution |
|---|---|
PERMISSION_DENIED à la création | roles/agentregistry.editor manquant, ou l'API agentregistry.googleapis.com bloquée par l'organisation (l'étape est facultative) |
INVALID_ARGUMENT sur la location | eu ou us : prendre europe-west1 (REGISTRE_LOCATION) |
invalid MCP tool spec content: tools.0: inputSchema is required | Ancien gen_toolspec.py : prendre la version actuelle (schémas inclus) |
| Aucun outil affiché | toolspec.json absent ou vide : python3 scripts/gen_toolspec.py, puis supprimer et redéclarer |
| Taille refusée | Plus de 10 Ko : raccourcir les descriptions (le script s'arrête de lui-même au-delà) |
Source : Register MCP servers.