1. Einführung
Übersicht
In diesem Lab erstellen und stellen Sie einen MCP-Server (Model Context Protocol) bereit. MCP-Server sind nützlich, um LLMs Zugriff auf externe Tools und Dienste zu gewähren. Sie konfigurieren ihn als sicheren, produktionsbereiten Dienst in Cloud Run, auf den von mehreren Clients aus zugegriffen werden kann. Anschließend stellen Sie über die Antigravity CLI eine Verbindung zum Remote-MCP-Server her.
Aufgaben
Wir verwenden FastMCP, um einen Zoo-MCP-Server mit zwei Tools zu erstellen: get_animals_by_species und get_animal_details. FastMCP bietet eine schnelle, Python-basierte Möglichkeit, MCP-Server und -Clients zu erstellen.

Lerninhalte
- MCP-Server in Cloud Run bereitstellen
- Endpunkt Ihres Servers schützen, indem Sie für alle Anfragen eine Authentifizierung anfordern, damit nur autorisierte Clients und Agenten mit ihm kommunizieren können
- Über die Antigravity CLI eine Verbindung zum sicheren MCP-Serverendpunkt herstellen
2. Projekt einrichten
- Wenn Sie noch kein Google-Konto haben, müssen Sie eines erstellen.
- Verwenden Sie ein privates Konto anstelle eines Arbeitskontos oder eines Kontos einer Bildungseinrichtung. Bei Arbeitskonten und Konten von Bildungseinrichtungen können Einschränkungen gelten, die verhindern, dass Sie die für dieses Lab erforderlichen APIs aktivieren.
- Melden Sie sich in der Google Cloud Console an.
- Erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt wieder.
- Wenn ein Fehler wegen des Projektkontingents angezeigt wird, verwenden Sie ein vorhandenes Projekt wieder oder löschen Sie ein vorhandenes Projekt, um ein neues zu erstellen.
3. Cloud Shell-Editor öffnen
- Klicken Sie auf diesen Link, um direkt zu Cloud Shell-Editor zu gelangen.
- Wenn Sie heute aufgefordert werden, sich zu authentifizieren, klicken Sie auf Autorisieren , um fortzufahren.

- Wenn das Terminal nicht unten auf dem Bildschirm angezeigt wird, öffnen Sie es:
- Klicken Sie auf Ansehen.
- Klicken Sie auf Terminal

