MCP-Server mit der Gemini CLI und Go erstellen

1. Einführung

In diesem Codelab erfahren Sie, wie Sie einen MCP-Server (Model Context Protocol) erstellen und bereitstellen, um die Funktionen der Gemini CLI zu erweitern. Sie entwickeln godoctor, einen auf Go basierenden Server, der benutzerdefinierte Tools für die Go-Entwicklung bereitstellt und die Gemini CLI von einem Coding-Assistenten für allgemeine Zwecke in einen spezialisierten Go-Entwicklungsexperten verwandelt.

In diesem Codelab wird ein „promptgesteuerter“ Ansatz verwendet. Sie leiten ein Team und geben Ihrem KI-Assistenten (der Gemini CLI) Prompts. Ihr Ziel ist es, zu lernen, wie Sie Projektanforderungen in effektive Prompts umwandeln und die KI die Implementierungsdetails erledigen lassen.

Das Herzstück dieses Projekts ist das Model Context Protocol (MCP). MCP ist ein Open-Source-Protokoll, das die Kommunikation von Large Language Models (LLMs) wie Gemini mit externen Tools und Diensten standardisiert. Es fungiert als eine Brücke, die es der KI ermöglicht, auf Informationen aus der realen Welt zuzugreifen und Aktionen auszuführen, die über ihr integriertes Wissen hinausgehen. Wenn Sie einen MCP-Server erstellen, erstellen Sie ein benutzerdefiniertes Plug-in, das die Gemini CLI erkennen und verwenden kann. So bringen Sie ihr neue Fähigkeiten bei.

Lerninhalte

  • Gemini CLI installieren und konfigurieren
  • Effektive Prompts formulieren, um einen KI-Assistenten bei der Softwareentwicklung anzuleiten
  • Kontext und Richtlinien für einen KI‑Assistenten bereitstellen
  • Einen MCP-Server erstellen und konfigurieren, um die Funktionen der Gemini CLI zu erweitern
  • Eine Go-Anwendung containerisieren und in Google Cloud Run bereitstellen

Voraussetzungen

Dieser Workshop kann vollständig in der Google Cloud Shell durchgeführt werden, in der alle erforderlichen Abhängigkeiten (gcloud CLI, Go, Docker, Gemini CLI) vorinstalliert sind.

Alternativ benötigen Sie Folgendes, wenn Sie lieber auf Ihrem eigenen Computer arbeiten möchten:

  • Node.js 20 oder höher
  • Das Google Cloud SDK (gcloud CLI) ist installiert und initialisiert.
  • Go 1.24 oder höher ist auf Ihrem System installiert.
  • Docker ist auf Ihrem System installiert.

Wichtige Technologien

Hier finden Sie weitere Informationen zu den Technologien, die wir verwenden:

  • Gemini CLI: Die KI-basierte Befehlszeile, die wir erweitern werden
  • Model Context Protocol (MCP): das Open-Source-Protokoll, über das die Gemini CLI mit unserem benutzerdefinierten Tool kommunizieren kann
  • Go SDK for MCP: die Go-Bibliothek, die zum Implementieren des MCP-Servers verwendet wird

Tipps für ein erfolgreiches Codelab

Die Arbeit mit einem KI-Assistenten ist eine neue Art der Softwareentwicklung. Hier sind einige Tipps dazu, wie Sie die Funktion optimal nutzen können:

  1. Drücken Sie einfach die ESC-Taste. Die KI schlägt manchmal Aktionen oder Code vor, mit denen Sie nicht einverstanden sind. Mit der ESC-Taste können Sie den Vorschlag abbrechen und einen neuen Prompt eingeben, um Gemini in die richtige Richtung zu lenken. Sie haben das Sagen.
  2. Ermutigen Sie zur Verwendung von Tools. Wenn die KI sich zu verirren scheint oder Informationen erfindet, fordern Sie sie auf, die verfügbaren Tools zu nutzen. Prompts wie „Kannst du das mit der Google Suche überprüfen?“ oder „Verwende das Tool ‚read_file‘, um den aktuellen Code zu verstehen, bevor du Änderungen vornimmst“ können sehr effektiv sein.
  3. Vermeiden Sie manuelle Änderungen. Lassen Sie die KI möglichst die ganze Arbeit machen. Das ist die Kernkompetenz, die Sie üben. Wenn Sie jedoch eine manuelle Änderung vornehmen müssen, informieren Sie die KI anschließend darüber. Ein Prompt wie „Ich habe die Datei ‚README.md‘ manuell aktualisiert. Bitte lies sie noch einmal, um dein Wissen aufzufrischen.“ sorgt dafür, dass die KI mit Ihrem Projekt synchron bleibt.
  4. Haben Sie es schon mit Aus- und Einschalten versucht? In seltenen Fällen kann es vorkommen, dass die KI ein bestimmtes Vorgehen erzwingen möchte, obwohl Sie einen anderen Befehl gegeben haben. Das kann an einer Kontextverschlechterung liegen. In diesem Fall können Sie den Gemini CLI-Befehl „/compress“ verwenden, um das Kontextrauschen zu reduzieren. In extremen Fällen können Sie mit dem Befehl „/clear“ den gesamten Sitzungsverlauf löschen.

2. Umgebung einrichten

Wählen Sie eine der folgenden Optionen aus: Einrichtung der Umgebung im eigenen Tempo, wenn Sie diese

Codelab auf Ihrem eigenen Computer ausführen oder Cloud Shell starten, wenn Sie dieses Codelab vollständig in der Cloud ausführen möchten.

Einrichtung der Umgebung im eigenen Tempo

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als PROJECT_ID angegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
  1. Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am Programm Kostenlose Testversion mit einem Guthaben von 300$ teilnehmen.

Cloud Shell starten

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der Google Cloud Console rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:

Cloud Shell aktivieren

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

Screenshot des Google Cloud Shell-Terminals, auf dem zu sehen ist, dass die Umgebung verbunden ist

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Alle Aufgaben in diesem Codelab können in einem Browser ausgeführt werden. Sie müssen nichts installieren.

3. Erste Schritte mit der Gemini CLI

In diesem Abschnitt erfahren Sie mehr über die Gemini CLI, einschließlich der Installation und Konfiguration für Ihre Umgebung.

Was ist die Gemini CLI?

Die Gemini CLI ist eine KI-basierte Befehlszeile, die Sie bei einer Vielzahl von Entwicklungsaufgaben unterstützen kann. Gemini kann den Kontext Ihres Projekts verstehen, Fragen beantworten, Code generieren und externe Tools verwenden, um seine Fähigkeiten zu erweitern.

Installation

Installieren Sie die Gemini CLI global mit npm.

npm install -g @google/gemini-cli

Mit dem folgenden Befehl können Sie prüfen, ob die CLI installiert ist:

gemini --version

Konfiguration

Das Verhalten der Gemini CLI wird durch Konfigurationsdateien und Umgebungsvariablen gesteuert. Es gibt zwei wichtige Dateien:

  • GEMINI.md: Diese Datei enthält Richtlinien und Kontext für die KI. Die CLI liest diese Datei, um die Coding-Standards und -Konventionen Ihres Projekts zu verstehen.
  • .gemini/settings.json: Diese Datei steuert die Konfiguration der CLI, einschließlich der Verbindung zu externen Tools. Wir verwenden diese Datei später, um die CLI so zu konfigurieren, dass der MCP-Server verwendet wird, den wir in diesem Lab erstellen.

Wir richten zuerst die Umgebung ein und erstellen dann die Datei GEMINI.md. Die Datei settings.json wird in einem späteren Schritt konfiguriert.

  1. Erstellen und initialisieren Sie ein Projektverzeichnis:
mkdir godoctor && cd godoctor
go mod init godoctor
  1. Authentifizieren Sie sich mit den Standardanmeldedaten für Anwendungen von Google Cloud:

Wir müssen uns in einem Konto anmelden, das Zugriff auf das GCP-Projekt hat, das Sie für dieses Codelab verwenden möchten:

gcloud auth application-default login

4. Kontextdatei (GEMINI.md)

Kontextdateien mit dem Standardnamen GEMINI.md werden verwendet, um dem Gemini-Modell einen instruktionalen Kontext bereitzustellen. Mit diesen Dateien können Sie projektspezifische Anweisungen geben, eine Persona definieren oder Leitfäden zum Programmierstil bereitstellen, damit die Antworten der KI genauer und besser auf Ihre Bedürfnisse zugeschnitten sind.

Damit der KI-Assistent hochwertigen, idiomatischen Go-Code generiert, erstellen wir eine GEMINI.md-Datei mit einigen gängigen Best Practices für Go-Entwickler.

Ziel: Erstellen Sie eine GEMINI.md-Datei, die als Regelwerk für den KI-Assistenten während dieses Projekts dient.

