Google MCP Sunucularını Kullanmaya Başlama

1. Giriş

Hoş geldiniz! Bu codelab'de, Google Yönetilen Model Context Protocol (MCP) sunucularını kullanarak yapay zeka aracılarınızı nasıl güçlendireceğinizi öğreneceksiniz.

Model Context Protocol (MCP), yapay zeka modellerinin harici veri kaynaklarına ve araçlarına güvenli ve verimli bir şekilde bağlanmasını sağlayan açık kaynaklı bir standarttır. Çoğu MCP uygulaması makinenizde yerel olarak çalışsa da Google, Yönetilen Uzak MCP Sunucuları sağlar. Bunlar, tamamen barındırılan, kurumsal kullanıma hazır uç noktalardır. Bu uç noktalar, sunucu tarafı kodu veya kapsayıcı yönetmenize gerek kalmadan temsilcilerinizin doğrudan Google Cloud altyapısıyla etkileşim kurmasına olanak tanır.

"Yönetilen" Avantajı

Standart giriş/çıkış (stdio) kullanan yerel MCP sunucularının aksine, Google'ın yönetilen sunucuları Streamable HTTP kullanır. Bu mimari şunları sunar:

  • Sıfır altyapı: Sağlanacak veya ölçeklendirilecek sunucu yoktur.
  • Tasarım gereği güvenlik: Google Cloud IAM ve denetleme günlükleriyle yerel entegrasyon.
  • Durumsuz Ölçeklendirme: Standart yük dengeleyiciler ve proxy'ler aracılığıyla sorunsuz etkileşim.

Neler öğreneceksiniz?

  • Yönetilen MCP sunucularını etkinleştirme ve kimlik doğrulama
  • Cloud Logging MCP sunucusunu temel bir başlangıç noktası olarak kullanma
  • Özerk iş akışları oluşturmak için birden fazla MCP sunucusunu (Developer Knowledge, Firestore vb.) düzenleme

İhtiyacınız olanlar

  • Faturalandırmanın etkin olduğu bir Google Cloud projesi.
  • Google Cloud Console ve gcloud KSA'ya aşina olmanız gerekir.
  • Google Cloud Shell (Gemini CLI burada önceden yüklenmiştir).

Bu codelab, yeni başlayanlar da dahil olmak üzere her seviyeden kullanıcı ve geliştirici için tasarlanmıştır.

Raporlama sorunları

Bu codelab'i ve Antigravity'yi kullanırken sorunlarla karşılaşabilirsiniz.

Codelab ile ilgili sorunlar (yazım hataları, yanlış talimatlar) için lütfen bu codelab'in sol alt köşesindeki Report a mistake düğmesini kullanarak bir hata kaydı açın:

b06b582bcd847f6d.png

2. Başlamadan Önce

Bu adımda Google Cloud ortamınızı hazırlayacaksınız. Tüm görevleri, kalıcı ve önceden yapılandırılmış bir terminal sağlayan Google Cloud Shell'de gerçekleştireceğiz.

Cloud Shell'i etkinleştirme

  1. Google Cloud Console'a gidin.
  2. Sağ üstteki başlıktan Cloud Shell'i etkinleştir simgesini tıklayın.
  3. Terminal oturumu başladıktan sonra istenirse istemi yetkilendirin.

Proje kimliğinizi ayarlama

Cloud Shell'inizin doğru projeyi işaret ettiğinden emin olun:

# Set your active project
gcloud config set project YOUR_PROJECT_ID

# Verify the setting
gcloud config list project

Foundation API'lerini etkinleştirme

Yönetilen MCP sunucularının kullanılabilmesi için hem temel ürün API'sinin hem de MCP arayüzünün etkinleştirilmesi gerekir. Cloud Logging arka ucunu (bu laboratuvar için temelimiz) etkinleştirmek üzere aşağıdaki komutu çalıştırın:

# Enable the Cloud Logging API and its MCP interface
gcloud services enable logging.googleapis.com
gcloud beta services mcp enable logging.googleapis.com

