MCP sunucu transport'ları
MCP, Bob Shell ile MCP sunucuları arasındaki iletişim için transport mekanizmalarını destekler.
Genel bakış
MCP, farklı dağıtım senaryolarına uygun üç transport seçeneği sunar:
- STDIO transport (yerel sunucular)
- Streamable HTTP transport (uzak sunucular için modern standart)
- SSE transport (eski uzak seçenek)
Her transport'un farklı özellikleri, avantajları ve kullanım durumları vardır.
STDIO transport
STDIO transport, makinenizde yerel olarak çalışır ve standart giriş/çıkış akışları aracılığıyla iletişim kurar.
STDIO transport nasıl çalışır
- Bob, bir MCP sunucusunu alt süreç olarak başlatır
- İletişim süreç akışları üzerinden gerçekleşir: Bob sunucunun STDIN'ine yazar, sunucu STDOUT'a yanıt verir
- Her ileti bir satır sonu karakteriyle sınırlandırılır
- İletiler JSON-RPC 2.0 formatında biçimlendirilir
İstemci Sunucu
| |
|---- JSON iletisi ------>| (STDIN aracılığıyla)
| | (isteği işler)
|<---- JSON iletisi ------| (STDOUT aracılığıyla)
| |STDIO özellikleri
- Yerellik: Bob ile aynı makinede çalışır
- Performans: Çok düşük gecikme ve yük (ağ yığını dahil değil)
- Basitlik: Ağ yapılandırması olmadan doğrudan süreç iletişimi
- İlişki: İstemci ile sunucu arasında bire bir ilişki
- Güvenlik: Ağ maruziyeti olmadan doğası gereği daha güvenli
STDIO ne zaman kullanılır
STDIO transport şunlar için idealdir:
- Aynı makinede çalışan yerel entegrasyonlar ve araçlar
- Güvenlik açısından hassas işlemler
- Düşük gecikme gereksinimleri
- Tek istemci senaryoları (sunucu başına bir Bob örneği)
- Komut satırı araçları ve betikler
STDIO uygulama örneği
const server = new Server({name: 'local-server', version: '1.0.0'});
// Araçları kaydet...
// STDIO transport kullan
const transport = new StdioServerTransport(server);
transport.listen();Streamable HTTP transport
Streamable HTTP transport, eski HTTP+SSE transport'ının yerini alan, uzak MCP sunucu iletişimi için modern standarttır. HTTP/HTTPS üzerinden çalışır ve daha esnek sunucu uygulamalarına olanak tanır.
Streamable HTTP transport nasıl çalışır
- Sunucu, hem POST hem de GET yöntemlerini destekleyen tek bir HTTP uç noktası (MCP uç noktası) sağlar
- Bob, HTTP POST kullanarak bu MCP uç noktasına istek gönderir
- Sunucu isteği işler ve yanıt gönderir
- İsteğe bağlı olarak sunucu, aynı bağlantı üzerinden Bob'a birden fazla ileti veya bildirim akışı için Server-Sent Events (SSE) kullanabilir
Bu, temel istek-yanıt etkileşimlerinin yanı sıra daha gelişmiş akış ve sunucu başlatımlı iletişime de olanak tanır.
İstemci Sunucu
| |
|---- HTTP POST /mcp_endpoint ---->| (istemci isteği)
| | (isteği işler)
|<--- HTTP Yanıtı / SSE Akışı -----| (sunucu yanıtı / akış)
| |Streamable HTTP özellikleri
- Modern standart: Yeni uzak MCP sunucu uygulamaları için tercih edilen yöntem
- Uzak erişim: Bob'dan farklı bir makinede barındırılabilir
- Ölçeklenebilirlik: Birden fazla istemci bağlantısını eş zamanlı olarak yönetebilir
- Protokol: Standart HTTP/HTTPS üzerinden çalışır
- Esneklik: Basit istek-yanıt ve gelişmiş akışı destekler
- Tek uç nokta: Tüm MCP iletişimi için tek bir URL yolu kullanır
- Kimlik doğrulama: Standart HTTP kimlik doğrulama mekanizmalarını kullanabilir
- Geriye dönük uyumluluk: Sunucular eski HTTP+SSE istemcileriyle uyumluluğu koruyabilir
Streamable HTTP ne zaman kullanılır
Streamable HTTP transport şunlar için idealdir:
- Tüm yeni uzak MCP sunucu geliştirmeleri
- Sağlam, ölçeklenebilir ve esnek iletişim gerektiren sunucular
- Akış verisi veya sunucu tarafından gönderilen bildirimleri içerebilecek entegrasyonlar
- Genel hizmetler veya merkezi araçlar
- Eski SSE transport uygulamalarının yerini alması
Streamable HTTP uygulama örneği
~/.bob/mcp_settings.json (genel) veya .bob/mcp.json (proje) içinde yapılandırma:
{
"mcpServers": {
"StreamableHTTPMCPName": {
"httpURL": "http://localhost:8080/mcp"
}
}
}Sunucu tarafı uygulaması için StreamableHTTPClientTransport MCP SDK belgelerine başvurun.
HTTP+SSE ile geriye dönük uyumluluk
İstemciler ve sunucular, kullanımdan kaldırılan HTTP+SSE transport ile geriye dönük uyumluluğu koruyabilir.
Eski istemcileri desteklemek isteyen sunucular, Streamable HTTP transport için tanımlanan yeni MCP uç noktasının yanı sıra eski transport'un SSE (/events) ve POST (/message) uç noktalarını barındırmaya devam etmelidir.
SSE transport (eski)
Server-Sent Events (SSE) transport, uzak bir sunucuda çalışır ve HTTP/HTTPS üzerinden iletişim kurar. Yeni uzak sunucular için bunun yerine Streamable HTTP transport kullanın.
SSE transport nasıl çalışır
- Bob, HTTP GET isteği aracılığıyla sunucunun SSE uç noktasına bağlanır
- Bu, sunucunun Bob'a olay iletebileceği kalıcı bir bağlantı kurar
- İstemciden sunucuya iletişim için Bob ayrı bir uç noktaya HTTP POST istekleri yapar
- İletişim iki kanal üzerinden gerçekleşir:
- Olay akışı (GET): Sunucudan istemciye güncellemeler
- İleti uç noktası (POST): İstemciden sunucuya istekler
İstemci Sunucu
| |
|---- HTTP GET /events ----------->| (SSE bağlantısı kur)
|<---- SSE olay akışı -------------| (kalıcı bağlantı)
| |
|---- HTTP POST /message --------->| (istemci isteği)
|<---- yanıt içeren SSE olayı -----| (sunucu yanıtı)
| |SSE özellikleri
- Uzak erişim: Bob'dan farklı bir makinede barındırılabilir
- Ölçeklenebilirlik: Birden fazla istemci bağlantısını eş zamanlı olarak yönetebilir
- Protokol: Standart HTTP üzerinden çalışır (özel protokol gerekmez)
- Kalıcılık: Sunucudan istemciye iletiler için kalıcı bağlantı sağlar
- Kimlik doğrulama: Standart HTTP kimlik doğrulama mekanizmalarını kullanabilir
SSE ne zaman kullanılır
SSE transport şunlar için uygundur:
- Ağlar üzerinden uzak erişim
- Çok istemcili senaryolar
- Genel hizmetler
- Birçok kullanıcının erişmesi gereken merkezi araçlar
- Web hizmetleriyle entegrasyon
SSE uygulama örneği
import express from 'express';
const app = express();
const server = new Server({name: 'remote-server', version: '1.0.0'});
// Araçları kaydet...
// SSE transport kullan
const transport = new SSEServerTransport(server);
app.use('/mcp', transport.requestHandler());
app.listen(3000, () => {
console.log('MCP sunucusu 3000 numaralı bağlantı noktasında dinliyor');
});Dağıtım değerlendirmeleri
STDIO ile uzak transport'lar (Streamable HTTP veya SSE) arasındaki seçim, MCP sunucularınızı nasıl dağıtacağınızı ve yöneteceğinizi doğrudan etkiler.
STDIO: Yerel dağıtım
STDIO sunucuları Bob ile aynı makinede yerel olarak çalışır:
- Kurulum: Sunucu yürütülebilir dosyasının her kullanıcının makinesine kurulması gerekir
- Dağıtım: Farklı işletim sistemleri için kurulum paketleri sağlamanız gerekir
- Güncellemeler: Her örnek ayrı ayrı güncellenmek zorundadır
- Kaynaklar: Yerel makinenin CPU, bellek ve diskini kullanır
- Erişim denetimi: Yerel makinenin dosya sistemi izinlerine dayanır
- Entegrasyon: Yerel sistem kaynaklarıyla (dosyalar, süreçler) kolay entegrasyon
- Yürütme: Bob ile birlikte başlar ve durur (alt süreç yaşam döngüsü)
- Bağımlılıklar: Tüm bağımlılıkların kullanıcının makinesinde kurulu olması gerekir
Örnek kullanım durumu:
STDIO kullanan yerel bir dosya arama aracı:
- Makinenizde çalışır
- Yerel dosya sistemine doğrudan erişimi vardır
- Bob tarafından gerektiğinde başlatılır
- Ağ yapılandırması gerektirmez
- Bob ile birlikte veya bir paket yöneticisi aracılığıyla kurulması gerekir
Uzak: Barındırılan dağıtım
Uzak sunucular (Streamable HTTP veya SSE) uzak sunuculara dağıtılabilir ve ağ üzerinden erişilebilir:
- Kurulum: Bir sunucuya bir kez kurulur, birçok kullanıcı tarafından erişilir
- Dağıtım: Tek dağıtım birden fazla istemciye hizmet eder
- Güncellemeler: Merkezi güncellemeler tüm kullanıcıları hemen etkiler
- Kaynaklar: Yerel makine kaynakları değil sunucu kaynakları kullanılır
- Erişim denetimi: Kimlik doğrulama ve yetkilendirme sistemleri aracılığıyla yönetilir
- Entegrasyon: Kullanıcıya özgü kaynaklarla daha karmaşık entegrasyon
- Yürütme: Bağımsız hizmet olarak çalışır (genellikle sürekli)
- Bağımlılıklar: Kullanıcı makinelerinde değil sunucuda yönetilir
Örnek kullanım durumu:
Uzak transport kullanan bir veritabanı sorgu aracı:
- Merkezi bir sunucuda çalışır
- Sunucu tarafı kimlik bilgileriyle veritabanlarına bağlanır
- Birden fazla kullanıcı için sürekli erişilebilir
- Uygun ağ güvenliği yapılandırması gerektirir
- Konteyner veya bulut teknolojileri kullanılarak dağıtılır
Hibrit yaklaşımlar
Bazı senaryolar hibrit bir yaklaşımdan yararlanır:
- Ağ erişimli STDIO: Uzak hizmetlere proxy görevi gören yerel bir STDIO sunucusu
- Yerel komutlu uzak: Geri aramalar aracılığıyla istemci makinede işlemleri tetikleyebilen uzak bir sunucu
- Ağ geçidi deseni: Özel işlevler için uzak sunuculara bağlanan yerel işlemler için STDIO sunucuları
Transport karşılaştırması
| Değerlendirme | STDIO | Streamable HTTP / SSE |
|---|---|---|
| Konum | Yalnızca yerel makine | Yerel veya uzak |
| İstemciler | Tek istemci | Birden fazla istemci |
| Performans | Daha düşük gecikme | Daha yüksek gecikme (ağ yükü) |
| Kurulum karmaşıklığı | Daha basit | Daha karmaşık (HTTP sunucusu gerektirir) |
| Güvenlik | Doğası gereği güvenli | Açık güvenlik önlemleri gerektirir |
| Ağ erişimi | Gerekmez | Gereklidir |
| Ölçeklenebilirlik | Yerel makineyle sınırlı | Ağ genelinde dağıtılabilir |
| Dağıtım | Kullanıcı başına kurulum | Merkezi kurulum |
| Güncellemeler | Dağıtılmış güncellemeler | Merkezi güncellemeler |
| Kaynak kullanımı | İstemci kaynakları kullanır | Sunucu kaynakları kullanır |
| Bağımlılıklar | İstemci tarafı bağımlılıklar | Sunucu tarafı bağımlılıklar |
Bob Shell'de transport'ları yapılandırma
Bob Shell'de transport'ları yapılandırma, örnek yapılandırmalar dahil ayrıntılı bilgi için bkz. Bob Shell'de MCP.