MCP ve API: AI Araçları İçin Hangisini Kullanmalı

Jakub Swistak
Yayımlandı Güncellendi 5 dk okuma
MCP ve HTTP entegrasyon kalıplarını gösteren mimari karşılaştırma diyagramı

Bir AI agent’ı harici araçlara ve API’lere bağlarken iki genel yaklaşım vardır: Model Context Protocol (MCP) kullanarak bir soyutlama katmanı oluşturmak veya bir API’yi doğrudan HTTP üzerinden çağırmak. İkisi de çalışır. Esneklik, karmaşıklık, performans ve taşınabilirlik açısından farklı ödünleşimler sunarlar.

Bu yazı, iki yaklaşımı somut kod örnekleri, gecikme analizi ve aralarında seçim yapmak için bir karar çerçevesiyle karşılaştırır.

İki yaklaşım

Doğrudan HTTP entegrasyonu

AI uygulaması (veya backend’i), standart HTTP istekleri kullanarak harici API’leri doğrudan çağırır. Geliştirici istekleri oluşturmak, kimlik doğrulamayı yönetmek, yanıtları ayrıştırmak ve sonuçları LLM’e geri beslemek için kod yazar.

┌──────┐     ┌────────┐                        ┌─────────────┐
│ User │────▶│ AI App │──── HTTP request ─────▶│ Weather API │
└──────┘     │        │◀─── JSON response ─────│             │
             │        │                        └─────────────┘
             │        │── result as context ──▶ LLM
             │        │◀── formatted answer ───
             └───┬────┘
                 │
                 ▼
           User gets answer

MCP entegrasyonu

AI uygulaması, harici API’yi sarmalayan bir MCP server’a bağlanır. Uygulama, mevcut araçları keşfetmek, onları adlarıyla çağırmak ve sonuçları almak için MCP protokolünü kullanır. MCP server, harici API’ye yapılan gerçek HTTP çağrılarını yönetir.

┌──────┐     ┌───────────────────┐              ┌────────────┐     ┌──────────┐
│ User │────▶│ AI App/MCP Client │── JSON-RPC ─▶│ MCP Server │────▶│ HTTP API │
└──────┘     │                   │◀─ JSON-RPC ──│            │◀────│          │
             │                   │              └────────────┘     └──────────┘
             │                   │── result as context ──▶ LLM
             │                   │◀── formatted answer ───
             └─────────┬─────────┘
                       │
                       ▼
                 User gets answer

Temel fark şudur: doğrudan HTTP’de API entegrasyon kodunun sahibi AI uygulamasıdır. MCP’de bu kodun sahibi MCP server’dır ve AI uygulaması yalnızca araçları adlarıyla çağırır.

Bu diyagramın MCP tarafını sunucuyu kendiniz oluşturmadan kullanabilirsiniz: Quickchat AI, her AI Agent için streamable-HTTP MCP server barındırır ve agent’ınızı MCP server’a dönüştürmek, AI uygulamasına tek bir URL yapıştırmaktan ibarettir.

Kod karşılaştırması

İki yaklaşımı pratik bir örnek üzerinden karşılaştıralım: bir GitHub kullanıcısının repository’lerini getirmek.

Doğrudan HTTP entegrasyonu

import httpx

async def get_user_repos(username: str, token: str) -> list[dict]:
    """Bir GitHub kullanıcısının repository'lerini getir."""
    async with httpx.AsyncClient() as client:
        response = await client.get(
            f"https://api.github.com/users/{username}/repos",
            headers={
                "Authorization": f"Bearer {token}",
                "Accept": "application/vnd.github.v3+json",
                "X-GitHub-Api-Version": "2022-11-28"
            },
            params={"sort": "updated", "per_page": 10}
        )
        response.raise_for_status()
        repos = response.json()
        return [
            {
                "name": r["name"],
                "description": r["description"],
                "stars": r["stargazers_count"],
                "language": r["language"],
                "url": r["html_url"]
            }
            for r in repos
        ]

Bunu bir LLM ile entegre etmek için ayrıca şunlara ihtiyacınız vardır:

  • LLM’in beklediği formatta bir araç tanımı (OpenAI function calling schema, Claude tool use schema vb.)
  • LLM’in araç çağrısını ayrıştıran, get_user_repos çağıran ve sonucu konuşmaya geri ekleyen kod
  • HTTP hataları, rate limit’ler ve kimlik doğrulama süresinin dolması için hata yönetimi

MCP server

from mcp.server.fastmcp import FastMCP
import httpx

mcp = FastMCP("github-server")

GITHUB_TOKEN = os.environ["GITHUB_TOKEN"]