Not: Yönetilen MCP hizmetleri şu anda Beta sürümündedir. Bu özellikleri etkinleştirmek için gcloud beta bileşenini kullanmanız gerekir.

Uygulama Varsayılan Kimlik Bilgileri'ni (ADC) ayarlama

Gemini CLI, MCP sunucularıyla iletişim kurmak için kullanıcı kimliğinizi kullanır. Temsilciye sizin adınıza hareket etme izni verin:

gcloud auth application-default login

Terminaldeki URL'yi takip edin, oturum açın ve yetkilendirme kodunu Cloud Shell'e geri yapıştırın.

Temel IAM rollerini atama

Yönetilen MCP sunucuları Çift Katmanlı Güvenlik Modeli kullanır. İki belirli "kapının" açık olması gerekir:

  1. 1. Kapı (MCP Erişimi): Protokolü çağırmanıza olanak tanıyan rol.
  2. 2.Aşama (Hizmet Erişimi): Verileri görmenize (ör. günlükleri görüntüleme) olanak tanıyan rol.

Gerekli erişimi kendinize vermek için aşağıdaki komutu çalıştırın:

export PROJECT_ID=$(gcloud config get-value project)
export USER_EMAIL=$(gcloud config get-value account)

# Gate 1: Permission to use the MCP protocol
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="user:$USER_EMAIL" \
    --role="roles/mcp.toolUser"

# Gate 2: Permission to view the actual logs
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="user:$USER_EMAIL" \
    --role="roles/logging.viewer"

3. Temel bilgiler: İlk MCP sunucunuzu bağlama

Bu adımda, yapay zeka aracınızı (Gemini CLI) Google Cloud Logging MCP sunucusuna bağlayacaksınız. Bu, temsilcinin projenizde neler olduğunu gerçek zamanlı olarak görmesini sağladığı için "temelimiz"dir.

1. görev: Günlük kaydı MCP sunucusunu yapılandırma

Gemini CLI, bağlantılarını yönetmek için settings.json dosyasını kullanır. Bu dosyayı (~/.gemini klasöründe bulunur) düzenleyerek mcpServers bloğuna aşağıdaki snippet'i eklemeniz gerekir. YOUR_PROJECT_ID öğesini kendi proje kimliğinizle değiştirin:

"logging-mcp": {
      "httpUrl": "https://logging.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/logging.read"
        ]
      },
      "timeout": 30000,
      "headers": {
        "x-goog-user-project": "YOUR_PROJECT_ID"
      }
}

Not: API kullanımı ve faturalandırmanın projenize doğru şekilde ilişkilendirilmesi için Yönetilen MCP sunucularında x-goog-user-project başlığı gereklidir.

2. görev: Proje etkinliğini simüle etme (günlük oluşturma)

Projeniz yeni veya boşta ise son zamanlarda "ilginç" günlükler oluşturmamış olabilir. Aracının bulabileceği bir şeyler olması için gcloud KSA'yı kullanarak birkaç özel giriş ekleyelim.

Bir olay dizisini simüle etmek için bu komutları tek tek çalıştırın:

# 1. Simulate a standard system start
gcloud logging write mcp-test-log "System boot sequence initiated" --severity=INFO
# 2. Simulate a warning about resource limits
gcloud logging write mcp-test-log "High memory pressure detected in zone us-central1-a" --severity=WARNING
# 3. Simulate a critical authentication failure
gcloud logging write mcp-test-log "ERROR: Failed to connect to Cloud SQL. Permission Denied." --severity=ERROR

3. görev: Gemini KSA'da araçları doğrulama

Sohbete başlamadan önce, temsilcinin günlük kaydı sunucusu tarafından kullanıma sunulan araçları "görebildiğini" doğrulayalım. Gemini CLI'yı başlatın:

gemini

Gemini CLI istemine (>) girdikten sonra list komutunu çalıştırın:

/mcp list

Doğrulama Kontrol Noktası: logging-mcp, list_log_entries dahil olmak üzere yaklaşık 6 araç ile birlikte Hazır olarak listelenmelidir.

