Maestro 状态报告 MCP 服务器实现(Rust STDIO JSON-RPC)
使用说明(Markdown 格式)
-
项目简介
- 该仓库实现了一个基于 Model Context Protocol (MCP) 的服务器组件,专门用于 Maestro 应用中的会话状态上报与工具调用。通过标准输入输出(stdio)实现 JSON-RPC 协议的请求响应,客户端可以通过 MCP 进行初始化、获取工具列表、调用工具等操作。
-
主要功能点
- 处理 MCP JSON-RPC 请求:支持 initialize、tools/list、tools/call、ping 等基础方法,以及通过 notifications/initialized 实现连接就绪时的状态上报。
- Maestro 状态上报工具 maestro_status:提供对 Maestro UI 的实时状态汇报能力,将会话的状态(idle、working、needs_input、finished、error)以及附带信息上报到 Maestro 的状态端点。
- HTTP 状态回调:通过 MAESTRO_STATUS_URL、MAESTRO_SESSION_ID、MAESTRO_INSTANCE_ID 等环境变量,将状态上报转发至 Maestro 的 HTTP 状态服务器,确保前端可以实时呈现会话状态。
- 事件与日志:在状态变更、请求处理等关键节点输出日志,便于调试与维护。
-
安装步骤
- 构建 MCP 服务器
- 使用 Cargo 构建 maestro-mcp-server:
- cargo build --release -p maestro-mcp-server
- 使用 Cargo 构建 maestro-mcp-server:
- 运行方式
- 设置环境变量(示例):
- MAESTRO_STATUS_URL=http://127.0.0.1:9900/status
- MAESTRO_SESSION_ID=1
- MAESTRO_INSTANCE_ID=<任意 UUID>
- 运行二进制:
- ./target/release/maestro-mcp-server
- 设置环境变量(示例):
- 与 Maestro UI 集成
- Maestro 的前端通过状态服务器接收来自 MCP 的状态更新,状态服务器监听本地端口并暴露 /status 端点接收上报。
- MCP 客户端配置示例(JSON,客户端需要此信息以连接到 MCP 服务器)
- name: maestro-status
- type: stdio
- command: /path/to/maestro-mcp-server
- args: []
- env:
- MAESTRO_SESSION_ID: "1"
- MAESTRO_STATUS_URL: "http://127.0.0.1:9900/status"
- MAESTRO_INSTANCE_ID: "your-instance-id"
- 构建 MCP 服务器
-
服务器配置(MCP 客户端需要的启动信息,以 JSON 形式)
- { "name": "maestro-status", "type": "stdio", "command": "/path/to/maestro-mcp-server", "args": [], "env": { "MAESTRO_SESSION_ID": "1", "MAESTRO_STATUS_URL": "http://127.0.0.1:9900/status", "MAESTRO_INSTANCE_ID": "your-instance-id" } }
- 上述配置用于 MCP 客户端在启动时将 Maestro 的状态上报服务注册为一个单独的 Maestro Status MCP 服务实例。
-
基本使用方法
- 在 Maestro UI 中启动 HTTP 状态服务器以接收 MCP 上报。
- 通过 MCP 客户端将 maestro-status 配置为一个 stdio 类型的 MCP 服务,指向 maestro-mcp-server 的可执行文件,并设置必要的环境变量。
- 启动后,MCP 客户端可通过 JSON-RPC 调用 initialize、tools/list、tools/call 等接口,与服务器交互并触发 Maestro UI 的状态上报。
- Maestro UI 将通过 /status 端点接收状态更新并在前端界面显示。
-
运行要点
- 该实现使用 JSON-RPC over STDIN/STDOUT 来与 MCP 客户端通信,因此需确保客户端能正确向服务器的标准输入写入请求、并从标准输出读取响应。
- 状态上报需要正确设置 MAESTRO_STATUS_URL、MAESTRO_SESSION_ID、MAESTRO_INSTANCE_ID,以确保 Maestro UI 正确路由与区分不同会话实例的状态。