Crea un agente de IA de Google Workspace con ADK y MCP

1. Introducción

En este codelab, aprenderás a crear un agente de IA de código profesional con el Kit de desarrollo de agentes (ADK) que se conecta directamente a los servidores MCP de Google Workspace oficiales.

El Protocolo de contexto del modelo (MCP) es un estándar abierto que permite que los modelos de IA usen de forma segura las herramientas que proporcionan los servidores remotos. El ADK es el framework de código profesional de Google para crear agentes autónomos. Si los combinas, puedes crear agentes altamente personalizados basados en tus datos de Gmail, Google Drive, Calendario de Google, Google Chat y Personas.

Para obtener documentación completa sobre las herramientas y la configuración disponibles, consulta Configura los servidores MCP de Google Workspace.

Actividades

  • Habilita los servicios MCP de Google Workspace en tu proyecto de Google Cloud.
  • Configura el consentimiento de OAuth y crea credenciales para las pruebas locales y la implementación de producción.
  • Crea un agente del ADK local que se conecte a los servidores MCP de Google Workspace con tokens estáticos.
  • Crea e implementa un agente del ADK listo para producción en Agent Runtime de Gemini Enterprise Agent Platform (GEAP) que use la inyección de tokens dinámicos.
  • Registra y prueba tu agente personalizado de forma nativa en Gemini Enterprise.

Requisitos

  • Un navegador web (p. ej., Chrome)
  • Un proyecto de Google Cloud con facturación habilitada
  • Una cuenta de Google Workspace (con las funciones inteligentes activadas)
  • Python 3.11 o una versión posterior instalada en tu máquina local
  • Google Cloud CLI (gcloud) instalada e inicializada

2. Antes de comenzar

Crea o selecciona un proyecto de Google Cloud

Opción de la consola

En la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

Opción de CLI

Crea un proyecto nuevo y configúralo como activo:

gcloud projects create YOUR_PROJECT_ID
gcloud config set project YOUR_PROJECT_ID

Habilita las APIs

Para usar los servidores MCP de Google Workspace, debes habilitar las APIs estándar de Google Workspace y los servicios MCP dedicados.

Opción de la consola

Haz clic en los siguientes botones para habilitarlos con el navegador web:

Opción de CLI Ejecuta estos comandos de la terminal:

# Enable standard GWS APIs
gcloud services enable chat.googleapis.com \
  drive.googleapis.com \
  calendar-json.googleapis.com \
  people.googleapis.com \
  gmail.googleapis.com
# Enable dedicated MCP services
gcloud services enable calendarmcp.googleapis.com \
  chatmcp.googleapis.com \
  drivemcp.googleapis.com \
  gmailmcp.googleapis.com \
  workspacemcp.googleapis.com

Configura la app de Chat

Para usar el servidor MCP de Google Chat, debes configurar una app de Chat en tu proyecto de Google Cloud.

  1. En la consola de Google Cloud, busca Google Chat API y haz clic en Google Chat API > Administrar > Configuración.
  2. Configura la app de Chat:
    • Nombre de la app: ADK Workspace Agent
    • URL del avatar: https://developers.google.com/chat/images/quickstart-app-avatar.png
    • Descripción: MCP server connection for ADK Agent
    • En Funcionalidad, desactiva Habilitar funciones interactivas.
    • En Registros, selecciona Registrar errores en Logging.
  3. Haz clic en Guardar.

3. Configura el consentimiento de OAuth y los clientes

