MCP sunucu taşımaları
MCP, Bob ve MCP sunucuları arasındaki iletişim için taşıma mekanizmalarını destekler.
Genel bakış
MCP, her biri farklı dağıtım senaryolarına uygun üç taşıma seçeneği sunar:
- STDIO taşıması (yerel sunucular)
- Streamable HTTP taşıması (uzak sunucular için modern standart)
- SSE taşıması (kaldırıldı)
Her taşımanın kendine özgü özellikleri, avantajları ve kullanım durumları vardır.
STDIO taşıması
STDIO taşıması makinenizde yerel olarak çalışır ve standart giriş/çıkış akışları aracılığıyla iletişim kurar.
STDIO taşıması nasıl çalışır
- Bob bir MCP sunucusunu alt süreç olarak başlatır
- İletişim süreç akışları aracılığıyla gerçekleşir: Bob sunucunun STDIN'ine yazar, sunucu STDOUT'a yanıt verir
- Her mesaj yeni satır karakteriyle sınırlandırılır
- Mesajlar JSON-RPC 2.0 olarak biçimlendirilir
Client Server
| |
|---- JSON message ------>| (STDIN aracılığıyla)
| | (isteği işler)
|<---- JSON message ------| (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ğ konfigürasyonu olmadan doğrudan süreç iletişimi
- İlişki: İstemci ve sunucu arasında bire bir ilişki
- Güvenlik: Ağ maruziyeti olmadığı için doğal olarak daha güvenli
STDIO ne zaman kullanılır
STDIO taşıması şunlar için idealdir:
- Aynı makinede çalışan yerel entegrasyonlar ve araçlar
- Güvenliğe duyarlı işlemler
- Düşük gecikme gereksinimleri
- Tek istemci senaryoları (sunucu başına bir Bob örneği)
- Komut satırı araçları veya IDE uzantıları
STDIO uygulama örneği
const server = new Server({name: 'local-server', version: '1.0.0'});
// Araçları kaydet...
// STDIO taşımasını kullan
const transport = new StdioServerTransport(server);
transport.listen();Streamable HTTP taşıması
Streamable HTTP taşıması, eski HTTP+SSE taşıması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 taşıması 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 istekler gönderir
- Sunucu isteği işler ve bir yanıt gönderir
- İsteğe bağlı olarak, sunucu Bob'a birden fazla mesaj veya bildirim akışı yapmak için aynı bağlantı üzerinden Server-Sent Events (SSE) kullanabilir
Bu, temel istek-yanıt etkileşimlerinin yanı sıra daha gelişmiş akış ve sunucu tarafından başlatılan iletişime olanak tanır.
Client Server
| |
|---- HTTP POST /mcp_endpoint ---->| (istemci isteği)
| | (isteği işler)
|<--- HTTP Response / SSE Stream --| (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 işleyebilir
- 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 taşıması şunlar için idealdir:
- Tüm yeni uzak MCP sunucu geliştirmeleri
- Sağlam, ölçeklenebilir ve esnek iletişim gerektiren sunucular
- Veri akışı veya sunucu tarafından gönderilen bildirimleri içerebilecek entegrasyonlar
- Genel hizmetler veya merkezi araçlar
- Eski SSE taşıma uygulamalarının değiştirilmesi
Protokol müzakeresi
Bob bir Streamable HTTP sunucusuna bağlandığında, protokol sürümü üzerinde nasıl anlaşacağını belirlemek için protocolNegotiation seçeneğini kullanır. HTTP sunucuları varsayılan olarak "auto" değerini kullanır.
| Değer | Açıklama |
|---|---|
"auto" | Bob, desteklenen en yüksek protokol sürümünü müzakere etmek için initialize öncesinde bir server/discover sondalama isteği gönderir. HTTP sunucuları için varsayılandır. |
"legacy" | Bob, sondalama isteğini atlar ve tüm MCP sunucularıyla uyumlu olan initialize el sıkışmasıyla doğrudan bağlanır. |
{ "pin": "<sürüm>" } | Bob, belirli bir protokol sürümü kullanarak bağlanır (örneğin, { "pin": "2024-11-05" }). |
Bir HTTP sunucusu MCP connection timed out after 10000ms hatasıyla zaman aşımına uğrarsa, sunucu server/discover sondalama isteğine yanıt vermeyebilir. Sondalama isteğini atlamak için "protocolNegotiation": "legacy" değerini ayarlayın:
{
"mcpServers": {
"my-server": {
"url": "https://your-server-url.com/mcp",
"protocolNegotiation": "legacy"
}
}
}Daha fazla bilgi için "Bob'da MCP kullanımı" bölümündeki Protokol müzakeresi kısmına bakın.
Streamable HTTP uygulama örneği
~/.bob/settings/mcp.json (genel) veya .bob/mcp.json (proje) içinde konfigürasyon:
{
"mcpServers": {
"StreamableHTTPMCPName": {
"type": "streamable-http",
"url": "http://localhost:8080/mcp"
}
}
}Sunucu tarafı uygulama için StreamableHTTPClientTransport için MCP SDK dokümantasyonuna bakın.
HTTP+SSE ile geriye dönük uyumluluk
Bob'un MCP istemcisi HTTP+SSE taşımasına geri dönmez. Aşağıdaki rehber, Streamable HTTP sunucusunu Streamable HTTP'yi henüz desteklemeyen eski istemciler için erişilebilir tutmak isteyen sunucu yazarları içindir.
Eski istemcileri desteklemesi gereken sunucular, Streamable HTTP taşıması için tanımlanan yeni MCP uç noktasının yanı sıra eski taşımanın hem SSE (/events) hem de POST (/message) uç noktalarını barındırmaya devam etmelidir.
SSE taşıması (kaldırıldı)
Bob'un MCP istemcisi artık bağımsız HTTP+SSE taşımasını (MCP spesifikasyonu 2024-11-05) desteklememektedir. Yalnızca HTTP+SSE taşıması kullanan sunucular Bob'a bağlanamaz.
Streamable HTTP bağlantısı içinde yanıt kanalı olarak SSE hâlâ desteklenmektedir. Bob, Streamable HTTP sunucusundan SSE akışları alabilir. Yalnızca bağımsız HTTP+SSE taşıması (ayrı /events ve /message uç noktalarıyla) kaldırılmıştır.
SSE taşımasından geçiş
HTTP+SSE taşıması kullanan mevcut bir sunucunuz varsa onu Streamable HTTP taşımasına veya STDIO taşımasına taşıyın:
- Streamable HTTP: HTTP POST isteklerini kabul eden tek bir MCP uç noktası kullanıma açın. Bu, uzak sunucular için önerilen yoldur. Bkz. Streamable HTTP taşıması.
- STDIO: Sunucu Bob ile aynı makinede yerel olarak çalışıyorsa STDIO sunucusuna dönüştürün. Bkz. STDIO taşıması.
Dağıtım değerlendirmeleri
STDIO ve Streamable HTTP taşıması 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ı her kullanıcının makinesine kurulmalıdır
- Dağıtım: Farklı işletim sistemleri için kurulum paketleri sağlamanız gerekir
- Güncellemeler: Her örnek ayrı ayrı güncellenmelidir
- Kaynaklar: Yerel makinenin CPU, bellek ve diskini kullanır
- Erişim kontrolü: Yerel makinenin dosya sistemi izinlerine dayanır
- Entegrasyon: Yerel sistem kaynaklarıyla (dosyalar, süreçler) kolay entegrasyon
- Yürütme: Bob ile başlar ve durur (alt süreç yaşam döngüsü)
- Bağımlılıklar: Herhangi bir bağımlılık kullanıcının makinesine kurulmalıdır
Örnek kullanım durumu:
STDIO kullanan yerel bir dosya arama aracı:
- Kullanıcının makinesinde çalışır
- Yerel dosya sistemine doğrudan erişime sahiptir
- Bob tarafından gerektiğinde başlatılır
- Ağ konfigürasyonu 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) 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 verir
- Güncellemeler: Merkezi güncellemeler tüm kullanıcıları anında etkiler
- Kaynaklar: Sunucu kaynaklarını kullanır, yerel makine kaynaklarını değil
- Erişim kontrolü: Kimlik doğrulama ve yetkilendirme sistemleri aracılığıyla yönetilir
- Entegrasyon: Kullanıcıya özel kaynaklarla daha karmaşık entegrasyon
- Yürütme: Bağımsız bir hizmet olarak çalışır (genellikle sürekli)
- Bağımlılıklar: Sunucuda yönetilir, kullanıcı makinelerinde değil
Örnek kullanım durumu:
Uzak taşıma 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 olarak kullanılabilir
- Uygun ağ güvenliği konfigürasyonu gerektirir
- Konteyner veya bulut teknolojileri kullanılarak dağıtılır
Hibrit yaklaşımlar
Bazı senaryolar hibrit bir yaklaşımdan faydalanı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 makinesinde 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ı
Taşıma karşılaştırması
| Değerlendirme | STDIO | Streamable HTTP |
|---|---|---|
| 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ğal olarak güvenli | Açık güvenlik önlemleri gerektirir |
| Ağ erişimi | Gerekli değil | Gerekli |
| Ölçeklenebilirlik | Yerel makine ile sınırlı | Ağ üzerinden 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ını kullanır | Sunucu kaynaklarını kullanır |
| Bağımlılıklar | İstemci tarafı bağımlılıklar | Sunucu tarafı bağımlılıklar |
Bob'da taşımaları yapılandırın
Örnek konfigürasyonlar dahil olmak üzere Bob'da taşımaları yapılandırma hakkında ayrıntılı bilgi için Bob'da MCP bölümüne bakın.
MCP'yi Anlamak
Model Context Protocol (MCP), yapay zeka sistemlerinin harici araçlar ve hizmetlerle etkileşim kurmasını sağlayan standartlaştırılmış bir iletişim protokolüdür.
Bob'da MCP Kullanımı
Model Context Protocol (MCP), harici araçlara ve hizmetlere bağlanarak Bob'un yeteneklerini genişletir. Bu kılavuz, MCP sunucularını Bob ile nasıl yapılandıracağınızı, yöneteceğinizi ve kullanacağınızı gösterir.