闲社服务运行正常AI智能体自动化平台
d

DroidRun代理

技能标识:droidrun-agent

DroidRun Portal HTTP/WebSocket/MCP client. Controls Android devices via HTTP, WebSocket, or MCP server, supporting tap, swipe, screenshot, text input, UI state retrieval and more. Use this skill when the user needs to interact with an Android device running DroidRun Portal.

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 0.1.0
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

DroidRun代理

技能名称: droidrun-agent

详细描述:

Droidrun Agent

提供两个异步客户端(PortalHTTPClient 和 PortalWSClient)、一个配置辅助类(PortalConfig)以及一个内置的 MCP 服务器,用于与运行 DroidRun Portal 的 Android 设备通信。所有客户端方法均为 async 并支持 async with 上下文管理器。

安装

bash
cd droidrun-agent && uv sync # 仅核心功能
cd droidrun-agent && uv sync --extra mcp # 包含 MCP 服务器支持

PortalHTTPClient

使用 Bearer 令牌认证与 Portal 的 HTTP 服务器(默认端口 8080)通信。

python
from droidrun_agent import PortalHTTPClient

async with PortalHTTPClient(baseurl=http://192.168.1.100:8080, token=YOURTOKEN) as client:
await client.ping()
state = await client.getstatefull()
await client.tap(200, 400)
png = await client.take_screenshot()

查询方法(GET)

签名返回类型描述
ping()dict健康检查,无需认证
geta11ytree()
dict | 简化的无障碍树 | | geta11ytree_full(*, filter: bool = True) | dict | 完整的无障碍树,filter=False 保留小元素 | | get_state() | dict | 简化的 UI 状态 | | getstatefull(*, filter: bool = True) | dict | 完整的 UI 状态(a11ytree + phonestate),filter=False 保留小元素 | | getphonestate() | dict | 手机状态信息(当前应用、活动、键盘状态等) | | get_version() | str | Portal 应用版本字符串 | | get_packages() | list[dict] | 可启动应用列表,每个包含 packageName、label 等 | | takescreenshot(*, hideoverlay: bool = True) | bytes | 设备截图,返回 PNG 字节数据,hide_overlay=False 显示覆盖层 |

操作方法(POST)

签名返回类型描述
tap(x: int, y: int)dict点击屏幕坐标
swipe(startx: int, starty: int, endx: int, endy: int, duration: int \
None = None) | dict | 滑动手势,duration 为可选的持续时间(毫秒) | | global_action(action: int) | dict | 执行 Android 无障碍全局操作(1=返回,2=主页,3=最近任务) | | startapp(package: str, activity: str \| None = None, stopbefore_launch: bool = False) | dict | 启动应用 | | stop_app(package: str) | dict | 尽力停止应用 | | input_text(text: str, clear: bool = True) | dict | 输入文本(自动 base64 编码),clear=True 先清空字段 | | clear_input() | dict | 清空焦点输入字段 | | presskey(keycode: int) | dict | 发送 Android 键码(例如 66=回车,3=主页,4=返回) | | setoverlayoffset(offset: int) | dict | 设置覆盖层垂直偏移量(像素) | | setsocketport(port: int) | dict | 更新 HTTP 服务器端口 |

PortalWSClient

使用 JSON-RPC 风格消息与 Portal 的 WebSocket 服务器(默认端口 8081)通信。当在断开的连接上调用方法时自动重连。

python
from droidrun_agent import PortalWSClient

async with PortalWSClient(ws://192.168.1.100:8081, token=YOUR_TOKEN) as ws:
await ws.tap(200, 400)
state = await ws.get_state()
png = await ws.take_screenshot()
timems = await ws.gettime()

方法

支持 PortalHTTPClient 的所有操作方法(tap、swipe、globalaction、startapp、stopapp、inputtext、clearinput、presskey、setoverlayoffset、setsocketport、take_screenshot),签名相同。

查询方法:

签名返回类型描述
getpackages()Any可启动包列表
getstate(*, filter: bool = True)
Any | 完整状态,filter=False 保留小元素 |
| get_version() | Any | Portal 版本字符串 |
| get_time() | Any | 设备 Unix 时间戳(毫秒) |
| install(urls: list[str], hide_overlay: bool = True) | Any | 从 URL 安装 APK,支持拆分 APK(仅 WebSocket) |

WebSocket 截图自动解析二进制帧并直接返回 PNG bytes。

异常

所有异常继承自 PortalError:

异常触发条件
PortalError基础异常
PortalConnectionError
无法连接到 Portal 服务器 |
| PortalAuthError | 无效或缺失令牌(HTTP 401/403) |
| PortalTimeoutError | 请求超时 |
| PortalResponseError | 服务器返回意外状态或错误 |

完整使用示例

python
import asyncio
from droidrun_agent import PortalHTTPClient, PortalWSClient

async def demo_http():
async with PortalHTTPClient(http://localhost:8080, token=YOUR_TOKEN) as client:
print(await client.ping())
print(Version:, await client.get_version())
print(Packages:, len(await client.get_packages()))

await client.tap(500, 800)
await client.swipe(500, 1500, 500, 500, duration=300)
await client.input_text(Hello World)
await client.press_key(66) # 回车

state = await client.getstatefull()
png = await client.take_screenshot()
print(fScreenshot: {len(png)} bytes)

async def demo_ws():
async with PortalWSClient(ws://localhost:8081, token=YOUR_TOKEN) as ws:
print(Version:, await ws.get_version())
print(Time:, await ws.get_time())

await ws.tap(500, 800)
await ws.start_app(com.android.settings)

png = await ws.take_screenshot()
print(fScreenshot: {len(png)} bytes)

asyncio.run(demo_http())
asyncio.run(demo_ws())

PortalConfig

用于管理连接设置的辅助数据类。支持直接构造或从环境变量加载。

python
from droidrun_agent import PortalConfig

直接构造

config = PortalConfig(baseurl=http://192.168.1.100:8080, token=YOURTOKEN) client = config.create_client()

从环境变量加载

config = PortalConfig.from_env() client = config.create_client()
字段类型默认值描述
base_urlstr(必需)Portal HTTP 或 WebSocket 基础 URL
token
str | (必需) | Bearer 认证令牌 | | timeout | float | 10.0 | 请求超时时间(秒) | | transport | str | http | http 或 ws |

fromenv() 的环境变量:PORTALBASEURL、PORTALTOKEN、PORTALTIMEOUT、PORTALTRANSPORT。

MCP 服务器

内置的 MCP(模型上下文协议)服务器将所有 Portal 操作作为工具暴露,用于 AI 代理集成。需要 mcp 可选依赖(pip install droidrun-agent[mcp])。

启动服务器

bash

通过 CLI 入口点


droidrun-agent --mcp

或作为 Python 模块

python -m droidrun_agent --mcp

服务器从环境变量读取 PORTALBASEURL、PORTALTOKEN、PORTALTIMEOUT 和 PORTAL_TRANSPORT,并通过 stdio 通信。

MCP 工具

| 工具 | 描述 |
|------|-------------|

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 droidrun-agent-1776276842 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 droidrun-agent-1776276842 技能

通过命令行安装

skillhub install droidrun-agent-1776276842

下载

⬇ 下载 droidrun-agent v0.1.0(免费)

文件大小: 3.53 KB | 发布时间: 2026-4-17 14:42

v0.1.0 最新 2026-4-17 14:42
Initial release of droidrun-agent: async Python clients and MCP server for interfacing with DroidRun Portal on Android devices.

- Added PortalHTTPClient and PortalWSClient for controlling Android devices via HTTP or WebSocket.
- Supported features: tap, swipe, screenshot, text input, retrieve UI/phone state, launch/stop apps, and more.
- Included PortalConfig for easy configuration via constructor or environment variables.
- Provided a built-in MCP server for exposing all Portal operations as tools, with CLI and module entry points.
- Comprehensive async API with exception handling for connection, timeout, and authentication errors.
- Full documentation and usage examples included.
返回顶部