Los servidores MCP de Google Workspace usan OAuth 2.0 para la autenticación segura. Debes configurar la pantalla de consentimiento de OAuth y crear dos IDs de cliente independientes: uno para el desarrollo local y otro para el agente implementado.

  1. En la consola de Google Cloud, haz clic en el menú de navegación (ícono de hamburguesa) en la esquina superior izquierda. Selecciona Google Auth Platform > Desarrollo de la marca (o APIs y servicios > Pantalla de consentimiento de OAuth si Google Auth Platform no está visible).
  2. Configura la Información de la app:
    • Nombre de la app: Workspace ADK Agent
    • Correo electrónico de asistencia del usuario: Selecciona tu correo electrónico.
  3. Configura Público: Selecciona Interno.
  4. Configura la Información de contacto: Ingresa tu dirección de correo electrónico y, luego, haz clic en Crear.
  5. Ve a Acceso a datos > Agregar o quitar permisos. En Agregar permisos de forma manual, agrega los siguientes permisos para otorgar acceso a los servicios requeridos:
    https://www.googleapis.com/auth/calendar.events
    https://www.googleapis.com/auth/calendar.calendars
    https://www.googleapis.com/auth/calendar.readonly
    https://www.googleapis.com/auth/chat.spaces
    https://www.googleapis.com/auth/chat.messages
    https://www.googleapis.com/auth/drive.readonly
    https://www.googleapis.com/auth/drive.file
    https://www.googleapis.com/auth/gmail.readonly
    https://www.googleapis.com/auth/gmail.compose
    https://www.googleapis.com/auth/directory.readonly
    https://www.googleapis.com/auth/userinfo.profile
    https://www.googleapis.com/auth/contacts.readonly
    https://www.googleapis.com/auth/cloud-platform
    
  6. Haz clic en Agregar a la tabla, luego en Actualizar y, por último, en Guardar.

Crea un ID de cliente para el desarrollo local (app de escritorio)

  1. En la consola de Google Cloud, navega a Google Auth Platform > Clientes (o APIs y servicios > Credenciales). Haz clic en Crear credenciales (o Crear cliente) y selecciona ID de cliente de OAuth.
  2. Selecciona App de escritorio como el tipo de aplicación.
  3. Asígnale el nombre Workspace Agent Local.
  4. Haz clic en Crear y descarga el archivo JSON. Guárdalo de forma local como client_secret.json.

4. Desarrollo y pruebas de agentes

En esta sección, se describe cómo crear el entorno del agente. Usaremos un enfoque de token estático para las pruebas, en el que recuperamos un token de OAuth con gcloud y lo pasamos a McpToolset del ADK. Puedes seguir estos pasos con tu máquina local o Google Cloud Shell.

Elige tu entorno: máquina local o Google Cloud Shell para configurar tu entorno de desarrollo. Ambos métodos usarán una secuencia de comandos de Python compartida para la autenticación, lo que garantiza la coherencia en todas las plataformas.

1. Configura el directorio del entorno

Ejecuta los siguientes comandos en tu terminal para crear un directorio de proyecto y, luego, instalar los paquetes necesarios.

  • Para Google Cloud Shell: Primero, haz clic en el ícono Activar Cloud Shell (>_) en la barra de herramientas superior derecha de la consola de Google Cloud.
  • Para la máquina local: Abre tu terminal estándar.
mkdir -p gws-adk-agent/workspace_agent
cd gws-adk-agent
python3 -m venv .venv
source .venv/bin/activate
pip install google-adk poetry google-auth-oauthlib

2. Prepara el archivo de credenciales

Debes colocar el archivo client_secret.json que descargaste en el paso anterior en la raíz de tu directorio gws-adk-agent.

  • Máquina local: Mueve o copia el archivo client_secret.json descargado al directorio gws-adk-agent.
  • Google Cloud Shell: Para crear el archivo, ejecuta el siguiente comando en Cloud Shell (reemplaza [PASTE_JSON_HERE] por el contenido JSON real):
cat << 'EOF' > client_secret.json
[PASTE_JSON_HERE]
EOF

3. Autentica y genera .env (auth.py)

Para controlar la autenticación de manera coherente y evitar problemas de enrutamiento de la CLI específicos del entorno, usamos una secuencia de comandos de Python personalizada con las bibliotecas de autenticación oficiales de Google. Esta secuencia de comandos administra el flujo de OAuth, guarda las credenciales predeterminadas de la aplicación (ADC) de forma local y genera el archivo .env requerido.

Crea un archivo llamado auth.py en el directorio gws-adk-agent y agrega el siguiente código:

import json
import os
from urllib.parse import urlparse, parse_qs
import google.auth
from google_auth_oauthlib.flow import InstalledAppFlow

CLIENT_SECRET_FILE = 'client_secret.json'

