1. Giriş
Genel Bakış
Bu laboratuvarda, Model Context Protocol (MCP) sunucusu oluşturup dağıtacaksınız. MCP sunucuları, LLM'lere harici araçlara ve hizmetlere erişim sağlamak için kullanışlıdır. Bu hizmeti, Cloud Run'da birden fazla istemciden erişilebilen güvenli ve üretime hazır bir hizmet olarak yapılandıracaksınız. Ardından, Gemini KSA'dan uzak MCP sunucusuna bağlanacaksınız.
Yapacaklarınız
get_animals_by_species ve get_animal_details olmak üzere iki aracı içeren bir hayvanat bahçesi MCP sunucusu oluşturmak için Genkit'i kullanacağız. Genkit, Node.js ile MCP sunucuları ve istemcileri oluşturmak için hızlı bir yol sunar.

Neler öğreneceksiniz?
- MCP sunucusunu Cloud Run'a dağıtın.
- Tüm istekler için kimlik doğrulama gerektirerek sunucunuzun uç noktasını güvenli hale getirin. Böylece, yalnızca yetkili istemciler ve aracılar sunucuyla iletişim kurabilir.
- Gemini KSA'dan güvenli MCP sunucusu uç noktanıza bağlanma
2. Proje Ayarları
- Google Hesabınız yoksa Google Hesabı oluşturmanız gerekir.
- İş veya okul hesabı yerine kişisel hesap kullanıyorsanız. İş ve okul hesaplarında, bu laboratuvar için gereken API'leri etkinleştirmenizi engelleyen kısıtlamalar olabilir.
- Google Cloud Console'da oturum açın.
- Cloud Console'da faturalandırmayı etkinleştirin.
- Bu laboratuvarı tamamlamak için 1 ABD dolarından daha az tutarda bulut kaynağı kullanmanız gerekir.
- Daha fazla ücret ödememek için bu laboratuvarın sonundaki adımları uygulayarak kaynakları silebilirsiniz.
- Yeni kullanıcılar 300 ABD doları değerinde ücretsiz deneme sürümünden yararlanabilir.
- Yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanmayı seçin.
- Proje kotasıyla ilgili bir hata görürseniz yeni bir proje oluşturmak için mevcut bir projeyi yeniden kullanın veya mevcut bir projeyi silin.
3. Cloud Shell Düzenleyici'yi açma
- Doğrudan Cloud Shell Düzenleyici'ye gitmek için bu bağlantıyı tıklayın.
- Bugün herhangi bir noktada yetkilendirmeniz istenirse devam etmek için Yetkilendir'i tıklayın.

- Terminal ekranın alt kısmında görünmüyorsa açın:
- Görünüm'ü tıklayın.
- Terminal'i tıklayın.

