ABP uygulama servislerini AI ajanları için MCP tool'ları olarak açmak
ABP çözümünüzdeki application service'leri MCP tool'larına dönüştürerek Claude Code, GitHub Copilot veya Cursor gibi ajanların sipariş listeleyip fatura onaylamasını sağlayabilirsiniz. Makale, izinleri, multi-tenancy filtrelerini ve audit log kaydını ABP'nin mevcut altyapısında bırakan yaklaşık 150 satırlık bir pattern kuruyor: ince bir tool sınıfı, /mcp endpoint'i ve OpenIddict bearer token ile kullanıcı adına çalışan ajanlar.
Kilit noktalar
- Her [McpServerTool] metodu var olan bir ABP application service'ini çağırır; izin, tenant filtresi ve audit bu katmanda kalır.
- Servisin interface'ini (IBookAppService) enjekte edin; proxy sayesinde authorization, unit of work ve auditing interceptor'ları devreye girer.
- Entity IMultiTenant uygulamalı; repository CurrentTenant'a göre otomatik filtreler.
- Endpoint, AbpEndpointRouterOptions ile MapMcp("/mcp") üzerinden eklenir; Stateless = true normal middleware pipeline'ı ve load balancer uyumluluğu sağlar.
- Bearer token ile ajan kullanıcı adına çalışır; OpenIddict validation scheme ile anonim istekler 401 alır.
- AbpAuthorizationException'ı yakalayıp modele anlaşılır bir red mesajı döndürün; ReadOnly/Destructive annotation'ları güvenlik değil, yalnızca ipucudur.
ABP 11.0.0-rc.1, .NET 11 RC3 ve Microsoft'un resmi MCP C# SDK'sı (ModelContextProtocol.AspNetCore 2.3.1) ile kurulan pattern, ajanların uygulamanızı bir "AI API" üzerinden değil, mevcut application service'ler üzerinden kullanmasını sağlıyor. Tool sınıfındaki her [McpServerTool] metodu bir application service çağırıyor; böylece [Authorize] kontrolleri, unit of work, multi-tenant veri filtreleri ve audit logging ABP interceptor'ları tarafından otomatik uygulanıyor. Kritik detay, servisin sınıfını değil IBookAppService gibi interface'ini enjekte etmek ve entity'nin IMultiTenant uygulamasını sağlamak.
Endpoint, şablonun module koduna dokunmadan AbpEndpointRouterOptions üzerinden MapMcp("/mcp") ile ekleniyor ve Stateless = true modunda çalışıyor; böylece her istek normal middleware pipeline'ından geçiyor ve load balancer arkasında session affinity gerektirmiyor. Kimlik doğrulama için bearer token kullanılıyor, anonim ajanlar 401 alıyor. Tool sınıfı AbpAuthorizationException'ı yakalayıp modele "DENIED, hiçbir şey değişmedi" mesajı döndürüyor; ReadOnly ve Destructive gibi tool annotation'ları ise yalnızca istemciye ipucu, güvenlik sağlamıyor.
Gerçek dünyada kullanımı
- Sipariş yönetimi yapan bir e-ticaret backend'inde müşteri temsilcisinin Claude Code üzerinden "son 10 siparişi listele, iadeyi onayla" demesi.
- Çok kiracılı bir SaaS muhasebe uygulamasında her tenant'ın ajanının yalnızca kendi faturalarını görmesi ve onaylayabilmesi.
- İç admin paneli olan bir lojistik uygulamasında sevkiyat durumunu güncelleyen tool'ları VS Code veya Cursor'a bağlayarak operasyon ekibinin doğal dille işlem yapması.
- Audit gerektiren bir sağlık veya finans sisteminde ajan çağrılarının AbpAuditLogs üzerinden kim, ne zaman, hangi tool şeklinde izlenmesi.
Neden önemli
Ayrı bir "AI API" yazmak, izin ve tenant sınırlarını atlayan bir arka kapı açar; bu pattern ise ajana tam olarak mevcut güvenlik modelinizin içinden yetki verir, böylece yeni bir yetkilendirme katmanı bakımı gerekmez.