.NET’te MCP Sunucularından Agent Skill Keşfi
Microsoft Agent Framework tarafında Agent Skills, artık uygulamanın içine gömülmek yerine bir Model Context Protocol (MCP) sunucusundan dinamik olarak keşfedilebiliyor..NET geliştiricileri için bu yetenek, Microsoft.Agents.AI.Mcp paketiyle birlikte kullanıma sunuldu. Bir ajanı MCP sunucusuna yönlendirdiğinizde, ihtiyaç duyduğu skill’leri talep üzerine oradan çekiyor; yani her ajanın kendi paketinde skill klasörü taşımasına ya da yeni bir dağıtım yapılmasına gerek kalmıyor.
MCP tabanlı skill’ler ne anlama geliyor?
Bir Agent Skill; talimatlar, kaynaklar ve betiklerden oluşan taşınabilir bir paket. Progressive disclosure (kademeli açığa çıkarma) modeliyle çalışıyor: ajan önce her skill’in kısa bir tanıtımını görüyor, göreve uygun olduğunda ise tam içeriği ve kaynakları yüklüyor.
MCP tabanlı skill’ler aynı prensibi izliyor, ancak içerik yerel diskte ya da kod içinde değil, MCP sunucusunda duruyor. Sunucu, sahip olduğu skill’leri skill://index.json adresindeki bir keşif belgesi üzerinden ilan ediyor. Framework de kimlik doğrulaması yapılmış MCP bağlantısı üzerinden bu içeriği çekiyor.
.NET tarafında iki dağıtım biçimi destekleniyor:
- skill-md: Sunucu,
SKILL.mddosyasını ve yanındaki kaynakları MCP kaynakları olarak sunar. Framework, ajan skill’i yüklerken bu dosyaları teker teker, ihtiyaç oldukça getirir. - archive: Skill tek bir arşiv (ZIP, TAR ya da gzip’li TAR) olarak paketlenir. Framework arşivi indirir, denetimli bir dizin altına açar ve içindeki dosyaları sunar.
Her iki tür de aynı builder API üzerinden tüketildiği için ajan tarafındaki kod, paketleme biçimine göre değişmiyor.
Merkezi dağıtımın getirileri
MCP tabanlı skill’lerin ana avantajı, uzmanlık paketini bir kez yazıp birden fazla ajana servis edebilmek. Bir platform ya da alan ekibi skill’leri MCP sunucusuna yayımlar; bağlanan her ajan bunları paketleme veya klasör kopyalama ihtiyacı duymadan alır.
Sunucudaki içerik güncellendiğinde, bağlı ajanlar bir sonraki keşif adımında yeni sürümü görüyor. Politikalar ve playbook’lar her uygulamada ayrı ayrı değil, tek bir sunucu üzerinde evriliyor. Bu da “her ekibin kendi masraf politikası kopyasını tuttuğu” bir düzenden, “tek bir masraf politikası olduğu ve herkesin onu kullandığı” bir düzene geçmek anlamına geliyor.
Uzaktan gelen içeriğe rağmen skill’ler yereldekiyle aynı progressive disclosure disiplinini koruyor; arşiv çıkarma ve betik çalıştırma için ayrı kontroller devreye giriyor.
Başlarken: paketi ekleyip sağlayıcıyı kurmak
MCP tabanlı skill’ler için Microsoft.Agents.AI.Mcp NuGet paketi gerekiyor:
dotnet add package Microsoft.Agents.AI.Mcp --prerelease
Microsoft, API’nin şu an deneysel olduğunu ve MCP skills spesifikasyonu olgunlaştıkça değişebileceğini belirtiyor.
Bir MCP istemcisini skill’leri barındıran sunucuya bağladıktan sonra, AgentSkillsProviderBuilder üzerindeki UseMcpSkills uzantı metoduyla bu bağlantıyı bir kaynak olarak ekliyorsunuz:
using Microsoft.Agents.AI;
using ModelContextProtocol.Client;
await using McpClient client = await McpClient.CreateAsync(
new StdioClientTransport(new()
{
Name = "skills-server",
Command = "dotnet",
Arguments = [skillsServerPath, "--server"],
}));
var skillsProvider = new AgentSkillsProviderBuilder()
.UseMcpSkills(client)
.Build();
Sağlayıcıyı ajana context provider olarak veriyorsunuz; böylece framework, sunucudaki skill’leri ajana tanıtıyor ve ajan bunları yerel skill’lermiş gibi yükleyip okuyabiliyor:
using Azure.AI.OpenAI;
using Azure.Identity;
using OpenAI.Responses;
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
.GetResponsesClient()
.AsAIAgent(new ChatClientAgentOptions
{
Name = "SkillsAgent",
ChatOptions = new()
{
Instructions = "You are a helpful assistant. Use available skills to answer the user.",
},
AIContextProviders = [skillsProvider],
},
model: deploymentName);
AgentResponse response = await agent.RunAsync(
"Summarize our expense reimbursement limits for international travel.");
Console.WriteLine(response.Text);
skill-md tipindeki bir skill için framework, ajan skill’i yüklediğinde SKILL.md‘yi sunucudan çekiyor. archive tipinde ise indirdiği ve yerelde açtığı arşivi kullanıyor. Referans verilen kaynaklar ise ihtiyaç anında okunuyor.
Kullanım senaryosu: birden fazla ajan için merkezi skill sunucusu
Bir platform ekibinin masraf politikası, olay müdahale runbook’ları ve veri sınıflandırma rehberi gibi operasyonel bilgileri sahiplendiğini düşünelim. Bunlar bir MCP sunucusunda skill-md skill’leri olarak barındırılıyor. Bir finans asistanı, bir on-call yardımcı botu ve bir veri yönetişim ajanı; aynı UseMcpSkills(client) çağrısıyla bu sunucuya bağlanıyor.
Üç ajan da bu skill’leri kendi paketinde taşımıyor. Platform ekibi masraf politikasını sunucuda güncellediğinde, her üç ajan da bir sonraki keşif turunda değişikliği alıyor; ekipler arası koordineli bir sürüm yayınlamaya gerek kalmıyor.
UseMcpSkills, builder’a bir kaynak eklediği için yerel skill’lerle aynı sağlayıcı içinde birleştirilebiliyor. Bir ajan hem kendi dosya tabanlı skill’lerini taşıyabilir hem de sunucudan paylaşılanları çekebilir:
var skillsProvider = new AgentSkillsProviderBuilder()
.UseFileSkill(Path.Combine(AppContext.BaseDirectory, "local-skills"))
.UseMcpSkills(client)
.Build();
Microsoft Foundry Toolbox da bu modele dahil. Kuruluşunuz skill’leri Foundry Skills API üzerinden yönetip bir toolbox’a bağlıyorsa, UseMcpSkills ilgili toolbox’un MCP uç noktasına diğer sunucularda olduğu gibi bağlanıyor. Skill’ler Foundry’de yazılıp sürümleniyor,.NET ajanları ise ek entegrasyon işi olmadan bunları MCP üzerinden keşfediyor.
Kullanım senaryosu: skill’i arşiv olarak güvenli dağıtmak
Bazı skill’ler şablonlar, arama tabloları, kontrol listeleri gibi birçok yardımcı dosyayı bir arada taşır. Bunları tek bir archive girişi olarak servis etmek, paketin tek indirmede iletilmesine olanak tanıyor. Ancak arşiv çıkarma uzaktan gelen içeriği yerel diske yazdığı için sınırlamalar gerekiyor: bir arşiv beklediğinizden büyük olabilir, açıldığında dramatik biçimde şişebilir ya da kabul etmek istemediğiniz kadar çok dosya içerebilir. Sınır olmadığında bozuk veya kötü niyetli bir arşiv; diski, belleği veya CPU’yu tüketebilir.
Bu nedenle AgentMcpSkillsSourceOptions, arşivin çıkarılıp servis edilmeden önce ne kadarını kullanabileceğini net biçimde sınırlamanıza olanak tanıyan seçenekler sunuyor:
using Microsoft.Agents.AI;
var skillsProvider = new AgentSkillsProviderBuilder()
.UseMcpSkills(client, new AgentMcpSkillsSourceOptions
{
ArchiveSkillsDirectory = Path.Combine(AppContext.BaseDirectory, "extracted-skills"),
ArchiveMaxFileCount = 50,
ArchiveMaxSizeBytes = 2 * 1024 * 1024,
ArchiveMaxUncompressedSizeBytes = 4 * 1024 * 1024,
})
.Build();
Seçeneklerin her biri belirli bir istismar sınıfına karşı koruma sağlıyor:
- ArchiveMaxSizeBytes: İndirilen arşivin boyutunu sınırlar, aşırı büyük yük göndermeye karşı koruma sağlar.
- ArchiveMaxUncompressedSizeBytes: Açılmış toplam boyutu sınırlar; hat üzerinde küçük ama diskte gigabaytlara varan “decompression bomb” arşivlerine karşı koruma sağlar.
- ArchiveMaxFileCount: Tek bir arşivin içerebileceği dosya sayısını sınırlar, aşırı dosya sayısına karşı koruma sağlar.
Framework arşivi indirir, bu limitlere göre doğrular, ArchiveSkillsDirectory altına açar ve elde edilen SKILL.md ile kaynakları servis eder. Sınırlardan birini aşan bir arşiv atlanır; güvenilmeyen bir sunucu skill dağıtımını host makineyi bunaltmak için kullanamıyor.
Arşiv betikleri asla çalıştırılmaz
Uzaktan gelen içerik için önemli bir güven sınırı daha var: arşiv tipi skill’ler içindeki betikler asla çalıştırılmıyor. Uzaktaki bir MCP sunucusundan indirilen çalıştırılabilir içerik, tasarım gereği güvenilmez kabul ediliyor. Framework skill’in talimatlarını ve kaynaklarını servis ediyor, ancak betiklerini işletmiyor.
Skill yönetişimi modelinin geri kalanı da geçerliliğini koruyor. load_skill, read_skill_resource ve run_skill_script gibi skill araçları varsayılan olarak onay istiyor ve ajan bir işlem yapmadan önce insan denetimi kontrol noktası sağlıyor.
Kopya yönetmekten kaynak yönetmeye
MCP tabanlı skill’ler, Agent Skills’i uygulama içine gömdüğünüz bir şey olmaktan çıkarıp dağıttığınız bir şeye dönüştürüyor. Skill’i bir kez yazıyor, MCP sunucusunda barındırıyor ve her ajanın talep üzerine keşfetmesine izin veriyorsunuz; merkezi güncelleme, merkezi yönetişim ve aynı tüketim modeli hem skill-md hem de archive için geçerli. Ortak alan bilgisine dayanan çok sayıda ajan geliştiren ekipler için bu, kopyaları yönetmek ile kaynağı yönetmek arasındaki farkı ifade ediyor.
Kaynaklar ve İleri Okuma
- Discover Agent Skills from MCP servers in.NET – Microsoft DevBlogs
- MCP tabanlı skill’ler dokümantasyonu (C#)
- Örnek proje: Agent_Step06_McpBasedSkills
- Microsoft Foundry’de Skills
- agentskills.io
- Agent Skills for.NET Is Now Released
- Agent Skills in.NET: three ways to author, one provider to run them
- Agent Skills for.NET Kararlı Sürümde: Uzmanlık Artık Paketli
- .NET Agent Skills: Üç Yöntem, Tek Sağlayıcı







Yorum gönder