Last chance! 50% off DataCamp Premium
Sale ends in
Yapay zeka ajanları son derece güçlüdür, ancak çoğu zaman temel bir kusurdan muzdariptir: Günlük işlerimizin gerçekten yürüdüğü e-postalarımız, takvimlerimiz ve belgelerimizden kopukturlar. Canlı verilerinize erişim olmadan bir LLM, yalnızca son derece düzgün konuşan bir fikir üreticisidir.
Bu öğreticide, Google Workspace MCP Sunucusunu yapılandırarak, en güncel güvenlik kontrollerini anlayarak ve otomatik bir asistan oluşturarak yapay zeka modelleriyle kurumsal verileriniz arasındaki boşluğu nasıl kapatacağınızı göstereceğim.
Sonunda şunları yapabileceksiniz:
Google Workspace MCP Sunucusu, uyumlu herhangi bir yapay zeka istemcisinin (Claude Desktop, Gemini CLI veya özel ajanlar gibi) Google Workspace uygulamalarıyla güvenli şekilde etkileşim kurmasına olanak tanıyan, Model Context Protocol'ün (MCP) standartlaştırılmış bir uygulamasıdır.
Geliştiricilerin her yeni yapay zeka projesi için Gmail, Google Docs, Drive ve Calendar'a özel REST API sarmalayıcıları yazması yerine, MCP sunucusu bu yetenekleri LLM'in doğal olarak anladığı standartlaştırılmış "araçlar" olarak sunar.
Birebir deneyim kazanmak için Model Context Protocol (MCP) Giriş kursuna göz atmanızı öneririm.
Normalde, uygulamalar arası bir iş akışı oluşturmak kırılgan entegrasyon kodu yazmayı gerektirir. MCP ile araçları LLM'e verirsiniz. Ajan bir e-posta dizisini okuyabilir, takviminizi kontrol ederek zamanlama çakışmasını tespit edebilir ve Google Docs'ta kendi başına bir özet taslağı çıkarabilir.
Yapay zeka modellerine kurumsal e-postalara ve dosyalara erişim verdiğinizde, kurumsal veri güvenliği yapay zekanın benimsenmesi önündeki en büyük engeldir.
Workspace MCP Sunucusu bu kaygıyı gidermek için sıfırdan inşa edilmiştir.
Kimlik doğrulamayı tamamen OAuth 2.0'a ve sıkı Google Cloud IAM'e dayanarak gerçekleştirir.
Genel "anahtar" yoktur. Ajan yalnızca açıkça kimliği doğrulanmış kullanıcının adına hareket eder ve mevcut tüm Google Workspace paylaşım izinlerine ve belge ACL'lerine titizlikle uyar.
Ayrıca güçlü Yönetici kontrolleri sunar.
Workspace Yöneticileri belirli MCP araçlarını allowlist'e alabilir, kuruluş genelinde API kullanımını izleyebilir ve Veri Kaybını Önleme (DLP) kurallarını uygulayarak ajanların hassas Drive belgelerini veya e-postaları yetkisiz dış alanlara yanlışlıkla sızdırmamasını sağlayabilir.
Kod yazmadan önce, burada "yapılandırma" uzak sunucuya erişmek için Google Cloud izinlerini ayarlamak anlamına gelir.
Öncelikle, Google Cloud Projenizde hem standart Workspace API'lerini hem de özel MCP hizmetlerini etkinleştirmeniz gerekir.
Workspace verileri kullanıcıya özeldir, bu nedenle uzak MCP uç noktası, insan kullanıcıyı temsil eden Authorization: Bearer <TOKEN> üstbilgisini gerektirir.
APIs & Services > Credentials'a gidin ve bir OAuth 2.0 İstemci Kimliği (Masaüstü Uygulaması türü) oluşturun.
JSON kimlik bilgileri dosyasını indirin. Bu, bir tarayıcı oturum açma akışı aracılığıyla gerekli OAuth 2.0 erişim jetonunu almak için kullanılacaktır.

