实时任务服务

一个演示实时任务管理的服务,支持REST CRUD操作、Redis发布/订阅事件和WebSocket JSON-RPC通知。

  • by Mjeevanantham
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Mjeevanantham/mcp-todo-demo

使用说明

MCP所有演示

一个最小的实时待办事项服务演示:

  • REST CRUD用于任务。
  • Redis发布/订阅用于后端事件。
  • 一个类似MCP的JSON-RPC WebSocket服务器,向连接的客户端推送实时通知。
  • 一个演示callTool方法,其作用类似于模型集成工具(建议受让人)。
  • 订阅和接收通知的示例客户端。

这个仓库故意设计得很小,这样你就可以运行和探索:稍后添加UI、RAG或真正的代理。


建筑(简)

  • 快速REST:POST/任务、PUT/任务/:id、GET/任务
  • Redis发布/订阅:后端发布任务事件(创建/更新)
  • WebSocket JSON-RPC:客户端连接到ws:///mcp/ws,并使用JSON-RPC订阅/取消订阅和调用工具。
  • 客户端演示:连接、订阅任务事件、调用suggestAssignee,并触发REST POST以显示通知。

文件

  • src/server.ts——主服务器:REST+MCP WebSocket+Redis集成
  • src/client-demo.ts——订阅和触发事件的演示客户端
  • src/types.ts——TypeScript类型
  • package.json、tsconfig.json

快速入门(本地)

要求:Node 18+,Redis(本地或云端),可选Vercel CLI和GitHub CLI。

  1. (可选) 将项目链接到Vercel并同步环境变量:
    vercel link
    vercel env pull .env.development.local
    
  2. 复制环境模板(或编辑提取的env文件):
    cp .env.example .env
    
    更新 REDIS_URL, PORT,以及 JWT_SECRET 根据需要。模板指向提供的Redis Cloud实例。
  3. 确保Redis正在运行/可访问。对于本地开发,您可以使用Docker:
    docker run -p 6379:6379 redis
    
  4. 安装依赖项并启动服务器:
    npm install
    npm run dev
    
  5. 在第二个终端中,运行演示客户端以观察WebSocket事件:
    npm run client
    

部署

Vercel(REST+事件发布者)

  • 部署REST API(/tasks, /token等等)发送给Vercel。
  • 在Vercel中配置环境变量(REDIS_URL, JWT_SECRET, ALLOWED_ORIGIN等等)。
  • 使用 vercel env add 或仪表板;避免泄露秘密。

渲染(持久WebSocket服务器)

  1. 添加提供的 render.yaml 转到repo根目录并替换 repo 占位符与您的GitHub org/repo.
  2. 提交并推送到GitHub:
    git add render.yaml
    git commit -m "chore: add render.yaml for ws service"
    git push origin main
    
  3. 在渲染中:
    • 使用仓库创建新的Web服务+ main 支。渲染将自动检测 render.yaml.
    • 在“渲染”仪表板中设置环境变量(在文件中留空):
      • REDIS_URL --上传URL(例如。 rediss://...).
      • JWT_SECRET --必须与Vercel使用的值匹配,以便颁发的令牌生效。
    • 保留构建命令(npm ci && npm run build)并启动命令(npm run start).
    • 部署服务;渲染将显示一个URL,如下所示 https://mcp-todo-ws.onrender.com 使用WebSocket端点 wss://<service>.onrender.com/mcp/ws.
  4. 保持 REDIS_URL 和 JWT_SECRET 如果您共享它们,则进行旋转;永远不要将秘密值提交到repo。

端点和工具

  • GET/健康、GET/任务、POST/任务、PUT/任务/:id、GET/令牌
  • WebSocket端点:ws(s):///mcp/ws
  • JSON-RPC方法:callTool、订阅、取消订阅
  • 使用 curl, wscat,或 npm run client 以行使API。

测试渲染WebSocket

  1. 从Vercel REST部署中获取JWT:
    curl https://<vercel-app>.vercel.app/token
    
  2. 连接客户端(例如。 wscat)要渲染:
    wscat -c "wss://<render-service>.onrender.com/mcp/ws?token=<jwt>"
    
  3. 订阅任务频道:
    {"jsonrpc":"2.0","id":1,"method":"subscribe","params":{"channel":"tasks"}}
    
  4. 通过Vercel REST端点创建任务以触发通知:
    curl -s -X POST https://<vercel-app>.vercel.app/tasks \
      -H "Content-Type: application/json" \
      -d '{"title":"Cross-host test from Vercel->Upstash->Render"}'
    
  5. 您应该收到JSON-RPC notification 在WebSocket客户端中使用任务负载。如果没有,请检查渲染日志并验证共享密钥/Redis URL。