- Legen Sie im Terminal Ihr Projekt mit diesem Befehl fest:
- Format:
gcloud config set project [PROJECT_ID] - Beispiel:
gcloud config set project lab-project-id-example - Wenn Sie sich nicht an Ihre Projekt-ID erinnern können:
- Sie können alle Ihre Projekt-IDs mit diesem Befehl auflisten:
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- Sie können alle Ihre Projekt-IDs mit diesem Befehl auflisten:
- Format:
- Es sollte folgende Meldung angezeigt werden:
Wenn Sie eineUpdated property [core/project].
WARNINGsehen und gefragt werdenDo you want to continue (Y/n)?, haben Sie die Projekt-ID wahrscheinlich falsch eingegeben. Drücken Sien, drücken SieEnter, und versuchen Sie noch einmal, den Befehlgcloud config set projectauszuführen.
4. APIs aktivieren
Aktivieren Sie im Terminal die APIs:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com
Wenn Sie zur Autorisierung aufgefordert werden, klicken Sie auf Autorisieren , um fortzufahren. 
Die Ausführung dieses Befehls kann einige Minuten dauern. Am Ende sollte jedoch eine Erfolgsmeldung ähnlich dieser angezeigt werden:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
5. Python-Projekt vorbereiten
- Erstellen Sie einen Ordner mit dem Namen
mcp-on-cloudrun, um den Quellcode für die Bereitstellung zu speichern:mkdir mcp-on-cloudrun && cd mcp-on-cloudrun - Erstellen Sie mit dem Tool
uvein Python-Projekt, um einepyproject.toml-Datei zu generieren: Mit dem Befehluv init --description "Example of deploying an MCP server on Cloud Run" --bare --python 3.13uv initwird einepyproject.toml-Datei für Ihr Projekt erstellt.Führen Sie Folgendes aus, um den Inhalt der Datei aufzurufen: Die Ausgabe sollte so aussehen:cat pyproject.toml[project] name = "mcp-on-cloudrun" version = "0.1.0" description = "Example of deploying an MCP server on Cloud Run" requires-python = ">=3.13" dependencies = []
6. Zoo-MCP-Server erstellen
Um wertvollen Kontext zur Verbesserung der Verwendung von LLMs mit MCP bereitzustellen, richten Sie mit FastMCP einen Zoo-MCP-Server ein. FastMCP ist ein Standard-Framework für die Arbeit mit dem Model Context Protocol. Mit FastMCP können Sie schnell MCP-Server und -Clients mit Python erstellen. Dieser MCP-Server stellt Daten zu Tieren in einem fiktiven Zoo bereit. Zur Vereinfachung speichern wir die Daten im Arbeitsspeicher. Für einen Produktions-MCP-Server sollten Sie Daten aus Quellen wie Datenbanken oder APIs bereitstellen.
- Führen Sie den folgenden Befehl aus, um FastMCP als Abhängigkeit in der Datei
pyproject.tomlhinzuzufügen: Dadurch wird Ihrem Projekt eineuv add fastmcp==2.12.4 --no-syncuv.lock-Datei hinzugefügt. - Erstellen und öffnen Sie eine neue
server.py-Datei für den Quellcode des MCP-Servers: Mit dem Befehlcloudshell edit ~/mcp-on-cloudrun/server.pycloudshell editwird die Dateiserver.pyim Editor über dem Terminal geöffnet. - Fügen Sie der Datei
server.pyden folgenden Quellcode des Zoo-MCP-Servers hinzu:import asyncio import logging import os from typing import List, Dict, Any from fastmcp import FastMCP logger = logging.getLogger(__name__) logging.basicConfig(format="[%(levelname)s]: %(message)s", level=logging.INFO) mcp = FastMCP("Zoo Animal MCP Server 🦁🐧🐻") # Dictionary of animals at the zoo ZOO_ANIMALS = [ { "species": "lion", "name": "Leo", "age": 7, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "lion", "name": "Nala", "age": 6, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "lion", "name": "Simba", "age": 3, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "lion", "name": "King", "age": 8, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "penguin", "name": "Waddles", "age": 2, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Pip", "age": 4, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Skipper", "age": 5, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Chilly", "age": 3, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Pingu", "age": 6, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Noot", "age": 1, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "elephant", "name": "Ellie", "age": 15, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "elephant", "name": "Peanut", "age": 12, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "elephant", "name": "Dumbo", "age": 5, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "elephant", "name": "Trunkers", "age": 10, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "bear", "name": "Smokey", "age": 10, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "bear", "name": "Grizzly", "age": 8, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "bear", "name": "Barnaby", "age": 6, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "bear", "name": "Bruin", "age": 12, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "giraffe", "name": "Gerald", "age": 4, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "giraffe", "name": "Longneck", "age": 5, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "giraffe", "name": "Patches", "age": 3, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "giraffe", "name": "Stretch", "age": 6, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Speedy", "age": 2, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Dash", "age": 3, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Gazelle", "age": 4, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Swift", "age": 5, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "polar bear", "name": "Snowflake", "age": 7, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "polar bear", "name": "Blizzard", "age": 5, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "polar bear", "name": "Iceberg", "age": 9, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "walrus", "name": "Wally", "age": 10, "enclosure": "The Walrus Cove", "trail": "Polar Path" }, { "species": "walrus", "name": "Tusker", "age": 12, "enclosure": "The Walrus Cove", "trail": "Polar Path" }, { "species": "walrus", "name": "Moby", "age": 8, "enclosure": "The Walrus Cove", "trail": "Polar Path" }, { "species": "walrus", "name": "Flippers", "age": 9, "enclosure": "The Walrus Cove", "trail": "Polar Path" } ] @mcp.tool() def get_animals_by_species(species: str) -> List[Dict[str, Any]]: """ Retrieves all animals of a specific species from the zoo. Can also be used to collect the base data for aggregate queries of animals of a specific species - like counting the number of penguins or finding the oldest lion. Args: species: The species of the animal (e.g., 'lion', 'penguin'). Returns: A list of dictionaries, where each dictionary represents an animal and contains details like name, age, enclosure, and trail. """ logger.info(f">>> 🛠️ Tool: 'get_animals_by_species' called for '{species}'") return [animal for animal in ZOO_ANIMALS if animal["species"].lower() == species.lower()] @mcp.tool() def get_animal_details(name: str) -> Dict[str, Any]: """ Retrieves the details of a specific animal by its name. Args: name: The name of the animal. Returns: A dictionary with the animal's details (species, name, age, enclosure, trail) or an empty dictionary if the animal is not found. """ logger.info(f">>> 🛠️ Tool: 'get_animal_details' called for '{name}'") for animal in ZOO_ANIMALS: if animal["name"].lower() == name.lower(): return animal return {} if __name__ == "__main__": port = int(os.getenv("PORT", 8080)) logger.info(f"🚀 MCP server started on port {port}") asyncio.run( mcp.run_async( transport="http", host="0.0.0.0", port=port, ) )
Ihr Code ist fertig. Jetzt können Sie den MCP-Server in Cloud Run bereitstellen.
7. In Cloud Run bereitstellen
Stellen Sie jetzt einen MCP-Server direkt aus dem Quellcode in Cloud Run bereit.
- Erstellen und öffnen Sie eine neue
Dockerfilefür die Bereitstellung in Cloud Run:cloudshell edit ~/mcp-on-cloudrun/Dockerfile - Fügen Sie der Dockerfile den folgenden Code hinzu, um das Tool
uvzum Ausführen der Dateiserver.pyzu verwenden:# Use the official Python image FROM python:3.13-slim # Install uv COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ # Install the project into /app COPY . /app WORKDIR /app # Allow statements and log messages to immediately appear in the logs ENV PYTHONUNBUFFERED=1 # Install dependencies RUN uv sync EXPOSE $PORT # Run the FastMCP server CMD ["uv", "run", "server.py"] - Erstellen Sie ein Dienstkonto mit dem Namen
mcp-server-sa:gcloud iam service-accounts create mcp-server-sa --display-name="MCP Server Service Account" - Führen Sie den Befehl
gcloudaus, um die Anwendung in Cloud Run bereitzustellen. Verwenden Sie das Flagcd ~/mcp-on-cloudrun gcloud run deploy zoo-mcp-server \ --service-account=mcp-server-sa@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --no-allow-unauthenticated \ --region=us-west1 \ --source=. \ --labels=dev-tutorial=codelab-mcp--no-allow-unauthenticated, um eine Authentifizierung zu erzwingen. Das ist aus Sicherheitsgründen wichtig. Wenn Sie keine Authentifizierung anfordern, kann jeder Ihren MCP-Server aufrufen und möglicherweise Schäden an Ihrem System verursachen. - Bestätigen Sie die Erstellung eines neuen Artifact Registry-Repositorys. Da Sie zum ersten Mal aus dem Quellcode in Cloud Run bereitstellen, wird Folgendes angezeigt:
Geben SieDeploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-west1] will be created. Do you want to continue (Y/n)?
Yein und drücken Sie dieEnter. Dadurch wird ein Artifact Registry-Repository für Ihre Bereitstellung erstellt. Dies ist erforderlich, um den Docker-Container des MCP-Servers für den Cloud Run-Dienst zu speichern. - Nach einigen Minuten wird eine Meldung wie diese angezeigt:
Service [zoo-mcp-server] revision [zoo-mcp-server-12345-abc] has been deployed and is serving 100 percent of traffic.
Sie haben Ihren MCP-Server bereitgestellt. Jetzt können Sie ihn verwenden.
8. Remote-MCP-Server der Antigravity CLI hinzufügen
Nachdem Sie einen Remote-MCP-Server erfolgreich bereitgestellt haben, können Sie mit verschiedenen Anwendungen wie Google Code Assist oder der Antigravity CLI eine Verbindung zu ihm herstellen. In diesem Abschnitt stellen wir mit der Antigravity CLI eine Verbindung zu Ihrem neuen Remote-MCP-Server her.
- Gewähren Sie Ihrem Nutzerkonto die Berechtigung, den Remote-MCP-Server aufzurufen.
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member=user:$(gcloud config get-value account) \ --role='roles/run.invoker' - Speichern Sie Ihre Google Cloud-Anmeldedaten und die Projektnummer in Umgebungsvariablen, um sie in der Antigravity-Einstellungsdatei zu verwenden:
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)") export ID_TOKEN=$(gcloud auth print-identity-token) - Erstellen Sie einen Ordner
.gemini/antigravity-cli, falls er noch nicht vorhanden ist.mkdir -p ~/.gemini/antigravity-cli - Schreiben Sie den Remote-MCP-Server in die MCP-Konfigurationsdatei der Antigravity CLI:
cat > ~/.gemini/antigravity-cli/mcp_config.json << EOF { "mcpServers": { "zoo-remote": { "serverUrl": "https://zoo-mcp-server-${PROJECT_NUMBER}.us-west1.run.app/mcp", "headers": { "Authorization": "Bearer ${ID_TOKEN}" } } } } EOF - Starten Sie die Antigravity CLI:
agy
- Authentifizieren Sie sich mit der Antigravity CLI. Beim ersten Start ist eine Authentifizierung erforderlich. Wählen Sie OAuth aus (drücken Sie
Enter).
- Klicken Sie auf den Link. Wenn er nicht anklickbar ist, markieren Sie die URL in Cloud Shell, kopieren Sie sie und fügen Sie sie in Ihren Browser ein.
- Im Google-Konto anmelden
- Code kopieren
- Fügen Sie den Code in das Cloud Shell-Editor-Terminal ein.
- Drücken Sie die
Enter.
- Drücken Sie
Enter, um einige Standardeinstellungen zu übernehmen. - Lassen Sie die Antigravity CLI die MCP-Tools auflisten, die ihr im Kontext zur Verfügung stehen.
Drücken Sie/mcpESC, um zum Prompt-Feld zurückzukehren. - Bitten Sie die Antigravity CLI, etwas im Zoo zu finden.
Die Antigravity CLI sollte wissen, dass sie denWhere can I find penguins?zoo-remote-MCP-Server verwenden soll, und Sie fragen, ob Sie die Ausführung von MCP zulassen möchten. - Verwenden Sie den Abwärtspfeil und drücken Sie dann
Enter, um eine Option auszuwählen.Yes, always allow all tools from server "zoo-remote"