Create'e tıklayın ve İstemci Kimliği ile İstemci Sırrını kopyalayın. Bunlara bir sonraki adımda ihtiyacınız olacak.
Karmaşık bir Python ajan kodu yazmadan önce, kimlik bilgilerinizin doğrulanması ve uzak MCP uç noktalarına erişilebildiğinin teyidi için bir "Hello World" testi yapmanız şiddetle önerilir.
Bağlantıyı basitleştirilmiş bir ortamda test etmek, uygulama mantığınızdan kimlik doğrulama sorunlarını izole etmeye yardımcı olur.
Bağlantıyı hem Gemini CLI hem de Google Antigravity UI kullanarak test edebiliriz; ancak şimdilik Gemini CLI'ya odaklanacağız.
Bağlantıyı test etmenin en hızlı yolu Gemini CLI'ı kullanmaktır.
Workspace sıkı kimlik doğrulama gerektirdiği için uç noktayı ve OAuth kimlik bilgilerinizi ~/.gemini/settings.json dosyanızda yapılandırırsınız:
{
"mcpServers": {
"calendar": {
"httpUrl": "https://calendarmcp.googleapis.com/mcp/v1",
"oauth": {
"enabled": true,
"clientId": "<YOUR_CLIENT_ID>",
"clientSecret": "<YOUR_CLIENT_SECRET>",
"scopes": [
"https://www.googleapis.com/auth/calendar.calendarlist.readonly",
"https://www.googleapis.com/auth/calendar.events.freebusy",
"https://www.googleapis.com/auth/calendar.events.readonly"
]
}
},
"drive": {
"httpUrl": "https://drivemcp.googleapis.com/mcp/v1",
"oauth": {
"enabled": true,
"clientId": "<YOUR_CLIENT_ID>",
"clientSecret": "<YOUR_CLIENT_SECRET>",
"scopes": [
"https://www.googleapis.com/auth/drive.readonly",
"https://www.googleapis.com/auth/drive.file"
]
}
},
"gmail": {
"httpUrl": "https://gmailmcp.googleapis.com/mcp/v1",
"oauth": {
"enabled": true,
"clientId": "<YOUR_CLIENT_ID>",
"clientSecret": "<YOUR_CLIENT_SECRET>",
"scopes": [
"https://www.googleapis.com/auth/gmail.readonly",
"https://www.googleapis.com/auth/gmail.compose"
]
}
}
}
}
Ayarlar dosyanız güncellendikten sonra Gemini CLI'ı başlatabilir ve /mcp list komutunu çalıştırabilirsiniz.
Yeni yapılandırılmış Workspace sunucularınızın "Ready" olarak listelendiğini ancak "(OAuth not authenticated)" gösterdiğini göreceksiniz.
Bu, CLI'ın yapılandırmanızı başarıyla okuduğunu ve uzak araçlardan haberdar olduğunu doğrular.

Artık sunucular tanındığına göre, onları kullanmadan önce kimlik doğrulaması yapmanız gerekir. Gmail uç noktanız için kimlik doğrulama komutunu çalıştırarak başlayın:
/mcp auth gmail
Bu, tarayıcı tabanlı bir OAuth 2.0 akışını başlatacaktır.
CLI, varsayılan web tarayıcınızı otomatik olarak açmaya çalışacak, sizden Google Workspace hesabınızla oturum açmanızı ve istenen izinleri vermenizi isteyecektir.
Tarayıcınız otomatik olarak açılmazsa, CLI elle kopyalayıp yapıştırabileceğiniz güvenli bir URL sağlayacaktır. Oturum açma işlemini tamamladıktan sonra CLI başarılı kimlik doğrulamasını onaylayacak ve o sunucu için araçları yeniden yükleyecektir.
Kimlik doğrulaması tamamlandıktan sonra, doğal dilde bir istemle bağlantıyı test edebilirsiniz:
my email for any messages containing the word 'Invoice'.
CLI perde arkasında aracı çalıştıracak, gelen kutunuzdan verileri alacak ve ajan bunları faydalı bir yanıta dönüştürecektir:

Beş hizmete (Calendar, Chat, Drive, Gmail, People) bağlanan ve kimlik doğrulamayı güvenle yöneten bir Workspace Ajanı oluşturalım.
Ajan çalışmadan önce MCP uç noktalarına iletmek üzere bir OAuth jetonuna ihtiyaç duyar.
Gemini CLI bunu /mcp auth ile otomatik olarak halleder, ancak bir Python uygulaması için kendi jetonumuzu üretip Uygulama Varsayılan Kimlik Bilgileri (ADC) olarak kaydetmemiz gerekir.
Proje kök dizininizde auth.py adlı bir dosya oluşturun. İndirdiğiniz client_secret.json dosyanızın aynı dizinde olduğundan emin olun.
Bu betik, yetkili google-auth-oauthlib'i kullanarak bir kimlik doğrulama URL'si üretir, kodu bir yenileme jetonuyla değiş tokuş eder ve ADK'nın bulabileceği standart yol olan ~/.config/gcloud/application_default_credentials.json konumuna yazar.
import json
import os
from urllib.parse import urlparse, parse_qs
import google.auth
from google_auth_oauthlib.flow import InstalledAppFlow
CLIENT_SECRET_FILE = 'client_secret.json'
SCOPES = [
"https://www.googleapis.com/auth/cloud-platform",
"https://www.googleapis.com/auth/calendar",
"https://www.googleapis.com/auth/chat.spaces.readonly",
"https://www.googleapis.com/auth/chat.messages",
"https://www.googleapis.com/auth/drive.readonly",
"https://www.googleapis.com/auth/gmail.readonly",
"https://www.googleapis.com/auth/gmail.compose",
"https://www.googleapis.com/auth/directory.readonly",
"https://www.googleapis.com/auth/contacts.readonly"
]
# Initialize the flow
flow = InstalledAppFlow.from_client_secrets_file(
CLIENT_SECRET_FILE,
scopes=SCOPES,
redirect_uri='http://localhost:8085/'
)
# Generate Auth URL
auth_url, expected_state = flow.authorization_url(prompt='consent', access_type='offline')
print("Copy this link and paste it into your browser:\\n", auth_url)
redirected_url = input("\\nPaste the full localhost URL here: ").strip()
# Exchange code for tokens
parsed_url = urlparse(redirected_url)
code = parse_qs(parsed_url.query).get('code', [None])[0]
flow.fetch_token(code=code)
# Save ADC
adc_data = {
"client_id": flow.credentials.client_id,
"client_secret": flow.credentials.client_secret,
"refresh_token": flow.credentials.refresh_token,
"type": "authorized_user"
}
adc_path = os.path.expanduser("~/.config/gcloud/application_default_credentials.json")
os.makedirs(os.path.dirname(adc_path), exist_ok=True)
with open(adc_path, "w") as f:
json.dump(adc_data, f, indent=2)
print(f"Success! ADC saved to: {adc_path}")
Terminalinizde betiği çalıştırın: python3 auth.py
Bunu çalıştırdığınızda, manuel bir kimlik doğrulama akışını tamamlamanız gerekecektir:
Beti̇k, kodu bir OAuth jetonuyla değiş tokuş edecek, bunu ~/.config/gcloud/application_default_credentials.json konumuna kaydedecek ve workspace_agent dizininizde Google Cloud Projesi ayarlarınızı içeren bir .env dosyası oluşturacaktır.
Yerel ortamınız artık tamamen kimliği doğrulanmış durumda!
Şimdi agent.py adlı bir dosya oluşturun.
Workspace verileri son derece hassas olduğundan, MCP sunucuları yaptığımız erişim jetonunun her istekte HTTP üstbilgilerine eklenmesini zorunlu kılar.
Ayrıca ADK ortamını güvenli şekilde yapılandırmamız gerekir.
Kodu adım adım inceleyelim:
Önceki adımda oluşturduğumuz Kullanıcı Uygulama Varsayılan Kimlik Bilgilerini (ADC) yüklüyoruz.
Kurumsal ajanların kritik bir parçası, jetonları verimli şekilde önbelleğe almaktır. Her bir araç yürütmesinde jetonu yenilersek API limitlerine takılabilir veya yeniden denemeler sırasında sonsuz yenileme döngülerini tetikleyebiliriz.
TokenRelay sınıfı jetonu bellekte önbelleğe alır ve yalnızca süresinin dolmasına 5 dakikadan az kaldığında yeniler.
import os
import datetime
import google.auth
from google.auth.transport.requests import Request
from google.adk.agents.llm_agent import LlmAgent
from google.adk.tools.mcp_tool.mcp_toolset import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
# Enable graceful error handling so timeouts return as tool outputs
os.environ["ADK_ENABLE_MCP_GRACEFUL_ERROR_HANDLING"] = "1"
# Inject User ADC path globally
_adc_path = os.path.expanduser("~/.config/gcloud/application_default_credentials.json")
if not os.path.exists(_adc_path):
raise FileNotFoundError("Please run 'python3 auth.py' first to generate credentials.")
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = _adc_path
creds, _ = google.auth.default()
class TokenRelay:
"""Manages in-memory caching of Google OAuth access tokens."""
def __init__(self, credentials):
self._creds = credentials
self._cached_token = None
self._expiry = None
def get_token(self) -> str:
now = datetime.datetime.now()
if (self._cached_token is None or self._expiry is None
or now >= (self._expiry - datetime.timedelta(minutes=5))):
self._creds.refresh(Request())
self._cached_token = self._creds.token
self._expiry = now + datetime.timedelta(minutes=50)
return self._cached_token or ""
token_relay = TokenRelay(creds)
token_relay.get_token()
def auth_header_provider(tool_context=None) -> dict[str, str]:
return {"Authorization": f"Bearer {token_relay.get_token()}"}
Jeton önbelleğimiz hazır olduğuna göre, 5 MCP bağlantımızı yapılandırıyoruz. StreamableHTTPConnectionParams kullanarak Server-Sent Events (SSE) uç noktalarına bağlanıyoruz.
McpToolset'i güçlü kılan şey, uzak uç noktayı dinamik olarak sorgulamasıdır. Mevcut araçları ve JSON şemalarını otomatik olarak çeker. Herhangi birini sabit kodlamanıza gerek yok!
# Initialize the 5 GWS MCP servers with dynamic runtime provider
calendar_mcp = McpToolset(
connection_params=StreamableHTTPConnectionParams(url="https://calendarmcp.googleapis.com/mcp/v1"),
header_provider=auth_header_provider
)
chat_mcp = McpToolset(
connection_params=StreamableHTTPConnectionParams(url="https://chatmcp.googleapis.com/mcp/v1"),
header_provider=auth_header_provider
)
drive_mcp = McpToolset(
connection_params=StreamableHTTPConnectionParams(url="https://drivemcp.googleapis.com/mcp/v1"),
header_provider=auth_header_provider
)
gmail_mcp = McpToolset(
connection_params=StreamableHTTPConnectionParams(url="https://gmailmcp.googleapis.com/mcp/v1"),
header_provider=auth_header_provider
)
people_mcp = McpToolset(
connection_params=StreamableHTTPConnectionParams(url="https://people.googleapis.com/mcp/v1"),
header_provider=auth_header_provider
)
Son olarak LlmAgent'imizi oluşturuyoruz. gemini-2.5-flash modelini kullanıyor, sistem istemine güncel tarihi dinamik olarak ekleyerek LLM'in göreli zamanı ("bu hafta", "bugün") anlamasını sağlıyor ve 5 araç takımını iletiyoruz.
current_date = datetime.datetime.now().strftime("%Y-%m-%d")
root_agent = LlmAgent(
model="gemini-2.5-flash",
name='gws_adk_agent',
instruction=f"""You are a helpful assistant grounded in the user's Google Workspace data.
Today's current date is {current_date}. Always calculate relative dates (like 'this week' or 'upcoming meetings') using this reference.
Use the provided MCP tools to answer questions about their Calendar, Chat, Drive, Gmail, and Contacts.
If a tool returns an error indicating a timeout, inform the user that the service took too long to respond.""",
tools=[calendar_mcp, chat_mcp, drive_mcp, gmail_mcp, people_mcp]
)
Özel bir Python döngüsü yazmak yerine, bu ajanı yerleşik ADK Web arayüzünü kullanarak hemen test edip çalıştırabiliriz. Terminalinizden web sunucusunu başlatın:
adk web
Bu, yerel bir geliştirme sunucusu başlatır. Tarayıcınızda http://localhost:8080 adresine gidin.
Ajanınızın yüklendiğini ve hazır olduğunu göreceksiniz.
Bu arayüzden ajanla doğal olarak sohbet edebilir ve isteklerinizi yerine getirmek için Gmail, Calendar ve Drive arasında kusursuz şekilde geçiş yaptığını gözlemleyebilirsiniz!

