/ 目錄 / 演練場 / MCPSharp
● 社群 afrise ⚡ 即開即用

MCPSharp

作者 afrise · afrise/MCPSharp

在 C#/.NET 中發布 MCP — 使用 [McpTool] 裝飾一個方法,啟動伺服器,完成。 可與 Microsoft.Extensions.AI 和語意核心搭配使用。

MCPSharp 是一個 .NET NuGet 套件,可透過屬性將 C# 方法轉換為 MCP 工具(和資源),也提供用戶端以從 C# 呼叫其他 MCP 伺服器。 它處理 JSON-RPC 管道、自動參數驗證和類型轉換,並從 XML 文件註釋中提取工具描述。 Microsoft.Extensions.AI 和 Semantic Kernel 的一流整合意味著您可以使用最少的樣板將 MCP 工具代理插入到 .NET 應用程式中。

為什麼要用

核心特性

即時演示

實際使用效果

mcpsharp.replay ▶ 就緒
0/0

安裝

選擇你的客戶端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "mcpsharp": {
      "command": "dotnet",
      "args": [
        "add",
        "package",
        "MCPSharp"
      ],
      "_inferred": false
    }
  }
}

開啟 Claude Desktop → Settings → Developer → Edit Config。儲存後重啟應用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "mcpsharp": {
      "command": "dotnet",
      "args": [
        "add",
        "package",
        "MCPSharp"
      ],
      "_inferred": false
    }
  }
}

Cursor 使用與 Claude Desktop 相同的 mcpServers 格式。專案級設定優先於全域。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "mcpsharp": {
      "command": "dotnet",
      "args": [
        "add",
        "package",
        "MCPSharp"
      ],
      "_inferred": false
    }
  }
}

點擊 Cline 側欄中的 MCP Servers 圖示,然後選 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "mcpsharp": {
      "command": "dotnet",
      "args": [
        "add",
        "package",
        "MCPSharp"
      ],
      "_inferred": false
    }
  }
}

格式與 Claude Desktop 相同。重啟 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "mcpsharp",
      "command": "dotnet",
      "args": [
        "add",
        "package",
        "MCPSharp"
      ]
    }
  ]
}

Continue 使用伺服器物件陣列,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "mcpsharp": {
      "command": {
        "path": "dotnet",
        "args": [
          "add",
          "package",
          "MCPSharp"
        ]
      }
    }
  }
}

加入 context_servers。Zed 儲存後熱重載。

claude mcp add mcpsharp -- dotnet add package MCPSharp

一行命令搞定。用 claude mcp list 驗證,claude mcp remove 移除。

使用場景

實戰用法: MCPSharp

將現有 C# 服務公開為 MCP 工具

👤 .NET 商店擁有他們希望 AI 代理程式呼叫的內部函式庫 ⏱ ~30 min intermediate

何時使用: 您有一個可用的 C# 業務庫,並且需要使其可供代理程式存取。

前置條件
  • .NET 8+ SDK — https://dotnet.microsoft.com/download
  • MCPSharp 包 — dotnet 新增套件 MCPSharp
步驟
  1. 裝修方法
    將 [McpTool] 加入我想要在 OrdersService 中公開的公共方法。 保留簽名;讓 MCPSharp 驗證。✓ 已複製
    → 應用屬性,使用 XML 文件作為描述
  2. 啟動伺服器
    新增呼叫 MCPServer.StartAsync("orders", "1.0.0") 的 Program.cs 入口點。✓ 已複製
    → 透過 dotnet run 運行; MCP 用戶端可以發現工具
  3. 連接到 Claude 桌面
    發出一個 claude_desktop_config.json 片段來啟動我的 dotnet 二進位。✓ 已複製
    → 使用 command=dotnet args=[run --project, path] 的設定區塊

結果: 一個 MCP 伺服器,您的 C# 服務能力,幾乎不需要新程式碼。

注意事項
  • 返回大型物體而不對其進行整形 — 回傳 DTO — 不要序列化具有 nav 屬性的 EF 實體,您會破壞回應
搭配使用: fastmcp

使用語意內核代理程式中的 MCP 工具

👤 使用 Microsoft Semantic Kernel 建立代理程式的團隊 ⏱ ~45 min intermediate

