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) │
│ │ 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.1CLI参数
| 参数 | 默认值 | 描述 |
|---|---|---|
--server | (关闭) | 启用HTTP服务器模式 |
--port | 3000 (或 REMOTETOUCH_PORT env) | HTTP侦听端口 |
--host | 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) - 验证主机名和端口是否正确
许可证
麻省理工学院
