使用说明
mcp遥控触摸
一种MCP服务器,用于通过SSH远程控制任何Linux设备上的触摸屏。
将轻击、滑动、长按、双击和键盘事件直接注入设备。守护程序会自动检测触摸屏和屏幕分辨率。键盘输入是通过创建的虚拟键盘设备注入的 /dev/uinput. 无需在远程设备上安装 --Python守护进程通过SSH通过stdin发送,仅使用Python的标准库。
建筑
标准模式(默认)
Dev Machine Remote Linux Device
┌──────────────────┐ SSH (persistent) ┌──────────────────┐
│ MCP Server (TS) │ ──────────────────> │ Python daemon │
│ stdio transport │ JSON-line proto │ (stdlib only) │
│ │ <────────────────── │ │
│ touch_tap │ │ Auto-detect │
│ touch_swipe │ │ touchscreen │
│ touch_long_press │ │ ↓ │
│ touch_double_tap │ │ /dev/input/eventN│
│ key_press │ │ ↓ │
│ key_type │ │ /dev/uinput (kbd)│
│ touch_disconnect │ │ ↓ │
│ │ │ Linux Input │
└──────────────────┘ └──────────────────┘
守护进程扫描 /proc/bus/input/devices 找到物理触摸屏(通过检查 INPUT_PROP_DIRECT 和 ABS_MT_POSITION_X),然后将事件直接注入其中。这在容器化合成器(例如,Torizon与Qt EGLFS)中可靠地工作,在这些合成器中可能无法检测到虚拟uinput设备。
HTTP服务器模式(--server)
AI Agent (remote) ──HTTP/SSE──> Express + StreamableHTTPServerTransport
│
McpServer (per MCP session)
│
SshTouchSessionManager (shared)
│
SSH ──> Linux Device
先决条件
Dev机器
- Node.js 18+
- SSH客户端
远程设备
- 任何带有触摸屏的Linux设备(Raspberry Pi、SBC、嵌入式系统等)
- Python 3
- 读/写访问
/dev/input/eventN(触摸屏设备) - 写入访问权限
/dev/uinput(用于键盘输入——可选,无需触摸即可工作)
将用户添加到 input 远程设备上的组:
sudo usermod -aG input $USER
重新登录以使更改生效。或者,使用 useSudo 选项。
安装
npm install -g mcp-remotetouch
或者直接与 npx:
npx mcp-remotetouch
用法
添加到您的MCP客户端配置中(例如Claude Desktop的 claude_desktop_config.json):
{
"mcpServers": {
"remotetouch": {
"command": "npx",
"args": ["mcp-remotetouch"],
"env": {}
}
}
}
设备会自动检测屏幕分辨率。您可以用以下命令覆盖它 REMOTETOUCH_SCREEN_WIDTH 和 REMOTETOUCH_SCREEN_HEIGHT 如果需要的话。
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
REMOTETOUCH_SSH_HOST |
(无) | 远程设备的SSH主机 |
REMOTETOUCH_SSH_USER |
pi |
SSH用户名 |
REMOTETOUCH_SSH_PORT |
22 |
SSH端口 |
REMOTETOUCH_SSH_KEY |
(无) | SSH私钥路径 |
REMOTETOUCH_SCREEN_WIDTH |
自动检测 | 屏幕宽度(像素) |
REMOTETOUCH_SCREEN_HEIGHT |
自动检测 | 屏幕高度(像素) |
REMOTETOUCH_USE_SUDO |
false |
使用sudo运行守护进程 |
工具
touch_connect
通过SSH连接到远程Linux设备并启动触摸守护进程。返回会话ID。
| 参数 | 类型 | 说明 |
|---|---|---|
host |
弦? | SSH主机 |
user |
弦? | SSH用户名 |
port |
号码? | SSH端口 |
sshKey |
弦?SSH私钥的路径 | |
screenWidth |
号码? | 屏幕宽度(如果省略,则自动检测) |
screenHeight |
号码? | 屏幕高度(如果省略,则自动检测) |
useSudo |
布尔值? | 使用sudo运行 |
touch_tap
点击给定的坐标。
| 参数 | 类型 | 说明 |
|---|---|---|
sessionId |
string | 会话ID |
x |
数字 | X坐标 |
y |
数字 | Y坐标 |
duration_ms |
号码? | 点击持续时间(默认值:50ms) |
touch_swipe
从(x1,y1)滑动到(x2,y2)。
| 参数 | 类型 | 说明 |
|---|---|---|
sessionId |
string | 会话ID |
x1 |
number | 起始X坐标 |
y1 |
number | 起始Y坐标 |
x2 |
number | 结束X坐标 |
y2 |
number | 结束Y坐标 |
duration_ms |
号码? | 滑动持续时间(默认值:300ms) |
steps |
号码? | 插值步数 |
touch_long_press
在给定坐标处长按。
| 参数 | 类型 | 说明 |
|---|---|---|
sessionId |
string | 会话ID |
x |
数字 | X坐标 |
y |
数字 | Y坐标 |
duration_ms |
号码? | 按压持续时间(默认值:800ms) |
touch_double_tap
在给定坐标处双击。
| 参数 | 类型 | 说明 |
|---|---|---|
sessionId |
string | 会话ID |
x |
数字 | X坐标 |
y |
数字 | Y坐标 |
key_press
按带有可选修改键的键。需要 /dev/uinput 远程设备上的访问。
| 参数 | 类型 | 说明 |
|---|---|---|
sessionId |
string | 会话ID |
key |
string | 键名(例如。 enter, a, tab, f1, up, space) |
modifiers |
string[]? | 要按住的修改键(例如。 ["ctrl"], ["ctrl", "shift"]) |
key_type
通过模拟单个按键来键入文本字符串。需要 /dev/uinput 远程设备上的访问。
| 参数 | 类型 | 说明 |
|---|---|---|
sessionId |
string | 会话ID |
text |
string | 要键入的文本(例如。 Hello, World!) |
touch_disconnect
断开会话连接并清理远程守护进程。
| 参数 | 类型 | 说明 |
|---|---|---|
sessionId |
string | 会话ID |
touch_list_sessions
列出所有活动会话。没有参数。
HTTP服务器模式
您可以运行以下命令,而不是作为stdio MCP服务器运行 mcp-remotetouch 作为AI代理可以通过HTTP远程连接的HTTP服务器。
启动服务器
# Default: listen on 0.0.0.0:3000
npx mcp-remotetouch --server
# Custom port and host
npx mcp-remotetouch --server --port 8080 --host 127.0.0.1
CLI参数
| 参数 | 默认值 | 描述 |
|---|---|---|
--server |
(关闭) | 启用HTTP服务器模式 |
--port <N> |
3000 (或 REMOTETOUCH_PORT env) |
HTTP侦听端口 |
--host <addr> |
0.0.0.0 |
绑定地址 |
没有 --server,进程在stdio模式下运行(默认的向后兼容行为)。
工作流程
Claude Desktop的典型会话:
touch_connect--连接到远程设备touch_tap/touch_swipe/touch_long_press/touch_double_tap--与屏幕交互key_press/key_type--发送键盘输入touch_disconnect--结束会话
故障排除
权限不足
远程设备上的用户需要访问 /dev/input/eventN。要么:
- 将用户添加到
input组:sudo usermod -aG input $USER(需要重新登录) - 或设置
REMOTETOUCH_USE_SUDO=true
未找到物理触摸屏设备
守护进程在中找不到触摸屏 /proc/bus/input/devices.验证:
- 该设备连接了触摸屏,并加载了驱动程序
- 设备显示
INPUT_PROP_DIRECT并且已经ABS_MT_POSITION_X能力
键盘输入不可用
这 key_press 和 key_type 工具需要写入权限 /dev/uinput。如果报告键盘不可用:
- 添加udev规则以授予访问权限:
echo 'KERNEL=="uinput", GROUP="input", MODE="0660"' | sudo tee /etc/udev/rules.d/99-uinput.rules sudo udevadm control --reload-rules && sudo udevadm trigger - 确保用户在
input组:sudo usermod -aG input $USER(需要重新登录) - 或设置
REMOTETOUCH_USE_SUDO=true
即使在以下情况下,触摸工具仍能继续工作 /dev/uinput 无法访问。
SSH连接失败
- 确保为远程设备配置了SSH公钥身份验证(不支持密码身份验证,因为连接使用
BatchMode=yes) - 验证主机名和端口是否正确
许可证
麻省理工学院