Cara Membangun Server MCP dengan Gemini CLI dan Go

1. Pengantar

Dalam codelab ini, Anda akan mempelajari cara membangun dan men-deploy server Model Context Protocol (MCP) untuk memperluas kemampuan Gemini CLI. Anda akan membangun godoctor, server berbasis Go yang menyediakan alat kustom untuk pengembangan Go, yang mengubah Gemini CLI dari asisten coding untuk tujuan umum menjadi pakar pengembangan Go khusus.

Codelab ini menggunakan pendekatan "berbasis perintah". Anda akan berperan sebagai pemimpin teknis, yang memberikan perintah kepada asisten AI Anda (Gemini CLI). Tujuan Anda adalah mempelajari cara menerjemahkan persyaratan project menjadi perintah yang efektif dan membiarkan AI menangani detail implementasinya.

Inti dari project ini adalah Model Context Protocol (MCP). MCP adalah protokol open source yang menstandarkan cara model bahasa besar (LLM), seperti Gemini, berkomunikasi dengan alat dan layanan eksternal. Protokol ini bertindak sebagai jembatan, yang memungkinkan AI mengakses informasi dunia nyata dan melakukan tindakan di luar pengetahuan bawaannya. Dengan membangun server MCP, Anda akan membuat plugin kustom yang dapat ditemukan dan digunakan oleh Gemini CLI, sehingga secara efektif mengajarkan keterampilan baru kepadanya.

Yang akan Anda pelajari

  • Cara menginstal dan mengonfigurasi Gemini CLI
  • Cara merumuskan perintah yang efektif untuk memandu asisten AI dalam pengembangan software
  • Cara memberikan konteks dan panduan kepada asisten AI
  • Cara membuat dan mengonfigurasi server MCP untuk meningkatkan kemampuan Gemini CLI
  • Cara membuat container dan men-deploy aplikasi Go ke Google Cloud Run

Yang Anda butuhkan

Workshop ini dapat dilakukan sepenuhnya di dalam Google Cloud Shell, yang sudah terinstal sebelumnya dengan semua dependensi yang diperlukan (gcloud CLI, Go, Docker, Gemini CLI).

Atau, jika Anda lebih suka bekerja di komputer Anda sendiri, Anda akan memerlukan hal berikut:

  • Node.js 20 atau yang lebih baru
  • Google Cloud SDK (gcloud CLI) telah diinstal dan diinisialisasi
  • Go 1.24 atau yang lebih baru diinstal di sistem Anda
  • Docker diinstal di sistem Anda

Teknologi Utama

Di sini Anda dapat menemukan informasi selengkapnya tentang teknologi yang akan kami gunakan:

  • Gemini CLI: Antarmuka command line berteknologi AI yang akan kita perluas
  • Model Context Protocol (MCP): Protokol open source yang memungkinkan Gemini CLI berkomunikasi dengan alat kustom kami
  • Go SDK untuk MCP: Library Go yang akan kita gunakan untuk mengimplementasikan server MCP

Tips untuk Codelab yang Berhasil

Bekerja dengan asisten AI menjadi sebuah cara baru dalam mengembangkan software. Berikut beberapa tips agar semuanya lancar dan berhasil:

  1. Jangan ragu menekan ESC. Terkadang, AI akan menyarankan tindakan atau kode yang tidak Anda setujui. Gunakan tombol ESC untuk membatalkan tindakan yang disarankan dan berikan perintah baru untuk memandunya ke arah yang benar. Anda adalah pilotnya.
  2. Biasakan menggunakan alat. Jika AI tampak bingung atau mengarang informasi, dorong AI untuk menggunakan alat yang tersedia. Perintah seperti "Can you use Google Search to verify that?" atau "Use the read_file tool to understand the current code before making changes" bisa jadi sangat efektif.
  3. Hindari perubahan manual. Cobalah untuk meminta AI melakukan semua pekerjaan. Inilah keterampilan inti yang Anda latih. Namun, jika Anda harus melakukan perubahan manual, beri tahu AI tentang perubahan tersebut setelahnya. Perintah seperti "I have manually updated the README.md file. Please read it again to refresh your knowledge" akan memastikan AI tetap sinkron dengan project Anda.
  4. Sudahkah Anda mencoba memulainya ulang? Dalam kasus yang jarang terjadi, jika AI mencoba memaksakan jalur tertentu yang bertentangan dengan perintah Anda, hal ini mungkin disebabkan oleh degradasi konteks (terkadang juga disebut "context rot"). Dalam kasus ini, Anda dapat menggunakan perintah Gemini CLI "/compress" untuk mengurangi derau konteks, atau gunakan saja perintah "/clear" untuk menghapus seluruh histori sesi jika kasusnya sudah terlalu parah.

2. Penyiapan Lingkungan

Pilih salah satu opsi berikut: Penyiapan lingkungan mandiri jika Anda ingin menjalankan

codelab di komputer Anda sendiri, atau; Mulai Cloud Shell jika Anda ingin menjalankan codelab ini sepenuhnya di cloud.

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:

Mengaktifkan Cloud Shell

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

Screenshot terminal Google Cloud Shell yang menunjukkan bahwa lingkungan telah terhubung

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.

3. Mulai Menggunakan Gemini CLI

Di bagian ini, Anda akan mempelajari Gemini CLI, termasuk cara menginstal dan mengonfigurasinya untuk lingkungan Anda.

Apa itu Gemini CLI?

Gemini CLI adalah antarmuka command line berteknologi AI yang dapat membantu Anda dalam berbagai tugas pengembangan. Antarmuka ini dapat memahami konteks project Anda, menjawab pertanyaan, membuat kode, dan menggunakan alat eksternal untuk memperluas kemampuannya.

Penginstalan

Instal Gemini CLI secara global menggunakan npm.

npm install -g @google/gemini-cli

Anda dapat mengonfirmasi bahwa CLI telah diinstal dengan menjalankan:

gemini --version

Konfigurasi

Perilaku Gemini CLI dikontrol oleh file konfigurasi dan variabel lingkungan. Ada dua file utama:

  • GEMINI.md: File ini memberikan panduan dan konteks kepada AI. CLI membaca file ini untuk memahami standar dan konvensi coding project Anda.
  • .gemini/settings.json: File ini mengontrol konfigurasi CLI, termasuk cara terhubung ke alat eksternal. Kita akan menggunakan file ini nanti untuk mengonfigurasi CLI agar menggunakan server MCP yang kita bangun di lab ini.

Kita akan menyiapkan lingkungan terlebih dahulu, lalu dilanjutkan dengan membuat file GEMINI.md. File settings.json akan dikonfigurasi di langkah selanjutnya.

  1. Buat dan lakukan inisialisasi direktori project:
mkdir godoctor && cd godoctor
go mod init godoctor
  1. Lakukan autentikasi dengan kredensial default aplikasi Google Cloud:

Kita perlu login ke akun yang memiliki akses ke project GCP yang akan Anda gunakan untuk codelab ini:

gcloud auth application-default login

4. File Konteks (GEMINI.md)

File konteks, yang menggunakan nama default GEMINI.md, digunakan untuk memberikan konteks instruksional kepada model Gemini. Anda dapat menggunakan file ini untuk memberikan petunjuk khusus project, menentukan persona, atau memberikan panduan gaya coding agar respons AI lebih akurat dan disesuaikan dengan kebutuhan Anda.

Untuk memastikan asisten AI menghasilkan kode Go yang berkualitas tinggi dan idiomatis, kita akan menulis GEMINI.md dengan beberapa praktik terbaik umum untuk developer Go.

Tujuan: Buat file GEMINI.md yang akan berfungsi sebagai kumpulan aturan untuk asisten AI selama pengerjaan project ini.

Buka IDE Anda untuk membuat file GEMINI.md dengan konten di bawah. Jika menggunakan Cloud Shell, Anda dapat membuka editor menggunakan perintah di bawah:

cloudshell edit .

Tugas: Buat file bernama GEMINI.md di root direktori godoctor Anda dan tempel konten berikut ke dalamnya.

# 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

Sekarang, lingkungan pengembangan Anda telah sepenuhnya disiapkan.

5. Build Awal: Server Dokumentasi

Tujuan pertama Anda adalah membuat versi awal server godoctor. Versi ini harus berupa aplikasi minimal yang menyediakan satu alat bernama read_docs yang memberikan kemampuan untuk mencari dokumentasi Go.

Tujuan: Membuat server MCP siap produksi yang mengekspos perintah go doc, sehingga LLM dapat mengkueri dokumentasi Go.

Jalankan perintah Gemini CLI di shell:

gemini