4. Görev: İlk Canlı Altyapı İsteminiz

Şimdi temsilciden yeni oluşturduğumuz günlükleri bulmasını isteyelim. Daha önce roles/logging.viewer rolünü verdiğiniz için aracı artık "ulaşabilir" ve proje durumunuzu okuyabilir.

Gemini CLI'ye aşağıdaki istemi girin:

Show me the 3 most recent log entries from the log named 'mcp-test-log'. What is the highest severity issue you see?

Temsilciyi Gözlemleme:

  1. Aracı, Google Cloud proje kimliğini girmenizi isteyebilir. Lütfen bu bilgiyi paylaşın.
  2. list_log_entries aracına ihtiyacı olduğunu belirler.
  3. Araç, çalıştırılmak için sizden izin ister. 1. Evet, bir kereliğine izin ver.
  4. JSON yanıtını ayrıştırır ve simüle ettiğimiz Cloud SQL Permission Denied (Cloud SQL İzin Reddedildi) hatası hakkında bilgi verir.

4. A Kullanıcı Akışı: Beyin (Geliştirici Bilgisi MCP)

Bu yolculukta, Google Developer Knowledge MCP Sunucusu'na bağlayarak aracınıza "beyin" kazandıracaksınız.

Yapay zeka aracılarıyla ilgili en büyük risklerden biri halüsinasyondur. Bu durumda, güncel olmayan KSA komutları veya desteği sonlandırılmış API parametreleri güvenle sağlanır. Bu MCP sunucusu, Google'ın resmi ve canlı geliştirici dokümanı derlemesinde (Google Cloud, Firebase, Android ve daha fazlasını kapsar) aracıyı temellendirerek bu sorunu çözer.

1. görev: Bilgi Hizmetleri'ni etkinleştirin

Temel adımımızda olduğu gibi, hem arka uç API'sini hem de MCP hizmeti uç noktasını etkinleştirmemiz gerekir.

# 1. Enable the Developer Knowledge API
gcloud services enable developerknowledge.googleapis.com

# 2. Enable the MCP Server interface
gcloud beta services mcp enable developerknowledge.googleapis.com

2. görev: Kısıtlanmış bir API anahtarı sağlama

Geliştirici Bilgisi MCP'si, kimlik doğrulama için API anahtarlarını kullanır. Güvenlik için bir anahtar oluşturup bu anahtarı yalnızca bu API ile kullanılacak şekilde kısıtlayacağız.

  1. Anahtarınızı oluşturmak ve almak için aşağıdaki komut dosyasını çalıştırın:
# Create the restricted API key
gcloud alpha services api-keys create \
    --display-name="MCP-Knowledge-Key" \
    --api-target service=developerknowledge.googleapis.com

# Wait a few seconds for the key to propagate, then fetch the string
gcloud alpha services api-keys get-key-string \
    $(gcloud alpha services api-keys list \
    --filter="displayName='MCP-Knowledge-Key'" \
    --format="value(name)") \
    --format="value(keyString)"
  1. İkinci komut tarafından döndürülen uzun karakter dizisini kopyalayın. Bu, sizin YOUR_API_KEY.

3. görev: Gemini KSA'yı yapılandırma

Şimdi Knowledge MCP sunucusunu aracınıza kaydedin. Bu sayede temsilci, %100 kesinlikle yanıtlayamadığı teknik bir soruyla karşılaştığında resmi dokümanlarda arama yapabilir.

~/.gemini/settings.json dosyasındaki mcpServers bölümüne aşağıdaki snippet'i ekleyin. YOUR_API_KEY ifadesini az önce kopyaladığınız dizeyle değiştirin:

"developer-knowledge-mcp": {
      "httpUrl": "https://developerknowledge.googleapis.com/mcp",
      "headers": {
        "X-Goog-Api-Key": "YOUR_API_KEY"
      }
}

4. Görev: Halüsinasyon Önleme Testi

Temsilcinin artık "tahmin etmek" yerine "araştırma yapmakta" olduğunu doğrulayalım.

Gemini CLI'yı başlatın:

gemini

Sunucunun hazır olduğunu doğrulayın: /mcp list yazın. google-developer-knowledge ile 2 araç (search_documents, get_document) görmelisiniz.

İstem: Aracının belirli bir modern komutu bulmasını isteyin.

I want to create a Google Cloud Storage bucket using the modern gcloud storage command. Search the official documentation for the exact syntax and show me an example for a bucket in the 'us-central1' region.

Dikkat edilecek noktalar:

  • Gemini, search_documents kullanmak için izin ister.
  • Ardından, bulduğu belirli sayfayı okumak için get_document işlevini çağırması muhtemeldir.
  • Son cevap, doğrudan dokümanlardan alıntılanan bir gcloud storage buckets create ... komutunu içermelidir.

5. B yolculuğu: Önceliklendirme (otonom sorun giderme)

Ön koşul: Bu yolculukta, Ajan'ın düzeltmeleri araştırabilmesi için A Yolculuğu: Beyin'i tamamlamış olmanız gerekir.

Bu yolculukta, Bağımsız Sorun Giderme Döngüsü oluşturmak için aracınızın Gözlerini (Cloud Logging MCP) ve Beynini (Developer Knowledge MCP) birleştireceksiniz.

Hata kodlarını manuel olarak bir arama motoruna kopyalamak yerine, projede hata taraması yapması, resmi çözümü araştırması ve uygulanabilir bir düzeltme raporu oluşturması için yapay zeka aracına tek bir istem vereceksiniz.

1. görev: GCP'de "kötü bir gün" simülasyonu yapın

Kendi kendine sorun giderme özelliğinin gücünü görmek için gerçekçi bir hata grubu gerekir. İzin reddedildi hatalarından kota sorunlarına kadar çeşitli altyapı engellerini doğrudan günlüklerinize yerleştirmek için bir Python komut dosyası kullanacağız.

  1. Cloud Shell'de istediğiniz bir klasörü oluşturun ve bu klasöre gidin.
  2. simulate_errors.py adlı bir dosya oluşturun:
nano simulate_errors.py
  1. Aşağıdaki kodu düzenleyiciye yapıştırın:
import argparse
from google.cloud import logging

def simulate_errors(project_id):
    client = logging.Client(project=project_id)
    logger = client.logger("mcp-scenario-logger")

    print(f"Simulating realistic errors for project: {project_id}...")

    # 1. GCS Permission Error
    logger.log_text("ERROR: GCS Upload failed for 'gs://my-app-bucket/data.json'. Status: 403 Forbidden. Missing 'storage.objects.create' for service account.", severity="ERROR")

    # 2. Cloud Run Startup Error
    logger.log_text("ERROR: Cloud Run service 'api-gateway' failed to start. Container failed to listen on port 8080. Check 'Cloud Run container startup requirements'.", severity="ERROR")

    # 3. Secret Manager Access Error
    logger.log_text("ERROR: Access denied to secret 'API_KEY'. The identity lacks 'secretmanager.versions.access'.", severity="ERROR")

    print("Log entries written to 'mcp-scenario-logger'.")

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--project", required=True)
    args = parser.parse_args()
    simulate_errors(args.project)
  1. Kaydedip çıkmak için Ctrl+O, Enter ve Ctrl+X tuşlarına basın.
  2. Google Cloud Logging kitaplığını yükleyip komut dosyasını çalıştırın:
python -m venv mcp_env
source mcp_env/bin/activate
pip install google-cloud-logging
python simulate_errors.py --project $(gcloud config get-value project)

2. görev: Bağımsız döngüyü yürütün

Şimdi Gemini'a her iki MCP sunucusunu aynı anda düzenlemesini söyleyen karmaşık bir istem göndereceğiz.

Gemini CLI'yı başlatın:

gemini

Bu "Ana İstem"i temsilciye girin:

I need to troubleshoot recent issues in my project. Perform the following autonomous loop:

Step 1 : Retrieval: Use the Logging MCP to fetch the 5 most recent ERROR entries from the log 'mcp-scenario-logger'.
Step 2 : Iteration: For every unique error found, extract the service and specific error message.
Step 3 : Research: Use the Developer Knowledge MCP to find the official resolution or gcloud command to fix each issue.
Step 4 : Resolution: Consolidate everything into a markdown table with columns: | Service | Error Summary | Recommended Fix |.

Daha sonra ne olur?

Şu anda Agentic Workflow'u gerçek zamanlı olarak izliyorsunuz. Temsilci:

  1. Yeni simüle ettiğimiz "Kötü Gün"ü görmek için list_log_entries numaralı telefonu arayın.
  2. GCS, Cloud Run ve Secret Manager'ın başarısız olduğunu belirlemek için metni analiz edin.
  3. Doğru IAM rollerini veya yapılandırma düzeltmelerini bulmak için bu hizmetlerin her biri için search_documents ve get_document işlevlerini çağırın.
  4. Aşağıdakine benzer bir yapılandırılmış tablo gösterir (öneriler farklı olabilir):

Hizmet

Hata Özeti

Önerilen Düzeltme

Cloud Storage

Yükleme sırasında 403 Yasak hatası

Hizmet hesabına roles/storage.objectCreator izni verin.

Cloud Run

8080 bağlantı noktası dinlenemedi

Uygulamanın, $PORT tarafından tanımlanan bağlantı noktasında 0.0.0.0'a bağlandığından emin olun.

Secret Manager

Sürüm erişim rolü eksik

Kimliğe roles/secretmanager.secretAccessor öğesini atayın.

6. C yolculuğu: Veriler (Firestore MCP)

Bu yolculukta, doğal dil dışında hiçbir şey kullanmadan NoSQL belge veritabanını yönetmek için Firestore MCP Server'ı kullanacaksınız.

Firestore esnek ve ölçeklenebilir bir veritabanıdır ancak yönetimi genellikle karmaşık SDK kodu yazmayı veya konsolda gezinmeyi gerektirir. MCP ile temsilciniz, verileri doldurabilen, kayıtları sorgulayabilen ve hatta sohbet üzerinden karmaşık şema taşımaları gerçekleştirebilen bir veritabanı yöneticisi olur.

1. görev: Firestore hizmetlerini etkinleştirme

Öncelikle Firestore API'yi ve ilgili MCP uç noktasını etkinleştirin.

# 1. Enable the Firestore API
gcloud services enable firestore.googleapis.com

# 2. Enable the MCP Server interface
gcloud beta services mcp enable firestore.googleapis.com

2. görev: Firestore IAM rollerini atama

Sorgu çalıştırmak için kimliğinizin temel MCP erişiminin ötesinde belirli izinlere sahip olması gerekir.

# Grant Firestore User role
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="user:$USER_EMAIL" \
    --role="roles/datastore.user"

3. görev: Özel bir test veritabanı oluşturun

Deneylerimizin güvenliğini sağlamak için mcp-lab-db adlı özel bir Firestore veritabanı oluşturacağız.

gcloud firestore databases create --database=mcp-lab-db --location=nam5 --type=firestore-native

4. görev: Gemini CLI'yı yapılandırma

Firestore MCP sunucusunu aracınıza ekleyin. ~/.gemini/settings.json dosyasındaki mcpServers bölümüne aşağıdaki yapılandırmayı ekleyin. YOUR_PROJECT_ID öğesini kendi proje kimliğinizle değiştirin:

"firestore-mcp": {
      "httpUrl": "https://firestore.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      },
      "timeout": 30000,
      "headers": {
        "x-goog-user-project": "YOUR_PROJECT_ID"
      }
}

5. görev: Natural Language DB Ops

Gemini KSA'yı başlatın ve bağlantıyı doğrulamak için bazı temel işlemleri gerçekleştirin.

Gemini CLI'yı başlatın:

gemini