Öffnen Sie Ihre IDE, um die Datei GEMINI.md mit dem folgenden Inhalt zu erstellen. Wenn Sie Cloud Shell verwenden, können Sie einen Editor mit dem folgenden Befehl öffnen:

cloudshell edit .

Aufgabe: Erstellen Sie im Stammverzeichnis Ihres „godoctor“-Verzeichnisses eine Datei mit dem Namen GEMINI.md und fügen Sie den folgenden Inhalt ein.

# Go Development Guidelines
All code contributed to this project must adhere to the following principles.

## 1. Formatting
All Go code **must** be formatted with `gofmt` before being submitted.

## 2. Naming Conventions
- **Packages:** Use short, concise, all-lowercase names.
- **Variables, Functions, and Methods:** Use `camelCase` for unexported identifiers and `PascalCase` for exported identifiers.
- **Interfaces:** Name interfaces for what they do (e.g., `io.Reader`), not with a prefix like `I`.

## 3. Error Handling
- Errors are values. Do not discard them.
- Handle errors explicitly using the `if err != nil` pattern.
- Provide context to errors using `fmt.Errorf("context: %w", err)`.

## 4. Simplicity and Clarity
- "Clear is better than clever." Write code that is easy to understand.
- Avoid unnecessary complexity and abstractions.
- Prefer returning concrete types, not interfaces.

## 5. Documentation
- All exported identifiers (`PascalCase`) **must** have a doc comment.
- Comments should explain the *why*, not the *what*.

## 6. Project structure
- cmd/ contains source code for target binaries (e.g. server, client)
- internal/ contains source code for packages not meant to be exported (e.g. internal/tools/hello)
- bin/ contains the compiled binaries
- At the root place README.md, go.mod and go.sum

Ihre Entwicklungsumgebung ist jetzt vollständig eingerichtet.

5. Der erste Build: Ein Dokumentationsserver

Ihr erstes Ziel ist es, die erste Version des godoctor-Servers zu erstellen. Diese Version sollte eine minimale Anwendung sein, die ein einzelnes Tool namens read_docs bereitstellt, mit dem die Go-Dokumentation aufgerufen werden kann.

Ziel: Einen produktionsreifen MCP-Server erstellen, der den Befehl „go doc“ bereitstellt, sodass ein LLM die Go-Dokumentation abfragen kann.

Gemini CLI-Befehl in der Shell ausführen:

gemini

Wenn Sie die CLI zum ersten Mal ausführen, werden Sie aufgefordert, einen Authentifizierungsmodus und ein Design auszuwählen.

Wenn Sie dieses Codelab in Cloud Shell ausführen, wählen Sie die Option Cloud Shell-Nutzeranmeldedaten verwenden aus. Wenn nicht, können Sie sich mit einem privaten Google-Konto über Google anmelden, um von der großzügigen kostenlosen Nutzung der Gemini CLI zu profitieren. Der Bildschirm für die Auswahl der Authentifizierung sieht in etwa so aus:

ea1ed66807150f3f.png

Falls Sie Ihre Auswahl ändern müssen, können Sie /auth eingeben und die Eingabetaste drücken, um dieses Menü wieder zu öffnen.

Als Nächstes werden Sie aufgefordert, ein Thema auszuwählen:

6289bdfb3b519fa7.png

Ähnlich wie bei /auth können Sie das Design später mit dem Befehl /theme ändern.

Nachdem Sie die Authentifizierungsmethode und Ihr bevorzugtes Design ausgewählt haben, werden Sie zur Eingabeaufforderung weitergeleitet. Hier können Sie Ihre Befehle eingeben, z. B.:

Write a hello world application in Go

Die CLI nutzt eine Kombination aus eigenen Schlussfolgerungen (über ein Gemini-Modell wie Gemini Flash oder Gemini Pro) und Tools, um die Aufgaben auszuführen. Es verwendet Tools, wenn es mit dem Dateisystem oder externen Diensten wie APIs, Datenbanken usw. interagieren muss. Beispiele für die sofort einsatzbereiten („internen“) Tools sind read_file, write_file, web_fetch und google_search. Der MCP-Server, den wir erstellen, wird ebenfalls zu einem Tool, das in der CLI verfügbar ist.

Wenn das Tool zum ersten Mal ausgeführt wird, werden Sie um Erlaubnis gefragt. Sie können eine einmalige Berechtigung erteilen („Einmal zulassen“), eine Erlaubnis für die gesamte Sitzung geben („Immer zulassen“) oder die Anfrage ablehnen. Wenn es sich um eine Dateibearbeitung handelt, finden Sie auch die Option, die Datei mit einem externen Editor zu bearbeiten, falls Sie einige Anpassungen vornehmen möchten. Hier sehen Sie beispielsweise die Ausgabe des oben genannten Prompts zum Erstellen eines „Hello World“-Programms:

2cfd761183e4b770.png

Neben Prompts können Sie auch Slash-Befehle verwenden. Wenn Sie „/“ eingeben, werden Ihnen automatisch die Optionen für die automatische Vervollständigung angezeigt. Sie können den Befehl weiter eingeben oder eine Option auswählen. Die oben erwähnten Befehle /auth und /theme sind Beispiele für solche Befehle.

26c3f3f7b8bceb3f.png

Sobald Sie mit der Benutzeroberfläche vertraut sind, können Sie mit der Hauptaufgabe dieses Abschnitts beginnen: Sie bitten die CLI, den MCP-Server für Sie zu schreiben.

„Hello World“-MCP-Server erstellen

Eine der besten Möglichkeiten, um sicherzustellen, dass das Modell Dinge konsistenter erstellt, ist, komplexe Aufgaben in einzelne Schritte zu unterteilen. Das Modell kann zwar komplexe Aufgaben selbstständig lösen, aber ohne die richtige Einrichtung kann es lange dauern, bis die richtige Implementierung gefunden wird.

Lassen Sie für einen einheitlicheren Ansatz zuerst einen „Hello World“-MCP-Server erstellen, bevor Sie die gewünschte Funktion (Go-Dokumentation lesen) implementieren.

Hier ein Beispiel für einen Prompt:

Create a Model Context Protocol (MCP) server that exposes a "hello_world" tool. This tool, when called, should return the message "Hello, MCP world!"

For the MCP implementation, you should use the official Go SDK for MCP (github.com/modelcontextprotocol/go-sdk/mcp) and use the stdio transport.

TODO:
- Download the dependency: `go get github.com/modelcontextprotocol/go-sdk/mcp`
- Inspect the documentation of the SDK: `go doc github.com/modelcontextprotocol/go-sdk/mcp`
- Build a `server` command that supports stdio transport only
- Build a `client` command that connects to the server over command transport to test the server

Acceptance Criteria:
- `./bin/client --list-tools` returns the list of server tools including "hello_world"
- `./bin/client --call-tool` "hello_world" returns the output "Hello, MCP world!"

Der Prompt oben besteht aus drei Hauptsegmenten:

  1. Die Problembeschreibung, einschließlich des gewünschten Ergebnisses und der Einschränkungen (z.B. Verwendung des offiziellen SDK statt eines beliebigen SDK, stdio-Transport statt HTTP)
  2. Aufschlüsselung der zu erledigenden Aufgaben (TODOs)
  3. Akzeptanzkriterien für die Aufgabe, die als Testverfahren dienen, damit der Agent weiß, wann die Aufgabe abgeschlossen ist

Diese drei Komponenten helfen dem Modell, konsistenter die gewünschten Ergebnisse zu erzielen.

Implementierung des read_docs-Tools

Sobald Sie eine funktionierende Implementierung haben, können Sie mit der Implementierung des eigentlichen „read_docs“-Tools fortfahren:

Add a new tool to our MCP server called "read_docs" that invokes the "go doc" shell command. The tool will take a mandatory "package" argument and an optional "symbol" argument.

TODO:
- create a package `./internal/tools/docs`
- register the tool with the MCP server
- update the client to support the "read_docs" tool by providing arguments to the tool call

Acceptance Criteria:
- `./bin/client --tools-list` show both hello_world and read_docs
- `./bin/client --tool-call read_docs fmt` returns the documentation for the `fmt` package
- `./bin/client --tool-call read_docs fmt.Println` returns the documentation for the `fmt.Println` function
- `./bin/client --tool-call read_docs github.com/modelcontextprotocol/go-sdk/mcp` returns documentation for the `mcp` package

Hinweis: Sie können gern mit diesem Prompt experimentieren oder sich selbst einen ausdenken.

Nützliche Tipps