Die Ausgabe sollte die richtige Antwort und ein Feld mit dem Hinweis enthalten, dass der MCP-Server verwendet wurde.

Fertig! Sie haben einen Remote-MCP-Server erfolgreich in Cloud Run bereitgestellt und mit der Antigravity CLI getestet.
Wenn Sie Ihre Sitzung beenden möchten, geben Sie /exit ein und drücken Sie dann die Enter, um die Antigravity CLI zu beenden.
Debugging
Wenn ein Fehler wie dieser angezeigt wird:
🔍 Attempting OAuth discovery for 'zoo-remote'... ❌ 'zoo-remote' requires authentication but no OAuth configuration found Error connecting to MCP server 'zoo-remote': MCP server 'zoo-remote' requires authentication. Please configure OAuth or check server settings.
Wahrscheinlich ist das ID-Token abgelaufen und Sie müssen ID_TOKEN noch einmal festlegen.
- Geben Sie
/exitein und drücken Sie dann dieEnter, um die Antigravity CLI zu beenden. - Legen Sie Ihr Projekt im Terminal fest.
gcloud config set project [PROJECT_ID] - Führen Sie den Befehl für die Google Cloud-Anmeldedaten noch einmal aus, um ein neues
ID_TOKENzu erhalten, da Ihr Token möglicherweise abgelaufen ist, und schreiben Sie Ihre Konfigurationsdatei neu:export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)") export ID_TOKEN=$(gcloud auth print-identity-token) cat > ~/.gemini/antigravity-cli/mcp_config.json << EOF
{ "mcpServers": { "zoo-remote": { "serverUrl": "https://zoo-mcp-server-${PROJECT_NUMBER}.us-west1.run.app/mcp", "headers": { "Authorization": "Bearer ${ID_TOKEN}" } } } } EOF ```
9. (Optional) Toolaufrufe in Serverlogs überprüfen
Prüfen Sie die Dienstlogs, um zu bestätigen, dass Ihr Cloud Run-MCP-Server aufgerufen wurde.
gcloud run services logs read zoo-mcp-server --region us-west1 --limit=5
Sie sollten ein Ausgabelog sehen, das bestätigt, dass ein Toolaufruf erfolgt ist. 🛠️
2025-08-05 19:50:31 INFO: 169.254.169.126:39444 - "POST /mcp HTTP/1.1" 200 OK 2025-08-05 19:50:31 [INFO]: Processing request of type CallToolRequest 2025-08-05 19:50:31 [INFO]: >>> 🛠️ Tool: 'get_animals_by_species' called for 'penguin'
10. (Optional) MCP-Prompt zum Server hinzufügen
Ein MCP-Prompt kann Ihren Workflow für häufig ausgeführte Prompts beschleunigen, indem er eine Kurzform für einen längeren Prompt erstellt.
Die Antigravity CLI konvertiert MCP-Prompts automatisch in benutzerdefinierte Slash-Befehle, sodass Sie einen MCP-Prompt aufrufen können, indem Sie /prompt_name eingeben, wobei prompt_name der Name Ihres MCP-Prompts ist.
Erstellen Sie einen MCP-Prompt, damit Sie schnell ein Tier im Zoo finden können, indem Sie /find animal in die Antigravity CLI eingeben.
- Fügen Sie diesen Code in Ihrer Datei
server.pyüber der Hauptsperre (if __name__ == "__main__":) ein.@mcp.prompt() def find(animal: str) -> str: """ Find which exhibit and trail a specific animal might be located. """ return ( f"Please find the exhibit and trail information for {animal} in the zoo. " f"Respond with '[animal] can be found in the [exhibit] on the [trail].'" f"Example: Penguins can be found in The Arctic Exhibit on the Polar Path." ) - Stellen Sie Ihre Anwendung noch einmal in Cloud Run bereit.
gcloud run deploy zoo-mcp-server \ --region=us-west1 \ --source=. \ --labels=dev-tutorial=codelab-mcp - Aktualisieren Sie Ihr ID_TOKEN und erstellen Sie die Konfigurationsdatei neu:
export ID_TOKEN=$(gcloud auth print-identity-token) export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)") cat > ~/.gemini/antigravity-cli/mcp_config.json << EOF
{ "mcpServers": { "zoo-remote": { "serverUrl": "https://zoo-mcp-server-${PROJECT_NUMBER}.us-west1.run.app/mcp", "headers": { "Authorization": "Bearer ${ID_TOKEN}" } } } } EOF ```
- Nachdem die neue Version Ihrer Anwendung bereitgestellt wurde, starten Sie die Antigravity CLI.
agy - Verwenden Sie im Prompt den neuen benutzerdefinierten Befehl, den Sie erstellt haben:
/find lions
Sie sollten sehen, dass die Antigravity CLI das Tool get_animals_by_species aufruft und die Antwort wie im MCP-Prompt angegeben formatiert.
╭───────────────────────────╮
│ > /find lions │
╰───────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✔ get_animals_by_species (zoo-remote MCP Server) get_animals_by_species (zoo-remote MCP Server) │
│ │
│ [{"species":"lion","name":"Leo","age":7,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Nala","age":6,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Simba","age":3,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"King","age":8,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah Heights"}] │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ Lions can be found in The Big Cat Plains on the Savannah Heights.
11. (Optional) Gemini Flash Lite für schnellere Antworten verwenden
Mit der Antigravity CLI können Sie das Modell und den Aufwand auswählen, den Sie verwenden.
Da für die Anfragen zum Finden der Zootiere kein Nachdenken oder Schlussfolgern erforderlich ist, können Sie die Dinge beschleunigen, indem Sie ein schnelleres Modell verwenden.
Im vorherigen Abschnitt haben Sie einen MCP-Prompt erstellt, damit Sie schnell ein Tier im Zoo finden können, indem Sie /find animal in die Antigravity CLI eingeben.
- Nachdem die neue Version Ihrer Anwendung bereitgestellt wurde, starten Sie die Antigravity CLI.
agy --model=gemini-3.6-flash --effort=low - Verwenden Sie im Prompt den neuen benutzerdefinierten Befehl, den Sie erstellt haben:
/find lions
Sie sollten immer noch sehen, dass die Antigravity CLI das Tool get_animals_by_species aufruft und die Antwort wie im MCP-Prompt angegeben formatiert, aber die Antwort sollte viel schneller angezeigt werden.
╭───────────────────────────╮
│ > /find lions │
╰───────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✔ get_animals_by_species (zoo-remote MCP Server) get_animals_by_species (zoo-remote MCP Server) │
│ │
│ [{"species":"lion","name":"Leo","age":7,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Nala","age":6,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Simba","age":3,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"King","age":8,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah Heights"}] │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ Lions can be found in The Big Cat Plains on the Savannah Heights.
Debugging
Wenn ein Fehler wie dieser angezeigt wird:
✕ Unknown command: /find lions
Versuchen Sie, /mcp auszuführen. Wenn zoo-remote - Disconnected ausgegeben wird, müssen Sie möglicherweise noch einmal bereitstellen oder die folgenden Befehle noch einmal ausführen:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member=user:$(gcloud config get-value account) \
--role='roles/run.invoker'
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)")
export ID_TOKEN=$(gcloud auth print-identity-token)
cat > ~/.gemini/antigravity-cli/mcp_config.json << EOF
{
"mcpServers": {
"zoo-remote": {
"serverUrl": "https://zoo-mcp-server-${PROJECT_NUMBER}.us-west1.run.app/mcp",
"headers": {
"Authorization": "Bearer ${ID_TOKEN}"
}
}
}
}
EOF
12. Fazit
Glückwunsch! Sie haben einen sicheren Remote-MCP-Server erfolgreich bereitgestellt und eine Verbindung zu ihm hergestellt.
Nächstes Lab aufrufen
Dieses Lab ist das erste Lab einer dreiteiligen Reihe. Im zweiten Lab verwenden Sie den von Ihnen erstellten MCP-Server mit einem ADK-Agenten.
MCP-Server in Cloud Run mit einem ADK-Agenten verwenden
(Optional) Bereinigen
Wenn Sie nicht mit dem nächsten Lab fortfahren und die erstellten Ressourcen bereinigen möchten, können Sie Ihr Cloud-Projekt löschen, um zusätzliche Gebühren zu vermeiden.
Während für Cloud Run keine Kosten anfallen, wenn der Dienst nicht verwendet wird, wird Ihnen dennoch das Speichern des Container-Images in Artifact Registry möglicherweise in Rechnung gestellt. Durch das Löschen Ihres Cloud-Projekts wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.
Wenn Sie möchten, löschen Sie das Projekt:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Möglicherweise möchten Sie auch unnötige Ressourcen von Ihrem Cloud Shell-Laufwerk löschen. Sie haben folgende Möglichkeiten:
- Löschen Sie das Codelab-Projektverzeichnis:
rm -rf ~/mcp-on-cloudrun - Warnung! Diese nächste Aktion kann nicht rückgängig gemacht werden. Wenn Sie alles in Ihrer Cloud Shell löschen möchten, um Speicherplatz freizugeben, können Sie Ihr gesamtes Basisverzeichnis löschen. Achten Sie darauf, dass alles, was Sie behalten möchten, an einem anderen Ort gespeichert ist.
sudo rm -rf $HOME