Geçen ay bir bankacılık müşterisinde garip bir şey yaşadık. Geliştiriciler, iç sistemlere bağlanan bir AI agent yazmıştı. Demo da fena görünmüyordu… ta ki biri MCP üzerinden eklenen “yardımcı” bir tool’un açıklamasına saklanmış prompt enjeksiyonunu fark edene kadar. Tool adı masumdu. Açıklamanın içinde küçük bir <system> bloğu vardı ve LLM bunu resmen talimat gibi okuyordu.
Agent Governance Toolkit’in (AGT) McpResponseSanitizer bileşeni şu pattern’leri yakalıyor:
- Dahili prompt injection blokları (
<system>,<instructions>vb.) (bu kritik) - Kredi bilgisi sızıntıları — AWS keys, GitHub tokens, connection string’ler — bunu es geçmeyin
- Dışarı veri taşıma URL pattern’leri (özellikle markdown image hack’leri:
) - Kodlanmış payload’lar için Base64 kalıntıları
Daha geçen yılın sonunda bir e-ticaret müşterisinde gördüğümüz vaka tam buydu: agent ürün açıklaması çekiyordu ve açıklamalardan birinde markdown image olarak gizlenmiş exfiltration URL’si vardı. Model bunu render etmek isteyince işler çirkinleşebilirdi; neyse ki kontrol katmanımız vardı da kazaya dönmedi. AGT olsaydı açık konuşayım daha az kod yazardık.
GovernanceKernel: Hepsini Bağlayan Tutkal
Aslında — hayır dur, daha doğrusu, GovernanceKernel, yukarıdaki bileşenleri tek bir DI container’a register eden ve OpenTelemetry ile audit event’lerini publish eden ana sınıf gibi çalışıyor diyelim. Bunu Application Insights veya Azure Monitor’a bağlamak çok rahat oluyor.
Bir de KVKK boyutu var. Tool dönüşünde TC kimlik numarası, IBAN, telefon gibi alanlar geçiyorsa bunların maskelenmesi lazım. AGT’nin sanitizer’ı default olarak bu pattern’leri tanımıyor; Türkçe/Türkiye spesifik regex’ler eklemek gerekiyor. Ben kendi TurkishPiiPatterns sınıfımı yazdım, ileride paylaşmaya da niyetim var.
Startup mı, Enterprise mı?
Küçük bir ekipseniz ve hızlı POC çıkarıyorsanız AGT’nin tamamını kullanmak overkill olabilir. McpSecurityScanner ve McpResponseSanitizer ile başlayın; sadece bunlar bile saldırı yüzeyini ciddi azaltır. Tam policy engine’e geçmek zaman alır.
Enterprise tarafındaysanız tablo farklı. GovernanceKernel‘i ortak bir paket olarak iç NuGet feed’inize koyun ve agent ekiplerinizin büyük çoğunluğunun kullanmasını zorunlu tutun. A2A v1 ile .NET’te Çapraz Platform Agent İletişimi ile birlikte kullanırsanız agent-to-agent iletişimde de aynı politika katmanı geçerli olur.
Pratik Başlangıç Rehberi
Tamam, peki nereden başlayacağız? Benim önerim şu sırayla:
dotnet add package Microsoft.AgentGovernanceile paketi ekleyin; önce production’da değil, test projesinde.- Mevcut MCP sunucularınızın tool tanımlarını
McpSecurityScanner‘dan geçirin. Risk score’lara bakın, şaşıracaksınız. (bence en önemlisi) - En riskli tool’lar için (delete, send, transfer içerenler) YAML policy yazın, manuel onayı zorunlu kılın. (bu kritik)
- Sanitizer’ı LLM’e dönüş yolu üzerine koyun. Burada false positive olabilir, bir hafta gözlemleyin.
- OpenTelemetry’yi Application Insights veya Loki’ye bağlayın, bir dashboard kurun.
İlk haftada bir hayal kırıklığım oldu açıkçası: dokümantasyon hâlâ ham, bazı edge case’ler için kod okumak gerekiyor. Bu konuda GPT-5.5 ve Microsoft Foundry: Kurumsal AI Artık Ciddi yazısında bahsettiğim Foundry tarafının tersine, AGT henüz “şirket içi sample”lar seviyesinde. Ama yön doğru. Biraz daha pişmesi lazım.
Sıkça Sorulan Sorular
AGT, MCP olmadan da çalışır mı?
Ne yalan söyleyeyim, Şu anki sürümde asıl odak MCP üzerine. Ama hani GovernanceKernel ve policy engine aslında oldukça generic — yani kendi tool çağrı sisteminizi yazıyorsanız, custom adapter ile bağlamak mümkün. Açıkçası dökümantasyon bu senaryo için henüz biraz zayıf kalıyor.
Performansa etkisi var mı?
Benim ölçümlerimde gateway pipeline’ı, tool çağrısı başına ortalama 8-15 ms ekliyor. Sanitizer işe dönüş boyutuna göre değişiyor — mesela 10 KB JSON için 5 ms civarında. Production’da pek fark edilmiyor, ama yüksek frekanslı agent’larda batching’i düşünmek gerekebilir bence.
YAML politikalarını GitOps ile yönetebilir mıyım?
Şöyle söyleyeyim, Evet, hatta önerilen yol da zaten bu. Politika dosyalarını ayrı bir repo’da tutun, agent uygulamasına config olarak inject edin. Değişiklikler PR ile gelsin, code review yapılsın. Bu şekilde compliance ekibi de sürece dahil olabiliyor — tecrübeme göre bu kısmı es geçmeyin.
Durun, bir saniye.
AGT açık kaynak mı, ücretsiz mi?
Şu an MIT lisanslı ve ücretsiz. Bence Microsoft’un agent ekosistemini büyütmek için attığı stratejik bir adım bu. Hani ne farkı var diyorsunuz, değil mi? İleride premium özellikler gelir mi, açıkçası bilinmez — ama core kütüphanenin MIT olarak kalacağı anlaşılıyor.
Hangi .NET sürümleri destekleniyor?
.NET 8.0 ve üzeri çalışıyor. .NET Framework ya da .NET 6 desteği yok maalesef. Eğer eski bir uygulamadaysanız, agent katmanını ayrı bir .NET 8 servis olarak ayırmak en pratik çözüm bence.
Kaynaklar ve İleri Okuma
Governing MCP tool calls in .NET with the Agent Governance Toolkit (Microsoft DevBlogs)
Model Context Protocol Resmî Spesifikasyonu
Doğrusu, Microsoft Learn: .NET için AI Geliştirme Dokümantasyonu
Model Context Protocol GitHub Organizasyonu





Prompt enjeksiyonu meselesini çoğu zaman model seviyesinde düşünüyoruz ama governance katmanının ne kadar kritik olduğunu bu yazı güzel özetlemiş. AGT’yi daha önce duymamıştım, .NET tarafında deneyen var mı acaba? Bu arada kontrolü kaybetmeme konusuna ilginiz varsa şu yazı da benzer bir perspektif sunuyor: https://www.askinkilic.com.tr/microsoft-sovereign-private-cloud-azure-local-ile-olcek-buyu/
MCP güvenliği konusunda Türkçe kaynak bulmak gerçekten zordu, tam ihtiyacım olan yazıydı. Prompt enjeksiyonunu governance katmanıyla ele almanız özellikle dikkat çekici, bunu production ortamında denemek istiyorum. AGT’yi daha önce duymamıştım, biraz daha araştıracağım.