Model Bağlam Protokolü (MCP), Büyük Dil Modellerinin (LLM) dış araçlara ve veri kaynaklarına bağlanması için standart olarak hızla öne çıkmıştır. Geliştiriciler statik istemcilerden (prompting) dinamik, ajan tabanlı iş akışlarına geçtikçe, verimli MCP Sunucuları oluşturma yöntemlerini anlamak artık bir seçenek değil, zorunluluktur. Bir MCP Sunucusu, yapay zekanın akıl yürütme motoru ile gerçek dünya arasında bir köprü görevi görür; canlı veri getirmesini, kod çalıştırmasını veya yapılandırılmış ve güvenli bir şekilde özel API'lerle etkileşime girmesini sağlar.
MCP Sunucusu Nedir?
Temelinde, bir MCP Sunucusu, belirli yetenekleri (araçları) MCP İstemcilerine açan hafif bir uygulamadır. İstemci, genellikle bir LLM arayüzü veya yapay zeka ajanıdır, bu araçları keşfeder ve uygun olduğunda onları çağırır. Geleneksel REST API'lerinin insan okunabilir JSON yükleri için tasarlanmasının aksine, MCP, istek/yanıt döngülerini, abonelikleri ve hata yönetimini özellikle yapay zeka etkileşimi için optimize edilmiş standart bir JSON-RPC 2.0 protokolü kullanır.
MCP'nin temel değer önerisi bağlam farkındalığıdır. LLM'nin yalnızca bir işlevi çağırmakla kalmayıp, insan müdahalesi olmadan beklenen girdi şemasını ve alacağı çıktı formatını da anlamasını sağlar.
Mimari ve Protokol
MCP spesifikasyonu üç temel etkileşim türü tanımlar:
- Araçlar (Tools): Çalıştırılabilir işlevler (ör. "calculate_sum", "query_database").
- Kaynaklar (Resources): Salt-okunur veri kaynakları (ör. "get_file_contents", "fetch_news_headlines").
- İstemler (Prompts): İstemcinin çağırabileceği önceden tanımlanmış istem şablonları.
İletişim, stdio (standart giriş/çıkış) veya Sunucu Tarafından Gönderilen Olaylar (SSE) üzerinden gerçekleşir. Yerel geliştirme için stdio varsayılan ve en basit yaklaşımdır; bu da onu test ve masaüstü uygulamaları için ideal kılar.
Python ile İlk MCP Sunucunuzu Oluşturma
MCP Sunucularını herhangi bir dil kullanarak sıfırdan oluşturabilirsiniz, ancak fastmcp kütüphanesi akıcı bir geliştirici deneyimi sunar. Aşağıda, basit bir hesap makinesi aracı ve statik bir kaynak sunan pratik bir MCP Sunucusu örneği bulunmaktadır.
from fastmcp import FastMCP
mcp = FastMCP("Math Server")
@mcp.tool()
def add(a: float, b: float) -> float:
"""
Two numbers together.
Args:
a: The first number.
b: The second number.
Returns:
The sum of a and b.
"""
return a + b
@mcp.resource("config://server_settings")
def get_server_settings() -> dict:
"""
Returns the current configuration settings for the server.
"""
return {
"version": "1.0.0",
"environment": "production",
"features": ["addition", "subtraction"]
}
if __name__ == "__main__":
mcp.run(transport="stdio")
Bu örnekte, @mcp.tool() dekoratörü, LLM'nin çağırabileceği bir işlevi tanımlar. Docstring (belge dizeleri) burada kritiktir; MCP istemcileri, aracın *ne zaman* kullanılacağını belirlemek için bu açıklamaları kullanır. Benzer şekilde, @mcp.resource() dekoratörü verileri açar. URI şeması (config://), kaynağı istemci için sınıflandırmaya yardımcı olur.
Geliştirme İçin En İyi Uygulamalar
Üretim kalitesinde MCP Sunucuları oluştururken aşağıdakileri göz önünde bulundurun:
- Açık Araç Açıklamaları: LLM'ler dokümantasyona büyük ölçüde güvenir. Girdi türleri, kısıtlamalar ve beklenen çıktılar hakkında açık olun. Belirsizlikten kaçının.
- Durumsuzluk (Statelessness): İdeal olarak, MCP Sunucuları durumsuz olmalıdır. Durum gerektiriyorsa (ör. oturum yönetimi), bunu istemcinin çağrılar arasında bağlamı korumasına güvenerek değil, bir veritabanı veya önbellek aracılığıyla içsel olarak yönetin.
- Hata Yönetimi: Anlamlı hata mesajları döndürün. Bir araç başarısız olursa, LLM'nin stratejisini ayarlayabilmesi için (ör. farklı parametrelerle yeniden deneme veya farklı bir araç seçme) *neden* başarısız olduğunu bilmesi gerekir.
- Güvenlik: Hassas kimlik bilgilerini asla araç tanımlarında ifşa etmeyin. Ortam değişkenleri veya güvenli anahtar depoları kullanın. Özellikle araçlar veritabanları veya kabuk komutlarıyla etkileşime girdiğinde, enjeksiyon saldırılarını önlemek için tüm girdileri doğrulayın.
- Test: Sunucunuzu hata ayıklamak için MCP Inspector'ı (MCP GitHub deposunda mevcut) kullanın. Araçları listelemek, şemaları görüntülemek ve çağrıları manuel olarak test etmek için bir arayüz sağlar.
Dağıtım Düşünceleri
Yerel geliştirme için stdio üzerinden çalıştırma yeterlidir. Ancak uzaktan erişim için (ör. bulut tabanlı bir yapay zeka ajanından), sunucuyu HTTP/SSE üzerinden açmanız gerekir. fastmcp gibi kütüphaneler bunu kutudan çıktığı gibi destekler:
if __name__ == "__main__":
# For remote access
mcp.run(transport="sse", host="0.0.0.0", port=8000)
SSE uç noktalarının, yetkisiz erişimi önlemek için uygun CORS yapılandırması ve kimlik doğrulamasına (ör. API anahtarları, OAuth) ihtiyaç duyduğunu unutmayın. TLS sonlandırma ve hız sınırlama için her zaman bir ters vekil (Nginx veya Caddy gibi) arkasında dağıtın.
Sonuç
MCP Sunucuları, yapay zekayı kurumsal sistemlerle entegre etme biçimimizde bir paradigma değişikliğini temsil eder. Arayüzü standartlaştırarak MCP, LLM'leri yeni araçlara bağlamak için gereken şablon kodunu azaltır, daha hızlı yineleme ve daha sağlam ajan uygulamaları sağlar. Ekosistem olgunlaştıkça, akışkan araç çıktıları, çok adımlı iş akışları ve önemli yapay zeka sağlayıcılarıyla daha sıkı entegrasyon gibi daha gelişmiş özellikler görmeyi bekleyin. Tek bir araçla küçük başlayın, Inspector ile doğrulayın ve ihtiyaçlarınız büyüdükçe ölçeklendirin. Yapay zekanın geleceği bağlantılıdır ve MCP bunu mümkün kılan protokoldür.