toyMCP 待办事项列表服务器
这是一个简单的示例服务器,使用模型上下文协议(Model Context Protocol, MCP)概念实现了一个待办事项列表的 CRUD API,具体通过 HTTP 使用 JSON-RPC 2.0 协议。
该项目使用 Node.js、Express 和 PostgreSQL(通过 Docker)实现数据持久化。
环境设置
- 前提条件:
- Node.js(推荐使用 LTS 版本)
- npm(通常随 Node.js 一起安装)
- Docker 和 Docker Compose
- 克隆仓库(如果适用):
- 安装依赖:
- 启动 PostgreSQL 数据库: 确保 Docker Desktop(或 Docker 守护进程)正在运行。
这将在后台启动一个名为
toymcp_db
的 PostgreSQL 容器,并为其数据创建一个持久化卷。- 运行服务器:
服务器将初始化数据库模式(如果需要),并开始监听
http://localhost:3000
(或由 PORT
环境变量指定的端口)。JSON-RPC 端点为 http://localhost:3000/rpc
。Swagger API 文档界面可通过 http://localhost:3000/api-docs
访问。干净启动服务器
如果需要确保服务器从一个全新的数据库启动(例如,在运行手动端到端测试或重置状态之前),可以使用
clean_start.sh
脚本:- 停止正在运行的服务器(如果有),在运行服务器的终端中按下
Ctrl+C
。
- 确保脚本可执行:
- 运行脚本:
该脚本将停止并移除数据库容器(
docker compose down
),重新启动它(docker compose up -d db
),然后启动 Node.js 服务器(npm start
)。运行测试
确保 PostgreSQL 容器正在运行(
docker compose up -d db
)。测试分为
tests/unit_tests
和 tests/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 的事项存在)
成功响应:
- 错误响应示例(未找到事项)
响应:
- Author:waytomcp
- URL:https://www.waytomcp.com/article/izaqyos/toyMCP
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!