SCOPES = [
    "https://www.googleapis.com/auth/cloud-platform",
    "https://www.googleapis.com/auth/calendar",
    "https://www.googleapis.com/auth/chat.spaces.readonly",
    "https://www.googleapis.com/auth/chat.messages",
    "https://www.googleapis.com/auth/drive.readonly",
    "https://www.googleapis.com/auth/gmail.readonly",
    "https://www.googleapis.com/auth/gmail.compose",
    "https://www.googleapis.com/auth/directory.readonly",
    "https://www.googleapis.com/auth/contacts.readonly"
]

# Initialize the flow from the client secrets JSON
flow = InstalledAppFlow.from_client_secrets_file(
    CLIENT_SECRET_FILE,
    scopes=SCOPES,
    redirect_uri='http://localhost:8085/'
)

# Generate the Auth URL
auth_url, expected_state = flow.authorization_url(prompt='consent', access_type='offline')

print("\n=== GOOGLE OAUTH OFFICIAL LIBRARY FLOW ===")
print("1. Copy the following link and paste it into your browser (or click it if supported):\n")
print(auth_url)
print("\n2. Authorize the application.")
print("3. Your browser will redirect to a 'localhost' page (it will show a 'Site can't be reached' error, which is EXPECTED and normal).")
print("4. Copy the ENTIRE URL from your browser's address bar (including the http://localhost:8085/ part).\n")

# Get the redirected URL from the user
redirected_url = input("Paste the full localhost URL here: ").strip()

# Exchange the redirect URL for tokens
print("\nExchanging code for tokens...")
try:
    parsed_url = urlparse(redirected_url)
    query_params = parse_qs(parsed_url.query)

    returned_state = query_params.get('state', [None])[0]
    code = query_params.get('code', [None])[0]

    if not code:
        raise ValueError("No 'code' parameter found in the URL.")
    if returned_state != expected_state:
        raise ValueError("CSRF Warning! State mismatch.")

    flow.fetch_token(code=code)
    creds = flow.credentials
except Exception as e:
    print(f"Authentication failed: {e}")
    exit(1)

if not creds.refresh_token:
    print("\nError: No refresh token returned. You may need to revoke access and try again.")
    exit(1)

# Save Application Default Credentials
adc_data = {
    "client_id": creds.client_id,
    "client_secret": creds.client_secret,
    "refresh_token": creds.refresh_token,
    "type": "authorized_user"
}

adc_dir = os.path.expanduser("~/.config/gcloud")
os.makedirs(adc_dir, exist_ok=True)
adc_path = os.path.join(adc_dir, "application_default_credentials.json")

with open(adc_path, "w") as f:
    json.dump(adc_data, f, indent=2)

# Detect Project ID
try:
    _, project_id = google.auth.default()
except Exception:
    project_id = None

project_id = project_id or os.environ.get("GOOGLE_CLOUD_PROJECT", "YOUR_PROJECT_ID")

# Save to .env for local development (relative to project root)
env_dir = "workspace_agent"
os.makedirs(env_dir, exist_ok=True)
env_path = os.path.join(env_dir, ".env")

with open(env_path, "w") as f:
    f.write("GOOGLE_GENAI_USE_VERTEXAI=1\n")
    f.write(f"GOOGLE_CLOUD_PROJECT={project_id}\n")
    f.write("GOOGLE_CLOUD_LOCATION=us-central1\n")

print(f"\nSuccess! Application Default Credentials saved to: {adc_path}")
print(f"Environment variables saved to: {env_path}")
if project_id == "YOUR_PROJECT_ID":
    print("NOTE: Could not automatically detect Project ID. Please update it manually in .env")

Ejecuta la secuencia de comandos en tu terminal:

python3 auth.py

Crea el código del agente

Independientemente del entorno que elijas en el paso anterior, el código del agente sigue siendo exactamente el mismo. Crea un archivo llamado agent.py dentro del subdirectorio workspace_agent creado previamente y agrega el siguiente código. Esta secuencia de comandos usa credenciales predeterminadas de la aplicación (ADC) para proporcionar autorización, validar y actualizar automáticamente las credenciales solo en la memoria a través de un proveedor de encabezado dinámico.

