2025-5-11
Words 1113Read Time 3 min
Score:85

一个简单的To-Do列表CRUD API服务器,使用MCP概念和JSON-RPC 2.0协议,基于Node.js和PostgreSQL。

toyMCP 待办事项列表服务器

这是一个简单的示例服务器,使用模型上下文协议(Model Context Protocol, MCP)概念实现了一个待办事项列表的 CRUD API,具体通过 HTTP 使用 JSON-RPC 2.0 协议。
该项目使用 Node.js、Express 和 PostgreSQL(通过 Docker)实现数据持久化。

环境设置

  1. 前提条件:
      • Node.js(推荐使用 LTS 版本)
      • npm(通常随 Node.js 一起安装)
      • Docker 和 Docker Compose
  1. 克隆仓库(如果适用):
    1. 安装依赖:
      1. 启动 PostgreSQL 数据库: 确保 Docker Desktop(或 Docker 守护进程)正在运行。
        1. 这将在后台启动一个名为 toymcp_db 的 PostgreSQL 容器,并为其数据创建一个持久化卷。
      1. 运行服务器:
        1. 服务器将初始化数据库模式(如果需要),并开始监听 http://localhost:3000(或由 PORT 环境变量指定的端口)。JSON-RPC 端点为 http://localhost:3000/rpcSwagger API 文档界面可通过 http://localhost:3000/api-docs 访问。

      干净启动服务器

      如果需要确保服务器从一个全新的数据库启动(例如,在运行手动端到端测试或重置状态之前),可以使用 clean_start.sh 脚本:
      1. 停止正在运行的服务器(如果有),在运行服务器的终端中按下 Ctrl+C
      1. 确保脚本可执行:
        1. 运行脚本:
          1. 该脚本将停止并移除数据库容器(docker compose down),重新启动它(docker compose up -d db),然后启动 Node.js 服务器(npm start)。

        运行测试

        确保 PostgreSQL 容器正在运行(docker compose up -d db)。
        测试分为 tests/unit_teststests/integration_tests。以下命令运行所有测试:

        运行覆盖率报告

        这将在终端输出摘要,并在 coverage/lcov-report/ 目录中生成详细的 HTML 报告,反映单元测试和集成测试的覆盖率。

        运行端到端测试脚本

        项目包含一个编排脚本(run_full_test.sh),它使用 curl 对实时服务器执行完整的测试序列,包括事先清理数据库并提供摘要报告。这是推荐的手动端到端检查方式。
        前提条件: curl, jq

        API 文档

        交互式 API 文档可通过 Swagger UI 在本地(服务器运行时)和通过 GitHub Pages 部署访问:
        • 本地 Swagger UI: http://localhost:3000/api-docs
        • GitHub Pages Swagger UI: https://izaqyos.github.io/toyMCP/swagger-ui/
        文档是从 src/swagger_definitions.js 中的 JSDoc 注释自动生成的,使用了 swagger-jsdoc

        API 使用(通过 HTTP POST 的 JSON-RPC 2.0)

        http://localhost:3000/rpc 发送 POST 请求,设置 Content-Type: application/json,并在请求体中包含 JSON-RPC 2.0 负载。
        可用方法:
        • mcp.discover:描述服务及其可用方法。
        • todo.list:列出所有待办事项。
        • todo.add:添加新的待办事项(params: { "text": "..." })。
        • todo.remove:删除待办事项(params: { "id": ... })。
        示例工具: curl
        • 发现服务(mcp.discover
          • 成功响应(示例):
        • 添加事项(todo.add
          • 成功响应:
        • 列出事项(todo.list
          • 成功响应(示例):
        • 删除事项(todo.remove (假设 ID 为 1 的事项存在)
          • 成功响应:
        • 错误响应示例(未找到事项)
          • 响应:
        上一篇
        mcp-server.sqlite
        下一篇
        MCO-postgres