轻量级MCP服务器

一个基于洋葱架构的轻量级Model Context Protocol (MCP)服务器,提供JSON-RPC 2.0接口和REST API,适用于任务管理场景。

  • by HamidMolareza
  • C#
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 HamidMolareza/mcp-todo-app

使用说明

示例OnionApp

示例解决方案,突出显示了构建在洋葱架构todo域之上的轻量级模型上下文协议(MCP)服务器。配套ASP。NET核心最小API作为一种通过HTTP探索相同应用程序服务的方便方式与之配套。

解决方案布局

  • SampleOnionApp.Domain –聚合根和域逻辑(TodoItem 实体)。
  • SampleOnionApp.Application –用例服务、DTO和抽象合同(ITodoService, ITodoRepository, TodoItemRequest).
  • SampleOnionApp.Infrastructure -基础设施问题;包括内存存储库和注册助手。
  • SampleOnionApp.Presentation –ASP。NET核心最小API在下公开REST端点 /api/todos (可选伴侣主机)。
  • SampleOnionApp.McpServer –控制台主机通过简单的MCP风格的JSON-RPC循环公开相同的功能(项目重点)。

表示层仅依赖于应用层和基础设施注册,而web API和MCP服务器都通过依赖项注入来解析应用程序服务。

先决条件

  • .NET SDK 8.0+
  • 只有当您打算添加外部NuGet包时,才需要网络访问。当前的代码库构建没有第三方包还原。

运行MCP服务器

dotnet run --project src/SampleOnionApp.McpServer

服务器在STDIN上监听换行符分隔的JSON-RPC 2.0请求,并在STDOUT上发出响应。一个小小的握手看起来像:

printf '%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize"}' \
  '{"jsonrpc":"2.0","id":2,"method":"call_tool","params":{"name":"todos_create","arguments":{"title":"Draft docs","description":"Outline MCP support"}}}' \
  '{"jsonrpc":"2.0","id":3,"method":"call_tool","params":{"name":"todos_list"}}' \
  | dotnet run --project src/SampleOnionApp.McpServer

支持的方法:

  • initialize
  • call_tool 具有以下工具名称:
    • todos_list
    • todos_get
    • todos_create
    • todos_create_range
    • todos_update
    • todos_complete
    • todos_delete
    • todos_delete_all

备注
该实现有意保持传输的简单性,以便于学习:它接受换行符分隔的JSON,而不是完整的MCP帧头。在中调整设置 src/SampleOnionApp.McpServer/Program.cs 如果你需要字节精确的合规性。

使用Codex CLI注册MCP服务器

辅助脚本 scripts/run-mcp-server.sh 包装服务器启动。向食品法典委员会提供:

codex mcp add sample-onion-todos ./scripts/run-mcp-server.sh

之后, codex mcp list 将显示条目。您可以通过启动Codex并选择 sample-onion-todos 服务器在收到提示时(或在通常可用时使用相关CLI标志)。

运行web API(可选配套主机)

dotnet run --project src/SampleOnionApp.Presentation

运行后,使用任何HTTP客户端练习端点:

  • GET /api/todos?filter=read –列出所有项目(可选择按标题/描述文本过滤)。
  • GET /api/todos/{id} –检索单个项目。
  • POST /api/todos –创建项目({ "title": "Read spec", "description": "Model Context Protocol" }).
  • POST /api/todos/bulk –在一次调用中创建多个项目(忽略标题为空的条目)。
  • PUT /api/todos/{id} –更新标题/描述。
  • POST /api/todos/{id}/complete 标记为完成。
  • DELETE /api/todos/{id}?confirm=true –删除一个项目(需要明确的 confirm=true 信号)。
  • DELETE /api/todos?confirm=true –删除每个项目并返回删除的数字。

下一步

  • 将内存中的存储库与持久数据存储交换。
  • 强化MCP传输,以遵守官方帧协议(内容长度标头、心跳等)。
  • 围绕应用程序服务和JSON-RPC处理程序添加单元测试。