Anthropic Model Context Protocol (MCP) Nedir? Yapay Zeka Ajanlarına Veri Bağlama Rehberi

Anthropic Model Context Protocol (MCP) Nedir? Yapay Zeka Ajanlarına Veri Bağlama Rehberi

Yapay zeka modelleri geliştikçe, karşılaştıkları en büyük engel modelin kendi parametrik bilgisi değil, dış dünyadaki güncel ve özel verilere nasıl eriştiğidir. Yıllardır büyük dil modellerini (LLM) veritabanlarına, geliştirme araçlarına veya kurumsal yazılımlara bağlamak için özel API entegrasyonları, RAG (Retrieval-Augmented Generation) mimarileri ve karmaşık ajan iş akışları kuruldu. Ancak her model ve veri kaynağı kombinasyonu için ayrı bir bağlayıcı yazmak, sürdürülemez bir karmaşıklık yarattı. İşte tam bu noktada Anthropic tarafından açık kaynaklı bir standart olarak duyurulan Model Context Protocol (MCP), yapay zeka ekosisteminin veri entegrasyonu standardı olarak öne çıkıyor.

Yapay zeka uygulamalarında devrim yaratan Model Context Protocol (MCP), LLM'ler ile dış veri kaynakları ve araçlar arasındaki iletişimi standart bir istemci-sunucu (Client-Server) mimarisine oturtan açık bir protokoldür. Bu yazıda, MCP'nin teknik mimarisini, çalışma prensiplerini, geleneksel yöntemlerle karşılaştırmasını ve adım adım kendi MCP sunucunuzu nasıl kurabileceğinizi en güncel standartlarla inceleyeceğiz.

Model Context Protocol (MCP) Nedir ve Nasıl Çalışır?

Model Context Protocol (MCP), tipik bir Tip-C (USB-C) bağlantı noktası gibi düşünülebilir. Nasıl ki USB-C standardı tek bir kablo üzerinden şarj, görüntü ve veri aktarımını her cihaz için uyumlu hale getirdiyse; MCP de yapay zeka modellerinin herhangi bir veri kaynağına veya araç sağlayıcısına tek bir standart üzerinden bağlanmasını sağlar.