@mcp.tool()
async def get_user_repos(username: str) -> str:
    """Bir GitHub kullanıcısı için en son güncellenen 10 repository'yi getir.

    Args:
        username: Aranacak GitHub kullanıcı adı
    """
    async with httpx.AsyncClient() as client:
        response = await client.get(
            f"https://api.github.com/users/{username}/repos",
            headers={
                "Authorization": f"Bearer {GITHUB_TOKEN}",
                "Accept": "application/vnd.github.v3+json",
                "X-GitHub-Api-Version": "2022-11-28"
            },
            params={"sort": "updated", "per_page": 10}
        )
        response.raise_for_status()
        repos = response.json()
        lines = []
        for r in repos:
            stars = r["stargazers_count"]
            lang = r["language"] or "unknown"
            lines.append(f"- {r['name']} ({lang}, {stars} stars): {r['description'] or 'No description'}")
        return "\n".join(lines)

if __name__ == "__main__":
    mcp.run(transport="stdio")

MCP sürümü API çağrısını, kimlik doğrulamayı ve yanıt biçimlendirmesini sunucunun içinde kapsüller. MCP uyumlu herhangi bir client, GitHub API hakkında hiçbir şey bilmeden bu aracı kullanabilir.

AI uygulaması açısından ne değişir

KonuDoğrudan HTTPMCP
Araç tanımıLLM’in yerel formatında yazılır (OpenAI schema vb.)MCP server’dan otomatik oluşturulur
Kimlik doğrulamaAI uygulaması tarafından yönetilirMCP server tarafından yönetilir
Yanıt ayrıştırmaAI uygulaması veriyi çıkarır ve biçimlendirirMCP server önceden biçimlendirilmiş sonuç döndürür
Hata yönetimiAI uygulaması HTTP hatalarını yönetirMCP server hataları yönetir, yapılandırılmış hata mesajları döndürür
Yeni araç eklemeAI uygulamasında yeni kod yazılırYeni bir MCP server’a bağlanılır (veya mevcut server’a araç eklenir)
LLM değiştirmeAraç tanımları yeni LLM formatı için yeniden yazılırDeğişiklik gerekmez

Performans karşılaştırması

MCP, AI uygulaması ile harici API arasına bir katman ekler. Bu katmanın bir maliyeti vardır.

Gecikme

stdio transport (yerel MCP server’lar) için ek yük asgari düzeydedir: başlangıçta process başlatma (tek seferlik, genellikle 100ms altında) ve mesaj başına process’ler arası iletişim (modern sistemlerde milisaniyenin altında). Pratikte toplam gecikmeyi harici API çağrısı belirler.

Remote MCP servers (Streamable HTTP veya SSE) için client ile MCP server arasında bir HTTP gidiş-dönüşü ve ayrıca MCP server’ın harici API’ye yaptığı HTTP gidiş-dönüşü eklenir. MCP server ve harici API aynı konumdaysa bu ek yük küçüktür (tek haneli milisaniyeler). Farklı bölgelerdeyseler bileşik etki oluşur. Ancak transport, kullanıcının hissettiği unsur nadiren olur: Notion’ın barındırdığı MCP server üzerinde bir yardım merkezi agent’ı oluştururken, 248 araç çağrısı ortalama 2.7 saniye sürdü. Bunun neredeyse tamamı aradaki sıçrama değil, Notion araması ve sayfaların render edilmesiydi.

KurulumYaklaşık ek gecikme
Yerel MCP server (stdio)Araç çağrısı başına < 1ms
Remote MCP server (API ile aynı bölge)Araç çağrısı başına 1-5ms
Remote MCP server (API’den farklı bölge)Araç çağrısı başına 10-50ms

LLM inference’ın 500ms-5s sürdüğü çoğu AI agent kullanım senaryosunda MCP ek yükü ihmal edilebilir düzeydedir.

Bağlantı yönetimi

Doğrudan HTTP: Uygulamanız her harici API’ye bağlantıları yönetir. Bu, her API için connection pool’ları, retry mantığını ve rate limiting’i yönetmek anlamına gelir.

MCP: Uygulamanız MCP server başına bir bağlantı yönetir. Harici API bağlantısını server yönetir. 3 MCP server’a dağılmış 10 aracınız varsa 10 yerine 3 bağlantı yönetirsiniz.

MCP ne zaman kullanılmalı

Birden çok araç entegrasyonu

AI uygulamanızın 5+ harici servise bağlanması gerekiyorsa MCP entegrasyon yükünü azaltır. Her servis için özel API client’ları yazıp sürdürmek yerine MCP server’lara bağlanırsınız (bunların birçoğu açık kaynak projeler olarak mevcuttur).

AI platformları arasında taşınabilirlik

Araçlarınız için MCP server’lar oluşturursanız, bu server’lar herhangi bir MCP client ile çalışır: Claude Desktop, Cursor, Windsurf, özel uygulamalar ve Quickchat AI gibi platformlar. Doğrudan HTTP’de her platformun formatı için araç tanımlarını yeniden uygulamanız gerekir.

Dinamik araç keşfi

MCP, tools/list aracılığıyla runtime’da araç keşfini destekler. Bir AI uygulaması bir server’a bağlanıp herhangi bir hardcoded yapılandırma olmadan hangi araçların mevcut olduğunu öğrenebilir. Bu, araçların sık değiştiği veya kullanıcı tarafından yapılandırılabildiği senaryolarda yararlıdır.