何時使用: 您在 SK 上並且想要使用外部 MCP 伺服器的工具。

步驟
  1. 新增客戶端
    新增MCPSharp的客戶端並將遠端伺服器註冊為SK插件。✓ 已複製
    → 工具出現在SK計劃中
  2. 從函數調用
    顯示一個聊天功能,當使用者詢問時,該功能會呼叫遠端工具之一。✓ 已複製
    → 往返:提示→SK選擇工具→MCP呼叫→結果回复

結果: 您的 SK 應用程式可以乾淨地使用任何 MCP 伺服器。

在運行時從插件資料夾註冊工具

👤 交付插件系統或低程式碼產品的團隊 ⏱ ~60 min advanced

何時使用: 使用者放入新的工具定義,而您希望它們無需重新部署即可使用。

步驟
  1. 掃描資料夾
    編寫一個反映每個 .dll 的載入程式並動態註冊 [McpTool] 方法。✓ 已複製
    → 工具出現而無需更改硬編碼列表
  2. 安全熱重載
    新增 AssemblyLoadContext 隔離,以便重新載入不會洩漏。✓ 已複製
    → 重新載入之間卸載舊程式集

結果: 具有適當組裝生命週期的可插入工具集。

注意事項
  • 使用預設載入上下文洩漏程序集 — 使用可收集的 AssemblyLoadContext 進行隔離重新加載

組合

與其他 MCP 搭配,撬動十倍槓桿

mcpsharp + fastmcp

比較 .NET 與 Python MCP 伺服器創作

將我的 Python FastMCP 工具移植到現有 .NET 堆疊的 MCPSharp。✓ 已複製
mcpsharp + csharp-sdk

官方 SDK 與社群包 — 選擇合適的

比較 MCPSharp 和官方 csharp-sdk 以滿足我的需求。✓ 已複製
mcpsharp + azure-ai-gateway

將 C# MCP 伺服器置於 Azure AI 網關策略後面

在我的 MCPSharp 伺服器前面使用 Azure AI 閘道進行驗證/速率限制。✓ 已複製

工具

此 MCP 暴露的能力

工具輸入參數何時呼叫成本
[McpTool] C# method signature 對於您希望代理呼叫的每個方法 0
[McpResource] C# member 當您想要公開可讀資源(文件/資料)而不是工具時 0
[McpParameter] method parameter 標記所需參數並給予參數說明 0
MCPServer.StartAsync name, version 透過 stdio(或配置的傳輸)啟動伺服器 0
MCPClient server address 從 C# 與另一個 MCP 伺服器通信 0

成本與限制

運行它的成本

API 配額
沒有——這是一個圖書館
每次呼叫 Token 數
取決於你的工具;圖書館本身很小
費用
免費(MIT 風格的 OSS)
提示
有意調整回應 DTO——大的 JSON blob 會增加令牌和延遲。

安全

權限、密鑰、影響範圍

憑證儲存: 無論您使用什麼服務(ASP.NET 設定、KeyVault 等)。 MCPSharp 不擁有憑證。
資料出站: 依賴傳輸(stdio 本地;HTTP/遠端(如果配置))。

故障排查

常見錯誤與修復

客戶端未發現工具

確認該方法是公共的,具有 [McpTool],並且屬性名稱與您所呼叫的名稱相符。 另請檢查傳遞給 StartAsync 的伺服器名稱。

驗證: MCPServer.ListTools() at startup
返回時序列化異常

返回 POCO/DTO;避免延遲載入帶有循環引用的 EF 實體和類型。

驗證: Unit test serialization with System.Text.Json
語意內核看不到工具

明確註冊 MCP 插件並確認核心建構者知道;某些 SK 版本需要明確導入。

驗證: Log plugins at startup

替代方案

MCPSharp 對比其他方案

替代方案何時用它替代權衡
csharp-sdk (official)您需要官方 Anthropic/MCP C# SDK不同的人體工學;注意功能差異
fastmcp你更喜歡Python生態係不同
mcp-agent您需要基於 Python 的代理模式,而不僅僅是伺服器創作不是.NET

更多

資源

📖 閱讀 GitHub 上的官方 README

🐙 查看未解決的 issue

🔍 瀏覽全部 400+ MCP 伺服器和 Skills