CoinFlip
这个存储库是一个以学习为重点的概念证明,用于在C#中构建最小模型上下文协议(MCP)服务器。目标是了解MCP的端到端管道:如何启动本地流程,如何宣传工具,以及工具调用如何通过stdio传输。
服务器有意保持小型化和可预测性。它暴露了一个工具, coin_flip,返回 heads 或 tails.
先决条件
开始之前,请安装:
- .NET SDK 10(
dotnet --version应该打印10.x) - VS Code
- 启用代理模式的VS代码的GitHub Copilot扩展
存储库结构
PoC Coin Flip MCP/
├── CoinFlip.sln # Solution file for build/test commands
├── README.md # Project overview and usage notes
├── Docs/ # Planning notes and project guidance
├── .vscode/ # Local MCP host/editor configuration
├── CoinFlip.McpServer/ # C# console MCP server implementation
└── CoinFlip.McpServer.Tests/ # Integration tests invoking MCP transport快速入门(克隆后)
从存储库根目录:
dotnet restore
dotnet build CoinFlip.sln
dotnet test如果测试通过,则本地设置良好。
如何在VS代码中使用此服务器
- 构建服务器以使DLL存在:
dotnet build CoinFlip.sln- 确认 .vcode/mcp.json 包括此服务器条目:
{
"servers": {
"coin-flip": {
"type": "stdio",
"command": "dotnet",
"args": [
"${workspaceFolder}/CoinFlip.McpServer/bin/Debug/net10.0/CoinFlip.McpServer.dll"
]
}
}
}- 打开Copilot聊天并切换到 代理 模式。
- 检查可用工具并验证
coin_flip出现。 - 使用如下提示进行测试:
Call coin_flip once and return only the result.
关于DLL路径
${workspaceFolder} 由VS Code自动解析到您当前的repo根目录。你通常不应该改变它。
如果移动项目文件夹或更改目标框架输出路径,则只需要更新路径的其余部分。
换句话说,VS Code只需要一个可以启动的命令+可执行目标;它不需要DLL保留在项目输出文件夹中。
测试正在检查什么(以及为什么)
测试在 CoinFlip。McpServer。测试/CoinFlipInvocationTests.cs 是集成测试,旨在验证实际使用边界处的MCP行为。
他们检查:
- 可以定位服务器进程目标。
- MCP工具发现包括
coin_flip. - MCP工具调用返回有效结果(
heads或tails). - 一个小的理智循环在重复调用时观察这两种结果。
为什么这很重要:这些测试确认服务器可以通过MCP传输(与VS Code等主机使用的样式相同)启动和使用,而不仅仅是内部方法返回值。
运行测试
dotnet test故障排除
coin_flip工具列表中缺少:
1. 跑 dotnet build CoinFlip.sln. 1. 确认DLL存在于以下位置之一: - ${workspaceFolder}/CoinFlip.McpServer/bin/Debug/net10.0/CoinFlip.McpServer.dll,或 - 如果直接映射到DLL,则使用绝对路径。 1. 在 .vcode/mcp.json,确认: - "command": "dotnet" - "args": [" "] (单个DLL路径参数) 1. 重新加载VS代码窗口,然后再次检查代理工具。
- 如果您直接映射了一个绝对DLL路径,但它仍然没有出现,请切换回上面显示的工作区相对路径,以排除过时或不正确的绝对路径。
- 每次工具审批提示:在VS Code MCP工具权限中,设置
coin_flip始终允许此工作区/会话。
