NuGet 提供方便的方式來封裝和散發以 .NET 撰寫的 MCP 伺服器。 C# MCP SDK 和 .NET 提供強大的平臺來建置 MCP 伺服器,而 NuGet 非常適合將 MCP 伺服器作為本機工具提供給終端使用者。 獨立的平臺特定套件可減少運行時間相容性問題,而 AOT 編譯可以進一步改善用戶體驗。
如需模型內容通訊協定(MCP)一般的詳細資訊,請參閱 MCP 網站上的簡介。 若要建立您自己的 MCP 伺服器並使用 NuGet 進行封裝,請參閱 快速入門指南。
適用的案例
透過 NuGet 寄送 MCP 伺服器並不適用於所有情況。 本檔使用「MCP 用戶端」一詞,並是指協調 AI 代理程式或 LLM 與 MCP 伺服器呼叫之間互動的應用程式。 MCP 用戶端的一些範例包括 Visual Studio Code、 Visual Studio、 GitHub Copilot 編碼代理程式、Claude Code 或 Cursor。
請考慮下列準則,以判斷將您的 MCP 伺服器作為 NuGet 套件是否合理:
-
✅ 您希望 MCP 伺服器在使用者的 系統上本地執行 (也就是,在與 MCP 用戶端相同的環境中)。
- 本機 MCP 伺服器,例如 NuGet 套件中隨附的伺服器,會以與 MCP 用戶端相同的內容執行,並透過標準 IO (stdio) 傳輸與 MCP 用戶端通訊。 MCP 用戶端負責啟動本機 MCP 伺服器進程。
-
✅ MCP 用戶端可以使用 .NET SDK。
- NuGet MCP 伺服器是 .NET 工具套件,會使用
dnx.NET SDK 安裝和執行。
- NuGet MCP 伺服器是 .NET 工具套件,會使用
-
✅ 您有一個 NuGet 套件源來托管您的 MCP 伺服器套件。
- NuGet.org 可用來發佈 MCP 伺服器套件,並提供量身訂做的 MCP 瀏覽和取用體驗。 不過,如果您希望將 MCP 伺服器套件保持為私人,任何 NuGet 套件報表,例如 Azure Artifacts,都仍然可供用來部署 MCP 伺服器。
針對 MCP 伺服器使用 .NET 和 NuGet 的優點
使用 NuGet 裝載 MCP 伺服器有數個優點:
- 官方 SDK - MCP C# SDK 提供熟悉的介面,可讓您在 C# 中實作 MCP 伺服器,並輕鬆地向 MCP 用戶端公開工具。
- 彈性運行時間選項 - .NET SDK 提供數個選項,讓您 MCP 伺服器如何編譯和封裝。 如需詳細資訊,請參閱 運行時間需求 一節。
-
可被發現性與分發 - NuGet.org 提供一種方式來呈現您的 MCP 伺服器,使潛在用戶能夠找到您的 MCP 伺服器,並從 VS Code 或 Visual Studio 中輕鬆使用它。 NuGet.org 鼓勵使用內嵌
.mcp/server.json宣告輸入和McpServer套件類型,以允許 MCP 伺服器與其他工具或相依性套件區別。 - 熟悉的撰寫工作流程 - 如果您已經使用 NuGet 來建立相依性套件,建立和發佈 MCP 伺服器將會是非常類似的體驗。
套件下載和執行
若要擷取本機 MCP 伺服器,伺服器的程式代碼必須使用套件生態系統專屬的機制(通訊協定)來找到並下載。 這通常是使用「單次」命令來完成,此命令會採用套件名稱和自變數來下載,然後以命令行應用程式的形式執行套件。
針對 NuGet 型 MCP 伺服器,我們建議使用 dnx (.NET 10 Preview 6 隨附的新命令)來取得和執行套件。
dnx 目前隨附於 .NET SDK,但 正在討論是否包含在 .NET 執行環境中的 dnx。
啟動 MCP 伺服器的命令看起來會像這樣:
dnx NuGet.Mcp.Server@0.1.2-preview --yes
環境變數和命令行自變數都可用來以自定義方式設定 MCP 伺服器。 這些輸入可讓您自定義 MCP 伺服器的行為,以符合特定需求。
這會從您設定的套件來源下載 NuGet.Mcp.Server 版本 0.1.2-preview 套件(預設為 NuGet.org),並啟動自主 CLI 工具。 若為 MCP 伺服器,您可能會看到記錄訊息出現在 stderr 中,但程式似乎會停止回應。 這是預期的,因為程式正在等候來自 MCP 用戶端 stdin 的 MCP 通訊協定訊息。
一般而言,您的 MCP 用戶端會透過工具特定的 MCP 組態叫用此命令,例如 mcp.json Visual Studio Code 和 Visual Studio 所使用的檔案。
所有這些工具都支援安裝替代來源。 例如, dnx 只要設定所需的認證或認證提供者,即可使用 --source 參數從 Azure DevOps 安裝,以允許取用私人 MCP 伺服器。
執行階段需求
下載套件之後,需要運行時間才能在封裝內執行程序代碼。 .NET 工具套件(以及以 NuGet 為基礎的 MCP 伺服器)支援多種編譯和封裝工具的選項。 這些選項可讓您 MCP 伺服器作者決定哪些運行時間需求應該放在 MCP 伺服器的使用者上。
如何封裝 MCP 伺服器有三個主要選項:
-
架構相依:需要 MCP 用戶端能夠存取相容的 .NET 運行時間。 如果使用
dnx下載和執行套件,則會提供運行時間。 -
獨立式:將運行時間與套件組合在一起。
使用修剪 可減少封裝的大小。 獨立式 .NET 工具使用
<PublishSelfContained>true</PublishSelfContained>。 -
預先編譯 (AOT) :已啟用 AOT 編譯的自封套件。 如需詳細資訊,請參閱 原生 AOT 部署 。 AOT .NET 工具使用
<PublishAot>true</PublishAot>。
針對 MCP 伺服器,我們建議使用選項 #2 (不含 AOT 的自封套件),因為它不需要在使用者環境中出現任何特定的 .NET 運行時間版本。 如果您可以在預定的執行環境中保證相容的運行時間版本,選項 #1 是合理的。 選項 #3 (使用 AOT) 也是一個很好的選項,但它會強制您或您的相依性讓您的程式代碼與 AOT 編譯相容。 C# MCP SDK 與 AOT 相容,但您打算使用的其他相依性可能尚未與 AOT 相容。
請考慮使用 mcpserverMicrosoft.Extensions.AI.Templates 範本 套件中的範本,以使用最新的建議預設值。
與其他生態系統的比較
其他生態系統對於封裝和執行 MCP 伺服器有類似的需求和工作流程:
-
NuGet/.NET:使用
dnx命令來下載和執行 .NET 工具套件。 需要 .NET SDK 用於dnx。 其他運行時間相依性可以配套到套件中。 -
npm:使用
npx命令來下載和執行 npm 套件,並以可轉移方式安裝相依性。 需要 Node.js。 -
Python:使用
uvx命令來下載和執行 Python 套件,並以可轉移方式安裝相依性。 需要 Python 運行時間。 -
Docker:使用
docker run命令來下載和執行映像。 需要 Docker 引擎。 Docker 映像可以以多個 CPU 架構為目標,並提供絕佳的隔離,但通常大於 NuGet、npm 或 Python 套件。
在這些情況下,MCP 用戶端必須具備必要的生態系統特定工具(例如 dnx, npx)才能下載和執行套件型 MCP 伺服器。