deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

mcp-safe-actions, yıkıcı MCP araçlarına kod seviyesinde insan onayı kapıları ekliyor

mcp-safe-actions adlı TypeScript kütüphanesi, yıkıcı MCP araçlarını önizleme ve çalıştırma adımlarına bölüyor ve elicitation ya da tek kullanımlık token yedek yöntemiyle insan onayı gerektiriyor.

mcp-safe-actions, yıkıcı MCP araçlarına kod seviyesinde insan onayı kapıları ekliyor

Prompt'lar rica eden metinlerdir, kontrol mekanizması değil

Saurabh Pathak'ın dev.io'daki (dev.to'daki) yazısı basit bir sav ileri sürüyor: bir ajan system prompt'unda silme işleminden önce sormasını söylemek bir ricadır, dayatma mekanizması değil. Kafa karışmış ya da prompt enjeksiyonuna maruz kalmış bir model, yine de yıkıcı bir aracı kötü argümanlarla çağırabilir. Yazıya göre çözüm sunucu kodunda olmalı ve bunu pratik kılmak için Pathak, tehlikeli MCP araçlarını saran ve bir insan onaylayana kadar etkisiz kalmalarını sağlayan açık kaynak bir TypeScript kütüphanesi olan mcp-safe-actions'ı yayınladı.

MCP, yani Model Context Protocol, yapay zeka ajanlarının harici araçları çağırdığı mekanizmadır. Ajanlar dosya sistemlerine, veritabanlarına ve e-postaya gerçek yazma erişimi kazandıkça, hata türü yanlış cevaplardan yanlış eylemlere kayıyor.

Önizle, onayla, çalıştır

Kütüphanenin temel fikri, yıkıcı bir aracı iki parçaya bölmek. Bir önizleme fonksiyonu tam olarak ne olacağını açıklar — örneğin hangi dosyanın kalıcı olarak silineceğini ve ne kadar büyük olduğunu — ve hiçbir yan etki üretmez. Bir çalıştırma fonksiyonu ise ancak onay verildikten sonra devreye girer. Sarılan araçlar ayrıca destructiveHint bayrağı set edilmiş şekilde kaydedilir, böylece yetenekli client'lar bunları buna uygun şekilde gösterebilir.

İki onay yolu

Client desteği işin pürüzü. MCP'nin yerel bir mekanizması olan elicitation, bir sunucunun client arayüzü üzerinden insana soru sormasını sağlar; ancak her client bunu uygulamaz. Kütüphane iki durumu da ele alıyor.

Client elicitation'ı desteklediğinde, onay isteği client arayüzüne yönlendirilir. Model bu adıma hiç dahil olmadığı için kendi eylemini onaylayamaz; bir red, iptal, zaman aşımı ya da çökme durumunda hiçbir şey çalıştırılmamış olur.

Client elicitation'ı desteklemediğinde, sunucu planı tek kullanımlık bir token ile birlikte döndürür. Asistanın planı kullanıcıya göstermesi ve aracı token ile tekrar çağırması gerekir. Token'ların süresi dolar ve yalnızca aynı argümanlarla çağrılan aynı araç için geçerlidir. Bir mod ayarı — varsayılan olarak auto, elicit ve token ise açık seçenekler olarak — hangi davranışın geçerli olacağını belirler.

Güvenlik kodunun olması gerektiği gibi test edilmiş

Yazıya göre proje 64 testle geliyor: birim testler, bellekte tutulan gerçek bir MCP client ve sunucusuna karşı uçtan uca çalıştırmalar, rastgele üretilmiş 300 argüman nesnesi üzerinde property testleri ve örnek sunucuyu child process olarak başlatan stdio testleri. Kapsamın kaynak dizinin yüzde 100'ü olduğu bildiriliyor ve bir mutation script bilinçli olarak 20 hata yerleştiriyor — bunların arasında tekrar kullanılabilir bir token, hata durumunda onayın atlanması ve log'a sızan gizli bilgiler var — test takımı bunlardan herhangi birini kaçırırsa build başarısız oluyor. 20'nin tamamı yakalandı ve süreç, sonradan düzeltilip belgelenen bir zayıf testi ortaya çıkardı.

Belirtilen sınırlar

Yazı, kütüphanenin neyi garanti etmediği konusunda açık sözlü. Token modu, insana döngüde olduğu kanıtlanmaktan çok modeli yavaşlatır; teknik olarak bir modeli sormadan iki kez çağrı yapmaktan alıkoyan bir şey yoktur. Gerçekten insan kapısı gerektiren her şeyde elicit modu kullanılmalıdır. Önizlemeler dürüst olmalı ve çalıştırma fonksiyonu, önizleme oluşturulduktan sonra değişen durumu yeniden doğrulamalıdır. Kütüphane yalnızca sardığı araçlara kapı koyar — bir sandbox değildir — bu yüzden en az ayrıcalıklı kimlik bilgileri ve girdi doğrulaması hâlâ gerekli. Elicitation davranışı ayrıca client'a ve sürüme göre değişir.

1.2.0 sürümündeki yenilikler

1.2.0 sürümünde, artık npm'de olan, iki ekleme yapıldı. Bir autoApprove seçeneği, düşük riskli çağrıları istemden muaf tutabilen dar kapsamlı, kullanıcı tarafından yazılmış bir fonksiyon kabul eder — ama yalnızca katı bir boolean true insanı atlar; fırlatılan hatalar ya da 'yes' gibi truthy değerler yine istem gösterir ve seçenek elicit modunda tamamen yok sayılır.

Headless sunucular için bir de channel modu var: bir webhookApprover URL'si ile planlar, sizin işlettiğiniz bir servise gönderilir ve onay, approved: true alanı taşıyan bir HTTP 2xx yanıtı gerektirir; hatalar ve zaman aşımları red olarak değerlendirilir. Düz bir Slack incoming webhook cevap döndüremediği için bir aracı servis gerekir.

FastMCP sunucularını hedefleyen bir Python portu, yol haritasında sonraki adım olarak listelenmiş.

Neden önemli

Ajan güvenliği rehberlerinin çoğu hiçbir şeyi bağlamayan prompt kurallarında kalıyor. Bu proje onayı kodda çözülen bir erişim kontrolü sorunu olarak ele alıyor ve token yedeğiyle birlikte önizleme/çalıştırma ayrımı, garantiyi elicitation desteğinden bağımsız olarak client'lar arasında taşınabilir kılıyor. Dürüst tehdit modeli — gerçek bir insan kapısını yavaşlatıcı bir tümsekten ayırmak — tek başına, gözetimsiz şekilde silebilen, gönderebilen veya düşürebilen ajanlar çıkaran herkes için yararlı bir şablon.

  • #model-context-protocol
  • #ai-agents
  • #typescript
  • #human-in-the-loop
  • #open-source

İlgili yazılar