Projet 10 : des serveurs MCP Google Sheets et Google Slides pour Gemini Enterprise
Des serveurs MCP Google Sheets (17 outils) et Google Slides (20 outils) branchés à Gemini Enterprise : local, shell, Terraform, console.
Nouveau : Google Slides. Un 2e serveur MCP (20 outils), même sécurité, même image, même client OAuth : 10-13.
Un serveur MCP qui donne à Gemini Enterprise une interaction native et complète avec Google Sheets :
- rechercher un classeur par son nom, lire, chercher, écrire ;
- formules, ajout de lignes, onglets, mise en forme, tri ;
- toute l'API Sheets.
Il agit toujours au nom de l'utilisateur connecté, avec son propre compte Google (OAuth). Il est hébergé sur Cloud Run (privé), et branché sur Gemini Enterprise de trois façons :
| # | Chemin | Guide |
|---|---|---|
| 1 | Connecteur natif « Custom MCP Server » : les 17 outils deviennent des actions de l'assistant | 10-5 |
| 2 | Agent ADK « Assistant Google Sheets » (A2A sur Cloud Run, ou Agent Runtime) qui utilise le serveur | 10-6 |
| 3 | Serveur officiel de Google (sheetsmcp.googleapis.com, preview) : comparaison et branchement | 10-10 |
| + | Agent Registry : le serveur et ses outils dans le catalogue de l'organisation | 10-7 |
Vous voulez juste mettre le MCP dans l'assistant principal de Gemini Enterprise ? Suivez un seul guide, du début à la fin : 10-12 Pas à pas : le MCP dans l'assistant principal (14 étapes, avec ce qu'on doit voir à chaque fois et les messages tout prêts pour les admins).
Projets à connaître avant :
Les guides, dans l'ordre
| Guide | Contenu |
|---|---|
| 10-0 Exploration | MCP en 2 minutes, les 4 chemins, lequel choisir, les deux jetons, ce qui a été vérifié |
| 10-1 Le serveur en local | Le code, les 17 outils, la sécurité, l'installation, les tests (résultats réels), le piège des formules fr_FR |
| 10-2 Script | deployer.sh étape par étape : verifier, preparer, mcp, agent, agent-runtime, registre, fiche, droits-app, autorisation, ajouter-app, tester, nettoyer |
| 10-3 Terraform | La même chose en Terraform ; plans réels (24, 26 ou 28 ressources) |
| 10-4 Console | La même chose clic par clic (une seule commande : la construction de l'image) |
| 10-5 Connecteur natif | Client OAuth, règles d'organisation, data store « Custom MCP Server », actions, premier usage |
| 10-6 Agent | Pourquoi un agent, les deux jetons dans le code, déploiement, autorisation, ajout à l'app (script et console) |
| 10-7 Agent Registry | Déclarer le serveur et ses outils ; le retrouver depuis un agent |
| 10-8 Tests | Tous les tests, comment obtenir un jeton de test, simuler l'app, résultats obtenus |
| 10-9 Sécurité et exploitation | Les protections, journaux, révocation, coût, dépannage, suppression |
| 10-10 Serveur officiel | sheetsmcp.googleapis.com : testé, comparé, comment le brancher |
| 10-11 Les droits | Tous les droits sur une page : les voir en lecture seule (Cloud Run, IAM, Policy Troubleshooter), les donner et les retirer en clics |
| 10-12 Pas à pas, assistant principal | Le parcours complet du chemin 1, de zéro au premier « Autoriser », en 14 étapes, pour tout le monde |
| 10-13 Google Slides | Le serveur MCP Slides : 20 outils, tests réels, déploiement, connecteur (ce qui change par rapport à Sheets), agent Sheets + Slides, comparaison avec le serveur officiel |
| 10-14 Un serveur à la fois | Sheets seul, Slides seul, ou l'un puis l'autre : par script, Terraform et console, et le test de chaque serveur séparément |
| 10-15 « À la 3S » | Déployer par le pipeline (GitHub Actions + Terraform, état GCS, sans clé), comme sur la 3S de Acme : dossier stack-3s/, socle partagé avec le 09, migration d'un état local |
Chaque étape, par chaque méthode
| Étape | Script | Terraform | Console (clic par clic) |
|---|---|---|---|
| Vérifier vos droits, la facturation, les API (lecture seule) | deployer.sh verifier | – | 10-11, partie 2 |
| Activer les API | preparer | google_project_service | 10-4, étape 1 |
| Comptes de service et leurs rôles | preparer | google_service_account, …iam_member | 10-4, étape 2, 10-11, 3.1 |
| Client OAuth | – (pas d'API Google) | – | 10-5, étape 1 |
| Construire les images | mcp, agent | terraform_data.image | 1 commande gcloud builds submit : 10-4, étape 3 |
| Serveurs MCP Sheets et Slides (Cloud Run) | mcp (ou mcp sheets, mcp slides) | google_cloud_run_v2_service.mcp["sheets"], ["slides"] | 10-4, étape 4 (2 fois ; PRODUIT=slides pour Slides) |
| Agent A2A (Cloud Run) | agent | google_cloud_run_v2_service.agent | 10-4, étape 5 |
| Agent sur Agent Runtime | agent-runtime | google_vertex_ai_reasoning_engine | Script seulement (pas de téléversement de code dans la console), puis à voir dans la console |
| Droit de l'agent sur le serveur (D) | agent | …service_iam_member.mcp | 10-11, 3.2 |
| Agent Registry | registre | google_agent_registry_service | 10-4, étape 8 |
| Droits de l'app ①a, ①b, ② | droits-app | …iam_member (avec NUM_APP) | 10-11, 3.3 à 3.5 |
| Règles d'organisation | – | – | 10-5, étape 2 |
| Connecteur « Custom MCP Server » | – (pas d'API publique) | – | 10-5, étapes 4 à 6 |
| Autorisation OAuth de l'agent | autorisation | – (le secret n'entre pas dans Terraform) | Pendant l'ajout : 10-6, partie 5 |
| Ajouter l'agent à l'app | ajouter-app | – | 10-6, partie 5 |
| Agent User pour les utilisateurs | – | – | 10-11, 3.6 |
| Tout ce qu'il faut saisir dans l'app | fiche | terraform output | – |
| Tester comme l'app | tester | – | Le chat (10-5, étape 7) |
| Tout supprimer | nettoyer | terraform destroy | 10-11, partie 4, 10-9, partie 4 |
Démarrage rapide (script)
cd 10-mcp-google-sheets-gemini-enterprise
# 1. Client OAuth (console, 2 min) : docs/10-5 étape 1 ; son ID dans OAUTH_CLIENT_IDS de config/10-mcp.env
source scripts/config.sh config/10-mcp.env
./scripts/deployer.sh verifier # lecture seule : facturation, API, vos droits
./scripts/deployer.sh preparer # API + 3 comptes de service
./scripts/deployer.sh mcp # le serveur MCP (Cloud Build + Cloud Run privé)
./scripts/deployer.sh agent # l'agent A2A (facultatif) ; agent-runtime pour Agent Runtime
./scripts/deployer.sh registre # Agent Registry (facultatif)
./scripts/deployer.sh fiche # TOUT ce qu'il faut saisir dans Gemini EnterpriseSur les projets Acme : quoi faire, où
Les tests réels ont été faits sur deux projets sans organisation et sans Gemini Enterprise (second-project pour
les agents, main-project pour l'app ; config/10-mcp-test.env). Chez Acme, il y a une organisation et une app.
Voici, dans l'ordre, ce qu'il faut faire et dans quel projet. Les numéros renvoient aux guides.
| # | Quoi | Projet | Qui | Différence avec les projets de test |
|---|---|---|---|---|
| 1 | config/10-mcp.env : PROJET=aiml-gemini-ent-exp-0zga, NUM_PROJET=433175138344, ALLOWED_DOMAINS=acme.example | – | vous | Test : config/10-mcp-test.env |
| 2 | ./scripts/deployer.sh verifier : vos droits (groupes compris) | agents | vous | Test : propriétaire. Chez Acme, les rôles peuvent manquer : la ligne MANQUANT dit lequel demander |
| 3 | Client OAuth : audience Internal, les 4 portées, les 2 URI de redirection, ID → OAUTH_CLIENT_IDS (10-5, étape 1) | agents | vous | Test : pas de client. Un compte de service jouait l'utilisateur (« Internal » n'existe pas sans organisation) |
| 4 | preparer, mcp, agent (et/ou agent-runtime), registre (10-2) | agents | vous | Identique : testé en vrai |
| 5 | Règles d'organisation : « Disable custom MCP server connector » sur Off, domaines de sortie (sheets-mcp-433175138344.europe-west1.run.app, accounts.google.com, oauth2.googleapis.com), custom_mcp si la règle est appliquée (10-5, étape 2) | app | admin org (roles/orgpolicy.policyAdmin) | N'existe pas sur les projets de test (pas d'organisation) |
| 6 | NUM_APP=523307489860 ./scripts/deployer.sh droits-app : ① run.invoker sur sheets-mcp et sheets-agent, ② discoveryengine.serviceAgent (10-5, étape 3) | agents | vous | Identique : testé en vrai, d'un projet à l'autre |
| 7 | Connecteur : app → section MCP servers → Custom MCP Server → Add MCP server ; champs : ./scripts/deployer.sh fiche (10-5, étapes 4 à 6) | app | admin de l'app | Test : pas d'app. Écran vérifié sur tes captures Acme |
| 8 | Agent : autorisation + ajouter-app, ou la console (10-6, parties 4 et 5) ; Agent User pour le groupe | app | admin de l'app | Test : simulé avec les mêmes appels que l'app |
| 9 | L'admin Google Workspace autorise l'ID client si l'accès des applications tierces est restreint (10-9, partie 2) | Workspace | admin Workspace | N'existe pas sur les projets de test |
| 10 | Premier usage : « Pour Google Sheets, qui suis-je ? » → Autoriser → votre e-mail @acme.example (10-5, étape 7) | le chat | chaque utilisateur | Test : jeton du compte de test |
Ce qui est identique et déjà prouvé : le code, le déploiement (script et Terraform), les droits d'un projet à l'autre, les deux en-têtes, le contrôle du jeton et le journal d'audit. Ce qui ne peut se vérifier que chez Acme : les étapes 5, 7, 8, 9 et 10 (organisation, app, consentement réel).
Fichiers
mcp_server/ les serveurs : noyau.py (jeton, appels Google, audit), outils_sheets.py (17 outils),
outils_slides.py (20 outils), main.py (PRODUIT=sheets|slides) ; fastmcp 4.1
agent/ l'agent ADK : sheets_agent/agent.py (McpToolset + header_provider), main.py (A2A), carte.py
cloudbuild.yaml construction des images dans Google Cloud (pas de Docker sur le poste)
config/10-mcp.env la configuration
scripts/ config.sh, deployer.sh, fiche.py, gen_toolspec.py, deployer_agent_runtime.py, pack.py
terraform/ main.tf, variables.tf, outputs.tf, versions.tf, toolspec-sheets.json, toolspec-slides.json
tests/ test_server.py, test_reel.py, test_reel_slides.py, test_agent_chaine.py, appel_a2a.py, appel_runtime.py
État des vérifications (14 octobre 2026)
Vérifié en vrai, sur Google Cloud :
-
le serveur MCP sur Cloud Run : 17 outils sur un vrai classeur,
403sans droit ; -
les appels venant du projet de l'app (droit ①) ;
-
l'agent A2A et l'agent Agent Runtime avec le vrai Gemini : lecture, écriture avec confirmation, suppression avec confirmation, message « Autoriser » ;
-
Agent Registry (17 outils) ;
-
droits-app,nettoyer; -
Terraform ;
-
le journal d'audit.
-
Google Slides : les 20 outils sur une vraie présentation, en local et sur Cloud Run ; ajout à un déploiement Sheets existant par Terraform, sans rien détruire ; Slides seul (script et
tester) ; l'agent qui lit un classeur puis construit une diapositive (vrai Gemini).
9 problèmes réels ont été trouvés et corrigés : 10-0, partie 6 (5) et 10-13 (4 : le Dockerfile ne copiait que main.py ; un commentaire en fin de ligne dans le Dockerfile ; deux outils de même nom dans l'agent ; des droits Sheets que Terraform aurait recréés au lieu de les garder).
Ce qui ne se vérifie que chez Acme : l'organisation et l'app. Voir la section précédente.