Sunucunun hazır olduğunu doğrulayın: /mcp list yazın. Çeşitli araçların (add_document, create_database, list_documents, etc) bulunduğu firestore-mcp simgesini görürsünüz.

Aşağıdaki istemleri sırayla deneyin:

Başlangıç Verileri:

In the 'mcp-lab-db' database, add three documents to a 'products' collection. Include a laptop (stock 5), a mouse (stock 25), and a keyboard (stock 8).

Doğrulama:

List all documents in the 'products' collection from the 'mcp-lab-db' database.

Firestore veritabanlarını ve koleksiyonlarını doğal dille yönetmenize yardımcı olan diğer istemleri de deneyin.

7. D yolculuğu: İstihbarat (BigQuery ve Haritalar)

Bu yolculukta, BigQuery ve Maps Grounding Lite MCP sunucularını kullanarak aracınızı petabaytlarca veriyi analiz etme ve fiziksel dünyayı anlama yeteneğiyle donatacaksınız.

Bu bölümün sonunda, aracınız doğal dili karmaşık SQL sorgularına çevirebilecek ve yanıtlarını gerçekliğe dayandırmak için bağlama duyarlı coğrafi tavsiyeler (ör. seyahat süreleri ve hava durumu) sunabilecek.

1. görev: Zeka Hizmetleri'ni etkinleştirme

Hem BigQuery hem de Google Haritalar için API'leri ve MCP arayüzlerini etkinleştirin.

# 1. Enable product APIs
gcloud services enable bigquery.googleapis.com mapstools.googleapis.com

# 2. Enable MCP Server interfaces
gcloud beta services mcp enable bigquery.googleapis.com
gcloud beta services mcp enable mapstools.googleapis.com

2. görev: BigQuery IAM rollerini atama

Sorgu çalıştırmak için kimliğinizin temel MCP erişiminin ötesinde belirli izinlere sahip olması gerekir.

# Grant BigQuery Job User and Data Viewer roles
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="user:$USER_EMAIL" \
    --role="roles/bigquery.jobUser"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="user:$USER_EMAIL" \
    --role="roles/bigquery.dataViewer"

3. görev: Maps API anahtarı sağlama

Yalnızca IAM'ye dayanan diğer hizmetlerin aksine, Maps Grounding Lite sunucusu kota ve faturalandırma için API anahtarı gerektirir.

Anahtarı oluşturun:

gcloud alpha services api-keys create --display-name="MCP-Maps-Key"

Anahtar dizesini getirin:

# Wait a few seconds for the key to propagate, then fetch the string
gcloud alpha services api-keys get-key-string \
    $(gcloud alpha services api-keys list \
    --filter="displayName='MCP-Maps-Key'" \
    --format="value(name)") \
    --format="value(keyString)"

Bir sonraki adım için anahtar dizesini kopyalayın.

4. görev: Gemini CLI'yı yapılandırma

Şimdi her iki sunucuyu da kaydedin. Aşağıdaki snippet'leri ~/.gemini/settings.json dosyasındaki mcpServers bölümüne ekleyin. YOUR_PROJECT_ID ve YOUR_MAPS_API_KEY değerlerini uygun şekilde değiştirin.

"bigquery-mcp": {
      "httpUrl": "https://bigquery.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      },
      "timeout": 30000,
      "headers": {
        "x-goog-user-project": "YOUR_PROJECT_ID"
      }
},
"maps-grounding-lite-mcp": {
      "httpUrl": "https://mapstools.googleapis.com/mcp",
      "headers": {
        "X-Goog-Api-Key": "YOUR_MAPS_API_KEY"
      }
}

5. görev: Uygulamalı analiz

Gemini CLI'yı başlatın ve yeni "Intelligence" (Zeka) özelliklerini test edin.

gemini

Sunucunun hazır olduğunu doğrulayın: /mcp list yazın. bigquery-mcp ve maps-grounding-lite-mcp simgelerinin yanı sıra listelenen birkaç aracı görmelisiniz. .