- Terminalde şu komutla projenizi ayarlayın:
- Biçim:
gcloud config set project [PROJECT_ID] - Örnek:
gcloud config set project lab-project-id-example - Proje kimliğinizi hatırlamıyorsanız:
- Tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- Tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
- Biçim:
- Şu mesajı görmeniz gerekir:
Updated property [core/project].
WARNINGsimgesini görüyorsanız veDo you want to continue (Y/n)?soruluyorsa proje kimliğini yanlış girmiş olabilirsiniz.ntuşuna,Entertuşuna basın vegcloud config set projectkomutunu tekrar çalıştırmayı deneyin.
4. API'leri etkinleştir
Terminalde API'leri etkinleştirin:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com
Yetkilendirmeniz istenirse devam etmek için Yetkilendir'i tıklayın. 
Bu komutun tamamlanması birkaç dakika sürebilir ancak sonunda aşağıdakine benzer bir başarılı mesaj üretmesi gerekir:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
5. JavaScript projenizi hazırlama
- Dağıtım için kaynak kodunu depolamak üzere
mcp-on-cloudrunadlı bir klasör oluşturun:mkdir mcp-on-cloudrun && cd mcp-on-cloudrun npmaracıylapackage.jsondosyası oluşturmak için bir Node.js projesi oluşturun:npm init es6 -ynpm initkomutu, projeniz için birpackage.jsondosyası oluşturur.@modelcontextprotocol/sdk,expressvezodbağımlılıklarını yükleyin:npm install @modelcontextprotocol/sdk express zod
6. Hayvanat bahçesi MCP sunucusunu oluşturma
MCP ile LLM kullanımını iyileştirmek için değerli bağlam sağlamak üzere Genkit ile bir zoo MCP sunucusu ayarlayın. Genkit, Model Context Protocol ile çalışmak için kullanılan standart bir çerçevedir. Genkit, Node.js ile MCP sunucuları ve istemcileri oluşturmak için hızlı bir yol sunar. Bu MCP sunucusu, kurgusal bir hayvanat bahçesindeki hayvanlar hakkında veri sağlar. Basitlik için verileri bellekte saklarız. Üretim MCP sunucusu için verileri veritabanları veya API'ler gibi kaynaklardan sağlamak isteyebilirsiniz.
package.jsondosyasına bağımlılık olarak Genkit'i eklemek için aşağıdaki komutu çalıştırın: Bu işlem, projenize birnpm install genkitpackage-lock.jsondosyası ekler.package.jsondosyasına Genkit AI MCP kitaplığını eklemek için aşağıdaki komutu çalıştırın:npm install @genkit-ai/mcp- MCP sunucusu kaynak kodu için yeni bir
index.jsdosyası oluşturup açın:cloudshell edit index.jscloudshell editkomutu,index.jsdosyasını terminalin üstündeki düzenleyicide açar. index.jsdosyasına aşağıdaki zoo MCP sunucusu kaynak kodunu ekleyin:import express from 'express'; import { genkit, z } from 'genkit'; import { createMcpServer } from '@genkit-ai/mcp'; import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'; // Dictionary of animals at the zoo const ZOO_ANIMALS = [ { "species": "lion", "name": "Leo", "age": 7, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "lion", "name": "Nala", "age": 6, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "lion", "name": "Simba", "age": 3, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "lion", "name": "King", "age": 8, "enclosure": "The Big Cat Plains", "trail": "Savannah Heights" }, { "species": "penguin", "name": "Waddles", "age": 2, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Pip", "age": 4, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Skipper", "age": 5, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Chilly", "age": 3, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Pingu", "age": 6, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "penguin", "name": "Noot", "age": 1, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "elephant", "name": "Ellie", "age": 15, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "elephant", "name": "Peanut", "age": 12, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "elephant", "name": "Dumbo", "age": 5, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "elephant", "name": "Trunkers", "age": 10, "enclosure": "The Pachyderm Sanctuary", "trail": "Savannah Heights" }, { "species": "bear", "name": "Smokey", "age": 10, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "bear", "name": "Grizzly", "age": 8, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "bear", "name": "Barnaby", "age": 6, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "bear", "name": "Bruin", "age": 12, "enclosure": "The Grizzly Gulch", "trail": "Polar Path" }, { "species": "giraffe", "name": "Gerald", "age": 4, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "giraffe", "name": "Longneck", "age": 5, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "giraffe", "name": "Patches", "age": 3, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "giraffe", "name": "Stretch", "age": 6, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Speedy", "age": 2, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Dash", "age": 3, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Gazelle", "age": 4, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "antelope", "name": "Swift", "age": 5, "enclosure": "The Tall Grass Plains", "trail": "Savannah Heights" }, { "species": "polar bear", "name": "Snowflake", "age": 7, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "polar bear", "name": "Blizzard", "age": 5, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "polar bear", "name": "Iceberg", "age": 9, "enclosure": "The Arctic Exhibit", "trail": "Polar Path" }, { "species": "walrus", "name": "Wally", "age": 10, "enclosure": "The Walrus Cove", "trail": "Polar Path" }, { "species": "walrus", "name": "Tusker", "age": 12, "enclosure": "The Walrus Cove", "trail": "Polar Path" }, { "species": "walrus", "name": "Moby", "age": 8, "enclosure": "The Walrus Cove", "trail": "Polar Path" }, { "species": "walrus", "name": "Flippers", "age": 9, "enclosure": "The Walrus Cove", "trail": "Polar Path" } ]; // Initialize Genkit const ai = genkit({}); // Define tools using Genkit ai.defineTool( { name: 'get_animals_by_species', description: "Retrieves all animals of a specific species from the zoo. Can also be used to collect the base data for aggregate queries of animals of a specific species - like counting the number of penguins or finding the oldest lion.", inputSchema: z.object({ species: z.string() }), }, async ({ species }) => { console.log(`>>> 🛠️ Tool: 'get_animals_by_species' called for '${species}'`); const animals = ZOO_ANIMALS.filter(animal => animal.species.toLowerCase() === species.toLowerCase()); return animals; } ); ai.defineTool( { name: 'get_animal_details', description: "Retrieves the details of a specific animal by its name.", inputSchema: z.object({ name: z.string() }), }, async ({ name }) => { console.log(`>>> 🛠️ Tool: 'get_animal_details' called for '${name}'`); const animal = ZOO_ANIMALS.find(a => a.name.toLowerCase() === name.toLowerCase()); return animal; } ); // Create Genkit MCP server wrapper const mcpWrapper = createMcpServer(ai, { name: 'zoo-animal-server', version: '1.0.0', }); // HTTP server mode const app = express(); app.use(express.json()); // Initialize Genkit MCP server once const mcpServerPromise = mcpWrapper.setup().then(() => mcpWrapper.server); app.post('/mcp', async (req, res) => { console.log('/mcp Received:', req.body); console.log('Using HTTP transport mode.'); const server = await mcpServerPromise; const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined, }); if (!server) { console.error('MCP Server not initialized correctly.'); res.sendStatus(500); return; } await server.connect(transport); await transport.handleRequest(req, res, req.body); res.on('close', () => { console.log('Request closed'); transport.close(); }); }); app.get('/mcp', async (req, res) => { console.log('Received GET MCP request'); res.sendStatus(405); }); app.delete('/mcp', async (req, res) => { console.log('Received DELETE MCP request'); res.sendStatus(405); }); // Start the server const PORT = process.env.PORT || 8080; app.listen(PORT, () => { console.log(`Zoo Animal MCP server listening on port ${PORT}`); });
Kodunuz tamamlandı. Şimdi MCP sunucusunu Cloud Run'a dağıtma zamanı.
7. Cloud Run'a dağıtma
Şimdi doğrudan kaynak koddan Cloud Run'a bir MCP sunucusu dağıtın.
mcp-server-saadlı bir hizmet hesabı oluşturun:gcloud iam service-accounts create mcp-server-sa --display-name="MCP Server Service Account"- Uygulamayı Cloud Run'a dağıtmak için
gcloudkomutunu çalıştırın. Kimlik doğrulama gerektirmek içingcloud run deploy zoo-mcp-server \ --service-account=mcp-server-sa@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --no-allow-unauthenticated \ --region=europe-west1 \ --source=. \ --labels=dev-tutorial=codelab-mcp--no-allow-unauthenticatedişaretini kullanın. Bu işlem, güvenlik nedeniyle önemlidir. Kimlik doğrulama gerektirmiyorsanız herkes MCP sunucunuzu arayabilir ve sisteminizde hasara neden olabilir. - Yeni bir Artifact Registry deposunun oluşturulduğunu onaylayın. Kaynak koddan Cloud Run'a ilk kez dağıtım yaptığınız için şunları görürsünüz:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [europe-west1] will be created. Do you want to continue (Y/n)?
YyazıpEntertuşuna basın. Bu işlem, dağıtımınız için bir Artifact Registry deposu oluşturur. Bu, Cloud Run hizmeti için MCP sunucusu Docker kapsayıcısının depolanması için gereklidir. - Birkaç dakika sonra şuna benzer bir mesaj görürsünüz:
Service [zoo-mcp-server] revision [zoo-mcp-server-12345-abc] has been deployed and is serving 100 percent of traffic.
MCP sunucunuzu dağıtmış olmanız gerekir. Artık kullanabilirsiniz.
8. Uzak MCP sunucusunu Gemini KSA'ya ekleme
Uzak bir MCP sunucusunu başarıyla dağıttığınıza göre artık Google Code Assist veya Gemini KSA gibi çeşitli uygulamaları kullanarak bu sunucuya bağlanabilirsiniz. Bu bölümde, Gemini KSA'yı kullanarak yeni uzak MCP sunucunuza bağlantı oluşturacağız.
- Kullanıcı hesabınıza uzaktaki MCP sunucusunu çağırma izni verme
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member=user:$(gcloud config get-value account) \ --role='roles/run.invoker' - Google Cloud kimlik bilgilerinizi ve proje numaranızı, Gemini Ayarları dosyasında kullanmak üzere ortam değişkenlerine kaydedin:
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)") export ID_TOKEN=$(gcloud auth print-identity-token) - Gemini CLI ayarlar dosyanızı açın.
cloudshell edit ~/.gemini/settings.json - Cloud Run MCP sunucusunu eklemek için Gemini CLI ayarları dosyanızı değiştirme
{ "ide": { "hasSeenNudge": true }, "mcpServers": { "zoo-remote": { "httpUrl": "https://zoo-mcp-server-$PROJECT_NUMBER.europe-west1.run.app/mcp", "headers": { "Authorization": "Bearer $ID_TOKEN" } } }, "security": { "auth": { "selectedType": "cloud-shell" } } }
- Cloud Shell'de Gemini CLI'yı başlatma
Bazı varsayılan ayarları kabul etmek içingeminiEntertuşuna basmanız gerekebilir.
- Gemini'ın, bağlamı dahilinde kullanabileceği MCP araçlarını listelemesini sağlama
/mcp - Gemini'dan hayvanat bahçesinde bir şey bulmasını isteme
Gemini CLI,Where can I find penguins?zoo-remoteMCP sunucusunu kullanması gerektiğini bilir ve MCP'nin yürütülmesine izin vermek isteyip istemediğinizi sorar. - Aşağı ok tuşunu kullanın, ardından seçmek için
Entertuşuna basın.Yes, always allow all tools from server "zoo-remote"

