Yapay Zeka manzarası, izole sohbet arayüzlerinden entegre ve bağlam-aware sistemlere hızla kayıyor. Bu evrimin kalbinde, uygulamaların Büyük Dil Modellerine (LLM) nasıl bağlam sunduğunu standartlaştırmak için tasarlanmış açık bir standart olan Model Bağlam Protokolü (MCP) yer alıyor. MCP istemcilerinin tüketilmesi giderek yaygınlaşırken, ekosistemin gerçek gücü sağlam ve yüksek performanslı MCP sunucuları oluşturmada yatmaktadır. Bu rehber, temel eğitimlerin ötesine geçerek mimari düşünceleri, araç tanımlarını ve kaynak yönetimini ele alarak bu sunucuları oluşturmaya yönelik teknik bir derinlemesine inceleme sunar.
Sunucu Mimarisi Anlamak
Bir satır kod yazmadan önce, MCP sunucusunun rolünü anlamak hayati önem taşır. Geleneksel REST veya GraphQL API'lerinin aksine, bir MCP sunucusu sadece veri sunmaz; yetenekler sunar. İstemciye iki temel ilkel sunar: Araçlar ve Kaynaklar.
Araçlar, LLM'nin çalıştırabileceği fonksiyonlardır; veritabanı sorgusu çalıştırmak veya e-posta göndermek gibi. Kaynaklar, bir yapılandırma dosyasını okumak veya canlı bir hisse senedi fiyatını çekmek gibi statik veya dinamik veri kaynaklarıdır. İyi mimarileştirilmiş bir MCP sunucusu, bu endişeleri sıkı bir şekilde ayırırken, genellikle stdio veya HTTP üzerinden JSON-RPC olan birleşik bir aktarım katmanı korur.
Araçları Hassasiyetle Tanımlama
LLM'nin araç kullanım doğruluğu, şemaları nasıl tanımladığınıza büyük ölçüde bağlıdır. TypeScript'te, resmi @modelcontextprotocol/sdk kullanılarak, tür güvenliği ve net açıklamalar sağlamak için Zod şema doğrulayıcısını kullanarak araçlar tanımlarsınız.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({
name: "my-awesome-server",
version: "1.0.0"
});
// Bir belge dizinini arama aracı tanımlayın
server.tool(
"search_docs",
"Teknik sorgular için dahili belgeleri arayın",
{
query: z.string().describe("Arama sorgu dizgesi"),
limit: z.number().default(5).describe("Döndürülecek maksimum sonuç sayısı")
},
async ({ query, limit }) => {
// Uygulama mantığı burada
const results = await myDocSearchEngine.search(query, limit);
return {
content: results.map(r => ({
type: "text",
text: JSON.stringify(r)
}))
};
}
);
description ve parametre description alanlarına verilen vurguya dikkat edin. Bunlar sadece dokümantasyon için değildir; LLM'nin aracınızı ne zaman ve nasıl çağıracağını belirlemek için kullandığı temel sinyallerdir. Buradaki belirsizlik, halüsinasyonla argümanlara veya aracı kullanmama reddine yol açar.
Kaynakları ve İstemleri Yönetme
Araçların ötesinde, MCP sunucuları kaynakları URI'lar aracılığıyla açığa çıkarabilir. Bu, istemcilerin verileri dinamik olarak talep etmesine olanak tanır. Örneğin, mevcut uygulama yapılandırmasını döndüren docs://config/latest adresinde bir kaynak açığa çıkarabilirsiniz.
Ayrıca MCP, kullanıcıların çağırabileceği önceden tanımlanmış talimat veya şablon dizileri olan İstemleri (Prompts) destekler. Bu, araçlardan farklıdır çünkü istemler kod çalıştırmak yerine kullanıcı veya LLM'nin okuması için metin oluşturur. İstemleri uygulamak, yapılandırılmış bir mesaj listesi döndüren bir istem işleyicisi kaydetmeyi gerektirir.
server.prompt(
"summarize_code",
"Sağlanan kod parçasının özlü bir özetini oluşturun",
{ filePath: z.string() },
async ({ filePath }) => {
const content = await fs.readFile(filePath, 'utf-8');
return {
messages: [
{
role: "user",
content: {
type: "text",
text: `Lütfen bu kodu özetleyin:\n\n${content}`
}
}
]
};
}
);
Üretim İçin En İyi Uygulamalar
- Hata Yönetimi: Araç mantığınızı her zaman try-catch bloklarıyla sarın. Ham yığın izleri yerine, LLM'nin anlayabileceği yapılandırılmış hata mesajları döndürün.
- Akış (Streaming): Uzun süren işlemler için akış yanıtları uygulayın. Bu, gerçek zamanlı geri bildirim sağlayarak kullanıcı deneyimini iyileştirir.
- Güvenlik: Dahili ağ adreslerini veya hassas kimlik bilgilerini kaynak olarak asla açığa çıkarmayın. Enjeksiyon saldırılarını önlemek için tüm girdileri Zod kullanarak titizlikle doğrulayın.
Sonuç
MCP sunucuları oluşturmak, yalnızca bir API'yi bir LLM'ye bağlamakla ilgili değildir; bu, modelin kullanımını en üst düzeyde çıkaracak şekilde veri ve mantığı yapılandırmakla ilgilidir. Net araç tanımlarına, sağlam hata yönetimine ve güvenli kaynak yönetimine odaklanarak, yalnızca işlevsel değil, aynı zamanda güvenilir ve ölçeklenebilir entegrasyonlar oluşturabilirsiniz. MCP ekosistemi olgunlaştıkça, bu ilkelere dayanarak yapay zeka destekli uygulamaların bir sonraki neslini güçlendiren daha sofistike sunucular görmeyi bekleyin.