Skip to main content
Glama
README.md
# IOBS MCP Server — 手术室 AI 设备控制平台

通过自然语言控制手术床和 C 臂。Claude Desktop 通过 MCP 协议调用设备控制工具,Mock 后端模拟硬件行为,前端 3D 实时可视化。

## 架构

```
┌─────────────────┐     MCP (stdio)     ┌──────────────────┐
│  Claude Desktop  │ ◄──────────────────► │  MCP Server       │
│  (自然语言交互)    │                     │  8 个工具          │
└─────────────────┘                     └────────┬─────────┘
                                                 │ HTTP + WS
                                                 ▼
┌─────────────────┐     Vite Proxy       ┌──────────────────┐
│  iobs-unified-app│ ◄──────────────────► │  Mock Backend     │
│  (React 3D 前端)  │                     │  (Express:18011)  │
└─────────────────┘                     └──────────────────┘
```

## 开始

```bash
npm install
npm run dev
```

## 连接到 iobs-unified-app 前端

把你前端的 `vite.config.ts` 里的代理目标指向 `localhost:18011`:

```ts
// vite.config.ts — 修改一行
'/iobs-api': {
  target: 'http://localhost:18011',  // 原本是 192.168.1.200:18011
  changeOrigin: true,
},
```

然后启动前端 `npm run dev`,3D 场景会显示 Mock 后端提供的设备状态。

## 连接到 Claude Desktop

1. 编译项目:`npm run build`
2. 找到 Claude Desktop 配置文件:
   - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
   - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
3. 添加配置后重启 Claude Desktop:

```json
{
  "mcpServers": {
    "iobs-surgical": {
      "command": "node",
      "args": ["D:/compilation tool/Yiming/operating table/iobs-mcp-server/dist/index.js"]
    }
  }
}
```

## MCP 工具列表

| 工具 | 说明 |
|------|------|
| `get_device_state` | 获取手术床 10 关节 + C 臂 4 关节 + 模式 + 急停 |
| `list_joints` | 列所有可控关节、物理范围、可用体位预设 |
| `move_bed_joint` | 调整手术床指定关节(目标值或增量) |
| `move_carm_joint` | 调整 C 臂指定关节 |
| `apply_bed_preset` | 一键应用手术体位(平卧位/截石位/沙滩椅位等 7 种) |
| `set_carm_mode` | C 臂模式:1=同步 / -1=镜像 / 0=脱离 |
| `emergency_stop` | 🚨 紧急停止所有设备 |
| `reset_emergency` | 解除急停 |

## 演示场景

### 1. 查询设备状态
> "手术室现在什么状态?"

### 2. 调整手术床
> "把手术床升高到 800mm,背板抬起来 30 度"

### 3. 应用手术体位
> "病人要做腹腔镜,给我调成 Trendelenburg 位"

### 4. C 臂控制
> "C 臂旋转 45 度,高度降到 320"

### 5. 紧急停止
> "紧急停止!"

### 6. 完整手术准备
> "把床放平,C 臂切换到同步模式,调到沙滩椅位"

## API 端点

Mock 后端完整实现了 IOBS API 协议,兼容 `iobs-unified-app` 前端:

- `GET /iobs-api/health`
- `GET /iobs-api/get_pos?version=1.0`
- `GET /iobs-api/get_space?version=1.0`
- `GET /iobs-api/set_joint_move?version=1.0&device=...&joint=...&speed=...`
- `GET /iobs-api/get_status?version=1.0` — 手术体位预设
- `GET /iobs-api/get_c_arm_mode?version=1.0`
- `POST /iobs-api/set_stop?version=1.0`
- `WebSocket /ws` — 实时状态推送

## 技术栈

- **MCP SDK**: @modelcontextprotocol/sdk ^1.0
- **Mock Backend**: Express + ws + in-memory state
- **Runtime**: Node.js 18+ (ESM)
- **Dev**: tsx + TypeScript 5.9

## 项目结构

```
src/
├── index.ts              # 入口
├── mock-server/
│   ├── index.ts          # Express 启动
│   ├── device-state.ts   # 设备状态存储 + 约束
│   └── routes.ts         # REST + WebSocket 路由
└── mcp-server/
    ├── index.ts          # MCP Server (stdio)
    ├── tools.ts          # 8 个 Tool 定义
    └── handlers.ts       # Tool 执行逻辑
```