Saat Anda menjalankan CLI untuk pertama kalinya, Anda akan diminta untuk memilih mode autentikasi dan tema.

Jika Anda menjalankan codelab ini di Cloud Shell, pilih opsi Gunakan kredensial pengguna Cloud Shell. Jika belum, Anda dapat menggunakan login dengan Google untuk login dengan akun Google pribadi agar dapat memanfaatkan paket gratis yang besar dari Gemini CLI. Layar pemilihan autentikasi akan terlihat seperti ini:

ea1ed66807150f3f.png

Jika perlu mengubah pilihan, Anda dapat mengetik /auth dan menekan enter untuk membuka menu ini lagi.

Selanjutnya, Anda akan diminta untuk memilih tema:

6289bdfb3b519fa7.png

Mirip dengan /auth, Anda juga dapat mengubah tema nanti dengan perintah /theme.

Setelah memilih metode autentikasi dan tema pilihan, Anda akan dibawa ke command prompt. Di sini Anda dapat mengetik perintah, misalnya:

Write a hello world application in Go

CLI menggunakan kombinasi penalaran sendiri (melalui model Gemini seperti Gemini Flash atau Gemini Pro) dan alat untuk menjalankan tugas-tugas. CLI menggunakan alat setiap kali harus berinteraksi dengan sistem file atau layanan eksternal, seperti API, database, dll. Contoh alat yang tersedia secara langsung, atau "alat internal", termasuk read_file, write_file, web_fetch, dan google_search. Server MCP yang kita bangun juga akan menjadi alat yang tersedia untuk CLI.

Saat pertama kali menjalankan alat, Gemini CLI akan meminta izin Anda. Anda dapat memberikan izin satu kali (izinkan sekali), persetujuan menyeluruh untuk sesi berikutnya (izinkan selalu), atau menolak permintaannya. Jika itu adalah operasi pengeditan file, Anda juga akan menemukan opsi untuk mengedit file menggunakan editor eksternal, jika Anda ingin melakukan beberapa penyesuaian. Misalnya, berikut adalah output dari perintah di atas, untuk membuat program hello world:

2cfd761183e4b770.png

Selain perintah, Anda juga dapat menggunakan perintah garis miring. Jika Anda mengetik "/", CLI akan otomatis menampilkan opsi pelengkapan otomatis. Anda dapat terus mengetik perintah lengkap atau memilih salah satu opsi yang disarankan. Perintah /auth dan /theme yang disebutkan di atas adalah beberapa contoh perintah tersebut.

26c3f3f7b8bceb3f.png

Setelah terbiasa dengan antarmuka, Anda dapat memulai tugas utama bagian ini, yaitu meminta CLI untuk menulis server MCP bagi kita.

Membuat server MCP Hello World

Salah satu cara terbaik untuk memastikan model membangun sesuatu dengan lebih konsisten adalah dengan memecah tugas kompleks menjadi langkah-langkah bertahap. Meskipun model dapat menyelesaikan tugas yang kompleks dengan sendirinya, tetapi mungkin memerlukan waktu lama untuk menemukan implementasi yang pas jika tidak memiliki penyiapan yang tepat.

Untuk pendekatan yang lebih konsisten, kita akan menginstruksikannya terlebih dahulu untuk membangun server MCP "Hello World" sebelum mengimplementasikan fungsionalitas yang kita inginkan (membaca dokumentasi Go).

Contoh perintah ditampilkan di bawah ini:

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

Perhatikan bahwa perintah di atas terdiri dari tiga segmen utama:

  1. Spesifikasi masalah, termasuk apa yang ingin kita bangun dan batasannya (misalnya, menggunakan SDK resmi, bukan sembarang SDK, transportasi stdio, bukan http)
  2. Rincian tugas yang harus dilakukan (TODO)
  3. Kriteria penerimaan tugas, yang berfungsi sebagai prosedur pengujian sehingga agen tahu kapan tugas selesai

Ketiga komponen ini akan membantu model mencapai hasil yang diinginkan dengan lebih konsisten.

Implementasi alat read_docs

Setelah memiliki implementasi yang berfungsi, kita dapat melanjutkan untuk mengimplementasikan alat "read_docs" yang sebenarnya:

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

Catatan: jangan ragu untuk bereksperimen dengan perintah ini atau mencoba membuat perintah Anda sendiri.

Tips Bermanfaat

