VLA-Diff-MCP
by zhywwyzh
README.md
# VLA-Diff-MCP
VLA-Diff 项目运维工具 MCP server(一期只读 + 二期写操作)。
## 部署形态(工具裁剪开关)
同一份 server.py 通过环境变量 `VLADIFF_MCP_PROFILE` 裁剪暴露的工具集,
避免全局 / 工作区两个实例重复暴露同一工具:
| 形态 | VLADIFF_MCP_PROFILE | 暴露工具 | 部署位置 |
|------|--------------------|----------|----------|
| 完整 | `full`(默认) | 全部 10 个 | 命令行直接调试 |
| 运维 | `ops` | 9 个(无 `publish_prompt`) | `~/Global-MCP-Server`(Trae 全局 MCP `global-diff-ops`) |
| 指令 | `prompt` | 仅 `publish_prompt` | 本目录(Trae 工作区 MCP `vla-diff-prompt`,见 `.trae/mcp.json`) |
`publish_prompt` 属敏感写操作(伪造大模型指令触发动作分发),仅在本工作区可用。
代码修改流程:本目录为源,改完后同步 `server.py` 到 `~/Global-MCP-Server/`。
## 功能
通过 MCP 协议向 Agent 提供稳定工具,替代每次临场拼 bash 命令:
### 一期:只读工具
| 工具 | 说明 | 运行位置 |
|------|------|----------|
| `ros_topic_status` | 查询 ROS 话题频率 + 最新消息 | 容器 `ros_noetic_uss_nav` |
| `ros_topic_echo` | 读取 ROS 话题最近 n 条消息 | 容器 |
| `process_status` | 查询关键服务进程状态 | 宿主机 |
| `tmux_status` | 列出 tmux 会话 | 宿主机 |
| `tmux_capture` | 抓取 tmux 会话 pane 输出 | 宿主机 |
| `read_log` | 读取 agent_run / scene_graph 日志 | 容器 |
### 二期:写操作工具
| 工具 | 说明 | 安全机制 |
|------|------|----------|
| `publish_prompt` | 向 /agent_prompt 发布伪造指令(task_id: 0=VLA/1=TRACKING/2=其他) | 无(模拟大模型消息) |
| `tmux_send` | 向 tmux 会话发送命令(不存在时自动创建,不 kill-session) | 无(按复用规则操作) |
| `restart_service` | 重启 ego_planner 等(先杀后启,后台运行) | **confirm=True 显式确认** |
| `exec_cmd` | 容器内任意 shell 命令兜底 | 无白名单,谨慎使用 |
## 环境准备
```bash
# 创建虚拟环境(名称固定为 vla_diff_mcp_venv,已被 .gitignore 忽略)
uv venv vla_diff_mcp_venv
# 安装依赖(mcp SDK)
UV_PROJECT_ENVIRONMENT=vla_diff_mcp_venv uv sync
```
## 运行
```bash
vla_diff_mcp_venv/bin/python server.py
```
默认 stdio 传输,由 MCP 客户端(opencode / Claude Code)以子进程方式拉起。
## 前置条件
- Docker 容器 `ros_noetic_uss_nav` 已创建(ROS 相关工具依赖)
- 未启动时,ROS 类工具会返回明确错误,tmux / 进程类工具不受影响
## 扩展方向
- 更多可重启服务:elastic-tracker、tracking_service 等(按需加入 `KNOWN_RESTART`)
- 服务配置化:将启动命令迁移到 YAML,避免写死在代码里
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues