Yazılım Mimarileri ve Tasarım Desenleri Üzerine

Model Context Protocol (MCP) Nedir? Derinlemesine Değerlendirelim…

Merhaba,

Bu içeriğimizde, yapay zeka modellerinin context’lerini yönetmek ve işlemek için tasarlanmış bir protokol olan Model Context Protocol (MCP)‘ü inceleyecek, önceki içeriklerimizde değerlendirdiğimiz Semantic Kernel‘la mukayesesini gerçekleştirecek ve pratik dokunuşlarla bu protokolü deneyimleyeceğiz. O halde fazla uzatmaksızın buyurun başlayalım…

Model Context Protocol (MCP) Nedir?

Model Context Protocol (MCP), bir AI modeliyle gerçekleştirilen görev ya da etkileşim sürecinde ihtiyaç duyulan bilgileri organize etmek, saklamak ve akıllıca kullanmak için kullanılan bir protokoldür. Bu protokol sayesinde, sohbet botları ya da dil modelleri gibi yapay zeka modellerinin bağlamı rahatlıkla yönetilebilmektedir.

Bağlamdan(Context) kastedilen nedir?
Bağlam(context), modelin karar vermesine yardımcı olan tüm geçici bilgileri ifade etmektedir. Misal olarak; sohbet geçmişi, kullanıcı tercihleri, işlem durumları ve bunlar gibi ekstradan harici veriler o an ki yapay zekayla olan iletişimin verisel havuzunu yani bir başka deyişle bağlamını oluşturmaktadır.

Bağlamı yönetmekten kastedilen nedir?
Bağlamı yönetmekten kastedilen ise bu bilgilerin verimli, tutarlı ve güvenli bir şekilde işlenmesini sağlamaktır. Biraz daha detaylandırmamız gerekirse eğer; AI modeliyle kullanıcı etkileşimi sırasında kredi kartı numarası, şifre vs. gibi gereksiz veya hassas bilgilerin cereyan etmesi söz konusu olabilir. İşte böyle bir durumda bağlama müdahale ederek filtreleme gerçekleştirebilir ve istenmeyen bilgileri ayıklayabilirsiniz. Benzer mantıkla, modelin belirli bir süre veya görev boyunca bazı bilgileri hatırlamasını isteyebilir ya da iletişim sürecindeki bilgileri JSON, XML vs. gibi AI modelinin anlayabileceği standartta bir formata dönüştürebilir ve verisel yapılandırmada bulunabilirsiniz. Tüm bunların dışında, uzun bağlamları sıkıştırarak modelin işlem sınırlarını aşmasını engelleyerek token limitini optimize edebilir ve işlenen bir bağlamı farklı modeller veya sistemler arasında taşınabilir hale getirebilirsiniz.

Bağlam yönetiminde MCP’nin rolü nedir?
MCP, farklı sistemlerin context’i aynı şekilde anlamasını sağlayıp standartlaştırarak bu süreçleri daha kontrol edilebilir hale getirmektedir. Haliyle yapay zeka açısından insan gibi akıllı davranması için gerekli olan geçici hafıza ve durum bilgisi gibi yetenekleri daha efektif bir şekilde organize etmemizi sağlayan bir klavuz görevi görmektedir.

MCP’nin Temel İşlevleri Nelerdir?

Yukarıdaki satırlardan yola çıkarak MCP’nin bağlam yönetimi, veri yapısı standardizasyonu, güvenlik/kontrol işlemleri ve çoklu model entegrasyonu olmak üzere dört temel işlevi olduğunu söyleyebiliriz;

MCP, henüz yaygın bir standart olmasa da, AI sistemlerinde bağlam yönetimini iyileştirmek için geliştirilen yenilikçi bir yaklaşımdır.

Semantic Kernel (SK) vs Model Context Protocol (MCP)

MCP deyince akla Semantic Kernel geliyor olabilir. Evet, her ikisi de yapay zeka sistemlerinde bağlam yönetimi ve işlemine yönelik araçlar olsa da esasında farklı amaç ve kapsamlar doğrultusunda geliştirilmiş yapılardır. Şimdi gelin her ikisinin mukayesesini yaparak ilerleyelim;

Semantic Kernel (SK) Model Context Protocol (MCP)
Microsoft tarafından geliştirilmiştir. .NET ekosistemine AI modellerini entegre etmek için kullanılan bir araç takımıdır. Bağlamın standardize edilmesi ve yönetilmesi için üretilmiş bir protokoldür.
İkisi de AI modelle olan iletişim sürecindeki bağlam yönetimiyle ilgilenir.
Çoklu model entegrasyonunu destekler.
Yapay zeka uygulamalarında tutarlılık ve verimlilik sağlamayı hedefler.
Amaç

Uygulama ve ürün odaklı yapay zeka desteğini amaç edinir.

Amaç

Yapay zekayla olan iletişim sürecindeki bağlamın kontrolünü amaç edinir.

AI tabanlı uygulama geliştirilirken kullanılır. Farklı AI modelleri arasında bir çalışma yapılacaksa bağlam paylaşımı, veri güvenliği ve standardizasyon amaçlı tercih edilebilir.
Özet

Bir yapı iskelesidir.
Developer odaklıdır.

Özet

İletişim protokolüdür.
Mimari bir standart sunar.

MCP, LLM’lerin üzerine agent’lar ve karmaşık iş akışları oluşturmamıza yardımcı olan bir protokoldür.

MCP Hangi Alanlarda ya da Gereksinimlerde Tercih Edilmelidir?

MCP, yapısı itibariyle bağlam yönetiminin kritik arz ettiği, standartlaştırılmış ve güvenli bir iletişim protokolüne ihtiyaç duyulan tüm senaryolarda tercih edilebilir. Bunu daha net bir şekilde ifade edebilmek için MCP’nin öne çıktığı kullanım alanlarını ve gereksinim durumlarını şöyle sıralayabiliriz;

Yani anlaşılan; yazılımlarda AI modellerinin kullanım süreçlerinde farklı modeller/sistemler arasında bağlam paylaşımı gerekiyorsa (modülerlik), veri sızıntısı riski yüksekse (güvenlik), bağlamın optimize edilmesi gereken düşük kaynaklı ortamlarda çalışılıyorsa (performans) ve distributed ekiplerin uyumlu çalışması için ortak bir protokol gerekiyorsa (standart ihtiyaçlar) işte bu şartlarda MCP’den istifade edilebilmektedir.

MCP’nin Genel Mimarisi Nasıldır?

Şimdi de MCP’nin genel mimarisini ele alalım. MCP özünde, bir ana uygulamanın(host application) birden fazla sunucuya(server) bağlanabildiği bir istemci-sunucu mimarisini(client-server architecture) takip etmektedir.Yukarıdaki görselden yola çıkarak MCP’nin çalışma mimarisini inceleyebilirsiniz. Buradaki aktörleri daha da netleştirmemiz gerekirse eğer;

şeklinde açıklayabiliriz.

Örnek Senaryo
MCP mimarisindeki bu terimleri, bir hastane otomasyon sistemi üzerinden somutlaştırırsak eğer şöyle bir senaryo üzerinden seyirde bulunabiliriz : Bir hastanede, herhangi bir hastanın yapay zeka asistanıyla (başka bir deyişle doktor botuyla) konuştuğunu varsayalım ve geçmiş tedavi bilgileri ve tahlil sonuçlarını konuşmanın bağlamında tutulması gereken veri olarak yorumlayalım.

Her şeyden önce bu hastanenin bağlamın işleneceği, depolanacağı ve yönetileceği bir veri merkezi olması gerekecektir. Bu MCP Host‘a karşılık gelen merkezi birim yani ana sunucudur. Bu sunucuda; hasta bilgileri şifrelenerek güvenlik kuralları uygulanacak ve bir yandan da eski tahlil verileri tutularak, özetlenecektir. Bunların dışında diğer bileşenler arasında trafiği de bu sunucu yönetecektir.

Hastanenin, hastalarla iletişim kuran yapay zeka asistanı (yani doktor botu) ise MCP Client olacaktır. Bu bir hasta mobil uygulaması olabileceği gibi herhangi bir laboratuvar AI görevi gören uygulamada olabilir. Bu client, host’tan bağlamı çekecek ve hastaya dair bilgi sürecini yürütecektir. Yani MCP Host‘a bağlanarak bağlamı kullanan uygulamalar ve yapay zekalar MCP Client olarak nitelendirilmektedir. Misal olarak; ‘hastanın alerjisi var mı?’ sorusunun cevabını host’tan elde ettiği bağlamdan edinecektir. Bir yandan da bağlama hastayla olan etkileşim neticesinde yeni veriler ekleyebilecektir. Buna da örnek vermemiz gerekirse eğer gerçekleştirilen muayene neticesinde yapılan teşhisin ‘Yüksek CPR’ olduğunu düşünürsek eğer bu veri host’ta ki bağlama eklenecektir.

Tabi bu süreçte, doktor botuna hastaya dair bilgileri sunabilmek için client ile hastanenin ara birimleri arasında bir köprü kurulması gerekecektir. İşte bunun için MCP Server olarak nitelendirdiğimiz hastanenin acil servis, laboratuvar gibi bölümlerindeki yerel sunucuları devreye girecektir. Bu server’lar üzerinde, laboratuvar sonuçları standart formata çevrilerek veri ön işlenmekte ve hastaya dair local’de ki ya da remote’da ki kaynaklara erişim gösterilip güncel veriler elde edilmektedir. Ayrıca acil servisteki yoğun istekler dengelenerek yük dağıtımı gibi ekstradan manevralar da yapılabilmektedir.

Nihai olarak; hastanın alerjileri, geçmiş ameliyatları, kronik rahatsızlıkları vs. gibi tüm tıbbi geçmişi ve kan tahlilleri, MR görüntüleri gibi de resmi laboratuvar sonuçları hastane veri merkezinde (host) tutulur. Ancak muayene sırasında alınan geçici notlar ise veri merkezinden ziyade o anki muayeneye yardımcı aracı olan Local Data Source‘da tutulur. Böylece, doktor botuyla hasta arasındaki anlık iletişimde hızlı cevabın üretilebilmesi için sürekli veri merkezine sorgu atmaktansa server’da ki local veri kaynakları kullanılır.

Diyagram Üzerinden MCP Mimarisini Özetleyelim

Yukarıdaki satırlara alternatif olarak MCP’nin teknik boyutunu aşağıdaki diyagram üzerinden de izah etmeye çalışalım.

MCP’nin teknik boyuttaki diyagramı…

Görüldüğü üzere MCP ile ilgili tüm kavramları bu diyagramda daha net bir şekilde ele almış bulunuyoruz. Detaylı bir şekilde incelemenizi tavsiye ediyorum.

Ayrıca MCP’nin akış mantığını da aşağıdaki diyagramdan inceleyebilirsiniz;

MCP’nin akış mantığı diyagramı…

MCP’yi Pratik Olarak İnceleyelim

Evet… Artık MCP’yi pratiksel olarak .NET ekosisteminde ele alabiliriz. Bunun için boş bir solution’da MCP.CLient ve MCP.Server isimlerinde iki adet proje oluşturalım ve aşağıdaki yönergeleri adım adım uygulayarak deneyimsel yolculuğumuza başlayalım.

İlk olarak MCP.Server projesine odaklanalım. Malum, bu projeyi MCP Server olarak tasarlarken bir yandan da içerisine belli başlı tool(araç) geliştirip ekliyor olacağız.

MCP Server uygulaması için yapacağımız geliştirmeler bunlardan ibarettir. Bu minvalde istediğiniz kadar farklı işlevselliklere/tool sahip MCP Server oluşturabilirsiniz.

Şimdi sıra MCP Client projesine odaklanmaya gelmiştir. Bunun için aşağıdaki yönergelere sırasıyla devam edelim;

Eee hoca! Peki bu çalışmada LLM nerede? diye sorduğunuzu duyar gibiyim… Elbette ki bizler, MCP Client’ta bir LLM çalışması yapacak ve bu client üzerinden LLM’e gönderilen prompt’ların içeriğine uygun olan tool’ları MCP Server’da tetikleyip, nihai cevabı LLM’den alıyor olacağız. Ama bu içeriğimizde baştan beri ortaya koymaya çalıştığımız husus, MCP’nin ilkeleri eşliğinde nasıl yapılandırıldığı olduğu için bu detayı hemen akabinde bir sonraki içeriğe bırakıyor olacağız.

Şimdi hazır sıcağı sıcağına test demişken, MCP Server’ları hızlıca test ve debug edebilmek için geliştirilmiş MCP Inspector aracını da inceleyelim istiyorum.

MCP Inspector Aracı İle MCP Server’ları Test Etme