Mengingat MCP masih merupakan konsep baru dan Go SDK untuk MCP adalah library baru, pada langkah ini Gemini mungkin memerlukan waktu lama untuk menemukan implementasi yang tepat dengan sendirinya. Untuk membantu model menemukan solusi yang tepat, Anda dapat mencoba hal berikut:

  1. Jika model melewati pembacaan dokumentasi pada langkah apa pun, tekan ESC dan ingatkan model untuk melakukannya. Jika Anda belum memahami go, menjalankan "go doc" ditambah nama paket "go doc github.com/modelcontextprotocol/go-sdk/mcp" akan menampilkan dokumentasi yang tepat.
  2. Modul tingkat teratas " github.com/modelcontextprotocol/go-sdk" tidak memiliki dokumentasi (karena tidak memiliki kode Go), Anda harus memberi tahu model untuk mencari jalur lengkap
  3. Sebaliknya, jika model berhalusinasi tentang paket yang tidak ada, misalnya, "go doc github.com/modelcontextprotocol/go-sdk/mcp/server", cukup arahkan ke paket tingkat teratas.

6. Mengonfigurasi godoctor sebagai Server MCP untuk Gemini CLI

Setelah asisten AI membuat kode untuk klien dan server, Anda dapat menginstruksikannya untuk menjalankan beberapa pengujian manual. Contoh:

retrieve the documentation for the package net/http

Pastikan Anda juga mengujinya dengan dependensi eksternal (tidak ada di library standar):

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

Setelah puas dengan hasilnya, berikan perintah untuk menulis README.md yang berisi petunjuk tentang cara menggunakan dan mengembangkan project ini.

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

Sekarang kita akan mengonfigurasi server agar Gemini CLI dapat menggunakannya selama fase pengembangan berikutnya.

  1. Minta CLI untuk mengupdate GEMINI.md agar menggunakan read_docs sebagai metode pilihan untuk membaca dokumentasi:
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. Sekarang kita perlu memulai ulang Gemini CLI untuk mengonfigurasi server MCP. Pertama, mari simpan sesi percakapan agar Anda dapat melanjutkan dari posisi terakhir setelah dimulai ulang.
/chat save godoctor-workshop
  1. Keluar dari CLI dengan menekan Ctrl+D dua kali atau mengetik perintah /quit.
  2. Pada langkah-langkah sebelumnya, agen seharusnya telah mengompilasi biner server untuk Anda, tetapi kita akan mengompilasi server lagi dengan nama yang berbeda sehingga tidak terpengaruh saat kita memodifikasi kode sumbernya:
mkdir -p bin && go build -o ./bin/godoctor ./cmd/server
  1. Konfigurasi Gemini CLI untuk alat lokal: Buat file .gemini/settings.json di root project Anda dan tambahkan bagian mcpServers untuk memberi tahu Gemini CLI cara menjalankan server yang dikompilasi.
mkdir -p .gemini && touch .gemini/settings.json
  1. Sekarang, tambahkan konten berikut ke file baru menggunakan editor cloudshell atau IDE favorit Anda.
{
  "mcpServers": {
    "godoctor": {
      "command": "./bin/godoctor"
    }
  }
}
  1. Luncurkan Gemini CLI dengan perintah gemini
  2. Anda akan dapat melihat bahwa alat dimuat dengan mengetik perintah /mcp. Anda juga dapat menampilkan deskripsi lengkap alat menggunakan /mcp desc:

13a5a979b9d5408d.png

  1. Uji integrasi dengan meminta Gemini CLI menggunakan alat Anda dengan perintah seperti "Show me the documentation for the package net/http" (Tampilkan dokumentasi untuk paket net/http).

Anda akan melihat yang seperti ini:

fdaa342e76dc5b52.png

Jika alatnya berfungsi dengan benar, Anda akan melihat dokumentasi yang diambil melalui panggilan alat:

defa9d11314522d4.png

Selamat, Anda telah membuat alat MCP! Namun, ini belum selesai, kita masih bisa membuat server ini sedikit lebih berguna.

7. Menambahkan Peninjau Kode yang Didukung AI

Mari kita tambahkan fitur yang lebih canggih dan didukung AI: pemeriksa kode yang menggunakan Gemini API.

Sekarang Anda dapat memulihkan sesi chat sebelumnya dengan perintah /chat resume godoctor-workshop.. Perintah ini akan memuat konteks sesi hingga titik tempat kita selesai mengembangkan read_docs, sehingga model akan memiliki pengetahuan yang diperlukan untuk membangun alat baru.