1. Senaryo: Analitik Motor (BigQuery) Aracıdan, herhangi bir SQL bilgisine sahip olmadan herkese açık bir veri kümesini sorgulamasını isteyin:

Run a query to count the number of penguins on each island in the BigQuery public dataset ml_datasets.penguins.

2. Senaryo: Coğrafi Bağlam (Haritalar) Ajanın gerçek dünyada bir gezi planlamasını isteyin:

I am planning a drive from Mumbai to Pune tomorrow morning. Based on current weather and routing, what should I expect in terms of travel time and what should I carry?

Dikkat edilecek noktalar:

  • BigQuery için aracı, şemayı keşfetmek ve sorguyu çalıştırmak üzere execute_sql işlevini çağırır.
  • Haritalar'da, lookup_weather ve compute_routes işlevlerini düzenleyerek size temellendirilmiş ve faydalı bir seyahat planı sunar.

8. Sağlamlaştırma: Üretim Güvenliği ve IAM

Bu son adımda, geniş kapsamlı "Sahip" izinlerini kullanmaktan üretim düzeyinde derinlemesine savunma modeline geçeceksiniz.

Yapay zeka ajanları doğası gereği "faydalıdır". Bir aracı kullanıcı arayüzü düzeyinde kısıtlarsanız akıllı bir aracı, bunun yerine bir kabuk komutu çalıştırarak bu kısıtlamayı atlamaya çalışabilir. Altyapınızı gerçekten güvenli hale getirmek için Google Cloud IAM'i kullanarak kesin sınırlar oluşturmanız gerekir.

Çift Katmanlı Güvenlik Modeli

Bir işlemin yürütülmesi için aracının iki kapıdan geçmesi gerekir:

  1. 1. kapı (MCP kapısı): Kimlikte roles/mcp.toolUser var mı? (Protokolü kullanma izni).
  2. 2. Kapı (Hizmet Kapısı): Kimlik, belirli bir ürün rolüne (ör. roles/datastore.viewer) sahip mi? (Verileri görme izni)

1. görev: 1. katman - İstemci tarafı filtreleme (excludeTools)

İlk savunma katmanı, araçları aracıdan gizleyerek aracıya bu araçları kullanmayı "düşündürmemektir".

  1. Cloud Shell düzenleyicide Gemini CLI ayarlarınızı açın:
cloudshell edit ~/.gemini/settings.json
  1. firestore-mcp bloğunu bulun ve yıkıcı işlemleri gizlemek için excludeTools yönergesini ekleyin:
"firestore-mcp": {
  "httpUrl": "https://firestore.googleapis.com/mcp",
  "excludeTools": ["delete_database", "update_database", "delete_document"],
  ...
}

Dosyayı kaydedin ve Gemini CLI'ı yeniden başlatın. /mcp list komutunu çalıştırın ve bu araçların artık olmadığını fark edin.

2. Görev: Katman 2 - Altyapı Üstünlüğü (IAM Güvenlik Görevlisi)

İstemci tarafı filtreleme, "yumuşak" bir koruma sınırıdır. Aracıdan "Firestore veritabanımı sil" isteğinde bulunursanız ve araç gizliyse gcloud firestore databases delete komutunu çalıştırmayı deneyebilir. Bunu önlemek için en az ayrıcalıklı hizmet hesabı kullanırız.

"Yalnızca Okuyucu" hizmet hesabı oluşturma:

# Create the service account
gcloud iam service-accounts create mcp-reader-sa --display-name="MCP Reader Only"

# Grant ONLY the necessary roles (Gate 1 + Gate 2)
export PROJECT_ID=$(gcloud config get-value project)
SA_EMAIL="mcp-reader-sa@$PROJECT_ID.iam.gserviceaccount.com"

gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA_EMAIL" --role="roles/mcp.toolUser"
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA_EMAIL" --role="roles/datastore.viewer"
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA_EMAIL" --role="roles/aiplatform.user"

Anahtarı oluşturma ve etkinleştirme:

gcloud iam service-accounts keys create reader-key.json --iam-account=$SA_EMAIL
export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/reader-key.json