MCP mimarisi temel olarak üç ana bileşenden oluşur:

  • MCP Client (İstemci): Yapay zeka uygulamasının çalıştığı ortamdır. Örneğin Claude Desktop uygulaması, özel bir IDE eklentisi veya yapay zeka ajanları çalıştıran bir orchestration katmanı istemci rolünü üstlenir.
  • MCP Server (Sunucu): Belirli bir veri kaynağını (PostgreSQL veritabanı, GitHub, Slack, yerel dosya sistemi) veya aracı dışa açan hafif bir servistir. İstemciden gelen talepleri karşılar ve veriyi standart formatta döndürür.
  • Transport Katmanı: İstemci ile sunucu arasındaki iletişimi sağlayan kanaldır. Yerel işlemler için stdio (standart girdi/çıktı) tercih edilirken, uzak bağlantılar için HTTP SSE (Server-Sent Events) kullanılır.
  • MCP alt yapısında veri alışverişi JSON-RPC 2.0 protokolü üzerinden yürütülür. Bu sayede dil bağımsız bir yapı elde edilir; sunucu Python veya TypeScript ile yazılmışken istemci tamamen farklı bir mimaride çalışabilir.

    MCP Protokolünün Üç Temel Primitive Yapısı

    Model Context Protocol, veri entegrasyonunu ve araç kullanımını üç ana soyutlama üzerinden yönetir:

  • Resources (Kaynaklar): İstemci tarafından okunabilen pasif verilerdir. Dosya içerikleri, veritabanı kayıtları veya uygulama logları birer kaynak örneğidir. URI düzeniyle (örneğin file:///logs/app.log veya postgres://users/123) tanımlanırlar.
  • Prompts (İstemler): Sunucu tarafından önceden hazırlanmış, parametre alabilen hazır yönlendirme şablonlarıdır. Kullanıcının karmaşık işlemleri tek bir komutla başlatmasını sağlar.
  • Tools (Araçlar): Modelin dış dünyada eylem gerçekleştirmesini sağlayan yürütülebilir fonksiyonlardır. Bir veritabanında sorgu çalıştırmak, e-posta göndermek veya GitHub üzerinde Issue açmak birer araç kullanımıdır.
  • Geleneksel RAG ve Fine-Tuning Yöntemlerinden Farkı Nedir?

    Yapay zeka modellerine özel veri sağlama noktasında yıllardır kullanılan en popüler iki yöntem fine-tuning (ince ayar) ve standart RAG mimarileridir. Ancak bu yöntemler belirli kısıtlamalara sahiptir:

  • Fine-Tuning: Modeli veriyle güncellemek maliyetlidir ve statiktir. Anlık değişen bakiye, stok bilgisi veya anlık sistem logları için uygun değildir.
  • Geleneksel RAG: Veriyi vektörleştirip arama yapar ancak yapay zekaya sistemi yönetme veya dinamik sorgulama yapma imkanı tanımaz. Ayrıca her veri kaynağı için ayrı bir retriever yazmak gerekir.
  • MCP Yaklaşımı: Modeli dinamik, çift yönlü ve güvenli bir şekilde veri kaynağına bağlar. Model sadece okuma yapmaz, yetkisi dahilinde işlem de yürütebilir. Farklı geliştiriciler tarafından yazılan yerleşik sunucular (PostgreSQL, Brave Search, Google Drive, GitHub) doğrudan tak-çalıştır şeklinde sisteme eklenebilir.
  • Açık kaynak dünyasında DeepSeek R1 gibi modellerin yaygınlaşmasıyla birlikte, yerel çalışan açık kodlu LLM'lerin kurumsal veritabanlarıyla güvenli şekilde konuşturulmasında MCP standart mimari haline gelmiştir.

    Adım Adım MCP Server Kurulumu ve Yapılandırması

    Bu bölümde TypeScript/Node.js kullanarak yerel bir SQLite veritabanından veri okuyan ve modelin kullanımına sunan basit bir MCP sunucusunun nasıl yazılacağını ve istemciye nasıl bağlanacağını inceleyeceğiz.

    1. Adım: Proje Kurulumu ve Bağımlılıkların Yüklenmesi

    İlk olarak projemizi oluşturup gerekli resmi @modelcontextprotocol/sdk paketini yüklüyoruz.

    mkdir mcp-sqlite-server
    cd mcp-sqlite-server
    npm init -y
    npm install @modelcontextprotocol/sdk sqlite3
    npm install --save-dev typescript @types/node @types/sqlite3 tsx
    

    2. Adım: MCP Sunucu Kodunun Yazılması

    src/index.ts adında bir dosya oluşturup aşağıdaki kodu ekleyelim. Bu kod, modelin sorgulayabileceği bir SQLite veritabanı aracı (Tool) tanımlar.

    import { Server } from "@modelcontextprotocol/sdk/server/index.js";
    import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
    import {
      CallToolRequestSchema,
      ListToolsRequestSchema,
    } from "@modelcontextprotocol/sdk/types.js";
    import sqlite3 from "sqlite3";
    
    const db = new sqlite3.Database(":memory:");
    
    // Örnek tablo ve veri oluşturma
    db.serialize(() => {
      db.run("CREATE TABLE users (id INT, name TEXT, email TEXT)");
      db.run("INSERT INTO users VALUES (1, 'Ahmet Yılmaz', 'ahmet@example.com')");
      db.run("INSERT INTO users VALUES (2, 'Ayşe Kaya', 'ayse@example.com')");
    });
    
    const server = new Server(
      {
        name: "sqlite-mcp-server",
        version: "1.0.0",
      },
      {
        capabilities: {
          tools: {},
        },
      }
    );
    
    // Mevcut araçları listeleme
    server.setRequestHandler(ListToolsRequestSchema, async () => {
      return {
        tools: [
          {
            name: "query_users",
            description: "Kullanıcılar tablosunda arama yapar ve sonuçları döndürür.",
            inputSchema: {
              type: "object",
              properties: {
                limit: { type: "number", description: "Getirilecek maksimum kayıt sayısı" },
              },
            },
          },
        ],
      };
    });
    
    // Aracı çalıştırma işleyicisi
    server.setRequestHandler(CallToolRequestSchema, async (request) => {
      if (request.params.name === "query_users") {
        const limit = (request.params.arguments?.limit as number) || 10;
        
        return new Promise((resolve) => {
          db.all("SELECT * FROM users LIMIT ?", [limit], (err, rows) => {
            if (err) {
              resolve({ content: [{ type: "text", text: `Hata: ${err.message}` }] });
            } else {
              resolve({
                content: [{ type: "text", text: JSON.stringify(rows, null, 2) }],
              });
            }
          });
        });
      }
      throw new Error("Araç bulunamadı");
    });
    
    async function main() {
      const transport = new StdioServerTransport();
      await server.connect(transport);
      console.error("SQLite MCP Sunucusu stdio üzerinden çalışıyor...");
    }
    
    main().catch((error) => {
      console.error("Sunucu hatası:", error);
      process.exit(1);
    });
    

    3. Adım: İstemci (Client) Yapılandırması

    Oluşturduğumuz MCP sunucusunu Claude Desktop veya destekleyen herhangi bir MCP istemcisine tanıtmak için istemcinin yapılandırma dosyasına (claude_desktop_config.json) sunucumuzu ekliyoruz:

    {
      "mcpServers": {
        "sqlite-db": {
          "command": "npx",
          "args": ["tsx", "/absolute/path/to/mcp-sqlite-server/src/index.ts"]
        }
      }
    }
    

    Yapılandırma kaydedilip istemci yeniden başlatıldığında, model otomatik olarak query_users aracını algılar. Kullanıcı "Veritabanındaki kullanıcıları listele" dediğinde LLM, MCP protokolü üzerinden sunucuya JSON-RPC isteği gönderir, dönen JSON verisini işleyip kullanıcıya anlamlı yanıt üretir.

    Kurumsal Kullanımda Güvenlik, Yetkilendirme ve Sık Yapılan Hatalar

    Model Context Protocol güçlü olanaklar sunsa da kurumsal mimarilere entegre edilirken güvenlik riskleri göz ardı edilmemelidir. Modelin sistem yetkileriyle hareket ettiği durumlarda yaşanabilecek aksaklıkları önlemek için dikkat edilmesi gereken kritik noktalar şunlardır:

    1. Aşırı Yetkilendirme (Over-privileging)

    En sık yapılan hata, MCP sunucusuna veritabanı üzerinde DROP, DELETE veya UPDATE gibi yıkıcı işlemleri yürütme yetkisi vermektir. MCP araçları tasarlanırken Principle of Least Privilege (En Az Yetki Prensibi) uygulanmalı; veri okuma sunucuları sadece READ-ONLY bağlantı dizileri kullanmalıdır.

    2. Prompt Injection (İstem Enjeksiyonu) Zararları

    Eğer bir MCP sunucusu dış dünyadan gelen (örneğin e-postalar veya web scraping verileri) içerikleri LLM'e besliyorsa, bu içeriklerin içine gizlenmiş kötü niyetli talimatlar modelin diğer MCP araçlarını tetiklemesine neden olabilir. Sunucu düzeyinde girdi doğrulaması (Input Validation) ve kritik araçlarda kullanıcı onayı (Human-in-the-loop) mekanizması şarttır.

    3. Bağlam Şişkinliği (Context Bloating)

    MCP üzerinden dönen devasa JSON çıktıları veya binlerce satırlık dosyalar, modelin bağlam penceresini (Context Window) doldurur. Bu durum hem maliyeti artırır hem de yanıt kalitesini düşürür. Sunucu tarafında mutlaka sayfalandırma (pagination) ve özetleme mekanizmaları kullanılmalıdır.

    MCP Kullanım Senaryoları ve Karar Kriterleri

    Hangi durumlarda MCP kullanmalı, hangi durumlarda geleneksel API veya RAG çözümlerine sadık kalmalısınız? Aşağıdaki karar kriterleri yol gösterici olacaktır:

  • MCP Kullanın: Birden fazla araç ve veri kaynağının tek bir yapay zeka ajanı tarafından dinamik olarak yönetilmesi gerekiyorsa, ekip genelinde tekrar kullanılabilir veri bağlayıcıları hedefleniyorsa ve yerel geliştirme ortamları güvenli şekilde LLM'e açılacaksa.
  • Geleneksel REST API/RAG Kullanın: Sadece tek bir statik doküman kümesinden arama yapılacaksa, yapay zeka modelinin herhangi bir eylem tetiklemesine gerek yoksa ve karmaşık orchestration gereksinimi bulunmuyorsa.

Sonuç

Model Context Protocol (MCP), yapay zeka geliştirme süreçlerinde parçalanmış veri entegrasyonu sorununa getirilen en kapsamlı standarttır. LLM'leri sadece metin üreten sistemler olmaktan çıkarıp, kurum içi verilere güvenle erişen ve iş akışlarını otomatikleştiren gerçek birer yapay zeka ajanına dönüştürür.

Projenizde MCP uygulamaya başlamak için ilk adım olarak resmi Anthropic MCP belgelerini inceleyebilir veya mevcut open-source sunucu kataloğundaki yerleşik PostgreSQL, FileSystem veya GitHub sunucularını yerel ortamınızda test edebilirsiniz.

Sıkça Sorulan Sorular

Model Context Protocol (MCP) sadece Anthropic Claude modellerinde mi çalışır?
Hayır. MCP açık kaynaklı bir protokoldür. Anthropic tarafından başlatılmış olsa da, protokol JSON-RPC 2.0 tabanlı olduğu için OpenAI, DeepSeek veya yerel Llama modelleri dahil tüm LLM istemcileriyle uyumlu çalışacak şekilde entegre edilebilir.
MCP ile RAG arasındaki temel fark nedir?
RAG yöntemi önceden vektörleştirilmiş veri tabanından bilgi çekip modelin bağlamına ekler. MCP ise standart bir istemci-sunucu protokolüdür; modelin veri okumasının yanı sıra dinamik sorgular çalıştırmasına, araç kullanmasına ve eylemler gerçekleştirmesine (çift yönlü etkileşim) olanak tanır.
MCP sunucuları güvenli midir?
Güvenlik, MCP sunucusunu nasıl yapılandırdığınıza bağlıdır. Sunucunuza en az yetki prensibiyle (Read-Only erişim gibi) yetki vermek ve kritik eylemlerde insan onayı (Human-in-the-loop) mekanizmaları kullanmak sistem güvenliği için esastır.
MCP istemci ve sunucuları hangi dillerde geliştirilebilir?
Resmi olarak TypeScript/Node.js ve Python SDK'ları geniş bir topluluk desteğiyle sunulmaktadır. Ayrıca protokol standart JSON-RPC kullandığı için Go, Rust, Java gibi herhangi bir dille de sunucu yazılabilir.
WxDigitals
WxDigitals

WebTeknoloji.net editör ekibi; web geliştirme, SEO, hosting ve yapay zeka alanlarında üretilen içeriklerin araştırma, test ve yayın süreçlerini yürütür. Tüm incelemeler gerçek kullanım deneyimine, karşılaştırmalar ise resmi dokümantasyon ve güncel fiyatlandırma sayfalarına dayanır.

Bu içeriği faydalı bulduysanız…

Haftalık teknoloji & SEO rehberlerimize katılın, 38 maddelik Teknik SEO Kontrol Listesi PDF'ini hediye olarak hemen indirin.

Yorumlar (0)

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Yorum Yazın