deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

mcp-cassette, kaydedilmiş MCP oturumlarını çevrimdışı test sunucuları olarak yeniden oynatıyor

mcp-cassette, canlı bir Model Context Protocol oturumunu JSONL olarak kaydedip gerçek bir MCP sunucusu olarak yeniden oynatıyor; böylece agent testleri çevrimdışı çalışıyor — credential, rate limit veya ağ gerekmeden — üstüne contract ve poisoning kontrolleri ekliyor.

mcp-cassette, kaydedilmiş MCP oturumlarını çevrimdışı test sunucuları olarak yeniden oynatıyor

Model Context Protocol oturumları için kaset

ivermin1123 adıyla yayın yapan bir geliştirici, gerçek bir Model Context Protocol (MCP) oturumunu JSONL dosyasına kaydedip bu dosyayı bir MCP sunucusu olarak sunen, Apache-2.0 lisanslı TypeScript aracı mcp-cassette'i tanıttı. 11 Ekim 2026 tarihli bir dev.to gönderisine göre bunun sonucu, agent testlerinin credential, rate limit veya ağ bağımlılığı olmadan tamamen çevrimdışı çalışabilmesi.

Hedeflediği sorun

Gönderi tanıdık bir sorun tanımlıyor: bir agent MCP üzerinden araç çağırdığında testleri, test paketinin kontrolünde olmayan bir altyapıya — canlı bir sunucuya, o sunucunun credential'larına ve rate limitlerine ile aradaki ağa — bağımlı hale geliyor. İki yaygın çözümün de bir maliyeti var. MCP istemci kütüphanesini mock'lamak her testi tek bir SDK'ya bağlıyor; özel bir kayıt aracı inşa etmek ise yazarın birden fazla projenin dahili olarak tekrar tekrar ürettiği bir emek olduğunu söylediği bir iş. mcp-cassette üçüncü bir yol izliyor ve gönderide "kayıt sunucunun kendisidir" diye özetleniyor.

Bir oturumu kaydetmek

Kayıt, npx mcp-cassette record ile yapılıyor; araç kendisini istemci ile gerçek sunucu arasına şeffaf bir proxy olarak konumlandırıyor ve her frame'i, her iki yönde, açık bir JSONL kasete yazıyor. Aracın tanıdığı secret'lar varsayılan olarak dosyaya ulaşmadan önce sansürleniyor; ancak yazar, pattern eşlemenin her şeyi yakalayamayacağı konusunda uyarıyor ve bir kaseti commit etmeden önce incelemeyi tavsiye ediyor.

Yeniden oynatma canlı bir sunucu gibi davranıyor

Yeniden oynatımda kaset, protokolü stdio veya Streamable HTTP üzerinden konuşan gerçek bir MCP sunucusu olarak sunuluyor. Bu, herhangi bir dilde yazılmış herhangi bir istemcinin ona, canlı olana bağlanacağı şekilde bağlanabileceği anlamına geliyor — import edilecek kütüphane, değiştirilecek ürün kodu veya sarılacak transport yok. Sıradan bir MCP istemcisi olarak tanımlanan, paketle gelen check komutununin kaydı gerçek olandan ayırt edemediği belirtiliyor.

Yeniden oynatım ayrıca oturum düzeyindeki davranışı da koruyor: sunucunun kendi kendine gönderdiği notification'lar oturumdaki özgün konumlarında yeniden oynatılıyor ve tek bir kaset, aracın desteklediği her iki protokol revizyonunu — 2025-11-25 revizyonunu ve stateless 2026-07-28 revizyonunu — kapsıyor. Bir bağlantıda keşif yapıp oturumunu ikinci bir bağlantıda yürüten bir istemci, append modunu kullanarak her ikisini tek bir dosyaya kaydedebiliyor.

Test koşturucularının içinde

Test paketleri için proje, mcp-cassette/vitest üzerinden useCassette ile bir vitest entegrasyonu sunuyor; jest için de bir karşılığı var. Testler yalnızca MCP istemcilerini canlı bir sunucu yerine kasetin URL'sine yönlendiriyor. Kayıtta bulunmayan bir istek, onu yapan testi bir açıklamayla başarısız kılıyor — bu, eski kasetlerin sessizce geçmesini önlemeye yönelik bilinçli bir koruma.

Contract kapısı ve poisoning lint'i

Kayıt ve yeniden oynatımın ötesinde, aynı binary iki CI odaklı kontrol daha ekliyor. snapshot, bir sunucunun araç contract'ını commit edilmiş bir dosyaya yazıyor; snapshot --check ise o contract kötüye doğru değiştiğinde pipeline'ı başarısız kılıyor ve değişiklikleri breaking, dangerous, minor ve info kategorilerine ayırıyor. Gönderideki örnek çıktıda, kaldırılan bir araç ve zorunlu hale gelen bir parametre breaking sayılırken, yeni eklenen opsiyonel bir parametre dangerous olarak işaretleniyor.

check ayrıca, sunucunun modelin okuması için yayınladığı metin — araç açıklamaları, input schema'ları, prompt'lar ve resource'lar — üzerinde on altı deterministik kural çalıştırıyor ve her kural, ele aldığı OWASP MCP Top 10 riskine atıf yapıyor. Ayrı bir lint komutu, ilgili kuralları kaydedilmiş bir sunucunun geri döndürdüğü verilere uyguluyor; yazar bunu, dolaylı prompt injection'ın ortaya çıktığı yüzey olarak tanımlıyor. Bulgular metin, JSON veya SARIF olarak yayımlanabiliyor ve GitHub code scanning ile kullanılabiliyor. Yazar, bunların bir model değil sezgisel kurallar olduğuna dair açık konuşuyor ve bunları eksiksiz bir savunma yerine CI'da erken uyarı tetikleyicisi olarak konumlandırıyor.

Paketle gelen ivermin1123/[email protected] GitHub Action'ı, hem güvenlik kontrolünü hem de contract kapısını commit edilmiş snapshot'a karşı çalıştırıyor ve pull request üzerine tek bir yorum gönderiyor; bu yorum her push'ta güncelleniyor. Araç Node 22 veya daha yeni bir sürüm gerektiriyor.

Neden önemli

MCP, agent'lar ile harici araçlar arasındaki bağ dokusu haline geliyor ve klasik integration test sorunlarını miras alıyor: CI'a sızan credential'lar, ağır虞 olmayan değil titrek ağlar, rate limitler ve sessiz API drift'i. VCR tarzı kayıt ve yeniden oynatım bu sorunların çoğunu HTTP testleri için çözmüştü; mcp-cassette bu pattern'i dile agnostik bir şekilde MCP'ye taşıyor — kaset kablosal açıdan gerçek bir sunucu olduğu için istemci tarafının hiç değişmesi gerekmiyor. Snapshot kapısı araç drift'ini hedefliyor; bu hata modu, agent'ların artık var olmayan ya da farklı parametreler gerektiren araçları çağırması olarak kendini gösteriyor. Lint kuralları ise tool poisoning ve dolaylı prompt injection ile ilgileniyor — OWASP MCP Top 10'ın henüz kodlamaya yeni başladığı riskler. Uyarılar gerçek — sansürleme ve lint sezgisel yöntemlere dayanıyor — ama bir agent test paketi için credential gerektirmeyen, çevrimdışı bir varsayılan olarak bu yaklaşım, genç bir ekosisteme pratik bir katkı.

  • #mcp
  • #testing
  • #model-context-protocol
  • #ci-cd
  • #developer-tools

İlgili yazılar