Sorumlulukların ayrılması

Farklı ekipler farklı araçların sahibiyse MCP temiz bir sınır sağlar. Salesforce entegrasyonunun sahibi olan ekip, Salesforce MCP server’ı oluşturur ve sürdürür. AI uygulama ekibi, Salesforce API’sini anlamaya gerek duymadan bu server’a bağlanır. Salesforce API güncellemeleri, AI uygulamasına dokunmadan MCP server’da yönetilir.

Doğrudan HTTP ne zaman kullanılmalı

Bir veya iki entegrasyon

AI agent’ınızın yalnızca bir API’yi çağırması gerekiyorsa (örneğin bir veritabanı sorgusu), MCP server çalıştırmanın ek yükü gereksizdir. Doğrudan HTTP çağrısı daha basittir ve daha az hareketli parça içerir.

Ayrıca isteği elle yazmanız gerekmez. Düz İngilizce API Action builder, belgelenmiş bir REST API’yi okur, method’u, URL’yi, parametreleri ve açıklamayı üretir, ardından etkinleştirmeden önce gerçek yanıtı test etmenizi sağlar.

İstekler üzerinde azami kontrol

MCP server’lar HTTP ayrıntılarını soyutlar. İstek oluşturma üzerinde hassas kontrole ihtiyacınız varsa (belirli header’lar, query parametreleri, istek imzalama veya standart dışı kimlik doğrulama), doğrudan HTTP size bu kontrolü bir soyutlama katmanıyla uğraşmadan verir.

Gecikmeye duyarlı işlemler

Her milisaniye önemliyse (örneğin araç çağrılarının sıkı zaman bütçeleri içinde tamamlanması gereken gerçek zamanlı voice agent’lar), MCP katmanını kaldırmak bir sıçramayı ortadan kaldırır.

AI dışı HTTP çağrıları

HTTP çağrısı bir AI agent tarafından tetiklenmiyorsa (örneğin veri senkronize eden bir backend cron job), MCP ilgisizdir. MCP özellikle AI ile araç iletişimi için tasarlanmıştır. Normal backend servisleri normal HTTP client’ları kullanmalıdır.

Hibrit yaklaşım

Birçok production sistemi ikisini de kullanır. Kalıp şöyledir:

  • Konuşmalar sırasında AI agent’ın çağırdığı araç entegrasyonları için MCP (CRM sorguları, ticket oluşturma, knowledge base sorguları)
  • Dahili backend işlemleri, webhook’lar ve sistemden sisteme iletişim için Doğrudan HTTP

Quickchat AI içeride bu şekilde çalışır. Platform hem HTTP Request Actions (parametre şablonlamalı doğrudan API çağrıları) hem de Remote MCP Actions (harici MCP server bağlantıları) destekler. Her entegrasyon için doğru yaklaşımı seçersiniz:

Entegrasyon türüÖnerilen yaklaşım
Bilinen parametrelerle basit API çağrısıHTTP Request Action
Birden çok ilişkili araç içeren karmaşık entegrasyonRemote MCP Action
Mevcut MCP server’ı olan üçüncü taraf servisRemote MCP Action
Özel kimlik doğrulamalı dahili APIHTTP Request Action
Kullanıcı tarafından yapılandırılabilen araçRemote MCP Action

Bunun pratikte nasıl çalıştığına ilişkin ayrıntılı bir karşılaştırma, OpenAI’nin GPT Actions yaklaşımı ile MCP arasındaki farklar dahil olmak üzere GPT Actions vs MCP yazısında bulunur.

Karar çerçevesi

Seçim yapmak için bu akış şemasını kullanın:

  1. Aracı AI agent mı çağırıyor? Hayırsa (bu bir backend işlemiyse), doğrudan HTTP kullanın.
  2. Kaç harici araca ihtiyacınız var? 1-2 ise doğrudan HTTP daha basittir. 3+ ise MCP’yi değerlendirin.
  3. Servis için hazır bir MCP server var mı? Varsa, bunu kullanmak geliştirme süresinden tasarruf sağlar.
  4. Entegrasyonun birden çok AI platformunda çalışması gerekiyor mu? Evetse, MCP taşınabilirlik sağlar.
  5. Gecikme kritik mi (araç çağrıları için 100ms altı bütçe)? Evetse, MCP ek yükünü benchmark edin ve buna göre karar verin.
  6. Farklı entegrasyonların sahibi farklı ekipler mi? Evetse, MCP’nin entegrasyon başına server modeli sahiplik sınırlarına yardımcı olur.

Pratikte, harici servislerle etkileşim kurması gereken bir AI agent oluşturuyorsanız MCP giderek varsayılan seçenek haline gelmektedir. Hazır server ekosistemi, çoğu zaman hiç server kodu yazmadan başlamanıza yetecek kadar büyüktür.

Ek okuma