Custom MCP Server Geliştirme: Production-Ready Kılavuz
TypeScript ile organizasyonunuzun internal sistemleri için custom Model Context Protocol serverları nasıl geliştirip, güvenli hale getirip, deploy edeceğinizi öğren. Authentication, monitoring ve Kubernetes deployment örnekleriyle.
Abstract
Model Context Protocol (MCP), büyük AI providerlar arasında hızla standart haline geldi. GitHub ya da Slack gibi yaygın servisler için hazır serverlar işe yarasa da, organizasyonların internal API'leri entegre etmek, güvenlik politikalarını uygulamak ve domain-specific logic'i encode etmek için custom serverlar gerekiyor. Bu rehber, TypeScript ile production-ready custom MCP server geliştirmeyi anlatıyor: başlangıç setup'tan Kubernetes deployment'a kadar. Authentication, circuit breaker'lar, audit logging ve monitoring için çalışan kod örnekleriyle.
Custom Integration Challenge
AI-assisted workflow'ları benimseyen organizasyonlar, hazır MCP serverlarla hızla sınırlara çarpıyor. Ekibin proprietary internal API'leri, custom database'leri ve legacy sistemleri var; bunlar için public MCP serverları yok. Generic serverlar senin validation kurallarını, güvenlik gereksinimlerini ya da compliance ihtiyaçlarını encode edemiyor.
Bir internal deployment sistemini düşün. Workflow şunları gerektiriyor: custom configuration service'ten prerequisite'ları kontrol etmek, LDAP üzerinden user permission'larını validate etmek, circuit breaker'lı internal API üzerinden deployment'ları trigger etmek, compliance için tüm aksiyonları log'lamak ve multi-region deployment koordinasyonunu handle etmek. Hiçbir hazır MCP server bu workflow'u anlamıyor.
Custom MCP serverlar geliştirmek şunları sağlıyor: tailored integration, protocol seviyesinde güvenlik enforcement, context window verimliliğini maksimize eden optimize edilmiş response'lar ve audit sistemleriyle compliance entegrasyonu.
Proje Yapısı ve Setup
İyi organize edilmiş bir proje yapısıyla başla: concern'ları ayır:
Gerekli dependency'lerle projeyi initialize et:
Modern Node.js için TypeScript config'i:
Core Server Implementation
Server initialization, transport setup'ı, tool registration'ı ve graceful shutdown'ı handle ediyor:
Buradaki key pattern'ler: modular tool registration codebase'i sürdürülebilir tutuyor, proper error handling silent failure'ları önlüyor ve logging için console.error() kullanmak kritik: stdout protocol message'ları için ayrılmış, başka output JSON-RPC stream'ini bozuyor.
Domain Logic ile Tool Implementation
Tool'lar organizasyonunun business rule'larını encode ediyor. İşte deployment prerequisite'larını validate eden kapsamlı bir örnek:
Bu birkaç domain logic pattern'i gösteriyor: Zod regex ile semantic version validation, clear pass/fail feedback'li multi-step prerequisite check'ler, production için deployment window'ları gibi environment-specific rule'lar, dependency health validation ve AI consumption için optimize edilmiş human-readable output.
Resilience ile API Integration
Internal API'lerle robust entegrasyon, retry'lar, circuit breaking ve proper error handling gerektiriyor:
Bu implementation şunları içeriyor: cascading failure'ları önleyen circuit breaker'lar, jitter'lı exponential backoff, auth overhead'i azaltan token caching, user-friendly error transformation ve timeout protection. Circuit breaker'ların önemini, bu pattern'ler implement edilmeden önce backend outage'ın MCP server'ı 20 dakika boyunca down ettiği bir durumda öğrendim.
Security: Authentication ve Audit Logging
Güvenlik sonradan eklenemez. Authentication, authorization ve audit logging'i baştan tasarla:
Production için HTTP Transport
stdio transport local development için işe yarasa da, production deployment'lar HTTP transport gerektiriyor: multiple concurrent client'lar, bağımsız server lifecycle, load balancing ve standart monitoring için:
Kubernetes Deployment
Kubernetes ile container deployment, high availability ve scalability sağlıyor:
Production deployment için Kubernetes manifest:
Test Stratejisi
External dependency'leri mock'layan unit test'lerle MCP tool'larını etkili şekilde test et:
Yaygın Hatalar ve Öğrenilenler
Stdout/Stderr Karışıklığı
MCP, stdout'u yalnızca JSON-RPC message'ları için kullanıyor. Başka output, protocol stream'ini bozuyor:
Client'ın "Protocol error" ya da "Invalid JSON" göstermesi durumunda, stdout pollution'ı kontrol et.
Missing Input Validation
AI modelleri beklenmedik ya da malicious input'lar üretebiliyor. Strict validation için Zod refinement'ları kullan:
Context Window Bloat
Her token, context window'u tüketiyor. AI, conversation başına tool'ları onlarca kez invoke edebiliyor. Yalnızca ilgili field'ları return et:
Bu yaklaşım, test'lerde token kullanımını yaklaşık %70 azalttı.
Synchronous Long Operation'lar
Tool'lar 5-10 saniye içinde return etmeli. Daha uzun operation'lar için task-based pattern kullan:
Maliyet Analizi
Development: Production-ready server için 1-2 hafta (server development 3-5 gün, security 1-2 gün, testing 1 gün, deployment 1-2 gün, dokümantasyon 1 gün).
Infrastructure (AWS örneği):
- Kubernetes: ~50, EC2 instance'lar 20, secret/log'lar $25)
- Serverless (Fargate): ~$50/ay (düşük maliyet, yüksek cold start latency)
Custom ne zaman build edilmeli: Internal/proprietary sistemler, strict güvenlik/compliance gereksinimleri, domain-specific validation gerekli, context optimization kritik, yüksek integration volume.
Pre-built ne zaman kullanılmalı: Standart integration'lar (GitHub, Slack), hızlı prototipleme, düşük güvenlik gereksinimleri, sınırlı development kaynakları.
Temel Çıkarımlar
stdio transport ve basic tool'larla basit başla, sonra güvenlik ve production feature'larını incremental ekle. Authentication, authorization ve audit logging'i baştan tasarla. Güvenliği sonradan eklemek zor.
Her response'u optimize et. Context window verimliliğini maksimize etmek için yalnızca ilgili field'ları return et. Strict input validation için Zod kullan ve backend response'larını validate et. AI-generated input'lara ya da backend API'lerine güvenme.
Backend'ler unhealthy olduğunda cascading failure'ları önlemek için circuit breaker'lar şart. Yeniden kullanılabilir ve test edilebilir küçük, focused tool'lar geliştir; AI'ın tool composition ile complex workflow'ları orkestre etmesine izin ver.
Production, observability gerektiriyor: metric'ler, logging ve alerting opsiyonel değil. Aynı code'u farklı config'lerle production-like environment'larda test et, production'dan önce issue'ları yakala.
MCP server geliştirme 1-2 hafta sürüyor, custom REST API'ler 2-3 hafta. Standardization, multi-provider support ve büyüyen ekosistem sayesinde hızla geri dönüş yapıyor.