Büyük dil modelleri (LLM) kod yazma sürecimizi tamamen değiştirdi ancak hala çok büyük bir kısıtlamaları var: Bilgisayarımızdaki yerel dosyalara, şirket içi veri tabanlarına veya anlık API'lerimize doğrudan erişemiyorlar. Cursor AI ya da Claude kullanırken sürekli kopyala-yapıştır yapmak veya yapay zeka modellerine bağlam (context) vermeye çalışmak bir süre sonra yorucu bir rutine dönüşüyor.
Anthropic tarafından açık kaynaklı bir standart olarak duyurulan Model Context Protocol (MCP), bu problemi kökten çözüyor. MCP, yapay zeka modelleri ile yerel veya uzak veri kaynaklarınız arasında güvenli ve standart bir köprü kurmanızı sağlar. Bu rehberde, yapay zekanın sadece kodu tahmin etmesini değil, bilgisayarınızdaki araçları bizzat çalıştırmasını sağlayacak özel bir MCP sunucusunu sıfırdan nasıl yazacağımızı ve bunu Cursor ile Claude Desktop'a nasıl bağlayacağımızı adım adım inceleyeceğiz.
MCP Mantığını Anlamak: Yapay Zekaya "Eklenti" Takmak
Teknik detaylara boğulmadan önce yapıyı netleştirelim. MCP, bilgisayarınıza bağladığınız bir USB sürücü gibidir. Yapay zeka modeline (istemci/client), sizin yazdığınız küçük bir uygulamayı (sunucu/server) bir protokol üzerinden okuma yetkisi verirsiniz.
Bu mimari üç ana bileşenden oluşur:
- MCP Host (Ana Bilgisayar): Cursor AI veya Claude Desktop gibi yapay zekayı çalıştırdığınız arayüz.
- MCP Client (İstemci): Protokolü başlatan ve model ile sunucu arasındaki trafiği yöneten katman.
- MCP Server (Sunucu): Sizin yazdığınız, yerel sistemde çalışan ve yapay zekaya veri sağlayan (veya komut çalıştıran) küçük program.
Biz bu rehberde, yerel bir klasördeki log dosyalarını okuyup analiz eden veya doğrudan yerel veri tabanımıza sorgu atıp sonuçları Claude'a raporlayan özel bir Node.js tabanlı MCP Server geliştireceğiz.
🛠️ Adım 1: Geliştirme Ortamının Hazırlanması
Kendi sunucumuzu yazmak için sisteminizde Node.js (v18 veya üzeri) kurulu olmalıdır. Terminalinizi açın ve boş bir klasör oluşturarak işe başlayın:
mkdir my-mcp-server
cd my-mcp-server
npm init -y
Ardından Anthropic'in resmi MCP SDK'sını projemize dahil ediyoruz. Bu SDK, protokolün gerektirdiği JSON-RPC mesajlaşma trafiğini bizim yerimize arka planda halledecek:
npm install @modelcontextprotocol/sdk
npm install typescript @types/node --save-dev
npx tsc --init
💻 Adım 2: Kendi MCP Server Kodumuzu Yazma
Projenin kök dizininde index.ts dosyası oluşturun. Amacımız, yapay zekanın yerel bilgisayarımızda çalıştırabileceği read_database_summary isimli özel bir araç (tool) tanımlamak.
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
// 1. Sunucumuzu başlatalım
const server = new Server(
{
name: "lokal-veri-analiz-araci",
version: "1.0.0",
},
{
capabilities: {
tools: {}, // Yapay zekaya araç sunacağımızı belirtiyoruz
},
}
);
// 2. Cursor veya Claude'a hangi araçlara sahip olduğumuzu bildirelim
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "get_local_system_status",
description: "Yerel sistemdeki log özetlerini ve veri tabanı durumunu getirir.",
inputSchema: {
type: "object",
properties: {
logPath: {
type: "string",
description: "Analiz edilecek log dosyasının tam yolu.",
},
},
required: ["logPath"],
},
},
],
};
});
// 3. Yapay zeka bu aracı tetiklediğinde çalışacak fonksiyon
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name !== "get_local_system_status") {
throw new Error("Böyle bir araç bulunamadı.");
}
const logPath = request.params.arguments?.logPath as string;
try {
// Burada uydurma veri yerine gerçek bir dosya okuma veya DB sorgusu yapılabilir
return {
content: [
{
type: "text",
text: `Başarıyla analiz edildi: ${logPath}. Sistemde 3 kritik hata ve 12 uyarı tespit edildi. Son çöken servis: Auth API.`,
},
],
};
} catch (error) {
return {
content: [{ type: "text", text: `Hata oluştu: ${(error as Error).message}` }],
isError: true,
};
}
});
// 4. Sunucuyu standart girdi/çıktı (stdio) üzerinden çalıştıralım
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("MCP Server stdio üzerinden başarıyla yayında!");
Kodu derlemek için terminalde npx tsc komutunu çalıştırın. dist/index.js dosyanız hazırsa, entegrasyona geçebiliriz.
⚙️ Adım 3: Cursor AI ve Claude Desktop Entegrasyonu
Yazdığımız bu aracı yapay zekaya tanıtmak için config dosyalarını düzenlememiz gerekiyor. MCP sunucuları arka planda stdio (standart girdi/çıktı) mantığıyla çalıştığı için terminal komutu gibi tetiklenirler.
Claude Desktop İçin Yapılandırma
Mac kullanıyorsanız ~/Library/Application Support/Claude/claude_desktop_config.json, Windows kullanıyorsanız %APPDATA%Claudeclaude_desktop_config.json dosyasını açın (dosya yoksa oluşturun) ve şu satırları ekleyin:
{
"mcpServers": {
"lokal-veri-araci": {
"command": "node",
"args": ["/Açık/Klasör/Yolunuz/my-mcp-server/dist/index.js"]
}
}
}
Cursor AI İçin Yapılandırma
- Cursor ayarlarını açın (Settings -> Features -> MCP).
- + Add New MCP Server butonuna tıklayın.
- İsim kısmına
lokal-analizyazın. - Type kısmını command olarak seçin.
- Command alanına şunu yazın:
node /Açık/Klasör/Yolunuz/my-mcp-server/dist/index.js - Kaydedin. Ekranın yeşil yandığını ve aracınızın bağlandığını göreceksiniz.
🚀 Sonuç ve Canlı Test
Kurulum bittikten sonra Cursor chat ekranını veya Claude Desktop'ı açıp doğrudan şu komutu verin:
"Masaüstümdeki
/logs/app.logdosyasınıget_local_system_statusaracını kullanarak analiz et ve bana kritik hatanın kaynağını söyle."
Yapay zeka, yazdığınız Node.js kodunu arka planda tetikleyecek, dönen ham veriyi alacak ve size insansı bir dille özetleyecektir. Artık yapay zekayı tamamen kendi lokal verilerinizle beslenen, size özel komutlar çalıştıran gelişmiş bir asistana dönüştürdünüz.
Yazılım süreçlerinizde bulut API'lerinin ve yapay zeka altyapılarının size getireceği gerçek maliyetleri önceden hesaplamak isterseniz, sitemizde bulunan AI Bulut GPU Hesaplayıcı aracına göz atarak projelerinizin bütçe planlamasını yapabilirsiniz.