3. Görev: "Faydalı Ajan" Bouncer Testi

Şimdi, aracının güvenliğimizi atlayıp atlayamayacağını test edelim.

İlk adımımız, aracının gcloud komutunu kullanmaya geri dönmesi durumunda bile yeni oluşturduğumuz hizmet hesabı kimliği altında çalışması için hizmet hesabını etkinleştirmek olacaktır.

Hizmet hesabını etkinleştirin:

Aşağıdaki komutu çalıştırın ve [PATH_TO_KEY_FILE] kısmını JSON anahtar dosyanızın gerçek yoluyla (ör. reader-key.json) değiştirin.

gcloud auth activate-service-account --key-file=[PATH_TO_KEY_FILE]

Değişikliği doğrulama:

Komutu çalıştırdıktan sonra, hizmet hesabının etkin olduğunu doğrulamak için şu komutu çalıştırabilirsiniz:

gcloud auth list

Çıktıda, hizmet hesabı etkin kimlik bilgisi olarak gösterilir.

Gemini KSA'yı başlatın:

gemini

Şu istemi yazın:

I want to delete the 'mcp-lab-db' firestore database. If the tool is missing, try using the gcloud firestore command in the terminal.

Ne olur?

  1. Aracı, önce Firestore MCP sunucusundaki delete_database aracını kullanmaya çalışır. İzin eksikliği nedeniyle işlem başarısız olur.
  2. Ardından, gcloud firestore komutunu kullanmak için run_shell_command aracına geri dönerek "yardımcı" olmaya çalışır.

Sonuç:

Komut, "Yasaklandı" hatasıyla başarısız oluyor. Aracı, mcp-reader-sa kimliği altında çalıştığı için datastore.databases.delete izni eksik. IAM, nihai güvenlik önlemidir. Temsilci kaynağa nasıl ulaşmaya çalışırsa çalışsın, Google Cloud API düzeyindeki "Bouncer" isteği engeller.

Kullanıcı hesabınıza geri dönme:

Kullanıcı hesabınıza geri dönmek için aşağıdaki komutu verin:

gcloud config set account YOUR_EMAIL_ADDRESS

9. Temizleme

İstenmeyen ücretlerle karşılaşmamak için test kaynaklarınızı silin:

# Delete the Firestore database
gcloud firestore databases delete --database=mcp-lab-db

# Remove the service account
gcloud iam service-accounts delete mcp-reader-sa@$PROJECT_ID.iam.gserviceaccount.com

10. Sonuç

Tebrikler! Google tarafından yönetilen MCP sunucularının tüm yığınına başarıyla göz attınız.

Laboratuvarın "Gövdesi" ile başladınız ve Cloud Logging ile temel bir bağlantı kurdunuz. Buradan da modüler "Maceralar"a geçerek aracınızın bilgilerini temellendirdiniz, karmaşık sorun giderme döngülerini otomatik hale getirdiniz, Firestore'daki verileri taşıdınız ve BigQuery ile Haritalar'dan analizler çıkardınız.

En önemlisi, üretim güvenliğinin temellerine bağlı kalarak bitirdiniz. Bir aracının kusurlu bir şekilde "faydalı" olabileceğini kanıtladınız. Google Cloud IAM ise nihai güvenlik görevlisi olarak özerk iş akışlarınızın her zaman en az ayrıcalık ilkesine uymasını sağlar.

Temel çıkarımlar

  • Yönetilen = Ölçeklenebilir: Tek bir sunucu dağıtmadan Streamable HTTP üzerinden altyapı düzeyindeki araçlara bağlandınız.
  • Temellendirme Zorunludur: LLM "tahminini" Geliştirici Bilgisi MCP ile değiştirerek aracınızın güncel ve geçerli komutlar kullanmasını sağladınız.
  • Orkestrasyonun gücü: Bir temsilci, tek bir işletme sorununu çözmek için birden fazla MCP sunucusunu birleştirdiğinde gerçek sihrin gerçekleştiğini gördünüz.