Üretimde MCP Sunucuları: Gerçek Dağıtımlardan Desenler
Model Context Protocol sunucuları, bir yapay zeka asistanına ihtiyaç duyduğu sistemlere yapılandırılmış erişim vermenin en pratik yollarından biri. Spesifikasyon küçük, yüzey temiz ve doğru yapıldığında getirisi önemli. Ancak başarısızlık biçimleri de spesifik. Vahşi doğada gördüğüm MCP sunucularının çoğu ya kapsamı aşırı genişletiyor, ya yetersiz belgeleniyor ya da kimlik doğrulamayı eninde sonunda sızdıracak bir biçimde ele alıyor. Aşağıdaki desenler, keskin kenarların nerede olduğunu bilecek kadarını kurup gözden geçirdikten sonra vardığım noktalar.
Taşıma (Transport) Bir Tasarım Kararıdır, Varsayılan Değil
Protokol birden çok taşıma türünü destekler, ama ekipler stdio'ya varsayılan olarak yönelir ve nadiren yeniden değerlendirir. Stdio, bir kullanıcının baştan sona sahip olduğu yalnızca yerel sunucular için harikadır. Birden çok kullanıcı, paylaşımlı barındırma ya da ağ sınırları devreye girdiği an yanlış seçimdir. Akış (streaming) içeren HTTP, sunucu barındırılıyor ve asistan başka yerdeyse mantıklıdır; SSE ise sunucunun, istemcinin yoklama (polling) yapmadan hemen görmesi gereken olaylar yaydığı durumda doğru cevaptır.
Seçtiğiniz taşıma, aşağı akıştaki her şeyi şekillendirir. Stdio güven varsayar. HTTP sizi kimlik doğrulama, hız sınırları ve bağlantı yaşam döngüsü hakkında düşünmeye zorlar. Taşımayı, dağıtım modeline uyacak şekilde seçin; tersine değil.
Araç Yüzeyini Bilinçli Olarak Kapsamlandırın
Bir MCP sunucusunun cazip ilk versiyonu, alttaki sistemin yapabildiği her şeyi açığa çıkarır. "İşte elli uç noktanın tamamı" kulağa faydalı gelir, sonra asistan bağlam penceresinin yarısını hangisini çağıracağına karar vermekle geçirir. Üretimde işe yarayan sunucular, gerçek iş akışlarına göre ayarlanmış daha küçük bir yüzey açar; her araç anlamlı bir iş birimi yapar.
Disiplin, her araç için şunu sormaktır: asistan, önce üç açıklayıcı soru sormadan bu aracı doğru kullanabilir mi? Araç, asistanın makul olarak bilemeyeceği on parametrenin doldurulmasını gerektiriyorsa, onu daha küçük adımlardan oluşan bir iş akışına bölün ya da sunucunun dahili olarak ayrıştırdığı daha üst seviye bir nesne kabul edin.
Hata Mesajları Protokolün Bir Parçasıdır
Bir araç başarısız olduğunda, asistan hata mesajını okur ve sonra ne yapacağına karar verir. Belirsiz hatalar belirsiz kurtarmalar üretir. Üretim seviyesinde bir MCP sunucusu; neyin yanlış gittiği ve çağıranın bu konuda ne yapabileceği konusunda spesifik hatalar döndürür. "Geçersiz girdi" bir çıkmaz sokaktır. "Eksik alan 'region'. Kabul edilen değerler: us-east-1, eu-west-1, ap-south-1" ise asistanın bir gidiş-dönüşe gerek kalmadan kurtulmasını sağlar.
Bu apaçık geliyor ama ilk taslaklar ile gerçek dağıtımlar arasında en büyük iyileşmeyi tutarlı biçimde gördüğüm yer burası. Sunucu yazarları sistemi iyi bildiğinden, kısa ve öz hatalar yazar. Asistan sistemi bilmediğinden, açık yönlendirmeye ihtiyaç duyar.
Kullanıcılarla Temas Edince Ayakta Kalan Kimlik Doğrulama
MCP sunucusu hassas bir şey okuyor ya da yazıyorsa, kimlik doğrulama (auth) daha birinci günden var olmalıdır. Yaygın hata, yapılandırmaya tek bir uzun ömürlü token gömüp kimsenin onu kopyalamayacağına güvenmektir. Daha temiz bir desen; kullanıcı başına kimlik bilgileri, sıkıca kapsamlandırılmış, bir takvime göre döndürülen (rotate) ve ihlallerin tespit edilebilmesi için çağrı noktalarında loglanan kimlik bilgileridir.
Sunucu, kullanıcıya ait bir API'nin önünde duruyorsa, kimlik doğrulamayı istemciden geçirin (pass-through). Onu sunucu tarafında toplayıp önbelleğe almayın. Kimlik bilgilerinin yaşadığı yer ne kadar azsa, sızabilecekleri yer de o kadar azdır.
Gözlemlenebilirlik İsteğe Bağlı Değildir
Üretimde yaşayan MCP sunucuları, başka herhangi bir servisle aynı gözlemlenebilirlik (observability) hikâyesine ihtiyaç duyar: yapılandırılmış loglar, çağrı başına zamanlama, hata oranı panoları ve durumu yeniden kurmadan başarısız çağrıları yeniden oynatmanın bir yolu. İstemcinin bir yapay zeka asistanı olması bunu değiştirmez. Aksine çıtayı yükseltir; çünkü çağıran size neyin yanlış gittiğini ancak kullanıcıya söyleyerek anlatabilir ve kullanıcı size faydalı ayrıntıları iletmeyecektir.
Basit bir kural tutuyorum: bir çağrı başarısız olursa ve neyin denendiğini yalnızca loglardan yeniden kuramıyorsam, gözlemlenebilirlik tamamlanmamış demektir.
Hız Sınırları ve Geri Basınç (Backpressure)
Asistanlar agresif çağıranlardır. Yeniden dener, paralelleştirir, bir yanıt belirsiz göründüğünde döngüye girer. Bu desene karşı kendini savunmayan bir sunucu, ilk gerçek kullanım gününde çöker. Araç sınırında basit, çağrı başına hız sınırları ve net yeniden-deneme (retry-after) ipuçları, zararın çoğunu önler.
Geri basınç, uzun süren araçlar için önemlidir. Bir araç normalde 30 saniye sürüyorsa, sunucu iptali ve ilerleme raporlamasını desteklemeli ve aynı çağırandan gelen sonsuz paralel çalıştırmayı kuyruğa almayı reddetmelidir.
Belgeler, Araç Açıklamalarında Yaşar
Asistan, araç açıklamalarınızı bir insanın bir kopya kâğıdını (cheat sheet) okuduğu gibi okur. Onları sonradan akla gelen bir şey değil, birincil belge olarak ele alın. İyi tarif edilmiş bir aracın tek bir işi, net bir girdi şeması (schema), satır içi bir iki örneği ve asistanın bir sonraki adımda başvurabileceği ilgili araçlara bir işaret vardır.
Zayıf açıklamalar, asistanların MCP sunucularını yanlış kullanmasının en yaygın tek nedenidir. Açıklamaları düzeltmek, genellikle alttaki davranışı değiştirmekten daha büyük bir kalite kolu olur.
MCP'yi Ne Zaman Kullanmayacağını Bil
Bir MCP sunucusu her zaman doğru cevap değildir. Toplu veri alımı (ingestion) için, asistandan tek seferlik bir HTTP çağrısı genellikle yeterlidir. Kullanıcının kendi betikleyebileceği yalnızca yerel yardımcılar için, bir shell sarmalayıcısı daha basittir. Bir MCP sunucusu için doğru an, asistanın birçok konuşma boyunca kullanacağı bir sisteme yapılandırılmış, kimliği doğrulanmış, tekrarlanabilir erişime ihtiyaç duyduğu andır.
Üretimde tuttuğum sunucular bu şekli paylaşır: dar kapsam, net kimlik doğrulama, gerçek gözlemlenebilirlik, öğreten açıklamalar. Geri kalan her şey ya hâlâ bir deney ya da çıkış yolunda.