Köprüden Aynı Anda Sadece Bir Araç Geçer: Heimdall MCP 1.5.0 ile Kaynak Kilitleri Geliyor Siber Güvenlik

Köprüden Aynı Anda Sadece Bir Araç Geçer: Heimdall MCP 1.5.0 ile Kaynak Kilitleri Geliyor

Heimdall MCP 1.5.0, aynı dosyaya veya kaynağa eşzamanlı yazma girişimlerini engellemek için kaynak kilitleri sunuyor. MCP sunucu ve ana bilgisayar düz

Aynı depoda iki farklı Claude Code oturumu çalıştırdığınızı düşünün: biri bir modülü yeniden düzenlerken, diğeri üç dosya ötedeki bir yazım hatasını düzeltiyor ama aynı paylaşılan yapılandırma dosyasına dokunuyor. Birkaç yüz milisaniye arayla aynı dosyaya yazmaya karar verdiklerinde, ikinci yazma işlemi sessizce kazanır ve ilk ajanın değişiklikleri kaybolur. Ne yazık ki hiçbir oturum bu durumdan haberdar olmaz. İşte Heimdall MCP 1.5.0 sürümü tam da bu sorunu çözmek için geliyor: kaynak kilitleri.

Heimdall MCP, daha önceki sürümlerinde araç adı politikaları (v1.2) ve argüman düzeyinde politikalar (v1.4) sunmuştu. Örneğin, 'write_file aracının /etc/passwd dosyasına yazmasını engelle' gibi kurallar tanımlanabiliyordu. Ancak bu politikalar, aynı kaynağa aynı anda yapılan iki çağrının ne olacağı sorusuna yanıt vermiyordu. 1.5.0 sürümü, bu boşluğu doldurarak iki farklı düzeyde kaynak kilidi mekanizması getiriyor: MCP sunucu düzeyi ve ana bilgisayar düzeyi.

MCP sunucu düzeyinde kilitler, bir sunucunun mevcut araç ve araç politikaları yanında yeni bir 'locks' bloğu ile tanımlanıyor. Örneğin, 'write_file' aracı için 'path' argümanına dayalı bir kilit tanımlandığında, aynı yola sahip iki yazma çağrısı sıraya girerken farklı yollar için çağrılar birbirini etkilemez. Ayrıca, 'run_migration' gibi araçlar için literal bir anahtar (örneğin 'db-migration') kullanarak tüm çağrıların sıralanması sağlanabilir. Her kural için TTL (zaman aşımı) süresi ve çakışma durumunda 'reddet' veya 'uyar' aksiyonu belirlenebiliyor.

Ana bilgisayar düzeyinde kilitler ise Claude Code'un kendi dosya düzenleme araçları (Write, Edit, MultiEdit, NotebookEdit) için geçerli. Bu araçlar MCP sunucusu değil, doğrudan ajanın içine gömülü olduğu için Heimdall'ın JSON-RPC proxy'sinden geçmezler. 1.5.0 ile gelen 'hosts' alanı sayesinde bu araçlar için de aynı kilit kuralları uygulanabiliyor. Varsayılan olarak @cardor/heimdall-mcp paketi, CLAUDE_CODE_DEFAULT_HOST_POLICY ile bu kilitleri otomatik olarak devreye alıyor.

Önemli Gelişmeler

Bash komutları ise bu kilit mekanizmasının dışında bırakılmış. Çünkü rastgele bir shell komutunun tek ve kararlı bir 'kaynak' argümanı yoktur; hiç dosyaya dokunmayabilir veya birden çok dosyaya dokunabilir. Komut dizesine kilit atmak anlamsız olacağı gibi, tüm Bash çağrılarını küresel olarak kilitlemek de gereksiz yere işleri sıraya sokar.

Nasıl Önlem Alınmalı?

Claude Code'da kilit mekanizması, PreToolUse hook betiği ile çalışır. Her araç çağrısında bu betik, araç adını ve girdisini okuyarak yapılandırmayı tazeler, kilit kuralını eşleştirir ve SQLite tabanlı kilit deposundan (varsayılan ~/.config/heimdall/locks.db) özel bir kilit almaya çalışır. Kilit meşgulse çağrı reddedilir. Kritik olarak, betik 'fail open' prensibiyle çalışır: herhangi bir iç hata durumunda çıkış kodu 0 olur, yani ajanın çalışması asla engellenmez.

OpenCode için ise farklı bir yaklaşım izlenmiş: bir eklenti olarak çalışan betik, aynı kilit mantığını kullanıyor ancak alt süreç yerine doğrudan OpenCode sürecinde çalışıyor. Bu, daha düşük gecikme sağlasa da, eklentinin OpenCode'un iç API'sine bağımlı olması gibi bir dezavantajı beraberinde getiriyor. Heimdall MCP, her iki platformda da kilit mekanizmasını çalıştırmak için gerekli kurulum adımlarını (heimdall-mcp init --hooks claude-code gibi) sağlıyor.

Teknik Analiz

Sonuç olarak, Heimdall MCP 1.5.0, özellikle çoklu ajan ortamlarında çalışan geliştiriciler için kritik bir güncelleme. Aynı kaynağa eşzamanlı yazma girişimlerinden kaynaklanan veri kaybını önlemek, proje bütünlüğünü korumak ve işbirliğini güvenli hale getirmek isteyen herkesin bu aracı değerlendirmesi önerilir. Proje GitHub ve web sitesi üzerinden erişime açık.

Kaynak: dev.to

Paylaş: