\[WIP\]Vega虚拟设备MCP服务器
这是一个模型上下文协议(MCP)服务器,提供对Vega虚拟设备(Kepler)的控制。它公开了使用JSON-RPC(通过HTTP)和直接shell命令与设备交互的工具。
先决条件
- Python 3.10+
- 访问Vega设备工具:服务器必须在以下环境中运行
vpm,vlcm,vmsgr,vda,以及input命令可用(例如在设备容器内)。 - 开普勒CLI:The
kepler命令必须可用于设备连接检查。 - 网络接入:必须能够到达
http://localhost:8383/jsonrpc(或配置的URL)。
配置
| 环境变量 | 描述 | 默认值 |
|---|---|---|
JSON_RPC_URL | Vega JSON-RPC端点的URL | http://localhost:8383/jsonrpc |
安装
- 克隆此存储库。
- 安装依赖项:
pip install -r requirements.txt用法
启动行为
服务器在启动时自动执行以下检查:
- 设备连接检查:等待模拟器设备通过以下方式连接
kepler device is-connected -d Simulator - 端口转发设置:使用配置端口转发
vda forward tcp:8383 tcp:8383
标准(默认)
使用以下命令运行服务器 fastmcp 超过标准输入/输出(适用于Claude Desktop等本地MCP客户端):
fastmcp run server.pyHTTP(SSE)
通过HTTP公开服务器(例如,用于Docker或远程访问):
fastmcp run server.py --transport sse --host 0.0.0.0 --port 8000*确保端口8000暴露在您的容器/环境中。*
可用工具
JSON-RPC工具
通过应用程序的JSON-RPC接口(端口8383)进行交互。
set_text(id: int, text: str)-按ID设置元素上的文本show_keyboard(id: int)-显示特定元素的键盘click_coordinate(x: int, y: int)-点击屏幕上的特定坐标take_screenshot()-截取屏幕截图get_page_source()-检索当前页面源find_objects(selector_strategy: str, args: dict)-按选择器查找元素IDbounds_of(id: int)-返回元素的边界框get_attribute(id: int, attribute: str)-检索元素属性inject_input_key_event(input_key_event: str, hold_duration: int)-注入具有持续时间的关键事件press_button(name: str, hold_duration: int)-使用键码映射按名称按下按钮keycodes.json
壳牌工具
通过系统shell命令进行交互(通过执行 vda shell).
launch_app(app_id: str)-通过启动应用程序vmsgrterminate_app(app_id: str)-通过以下方式终止应用程序vlcm(使用PID查找)install_app(remote_path: str)-通过安装应用程序vpmuninstall_app(app_id: str)-通过卸载应用程序vpmis_app_installed(app_id: str)-检查应用程序是否已安装input_text(text: str)-通过键入文本input命令input_key_event(keycode: int)-通过发送关键事件input命令
可用资源
MCP资源提供对设备状态和信息的只读访问。
device://status
返回当前设备连接状态和配置。
答复包括:
- 设备名称
- JSON-RPC端点URL
- 端口转发配置
- 连接状态
- JSON-RPC可访问性检查
device://screenshot
以base64编码的图像返回设备的当前屏幕截图。
使用案例: 在不执行工具操作的情况下查询当前视觉状态。
device://page-source
返回当前UI层次结构的XML表示形式。
使用案例: 在与可用UI元素交互之前,了解它们及其结构。
device://keycodes
返回所有可用的键码映射 press_button 工具。
答复包括:
- 按键代码总数
- 规范密钥名称
- 关键代码
- 每个密钥的备选别名
使用案例: 在调用之前发现有效的按钮名称 press_button.
测试
看 mcp-tools-tested.md 用于跟踪所有MCP工具手动测试的检查表。
