Tworzenie agenta AI Google Workspace za pomocą pakietu ADK i MCP

1. Wprowadzenie

Z tego ćwiczenia dowiesz się, jak utworzyć agenta AI wymagającego pisania kodu za pomocą pakietu Agent Development Kit (ADK) , który łączy się bezpośrednio z oficjalnymi serwerami Google Workspace MCP.

Model Context Protocol (MCP) to otwarty standard, który umożliwia modelom AI bezpieczne korzystanie z narzędzi udostępnianych przez serwery zdalne. ADK to platforma Google wymagająca pisania kodu, która służy do tworzenia autonomicznych agentów. Łącząc te 2 rozwiązania, możesz tworzyć wysoce spersonalizowanych agentów, którzy korzystają z danych z Gmaila, Dysku Google, Kalendarza Google, Google Chat i kontaktów.

Pełną dokumentację dostępnych narzędzi i konfiguracji znajdziesz w artykule Konfigurowanie serwerów Google Workspace MCP.

Jakie zadania wykonasz

  • Włączysz usługi Google Workspace MCP w projekcie Google Cloud.
  • Skonfigurujesz zgodę OAuth i utworzysz dane logowania zarówno na potrzeby testowania lokalnego, jak i wdrożenia produkcyjnego.
  • Utworzysz lokalnego agenta ADK, który łączy się z 5 serwerami Workspace MCP za pomocą statycznych tokenów.
  • Utworzysz i wdrożysz agenta ADK gotowego do wdrożenia produkcyjnego w środowisku wykonawczym agentów Gemini Enterprise Agent Platform (GEAP) , który używa dynamicznego wstrzykiwania tokenów.
  • Zarejestrujesz i przetestujesz agenta niestandardowego natywnie w Gemini Enterprise.

Czego potrzebujesz

  • Przeglądarka internetowa (np. Chrome).
  • Projekt Google Cloud z włączonymi płatnościami.
  • Konto Google Workspace (z włączonymi funkcjami inteligentnymi).
  • Zainstalowany na komputerze lokalnym Python w wersji 3.11 lub nowszej.
  • Zainstalowany i zainicjowany interfejs Google Cloud CLI (gcloud).

2. Zanim zaczniesz

Tworzenie lub wybieranie projektu Google Cloud

Opcja w konsoli

W konsoli Google Cloud wybierz lub utwórz projekt w chmurze Google Cloud.

Opcja w interfejsie wiersza poleceń

Utwórz nowy projekt i ustaw go jako aktywny:

gcloud projects create YOUR_PROJECT_ID
gcloud config set project YOUR_PROJECT_ID

Włączanie interfejsów API

Aby korzystać z serwerów Google Workspace MCP, musisz włączyć zarówno standardowe interfejsy Google Workspace API, jak i dedykowane usługi MCP.

Opcja w konsoli

Aby włączyć te usługi w przeglądarce, kliknij te przyciski:

Opcja w interfejsie wiersza poleceń Uruchom te polecenia w terminalu:

# 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

Konfigurowanie aplikacji Google Chat

Aby korzystać z serwera Google Chat MCP, musisz skonfigurować aplikację Google Chat w projekcie w chmurze Google.

  1. W konsoli Google Cloud wyszukaj Google Chat API i kliknij Google Chat API > Zarządzaj > Konfiguracja.
  2. Skonfiguruj aplikację Google Chat:
    • Nazwa aplikacji: ADK Workspace Agent
    • Adres URL awatara: https://developers.google.com/chat/images/quickstart-app-avatar.png
    • Opis: MCP server connection for ADK Agent
    • W sekcji Funkcje wyłącz Włącz funkcje interaktywne.
    • W sekcji Logi wybierz Loguj błędy w usłudze Logging.
  3. Kliknij Zapisz.

3. Konfigurowanie zgody i klientów OAuth

Serwery Google Workspace MCP używają protokołu OAuth 2.0 do bezpiecznego uwierzytelniania. Musisz skonfigurować ekran zgody OAuth i utworzyć 2 osobne identyfikatory klienta: jeden na potrzeby lokalnego programowania, a drugi na potrzeby wdrożonego agenta.

  1. W konsoli Google Cloud w lewym górnym rogu kliknij Menu nawigacyjne (ikonę hamburgera). Wybierz Platforma uwierzytelniania Google > Branding (lub Interfejsy API i usługi > Ekran zgody OAuth , jeśli platforma uwierzytelniania Google nie jest widoczna).
  2. Skonfiguruj Informacje o aplikacji:
    • Nazwa aplikacji: Workspace ADK Agent
    • Adres e-mail dla użytkowników potrzebujących pomocy: wybierz swój adres e-mail.
  3. Skonfiguruj Odbiorców: wybierz Wewnętrzni.
  4. Skonfiguruj Dane kontaktowe: wpisz swój adres e-mail i kliknij Utwórz.
  5. Otwórz Dostęp do danych > Dodaj lub usuń zakresy. W sekcji Ręczne dodawanie zakresów dodaj te zakresy, aby przyznać dostęp do wszystkich 5 usług:
    https://www.googleapis.com/auth/calendar.calendarlist.readonly
    https://www.googleapis.com/auth/calendar.events
    https://www.googleapis.com/auth/calendar.calendars
    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/gmail.send
    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. Kliknij kolejno Dodaj do tabeli, Aktualizuj i Zapisz.

Tworzenie identyfikatora klienta na potrzeby lokalnego programowania (aplikacja na komputer)

  1. W konsoli Google Cloud otwórz Platforma uwierzytelniania Google > Klienci (lub Interfejsy API i usługi > Dane logowania). Kliknij Utwórz dane logowania (lub Utwórz klienta) i wybierz Identyfikator klienta OAuth.
  2. Jako typ aplikacji wybierz Aplikacja na komputer.
  3. Nadaj mu nazwę Workspace Agent Local.
  4. Kliknij Utwórz i pobierz plik JSON. Zapisz go lokalnie jako client_secret.json.

4. Programowanie i testowanie agenta

W tej sekcji opisujemy, jak utworzyć środowisko agenta. Do testowania użyjemy statycznego tokena, w którym pobieramy token OAuth za pomocą gcloud i przekazujemy go do McpToolset pakietu ADK. Możesz wykonać te czynności na komputerze lokalnym lub w Google Cloud Shell.

Aby skonfigurować środowisko programistyczne, wybierz środowisko: Komputer lokalny lub Google Cloud Shell. Obie metody będą używać wspólnego skryptu Pythona do uwierzytelniania, aby zapewnić spójność na różnych platformach.

1. Konfigurowanie katalogu środowiska

Aby utworzyć katalog projektu i zainstalować wymagane pakiety, uruchom w terminalu te polecenia.

  • W przypadku Google Cloud Shell: najpierw kliknij ikonę Aktywuj Cloud Shell (>_) w prawym górnym rogu paska narzędzi konsoli Google Cloud.
  • W przypadku komputera lokalnego: otwórz standardowy terminal.
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. Przygotowywanie pliku z danymi logowania

Plik client_secret.json pobrany w poprzednim kroku musisz umieścić w katalogu głównym gws-adk-agent.

  • Komputer lokalny: przenieś lub skopiuj pobrany plik client_secret.json do katalogu gws-adk-agent.
  • Google Cloud Shell: utwórz plik, uruchamiając w Google Cloud Shell to polecenie (zastąp [PASTE_JSON_HERE] rzeczywistą treścią JSON):
cat << 'EOF' > client_secret.json
[PASTE_JSON_HERE]
EOF

3. Uwierzytelnianie i generowanie pliku .env (auth.py)

Aby zapewnić spójne uwierzytelnianie i uniknąć problemów z routingiem w interfejsie wiersza poleceń specyficznym dla środowiska, używamy niestandardowego skryptu Pythona opartego na oficjalnych bibliotekach uwierzytelniania Google. Ten skrypt zarządza procesem OAuth, zapisuje domyślne uwierzytelnianie aplikacji (ADC) lokalnie i generuje wymagany plik .env.

W katalogu gws-adk-agent utwórz plik o nazwie auth.py i dodaj ten kod:

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")

Uruchom skrypt w terminalu:

python3 auth.py

Tworzenie kodu agenta

Niezależnie od środowiska wybranego w poprzednim kroku kod agenta pozostaje dokładnie taki sam. W utworzonym wcześniej podkatalogu workspace_agent utwórz plik o nazwie agent.py i dodaj ten kod. Ten skrypt używa domyślnego uwierzytelniania aplikacji (ADC) do autoryzacji, automatycznie weryfikując i odświeżając dane uwierzytelniające w pamięci za pomocą dynamicznego dostawcy nagłówków.

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 5 GWS 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
)

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

# Define the agent and attach all 5 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, and Contacts.
    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]
)

Uruchamianie i testowanie agenta

Możesz wchodzić w interakcję z agentem za pomocą interaktywnego interfejsu internetowego lub bezpośrednio w terminalu/powłoce.

Opcja 1. Interaktywny interfejs internetowy

Jeśli korzystasz z komputera lokalnego:

  1. W katalogu głównym projektu gws-adk-agent uruchom interfejs internetowy ADK:
    adk web
    
  2. Aby porozmawiać z agentem, otwórz w przeglądarce adres http://localhost:8000.

