spinny:~/writing $ less mcp-model-context-protocol-guide.md
12**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.34Lansmanı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.56## MCP Neden Var78MCP'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.910Bu 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ı.1112```mermaid13graph TD14 subgraph "Before MCP (N×M)"15 A1[AI App 1] --> T1[GitHub Integration]16 A1 --> T2[Slack Integration]17 A1 --> T3[DB Integration]18 A2[AI App 2] --> T4[GitHub Integration]19 A2 --> T5[Slack Integration]20 A2 --> T6[DB Integration]21 end22```2324MCP bunu, herhangi bir AI istemcisinin herhangi bir MCP sunucusuyla iletişim kurmak için kullanabileceği **tek bir protokol** ile çözer:2526```mermaid27graph TD28 subgraph "With MCP (N+M)"29 A1[AI App 1] --> MCP[MCP Protocol]30 A2[AI App 2] --> MCP31 MCP --> S1[GitHub Server]32 MCP --> S2[Slack Server]33 MCP --> S3[DB Server]34 end35```3637## Temel Kavramlar3839MCP'nin üç temel ilkesi vardır:4041### 1. Araçlar (Tools)42Araç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.4344```typescript45{46 name: "create_issue",47 description: "Create a new GitHub issue",48 inputSchema: {49 type: "object",50 properties: {51 title: { type: "string", description: "Issue title" },52 body: { type: "string", description: "Issue body" },53 repo: { type: "string", description: "Repository name" }54 },55 required: ["title", "repo"]56 }57}58```5960### 2. Kaynaklar (Resources)61Kaynaklar, 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.6263```typescript64{65 uri: "file:///Users/dev/project/README.md",66 name: "Project README",67 mimeType: "text/markdown"68}69```7071### 3. İstemler (Prompts)72İ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.7374```typescript75{76 name: "code_review",77 description: "Review code changes for quality and security",78 arguments: [79 { name: "diff", description: "The code diff to review", required: true }80 ]81}82```8384## Mimari8586MCP, istemci-sunucu mimarisini takip eder:8788```mermaid89graph LR90 subgraph "Host Application"91 Client[MCP Client]92 end9394 subgraph "MCP Server"95 Server[Server Process]96 Server --> Tools[Tools]97 Server --> Resources[Resources]98 Server --> Prompts[Prompts]99 end100101 Client -- "JSON-RPC 2.0\n(stdio or SSE)" --> Server102```103104- **Ana Bilgisayar**: AI uygulaması (Claude Desktop, Cursor, özel uygulamanız)105- **İstemci**: Bir MCP sunucusuyla 1:1 bağlantı sürdürür106- **Sunucu**: Araçları, kaynakları ve istemleri istemciye sunar107- **Aktarım**: İletişim, stdio (yerel) veya Server-Sent Events (uzak) üzerinden JSON-RPC 2.0 ile gerçekleşir108109## MCP Sunucusu Oluşturma110111JSON dosyasında saklanan bir yapılacaklar listesiyle etkileşim kuran pratik bir MCP sunucusu oluşturalım.112113### Kurulum114115```bash116mkdir mcp-todo-server && cd mcp-todo-server117npm init -y118npm install @modelcontextprotocol/sdk zod119```120121### Sunucu Uygulaması122123```typescript124// src/index.ts125import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";126import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";127import { z } from "zod";128import fs from "fs";129130const TODO_FILE = "./todos.json";131132function readTodos(): { id: number; text: string; done: boolean }[] {133 if (!fs.existsSync(TODO_FILE)) return [];134 return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8"));135}136137function writeTodos(todos: { id: number; text: string; done: boolean }[]) {138 fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2));139}140141const server = new McpServer({142 name: "todo-server",143 version: "1.0.0",144});145146// Tool: Add a todo147server.tool(148 "add_todo",149 "Add a new todo item",150 { text: z.string().describe("The todo text") },151 async ({ text }) => {152 const todos = readTodos();153 const newTodo = { id: Date.now(), text, done: false };154 todos.push(newTodo);155 writeTodos(todos);156 return { content: [{ type: "text", text: `Added: "${text}"` }] };157 }158);159160// Tool: List todos161server.tool(162 "list_todos",163 "List all todo items",164 {},165 async () => {166 const todos = readTodos();167 const list = todos168 .map((t) => `${t.done ? "✅" : "⬜"} [${t.id}] ${t.text}`)169 .join("\n");170 return { content: [{ type: "text", text: list || "No todos yet." }] };171 }172);173174// Tool: Complete a todo175server.tool(176 "complete_todo",177 "Mark a todo as completed",178 { id: z.number().describe("The todo ID to complete") },179 async ({ id }) => {180 const todos = readTodos();181 const todo = todos.find((t) => t.id === id);182 if (!todo) return { content: [{ type: "text", text: "Todo not found." }] };183 todo.done = true;184 writeTodos(todos);185 return { content: [{ type: "text", text: `Completed: "${todo.text}"` }] };186 }187);188189// Resource: Current todos as a readable resource190server.resource(191 "todos://list",192 "Current todo list",193 async () => ({194 contents: [{195 uri: "todos://list",196 mimeType: "application/json",197 text: JSON.stringify(readTodos(), null, 2),198 }],199 })200);201202// Start the server203const transport = new StdioServerTransport();204await server.connect(transport);205```206207### Yapılandırma208209Bu sunucuyu Claude Desktop ile kullanmak için yapılandırmanıza ekleyin:210211```json212{213 "mcpServers": {214 "todo": {215 "command": "npx",216 "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"]217 }218 }219}220```221222## MCP İstemcisi Oluşturma223224Herhangi bir MCP sunucusuna bağlanan özel bir istemci de oluşturabilirsiniz:225226```typescript227import { Client } from "@modelcontextprotocol/sdk/client/index.js";228import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";229230const transport = new StdioClientTransport({231 command: "npx",232 args: ["tsx", "./src/index.ts"],233});234235const client = new Client({ name: "my-client", version: "1.0.0" });236await client.connect(transport);237238// List available tools239const { tools } = await client.listTools();240console.log("Available tools:", tools.map((t) => t.name));241242// Call a tool243const result = await client.callTool({244 name: "add_todo",245 arguments: { text: "Write MCP blog post" },246});247console.log(result);248```249250## Popüler MCP Sunucuları251252MCP ekosistemi hızla büyümüştür. İşte en popüler sunuculardan bazıları:253254| Sunucu | Açıklama | Kullanım Alanı |255|--------|----------|----------------|256| **GitHub** | Issue, PR oluşturma, repo yönetimi | Geliştirme iş akışları |257| **Slack** | Mesaj gönderme, kanal yönetimi | Takım iletişimi |258| **PostgreSQL** | Veritabanı sorgulama ve yönetimi | Veri erişimi |259| **Filesystem** | Dosya okuma, yazma ve arama | Yerel geliştirme |260| **Puppeteer** | Tarayıcı otomasyonu ve kazıma | Web testi |261| **Sentry** | Hata izleme ve hata ayıklama | Üretim desteği |262| **Supabase** | Veritabanı, kimlik doğrulama, depolama | Backend işlemleri |263264## MCP vs A2A (Agent-to-Agent)265266MCP **ajan-araç** iletişimini yönetirken, Google'ın **A2A (Agent-to-Agent)** protokolü **ajan-ajan** iletişimini yönetir. Birbirlerini tamamlarlar:267268```mermaid269graph TD270 Agent1[Agent 1] -- "A2A Protocol" --> Agent2[Agent 2]271 Agent1 -- "MCP Protocol" --> Tool1[GitHub MCP Server]272 Agent2 -- "MCP Protocol" --> Tool2[Database MCP Server]273```274275- **MCP**: Bir AI ajanı araçları nasıl kullanır (dikey entegrasyon)276- **A2A**: AI ajanları birbirleriyle nasıl işbirliği yapar (yatay entegrasyon)277278## En İyi Uygulamalar2792801. **Sunucuları odaklı tutun**: Alan başına bir sunucu (GitHub sunucusu, Slack sunucusu vb.). Monolitik sunucular oluşturmayın.2812. **Girdileri Zod ile doğrulayın**: Araç girdilerini her zaman uygun şemalarla doğrulayın.2823. **Hataları zarif bir şekilde ele alın**: Yığın izleri yerine anlamlı hata mesajları döndürün.2834. **Salt okunur veriler için kaynakları kullanın**: AI yalnızca veri okumak zorundaysa, bunu araç yerine kaynak olarak sunun.2845. **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.2856. **MCP Inspector ile test edin**: Sunucunuzu etkileşimli olarak test etmek için `npx @modelcontextprotocol/inspector` kullanın.286287## Başlarken288289```bash290# Create a new MCP server from template291npx @modelcontextprotocol/create-server my-server292293# Test with the MCP Inspector294npx @modelcontextprotocol/inspector npx tsx ./src/index.ts295```296297## Sonuç298299MCP, 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.300301**Sonraki adımlar:**302- [MCP Spesifikasyonunu](https://spec.modelcontextprotocol.io/) keşfedin303- İlham için [mevcut MCP sunucularına](https://github.com/modelcontextprotocol/servers) göz atın304- TypeScript veya Python SDK ile ilk sunucunuzu oluşturun305- Claude Desktop veya MCP Inspector ile test edin306
:MCP (Model Context Protocol): Geliştiriciler İçin Eksiksiz Rehberlines 1-306 (END) — press q to close