[McpServerToolType] publicstaticclassEchoTool { [McpServerTool, Description("Echoes the input back to the client.")] publicstaticstringEcho(string message) { return"hello " + message; } }
我们可以选择 Transport Type 为 SSE,URL 为我们 web server 的地址 /sse,默认 path 是 sse 然后点击 Connect 按钮即可
Connect 成功之后,下面会显示 Connected,然后我们可以点击中间的 List Tools 去向 server 请求支持的 tools,之后会列出来 server 支持的 tool,我们可以点击任意一个 tool 在右侧会出现对应的参数信息,我们填写之后点击 Run Tool 就可以调用 server 端的这个 tool
toolsecho-tooltranslation-toolcsharp-exec
除了 mcp inspector 和 Claude 目前也有一些 chat 工具支持了 mcp tool,我目前有用 Cherry Studio,已经支持了 Mcp Tool,我们也可以在 Cheery Studio 中试一下(如果之前已经安装但是没有 Mcp Server 支持,推荐更新到最新版本)
CherryStudio McpServer Configure
类似地,我们添加 Mcp Server 的时候可以选择 SSE 并填写刚才的 URL,最早支持 MCP 的版本没有列出来可以调用的工具,在新版本里列出来了可用的工具,更加直观和方便了
接着我们在聊天窗口中也需要启用一下 Mcp Server,默认没有启用
chat with Mcp Server
然后就可以测试我们的 Mcp Server 了
chery translation
可以看到这里调用了我们 translation tool 并根据返回的结果生成了回答
cherry exec-csharp-code
它背后是怎么实现的呢?我们可以抓个包看一看,在生成返回结果时有两个请求
requests
第一个请求会将当前上下文的信息和启用的 mcp server tools 放在 request 中,请求服务器
这样基于标准输入输出的 Mcp Server 骨架就搭好了,之后就和前面一样实现我们的 tools 就可以了,针对调试和使用也是类似的只是换成 stdio 方式即可,配置示例:
cherry-stdio-mcp-server-sample
Mcp Client
我们也可以基于 SDK 实现 MCP 客户端,示例代码如下:
var client = await McpClientFactory.CreateAsync(new() { Id = "aspnet-sample", Name = "ASP.NET McpServerSample", TransportType = TransportTypes.Sse, Location = "http://localhost:5000/sse", }); // Print the list of tools available from the server. foreach (var tool inawait client.ListToolsAsync()) { Console.WriteLine($"{tool.Name} ({tool.Description})"); } // Execute a tool (this would normally be driven by LLM tool invocations). var result = await client.CallToolAsync( "Echo", new Dictionary<string, object?> { ["message"] = "MCP!" }, CancellationToken.None); // echo always returns one and only one text content object Console.WriteLine(result.Content.First(c => c.Type == "text").Text);
McpClient output这里像 inspector 一样调用 Mcp Server 的工具,如果要做到 Cherry Studio 中在聊天上下文中调用还需要借助大语言模型的能力来实现