使用说明
MCP沙盒环境
一个RL培训环境,供AI代理练习现实世界的电子表格任务。通过模型上下文协议(MCP)支持程序化(工具使用)和基于GUI(计算机使用)的交互,具有自动分级和隔离的Docker沙盒。
建筑
┌─────────────────┐
│ AI Agent │ (Claude, GPT, Local LLM, etc.)
│ │
└────────┬────────┘
│ Connects via MCP
▼
┌─────────────────┐
│ MCP Server │ TypeScript, runs on host
│ │
│ • Exposes tools │
│ • Manages tasks │
│ • Two modes: │
│ - Tool Use │
│ - Computer Use│
└────────┬────────┘
│ Docker API
▼
┌─────────────────┐
│ Docker Sandbox │ Isolated container
│ │
│ • LibreOffice │
│ • Python + libs │
│ • Xvfb (GUI) │
│ • Fresh per task│
└─────────────────┘
特性
-
两种交互模式:
- 工具使用:通过Python进行编程访问(odfpy、pandas)
- 计算机使用:GUI自动化(屏幕截图、鼠标、键盘)
-
沙盒环境:
- 隔离的Docker容器
- 每项任务都有新的开始
- 网络隔离
- 可配置超时
-
自动评分:
- 电子表格与公差的比较
- 公式验证
- 部分信贷支持
- 自定义分级器
快速开始
1.构建Docker镜像
cd sandbox-image
docker build -t mcp-sandbox:latest .
2.生成任务文件
cd tasks/banking-reserve
pip install odfpy
python generate_files.py
3.安装MCP服务器依赖项
cd mcp-server
npm install
4.构建和运行
npm run build
npm start
项目结构
mercor/
├── mcp-server/ # TypeScript MCP Server
│ ├── src/
│ │ ├── index.ts # Entry point
│ │ ├── tools/ # MCP tool definitions
│ │ ├── sandbox/ # Docker container management
│ │ ├── tasks/ # Task loading
│ │ └── grading/ # Evaluation system
│ └── package.json
├── sandbox-image/ # Docker image
│ ├── Dockerfile
│ ├── scripts/ # Python scripts (run inside container)
│ └── entrypoint.sh
├── tasks/ # Task definitions
│ └── banking-reserve/
│ ├── task.json # Problem statement
│ ├── starting/ # Initial files
│ ├── oracle/ # Expected output
│ └── grader.py # Custom grader
└── README.md
可用工具
任务管理
| 工具 | 说明 |
|---|---|
list_tasks |
列出可用任务 |
start_task |
使用任务初始化沙盒 |
get_task_info |
获取问题陈述 |
submit_task |
提交评分 |
reset_task |
重置为初始状态 |
电子表格(工具使用)
| 工具 | 说明 |
|---|---|
list_sheets |
列出工作表名称 |
read_cell |
读取单元格值 |
write_cell |
写入单元格 |
read_range |
读取单元格范围 |
write_range |
写入范围 |
get_formula |
获取单元格公式 |
set_formula |
设置单元格公式 |
get_sheet_data |
获取完整的表格数据 |
计算机使用(GUI)
| 工具 | 说明 |
|---|---|
screenshot |
捕获屏幕 |
mouse_move |
移动光标 |
mouse_click |
点击鼠标 |
keyboard_type |
键入文本 |
keyboard_press |
按键 |
keyboard_hotkey |
按键组合 |
open_file_in_libreoffice |
在GUI中打开文件 |
创建新任务
-
创建任务目录:
tasks/my-task/ -
添加
task.json:
{
"id": "my-task",
"name": "My Task Name",
"description": "Full problem description...",
"timeoutSeconds": 300,
"startingFiles": ["data.ods"],
"expectedOutputs": ["data.ods"],
"grading": {
"type": "spreadsheet_comparison",
"tolerance": 0.01,
"checkFormulas": true
}
}
-
将起始文件添加到
starting/ -
将预期产出添加到
oracle/ -
可选择添加
grader.py用于自定义分级
发展
# Watch mode
npm run dev
# Run tests
npm test
# Lint
npm run lint
示例用法(代理视角)
Agent: start_task("banking-reserve")
→ Task started, sandbox created
Agent: get_task_info()
→ Returns problem statement
Agent: list_sheets("cash_flows.ods")
→ ["Sheet1"]
Agent: read_range("cash_flows.ods", "Sheet1", "B1", "B10")
→ Returns first 10 cash flow values
Agent: set_formula("cash_flows.ods", "Sheet1", "D2", "=SUMIF(B2:B101,\">0\")")
→ Formula set successfully
Agent: submit_task()
→ Returns grading result with score
许可证
麻省理工学院