Sdílet prostřednictvím


Servery MCP v balíčcích NuGet

NuGet nabízí pohodlný způsob, jak zabalit a distribuovat servery MCP napsané v .NET. Sada C# MCP SDK a .NET nabízejí robustní platformu pro vytváření serverů MCP a NuGet je ideální pro doručování serveru MCP koncovým uživatelům jako místního nástroje. Balíčky specifické pro konkrétní platformu snižují problémy s kompatibilitou za běhu a kompilace AOT může dále zlepšit prostředí koncového uživatele.

Další informace o protokolu MCP (Model Context Protocol) obecně najdete v úvodu na webu MCP. Pokud chcete vytvořit vlastní server MCP a zabalit ho pomocí NuGetu, přečtěte si příručku pro rychlý start.

Použitelné scénáře

Odeslání serveru MCP přes NuGet se nevztahuje na všechny situace. Termín "klient MCP" se používá v tomto dokumentu a odkazuje na aplikaci, která orchestruje interakci mezi agentem AI nebo LLM a voláními provedenými na serveru MCP. Mezi příklady klientů MCP patří Visual Studio Code, Visual Studio, agent kódování GitHub Copilot, Claude Code nebo Kurzor.

Zvažte následující kritéria, abyste zjistili, jestli odeslání serveru MCP jako balíčku NuGet dává smysl:

  • ✅ Chcete, aby váš server MCP běžel místně v systému uživatele (tj. ve stejném kontextu jako klient MCP).
    • Místní servery MCP, jako jsou servery dodávané v balíčcích NuGet, běží ve stejném kontextu jako klient MCP a komunikují s klientem MCP prostřednictvím standardního přenosu vstupně-výstupních operací (stdio). Klient MCP zodpovídá za spuštění místního procesu serveru MCP.
  • ✅ Sada .NET SDK je k dispozici klientovi MCP.
  • ✅ Máte zdroj balíčku NuGet pro hostování balíčku serveru MCP.
    • NuGet.org lze použít k publikování balíčků serveru MCP a poskytuje přizpůsobené prostředí pro procházení a spotřebu MCP. Jakýkoli kanál balíčků NuGet, jako je Azure Artifacts, se ale dá použít k hostování serverů MCP, pokud chcete zachovat balíček serveru MCP jako soukromý.

Výhody používání .NET a NuGetu pro servery MCP

Pro hostování serveru MCP existuje několik výhod použití NuGetu:

  • Oficiální sada SDKsada MCP C# SDK poskytuje známé rozhraní pro implementaci serveru MCP v jazyce C# a usnadňuje zpřístupnění nástrojů klientům MCP.
  • Flexibilní možnosti modulu runtime – sada .NET SDK poskytuje několik možností, jak se server MCP zkompiluje a zabalí. Podrobnosti najdete v části požadavky na runtime.
  • Zjistitelnost a distribuce – NuGet.org nabízí způsob, jak prezentovat server MCP, který umožňuje potenciálním uživatelům najít váš server MCP a snadno ho používat v nástroji VS Code nebo v sadě Visual Studio. NuGet.org podporuje použití vloženého .mcp/server.json objektu k deklarování vstupů a McpServer typu balíčku, aby se servery MCP odlišily od jiných nástrojů nebo balíčků závislostí.
  • Známé pracovní postupy vytváření – pokud už používáte NuGet k vytváření balíčků závislostí, vytvoření a publikování serveru MCP bude velmi podobným zážitkem.

Stažení a spuštění balíčku

Pokud chcete načíst místní server MCP, musí se kód pro server nacházet a stahovat pomocí mechanismu (protokolu) specifického pro ekosystém balíčků. To se obvykle provádí příkazem "single-shot", který vezme název balíčku a argumenty ke stažení a následnému spuštění balíčku jako aplikace příkazového řádku.

Pro servery MCP založené na NuGetu doporučujeme k získání a spuštění balíčku použít dnx (nový příkaz expedovaný v .NET 10 Preview 6). dnx v současné době se dodává se sadou .NET SDK, ale existuje diskuze o zahrnutí dnx do modulu runtime .NET.

Příkaz pro spuštění serveru MCP by vypadal nějak takto:

dnx NuGet.Mcp.Server@0.1.2-preview --yes