Da MCP noch ein relativ neues Konzept und das Go SDK for MCP eine neue Bibliothek ist, kann es in diesem Schritt lange dauern, bis Gemini von sich aus die richtige Implementierung findet. Damit das Modell die richtige Lösung findet, können Sie Folgendes versuchen:

  1. Wenn das Modell in einem Schritt die Dokumentation übersprungen hat, drücken Sie die ESC-Taste und erinnern Sie es daran, dies zu tun. Wenn Sie mit Go nicht vertraut sind, wird mit „go doc“ plus dem Namen des Pakets „go doc github.com/modelcontextprotocol/go-sdk/mcp“ die richtige Dokumentation zurückgegeben.
  2. Für das Modul der obersten Ebene github.com/modelcontextprotocol/go-sdk gibt es keine Dokumentation, da es keinen Go-Code enthält. Sie müssen dem Modell den vollständigen Pfad mitteilen.
  3. Wenn das Modell hingegen ein Paket halluziniert, das nicht vorhanden ist, z.B. „go doc github.com/modelcontextprotocol/go-sdk/mcp/server“ – weise es einfach auf das Paket der obersten Ebene hin.

6. „godoctor“ als MCP-Server für die Gemini CLI konfigurieren

Nachdem der KI-Assistent den Code für Client und Server generiert hat, können Sie ihn anweisen, einige manuelle Tests durchzuführen. Beispiel:

retrieve the documentation for the package net/http

Testen Sie ihn auch mit einer externen Abhängigkeit (nicht in der Standardbibliothek):

retrieve the documentation for the github.com/modelcontextprotocol/go-sdk/mcp package

Wenn Sie mit den Ergebnissen zufrieden sind, lassen Sie ihn eine README.md-Datei mit Anweisungen zur Verwendung und Entwicklung dieses Projekts erstellen.

Now write a detailed README.md file explaining both from a user and a developer perspective how to use and to build this project.

Jetzt konfigurieren wir den Server, damit die Gemini CLI ihn in der nächsten Entwicklungsphase verwenden kann.

  1. Fordern Sie die CLI auf, GEMINI.md so zu aktualisieren, dass read_docs als bevorzugte Methode zum Lesen von Dokumentationen verwendet wird:
update the GEMINI.md file to include instructions to always use the read_docs tool to retrieve documentation about Go packages or symbols. This should be done whenever seeing an import for the first time in a session or after a new dependency is installed to the project (e.g. via `go get`)
  1. Jetzt müssen wir die Gemini CLI neu starten, um den MCP-Server zu konfigurieren. Zuerst speichern wir die Chatsitzung, damit Sie nach dem Neustart dort weitermachen können, wo Sie aufgehört haben.
/chat save godoctor-workshop
  1. Beenden Sie die CLI, indem Sie zweimal Strg + D drücken oder den Befehl /quit eingeben.
  2. In den vorherigen Schritten sollte der Agent eine Serverbinärdatei für Sie kompiliert haben. Wir kompilieren den Server jedoch noch einmal mit einem anderen Namen, damit er nicht beeinträchtigt wird, wenn wir seinen Quellcode ändern:
mkdir -p bin && go build -o ./bin/godoctor ./cmd/server
  1. Gemini CLI für das lokale Tool konfigurieren: Erstellen Sie im Stammverzeichnis Ihres Projekts eine .gemini/settings.json-Datei und fügen Sie einen mcpServers-Abschnitt hinzu, um der Gemini CLI mitzuteilen, wie der kompilierte Server ausgeführt werden soll.
mkdir -p .gemini && touch .gemini/settings.json
  1. Fügen Sie der neuen Datei nun den folgenden Inhalt hinzu. Verwenden Sie dazu entweder den Cloud Shell-Editor oder Ihre bevorzugte IDE.
{
  "mcpServers": {
    "godoctor": {
      "command": "./bin/godoctor"
    }
  }
}
  1. Gemini CLI mit dem Befehl gemini starten
  2. Sie sollten sehen können, dass das Tool geladen wird, wenn Sie den Befehl /mcp eingeben. Sie können auch die vollständige Beschreibung der Tools mit /mcp desc aufrufen:

13a5a979b9d5408d.png

  1. Testen Sie die Integration, indem Sie Gemini CLI mit einem Prompt wie „Zeige mir die Dokumentation für das Paket net/http“ auffordern, Ihr Tool zu verwenden.

Auf dem Bildschirm sollte Folgendes zu sehen sein:

fdaa342e76dc5b52.png

Wenn das Tool korrekt funktioniert, sollten Sie die Dokumentation sehen, die über den Toolaufruf abgerufen wurde:

defa9d11314522d4.png

Glückwunsch, Sie haben ein MCP-Tool erstellt! Aber das ist noch nicht alles. Wir können diesen Server noch etwas nützlicher machen.

7. KI-basierte Codeüberprüfung hinzufügen

Fügen wir eine anspruchsvollere, KI-basierte Funktion hinzu: einen Code-Reviewer, der die Gemini API verwendet.