Ajan artık çalıştığına göre, normalde üç farklı sekme açmanızı gerektirecek karmaşık, çapraz işlevli sorular sormayı deneyin.
Örneğin:
İstem 1: Yarına ait takvimimi kontrol et ve toplantılarımın konularını özetle. Bunlarla ilgili Drive'ımda alakalı belgeler var mı?

Kulis arkasında neler oluyor:
Özel API sarmalayıcıları ve entegrasyon mantığı yazmak yerine bir soru sordunuz ve LLM çok adımlı orkestrasyonu kendi başına çözdü.
İstem 2: Son 7 günde [E-postayı Girin] tarafından gönderilen tüm e-postaları bulun.

Kulis arkasında neler oluyor:
Tüm kurumsal verileriniz bir akıl yürütme motoruna bağlıyken olasılıklar sınırsızdır.
Yerel ortamınızda şu diğer istemleri de deneyin:
Google'ın Aracı Geliştirme Kitini standartlaştırılmış Workspace MCP sunucularıyla birleştirerek, yüz satırdan daha az kodla kurumsal düzeyde bir asistan oluşturdunuz.
Ancak bu sadece başlangıç.
Bu mimarinin geliştiriciler ve işletmeler için açtıkları şunlardır:
Google Workspace MCP Sunucusu, yapay zekayı kurumsal üretkenlik uygulamalarına bağlamak için gereken "yapıştırıcı kodu" ortadan kaldırır. Güvenli, tamamen yönetilen bir uzak uç nokta sağlayarak, geliştiricilerin kullanıcı izinlerine ve kurumsal güvenlik standartlarına kutudan çıktığı gibi saygı gösteren derinlemesine entegre ajan odaklı iş akışları oluşturmasını sağlar.
En İyi Uygulama Hatırlatması: Her zaman en az ayrıcalık ilkesini kullanın.
OAuth kapsamlarını yapay zeka ajanlarınıza atarken, ajan yalnızca verileri okumanız gerekiyorsa asla yazma erişimi vermeyin (ör. https://www.googleapis.com/auth/drive.file).
Öğrenme yolculuğunuza rehberli DataCamp kurslarımızla devam edin:
İnternette yazıyor ve içerik üretiyorum. Google Workspace için Google Developer Expert, NMIMS Bilgisayar Bilimleri mezunu ve otomasyon ile Üretken Yapay Zekâ alanında tutkulu bir yapıcıyım.
Öne Çıkan DataCamp Kursları
{count, plural, one {Kurs} other {Kurs}}
{count, plural, one {Kurs} other {Kurs}}
{count, plural, one {Kurs} other {Kurs}}
{count, plural, one {blog} other {blog}}
Dario Radečić
15 dk.

{count, plural, one {blog} other {blog}}
Abid Ali Awan
14 dk.
{count, plural, one {Eğitim} other {Eğitim}}
Adel Nehme
{count, plural, one {Eğitim} other {Eğitim}}
Kurtis Pykes
8 dk.