Jeśli korzystasz z Google Cloud Shell:

  1. W katalogu głównym projektu gws-adk-agent uruchom interfejs internetowy ADK, wymuszając port 8080:
    adk web --port 8080 --allow_origins=*
    
  2. W prawym górnym rogu paska narzędzi Cloud Shell kliknij przycisk Podgląd w przeglądarce i wybierz Podejrzyj na porcie 8080 , aby otworzyć interfejs w nowej karcie.

Opcja 2. Tryb interfejsu wiersza poleceń terminala (alternatywny)

Jeśli wolisz pozostać w terminalu lub nie chcesz konfigurować podglądu w przeglądarce, ADK udostępnia natywny interaktywny tryb czatu REPL.

W katalogu głównym projektu gws-adk-agent uruchom to polecenie (działa ono identycznie na komputerze lokalnym i w Google Cloud Shell):

adk run workspace_agent

Otworzy się interaktywna sesja czatu bezpośrednio w powłoce:

Running agent gws_adk_agent, type exit to exit.

[user]:

Wypróbuj promptowanie agenta

Niezależnie od wybranego interfejsu przetestuj agenta za pomocą zapytań, które korzystają z narzędzi Workspace MCP:

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

5. Wdrożenie produkcyjne

Aby wdrożyć agenta w środowisku produkcyjnym, nie możemy użyć zakodowanego na stałe tokena lokalnego. Zamiast tego używamy header_provider pakietu ADK, aby dynamicznie wyodrębniać token dostępu OAuth wstrzykiwany przez platformę Gemini Enterprise, gdy użytkownik wchodzi w interakcję z agentem.

Tworzenie kodu agenta produkcyjnego

Utwórz pakiet katalogu o nazwie enterprise_ai i utwórz w nim plik agent.py:

mkdir -p enterprise_ai

Wpisz w pliku enterprise_ai/agent.py tę treść:

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
)

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, and People.
    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]
)

Wdrażanie w środowisku wykonawczym agentów GEAP

Wdróż agenta wymagającego pisania kodu za pomocą interfejsu ADK CLI:

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

Poczekaj na zakończenie wdrażania i skopiuj wygenerowaną nazwę zasobu silnika wnioskowania z danych wyjściowych terminala (np. projects/PROJECT_ID/locations/us-central1/reasoningEngines/ENGINE_ID).

6. Rejestracja w Gemini Enterprise

Teraz dodamy niestandardowego agenta ADK do Gemini Enterprise, aby użytkownicy mogli z nim rozmawiać natywnie.

Tworzenie identyfikatora klienta na potrzeby środowiska produkcyjnego (aplikacja internetowa)

Aby wdrożyć agenta w środowisku produkcyjnym, musisz utworzyć identyfikator klienta aplikacji internetowej. W przeciwieństwie do klienta na komputer, który jest używany do testowania lokalnego, klient aplikacji internetowej umożliwia bezpieczny proces OAuth po stronie serwera. Dzięki temu hostowany agent w środowisku wykonawczym agentów GEAP może bezpiecznie odbierać tokeny uwierzytelniania użytkownika przekazywane przez Gemini Enterprise za pomocą określonego identyfikatora URI przekierowania. Ta konfiguracja jest niezbędna, aby agent mógł bezpiecznie uzyskiwać dostęp do danych Google Workspace w imieniu użytkownika w środowisku produkcyjnym.

  1. W konsoli Google Cloud w lewym górnym rogu kliknij Menu nawigacyjne (ikonę hamburgera). Wybierz Platforma uwierzytelniania Google > Klienci (lub Interfejsy API i usługi > Dane logowania , jeśli platforma uwierzytelniania Google nie jest widoczna). Kliknij Utwórz dane logowania (lub Utwórz klienta) i wybierz Identyfikator klienta OAuth.
  2. Jako typ aplikacji wybierz Aplikacja internetowa.
  3. Nadaj mu nazwę Workspace Agent Production.
  4. W sekcji Autoryzowane identyfikatory URI przekierowania dodaj te identyfikatory URI:
    • Kliknij Dodaj URI i wpisz https://vertexaisearch.cloud.google.com/oauth-redirect.
    • Ponownie kliknij Dodaj URI i wpisz https://vertexaisearch.cloud.google.com/static/oauth/oauth.html.
  5. Kliknij Utwórz. W wyskakującym okienku „Utworzono klienta OAuth” (lub na liście Klienci ) skopiuj Identyfikator klienta i Tajny klucz klienta. Będą one potrzebne podczas rejestrowania agenta w Gemini Enterprise.

Tworzenie aplikacji Gemini Enterprise

  1. W konsoli Google Cloud otwórz stronę Gemini Enterprise:

  1. Na karcie Gemini Enterprise kliknij Zarządzaj.
  2. Kliknij Utwórz aplikację.
  3. W sekcji Gemini Enterprise kliknij Utwórz.
  4. W polu Nazwa aplikacji wpisz nazwę aplikacji. Pod nią pojawi się identyfikator aplikacji.
  5. W polu Nazwa zewnętrzna Twojej firmy lub organizacji wpisz nazwę firmy lub organizacji. W tym samouczku możesz użyć nazwy Cymbal Bank.
  6. Jako lokalizację aplikacji wybierz lokalizację globalną (Cały świat).
  7. Kliknij Dalej.