import os
import datetime

import google.auth
from google.auth.transport.requests import Request
from google.adk.agents.llm_agent import LlmAgent
from google.adk.tools.mcp_tool.mcp_toolset import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams

# Enable graceful error handling so timeouts return as tool outputs instead of crashing
os.environ["ADK_ENABLE_MCP_GRACEFUL_ERROR_HANDLING"] = "1"

MODEL = "gemini-2.5-flash"

# Inject User ADC path globally so both ADK and underlying GenAI SDKs
# load it safely, bypassing broken Compute Engine metadata fallbacks.
_adc_path = os.path.expanduser(
    "~/.config/gcloud/application_default_credentials.json"
)
if not os.path.exists(_adc_path):
    raise FileNotFoundError(
        f"User ADC not found at {_adc_path}. "
        "Please run 'python3 auth.py' first to generate credentials."
    )
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = _adc_path

creds, _ = google.auth.default()


class TokenRelay:
    """Manages in-memory caching of Google OAuth access tokens.

    Decouples token refresh logic from credentials validation states to
    prevent infinite refresh loops during automated tool retries.
    """

    def __init__(self, credentials):
        self._creds = credentials
        self._cached_token: str | None = None
        self._expiry: datetime.datetime | None = None

    def get_token(self) -> str:
        now = datetime.datetime.now()
        # Refresh if no cache or expiring within 5 minutes
        if (
            self._cached_token is None
            or self._expiry is None
            or now >= (self._expiry - datetime.timedelta(minutes=5))
        ):
            self._creds.refresh(Request())
            self._cached_token = self._creds.token
            # Token lives for 60 mins; cache for 50 mins safely
            self._expiry = now + datetime.timedelta(minutes=50)
            print("\n[Agent Runtime] Access token refreshed from ADC.")
        return self._cached_token or ""


# Initialize auth relay and perform startup safety check
token_relay = TokenRelay(creds)
token_relay.get_token()


def auth_header_provider(tool_context=None) -> dict[str, str]:
    return {"Authorization": f"Bearer {token_relay.get_token()}"}


# Initialize the Google Workspace MCP servers with dynamic runtime provider
calendar_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://calendarmcp.googleapis.com/mcp/v1",
    ),
    header_provider=auth_header_provider
)
chat_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://chatmcp.googleapis.com/mcp/v1",
    ),
    header_provider=auth_header_provider
)
drive_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://drivemcp.googleapis.com/mcp/v1",
    ),
    header_provider=auth_header_provider
)
gmail_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://gmailmcp.googleapis.com/mcp/v1",
    ),
    header_provider=auth_header_provider
)
people_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://people.googleapis.com/mcp/v1",
    ),
    header_provider=auth_header_provider
)
universal_search_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://workspacemcp.googleapis.com/mcp/v1",
    ),
    header_provider=auth_header_provider
)

current_date = datetime.datetime.now().strftime("%Y-%m-%d")

# Define the agent and attach all configured toolsets
root_agent = LlmAgent(
    model=MODEL,
    name='gws_adk_agent',
    instruction=f"""You are a helpful assistant grounded in the user's Google Workspace data.
    Today's current date is {current_date}. Always calculate relative dates (like 'this week' or 'upcoming meetings') using this reference.
    Use the provided MCP tools to answer questions about their Calendar, Chat, Drive, Gmail, Contacts, and perform Universal Search.
    If a tool returns an error indicating a timeout, inform the user that the service took too long to respond.""",
    tools=[calendar_mcp, chat_mcp, drive_mcp, gmail_mcp, people_mcp, universal_search_mcp]
)

Ejecuta y prueba tu agente

Puedes interactuar con tu agente a través de la IU web interactiva o directamente dentro de tu terminal o shell.

Opción 1: IU web interactiva

Si estás en una máquina local, haz lo siguiente:

  1. Desde el directorio raíz del proyecto gws-adk-agent, inicia la interfaz web del ADK:
    adk web
    
  2. Abre http://localhost:8000 en tu navegador para chatear con tu agente.