Alat ini akan memerlukan akses ke Vertex AI, jadi kita perlu mengaktifkan API terlebih dahulu. Anda dapat menjalankan perintah shell tanpa keluar dari Gemini CLI dengan mengetikkan tanda seru (!) di perintah kosong. Tindakan ini akan mengubah Gemini CLI ke mode shell.

Jalankan perintah berikut dalam mode shell untuk mengaktifkan Vertex AI API:

gcloud services enable aiplatform.googleapis.com

Setelah perintah selesai, Anda dapat beralih kembali ke mode perintah dengan mengetik tombol escape (Esc).

Tujuan: Menambahkan alat baru bernama code_review ke project yang ada. Alat ini akan menggunakan Gemini API untuk menganalisis kode Go dan memberikan masukan.

Contoh Perintah:

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

Tips Bermanfaat

  1. Setelah model mulai mengerjakannya, Anda mungkin akan otomatis melihatnya meminta untuk memanggil alat read_docs guna menjelajahi dokumentasi untuk paket genai. Jika tidak, Anda dapat menghentikan proses dengan tombol escape dan mengingatkannya bahwa sekarang ia memiliki alat read_docs.
  2. Jika Anda melihatnya mencoba menggunakan GenAI SDK yang salah (meskipun ada daftar "tidak diizinkan" yang jelas dalam perintah), arahkan kembali ke SDK yang benar.

Menguji Peninjau Kode

  1. Simpan sesi chat dengan /chat save godoctor-workshop, lalu keluar dari CLI dengan menekan Ctrl+D dua kali.
  2. Kompilasi ulang server dengan definisi alat baru:.
go build -o ./bin/godoctor ./cmd/server
  1. Dengan menggunakan IDE, perbarui file .gemini/settings.json untuk menyertakan konfigurasi lingkungan untuk Vertex AI:
{
  "mcpServers": {
    "godoctor": {
      "command": "./bin/godoctor",
      "env": {
        "GOOGLE_CLOUD_USE_VERTEXAI": "true",
        "GOOGLE_CLOUD_PROJECT": "<your-project-id>",
        "GOOGLE_CLOUD_LOCATION": "<your-preferred-region>"
      }
    }
  }
}
  1. Luncurkan Gemini CLI lagi. Memulihkan sesi chat dengan /chat resume godoctor-workshop
  2. Pastikan alat diaktifkan dengan mengetik perintah /mcp. Anda akan melihat yang seperti ini:

f78b39f95edf358a.png

  1. Sekarang mari kita uji alat code_review dengan meninjau salah satu file sumber alat:
Use the code_review tool to review cmd/server/main.go
    You should see something like this:

d946dcc99f5e37b9.png

Dengan alat peninjauan kode yang berfungsi, kini Anda dapat menyarankan model untuk menerapkan beberapa peningkatan yang ditemukannya, untuk alur kerja "peningkatan mandiri" yang lengkap.

Sekarang Anda telah mengonfirmasi bahwa alat code-review berfungsi. Di bagian berikutnya, Anda akan mempelajari cara men-deploy-nya ke cloud. Simpan sesi Anda saat ini dengan /chat save godoctor-workshop dan keluar dari CLI.

8. Mempersiapkan server Anda untuk cloud

Server MCP yang telah kita kembangkan sejauh ini hanya berjalan di mesin lokal, yang tidak masalah jika Anda mengembangkan alat untuk penggunaan sendiri, tetapi sering kali di lingkungan perusahaan, kita perlu men-deploy alat untuk penggunaan yang lebih luas oleh ratusan atau bahkan ribuan developer.

Untuk menskalakan server MCP kami, kami perlu mengonversinya dari server yang hanya menggunakan I/O standar menjadi server yang dapat menggunakan HTTP, dan men-deploy-nya di tempat yang dapat diakses oleh developer yang berbeda. Untuk tujuan ini, kita akan menggunakan mode transpor yang ditentukan dalam spesifikasi MCP sebagai HTTP yang dapat di-streaming, dan menggunakan Cloud Run sebagai target deployment kita.

Tujuan: Memfaktorkan ulang server godoctor untuk menggunakan transpor HTTP yang dapat di-streaming.

Contoh Perintah:

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

