Model Context Protocol (MCP), Anthropic tarafından oluşturulan ve AI modellerinin harici araçlar, veri kaynakları ve hizmetlerle nasıl iletişim kurduğunu tanımlayan açık bir standarttır. Bunu "AI'ın USB-C'si" olarak düşünün - herhangi bir AI ajanının standartlaştırılmış bir arayüz aracılığıyla herhangi bir araçla konuşmasını sağlayan evrensel bir konektör.
Lansmanından bu yana MCP, aylık 97 milyon SDK indirmesini aşmış ve tüm büyük AI sağlayıcıları tarafından benimsenmiştir: Anthropic, OpenAI, Google, Microsoft ve Amazon. Bu rehberde, MCP ile geliştirme yapmak için bilmeniz gereken her şeyi keşfedeceğiz.
MCP Neden Var
MCP'den önce, her AI uygulaması kullanmak istediği her araç için özel entegrasyonlar oluşturmak zorundaydı. AI'ınızın dosya okumasını mı istiyorsunuz? Özel kod yazın. Veritabanı sorgulamak mı? Daha fazla özel kod. Slack'e göndermek mi? Bir entegrasyon daha.
Bu bir N×M sorunu yarattı: N AI uygulamasının her biri M özel entegrasyona ihtiyaç duyuyordu, bu da tekrarlanan çabalara ve parçalanmış ekosistemlere yol açtı.
MCP bunu, herhangi bir AI istemcisinin herhangi bir MCP sunucusuyla iletişim kurmak için kullanabileceği tek bir protokol ile çözer:
Temel Kavramlar
MCP'nin üç temel ilkesi vardır:
1. Araçlar (Tools)
Araçlar, AI'ın çağırabileceği fonksiyonlardır. "Dosya oluştur", "veritabanı sorgula" veya "mesaj gönder" gibi eylemleri temsil ederler. Her aracın bir adı, açıklaması ve parametreleri için bir JSON Schema'sı vardır.
{ name: "create_issue", description: "Create a new GitHub issue", inputSchema: { type: "object", properties: { title: { type: "string", description: "Issue title" }, body: { type: "string", description: "Issue body" }, repo: { type: "string", description: "Repository name" } }, required: ["title", "repo"] } }
2. Kaynaklar (Resources)
Kaynaklar, AI'ın okuyabileceği verilerdir. Dosyaları, veritabanı kayıtlarını, API yanıtlarını veya diğer veri kaynaklarını temsil ederler. Kaynaklar URI'ler ile tanımlanır.
{ uri: "file:///Users/dev/project/README.md", name: "Project README", mimeType: "text/markdown" }
3. İstemler (Prompts)
İstemler, etkileşimleri yapılandırmaya yardımcı olan yeniden kullanılabilir şablonlardır. Dinamik parametreler içerebilir ve yaygın iş akışlarını standartlaştırmak için kullanışlıdır.
{ name: "code_review", description: "Review code changes for quality and security", arguments: [ { name: "diff", description: "The code diff to review", required: true } ] }
Mimari
MCP, istemci-sunucu mimarisini takip eder:
- Ana Bilgisayar: AI uygulaması (Claude Desktop, Cursor, özel uygulamanız)
- İstemci: Bir MCP sunucusuyla 1:1 bağlantı sürdürür
- Sunucu: Araçları, kaynakları ve istemleri istemciye sunar
- Aktarım: İletişim, stdio (yerel) veya Server-Sent Events (uzak) üzerinden JSON-RPC 2.0 ile gerçekleşir
MCP Sunucusu Oluşturma
JSON dosyasında saklanan bir yapılacaklar listesiyle etkileşim kuran pratik bir MCP sunucusu oluşturalım.
Kurulum
mkdir mcp-todo-server && cd mcp-todo-server npm init -y npm install @modelcontextprotocol/sdk zod
Sunucu Uygulaması
// src/index.ts import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import fs from "fs"; const TODO_FILE = "./todos.json"; function readTodos(): { id: number; text: string; done: boolean }[] { if (!fs.existsSync(TODO_FILE)) return []; return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8")); } function writeTodos(todos: { id: number; text: string; done: boolean }[]) { fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2)); } const server = new McpServer({ name: "todo-server", version: "1.0.0", }); // Tool: Add a todo server.tool( "add_todo", "Add a new todo item", { text: z.string().describe("The todo text") }, async ({ text }) => { const todos = readTodos(); const newTodo = { id: Date.now(), text, done: false }; todos.push(newTodo); writeTodos(todos); return { content: [{ type: "text", text: `Added: "${text}"` }] }; } ); // Tool: List todos server.tool( "list_todos", "List all todo items", {}, async () => { const todos = readTodos(); const list = todos .map((t) => `${t.done ? "✅" : "⬜"} [${t.id}] ${t.text}`) .join("\n"); return { content: [{ type: "text", text: list || "No todos yet." }] }; } ); // Tool: Complete a todo server.tool( "complete_todo", "Mark a todo as completed", { id: z.number().describe("The todo ID to complete") }, async ({ id }) => { const todos = readTodos(); const todo = todos.find((t) => t.id === id); if (!todo) return { content: [{ type: "text", text: "Todo not found." }] }; todo.done = true; writeTodos(todos); return { content: [{ type: "text", text: `Completed: "${todo.text}"` }] }; } ); // Resource: Current todos as a readable resource server.resource( "todos://list", "Current todo list", async () => ({ contents: [{ uri: "todos://list", mimeType: "application/json", text: JSON.stringify(readTodos(), null, 2), }], }) ); // Start the server const transport = new StdioServerTransport(); await server.connect(transport);
Yapılandırma
Bu sunucuyu Claude Desktop ile kullanmak için yapılandırmanıza ekleyin:
{ "mcpServers": { "todo": { "command": "npx", "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"] } } }
MCP İstemcisi Oluşturma
Herhangi bir MCP sunucusuna bağlanan özel bir istemci de oluşturabilirsiniz:
import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; const transport = new StdioClientTransport({ command: "npx", args: ["tsx", "./src/index.ts"], }); const client = new Client({ name: "my-client", version: "1.0.0" }); await client.connect(transport); // List available tools const { tools } = await client.listTools(); console.log("Available tools:", tools.map((t) => t.name)); // Call a tool const result = await client.callTool({ name: "add_todo", arguments: { text: "Write MCP blog post" }, }); console.log(result);
Popüler MCP Sunucuları
MCP ekosistemi hızla büyümüştür. İşte en popüler sunuculardan bazıları:
| Sunucu | Açıklama | Kullanım Alanı |
|---|---|---|
| GitHub | Issue, PR oluşturma, repo yönetimi | Geliştirme iş akışları |
| Slack | Mesaj gönderme, kanal yönetimi | Takım iletişimi |
| PostgreSQL | Veritabanı sorgulama ve yönetimi | Veri erişimi |
| Filesystem | Dosya okuma, yazma ve arama | Yerel geliştirme |
| Puppeteer | Tarayıcı otomasyonu ve kazıma | Web testi |
| Sentry | Hata izleme ve hata ayıklama | Üretim desteği |
| Supabase | Veritabanı, kimlik doğrulama, depolama | Backend işlemleri |
MCP vs A2A (Agent-to-Agent)
MCP ajan-araç iletişimini yönetirken, Google'ın A2A (Agent-to-Agent) protokolü ajan-ajan iletişimini yönetir. Birbirlerini tamamlarlar:
- MCP: Bir AI ajanı araçları nasıl kullanır (dikey entegrasyon)
- A2A: AI ajanları birbirleriyle nasıl işbirliği yapar (yatay entegrasyon)
En İyi Uygulamalar
- Sunucuları odaklı tutun: Alan başına bir sunucu (GitHub sunucusu, Slack sunucusu vb.). Monolitik sunucular oluşturmayın.
- Girdileri Zod ile doğrulayın: Araç girdilerini her zaman uygun şemalarla doğrulayın.
- Hataları zarif bir şekilde ele alın: Yığın izleri yerine anlamlı hata mesajları döndürün.
- Salt okunur veriler için kaynakları kullanın: AI yalnızca veri okumak zorundaysa, bunu araç yerine kaynak olarak sunun.
- Uygun açıklamalar ekleyin: İyi araç ve parametre açıklamaları, AI'ın her aracı ne zaman ve nasıl kullanacağını anlamasına yardımcı olur.
- MCP Inspector ile test edin: Sunucunuzu etkileşimli olarak test etmek için
npx @modelcontextprotocol/inspectorkullanın.
Başlarken
# Create a new MCP server from template npx @modelcontextprotocol/create-server my-server # Test with the MCP Inspector npx @modelcontextprotocol/inspector npx tsx ./src/index.ts
Sonuç
MCP, 2026'da AI araç kullanımı için fiili standart haline gelmiştir. İster özel AI ajanları oluşturuyor olun, ister Claude Code'u genişletiyor olun, ister mevcut platformlar için entegrasyonlar oluşturuyor olun, MCP'yi anlamak vazgeçilmezdir. Protokol bir öğleden sonrada öğrenilebilecek kadar basit ama üretim düzeyinde AI iş akışları oluşturmak için yeterince güçlüdür.
Sonraki adımlar:
- MCP Spesifikasyonunu keşfedin
- İlham için mevcut MCP sunucularına göz atın
- TypeScript veya Python SDK ile ilk sunucunuzu oluşturun
- Claude Desktop veya MCP Inspector ile test edin