Si estás en Google Cloud Shell, haz lo siguiente:

  1. Desde el directorio raíz del proyecto gws-adk-agent, inicia la interfaz web del ADK y aplica de forma explícita el puerto 8080:
    adk web --port 8080 --allow_origins=*
    
  2. Haz clic en el botón Vista previa en la Web en la parte superior derecha de la barra de herramientas de Cloud Shell y selecciona Vista previa en el puerto 8080 para abrir la interfaz en una pestaña nueva.

Opción 2: Modo de CLI de la terminal (alternativa)

Si prefieres permanecer en la terminal o evitar configurar vistas previas del navegador web, el ADK proporciona un modo de chat REPL interactivo nativo.

Desde el directorio raíz del proyecto gws-adk-agent, ejecuta el siguiente comando (funciona de forma idéntica en una máquina local y en Google Cloud Shell):

adk run workspace_agent

Ingresarás a una sesión de chat interactiva directamente en tu shell:

Running agent gws_adk_agent, type exit to exit.

[user]:

Intenta solicitarle información a tu agente

Independientemente de la interfaz que elijas, intenta probar el agente con consultas que aprovechen las herramientas MCP de Workspace:

What are my upcoming meetings this week?
Summarize the last 3 unread emails in my Gmail.

5. Implementación de producción

Para implementar el agente en producción, no podemos usar un token local codificado. En su lugar, usamos header_provider del ADK para extraer de forma dinámica el token de acceso de OAuth que inyecta la plataforma de Gemini Enterprise cuando un usuario interactúa con el agente.

Crea el código del agente de producción

Crea un paquete de directorio llamado enterprise_ai y crea un archivo agent.py dentro de él:

mkdir -p enterprise_ai

Escribe el siguiente contenido en enterprise_ai/agent.py:

import os
import datetime
import re
from google.adk.agents.llm_agent import LlmAgent
from google.adk.tools.mcp_tool.mcp_toolset import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
from google.adk.tools.tool_context import ToolContext

# Enable graceful error handling so timeouts return as tool outputs instead of crashing
os.environ["ADK_ENABLE_MCP_GRACEFUL_ERROR_HANDLING"] = "1"

MODEL = "gemini-2.5-flash"
# This name MUST match the Authorization Name used during Gemini Enterprise registration
CLIENT_AUTH_NAME = "workspace-adk-auth"

def _get_access_token_from_context(tool_context: ToolContext) -> str:
    """Dynamically parses the user bearer token injected into the ToolContext state."""
    escaped_name = re.escape(CLIENT_AUTH_NAME)
    pattern = re.compile(fr"^{escaped_name}_\d+$")
    state_dict = tool_context.state.to_dict() if hasattr(tool_context.state, 'to_dict') else tool_context.state
    matching_keys = [k for k in state_dict.keys() if pattern.match(k)]
    if matching_keys:
        return state_dict.get(matching_keys[0])
    raise Exception(f"No bearer token found in ToolContext state matching pattern {pattern.pattern}")

def auth_header_provider(tool_context: ToolContext) -> dict[str, str]:
    """Provides the dynamic Authorization header for MCP requests."""
    token = _get_access_token_from_context(tool_context)
    return {"Authorization": f"Bearer {token}"}

# Initialize toolsets using the dynamic header_provider
calendar_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(url="https://calendarmcp.googleapis.com/mcp/v1"),
    header_provider=auth_header_provider
)
chat_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(url="https://chatmcp.googleapis.com/mcp/v1"),
    header_provider=auth_header_provider
)
drive_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(url="https://drivemcp.googleapis.com/mcp/v1"),
    header_provider=auth_header_provider
)
gmail_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(url="https://gmailmcp.googleapis.com/mcp/v1"),
    header_provider=auth_header_provider
)
people_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(url="https://people.googleapis.com/mcp/v1"),
    header_provider=auth_header_provider
)
universal_search_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(url="https://workspacemcp.googleapis.com/mcp/v1"),
    header_provider=auth_header_provider
)

current_date = datetime.datetime.now().strftime("%Y-%m-%d")

