硬币翻转工具

一个用于学习Model Context Protocol (MCP)服务器的最小化C#实现,提供硬币翻转功能。

  • by Fabricari
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 Fabricari/poc-coin-flip-mcp-server

使用说明

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代码中使用此服务器

  1. 构建服务器以使DLL存在:
dotnet build CoinFlip.sln
  1. 确认 .vcode/mcp.json 包括此服务器条目:
{
	"servers": {
		"coin-flip": {
			"type": "stdio",
			"command": "dotnet",
			"args": [
				"${workspaceFolder}/CoinFlip.McpServer/bin/Debug/net10.0/CoinFlip.McpServer.dll"
			]
		}
	}
}
  1. 打开Copilot聊天并切换到 代理 模式。
  2. 检查可用工具并验证 coin_flip 出现。
  3. 使用如下提示进行测试: Call coin_flip once and return only the result.

关于DLL路径

${workspaceFolder} 由VS Code自动解析到您当前的repo根目录。你通常不应该改变它。

如果移动项目文件夹或更改目标框架输出路径,则只需要更新路径的其余部分。

换句话说,VS Code只需要一个可以启动的命令+可执行目标;它不需要DLL保留在项目输出文件夹中。

测试正在检查什么(以及为什么)

测试在 CoinFlip。McpServer。测试/CoinFlipInvocationTests.cs 是集成测试,旨在验证实际使用边界处的MCP行为。

他们检查:

  1. 可以定位服务器进程目标。
  2. MCP工具发现包括 coin_flip.
  3. MCP工具调用返回有效结果(heads 或 tails).
  4. 一个小的理智循环在重复调用时观察这两种结果。

为什么这很重要:这些测试确认服务器可以通过MCP传输(与VS Code等主机使用的样式相同)启动和使用,而不仅仅是内部方法返回值。

运行测试

dotnet test

故障排除

  • coin_flip 工具列表中缺少:
    1. 跑 dotnet build CoinFlip.sln.
    2. 确认DLL存在于以下位置之一:
      • ${workspaceFolder}/CoinFlip.McpServer/bin/Debug/net10.0/CoinFlip.McpServer.dll,或
      • 如果直接映射到DLL,则使用绝对路径。
    3. 在 .vcode/mcp.json,确认:
      • "command": "dotnet"
      • "args": ["<path-to-CoinFlip.McpServer.dll>"] (单个DLL路径参数)
    4. 重新加载VS代码窗口,然后再次检查代理工具。
  • 如果您直接映射了一个绝对DLL路径,但它仍然没有出现,请切换回上面显示的工作区相对路径,以排除过时或不正确的绝对路径。
  • 每次工具审批提示:在VS Code MCP工具权限中,设置 coin_flip 始终允许此工作区/会话。