Sie können die vorherige Chatsitzung jetzt mit dem Befehl /chat resume godoctor-workshop. wiederherstellen. Dadurch wird der Sitzungskontext bis zu dem Punkt geladen, an dem wir die Entwicklung von read_docs abgeschlossen haben. Das Modell verfügt also über das Wissen, das zum Erstellen des neuen Tools erforderlich ist.

Für dieses Tool ist Zugriff auf Vertex AI erforderlich. Daher müssen wir die API zuerst aktivieren. Sie können Shell-Befehle ausführen, ohne die Gemini CLI zu verlassen, indem Sie in einen leeren Prompt ein Ausrufezeichen (!) eingeben. Dadurch wird die Gemini CLI in den Shell-Modus versetzt.

Führen Sie den folgenden Befehl im Shell-Modus aus, um die Vertex AI API zu aktivieren:

gcloud services enable aiplatform.googleapis.com

Wenn der Befehl ausgeführt wurde, können Sie durch Drücken der Esc-Taste wieder in den Prompt-Modus wechseln.

Ziel: Dem vorhandenen Projekt soll ein neues Tool namens „code_review“ hinzugefügt werden. Dieses Tool verwendet die Gemini API, um Go-Code zu analysieren und Feedback zu geben.

Beispielprompt:

Add a new tool to my project called code_review. This tool should use the Gemini API on Vertex AI (with model id gemini-2.5-pro) to analyze Go code and provide a list of improvements according to the best practices accepted by the Go community.

The tool should take the Go code content and an optional hint as input. The hint will be used to provide additional guidance for the AI reviewer, like "focus on security" or "help me simplify this code".

The tool output should be text in Markdown format.

TODO:
- add the genai SDK dependency with `go get import google.golang.org/genai`
- create the tool code in ./internal/tools/code/review.go
- create a code review prompt to be used by the tool
- use go-genai with Vertex AI authentication to call gemini-2.5-pro
- register the tool with the server
- add a flag to the server to set the Google Cloud Project ID: --project
- add a flag to the server to set the Google Cloud Location: --location
- add support to the review tool in the client CLI

NOT TO DO:
- DO NOT use the package github.com/google/generative-ai-go/genai as it is DEPRECATED
- DO NOT use the package cloud.google.com/go/vertexai/genai as it has been superseded by google.golang.org/genai

Acceptance Criteria:
- `./bin/client --tools-list` show all tools including `code_review`
- `./bin/client --tool-call code_review internal/tools/code/review.go` returns the code review for the "review.go" file

Nützliche Tipps

  1. Sobald das Modell mit der Bearbeitung beginnt, wird möglicherweise automatisch das read_docs-Tool aufgerufen, um die Dokumentation für das genai-Paket aufzurufen. Wenn nicht, können Sie den Vorgang jederzeit mit der Esc-Taste unterbrechen und das Modell daran erinnern, dass es jetzt das Tool read_docs zur Verfügung hat.
  2. Wenn das Modell versucht, das falsche GenAI SDK zu verwenden, obwohl in der Aufforderung eine eindeutige Liste mit nicht zulässigen SDKs enthalten ist, weisen Sie es auf das richtige SDK hin.

Code Reviewer testen

  1. Speichern Sie die Chatsitzung mit /chat save godoctor-workshop und beenden Sie dann die CLI, indem Sie zweimal Strg + D drücken.
  2. Kompilieren Sie den Server mit der neuen Tooldefinition neu:.
go build -o ./bin/godoctor ./cmd/server
  1. Aktualisieren Sie die Datei .gemini/settings.json in Ihrer IDE, um die Umgebungskonfiguration für Vertex AI einzuschließen:
{
  "mcpServers": {
    "godoctor": {
      "command": "./bin/godoctor",
      "env": {
        "GOOGLE_CLOUD_USE_VERTEXAI": "true",
        "GOOGLE_CLOUD_PROJECT": "<your-project-id>",
        "GOOGLE_CLOUD_LOCATION": "<your-preferred-region>"
      }
    }
  }
}
  1. Starten Sie die Gemini CLI noch einmal. Chat-Sitzung mit /chat resume godoctor-workshop wiederherstellen
  2. Prüfen Sie mit dem Befehl /mcp, ob das Tool aktiviert ist. Auf dem Bildschirm sollte Folgendes zu sehen sein:

f78b39f95edf358a.png

  1. Sehen wir uns nun das Tool code_review an, indem wir eine der Quelldateien des Tools prüfen:
Use the code_review tool to review cmd/server/main.go
    You should see something like this:

d946dcc99f5e37b9.png

Nachdem das Tool zur Codeüberprüfung funktioniert, können Sie dem Modell vorschlagen, einige der gefundenen Verbesserungen anzuwenden. So erhalten Sie einen vollständigen Workflow, der sich selbst verbessert.

Sie haben jetzt bestätigt, dass das code-review-Tool funktioniert. Im nächsten Abschnitt stellen Sie die Anwendung in der Cloud bereit. Speichern Sie Ihre aktuelle Sitzung mit /chat save godoctor-workshop und beenden Sie die Befehlszeile.

8. Server für die Cloud vorbereiten

Der MCP-Server, den wir bisher entwickelt haben, läuft nur auf dem lokalen Computer. Das ist in Ordnung, wenn Sie Tools für den eigenen Gebrauch entwickeln. In Unternehmensumgebungen müssen Sie jedoch oft Tools für eine breitere Nutzung durch Hunderte oder sogar Tausende von Entwicklern bereitstellen.

Um unseren MCP-Server zu skalieren, müssen wir ihn von einem Server, der nur Standard-I/O unterstützt, in einen Server umwandeln, der HTTP unterstützt, und ihn an einem Ort bereitstellen, an dem er für verschiedene Entwicklerinnen und Entwickler zugänglich ist. Dazu verwenden wir einen Transportmodus, der in der MCP-Spezifikation als streamfähiges HTTP definiert ist, sowie Cloud Run als Bereitstellungsziel.

Ziel: Den „godoctor“-Server so refaktorieren, dass er den streamfähigen HTTP-Transport verwendet.

Beispielprompt:

The godoctor server is currently using the stdio transport. I want to prepare it to be deployed to Cloud Run, so we need to add support to use the Streamable HTTP transport.

TODO:
- Update server to enable Streamable HTTP via the -http flag.
- An optional -listen flag can be specified to set the port to listen
- If no -http flag is specified, the server defaults to stdio transport and -listen is ignored
- Update client to use Streamable HTTP via the -addr flag
- If no flag is specified, the client defaults to command transport
- Create a shell script test_server.sh to support testing

NOT TO DO:
- DO NOT use the HTTP+SSE protocol as it has been deprecated by the MCP specification

Acceptance Criteria
- Create a shell script that:
  - Runs the server in the background;
  - Runs the client connecting over HTTP and call list tools
  - Kills the background process
- The shell script should run without failures

Nützliche Tipps

  1. Das Modell versucht möglicherweise, stattdessen HTTP+SSE zu verwenden, was nicht mehr unterstützt wird. Wenn Sie feststellen, dass es dies versucht, lenken Sie es zurück zu streamfähigem HTTP.
  2. Die aktuelle Version der Gemini CLI (0.26.0) unterstützt das Ausführen von Prozessen im Hintergrund nicht. Alle mit run_shell_command gestarteten Prozesse werden beendet, sobald der Tool-Aufruf zurückgegeben wird. Daher bitten wir Gemini, den Testprozess mithilfe eines Skripts zu automatisieren. Diese Funktion ist geplant und wird in naher Zukunft hinzugefügt. Sie kann den Testprozess vereinfachen.

Optional: MCP-Server mit HTTP testen

So konfigurieren Sie die Gemini CLI für die Verwendung des Servers über HTTP:

  1. Sitzung speichern und CLI beenden
  2. Bearbeiten Sie die Datei .gemini/settings.json und ändern Sie die Konfiguration so, dass sie auf Ihren lokal ausgeführten Server verweist.
"mcpServers": {
  "godoctor": {
    "httpUrl": "http://localhost:8080"
  }
}
  1. Führen Sie den HTTP-fähigen Server in einem zweiten Terminal lokal aus:
go build -o ./bin/godoctor ./cmd/server && ./bin/godoctor -listen=:8080
  1. Starten Sie die Gemini CLI neu und geben Sie einen Prompt ein, um die Verbindung zu testen, z.B.: „Verwende das godoctor-Tool, um die Dokumentation für fmt.Println abzurufen.“
  2. Beenden Sie den Server mit Strg+C, wenn Sie mit dem Testen fertig sind.

9. Anwendung mit Docker containerisieren

Da unser Server jetzt das richtige Transportprotokoll verwendet, können wir ihn für die Bereitstellung containerisieren.

Ziel: Erstellen Sie ein Dockerfile, um den „godoctor“-Server in ein portierbares, produktionsreifes Container-Image zu verpacken.

Beispielprompt:

Please create a multi-stage Dockerfile that compiles the Go binary and copies it into a minimal golang image like golang:1.25.6-alpine. The image should support the following environment variables:
- GOOGLE_CLOUD_USE_VERTEXAI
- GOOGLE_CLOUD_PROJECT
- GOOGLE_CLOUD_LOCATION

Acceptance Criteria:
- The image builds successfully
- Create a script test_docker.sh to launch the docker image in background and test the connectivity with the client:
    - Call list_tools on the client pointing to the server running on Docker
    - Call read_docs for fmt.Println
    - Stop the server
- The script should run without failures

Optional: Docker-Image manuell testen

Nachdem die Dockerfile erstellt wurde, erstellen Sie das Image und führen es aus, um sicherzugehen, dass es korrekt funktioniert.

  1. Erstellen Sie den Container:
docker build -t godoctor:latest .
  1. Führen Sie den Container lokal aus:
docker run -p 8080:8080 -e PORT=8080 godoctor:latest
  1. Laufenden Container testen: Starten Sie die Gemini CLI in einem anderen Terminal und bitten Sie sie, die Dokumentation abzurufen.
  2. Beenden Sie den Server mit Strg+C, wenn Sie mit dem Testen fertig sind.

10. In Cloud Run bereitstellen

Jetzt können Sie den Container in der Cloud bereitstellen.

Ziel: Den containerisierten „godoctor“-Server in Google Cloud Run bereitstellen.

Beispielprompt:

Now please deploy this image to Cloud Run and return me an URL I can use to call the MCP tool. Configure Cloud Run to use the following environment variables:
- GOOGLE_CLOUD_USE_VERTEXAI: true,
- GOOGLE_CLOUD_PROJECT: <your-project-id>
- GOOGLE_CLOUD_LOCATION: <your-preferred-region>

TODO:
- Run `docker build -t gcr.io/daniela-genai-sandbox/godoctor .`
- Run `gcloud run deploy godoctor --image` with the image created above

Acceptance Criteria:
- Call list-tools with the client pointing to the CloudRun endpoint

Nachdem die Bereitstellung abgeschlossen ist, konfigurieren wir die Gemini CLI so, dass das gerade bereitgestellte Tool verwendet wird.

Aktualisieren Sie die Datei .gemini/settings.json, um die MCP-Toolkonfiguration so zu ändern, dass sie auf den bereitgestellten Dienst verweist. Alternativ können Sie Gemini CLI darum bitten:

now update the .gemini/settings.json file to use this URL for the godoctor server

Der letzte Abschnitt mcpServers sollte so aussehen (vergessen Sie nicht, den Platzhalter durch die tatsächliche URL Ihrer Cloud Run-App zu ersetzen):

"mcpServers": {
  "godoctor": {
    "httpUrl": "https://<your-cloud-run-id>.us-central1.run.app"
  }
}

Cloud Run-Bereitstellung testen

Jetzt können Sie den abschließenden End-to-End-Test durchführen.

Starten Sie die Gemini CLI ein letztes Mal neu (mit /chat save und /chat resume, wenn Sie den Kontext beibehalten möchten). Jetzt sollte die CLI den Remote-MCP-Server aufrufen können. Fragen Sie nach der Dokumentation für beliebige Pakete.

Sie können das Code-Review-Tool auch so testen:

Use the godoctor tool to review the cmd/godoctor/main.go file

Bereinigen

Denken Sie daran, die Umgebung nach Abschluss der Tests zu bereinigen. Sie können Gemini anweisen, entweder Ihr Projekt zu löschen oder nur die Cloud Run-Bereitstellung zu entfernen. Beispiel für einen Prompt:

I'm done with my tests on the CloudRun server, please delete this deployment for me and revert my .gemini/settings.json to use the local version.

11. Glückwunsch!

Sie haben einen KI-Assistenten erfolgreich angeleitet, ein anspruchsvolles, KI-basiertes Tool zu erstellen, zu containerisieren und bereitzustellen. Noch wichtiger ist, dass Sie die grundlegende Fähigkeit der modernen Softwareentwicklung geübt haben: die Umwandlung von Anforderungen in effektive Prompts. Sie haben die Gemini CLI erfolgreich mit einem benutzerdefinierten MCP-Tool erweitert, wodurch sie zu einem leistungsstärkeren und spezialisierten Go-Entwicklungsassistenten geworden ist.

Referenzdokumente