Tips Bermanfaat

  1. Model mungkin mencoba menggunakan HTTP+SSE, yang sudah tidak digunakan lagi. Jika Anda merasa model mengikuti jalur ini, arahkan kembali ke HTTP yang dapat di-streaming.
  2. Versi Gemini CLI saat ini (0.26.0) tidak mendukung proses yang berjalan di latar belakang (setiap proses yang diluncurkan dengan run_shell_command akan dihentikan setelah panggilan alat kembali), jadi kita meminta Gemini untuk mengotomatiskan proses pengujian menggunakan skrip. Fitur ini direncanakan dan akan ditambahkan dalam waktu dekat, yang dapat menyederhanakan proses pengujian.

Opsional: Menguji Server MCP menggunakan HTTP

Jika Anda ingin mengonfigurasi Gemini CLI agar menggunakan server melalui HTTP:

  1. Simpan sesi Anda dan keluar dari CLI
  2. Edit file .gemini/settings.json Anda dan ubah konfigurasi agar mengarah ke server yang berjalan secara lokal.
"mcpServers": {
  "godoctor": {
    "httpUrl": "http://localhost:8080"
  }
}
  1. Di terminal kedua, jalankan server yang mendukung HTTP secara lokal:
go build -o ./bin/godoctor ./cmd/server && ./bin/godoctor -listen=:8080
  1. Mulai ulang Gemini CLI dan berikan perintah untuk menguji koneksi, misalnya, "Gunakan alat godoctor untuk mendapatkan dokumentasi fmt.Println."
  2. Hentikan server dengan Ctrl+C setelah Anda selesai menguji.

9. Membuat Container Aplikasi dengan Docker

Setelah server kita menggunakan protokol transpor yang benar, kita dapat membuat container untuk deployment.

Tujuan: Buat Dockerfile untuk mengemas server godoctor ke dalam image container portabel yang siap produksi.

Contoh Perintah:

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

Opsional: Menguji Image Docker Secara Manual

Setelah Dockerfile dibuat, bangun image dan jalankan untuk memastikan image berfungsi dengan benar.

  1. Buat container:
docker build -t godoctor:latest .
  1. Jalankan container secara lokal:
docker run -p 8080:8080 -e PORT=8080 godoctor:latest
  1. Uji container yang sedang berjalan: Di terminal lain, mulai Gemini CLI dan minta untuk mengambil dokumentasi.
  2. Hentikan server dengan Ctrl+C setelah Anda selesai menguji.

10. Men-deploy ke Cloud Run

Sekarang saatnya men-deploy container kita ke cloud.

Tujuan: Men-deploy server godoctor dalam container ke Google Cloud Run.

Contoh Perintah:

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

Setelah deployment selesai, kita akan mengonfigurasi Gemini CLI untuk menggunakan alat yang baru saja Anda deploy.

Perbarui file .gemini/settings.json Anda untuk mengubah konfigurasi alat MCP agar mengarah ke layanan yang di-deploy, atau minta Gemini CLI melakukannya untuk Anda:

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

Bagian mcpServers akhir akan terlihat seperti ini (ingatlah untuk mengganti placeholder dengan URL aplikasi Cloud Run Anda yang sebenarnya):

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

Menguji Deployment Cloud Run

Anda kini siap untuk pengujian akhir secara menyeluruh.

Mulai ulang Gemini CLI untuk terakhir kalinya (menggunakan /chat save dan /chat resume jika Anda ingin mempertahankan konteks Anda). Sekarang CLI seharusnya dapat memanggil server MCP jarak jauh. Coba minta dokumentasi untuk paket apa pun.

Anda juga dapat menguji alat peninjauan kode:

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

Membersihkan

Setelah selesai menguji, jangan lupa untuk membersihkan lingkungan. Anda dapat memberi tahu Gemini untuk menghapus project atau hanya menghapus deployment CloudRun. Contoh perintah:

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. Selamat!

Anda telah berhasil memandu asisten AI untuk membangun, membuat container, dan men-deploy alat canggih yang didukung AI. Yang lebih penting lagi, Anda telah mempraktikkan keterampilan penting dalam pengembangan software modern: menerjemahkan persyaratan menjadi perintah yang efektif. Anda telah berhasil memperluas Gemini CLI dengan alat MCP kustom, sehingga menjadikannya asisten pengembangan Go yang lebih canggih dan terspesialisasi.

Dokumen Referensi