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:

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

  1. Bob, bir MCP sunucusunu alt süreç olarak başlatır
  2. İletişim süreç akışları üzerinden gerçekleşir: Bob sunucunun STDIN'ine yazar, sunucu STDOUT'a yanıt verir
  3. Her ileti bir satır sonu karakteriyle sınırlandırılır
  4. İ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

  1. Sunucu, hem POST hem de GET yöntemlerini destekleyen tek bir HTTP uç noktası (MCP uç noktası) sağlar
  2. Bob, HTTP POST kullanarak bu MCP uç noktasına istek gönderir
  3. Sunucu isteği işler ve yanıt gönderir
  4. İ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

  1. Bob, HTTP GET isteği aracılığıyla sunucunun SSE uç noktasına bağlanır
  2. Bu, sunucunun Bob'a olay iletebileceği kalıcı bir bağlantı kurar
  3. İstemciden sunucuya iletişim için Bob ayrı bir uç noktaya HTTP POST istekleri yapar
  4. İ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:

  1. Ağ erişimli STDIO: Uzak hizmetlere proxy görevi gören yerel bir STDIO sunucusu
  2. Yerel komutlu uzak: Geri aramalar aracılığıyla istemci makinede işlemleri tetikleyebilen uzak bir sunucu
  3. 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ğerlendirmeSTDIOStreamable HTTP / SSE
KonumYalnızca yerel makineYerel veya uzak
İstemcilerTek istemciBirden fazla istemci
PerformansDaha düşük gecikmeDaha yüksek gecikme (ağ yükü)
Kurulum karmaşıklığıDaha basitDaha karmaşık (HTTP sunucusu gerektirir)
GüvenlikDoğası gereği güvenliAçık güvenlik önlemleri gerektirir
Ağ erişimiGerekmezGereklidir
ÖlçeklenebilirlikYerel makineyle sınırlıAğ genelinde dağıtılabilir
DağıtımKullanıcı başına kurulumMerkezi kurulum
GüncellemelerDağıtılmış güncellemelerMerkezi güncellemeler
Kaynak kullanımıİstemci kaynakları kullanırSunucu kaynakları kullanır
Bağımlılıklarİstemci tarafı bağımlılıklarSunucu 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.

Bu konu nasıl?