/ 目录 / 演练场 / 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和语义内核的一流集成意味着您可以通过最少的样板将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二进制文件。✓ 已复制
    → 命令= dotnet args = [run --project, path]的配置块

结果: C #服务功能强大的MCP服务器,几乎没有新代码。

注意事项
  • 返回大型物体而不对其进行整形 — 返回DTO —不要使用导航属性序列化EF实体,你会放大响应
搭配使用: fastmcp

使用语义内核代理的MCP工具

👤 使用Microsoft语义内核构建代理的团队 ⏱ ~45 min intermediate

何时使用: 您使用的是SK ,并希望使用外部MCP服务器的工具。

步骤
  1. 客户
    添加MCPSharp的客户端,并将远程服务器注册为SK插件。✓ 已复制
    → 工具出现在SK计划中
  2. 从函数调用
    显示在用户询问时调用其中一个远程工具的聊天功能。✓ 已复制
    → 往返:提示→SK在回复中选择工具→MCP调用→结果

结果: 您的SK应用程序可以干净地使用任何MCP服务器。

在运行时从插件文件夹注册工具

👤 Teams运送插件系统或低代码产品 ⏱ ~60 min advanced

何时使用: 用户会放入新的工具定义,您希望它们无需重新部署即可使用。

步骤
  1. 扫描文件夹
    编写一个反映每个.dll并动态注册[McpTool]方法的加载器。✓ 已复制
    → 工具显示时不更改硬编码列表
  2. 安全热重载
    添加AssemblyLoadContext隔离,以便重新加载不会泄漏。✓ 已复制
    → 旧程序集在重新加载之间卸载

结果: 可插拔工具组,具有适当的组装生命周期。

注意事项
  • 使用默认加载上下文泄漏程序集 — 将可收集的AssemblyLoadContext用于隔离的重新加载

组合

与其他 MCP 搭配,撬动十倍杠杆

mcpsharp + fastmcp

比较.NET与Python MCP服务器创作

将我的Python FastMCP工具移植到现有.NET堆栈的MCPSharp。✓ 已复制
mcpsharp + csharp-sdk

官方SDK vs社区包—选择适合的

根据我的需求比较MCPSharp和官方csharp-sdk。✓ 已复制
mcpsharp + azure-ai-gateway

将C # MCP服务器置于Azure AI网关策略的后面

使用Azure AI网关在MCPSharp服务器前进行身份验证/速率限制。✓ 已复制

工具

此 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 数
取决于您的工具;库本身很小
费用
免费(麻省理工学院式OSS )
提示
有意识地形成响应DTO —大型JSON blob夸大了令牌和延迟。

安全

权限、密钥、影响范围

凭据存储: 无论您的服务使用什么( ASP.NET配置、KeyVault等)。MCPSharp不拥有凭据。
数据出站: 依赖于传输( stdio local ; HTTP/remote ,如果已配置)。

故障排查

常见错误与修复

客户未发现工具

确认该方法是公开的,具有[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