Proměnné prostředí a argumenty příkazového řádku je možné použít ke konfiguraci serveru MCP vlastními způsoby. Tyto vstupy umožňují přizpůsobit chování serveru MCP tak, aby vyhovovaly konkrétním potřebám.

Tím stáhnete NuGet.Mcp.Server balíček verze 0.1.2-preview z nakonfigurovaných zdrojů balíčků (ve výchozím nastavení NuGet.org) a spustíte nástroj rozhraní příkazového řádku s obsahem. U serveru MCP se můžou v stderru zobrazovat zprávy protokolu, ale proces pravděpodobně přestane reagovat. To se očekává, protože proces čeká na zprávy protokolu MCP přes stdin z klienta MCP.

Klient MCP obvykle vyvolá tento příkaz prostřednictvím konfigurace MCP specifické pro nástroj, jako například soubor mcp.json používaný Visual Studio Code a Visual Studio.

Všechny tyto nástroje podporují instalaci alternativních zdrojů. Podporuje například dnx instalaci z Azure DevOps pomocí parametru --source, což umožňuje využívání privátních serverů MCP, pokud jsou nakonfigurovány potřebné přihlašovací údaje či poskytovatelé těchto údajů.

Požadavky na runtime

Po stažení balíčku je potřeba modul runtime ke spuštění kódu uvnitř balíčku. Balíčky nástrojů .NET (a servery MCP založené na rozšíření NuGet) podporují řadu možností, jak se nástroj kompiluje a zabalí. Tyto možnosti vám, autorem serveru MCP, umožňují rozhodnout, které požadavky na runtime by se měly umístit na uživatele vašeho serveru MCP.

Existují tři hlavní možnosti, jak zabalit server MCP:

  1. Závislé na rozhraní: Vyžaduje, aby klient MCP získal přístup k kompatibilnímu modulu runtime .NET. Pokud se dnx používá ke stažení a spuštění balíčku, bude k dispozici běhové prostředí.
  2. Samostatný: Zahrnuje runtime do balíčku. Pomocí oříznutí můžete zmenšit velikost balíčku. Samostatné nástroje .NET používají <PublishSelfContained>true</PublishSelfContained>.
  3. Předem zkompilovaný (AOT): Samostatný balíček s aktivovanou kompilací AOT. Další informace najdete v nativním nasazení AOT . Nástroje AOT .NET používají <PublishAot>true</PublishAot>.

Pro servery MCP doporučujeme použít možnost 2 (samostatný balíček bez AOT), protože eliminuje potřebu jakékoli konkrétní verze modulu runtime .NET, která se nachází v uživatelském prostředí. Pokud můžete zaručit kompatibilní verzi modulu runtime v zamýšleném spouštěcím prostředí, je možnost č. 1 rozumná. Možnost č. 3 (použití AOT) je také dobrou volbou, ale vyžaduje, aby váš kód a jeho závislosti byly kompatibilní s AOT kompilací. Sada SDK C# MCP je kompatibilní s AOT, ale jiné závislosti, které chcete použít, ještě nemusí být kompatibilní s AOT.

Pokud chcete použít nejnovější doporučené výchozí hodnoty, zvažte použití mcpserver šablony v balíčku šablon Microsoft.Extensions.AI.Templates .

Porovnání s jinými ekosystémy

Další ekosystémy mají podobné požadavky a pracovní postupy pro balení a spouštění serverů MCP:

  • NuGet/.NET: Pomocí dnx příkazu stáhne a spustí balíčky nástrojů .NET. Vyžaduje sadu .NET SDK pro dnx. Do balíčku je možné sbalit další závislosti modulu runtime.
  • npm: Pomocí npx příkazu stáhne a spustí balíčky npm a nainstaluje závislosti přechodně. Vyžaduje Node.js.
  • Python: Pomocí uvx příkazu stáhne a spustí balíčky Pythonu a nainstaluje závislosti přechodně. Vyžaduje běhové prostředí Pythonu.
  • Docker: Pomocí docker run příkazu stáhne a spustí image. Vyžaduje Docker Engine. Image Dockeru můžou cílit na několik architektur procesoru a poskytují vynikající izolaci, ale obecně jsou větší než balíčky NuGet, npm nebo Python.

Ve všech těchto případech musí mít klient MCP potřebný nástroj specifický pro ekosystém (např dnx. , npx) ke stažení a spuštění serveru MCP založeného na balíčku.