Çıktıda doğru yanıt ve MCP sunucusunun kullanıldığını gösteren bir görüntüleme kutusu yer almalıdır.

Başardınız! Uzak bir MCP sunucusunu Cloud Run'a başarıyla dağıttınız ve Gemini KSA kullanarak test ettiniz.
Oturumunuzu sonlandırmaya hazır olduğunuzda /quit yazıp Enter tuşuna basarak Gemini CLI'dan çıkın.
Hata ayıklama
Şuna benzer bir hata görürseniz:
🔍 Attempting OAuth discovery for 'zoo-remote'... ❌ 'zoo-remote' requires authentication but no OAuth configuration found Error connecting to MCP server 'zoo-remote': MCP server 'zoo-remote' requires authentication. Please configure OAuth or check server settings.
Kimlik jetonunun zaman aşımına uğramış olması ve ID_TOKEN ayarının tekrar yapılması gerekiyor olabilir.
/quityazıpEntertuşuna basarak Gemini CLI'dan çıkın.- Terminalinizde projenizi ayarlama
gcloud config set project [PROJECT_ID] - Google Cloud kimlik bilgileri komutunu yeniden çalıştırarak yeni bir
ID_TOKENalın. Mevcut kimlik bilgilerinizin süresi dolmuş olabilir.export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)") export ID_TOKEN=$(gcloud auth print-identity-token)
9. (İsteğe bağlı) Sunucu günlüklerinde araç çağrılarını doğrulama
Cloud Run MCP sunucunuzun çağrıldığını doğrulamak için hizmet günlüklerini kontrol edin.
gcloud run services logs read zoo-mcp-server --region europe-west1 --limit=5
Bir araç çağrısının yapıldığını onaylayan bir çıkış günlüğü görmeniz gerekir. 🛠️
2025-08-05 19:50:31 INFO: 169.254.169.126:39444 - "POST /mcp/ HTTP/1.1" 200 OK 2025-08-05 19:50:31 [INFO]: Processing request of type CallToolRequest 2025-08-05 19:50:31 [INFO]: >>> 🛠️ Tool: 'get_animals_by_species' called for 'penguin'
10. (İsteğe bağlı) Sunucuya MCP istemi ekleme
Bir MCP istemi, uzun bir istem için kısaltma oluşturarak sık çalıştırdığınız istemlerde iş akışınızı hızlandırabilir.
Gemini CLI, MCP istemlerini otomatik olarak özel eğik çizgi komutlarına dönüştürür. Böylece, /prompt_name yazarak bir MCP istemi çağırabilirsiniz. Burada prompt_name, MCP isteminizin adıdır.
Gemini CLI'ya /find animal yazarak hayvanat bahçesindeki bir hayvanı hızlıca bulabilmek için MCP istemi oluşturun.
- Bu kodu
index.jsdosyanızda// Create Genkit MCP server wrappersatırının üstüne ekleyin:ai.definePrompt( { name: 'find', description: 'Find which exhibit and trail a specific animal is located.', inputSchema: z.object({ animal: z.string() }), }, async ({ animal }) => { console.log(`>>> 💬 Prompt: 'find' called'`); return { messages: [ { role: 'user', content: [ { text: `Please find the exhibit and trail information for ${animal} in the zoo. Respond with '[animal] can be found in the [exhibit] on the [trail].' Example: Penguins can be found in The Arctic Exhibit on the Polar Path.` } ] } ] }; } ); - Uygulamanızı Cloud Run'a yeniden dağıtma
gcloud run deploy zoo-mcp-server \ --service-account=mcp-server-sa@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --no-allow-unauthenticated \ --region=europe-west1 \ --source=. \ --labels=dev-tutorial=codelab-mcp - Uzak MCP sunucunuz için ID_TOKEN'ınızı yenileyin
export ID_TOKEN=$(gcloud auth print-identity-token) - Uygulamanızın yeni sürümü dağıtıldıktan sonra Gemini CLI'yı başlatın.
gemini - İstemde, oluşturduğunuz yeni özel komutu kullanın:
/find --animal="lions"
Gemini KSA'nın get_animals_by_species aracını çağırdığını ve yanıtı MCP isteminde belirtildiği şekilde biçimlendirdiğini görmelisiniz.
╭───────────────────────────╮
│ > /find --animal="lion" │
╰───────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✔ get_animals_by_species (zoo-remote MCP Server) get_animals_by_species (zoo-remote MCP Server) │
│ │
│ [{"species":"lion","name":"Leo","age":7,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Nala","age":6,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Simba","age":3,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"King","age":8,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah Heights"}] │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ Lions can be found in The Big Cat Plains on the Savannah Heights.
11. (İsteğe bağlı) Daha hızlı yanıtlar için Gemini Flash Lite'ı kullanma
Gemini KSA, kullandığınız modeli seçmenize olanak tanır.
- Gemini 2.5 Pro, Google'ın son teknoloji ürünü düşünme modelidir. Kod, matematik ve STEM alanlarındaki karmaşık sorunlar üzerinde akıl yürütebilir, uzun bağlam kullanarak büyük veri kümelerini, kod tabanlarını ve belgeleri analiz edebilir.
- Gemini 2.5 Flash, Google'ın fiyat-performans açısından en iyi modelidir ve çok yönlü özellikler sunar. 2.5 Flash, büyük ölçekli işleme, düşük gecikme süresi, düşünme gerektiren yüksek hacimli görevler ve temsilci kullanım alanları için en iyisidir.
- Gemini 2.5 Flash Lite, Google'ın maliyet verimliliği ve yüksek gönderim hacmi için optimize edilmiş en hızlı Flash modelidir.
Hayvanat bahçesindeki hayvanları bulmayla ilgili istekler düşünme veya akıl yürütme gerektirmediğinden daha hızlı bir model kullanarak süreci hızlandırmayı deneyin.
Gemini CLI'ya /find animal yazarak hayvanat bahçesindeki bir hayvanı hızlıca bulabilmek için MCP istemi oluşturun.
- Uygulamanızın yeni sürümü dağıtıldıktan sonra Gemini CLI'yı başlatın.
gemini --model=gemini-2.5-flash-lite - İstemde, oluşturduğunuz yeni özel komutu kullanın:
/find --animal="lions"
Gemini KSA'nın get_animals_by_species aracını çağırdığını ve yanıtı MCP isteminde belirtildiği şekilde biçimlendirdiğini görmeye devam edersiniz ancak yanıt çok daha hızlı görünür.
╭───────────────────────────╮
│ > /find --animal="lion" │
╰───────────────────────────╯
╭───────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✔ get_animals_by_species (zoo-remote MCP Server) get_animals_by_species (zoo-remote MCP Server) │
│ │
│ [{"species":"lion","name":"Leo","age":7,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Nala","age":6,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"Simba","age":3,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah │
│ Heights"},{"species":"lion","name":"King","age":8,"enclosure":"The Big Cat │
│ Plains","trail":"Savannah Heights"}] │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯
✦ Lions can be found in The Big Cat Plains on the Savannah Heights.
Kendinizi Test Edeceğiniz Ek Hedefler
Ek bir zorluk için, hayvanat bahçesindeki belirli hayvan türleri hakkında eğlenceli bilgiler döndüren bir istem oluşturmak üzere aynı adımları uygulayıp uygulayamayacağınızı görün.
Öğrendiklerinizi daha da kapsamlı bir şekilde test etmek için sık kullanacağınız bir araç fikri geliştirin ve ikinci bir uzak MCP sunucusu dağıtın. Ardından, çalışıp çalışmadığını görmek için Gemini CLI ayarlarınıza ekleyin.
Hata ayıklama
Şuna benzer bir hata görürseniz:
✕ Unknown command: /find --animal="lions"
/mcp komutunu çalıştırmayı deneyin. zoo-remote - Disconnected çıktısı alırsanız yeniden dağıtmanız veya aşağıdaki komutları tekrar çalıştırmanız gerekebilir:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member=user:$(gcloud config get-value account) \
--role='roles/run.invoker'
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)")
export ID_TOKEN=$(gcloud auth print-identity-token)
12. Sonuç
Tebrikler! Güvenli bir uzak MCP sunucusunu başarıyla dağıtıp bağladınız.
Sonraki laboratuvara geçin.
Bu laboratuvar, üç bölümden oluşan bir serinin ilk laboratuvarıdır. İkinci laboratuvarda, ADK aracısıyla oluşturduğunuz MCP sunucusunu kullanacaksınız.
ADK aracısı ile Cloud Run'da MCP sunucusu kullanma
(İsteğe bağlı) Temizleme
Bir sonraki laboratuvara geçmiyorsanız ve oluşturduğunuz öğeleri temizlemek istiyorsanız ek ücret ödememek için Cloud projenizi silebilirsiniz.
Cloud Run, hizmet kullanılmadığında ücret almaz ancak container görüntüsünü Artifact Registry'de depoladığınız için ücretlendirilebilirsiniz. Cloud projenizi sildiğinizde, bu projede kullanılan tüm kaynaklar için faturalandırma durdurulur.
İsterseniz projeyi silebilirsiniz:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Ayrıca, gereksiz kaynakları cloudshell diskinizden de silebilirsiniz. Şunları yapabilirsiniz:
- Codelab proje dizinini silin:
rm -rf ~/mcp-on-cloudrun - Uyarı! Bu işlem geri alınamaz. Yer açmak için Cloud Shell'inizdeki her şeyi silmek istiyorsanız tüm ana dizininizi silebilirsiniz. Saklamak istediğiniz her şeyin başka bir yere kaydedildiğinden emin olun.
sudo rm -rf $HOME