Rejestrowanie agenta niestandardowego

  1. Otwórz konsolę Gemini Enterprise:

  1. Wybierz aktywną aplikację, otwórz Agenty i kliknij + Dodaj agenta > Dodaj agenta niestandardowego za pomocą środowiska wykonawczego agentów.
  2. W sekcji Autoryzacje kliknij Dodaj autoryzację:
    • Nazwa autoryzacji: workspace-adk-auth (musi dokładnie odpowiadać wartości CLIENT_AUTH_NAME w kodzie Pythona)
    • Identyfikator klienta: wklej identyfikator klienta aplikacji internetowej w środowisku produkcyjnym utworzony powyżej.
    • Tajny klucz klienta: wklej tajny klucz klienta aplikacji internetowej w środowisku produkcyjnym utworzony powyżej.
    • Identyfikator URI tokena: https://oauth2.googleapis.com/token
    • Identyfikator URI autoryzacji: utwórz identyfikator URI, zastępując YOUR_CLIENT_ID **identyfikatorem klienta** skopiowanym w kroku 5:
      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.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.calendars%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.events%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.send%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.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%2Fdirectory.readonly&include_granted_scopes=true&response_type=code&access_type=offline&prompt=consent
      
  3. Kliknij kolejno Gotowe i Dalej.
  4. W sekcji Konfiguracja:
    • Nazwa agenta: Workspace Pro Agent
    • Opis:
      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.
      
    • Silnik rozumowania środowiska wykonawczego agentów: wklej nazwę zasobu silnika skopiowaną z danych wyjściowych adk deploy.
  5. Kliknij Utwórz.

Testowanie agenta w Gemini Enterprise

Możesz wchodzić w interakcję z agentem za pomocą podglądu w konsoli Google Cloud (najszybsza opcja dla deweloperów) lub aplikacji internetowej Gemini Enterprise (dla użytkowników).

Opcja 1. Podgląd w konsoli Google Cloud

  1. W konsoli Google Cloud otwórz stronę Gemini Enterprise:

  1. W menu nawigacyjnym kliknij Aplikacje i wybierz utworzoną aplikację.
  2. W prawym górnym rogu kliknij Podgląd lub Otwórz podgląd.
  3. Na pasku wyszukiwania wpisz to zapytanie:
    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. Naciśnij Enter , aby przesłać zapytanie i wyświetlić wyniki bezpośrednio w konsoli.

Opcja 2. Aplikacja internetowa Gemini Enterprise

  1. Otwórz interfejs aplikacji internetowej Gemini Enterprise.
  2. Otwórz Menu ☰ > Agenty i w sekcji Od Twojej organizacji wybierz Workspace Pro Agent.
  3. Wpisz to samo zapytanie co w opcji podglądu w konsoli Google Cloud.
  4. Gdy pojawi się prośba o przejście do procesu zgody użytkownika OAuth, kliknij Autoryzuj.
  5. Agent będzie bezproblemowo wykonywać zadania w wielu usługach za pomocą protokołu MCP.

7. Zwalnianie miejsca

Aby uniknąć niepotrzebnych opłat, zwalniaj miejsce w zasobach:

Opcja w konsoli

Otwórz panel informacyjny Interfejsy API i usługi, wybierz włączone usługi MCP (np. Kalendarz MCP, Gmail MCP) i kliknij Wyłącz API. Usuń identyfikatory klienta OAuth w sekcji Platforma uwierzytelniania Google > Klienci i usuń wdrożenie silnika wnioskowania w konsoli Gemini Enterprise.

Opcja w interfejsie wiersza poleceń

Aby wyłączyć usługi MCP, uruchom w terminalu te polecenia:

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

8. Gratulacje

Gratulacje! Udało Ci się utworzyć, przetestować i wdrożyć agenta AI ADK wymagającego pisania kodu, który łączy się bezpośrednio z oficjalnymi serwerami Google Workspace MCP.

Czego się nauczysz

  • Jak włączyć usługi Google Workspace MCP w Google Cloud.
  • Jak obsługiwać dane logowania OAuth na potrzeby lokalnego testowania ADK za pomocą statycznych nagłówków.
  • Jak zaimplementować dynamiczne wstrzykiwanie tokenów za pomocą header_provider w przypadku agentów produkcyjnych.
  • Jak wdrożyć agenta ADK w środowisku wykonawczym agentów GEAP i zarejestrować go w Gemini Enterprise.

Dokumentacja źródłowa