使用说明
# MCP服务器演示
A. 模型上下文协议(MCP)服务器 使用构建的实现 .NET 10 通过 JSON-RPC 2.0 通过stdio传输的接口。
🎯 概述
此项目演示了一个完整的MCP服务器实现,该实现:
- 通过以下方式进行沟通 stdio传输 (stdin/stdout)实现无缝的AI集成
- 用途 JSON-RPC 2.0 请求/响应处理协议
- 动态生成 输入模式 使用反射和数据注释
- 提供 可扩展工具注册表 便于添加工具
非常适合希望为AI助手构建自定义工具或了解MCP服务器架构的开发人员。
✨ 主要特点
| 特性 | 描述 |
|---|---|
| 🔌 MCP集成 | 使用stdio传输实现完整的模型上下文协议 |
| 🛠️ 动态工具注册表 | 自动工具发现和注册系统 |
| 📋 模式生成 | 使用C#反射和验证属性的运行时模式构建器 |
| 🔍 JSON-RPC 2.0 | 完整的协议支持和适当的错误处理 |
| ✅ 验证支持 | 内置 [Required], [Range], [RegularExpression] 属性处理 |
| 📦 示例工具 | 包括生产准备时间和计算工具 |
| 🧪 测试套件 | 10个用于验证的综合测试用例 |
🏗️ 项目结构
MCPServer演示/│ ├── 📄 Program.cs#应用程序入口点和主机配置│ ├── 📁 型号/#JSON-RPC消息模型│ ├── JsonRpcRequest.cs#请求结构(方法、参数、id)│ └── JsonRpcResponse.cs#响应结构(结果,错误)│ ├── 📁 RequestModels/#具有验证功能的工具输入模型│ ├── SumRequest.cs#calculate_sum工具的输入模型│ └── TimeRequest.cs#get_time工具的输入模型│ ├── 📁 工具/│ ├── 📁 接口/│ │ └── ITool.cs#工具合约(名称、描述、架构、执行)│ │ │ ├── 📁 注册表/│ │ └── ToolsRegistry.cs#工具发现、列出和执行│ │ │ ├── SumTool.cs#示例:带验证的添加工具│ └── TimeTool.cs#示例:服务器时间检索│ ├── 📁 服务器/│ ├── MCPServer.cs#核心MCP服务器stdio处理程序│ └── RequestRouter.cs#JSON-RPC路由和方法调度│ ├── 📁 架构生成器/│ └── ClassSchemaBuilder.cs#基于反射的模式生成器│ └── 📄 Test_input_on_stdio.txt#带有预期输出的手动测试用例
🚀 入门指南
先决条件
- .NET 10 SDK (下载)
- Visual Studio 2022+ 或 VS Code C#扩展
- 基本了解JSON-RPC和MCP协议(可选)
安装
- 克隆存储库
- 恢复依赖关系
dotnet restore
- 构建项目
dotnet build
- 运行服务器
dotnet run
服务器将开始监听 标准输入 并回应 标准输出.
🧪 测试服务器
通过控制台进行手动测试
服务器通过stdin接受JSON-RPC请求。您可以手动测试它:
1.列出可用工具
{"jsonrpc": "2.0", "method": "tool.list", "id": 1}
回应
{"jsonrpc":"2.0","id":1,"result":[{"name":"calculate_sum","description":"Adds two numbers","params":{"a":1,"b":2}},{"name":"get_time","description":"Retrieves the current server time","params":{}}]}
2.计算总和
{"jsonrpc": "2.0", "method": "tool.calculate_sum", "id": 2, "params": {"a": 10, "b": 5}}
回应
{"jsonrpc":"2.0","id":2,"result":15}
3.获取服务器时间
{"jsonrpc": "2.0", "method": "tool.get_time", "id": 3}
回应
{"jsonrpc":"2.0","id":3,"result":"2023-10-05T14:48:00Z"}
自动化测试
为确保服务器可靠性,请运行提供的测试套件:
dotnet test
就是这样!您的工具现在可以被发现和执行。
📝 JSON-RPC协议支持
支持的方法
| 方法 | 说明 | 参数 |
|---|---|---|
tools/list |
返回所有已注册的具有模式的工具 | 无 |
tools/call |
执行特定工具 | name:字符串, arguments:对象 |
🧩 建筑
MCP服务器流
sequence诊断图参与者客户端作为AI助手参与者MCP作为MCP服务器参与者路由器作为请求路由器参与者注册表作为工具注册表参与者工具作为工具实例
客户端->>MCP:JSON-RPC请求(stdin) MCP->>路由器:解析和路由
alt工具/列表 路由器->>注册表:ListTools() 注册表->>路由器:工具元数据+模式 其他工具/调用 路由器->>注册表:执行(工具名称、参数) 注册表->>工具:执行(参数) 工具->>注册表:结果 注册表->>路由器:结果 结束
路由器->>MCP:JSON-RPC响应 MCP->>客户端:响应(stdout)
关键组件
- MCPServer:处理stdio通信和JSON解析
- 请求路由器:将JSON-RPC方法路由到适当的处理程序
- 工具注册表:管理工具生命周期和执行
- ClassSchemaBuilder:使用反射从C#类型生成JSON模式
- 工具:实施
ITool一致行为界面
