Bloga geri dön
Yapay zeka hayatımıza girdiğinden beri her işimizi yavaş yavaş ona sorar olduk. Ders çalışırken konularımızı hiç bilmeyen birine anlatır gibi anlatmasını istedik, metinlerimizi düzelttirdik, bir şeyi internetten uzun uzun araştırmak yerine direkt yapay zeka araçlarına sorduk. Çoğu zaman da bizi tatmin eden cevaplar verdi. Aslında bu kadar etkileyici ve akıllı olan bu sistemlerin yapamadığı bir şey vardı. Tam anlamıyla gerçek dünyaya dokunamıyorlardı. Yani evet metinleri sizin için düzenliyordu ama şu e-postayı başkalarına gönder dediğinizde bunu yapamazdı ya da sizin için takviminize bakıp toplantı ayarlayamazdı. Uzun bir süre sadece kapalı kutulardı.
Aradan geçen kısa sürede bu eksiklik sessizce kapandı. Üstelik tek bir hamleyle değil, üst üste binen üç adımla: model önce okumayı, sonra karar vermeyi, en sonunda da iş yapmayı öğrendi. Bu yazının asıl konusu, bu evrimin son ve en önemli halkası olan MCP (Model Context Protocol). Ama MCP'nin neyi çözdüğünü gerçekten anlamak için, öncesindeki iki adıma kısaca bakmamız gerekiyor.
Birinci Adım: Modele Okumayı Öğretmek (RAG)
Modeller, verilerle eğitilen sistemlerdir. Bu verilerin içinde güncel ya da kişisel bilgilerimiz olmadığı için model, bize yalnızca eğitildiği veri setindeki bilgiler kadarını sunabiliyor.
İlk çözüm oldukça basitti: Modelin bilmediği bilgileri yeniden öğretmek yerine, cevap vermeden önce ilgili dokümanı önüne koymak. Bu yaklaşım RAG (Retrieval-Augmented Generation) olarak adlandırılır. Kullanıcının sorusuyla ilgili belgeler bulunur ve modele ek bağlam olarak sunulur. Böylece model, yalnızca eğitiminde öğrendiklerine değil, o an sağlanan güncel ve özel bilgilere dayanarak yanıt üretebilir. Ancak bu noktada modelin rolü hala bilgiye erişmek ve onu yorumlamakla sınırlıdır. Gerçek dünyadaki sistemlerle hala etkileşime geçemez veya herhangi bir işlemi kendi başına gerçekleştiremez.
İkinci Adım: Modele Karar Vermeyi Öğretmek (Agent)
Bir sonraki soru kendiliğinden geldi: peki ya modelden tek bir cevap değil, bir iş yapmasını istersek?
Gündelik hayatta basit görünen birçok işi aslında farkında olmadan bir dizi adımları takip ederek gerçekleştiririz. Örneğin bir toplantı planlarken önce kendi takvimimizi kontrol eder ardından katılacak kişilerin uygunluklarını değerlendirir ve herkes için uygun bir zaman belirleriz. Yani tek bir istek ama arka planda bir dizi karar ve işlemi içeriyor.
Agent dediğimiz modeller de bundan doğdu. Tek bir komutu doğrudan yanıtlamak yerine, hedefe ulaşmak için gerekli adımları planlayıp uygulamaya dönüştürüldüler. Agent, modeli tek seferlik bir cevap makinesi olmaktan çıkarıp, bir hedefe doğru kendi kendine adım atan bir sisteme dönüştürüyor. Ona bir amaç verirsiniz; o da "önce bunu yapayım, sonra çıkan sonuca göre devam edeyim" diyerek kendi planını oluşturur. Tıpkı bir insanın yeni bir görev karşısında bilgi toplaması, sonuçları değerlendirmesi ve sonraki adımlarını buna göre belirlemesi gibi düşünülebilir. Agent da bu düşünme, araç kullanma ve değerlendirme döngüsüyle ilerler. RAG yalnızca gerekli bilgiyi sunarken, agent bu bilgiyi kullanarak eyleme geçebilir.
Bir sonraki gelişmenin doğmasına neden olan sorun da aslında tam burada başlıyor. Evet, agent ne yapması gerektiğini planlayabiliyor ancak bunu yapabilmesi için örneğin bir takvime erişebilmesi gerekiyor. Karar verme aşaması tamam ama sırada dış dünyadaki araçlarla iletişim kurabilme sorunu var. İşte yazımızın asıl konusu olan MCP de tam bu noktada devreye giriyor.
Üçüncü Adım: Ortak Bir Dil Kurmak (MCP)
Agent'ın gerçek dünyadaki araçlara dokunması aslında mümkündü ama epey zahmetliydi. Her aracı tek tek özel kod yazarak bağlamak gerekiyordu: e-posta için bir entegrasyon, takvim için bambaşka bir tane, veritabanı için bir başkası. Üstelik kurduğunuz köprü size özeldi; başkası aynı aracı kullanmak istediğinde her şeyi sıfırdan yazıyordu. Buna "N çarpı M problemi" deniyor: N model ve M araç varsa N×M ayrı köprü kurmanız gerekiyor. Kısacası herkes durmadan tekerleği yeniden icat ediyordu.
MCP işte bu kaosa bir standart getirdi. Model Context Protocol, 2024 sonunda açık standart olarak duyurduğu ve kısa sürede geniş kabul gören bir protokol. Yaptığı şey basit aslında: modellerle araçlar arasında ortak bir dil tanımlamak. Elektrik prizini düşünün; hangi marka olursa olsun her cihaz aynı prize takılabiliyor, çünkü fiş standart. MCP de araçlar için o standart prizi tanımlıyor. Herkes bir kez bu standarda bağlanıyor, problem N+M'e iniyor.
Peki bu pratikte nasıl çalışıyor? MCP, istemci-sunucu mimarisine dayanıyor ve üç ana oyuncusu var:
İlk parça MCP sunucusudur. Bu sunucu, bir aracı ya da veri kaynağını dışarıya açar. Örneğin bir takvim sunucusu, “müsaitlik sorgula” ya da “etkinlik oluştur” gibi neler yapabildiğini standart bir biçimde belirtir.
İkinci parça MCP istemcisidir. Bu kısım modelin tarafında yer alır. Sunucuya hangi özelliklere sahip olduğunu sorar, modelin kullanmak istediği aracı çağırır ve çıkan sonucu tekrar modele iletir.
Üçüncü parça ise host uygulamadır. Bu, bizim kullandığımız asıl uygulamadır. Bir sohbet asistanı, bir kod editörü ya da yapay zeka destekli başka bir uygulama olabilir.
Bir MCP sunucusu modele temelde üç şey sunabilir: işlem yapmasını sağlayan tools, okuyabileceği resources ve sık kullanılan görevler için hazırlanmış prompts. Örneğin e-posta göndermek bir tool, bir dosyanın içeriği resource, belirli bir raporu özetleme şablonu ise prompt olabilir.
Buradaki önemli nokta şu: Model bu yetenekleri önceden bilmek zorunda değildir. MCP istemcisi sunucuya bağlandığında, sunucunun neler yapabildiğini o anda öğrenir. Sonra model, bu açıklamalara bakarak hangi aracı ne zaman kullanacağına karar verir.
Bu yüzden MCP klasik entegrasyonlardan biraz farklıdır. Burada araçlar yalnızca insanlara değil, modele de kendini anlatır. Model de bu açıklamaları okuyarak “bu iş için şu aracı kullanmalıyım” diyebilir.
Sonuçta MCP’nin pratik faydası oldukça nettir. Bir bağlantı bir kez yazılır ve farklı modeller ya da uygulamalar tarafından tekrar tekrar kullanılabilir. Yeni bir yetenek eklemek istediğinizde tüm sistemi baştan kurmanız gerekmez. İlgili MCP sunucusunu eklersiniz ve model artık o araca standart bir şekilde erişebilir.
Kısacası MCP, yapay zekanın yalnızca cevap veren bir sistem olmaktan çıkıp araçlarla çalışabilen bir yardımcıya dönüşmesinde önemli bir adım. RAG modele bilgiye erişmeyi, agent yapısı ne yapacağını planlamayı sağladı; MCP ise bu planların gerçek sistemlerle buluşmasının yolunu açtı. Bu yüzden MCP’yi sadece teknik bir protokol olarak değil, yapay zekanın gündelik işlerimize daha gerçek anlamda dahil olmasını sağlayan yeni bir köprü olarak görmek mümkün.
Yazı akıcı, priz benzetmesi çok yerinde. Birkaç notum var:
Kurgu, modele araç kullanmayı MCP'nin öğrettiği izlenimi bırakıyor. Oysa bunu yapan function calling; MCP yeni yetenek değil, standart bir bağlantı katmanı getiriyor. N×M kısmında zaten doğru anlatmışsınız, sadece giriş çelişiyor.
"Agent dediğimiz modeller" de takıldı: agent model değil, mimari.
Teknik zemin biraz boş. JSON-RPC 2.0 temeli ve initialize'daki yetenek pazarlığı, tek cümleyle bile metni somutlaştırır. Sampling, roots, elicitation da eksik.
En kritiği: güvenlik hiç yok. Tool poisoning, confused deputy, token passthrough ve onay mekanizması mutlaka girmeli.
İskelet sağlam, emeğinize sağlık.