root_agent = LlmAgent(
    model=MODEL,
    name='enterprise_ai',
    instruction=f"""You are an enterprise assistant grounded securely in the user's Workspace data.
    Today's current date is {current_date}. Always calculate relative dates (like 'this week' or 'upcoming meetings') using this reference.
    Always use the provided MCP tools to fetch context from Calendar, Chat, Drive, Gmail, People, and search for information across multiple Google Workspace products.
    If a tool returns an error indicating a timeout, inform the user that the service took too long to respond.""",
    tools=[calendar_mcp, chat_mcp, drive_mcp, gmail_mcp, people_mcp, universal_search_mcp]
)

Implementa en Agent Runtime de GEAP

Implementa tu agente de código profesional con la CLI del ADK:

adk deploy agent_engine \
  --project=$(gcloud config get-value project) \
  --region=us-central1 \
  --display_name="Workspace ADK Agent" \
  enterprise_ai

Espera a que finalice la implementación y copia el nombre del recurso del motor de razonamiento generado del resultado de la terminal (p.ej., projects/PROJECT_ID/locations/us-central1/reasoningEngines/ENGINE_ID).

6. Regístrate en Gemini Enterprise

Ahora, incorporamos el agente del ADK personalizado a Gemini Enterprise para que los usuarios puedan chatear con él de forma nativa.

Crea un ID de cliente para producción (aplicación web)

Para implementar tu agente en producción, debes crear un ID de cliente de aplicación web. A diferencia del cliente de escritorio que se usa para las pruebas locales, un cliente de aplicación web permite un flujo de OAuth seguro del servidor. Esto permite que el agente alojado en Agent Runtime de GEAP reciba de forma segura los tokens de autenticación del usuario que reenvía Gemini Enterprise, con el URI de redireccionamiento especificado. Esta configuración es necesaria para que el agente acceda de forma segura a los datos de Google Workspace en nombre del usuario en un entorno de producción.

  1. En la consola de Google Cloud, haz clic en el menú de navegación (ícono de hamburguesa) en la esquina superior izquierda. Selecciona Google Auth Platform > Clientes (o APIs y servicios > Credenciales si Google Auth Platform no está visible). Haz clic en Crear credenciales (o Crear cliente) y selecciona ID de cliente de OAuth.
  2. Selecciona Aplicación web como el tipo de aplicación.
  3. Asígnale el nombre Workspace Agent Production.
  4. En la sección URIs de redireccionamiento autorizados, agrega los siguientes URIs:
    • Haz clic en Agregar URI y, luego, ingresa https://vertexaisearch.cloud.google.com/oauth-redirect.
    • Vuelve a hacer clic en Agregar URI y, luego, ingresa https://vertexaisearch.cloud.google.com/static/oauth/oauth.html.
  5. Haz clic en Crear. En la ventana emergente "Se creó el cliente de OAuth" (o en la lista Clientes ), copia el ID del cliente y el secreto del cliente. Los necesitarás cuando registres el agente en Gemini Enterprise.

Crea una app de Gemini Enterprise

  1. En la consola de Google Cloud, ve a la página Gemini Enterprise:

  1. En la tarjeta Gemini Enterprise, haz clic en Administrar.
  2. Haz clic en Crear aplicación.
  3. En la sección Gemini Enterprise, haz clic en Crear.
  4. En el campo Nombre de tu app ingresa un nombre para ella. El ID de la app aparece debajo del nombre de la app.
  5. En el campo Nombre externo de tu organización o empresa, ingresa el nombre de la organización o empresa. Para este instructivo, puedes usar Cymbal Bank.
  6. Selecciona global (Global) como la ubicación de tu app.
  7. Haz clic en Continuar.