MCP Inspector, yukarıdaki satırlarda bahsedildiği gibi MCP Server’ları test ve debug edebilmek için tasarlanmış etkileşimli bir test aracıdır. Bu araç ile geliştirilen MCP Server’lara istekler atılabilmekte, bu istekler neticesinde gelen yanıtlar değerlendirilebilmekte ve AI modeli ile MCP Server arasındaki etkileşim görselleştirilebilmektedir. Böylece bizler, bu araç sayesinde geliştirdiğimiz MCP Server’ları test edebilmek için illa bir MCP Client oluşturmak mecburiyetinde kalmamakta ve hızlıca test ve doğrulama işlemlerini gerçekleştirebilmekteyiz.

MCP Inspector’ı bilgisayara yükleyebilmek ve geliştirilen MCP Server’ı test edebilmek için MCP Server uygulamasının dizininde aşağıdaki talimatın verilmesi bu aracın yüklenip ayağa kaldırılması için yeterli olacaktır.

npx @modelcontextprotocol/inspector dotnet run

Evet, yukarıdaki ekran alıntısından da anlaşılacağı üzere belirtilen talimatı çalıştırdıktan sonra tarayıcı üzerinden 127.0.0.1:6274 adresine istekte bulunarak ilgili aracı açabiliriz.Aracı kullanabilmek için de yukarıdaki görselde olduğu gibi önce Connect butonuna tıklayarak bulunulan dizindeki MCP Server’a bağlanılmalı, ardından Tools kısmındaki List Tools butonuna tıklayarak MCP Server’da ki tüm tool’lar talep edilmelidir. Bu aşamadan sonra istenilen tool’u seçerek testi gerçekleştirebilirsiniz.

İşte bu kadar 🙂

Evet, artık MCP ile ilgili temellere vakıf olduğumuza göre son olarak geliştirdiğimiz bir MCP Server’ı, AI Code Editor olan Cursor IDE’sinde nasıl kullanabileceğimize değinerek içeriğimizi noktalayalım.

Geliştirdiğimiz MCP Server’ı Cursor IDE’sinde Kullanalım

Bunun için yukarıdaki görselde olduğu gibi Cursor’ın sağ üst köşedeki ayarlar iconuna tıklayarak MCP sekmesine gelinmeli ve Add new global MCP server butonu aracılığıyla oluşturulan MCP Server uygulamasının dizini görseldeki gibi bildirilmelidir. Tabi bildirimin nasıl yapılacağını daha rahat inceleyebilmeniz için görseldeki yapılandırmayı aşağıya almakta fayda görmekteyim;

{
    "mcpServers": {
        "MCPServer": {
            "command": "cmd",
            "args": [
                "/c",
                "C:\\*********\\Model_Context_Protocol_Example\\MCP.Server\\bin\\Debug\\net9.0\\MCP.Server.exe"
            ]
        }
    }
}

Bu yapılandırmadan sonra Cursor’a MCP Server eklenmekte ve aşağıdaki görselden de net görüleceği üzere bu server’ın tool’ları otomatik olarak algılanarak, listelenmektedir.
Şimdi bizler, bu tool’lara uygun sualleri LLM modeline gönderelim ve böylece nasıl tepkiler alınacağını ve sürecin MCP Server’larımıza yönlendirilip yönlendirilmeyeceğini hep beraber aşağıdaki görseller üzerinden inceleyelim…

Sum tool’unun testi…

Echo tool’unun testi…

Evet, görüldüğü üzere Cursor’da girilen prompt’un mahiyetine göre MCP Server’da ki tool’lar devreye girmekte ve beklenen işlevsellikler gösterilmektedir 🙂

Nihai olarak;
Anlayacağınız, MCP sayesinde çalışmalarımızda kullandığımız AI modelinin bilgilerini farklı yazılımlar üzerinde organize edebilmekte ve akıllıca kullanabilmekteyiz. Sonraki içeriklerimizde, bu protokol ile Semantic Kernel eşliğinde AI modelleriyle etkileşim sürecini ele alacak ve konuyu daha da sahadaki ihtiyaçlara odaklı bir konuma getirip değerlendiriyor olacağız. Dolayısıyla sizler bu makaleyi okurken, ben de bahse konu olan içeriklerin zeminini oluşturmaya gidiyor ve bir yandan da bu noktaya kadar okuyup eşlik ettiğiniz için teşekkür ediyorum 🙂

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Not : Örnek çalışmaya aşağıdaki GitHub adresinden erişebilirsiniz.
https://github.com/gncyyldz/Model_Context_Protocol_Example

Exit mobile version