
Model Context Protocol (MCP), yapay zeka modellerine harici araçlara, veri kaynaklarına ve servislere bağlanmak için evrensel bir yol sunan açık bir standarttır. Her model-araç kombinasyonu için özel entegrasyon kodu yazmak yerine tek bir MCP sunucusu yazarsın ve her uyumlu model onu kullanabilir. Anthropic, MCP'yi 2024 sonunda geliştirdi, Linux Foundation şu anda yönetiyor; OpenAI, Google ve ajantik yapay zeka ekosisteminin geri kalanı da benimsedi. İşte MCP hakkında anlamanız, kurmanız ve dağıtmanız gereken her şey.
MCP'ye Hızlı Bakış
6.000 kelimelik ayrıntılara dalmadan önce hızlı versiyonu istiyorsan, işte burada.
| Özellik | Detay |
|---|---|
| Tam Adı | Model Context Protocol (MCP) |
| Geliştiren | Anthropic (Kas 2024), şu anda Linux Foundation / AAIF tarafından yönetiliyor (Ara 2025) |
| Ne Yapar | Yapay zeka modellerini araçlara, verilere ve servislere bağlamak için evrensel standart |
| Çözdüğü Sorun | M x N özel entegrasyonları ortadan kaldırır -- yapay zeka için USB-C gibi |
| Temel Primitivler | Araçlar, Kaynaklar, Promptlar ve Örnekleme |
| Transport | stdio (yerel geliştirme), Streamable HTTP (üretim) |
| Kimlik Doğrulama | OAuth 2.1 (HTTP transport için gerekli) |
| SDK'lar | Python (FastMCP), TypeScript, Java, Kotlin, C# |
| Ekosistem Büyüklüğü | 10.000+ aktif sunucu (Linux Foundation'a göre, Ara 2025) |
| Büyük Benimseniciler | Claude, ChatGPT, Gemini, Cursor, VS Code Copilot, Windsurf |
| Spec Durumu | Açık standart, aktif olarak gelişiyor (2026 yol haritası devam ediyor) |
| En İyi Kullanım | Gerçek dünya araçları ve verileriyle etkileşime girmesi gereken yapay zeka ajanları |
Şimdi bunların her birini açalım; MCP'nin gerçekte ne olduğu ve onu zorunlu kılan sorunla başlayalım.
Model Context Protocol Nedir?
Model Context Protocol, yapay zeka modellerinin harici araçları ve verileri nasıl keşfedip bunlarla nasıl etkileşime girdiğini standartlaştıran, açık, JSON-RPC tabanlı bir protokoldür. Yapay zeka entegrasyonları için HTTP gibi düşün -- herhangi bir modelin ve herhangi bir aracın konuşabileceği ortak bir dil.
USB-C benzetmesini muhtemelen duymuşsundur ve belirli bir noktaya kadar kullanışlıdır: USB-C öncesinde her cihazın kendi kablosuna ihtiyacı vardı. MCP, yapay zeka için aynı şeyi yapıyor; ancak benzetme onu küçümsüyor. USB-C yalnızca veri ve güç taşır. MCP ise araç tanımlarını, veri erişim kalıplarını, yeniden kullanılabilir prompt şablonlarını taşır ve sunucuların modelden tamamlama istemesine bile olanak tanır. Bir kablo metaforunun önerdiğinden çok daha zengin bir protokoldür.
MCP'nin Çözdüğü M x N Problemi
MCP olmadan, M modeli N araçla bağlamak M x N özel entegrasyon gerektirir. Diyelim ki 5 LLM destekliyorsun (Claude, GPT-4, Gemini, Llama, Mistral) ve bunların 10 araca erişmesi gerekiyor (GitHub, Postgres, Slack, Jira vb.). Bu, her biri kendi kimlik doğrulama, hata işleme ve veri formatlama mantığına sahip 50 özel entegrasyon katmanı demektir.
MCP ile her model, MCP istemci protokolünü bir kez uygular ve her araç bir kez MCP sunucusu uygular. Artık 50 yerine 5 + 10 = 15 uygulama var. Yeni bir model eklendi mi? Tüm 10 araçla hemen çalışır. Yeni bir araç eklendi mi? 5 modelin tamamı onu kullanabilir.
MCP'nin Kısa Tarihi
Anthropic, Kasım 2024'te MCP'yi açık kaynak olarak yayınladı; Python ve TypeScript için SDK'larla birlikte Claude Desktop için konektörler de ekledi. Benimseme hızlı ilerledi. OpenAI, Mart 2025'te ChatGPT'ye MCP desteği ekledi. Google, Nisan 2025'te Gemini için takip etti. Aralık 2025'te Anthropic, MCP'yi Linux Foundation'ın yeni Agentic AI Foundation'ına (AAIF) bağışladı; Block ve OpenAI ile birlikte kuruldu, bu da MCP'yi endüstri genelinde yönetişime sahip satıcıdan bağımsız bir standart haline getirdi.
MCP'nin NE OLMADIĞI:
- Bir model ya da yapay zeka çerçevesi değildir (HTTP gibi bir protokoldür)
- LangChain veya LlamaIndex'in yerini almaz (bunlar orkestrasyon katmanlarıdır; MCP onların altında yer alır)
- Anthropic veya Claude ile sınırlı değildir (tasarım gereği modelden bağımsızdır)
- Function calling ile aynı şey değildir (karşılaştırma bölümünde daha fazla bilgi var)
MCP Nasıl Çalışır? Mimariye Derinlemesine Bakış
MCP'nin üç rolü vardır ve bunları birbirine karıştırmak en yaygın yeni başlayan hatasıdır. Farkı netleştirelim.
<!-- IMAGE: Host, client, server rollerini Claude Desktop, GitHub MCP Server, Postgres MCP Server gibi gerçek örneklerle gösteren MCP mimari diyagramı -->Host, İstemci ve Sunucu -- Fark Nedir?
| Bileşen | Rol | Örnekler | Ne Yapar |
|---|---|---|---|
| Host | Kullanıcının etkileşimde bulunduğu uygulama | Claude Desktop, Cursor, VS Code | Kullanıcı arayüzü sağlar, istemci örneklerini yönetir |
| İstemci | Host içindeki protokol işleyicisi | Host uygulamasına yerleşik | Bir MCP sunucusuyla 1:1 bağlantı kurar |
| Sunucu | Araçları ve verileri MCP üzerinden açığa çıkarır | GitHub sunucusu, Postgres sunucusu, Slack sunucusu | Harici API'leri/verileri MCP uyumlu uç noktalara sarar |
İşte somut bir örnek: Claude Desktop'tan açık GitHub pull request'lerini kontrol etmesini istiyorsun. Claude Desktop host'tur. Yerleşik MCP istemcisi, GitHub MCP sunucusuna bir bağlantı açar. Sunucu GitHub API'sini çağırır, PR'larını getirir ve sonuçları modele ileten istemciye geri gönderir.
Tek bir host, her biri farklı bir sunucuya bağlı birden fazla istemci çalıştırabilir. Claude Desktop'ın aynı anda GitHub'a, Postgres veritabanına ve Slack'e erişebilmesi böyle çalışır -- üç ayrı MCP sunucusu, üç ayrı istemci bağlantısı, bir host.
Mesajlar Nasıl Akar (JSON-RPC 2.0)
Tüm MCP iletişimi, JSON-RPC 2.0 kullanır -- hafif bir istek/yanıt protokolü. İşte tools/list değişiminin hat üzerinde nasıl göründüğü:
// İstemci isteği: "Hangi araçlara sahipsin?"
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}
// Sunucu yanıtı: bir araç mevcut
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"name": "get_weather",
"description": "Bir şehir için güncel hava durumunu al",
"inputSchema": {
"type": "object",
"properties": {
"city": { "type": "string" }
},
"required": ["city"]
}
}
]
}
}Model bu araç tanımlarını okur, kullanıcının isteğine göre ne zaman çağıracağına karar verir ve istemci, uygun argümanlarla sunucuya geri bir tools/call isteği gönderir.
Bağlantı Yaşam Döngüsü
Her MCP oturumu aynı yaşam döngüsünü izler:
- Başlatma -- istemci kapasitelerini gönderir, sunucu kendisininkiyle yanıt verir
- Kapasite müzakeresi -- her iki taraf desteklenen özelliklerde anlaşır (araçlar, kaynaklar, promptlar, örnekleme)
- Hazır -- bağlantı aktif; istekler her iki yönde de akar
- İstekler/yanıtlar --
tools/call,resources/readvb. - Kapatma -- temiz bağlantı kesme
Bu el sıkışma, ileriye dönük uyumluluğu sağlar. Bir sunucu yeni bir primitive eklerse, eski istemciler çökmek yerine onu zarif şekilde yok sayar.
MCP Primitifleri: Araçlar, Kaynaklar, Promptlar ve Örnekleme
MCP dört primitive tanımlar ve her birini kimin kontrol ettiğini anlamak, iyi MCP sunucuları tasarlamanın anahtarıdır.
| Primitive | Kim Kontrol Eder | Yön | Örnek | Kullanım Durumu |
|---|---|---|---|---|
| Araçlar | Model ne zaman çağıracağına karar verir | İstemci -> Sunucu | create_github_issue | Yapay zekanın özerk olarak gerçekleştirdiği eylemler |
| Kaynaklar | Uygulama/kullanıcı seçer | İstemci -> Sunucu | file://project/README.md | Bağlama eklenen veriler |
| Promptlar | Kullanıcı tetikler | İstemci -> Sunucu | code_review şablonu | Yeniden kullanılabilir etkileşim kalıpları |
| Örnekleme | Sunucu tamamlama ister | Sunucu -> İstemci | Sunucu modelden özetlemesini ister | Sunucunun LLM'yi kullandığı ajantik döngüler |
Araçlar (Model Kontrolündeki)
Araçlar, modelin çağırabileceği fonksiyonlardır. Sunucu bunları bir isim, açıklama ve JSON Schema giriş tanımıyla bildirir. Model bu tanımları okur ve bir kullanıcının isteği gerektirdiğinde aracı çağırmaya karar verir.
// İstemci tools/call isteği gönderir
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_weather",
"arguments": { "city": "İstanbul" }
}
}OpenAI function calling kullandıysan, araçlar tanıdık gelecektir -- ancak her MCP uyumlu model için standartlaştırılmıştır.
Kaynaklar (Uygulama Kontrolündeki)
Kaynaklar, salt okunur veri uç noktalarıdır. Araçların aksine, model bir kaynağı kendi başına getirmeye karar vermez -- host uygulaması veya kullanıcı, kaynakları konuşma bağlamına açıkça ekler. Bunları GET uç noktaları gibi düşün: postgres://mydb/users/schema, file://docs/api-reference.md.
Kaynaklar, resources/subscribe aracılığıyla abonelikleri destekler, böylece veriler değiştiğinde istemci bilgilendirilebilir.
Promptlar (Kullanıcı Kontrolündeki)
Promptlar, bir MCP sunucusunun açığa çıkardığı yeniden kullanılabilir şablonlardır. Bir code_review promptu bir dosya yolunu kabul edebilir ve yapılandırılmış bir inceleme isteği oluşturabilir. Kullanıcı (veya host kullanıcı arayüzü), promptları açıkça tetikler -- model tarafından otomatik olarak çağrılmazlar.
Örnekleme (Sunucu Başlatmalı) -- Gelişmiş
İşte çoğu rehberin atladığı primitive. Örnekleme, sunucunun istemciden LLM'yi kullanarak bir tamamlama oluşturmasını istemesine olanak tanır. Bu, olağan akışı tersine çevirir: modelin bir araç çağırması yerine, araç modeli çağırır.
Neden? Ajantik döngüler. Destek biletlerini işleyen bir MCP sunucusu hayal et. Bileti (bir kaynak) okur, modelden bir özet istemek için sampling/createMessage kullanır, ardından bu özeti bir araç aracılığıyla bileti yönlendirmek için kullanır. Sunucu, modelin zekasından yararlanarak çok adımlı bir iş akışını düzenler.
Örnekleme, host uygulaması tarafından kontrol edilir -- kullanıcının onaylaması gerekir ve host, sunucunun neyi isteyebileceğini kontrol eder. Bu, kontrolsüz döngüleri önler ve insan gözetimini korur.
İlk MCP Sunucunu Kur: Python ve TypeScript Yan Yana
Yeterince teori. Bir get_weather aracını açığa çıkaran çalışan bir MCP sunucusu kuralım. Geliştirici deneyimini karşılaştırabilmek ve projenize uyan yığını seçebilmek için hem Python hem TypeScript göstereceğim.
FastMCP ile Python
FastMCP, resmi üst düzey Python SDK'sıdır. Tüm protokol altyapısını yönetir, böylece araç mantığına odaklanabilirsin.
# FastMCP'yi yükle
pip install fastmcp# weather_server.py
from fastmcp import FastMCP
mcp = FastMCP("Hava Durumu Sunucusu")
@mcp.tool()
def get_weather(city: str) -> str:
"""Bir şehir için güncel hava durumunu al."""
# Üretimde buraya gerçek bir hava durumu API'si çağrısı ekle
weather_data = {
"İstanbul": "Bulutlu, 14°C",
"Tokyo": "Güneşli, 22°C",
"New York": "Yağmurlu, 8°C",
}
return weather_data.get(city, f"{city} için veri yok")
if __name__ == "__main__":
mcp.run()İşte bu kadar -- 15 satır. FastMCP, aracın giriş şemasını Python tür ipuçlarından ve docstring'den çıkarır. JSON Schema şablonu yok.
Resmi SDK ile TypeScript
TypeScript SDK'sı (@modelcontextprotocol/sdk) biraz daha açık, ancak şema tanımları üzerinde tam kontrol sağlar.
# SDK ve şema doğrulama için Zod'u yükle
npm install @modelcontextprotocol/sdk zod// weather-server.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "Hava Durumu Sunucusu",
version: "1.0.0",
});
server.tool(
"get_weather",
"Bir şehir için güncel hava durumunu al",
{ city: z.string() },
async ({ city }) => {
const weatherData: Record<string, string> = {
İstanbul: "Bulutlu, 14°C",
Tokyo: "Güneşli, 22°C",
"New York": "Yağmurlu, 8°C",
};
return {
content: [
{ type: "text", text: weatherData[city] ?? `${city} için veri yok` },
],
};
}
);
const transport = new StdioServerTransport();
await server.connect(transport);TypeScript versiyonu, tür ipuçları yerine Zod şemaları kullanır ve yapılandırılmış içerik blokları döndürür. Daha ayrıntılı, ancak tür güvenliği mükemmeldir.
Claude Desktop'a Bağlan
Her iki sunucuyu da Claude Desktop'a bağlamak için claude_desktop_config.json dosyana ekle:
{
"mcpServers": {
"weather-python": {
"command": "python",
"args": ["weather_server.py"],
"cwd": "/projenin/yolu"
},
"weather-typescript": {
"command": "npx",
"args": ["tsx", "weather-server.ts"],
"cwd": "/projenin/yolu"
}
}
}Claude Desktop'ı yeniden başlat; her iki hava durumu sunucusu da araç listesinde görünür. "İstanbul'da hava nasıl?" diye sor ve model get_weather aracını otomatik olarak çağırır.
MCP Inspector ile Test Et
Sunucunu bir host'a bağlamadan önce, MCP Inspector ile izole olarak test et:
npx @modelcontextprotocol/inspector python weather_server.pyInspector, keşfedilen araçları görebileceğin, bunları manuel olarak çağırabileceğin ve gidip gelen JSON-RPC mesajlarını inceleyebileceğin bir tarayıcı kullanıcı arayüzü açar. MCP ekosistemindeki en iyi hata ayıklama aracıdır -- erken ve sık kullan.
MCP Transportları: Geliştirme için stdio, Üretim için Streamable HTTP
MCP mesajlarının istemci ile sunucu arasında seyahat etmesi için bir yol gerekir. Bu, transport katmanıdır ve doğrusunu seçmek önemlidir.
| Transport | Kullanım Durumu | Avantajlar | Dezavantajlar | Durum |
|---|---|---|---|---|
| stdio | Yerel geliştirme, kişisel araçlar | Sıfır yapılandırma, basit, hızlı | Yalnızca aynı makine | Aktif |
| Streamable HTTP | Üretim, uzak sunucular, çok kullanıcılı | Ağ üzerinde çalışır, SSE aracılığıyla akışı destekler, durumsuz uyumlu | HTTP sunucusu gerektirir, kimlik doğrulama ister | Aktif (2025 spec) |
| HTTP+SSE (eski) | Eski uzak transport | Orijinal uzak seçenekti | Streamable HTTP ile değiştirildi | Kullanım dışı |
stdio, MCP sunucusunu bir alt süreç olarak başlatarak stdin/stdout üzerinden iletişim kurarak çalışır. Yukarıdaki eğitimde kullandığın şey bu -- port yok, TLS yok, kimlik doğrulama gerekmiyor. Geliştirme ve tek kullanıcılı yerel araçlar için mükemmel.
Streamable HTTP, 2025 spec güncellemesinde eklenen üretim transportudur. İstemciler sunucuya standart HTTP POST istekleri gönderir. Sunucu, daha uzun işlemler için eşzamanlı olarak veya bir SSE akışı açarak yanıt verebilir. Durumsuz uyumludur, yük dengeleyicilerin arkasında çalışır ve standart HTTP kimlik doğrulamasını destekler.
"HTTP+SSE"yi iki ayrı transport (biri göndermek için, biri almak için) olarak belirten eski eğitimler görürsen, bu kullanım dışı yaklaşımdır. Streamable HTTP, her ikisini tek, daha temiz bir mekanizmada birleştirir.
Karar basit: yerel geliştirme yaparken stdio kullan, başkaları için dağıtım yaparken streamable-http'e geç.
// TypeScript'te stdio'dan Streamable HTTP'ye geçiş
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
const transport = new StreamableHTTPServerTransport({ port: 3001 });
await server.connect(transport);MCP vs Function Calling vs REST API'leri -- Ne Zaman Ne Kullanılır
Bu, her MCP tartışmasında gündeme gelen sorudur; bu yüzden doğrudan bir karşılaştırmayla halledelim.
| Özellik | MCP | Function Calling | REST API'leri |
|---|---|---|---|
| Standartlaşma | Açık protokol, modelden bağımsız | Sağlayıcı başına (OpenAI, Anthropic'in her birinin kendine özgü) | Evrensel |
| Araç Keşfi | Yerleşik (tools/list) | Yok -- istek başına şemalar gönderirsin | Yok -- belge veya OpenAPI spec gerektirir |
| Veri Erişimi | Kaynaklar primitivi | Desteklenmiyor | Standart uç noktalar |
| Prompt Şablonları | Promptlar primitivi | Desteklenmiyor | Geçerli değil |
| Kimlik Doğrulama | OAuth 2.1 (spec düzeyi) | Sağlayıcı API anahtarı | Değişir (API anahtarları, OAuth vb.) |
| Akış | SSE aracılığıyla Streamable HTTP | Sağlayıcıya bağlı | Değişir |
| Çoklu Model | Her MCP uyumlu modelle çalışır | Bir sağlayıcının API'sine bağlı | Modelden bağımsız (yapıştırıcı kodla) |
| Sunucu Ekosistemi | 10.000+ önceden kurulmuş sunucu | N/A | Milyonlarca API |
| Kurulum Karmaşıklığı | Bir MCP sunucusu çalıştır | API çağrısında JSON gönder | HTTP istemcisi |
| En İyi Kullanım | Çoklu model, çoklu araç ajan ortamları | Birkaç araçlı basit tek model uygulamaları | Servis-servis iletişimi |
Function Calling Ne Zaman Yeterlidir
5'ten az araca sahipsen ve bir model kullanıyorsan, function calling daha basittir. Araç şemalarını her API çağrısıyla birlikte tanımlarsın, model fonksiyon adını ve argümanları döndürür ve bunları uygulama kodunda çalıştırırsın. Çalıştırılacak sunucu yok, öğrenilecek protokol yok. Sipariş durumunu kontrol eden ve SSS'leri arayan bir chatbot için function calling gayet uygundur.
MCP Ne Zaman Değer Kazanır
MCP, karmaşıklığını şu durumlarda hak eder:
- Birden fazla LLM destekliyor ve her sağlayıcı için araç tanımlarını yeniden yazmak istemiyorsan
- Araç keşfine ihtiyaç duyuyorsan -- model, şemaları sabit kodlamak yerine neyin mevcut olduğunu sorgulayabilir
- Yalnızca araç çağrıları değil, kaynaklar ve promptlar da istiyorsan
- Özerk olarak koordine eden yapay zeka ajanları kuruyorsan ve standartlaştırılmış bir entegrasyon katmanına ihtiyaç duyuyorsan
- Ekibin büyüyor ve farklı mühendisler farklı araçlar kuruyor -- MCP onların bağımsız çalışmasına izin verir
Karar: MCP, standartlaştırılmış, çok modelli araç erişimine ihtiyaç duyduğunda kazanır. Function calling, basit, tek model kullanım durumlarında kazanır. REST API'leri, LLM içermeyen geleneksel servis-servis iletişimi için doğru seçim olmaya devam eder.
2026'da MCP Ekosistemi: Kimler Destekliyor ve Neler Mevcut
MCP, 18 aydan kısa bir sürede Anthropic'in yan projesinden bir endüstri standardına dönüştü. İşte mevcut durum.
Hangi LLM'ler MCP'yi Destekliyor?
| LLM | MCP Desteği | Ne Zamandan Beri | Notlar |
|---|---|---|---|
| Claude | Yerel, tam destek | Kas 2024 | MCP'yi yarattı; en derin entegrasyon |
| ChatGPT | Resmi destek | Mar 2025 | OpenAI'nin MCP entegrasyonu aracılığıyla |
| Gemini | Resmi destek | Nis 2025 | Google hizmetleri için Google Cloud MCP sunucuları |
| Llama / Açık Kaynak | Adaptörler aracılığıyla | 2025 | LangChain, LlamaIndex ve özel adaptörler |
| Copilot (VS Code) | Ajan modunda yerel | 2025 | Microsoft, VS Code'da MCP desteği sunuyor |
Bilmeye Değer Popüler MCP Sunucuları
| Kategori | Sunucu | Ne Yapar |
|---|---|---|
| Kod | GitHub | PR'lar, sorunlar, depolar, kod arama |
| Kod | GitLab | Birleştirme istekleri, pipeline'lar, proje yönetimi |
| Veritabanı | PostgreSQL | Şema incelemesi, sorgu yürütme |
| Veritabanı | MySQL | Sorgu ve şema erişimi |
| SaaS | Slack | Kanal mesajları, arama, bildirimler |
| SaaS | Google Drive | Dosya erişimi, arama, belge okuma |
| SaaS | Notion | Sayfa okuma, veritabanı sorguları |
| Arama | Brave Search | Web arama sonuçları |
| DevOps | Docker | Konteyner yönetimi |
| Altyapı | AWS | Bulut kaynak yönetimi |
Linux Foundation AAIF duyurusu, Aralık 2025'teki MCP bağışı sırasında 10.000+ aktif sunucu ve 97 milyon aylık SDK indirmesi bildirdi. Ekosistem artık deneysel değil -- üretime hazır.
MCP Apps, Ocak 2026'da tanıtılan yeni bir primitive. Sunucuların, host uygulama içinde render edilen etkileşimli UI bileşenleri sağlamasına olanak tanıyor. Henüz erken aşamada, ancak MCP'nin bir veri protokolünden tam bir ajan uygulama çerçevesine evrimi ni işaret ediyor. İzlemeye değer.
Yönetişim: Anthropic'ten Linux Foundation'a
MCP, Anthropic, Block ve OpenAI tarafından kurulan Linux Foundation bünyesindeki Agentic AI Foundation (AAIF) tarafından yönetilmektedir. Bu, kurumsal benimseme için önemlidir: MCP, tek bir satıcının yol haritasına bağlı değildir. 2026 yol haritası, transport evrimi, ajan-ajan iletişimi (yeni bir "Görevler" primitivi), yönetişim olgunluğu ve kurumsal hazırlık önceliklerine odaklanmaktadır.
Üretim yapay zeka sistemleri kuran ekipler için OpenClaw gibi özerk bir yapay zeka ajan çerçevesi, ajanlara gerçek dünya yetenekleri vermek için zaten MCP sunucularıyla entegre oluyor.
MCP Güvenliği: OAuth 2.1, Tehditler ve Pratik Bir Kontrol Listesi
Güvenlik, MCP ekosisteminin en çok geliştirmesi gereken alandır. Ve rakamlar çarpıcı bir tablo ortaya koyuyor.
%88 Problemi: Neden Çoğu MCP Sunucusu Güvensiz
Astrix Security, 5.200'den fazla açık kaynaklı MCP sunucu uygulamasını analiz etti ve %88'inin bir tür kimlik bilgisi gerektirdiğini, ancak %53'ünün yapılandırma dosyalarında sabit kodlanmış API anahtarları ve kişisel erişim belirteçleri gibi güvensiz uzun ömürlü statik sırlara dayandığını buldu. Yalnızca %8,5'i OAuth uygulayayor.
Bu, vahşi doğadaki MCP sunucularının büyük çoğunluğunun ev anahtarını ön kapıya yapıştırmaya eşdeğer kimlik doğrulama kullandığı anlamına geliyor.
MCP Sunucuları için OAuth 2.1
MCP spec, Haziran 2025 güncellemesi itibarıyla tüm HTTP tabanlı sunucular için OAuth 2.1 gerektiriyor. Akış şöyle çalışır: MCP istemcisi sunucuyla bir OAuth 2.1 yetkilendirme akışı başlatır, kapsamı sınırlı bir erişim belirteci alır ve her sonraki istekle birlikte bunu ekler. PKCE (Proof Key for Code Exchange), tüm istemciler için zorunludur -- istisna yok.
Streamable HTTP üzerinden çalışan bir MCP sunucusu kuruyorsan, OAuth 2.1 isteğe bağlı değildir. Spec tarafından zorunlu tutulmuştur.
Tehdit Modeli: Neler Yanlış Gidebilir
Her MCP dağıtımında dört tehdit dikkat gerektirir:
- Araçlar aracılığıyla prompt enjeksiyonu -- Kötü niyetli veya ele geçirilmiş bir veri kaynağı, modeli manipüle etmek için tasarlanmış içerik döndürür. Bir araç bir web sayfası getirirse ve o sayfa gizli talimatlar içeriyorsa, model bunları çalıştırabilir.
- Kafası karışık vekil saldırısı -- Model, kullanıcının amaçladığından daha geniş izinlerle bir araç çağırır. MCP sunucusunun bir veritabanına yönetici erişimi varsa, model teorik olarak bir tabloyu silebilir.
- Token yoğunlaşma riski -- GitHub, Slack ve üretim veritabanın için API anahtarlarını tutan bir MCP sunucusu, tek bir yüksek değerli hedeftir. Bir sunucuyu ele geçir, bağlandığı her şeyi ele geçir.
- Güvensiz transport -- TLS olmadan bir HTTP MCP sunucusu çalıştırmak, OAuth belirteçleri ve hassas veriler dahil her isteği düz metin olarak açığa çıkarır.
Üretim MCP için Güvenlik Kontrol Listesi
- OAuth 2.1'i uygula HTTP üzerinden açığa çıkan her sunucu için. Yapılandırma dosyalarında statik API anahtarı olmayacak.
- En az ayrıcalık kapsamı uygula. Aracın yalnızca veri okuması gerekiyorsa, sunucunun kimlik bilgileri salt okunur olmalıdır. Bir raporlama aracına yazma erişimi verme.
- Kimlik bilgilerini izole et. Her MCP sunucusunun kendi kapsamlı belirteçleri olmalıdır. Sunucular arasında tek bir "tanrı belirteci" paylaşma.
- Her yerde TLS'yi zorunlu kıl. HTTPS olmadan Streamable HTTP, üretim için otomatik olarak uygun değil.
- Araç çıktılarını doğrula ve temizle. Araçlar tarafından döndürülen verilere kullanıcı girdisiyle aynı şekilde davran -- kör bir şekilde güvenme.
- Araç çağırma hızını sınırla. Bir aracı binlerce kez çağıran kontrolsüz bir ajan döngüsü, API kotalarını tüketebilir veya istenmeyen yan etkilere neden olabilir.
- Her araç çağrısını denetle ve kaydet. İstek kimliklerini, zaman damgalarını, çağıran modeli ve araç argümanlarını dahil et. Buna hata ayıklama ve güvenlik olayı müdahalesi için ihtiyacın olacak.
MCP Hata Ayıklama: Inspector, Günlükleme ve Yaygın Hatalar
Hatalarla karşılaşacaksın. Her geliştirici karşılaşır. İşte bunları hızla düzeltmenin yolu.
MCP Inspector, resmi hata ayıklama aracıdır ve ilk savunma hattındır. Herhangi bir MCP sunucusuna bağlanır, araçlarını/kaynaklarını/promptlarını keşfeder ve ham JSON-RPC trafiğini gösterirken bunları manuel olarak çağırmana izin verir.
# Inspector'ı Python sunucuna karşı başlat
npx @modelcontextprotocol/inspector python weather_server.py
# Ya da bir TypeScript sunucusuna karşı
npx @modelcontextprotocol/inspector npx tsx weather-server.tsInspector, Araçlar, Kaynaklar, Promptlar için sekmeler ve bir bildirim bölmesiyle tarayıcı tabanlı bir kullanıcı arayüzü açar. Herhangi bir aracı özel argümanlarla çağırabilir ve hat üzerinden tam olarak hangi JSON'ın geçtiğini görebilirsin. Bir host uygulamasına bağlanmadan önce kullan -- sunucuyu izole olarak hata ayıklamak çok daha kolaydır.
Yaygın Hatalar ve Düzeltmeleri
- Claude Desktop'ta "Sunucu bulunamadı" -- Neredeyse her zaman
claude_desktop_config.json'daki bir yol sorunudur.command'ın gerçek bir ikili dosyaya vecwd'nin doğru dizine işaret ettiğini kontrol et. macOS'ta mutlak yollar kullan. - Araç şema doğrulama hataları -- Model, aracın
inputSchema'sıyla eşleşmeyen argümanlar gönderirse, sunucu çağrıyı reddeder. Şema türlerinin modelin beklediğiyle eşleşip eşleşmediğini kontrol et. Zod (TypeScript) ve tür ipuçları (Python), bunların çoğunu tanım zamanında yakalar. - Transport bağlantı kopmaları --
stdioiçin bu genellikle sunucu sürecinin çöktüğü anlamına gelir. stderr çıktısını kontrol et. Streamable HTTP için zaman aşımı ayarlarını doğrula -- uzun süre çalışan araçlar varsayılan HTTP zaman aşımlarını aşabilir. - "İzin reddedildi" veya 401 hataları -- OAuth kapsamı çok dar. Sunucu, belirteci gerekli izinlere sahip olmadığı için reddediyor. Kapsamı genişlet, ancak yalnızca aracın gerçekten ihtiyaç duyduğu kadar.
Günlükleme En İyi Uygulamaları
Günlüklerini istek kimlikleriyle yapılandır, böylece tek bir kullanıcı isteğini MCP istemcisi, sunucu ve herhangi bir aşağı yönlü API üzerinden izleyebilirsin. Her tools/call çağrısını araç adı, argümanlar, yanıt süresi ve sonuç durumuyla kaydet. Üretimde, bu günlükleri bir gözlemlenebilirlik platformuna gönder -- sabah 3'te bir şeyler ters gittiğinde bunu yaptığına sevineceğin.
Techsy MCP ile Nasıl Kuruyor
2025'in başından beri müşteri projelerine MCP'yi entegre ediyoruz ve en sık gördüğümüz örüntü şu: bir ekibin bir model ve bir avuç araçla çalışan bir yapay zeka özelliği var, ancak ölçeklendirmeyi planlıyorlar -- daha fazla model, daha fazla veri kaynağı, daha fazla ajan kapasitesi. MCP'nin meyvelerini vermeye başladığı kırılma noktası bu.
Yaklaşımımız üç adımı izler:
- Uygunluğu değerlendir. Her proje MCP'ye ihtiyaç duymaz. Tek bir modelden iki araç çağırıyorsan, function calling daha basittir ve bunu sana söyleriz. MCP, 3 veya daha fazla veri kaynağını bağladığında, birden fazla modeli desteklediğinde veya araçların keşfedilebilir olması gereken ajan iş akışları kurduğunda mantıklıdır.
- Sunucuları izole olarak kur ve test et. Her veri kaynağı için -- dahili veritabanları, SaaS API'leri, tescilli hizmetler -- özel MCP sunucuları geliştiriyoruz ve herhangi bir host'a bağlanmadan önce MCP Inspector ile doğruluyoruz.
- Streamable HTTP ve OAuth 2.1 ile dağıt. Üretim için, MCP sunucularını TLS'nin arkasında kapsayıcılı hizmetler olarak, birinci günden itibaren kapsamlı OAuth belirteçleri ve yapılandırılmış günlüklemeyle çalıştırıyoruz. Statik sır yok.
Kurduğumuz en yaygın entegrasyonlar: yapay zeka asistanlarını dahili Postgres veritabanlarına bağlamak, müşteri SaaS platformları için özel MCP sunucuları kurmak ve ekipleri dağınık function calling kurulumlarından standartlaştırılmış bir MCP mimarisine geçirmek.
Altyapına bağlanması gereken yapay zeka destekli araçlar mı kuruyorsun? Ekiplerin MCP entegrasyonlarını tasarlamasına ve uygulamasına yardımcı oluyoruz. Ücretsiz danışmanlık al
MCP Hakkında Sık Sorulan Sorular
Model Context Protocol (MCP) nedir?
MCP, başlangıçta Anthropic tarafından oluşturulan ve şu anda Linux Foundation tarafından yönetilen açık bir standarttır; yapay zeka modellerinin harici araçlara, veri kaynaklarına ve hizmetlere nasıl bağlanacağını tanımlar. Bir MCP sunucusunun her uyumlu modelle çalışması için entegrasyon katmanını standartlaştırır -- yapay zeka için evrensel bir fiş gibi.
MCP nasıl çalışır?
MCP üç parçalı bir mimari kullanır: bir host uygulaması (Claude Desktop veya Cursor gibi), bağlantıları yöneten host içindeki bir MCP istemcisi ve araçları ve verileri açığa çıkaran MCP sunucuları. Tüm iletişim, stdio (yerel) veya Streamable HTTP (uzak) üzerinden JSON-RPC 2.0 mesajları kullanır.
MCP ne için kullanılır?
Yaygın kullanım durumları arasında yapay zeka asistanlarını veritabanlarına (Postgres, MySQL) bağlamak, kod platformlarıyla (GitHub, GitLab) entegrasyon sağlamak, SaaS araçlarına (Slack, Notion, Google Drive) erişmek ve gerçek dünya hizmetleriyle etkileşime girmesi gereken özerk yapay zeka ajanları kurmak yer alır.
MCP, function calling ile aynı şey midir?
Hayır. Function calling, modele özgüdür (OpenAI'nin formatı Anthropic'inkinden farklıdır) ve istek başınadır -- her API çağrısıyla araç şemaları gönderirsin. MCP, modeller arasında çalışan standartlaştırılmış bir protokoldür; araç keşfini destekler ve yalnızca fonksiyon yürütmenin ötesinde kaynaklar ve promptlar içerir.
MCP sunucuları nedir?
MCP sunucuları, MCP protokolü aracılığıyla yapay zeka modellerine araçlar, kaynaklar ve promptlar sağlayan programlardır. Harici API'leri ve veri kaynaklarını standartlaştırılmış bir arayüze sarar. Örnekler arasında GitHub MCP sunucusu (PR ve sorun yönetimi için) ve Postgres MCP sunucusu (veritabanı sorguları için) sayılabilir.
MCP sunucusu nasıl kurulur?
FastMCP ile Python (pip install fastmcp) veya resmi SDK ile TypeScript (npm install @modelcontextprotocol/sdk) kullan. Araçlarını dekoratif fonksiyonlar (Python) veya kayıtlı işleyiciler (TypeScript) olarak tanımla, ardından sunucuyu çalıştır. Tam çalışan kod için yukarıdaki eğitim bölümüne bak.
MCP güvenli midir?
Protokolün kendisi, kimlik doğrulama ve kapsamlı izinler için OAuth 2.1'i destekler. Ancak Astrix Security araştırması, mevcut MCP sunucu uygulamalarının %88'inin OAuth yerine statik sırlara dayandığını buldu. Protokol tasarım gereği güvenlidir, ancak gerçek dünya dağıtımlarının çoğu henüz yetişemedi.
Hangi LLM'ler MCP'yi destekliyor?
Claude, Kasım 2024'teki oluşturulmasından bu yana yerel MCP desteğine sahiptir. ChatGPT, Mart 2025'te destek ekledi ve Gemini Nisan 2025'te takip etti. Açık kaynaklı modeller, LangChain ve LlamaIndex'teki adaptörler aracılığıyla MCP kullanabilir.
MCP ile REST API arasındaki fark nedir?
REST API'leri, genel servis-servis iletişimi için tasarlanmıştır. MCP, yapay zeka modeli etkileşimi için özel olarak tasarlanmıştır -- REST'in sahip olmadığı araç keşfini, şema müzakeresini, kaynak erişimini ve prompt şablonlarını içerir. REST API'lerini MCP ile değiştirmezsin; farklı katmanlara hizmet ederler.
MCP'yi şu anda kim yönetiyor?
Aralık 2025'te kurulan Linux Foundation'ın Agentic AI Foundation'ı (AAIF), MCP'yi yönetiyor. Anthropic, Block ve OpenAI tarafından ortak kuruldu. Bu satıcıdan bağımsız yönetişim, işletmelerin MCP'yi benimsemesinin temel nedenlerinden biridir.
MCP'de Streamable HTTP nedir?
Streamable HTTP, 2025 MCP spec güncellemesinde eklenen üretim transport mekanizmasıdır. Daha eski HTTP+SSE transportunu daha temiz bir tasarımla değiştirir: istemciler HTTP POST istekleri gönderir ve sunucular eşzamanlı olarak veya SSE akışı aracılığıyla yanıt verebilir. Yük dengeleyicilerin arkasında çalışır ve standart HTTP kimlik doğrulamasını destekler.
Kaç MCP sunucusu var?
Linux Foundation, Aralık 2025'te MCP'nin AAIF'e bağışlandığı sırada 10.000'den fazla aktif sunucu ve 97 milyon aylık SDK indirmesi bildirdi. Ekosistem veritabanlarını, kod araçlarını, SaaS entegrasyonlarını, arama motorlarını ve bulut altyapı sağlayıcılarını kapsıyor.
Sonuç
MCP, Anthropic'in açık kaynak deneyinden yapay zeka modellerini araçlara bağlamak için endüstri standardı protokole bir yılı biraz geçen bir sürede dönüştü. İşte önemli olan:
- MCP, M x N problemini çözer -- bir sunucu her uyumlu modelle çalışır, bir istemci her sunucuyla çalışır
- Python (FastMCP) veya TypeScript'te 50 satırdan az kod ile çalışan bir MCP sunucusu kurabilirsin
- Geliştirme için stdio, üretim için Streamable HTTP kullan -- transport seçimi basittir
- Sunucularını OAuth 2.1 ile güvenli hale getir -- mevcut uygulamaların %88'i bunu yapmıyor ve bu gerçek bir risktir
- Ekosistem üretime hazır -- 10.000'den fazla sunucu, tüm büyük LLM'ler, Linux Foundation altında satıcıdan bağımsız yönetişim
İleriye bakıldığında, 2026 yol haritası yeni bir Görevler primitifi aracılığıyla ajan-ajan iletişimine, gelişmiş kurumsal güvenliğe ve etkileşimli sunucu güdümlü kullanıcı arayüzü için MCP Apps'a odaklanıyor. MCP artık yalnızca araç erişimi için bir protokol değil -- ajantik yapay zeka için altyapı katmanı haline geliyor.
Yukarıdaki eğitim koduyla başla, MCP Inspector'da test et ve Claude Desktop'a bağla. Bir saatten kısa sürede çalışan bir MCP entegrasyonuna sahip olacaksın.
Kaynaklar
- MCP Spesifikasyonu (2025-11-25)
- MCP Yetkilendirme Spesifikasyonu
- MCP Transport Spesifikasyonu
- MCP Inspector Belgeleri
- Model Context Protocol'ün Tanıtımı -- Anthropic
- MCP'yi Linux Foundation'a Bağışlamak -- Anthropic
- Linux Foundation AAIF Duyurusu
- Google Cloud MCP Desteği
- FastMCP Python SDK
- MCP TypeScript SDK
- Astrix Security: MCP Sunucu Güvenliğinin Durumu 2025
- MCP 2026 Yol Haritası