Registra el agente personalizado

  1. Abre la consola de Gemini Enterprise:

  1. Selecciona tu app activa, navega a Agentes y haz clic en + Agregar agente > Agregar agente personalizado a través de Agent Runtime.
  2. En la sección Autorizaciones, haz clic en Agregar autorización:
    • Nombre de autorización: workspace-adk-auth (debe coincidir exactamente con CLIENT_AUTH_NAME en tu código de Python)
    • ID de cliente: Pega el ID de cliente de la aplicación web de producción que creaste anteriormente.
    • Secreto de cliente: Pega el secreto de cliente de la aplicación web de producción que creaste anteriormente.
    • URI del token: https://oauth2.googleapis.com/token
    • URI de autorización: Para construir el URI, reemplaza YOUR_CLIENT_ID por el ID de cliente que copiaste en el paso 5 anterior:
      https://accounts.google.com/o/oauth2/v2/auth?client_id=YOUR_CLIENT_ID&redirect_uri=https%3A%2F%2Fvertexaisearch.cloud.google.com%2Fstatic%2Foauth%2Foauth.html&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.events%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.calendars%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fchat.spaces%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fchat.messages%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.file%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.compose%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdirectory.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcontacts.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&include_granted_scopes=true&response_type=code&access_type=offline&prompt=consent
      
  3. Haz clic en Listo y, luego, en Siguiente.
  4. En la sección Configuración , haz lo siguiente:
    • Nombre del agente: Workspace Pro Agent
    • Descripción:
      Use this agent to answer questions about your Google Workspace data, including Gmail, Google Drive, Google Calendar, Google Chat, and Contacts. It can find files, summarize emails, check your schedule, and look up contact information.
      
    • Motor de razonamiento de Agent Runtime: Pega el nombre del recurso del motor que copiaste del resultado de adk deploy.
  5. Haz clic en Crear.

Prueba el agente en Gemini Enterprise

Puedes interactuar con tu agente a través de la vista previa de la consola de Google Cloud (más rápida para los desarrolladores) o la app web de Gemini Enterprise (experiencia del usuario final).

Opción 1: Vista previa de la consola de Google Cloud

  1. En la consola de Google Cloud, ve a la página Gemini Enterprise:

  1. En el menú de navegación, haz clic en Apps y selecciona la app que acabas de crear.
  2. Haz clic en Vista previa o en Abrir vista previa en la parte superior derecha.
  3. En la barra de búsqueda, ingresa la siguiente consulta:
    Search for files in Drive related to 'Project Milestone', summarize them, and tell me if I have any meetings with the project owner today.
    
  4. Presiona Intro para enviar la consulta y ver los resultados directamente en la consola.

Opción 2: App web de Gemini Enterprise

  1. Abre la interfaz de la app web de Gemini Enterprise.
  2. Ve a Menú ☰ > Agentes y selecciona Workspace Pro Agent en De tu organización.
  3. Escribe la misma consulta que en la opción de vista previa de la consola de Google Cloud.
  4. Haz clic en Autorizar cuando se te solicite que sigas el flujo de consentimiento del usuario de OAuth.
  5. El agente ejecutará tareas sin problemas en varios servicios con el protocolo MCP.

7. Limpia

Para evitar cargos innecesarios, limpia tus recursos:

Opción de la consola

Ve al panel de APIs y servicios, selecciona los servicios MCP que habilitaste (p.ej., Calendar MCP, Gmail MCP) y haz clic en Inhabilitar API. Borra los IDs de cliente de OAuth en Google Auth Platform > Clients y borra la implementación del motor de razonamiento de la Gemini Enterprise Console.

Opción de CLI

Ejecuta los siguientes comandos de la terminal para inhabilitar los servicios MCP:

# Disable Workspace MCP services
gcloud services disable calendarmcp.googleapis.com \
  chatmcp.googleapis.com \
  drivemcp.googleapis.com \
  gmailmcp.googleapis.com \
  workspacemcp.googleapis.com

8. Felicitaciones

¡Felicitaciones! Creaste, probaste e implementaste correctamente un agente de IA del ADK de código profesional conectado directamente a los servidores MCP de Google Workspace oficiales.

Qué aprendiste

  • Cómo habilitar los servicios MCP de Google Workspace en Google Cloud
  • Cómo controlar las credenciales de OAuth para las pruebas locales del ADK con encabezados estáticos
  • Cómo implementar la inyección de tokens dinámicos con header_provider para agentes de producción
  • Cómo implementar un agente del ADK en Agent Runtime de GEAP y registrarlo en Gemini Enterprise

Documentos de referencia