Condividi tramite


Server MCP nei pacchetti NuGet

NuGet offre un modo pratico per creare pacchetti e distribuire server MCP scritti in .NET. C# MCP SDK e .NET offrono una solida piattaforma per la creazione di server MCP e NuGet è ideale per distribuire il server MCP agli utenti finali come strumento locale. I pacchetti autonomi specifici della piattaforma riducono i problemi di compatibilità del runtime e la compilazione AOT può migliorare ulteriormente l'esperienza dell'utente finale.

Per altre informazioni sul protocollo MCP (Model Context Protocol) in generale, vedere l'introduzione al sito Web MCP. Per creare un server MCP personalizzato e crearne il pacchetto usando NuGet, vedere la guida introduttiva.

Scenari applicabili

La spedizione del server MCP tramite NuGet non si applica a tutte le situazioni. Il termine "client MCP" viene usato in questo documento e fa riferimento a un'applicazione che orchestra l'interazione tra un agente di intelligenza artificiale o LLM e le chiamate effettuate a un server MCP. Alcuni client MCP di esempio sono Visual Studio Code, Visual Studio, Agente di codifica Di GitHub Copilot, Claude Code o Cursor.

Considerare i criteri seguenti per determinare se la spedizione del server MCP come pacchetto NuGet ha senso:

  • ✅ Si vuole che il server MCP sia eseguito localmente nel sistema dell'utente, ovvero nello stesso contesto del client MCP.
    • I server MCP locali, ad esempio quelli forniti nei pacchetti NuGet, vengono eseguiti nello stesso contesto del client MCP e comunicano con il client MCP tramite trasporto IO standard (stdio). Il client MCP è responsabile dell'avvio del processo del server MCP locale.
  • ✅ .NET SDK è disponibile per il client MCP.
  • ✅ È disponibile un feed di pacchetti NuGet per ospitare il pacchetto server MCP.
    • NuGet.org può essere usato per pubblicare pacchetti server MCP e offre un'esperienza di esplorazione e consumo MCP personalizzata. Tuttavia, qualsiasi feed di pacchetti NuGet, ad esempio Azure Artifacts, può essere usato per ospitare i server MCP se si vuole mantenere privato il pacchetto del server MCP.

Vantaggi dell'uso di .NET e NuGet per i server MCP

L'uso di NuGet per l'hosting del server MCP offre diversi vantaggi:

  • SDK ufficiale : MCP C# SDK offre un'interfaccia familiare per l'implementazione del server MCP in C# e semplifica l'esposizione di strumenti ai client MCP.
  • Opzioni di runtime flessibili : .NET SDK offre diverse opzioni per la compilazione e il pacchetto del server MCP. Per informazioni dettagliate, vedere la sezione relativa ai requisiti di runtime .
  • Individuabilità e distribuzione : NuGet.org offre un modo per presentare il server MCP, consentendo ai potenziali utenti di trovare il server MCP e usarlo facilmente da VS Code o Visual Studio. NuGet.org incoraggia l'uso di un oggetto incorporato .mcp/server.json per dichiarare input e un McpServer tipo di pacchetto per consentire ai server MCP di differenziarsi da altri strumenti o pacchetti di dipendenza.
  • Flussi di lavoro di creazione familiari : se si usa già NuGet per la creazione di pacchetti di dipendenza, la creazione e la pubblicazione di un server MCP saranno un'esperienza molto simile.

Download ed esecuzione dei pacchetti

Per ottenere un server MCP locale, il codice per il server deve essere individuato e scaricato utilizzando un meccanismo (protocollo) specifico per l'ecosistema dei pacchetti. Questa operazione viene in genere eseguita con un comando "single-shot" che accetta il nome e gli argomenti del pacchetto da scaricare e quindi eseguire il pacchetto come applicazione da riga di comando.

Per i server MCP basati su NuGet, è consigliabile usare dnx (un nuovo comando fornito in .NET 10 Preview 6) per acquisire ed eseguire il pacchetto. dnx attualmente viene fornito con .NET SDK, ma è necessario includere dnx nel runtime .NET.

Un comando per avviare un server MCP sarà simile al seguente:

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

Le variabili di ambiente e gli argomenti della riga di comando possono essere usati entrambi per configurare il server MCP in modi personalizzati. Questi input consentono di personalizzare il comportamento del server MCP in base alle esigenze specifiche.

Verrà scaricato il pacchetto NuGet.Mcp.Server di versione 0.1.2-preview dalle origini del pacchetto configurate (NuGet.org per impostazione predefinita) e verrà avviato lo strumento della riga di comando incluso. Per un server MCP, è possibile che vengano visualizzati messaggi di log in stderr, ma il processo sembra bloccarsi. Questo è previsto, poiché il processo è in attesa di messaggi del protocollo MCP tramite stdin dal client MCP.

In genere, il client MCP richiamerà questo comando tramite una configurazione MCP specifica dello strumento, ad esempio il mcp.json file usato da Visual Studio Code e Visual Studio.

Tutti questi strumenti supportano l'installazione di origini alternative. Ad esempio, dnx supporta l'installazione da Azure DevOps usando il --source parametro , consentendo il consumo di server MCP privati, purché siano configurati i provider di credenziali o credenziali necessari.

Requisiti di runtime

Una volta scaricato il pacchetto, è necessario un runtime per eseguire il codice all'interno del pacchetto. I pacchetti di strumenti .NET (e per estensione server MCP basati su NuGet) supportano un'ampia gamma di opzioni per la compilazione e il pacchetto dello strumento. Queste opzioni consentono all'autore del server MCP di decidere quali requisiti di runtime devono essere imposti agli utenti del suo server MCP.

Sono disponibili tre opzioni principali per creare un pacchetto del server MCP:

  1. Dipendente dal framework: richiede che il client MCP abbia accesso a un runtime .NET compatibile. Se dnx viene usato per scaricare ed eseguire il pacchetto, sarà disponibile un runtime.
  2. Indipendente: aggrega il runtime con il pacchetto. L'uso del taglio può ridurre le dimensioni del pacchetto. Gli strumenti .NET indipendenti usano <PublishSelfContained>true</PublishSelfContained>.
  3. Compilato anticipatamente (AOT): pacchetto autonomo con compilazione AOT abilitata. Per altre informazioni, vedere Distribuzione AOT nativa . Gli strumenti .NET AOT usano <PublishAot>true</PublishAot>.

Per i server MCP, è consigliabile usare l'opzione 2 (pacchetto indipendente senza AOT) perché elimina la necessità di una versione specifica del runtime .NET presente nell'ambiente dell'utente. Se è possibile garantire una versione di runtime compatibile nell'ambiente di esecuzione previsto, l'opzione n. 1 è ragionevole. L'opzione 3 (usando AOT) è anche un'opzione valida, ma forza l'utente o le dipendenze a rendere il codice compatibile con la compilazione AOT. C# MCP SDK è compatibile con AOT, ma altre dipendenze che si intende usare potrebbero non essere ancora compatibili con AOT.

Considerare l'utilizzo del modello mcpserver nel pacchetto di modelli Microsoft.Extensions.AI.Templates per utilizzare le impostazioni predefinite più recenti consigliate.

Confronto con altri ecosistemi

Altri ecosistemi hanno requisiti e flussi di lavoro simili per la creazione di pacchetti e l'esecuzione di server MCP:

  • NuGet/.NET: usa il dnx comando per scaricare ed eseguire pacchetti di strumenti .NET. Richiede .NET SDK per dnx. Le dipendenze aggiuntive di runtime possono essere incluse nel pacchetto.
  • npm: usa il npx comando per scaricare ed eseguire pacchetti npm e installare le dipendenze in modo transitivo. Richiede Node.js.
  • Python: usa il uvx comando per scaricare ed eseguire pacchetti Python e installare le dipendenze in modo transitivo. Richiede un runtime Python.
  • Docker: usa il docker run comando per scaricare ed eseguire immagini. Richiede il motore Docker. Le immagini Docker possono essere destinate a più architetture della CPU e offrono un isolamento eccellente, ma in genere sono più grandi dei pacchetti NuGet, npm o Python.

In tutti questi casi, il client MCP deve disporre dello strumento specifico dell'ecosistema necessario (ad esempio dnx, , npx) per scaricare ed eseguire il server MCP basato su pacchetto.