Intégration Antigravity & Google Workspace

Débloquez la puissance de l'extension Google Workspace pour Gemini CLI directement dans votre IDE Antigravity.

Prérequis

Avant de commencer, assurez-vous que votre environnement est prêt :


Vérification : Lancez gemini extensions list pour localiser vos extensions.

Le Problème de Compatibilité

Vous avez peut-être essayé d'ajouter l'extension Workspace directement dans Antigravity et rencontré cette erreur :

Error: invalid tool name ###.$$$ which violates ^[a-zA-Z0-9_-]{1,64}$

La Cause : L'extension Google Workspace utilise des points dans les noms d'outils (ex: docs.create). Or, le client MCP de Google Antigravity impose une expression régulière stricte qui n'autorise que les caractères alphanumériques, les tirets bas et les traits d'union.

La Solution : Script Proxy

Pour contourner ce problème sans modifier le code source de l'extension (ce qui casserait les mises à jour), nous utilisons un script "Proxy" Node.js.

Ce script agit comme un intermédiaire :

  1. Sanitization : Il remplace les points par des tirets (docs.create -> docs-create) avant d'envoyer la liste à Antigravity.
  2. Restauration : Lorsqu'Antigravity appelle un outil, le proxy rétablit le nom original avant de transmettre la requête à l'extension.

Mise en place

Créez un fichier nommé proxy.js dans le même répertoire que l'extension (généralement ~/.gemini/extensions/google-workspace/dist/) et collez le code suivant :

/**
 * Proxy for the MCP server of Google Workspace Extension for Gemini CLI.
 * It converts characters in tool names that do not match the regex rule
 * into hyphens for the client.
 */
const { spawn } = require("child_process");
const readline = require("readline");
const path = require("path");
const targetScript = process.argv[2];

if (!targetScript) {
  console.error("Error: Please provide the target script file.");
  process.exit(1);
}

const toolNameMap = new Map();
const serverProcess = spawn("node", [targetScript], {
  stdio: ["pipe", "pipe", process.stderr],
});

function sanitizeToolName(originalName) {
  const sanitized = originalName.replace(/[^a-zA-Z0-9_-]/g, "-");
  if (sanitized !== originalName) {
    toolNameMap.set(sanitized, originalName);
  }
  return sanitized;
}

function restoreToolName(sanitizedName) {
  return toolNameMap.get(sanitizedName) || sanitizedName;
}

const inputRl = readline.createInterface({
  input: process.stdin, output: null, terminal: false,
});

inputRl.on("line", (line) => {
  try {
    const request = JSON.parse(line);
    if (request.method === "tools/call" && request.params && request.params.name) {
      const originalName = restoreToolName(request.params.name);
      request.params.name = originalName;
      serverProcess.stdin.write(JSON.stringify(request) + "\n");
    } else {
      serverProcess.stdin.write(line + "\n");
    }
  } catch (e) {
    serverProcess.stdin.write(line + "\n");
  }
});

const outputRl = readline.createInterface({
  input: serverProcess.stdout, output: null, terminal: false,
});

outputRl.on("line", (line) => {
  try {
    const response = JSON.parse(line);
    if (response.result && Array.isArray(response.result.tools)) {
      response.result.tools = response.result.tools.map((tool) => {
        if (tool.name) tool.name = sanitizeToolName(tool.name);
        return tool;
      });
      console.log(JSON.stringify(response));
    } else {
      console.log(line);
    }
  } catch (e) {
    console.log(line);
  }
});

serverProcess.on("close", (code) => process.exit(code));
process.on("SIGINT", () => {
  serverProcess.kill("SIGINT");
  process.exit();
});

Configuration Antigravity

Mettez à jour votre fichier mcp_config.json pour router le trafic via le proxy :

{
  "mcpServers": {
    "tools-for-mcp-server-extension": {
      "command": "node",
      "args": [
        "/home/{username}/.gemini/extensions/google-workspace/dist/proxy.js",
        "/home/{username}/.gemini/extensions/google-workspace/dist/index.js"
      ]
    }
  }
}
N'oubliez pas de remplacer {username} par votre nom d'utilisateur réel.

Validation & Tests

Une fois la configuration mise à jour, rafraîchissez les serveurs MCP. L'erreur devrait disparaître.

Vous pouvez maintenant tester l'intégration avec des prompts en langage naturel dans Antigravity :

Test 1 : Recherche Drive

Prompt : "Search a file 'sample file for searching' on Google Drive."

Test 2 : Lecture Google Docs

Prompt : "Get a text from a Google Document named 'sample Google Document'."

Résumé

Cette solution permet de combiner l'extension officielle Google Workspace (avec son authentification simplifiée) et l'IDE Google Antigravity. Le script proxy résout élégamment le conflit de nommage, ouvrant la voie à une automatisation agentique fluide et puissante.