1. Giriş
Bu codelab'de, Gemini CLI'ın özelliklerini genişletmek için Model Context Protocol (MCP) sunucusu oluşturmayı ve dağıtmayı öğreneceksiniz. godoctor adlı bir Go tabanlı sunucu oluşturacaksınız. Bu sunucu, Go geliştirme için özel araçlar sunarak Gemini CLI'yı genel amaçlı bir kodlama asistanından özel bir Go geliştirme uzmanına dönüştürür.
Bu codelab'de "istem odaklı" bir yaklaşım kullanılıyor. Teknik yönetici olarak hareket edecek ve yapay zeka asistanınıza (Gemini CLI) istemler sağlayacaksınız. Amacınız, proje gereksinimlerini etkili istemlere dönüştürmeyi öğrenmek ve uygulama ayrıntılarını yapay zekaya bırakmaktır.
Bu projenin merkezinde Model Context Protocol (MCP) yer alır. MCP, Gemini gibi büyük dil modellerinin (LLM'ler) harici araçlar ve hizmetlerle iletişim kurma şeklini standartlaştıran açık kaynaklı bir protokoldür. Bu araç, yapay zekanın gerçek dünyadaki bilgilere erişmesine ve yerleşik bilgilerinin ötesinde işlemler gerçekleştirmesine olanak tanıyan bir köprü görevi görür. Bir MCP sunucusu oluşturarak Gemini CLI'nin keşfedip kullanabileceği özel bir eklenti oluşturursunuz. Bu eklenti, Gemini CLI'ye yeni beceriler öğretir.
Neler öğreneceksiniz?
- Gemini CLI'yı yükleme ve yapılandırma
- Yapay zeka asistanını yazılım geliştirmede yönlendirmek için etkili istemler oluşturma
- Yapay zeka asistanına bağlam ve yönergeler sağlama
- Gemini CLI özelliklerini artırmak için MCP sunucusu oluşturma ve yapılandırma
- Go uygulamasını container'a dönüştürme ve Google Cloud Run'a dağıtma
İhtiyacınız olanlar
Bu atölye çalışması, gerekli tüm bağımlılıklar (gcloud CLI, Go, Docker, Gemini CLI) önceden yüklenmiş olarak gelen Google Cloud Shell'de tamamen çalıştırılabilir.
Alternatif olarak, kendi makinenizde çalışmayı tercih ederseniz aşağıdakilere ihtiyacınız olacaktır:
- Node.js 20 veya sonraki sürümler
- Faturalandırmanın etkin olduğu bir Google Cloud projesi
- Google Cloud SDK'nın (gcloud KSA) yüklü ve başlatılmış olması
- Sisteminizde Go 1.24 veya sonraki bir sürümün yüklü olması gerekir.
- Sisteminizde Docker yüklü olmalıdır.
Önemli Teknolojiler
Kullanacağımız teknolojiler hakkında daha fazla bilgiyi burada bulabilirsiniz:
- Gemini CLI: Genişleteceğimiz yapay zeka destekli komut satırı arayüzü
- Model Context Protocol (MCP): Gemini CLI'nin özel aracımızla iletişim kurmasına olanak tanıyan açık kaynaklı protokol
- MCP için Go SDK'sı: MCP sunucumuzu uygulamak için kullanacağımız Go kitaplığı
Başarılı bir Codelab için ipuçları
Yapay zeka asistanıyla çalışmak, yazılım geliştirmenin yeni bir yoludur. Deneyiminizi sorunsuz ve başarılı hale getirmek için aşağıdaki ipuçlarından yararlanabilirsiniz:
- ESC tuşuna basmaktan çekinmeyin. Yapay zeka bazen kabul etmediğiniz eylemler veya kodlar önerebilir. ESC tuşunu kullanarak önerilen işlemi iptal edin ve doğru yönde ilerlemesi için yeni bir istem girin. Pilot sizsiniz.
- Araç kullanımını teşvik edin. Yapay zeka kaybolmuş gibi görünüyorsa veya bilgi uyduruyorsa mevcut araçlarını kullanmaya teşvik edin. "Bunu doğrulamak için Google Arama'yı kullanabilir misin?" veya "Değişiklik yapmadan önce mevcut kodu anlamak için read_file aracını kullan" gibi istemler çok etkili olabilir.
- Manuel değişikliklere karşı koyun. Tüm işi yapay zekaya yaptırmaya çalışın. Bu, üzerinde çalıştığınız temel beceridir. Ancak manuel değişiklik yapmanız gerekiyorsa bunu yapmanızın ardından yapay zekaya bildirin. "README.md dosyasını manuel olarak güncelledim. Lütfen bilginizi tazelemek için tekrar okuyun" istemi, yapay zekanın projenizle senkronize kalmasını sağlar.
- Kapatıp tekrar açmayı denediniz mi? Nadir durumlarda, yapay zeka komutunuza rağmen belirli bir yolu zorlamaya çalışabilir. Bunun nedeni, bağlam bozulması (bazen "bağlam çürümesi" olarak da adlandırılır) olabilir. Bu durumda, bağlam gürültüsünü azaltmak için Gemini CLI komutu "/compress"i kullanabilir veya uç durumlarda oturum geçmişinin tamamını temizlemek için "/clear" komutunu kullanabilirsiniz.
2. Ortam Kurulumu
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa oluşturmanız gerekir.



- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde iyileştirilir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir yazılım yüklemeniz gerekmez.
3. Gemini CLI'yı kullanmaya başlama
Bu bölümde, Gemini CLI hakkında bilgi edinecek ve ortamınız için nasıl yükleyip yapılandıracağınızı öğreneceksiniz.
Gemini CLI nedir?
Gemini CLI, çeşitli geliştirme görevlerinde size yardımcı olabilecek yapay zeka destekli bir komut satırı arayüzüdür. Projenizin bağlamını anlayabilir, soruları yanıtlayabilir, kod oluşturabilir ve yeteneklerini genişletmek için harici araçları kullanabilir.
Kurulum
npm kullanarak Gemini CLI'yı genel olarak yükleyin.
npm install -g @google/gemini-cli
CLI'nin yüklendiğini doğrulamak için şu komutu çalıştırın:
gemini --version
Yapılandırma
Gemini CLI'nın davranışı, yapılandırma dosyaları ve ortam değişkenleri tarafından kontrol edilir. İki önemli dosya vardır:
GEMINI.md: Bu dosya, yapay zekaya doğal dil yönergeleri ve bağlam bilgisi sağlar. CLI, projenizin kodlama standartlarını ve kurallarını anlamak için bu dosyayı okur..gemini/settings.json: Bu dosya, harici araçlara nasıl bağlanılacağı da dahil olmak üzere KSA'nın yapılandırmasını kontrol eder. Bu dosyayı, CLI'yı bu laboratuvarda oluşturduğumuz MCP sunucusunu kullanacak şekilde yapılandırmak için kullanacağız.
Önce ortamı ayarlayacağız, ardından GEMINI.md dosyasını oluşturacağız. settings.json dosyası sonraki bir adımda yapılandırılacaktır.
- Proje dizini oluşturma ve başlatma:
mkdir godoctor
cd godoctor
go mod init godoctor
- Google Cloud uygulama varsayılan kimlik bilgileriyle kimlik doğrulayın:
Bu codelab'de kullanacağınız GCP projesine erişimi olan bir hesaba giriş yapmanız gerekir:
- Google Cloud SDK'nın yüklendiğinden ve başlatıldığından emin olun.
- Uygulama Varsayılan Kimlik Bilgileri'ni ayarlamak için aşağıdaki komutu çalıştırın:
gcloud auth application-default login
4. Geliştirme Kuralları
Yapay zeka asistanının yüksek kaliteli ve deyimsel Go kodu oluşturmasını sağlamak için net yönergeler vermeniz gerekir. Bu işlem, GEMINI.md dosyasında yapılır.
Hedef: Bu proje sırasında yapay zeka asistanı için kural grubu olarak kullanılacak bir GEMINI.md dosyası oluşturun.
Görev: godoctor dizininizin kök dizininde GEMINI.md adlı bir dosya oluşturun ve aşağıdaki içeriği bu dosyaya yapıştırın.
# 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*.
# Agent Guidelines
- **Reading URLs:** ALWAYS read URLs provided by the user. They are not optional.
Geliştirme ortamınız artık tamamen kuruldu.
5. İlk Derleme: godoc Sunucusu
İlk hedefiniz, godoctor sunucusunun ilk sürümünü oluşturmaktır. Bu sürüm, Go dokümanlarına bakma olanağı sağlayan godoc adlı tek bir araç sunan, minimum düzeyde ve üretime hazır bir uygulama olmalıdır.
Amaç: go doc komutunu kullanıma sunan, üretime hazır bir MCP sunucusu oluşturarak bir LLM'nin Go belgelerini sorgulamasına olanak tanımak.
Kabukta Gemini CLI komutunu çalıştırın:
gemini
CLI'yı ilk kez çalıştırdığınızda bir kimlik doğrulama modu ve tema seçmeniz istenir. Kimlik doğrulama modu için kişisel Google Hesabı ile oturum açmayı seçerek Gemini CLI'ın cömert ücretsiz katmanından yararlanabilirsiniz. Kimlik doğrulama modunuzu seçebileceğiniz aşağıdaki gibi bir seçenek görürsünüz:

Seçiminizi değiştirmeniz gerekirse /auth yazıp Enter tuşuna basarak bu menüyü tekrar açabilirsiniz.
Ardından bir tema seçmeniz istenir:

/auth'ya benzer şekilde, /theme komutuyla temayı daha sonra da değiştirebilirsiniz.
Kimlik doğrulama yöntemini ve tercih ettiğiniz temayı seçtikten sonra komut istemine yönlendirilirsiniz. Burada komutlarınızı yazabilirsiniz. Örneğin:
Write a hello world application in Go.
CLI, görevleri gerçekleştirmek için kendi muhakemesinin (Gemini Flash veya Gemini Pro gibi bir Gemini modeli aracılığıyla) ve araçların bir kombinasyonunu kullanır. Dosya sistemi veya API'ler, veritabanları gibi harici hizmetlerle etkileşim kurması gerektiğinde araçları kullanır. Kullanıma hazır olarak sunulan veya "dahili araçlar" olarak adlandırılan araçlara örnek olarak read_file, write_file, web_fetch ve google_search verilebilir. Geliştirdiğimiz MCP sunucusu da KSA'da kullanılabilecek bir araç haline gelecek.
Araç ilk kez çalıştırıldığında izniniz istenir. Bu siteye tek seferlik izin verebilir, oturumun geri kalanı için genel onay verebilir veya isteğini reddedebilirsiniz. Dosya düzenleme işlemiyse bazı düzenlemeler yapmak istemeniz ihtimaline karşı dosyayı harici bir düzenleyici kullanarak düzenleme seçeneğini de görürsünüz. Örneğin, yukarıdaki istemin çıktısı, "Hello World" programı oluşturmak için şu şekildedir:

İstemlerin yanı sıra eğik çizgiyle başlayan komutları da kullanabilirsiniz. "/" yazarsanız CLI, otomatik tamamlama seçeneklerini otomatik olarak gösterir. Komutun tamamını yazmaya devam edebilir veya seçeneklerden birini belirleyebilirsiniz. Yukarıda bahsedilen /auth ve /theme komutları bu tür komutlardan birkaçıdır.

Arayüze alıştıktan sonra bu bölümün asıl görevi olan KSA'dan MCP sunucusunu bizim için yazmasını istemeye başlayabilirsiniz.
Hello World MCP sunucusu oluşturma
Modelin daha tutarlı bir şekilde içerik oluşturmasını sağlamanın en iyi yollarından biri, karmaşık görevleri artımlı adımlara ayırmaktır. Model, karmaşık bir görevi kendi başına çözebilse de doğru kurulum olmadan doğru uygulamayı keşfetmesi uzun zaman alır.
Daha tutarlı bir yaklaşım için, istediğimiz işlevi (Go dokümanlarını okuma) uygulamadan önce "Hello World" MCP sunucusu oluşturmasını isteyeceğiz.
Örnek bir istem aşağıda gösterilmiştir:
Your task is to create a Model Context Protocol (MCP) server to expose a "hello world" tool. For the MCP implementation, you should use the official Go SDK for MCP and use the stdio transport.
Read these references to gather information about the technology and project structure before writing any code:
- https://github.com/modelcontextprotocol/go-sdk/blob/main/README.md
- https://modelcontextprotocol.io/specification/2025-06-18/basic/lifecycle
- https://go.dev/doc/modules/layout
To test the server, use shell commands like these:
(
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18"}}';
echo '{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}';
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}';
) | ./bin/godoctor
Yukarıdaki istemin üç ana segmentten oluştuğunu unutmayın:
- Ne oluşturmak istediğimiz ve kısıtlamalar (ör. herhangi bir SDK yerine resmi SDK'yı kullanın) dahil olmak üzere sorun spesifikasyonu
- Modelin isteği netleştirmesine yardımcı olacak referans belgeler
- Görev için kabul ölçütü olarak kullanılan bir test prosedürü
Bu üç bileşenin bulunması, modelin istenen sonuçları daha tutarlı bir şekilde elde etmesine yardımcı olur.
Go doc tool implementation
Çalışan bir uygulama oluşturduktan sonra gerçek "go doc" aracını uygulamaya geçebiliriz:
Add a new tool to our MCP server called "godoc" that invokes the "go doc" shell command. The tool will take a mandatory "package" argument and an optional "symbol" argument.
Read the reference for the go doc command to understand its API: https://pkg.go.dev/golang.org/x/tools/cmd/godoc
Test it by executing the call with:
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name": "godoc", "arguments": {"package": "fmt"} } }'
| ./bin/godoctor
Test it using both a standard library package and an external package like "github.com/modelcontextprotocol/go-sdk/mcp", both with and without symbols.
Bu istemle denemeler yapabilir veya kendi isteminizi oluşturabilirsiniz.
Faydalı bir komut satırı arayüzü
İyi bir uygulama konusunda karar verir vermez modele, MCP istemcisini kullanarak bir godoctor KSA oluşturmasını söyleyebilirsiniz. Bu sayede, JSON-RPC çağrılarını manuel olarak oluşturma ihtiyacı ortadan kalkacağından özelliklerin test edilmesi kolaylaşır.
Örnek istem:
Now create a godoctor-cli component that will call the MCP server using command transport. This CLI will expose all tools using subcommands and allow us to test the MCP server implementation without needing to build the JSON-RPC calls manually.
Use the reference implementation at https://github.com/modelcontextprotocol/go-sdk/blob/main/README.md to build the client.
Test it by calling from the command line:
- the hello_world tool
- the godoc tool with a local package
- the godoc tool with a local package and symbol
- the godoc tool with an external package
- the godoc tool with an external package and symbol
Artık çalışan bir istemci ve sunucu kümeniz olduğuna göre, bir sonraki bölümde Gemini CLI'yı yeni oluşturduğunuz MCP sunucusuyla yapılandırarak bir sonraki kodlama görevinde avantajlarından yararlanmaya başlayacaksınız.
Faydalı Kaynaklar
MCP'nin hâlâ yeni bir kavram olması ve MCP için Go SDK'sının yeni bir kitaplık olması nedeniyle bu adımda Gemini'ın doğru uygulamayı kendi başına keşfetmesi uzun zaman alabilir. Modelin doğru çözümü bulmasına yardımcı olmak için aşağıdaki referansları verebilirsiniz:
- Modelin SDK API'sini daha tutarlı bir şekilde keşfetmesi için aşağıdaki istemi verebilirsiniz: "use the go doc shell command to discover the api for the go-sdk library" (go-sdk kitaplığının API'sini keşfetmek için go doc shell komutunu kullan)
- Model,
read_filearacıyla SDK'nın kaynak kodunu incelemeye çalışırsa Gemini CLI, mevcut kapsamı dışındaki dosyaları okuyamadığı için bu işlem başarısız olur.run_shell_commandaracılığıylacatvelskomutlarını kullanmasını isteyebilirsiniz. - Model, uygulamada hata ayıklama konusunda sorun yaşıyorsa daha ayrıntılı günlük kaydı eklemesini ve hata mesajlarındaki bağlamsal bilgileri iyileştirmesini isteyin.
- Diğer tüm yöntemler başarısız olursa referans uygulama olarak https://github.com/danicat/godoctor adresini kullanın.
6. Gemini CLI için godoctor'u MCP sunucusu olarak yapılandırma
Yapay zeka asistanı hem istemci hem de sunucu için kodu oluşturduktan sonra, birkaç manuel test çalıştırmasını isteyebilirsiniz. Örneğin:
retrieve the documentation for the package net/http
Ayrıca, standart kitaplıkta olmayan harici bir bağımlılıkla da test ettiğinizden emin olun:
retrieve the documentation for the github.com/modelcontextprotocol/go-sdk/mcp package
Sonuçlardan memnun kaldığınızda, bu projenin nasıl kullanılacağı ve geliştirileceğiyle ilgili talimatları içeren bir README.md dosyası yazmasını isteyin.
Now write a detailed README.md file explaining both from a user and a developer perspective how to use and to build this project.
Şimdi, sunucuyu Gemini CLI'nın geliştirmenin bir sonraki aşamasında kullanabilmesi için yapılandıracağız.
- KSA'dan, doküman okumak için tercih edilen yöntem olarak
godockullanılacak şekilde GEMINI.md dosyasını güncellemesini isteyin:
update the GEMINI.md file to use the godoc tool to retrieve documentation about Go packages or symbols. Always prefer to use godoc over WebFetch and GoogleSearch, and only use those when godoc doesn't give a clear answer.
- Yapılandırmak için Gemini CLI'yı yeniden başlatmamız gerekiyor. Öncelikle, yeniden başlatıldıktan sonra kaldığınız yerden devam edebilmeniz için sohbet oturumunu kaydedelim.
/chat save workshop001
- Ctrl+D tuşlarına iki kez basarak veya
/quitkomutunu yazarak CLI'dan çıkın. - Sunucu ikilisini derleyin: Bir
bindizini oluşturun ve godoctor sunucusunu bu dizinde derleyin.
mkdir -p bin
go build -o ./bin/godoctor ./cmd/godoctor # adjust paths as needed
- Gemini CLI'yı yerel araç için yapılandırın: Projenizin kök dizininde bir
.gemini/settings.jsondosyası oluşturun ve derlenmiş sunucunuzu nasıl çalıştıracağını Gemini CLI'ya bildirmek için birmcpServersbölümü ekleyin.
mkdir -p .gemini
touch .gemini/settings.json
- Şimdi
vimveyananogibi bir komut satırı düzenleyicisini kullanarak yeni dosyaya aşağıdaki içeriği ekleyin:
{
"mcpServers": {
"godoctor": {
"command": "./bin/godoctor"
}
}
}
- Şimdi Gemini CLI'yı başlatın ve sohbet oturumunu geri yükleyin:
/chat resume workshop001
/mcpkomutunu yazarak aracın yüklendiğini görebilirsiniz./mcp descsimgesini kullanarak araçların tam açıklamasını da gösterebilirsiniz:

- Gemini CLI'dan "net/http dokümanlarını al" gibi bir istemle aracınızı kullanmasını isteyerek entegrasyonu test edin.
Aşağıdakine benzer bir tablo görürsünüz:

Araç düzgün çalışıyorsa araç çağrısı aracılığıyla alınan dokümanları görmeniz gerekir:

Tebrikler, bir MCP aracı oluşturdunuz. Ancak bu son değil, bu özelliği biraz daha yararlı hale getirebiliriz.
7. Yapay zeka destekli kod incelemecisi ekleme
Şimdi daha gelişmiş, yapay zeka destekli bir özellik ekleyelim: Gemini API'yi kullanan bir kod inceleme aracı.
Hedef: Mevcut projeye code_review adlı yeni bir araç ekleyin. Bu araç, Go kodunu analiz etmek ve geri bildirim sağlamak için Gemini API'yi kullanır.
Örnek istem:
I want to add a new tool to my project called code_review. This tool should use the Gemini API on Vertex AI (with gemini-2.5-flash) to analyze Go code and provide a list of improvements in json format 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". Please update the server to include this new tool and modify the CLI client to add a review command to use it.
Use this SDK to call Gemini: https://github.com/googleapis/go-genai
Faydalı İpuçları
Model üzerinde çalışmaya başladığında, genai paketinin dokümanlarına göz atmak için godoc aracını çağırmak istediğini otomatik olarak görebilirsiniz. Aksi takdirde, işlemi her zaman Escape tuşuyla kesebilir ve artık godoc aracını kullanabileceğini hatırlatabilirsiniz.
Kod İnceleyici'yi test etme
- Sohbet oturumunu
/chat save workshop002ile kaydedin ve ardından Ctrl+D tuşlarına iki kez basarak CLI'dan çıkın. code_reviewaracının Vertex AI'ye erişmesi gerektiğinden önce API'yi etkinleştirmemiz gerekir:
gcloud services enable aiplatform.googleapis.com
- Aşağıdaki içeriklerle bir
.envdosyası oluşturun. GOOGLE_CLOUD_PROJECT değişkenini bu laboratuvarın başında oluşturduğunuz projenin gerçek proje kimliğiyle, GOOGLE_CLOUD_LOCATION değişkenini ise tercih ettiğiniz konumla (ör. "us-central1") değiştirmeyi unutmayın.
export GOOGLE_GENAI_USE_VERTEXAI=true
export GOOGLE_CLOUD_PROJECT='your-project-id'
export GOOGLE_CLOUD_LOCATION='your-location'
- .env dosyasını source komutuyla yükleyin:
source .env
- Sunucuyu yeni araç tanımıyla yeniden derleyin:
go build -o ./bin/godoctor ./cmd/godoctor
- Gemini CLI'ı tekrar başlatın.
/chat resume workshop002ile sohbet oturumunu geri yükleyin. /mcpkomutunu yazarak aracın etkinleştirildiğini onaylayın. Aşağıdakine benzer bir tablo görürsünüz:

- Şimdi de aracın kaynak dosyalarından birini inceleyerek
code-reviewaracını test edelim:
"Use the godoctor tool to review the cmd/godoctor/main.go file." (cmd/godoctor/main.go dosyasını incelemek için godoctor aracını kullanın.)
You should see something like this:

Kod inceleme aracı çalışırken artık modele, bulduğu iyileştirmelerden bazılarını uygulamasını önerebilirsiniz. Böylece, tam bir "kendini iyileştirme" iş akışı elde edebilirsiniz.
code-review aracının çalıştığını onaylamış oldunuz. Sonraki bölümde, bu işlevi buluta dağıtma üzerinde çalışacaksınız. /chat save workshop003 ile mevcut oturumunuzu kaydedin ve CLI'dan çıkın.
8. Sunucunuzu buluta hazırlama
Şimdiye kadar geliştirdiğimiz MCP sunucusu yalnızca yerel makinede çalışır. Bu, kendi kullanımınız için araçlar geliştiriyorsanız sorun olmaz ancak kurumsal ortamlarda genellikle yüzlerce hatta binlerce geliştiricinin daha geniş kullanımı için araçlar dağıtmamız gerekir.
MCP sunucumuzu ölçeklendirmek için bu sunucuyu yalnızca standart G/Ç'yi destekleyen bir sunucudan HTTP'yi destekleyen bir sunucuya dönüştürmemiz ve farklı geliştiricilerin erişebileceği bir yere dağıtmamız gerekiyor. Bu amaçla, MCP spesifikasyonunda akışa alınabilir HTTP olarak tanımlanan bir aktarım modu kullanacak ve dağıtım hedefimiz olarak Cloud Run'ı kullanacağız.
Hedef: godoctor sunucusunu, akışa alınabilir HTTP aktarımını kullanacak şekilde yeniden düzenleyin.
Örnek istem:
The godoctor server is currently using the stdio transport. I want to deploy it to Cloud Run, so I need to refactor it to use the streamable HTTP transport instead. Please modify the server to comply with the streamable HTTP specification.
Faydalı Kaynaklar
- Model, akışa alınabilir HTTP aktarımını uygulamakta zorlanıyorsa şu referansı verebilirsiniz: https://github.com/modelcontextprotocol/go-sdk/blob/main/design/design.md
- Model, bunun yerine HTTP+SSE'yi kullanmaya çalışabilir. Bu özellik kullanımdan kaldırılmıştır. Bu yolu izlediğini görürseniz akışa uygun HTTP'ye geri yönlendirin.
HTTP kullanarak sunucuyu test etme
Modelden, godoctor istemcisini akışa alınabilir HTTP kullanacak şekilde güncellemesini isteyin. Böylece istemcinin hâlâ çalıştığını test edebilirsiniz.
Now update the client to use streamable HTTP and run a test by retrieving documentation from one package
İsteğe bağlı: Gemini CLI'yı sunucuyu HTTP üzerinden kullanacak şekilde yapılandırmak istiyorsanız:
- Oturumunuzu kaydedip CLI'dan çıkma
.gemini/settings.jsondosyanızı düzenleyin ve yapılandırmayı yerel olarak çalışan sunucunuza yönlendirecek şekilde değiştirin.
"mcpServers": {
"godoctor": {
"httpUrl": "http://localhost:8080"
}
}
- Yeniden düzenlenmiş sunucuyu yerel olarak çalıştırın:
go run ./cmd/godoctor/main.go
- Yeni bir terminalde (yukarıdaki işlem engellendiği için) Gemini CLI'yı başlatın ve bağlantıyı test etmek için bir istem girin (ör. "fmt.Println ile ilgili dokümanları almak için godoctor aracını kullan."
- Testi tamamladığınızda Ctrl+C tuşlarına basarak sunucuyu durdurun.
9. Uygulamayı Docker ile kapsülleme
Sunucumuz artık doğru aktarım protokolünü kullandığına göre dağıtım için kapsayabiliriz.
Amaç: godoctor sunucusunu taşınabilir ve üretime hazır bir container görüntüsüne paketlemek için bir Dockerfile oluşturun.
Örnek istem:
Please create a multi-stage Dockerfile that compiles the Go binary and copies it into a minimal golang image like golang:1.24-alpine.
Docker görüntüsünü test etme
Dockerfile oluşturulduktan sonra, doğru çalıştığından emin olmak için görüntüyü oluşturun ve çalıştırın. Gemini'dan bunu sizin için yapmasını isteyebilirsiniz:
build the image and test the connectivity to the server using the godoctor client
İsteğe bağlı: Testi manuel olarak yapmak istiyorsanız:
- Container'ı oluşturun:
docker build -t godoctor:latest .
- Kapsayıcıyı yerel olarak çalıştırma:
docker run -p 8080:8080 -e PORT=8080 godoctor:latest
- Çalışan kapsayıcıyı test edin: Başka bir terminalde Gemini CLI'yı başlatın ve dokümanları getirmesini isteyin.
- Testi tamamladığınızda Ctrl+C tuşlarına basarak sunucuyu durdurun.
10. Cloud Run'a dağıtma
Şimdi container'ımızı buluta dağıtma zamanı.
Amaç: Container'a alınmış godoctor sunucusunu Google Cloud Run'a dağıtın.
İstem Kılavuzu: Yapay zeka asistanınızdan kapsayıcınızı dağıtmak için gcloud komutlarını sağlamasını isteyin.
Örnek istem:
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 environment variables in the .env file.
Dağıtım tamamlandıktan sonra, Gemini KSA'yı az önce dağıttığınız aracı kullanacak şekilde yapılandıracağız.
MCP aracı yapılandırmasını dağıtılan hizmetinize işaret edecek şekilde değiştirmek için .gemini/settings.json dosyanızı güncelleyin veya Gemini CLI'dan bunu sizin için yapmasını isteyin:
now update the .gemini/settings.json file to use this URL for the godoctor server
Son mcpServers bölümü aşağıdaki gibi görünmelidir (yer tutucuyu gerçek Cloud Run uygulamanızın URL'siyle değiştirmeyi unutmayın):
"mcpServers": {
"godoctor": {
"httpUrl": "https://<your-cloud-run-id>.us-central1.run.app"
}
}
Cloud Run dağıtımını test etme
Artık son uçtan uca teste hazırsınız.
Gemini CLI'yı son bir kez daha yeniden başlatın (bağlamınızı korumak için /chat save ve /chat resume kullanın). Artık CLI, uzak MCP sunucusunu çağırabilir. Paketlerle ilgili doküman isteyin.
Kod inceleme aracını da test edebilirsiniz:
Use the godoctor tool to review the cmd/godoctor/main.go file
Temizleme
Testi tamamladıktan sonra ortamı temizlemeyi unutmayın. Gemini'a projenizi silmesini veya yalnızca CloudRun dağıtımını kaldırmasını söyleyebilirsiniz. Örnek istem:
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. Tebrikler!
Bir yapay zeka asistanına, gelişmiş ve yapay zeka destekli bir araç oluşturma, kapsülleme ve dağıtma konusunda başarıyla rehberlik ettiniz. Daha da önemlisi, modern yazılım geliştirmenin temel becerisi olan gereksinimleri etkili istemlere dönüştürme konusunda pratik yaptınız. Gemini CLI'ı özel bir MCP aracıyla başarıyla genişlettiniz. Böylece, daha güçlü ve uzmanlaşmış bir Go geliştirme asistanı elde ettiniz.