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

1. Wprowadzenie

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

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 profesjonalna platforma Google do tworzenia autonomicznych agentów. Łącząc je, możesz tworzyć wysoce spersonalizowane modele oparte na danych z Gmaila, Dysku Google, Kalendarza Google, Google Chat i danych o osobach.

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

Jakie zadania wykonasz

  • Włącz usługi Google Workspace MCP w projekcie Google Cloud.
  • Skonfiguruj zgodę OAuth i utwórz dane logowania zarówno do testów lokalnych, jak i do wdrożenia produkcyjnego.
  • Tworzenie lokalnego agenta ADK, który łączy się z serwerami MCP Google Workspace za pomocą statycznych tokenów.
  • Tworzenie i wdrażanie agenta ADK gotowego do wdrożenia w środowisku produkcyjnym na platformie Gemini Enterprise Agent Platform (GEAP), które korzysta z dynamicznego wstrzykiwania tokenów.
  • Rejestruj i testuj agenta niestandardowego natywnie w Gemini Enterprise.

Czego potrzebujesz

  • przeglądarka (np. Chrome);
  • projekt Google Cloud z włączonymi płatnościami;
  • konto Google Workspace (z włączonymi inteligentnymi funkcjami);
  • Python w wersji 3.11 lub nowszej zainstalowany na komputerze lokalnym.
  • Zainstalowany i zainicjowany interfejs Google Cloud CLI (gcloud).

2. Zanim zaczniesz

Tworzenie lub wybieranie projektu Google Cloud

Opcja konsoli

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

Opcja interfejsu 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 MCP Google Workspace, musisz włączyć zarówno standardowe interfejsy API Google Workspace, jak i dedykowane usługi MCP.

Opcja konsoli

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

Opcja interfejsu 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 \
  workspacemcp.googleapis.com

Konfigurowanie aplikacji do obsługi czatu

Aby korzystać z serwera MCP Google Chat, musisz skonfigurować aplikację do obsługi Google Chat w projekcie Google Cloud.

  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 Funkcjonalność wyłącz opcję Włącz funkcje interaktywne.
    • W sekcji Logi wybierz Loguj błędy w usłudze Logging.
  3. Kliknij Zapisz.

3. Konfigurowanie zgody OAuth i klientów

Serwery MCP Google Workspace 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 kliknij Menu nawigacyjne (ikonę menu) w lewym górnym rogu. Wybierz Platforma uwierzytelniania Google > Branding (lub Interfejsy API i usługi > Ekran zgody OAuth, jeśli nie widzisz Platformy uwierzytelniania Google).
  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: kliknij Wewnętrzny.
  4. Skonfiguruj dane kontaktowe: wpisz adres e-mail, a następnie kliknij Utwórz.
  5. Kliknij Dostęp do danych > Dodaj lub usuń zakresy. W sekcji Ręczne dodawanie zakresów dodaj te zakresy, aby przyznać dostęp do wymaganych usług:
    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. Kliknij kolejno Dodaj do tabeli, AktualizujZapisz.

Tworzenie identyfikatora klienta na potrzeby lokalnego środowiska programistycznego (aplikacja na komputery)

  1. W konsoli Google Cloud otwórz Google Auth Platform > 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. Nazwij go Workspace Agent Local.
  4. Kliknij Utwórz i pobierz plik JSON. Zapisz go lokalnie jako client_secret.json.

4. Tworzenie i testowanie agenta

W tej sekcji dowiesz się, jak utworzyć środowisko agenta. Do testowania będziemy używać statycznego tokena, w przypadku którego pobieramy token OAuth za pomocą gcloud i przekazujemy go do McpToolset pakietu ADK. Możesz wykonać te czynności na maszynie lokalnej 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 w Pythonie do uwierzytelniania, aby zapewnić spójność na różnych platformach.

1. Konfigurowanie katalogu środowiska

Aby utworzyć katalog projektu i zainstalować wymagane pakiety, wykonaj w terminalu te polecenia:

  • W przypadku Google Cloud Shell: najpierw kliknij ikonę Aktywuj Cloud Shell (>_) na pasku narzędzi w prawym górnym rogu konsoli Google Cloud.
  • Na komputerze lokalnym: 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

Pobrany w poprzednim kroku plik client_secret.json 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 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 spójnie obsługiwać uwierzytelnianie i unikać problemów z routingiem w CLI w zależności od środowiska, używamy niestandardowego skryptu w Pythonie opartego na oficjalnych bibliotekach uwierzytelniania Google. Ten skrypt zarządza przepływem OAuth, zapisuje lokalnie domyślne uwierzytelnianie aplikacji (ADC) i generuje wymagany plik .env.

Utwórz w katalogu gws-adk-agent 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. Utwórz w wcześniej utworzonym podkatalogu workspace_agent plik o nazwie agent.py i dodaj do niego ten kod. Ten skrypt używa domyślnego uwierzytelniania aplikacji (ADC) do autoryzacji, automatycznie weryfikując i odświeżając dane logowania 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 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]
)

Uruchamianie i testowanie agenta

Z agentem możesz wchodzić w interakcje za pomocą interaktywnego interfejsu internetowego lub bezpośrednio w terminalu/powłoce.

Opcja 1. Interaktywny interfejs internetowy

Jeśli korzystasz z urządzenia lokalnego:

  1. gws-adk-agent katalogu głównym projektu uruchom interfejs internetowy ADK:
    adk web
    
  2. Otwórz http://localhost:8000 w przeglądarce, aby porozmawiać z pracownikiem obsługi klienta.

Jeśli korzystasz z Google Cloud Shell:

  1. W gws-adk-agent katalogu głównym projektu 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

Sesja interaktywnego czatu zostanie otwarta bezpośrednio w powłoce:

Running agent gws_adk_agent, type exit to exit.

[user]:

Wypróbuj prompta

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

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żywać zakodowanego na stałe tokena lokalnego. Zamiast tego używamy funkcji header_provider 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
)
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]
)

Wdrażanie w środowisku wykonawczym agentów GEAP

Wdróż agenta wymagającego pisania dużej ilości 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 wnioskującego z danych wyjściowych terminala (np. projects/PROJECT_ID/locations/us-central1/reasoningEngines/ENGINE_ID).

6. Rejestracja w Gemini Enterprise

Teraz udostępniamy niestandardowego agenta ADK w Gemini Enterprise, aby użytkownicy mogli z nim czatować w sposób natywny.

Tworzenie identyfikatora klienta na potrzeby wersji produkcyjnej (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 agenta GEAP może bezpiecznie odbierać tokeny uwierzytelniania użytkownika przekazywane przez Gemini Enterprise przy użyciu 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 kliknij Menu nawigacyjne (ikonę menu) w lewym górnym rogu. 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. Nazwij go Workspace Agent Production.
  4. W sekcji Autoryzowane identyfikatory URI przekierowania dodaj te identyfikatory URI:
    • Kliknij Dodaj identyfikator URI i wpisz https://vertexaisearch.cloud.google.com/oauth-redirect.
    • Ponownie kliknij Dodaj identyfikator 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 Agenci i kliknij + Dodaj agenta > Dodaj agenta niestandardowego przez Agent Runtime.
  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 utworzony powyżej identyfikator klienta produkcyjnej aplikacji internetowej.
    • Tajny klucz klienta: wklej utworzony powyżej tajny klucz klienta produkcyjnej aplikacji internetowej.
    • Identyfikator URI tokena: https://oauth2.googleapis.com/token
    • Authorization URI (Adres URI autoryzacji): utwórz adres URI, zastępując symbol YOUR_CLIENT_ID identyfikatorem klienta skopiowanym w kroku 5 powyżej:
      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. Kliknij kolejno GotoweDalej.
  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.
      
    • Agent Runtime reasoning engine: wklej nazwę zasobu silnika skopiowaną z danych wyjściowych adk deploy.
  5. Kliknij Utwórz.

Wypróbuj agenta w Gemini Enterprise

Z agentem możesz wchodzić w interakcje za pomocą wersji podglądowej konsoli Google Cloud (najszybszej dla deweloperów) lub aplikacji internetowej Gemini Enterprise (dla użytkowników).

Opcja 1. Podgląd 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. Kliknij Menu ☰ > Agenci i w sekcji Z Twojej organizacji wybierz Agent Workspace Pro.
  3. Wpisz to samo zapytanie co w opcji Podgląd w konsoli Google Cloud.
  4. Gdy pojawi się prośba, kliknij Autoryzuj, aby przejść proces uzyskiwania zgody użytkownika OAuth.
  5. Agent będzie płynnie wykonywać zadania w wielu usługach przy użyciu protokołu MCP.

7. Czyszczenie danych

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

Opcja konsoli

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

Opcja interfejsu wiersza poleceń

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

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

8. Gratulacje

Gratulacje! Udało Ci się utworzyć, przetestować i wdrożyć agenta AI ADK z kodem profesjonalnym, który jest połączony bezpośrednio z oficjalnymi serwerami MCP Google Workspace.

Czego się nauczysz

  • Jak włączyć usługi MCP Google Workspace w Google Cloud.
  • Jak obsługiwać dane logowania OAuth na potrzeby lokalnego testowania ADK przy użyciu statycznych nagłówków.
  • Jak wdrożyć 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