MCP工具 是 AI Skill Hub 本期精选MCP工具之一。综合评分 7.5 分,整体质量较高。我们推荐使用将其纳入你的 AI 工具库,帮助提升工作效率。
MCP工具 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
MCP工具 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。
# 方式一:通过 Claude Code CLI 一键安装
claude skill install https://github.com/Saurav0989/vrski
# 方式二:手动配置 claude_desktop_config.json
{
"mcpServers": {
"mcp--": {
"command": "npx",
"args": ["-y", "vrski"]
}
}
}
# 配置文件位置
# macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
# Windows: %APPDATA%/Claude/claude_desktop_config.json
# 安装后在 Claude 对话中直接使用 # 示例: 用户: 请帮我用 MCP工具 执行以下任务... Claude: [自动调用 MCP工具 MCP 工具处理请求] # 查看可用工具列表 # 在 Claude 中输入:"列出所有可用的 MCP 工具"
// claude_desktop_config.json 配置示例
{
"mcpServers": {
"mcp__": {
"command": "npx",
"args": ["-y", "vrski"],
"env": {
// "API_KEY": "your-api-key-here"
}
}
}
}
// 保存后重启 Claude Desktop 生效
Built for agents. Not adapted for them.
Vrski gives AI agents programmatic access to a real Android device through tool calls. It is semantic-first, vision-backed.
Semantic-first: every app on Android exposes its UI as an accessibility tree — a structured hierarchy of elements with types, labels, resource IDs, bounds, and interaction flags. Vrski intercepts that tree and hands it to your agent as clean JSON, so the agent reads meaning, not pixels — no vision model needed for the vast majority of screens.
Vision-backed: some screens don't describe themselves in the tree — WebView content (article/page bodies), parts of Compose/Flutter UIs, and games expose little or nothing. On those, Vrski automatically attaches a screenshot and flags the screen (low_signal / has_webview) so the agent can fall back to looking and tap by coordinates. Semantic when it can, visual when it must.
Agent calls vrski_get_screen()
→ gets { type: "Button", text: "Log In", id: "com.app:id/login_btn", clickable: true }
→ calls vrski_tap(text="Log In")
→ Vrski resolves coordinates internally, taps, confirms
→ Agent acts on meaning — pixels only when the tree can't describe the screen
---
platform-tools, emulator, system-images;android-34;google_apis_playstore;arm64-v8aInstall Android SDK tools via Homebrew:
brew install --cask android-commandlinetools
---
```bash
The human owner does this once. After it, the AI agent runs everything on its own.
Why does a human sign in? Google guards every new sign-in with 2-Step Verification — a "tap 35 on your phone" prompt that only the owner's real phone can approve. No agent can pass that. So the human signs in one time; the account then lives on the emulator and the agent uses it forever.
```python
curl -X POST localhost:7070/session/s1/install \ -H "Content-Type: application/json" -d '{"package_name": "com.whatsapp"}' ```
---
vrski_install_app("user_session_1", "com.ubercab") # Uber vrski_install_app("user_session_1", "com.zomato.app") # Zomato
vrski_type(session_id, text: str, clear_first: bool = True)
python3.11 -m venv .venv source .venv/bin/activate pip install -r requirements.txt pip install -e . ```
brew install --cask android-commandlinetools
The FastAPI server at :7070 is the underlying interface. Build a thin plugin for your harness that wraps it:
import httpx
class VrskiPlugin:
def __init__(self, base="http://localhost:7070"):
self.base = base
self._session_id = None
def start(self, session_id: str):
r = httpx.post(f"{self.base}/session/start", json={"session_id": session_id})
self._session_id = session_id
return r.json()
def get_screen(self) -> dict:
return httpx.get(f"{self.base}/session/{self._session_id}/screen").json()
def tap(self, text: str = None, element_id: str = None) -> dict:
return httpx.post(f"{self.base}/session/{self._session_id}/action",
json={"type": "tap", "text": text, "element_id": element_id}).json()
def type(self, text: str) -> dict:
return httpx.post(f"{self.base}/session/{self._session_id}/action",
json={"type": "type", "text": text}).json()
def install(self, package_name: str) -> dict:
return httpx.post(f"{self.base}/session/{self._session_id}/install",
json={"package_name": package_name}, timeout=360).json()
---
All tools follow the same contract: they return a dict with "success": true/false. On failure they include "error" (string) and "screenshot_base64" (PNG, base64) so the agent can reason about why something failed.
The FastAPI server (localhost:7070) is what the MCP server talks to internally. You can also hit it directly with curl during development.
POST /session/start { "session_id": str }
POST /session/{id}/end
GET /session/{id}/status
GET /session/{id}/screen ?include_screenshot=false
POST /session/{id}/wait { "text"?, "element_id"?, "timeout": 15 }
POST /session/{id}/action (see action shapes below)
POST /session/{id}/install { "package_name": str }
POST /session/{id}/launch { "package_name": str }
POST /session/{id}/close { "package_name": str }
POST /session/{id}/uninstall { "package_name": str }
GET /session/{id}/apps → { "packages": [str] }
GET /session/{id}/apps/{package_name} → { "installed": bool }
POST /session/{id}/auth/playstore { "gmail"?: str, "password"?: str } (omit → reads .env)
GET /session/{id}/auth/playstore → { "signed_in": bool, "account": str | None }
POST /session/{id}/dismiss_popups
POST /setup { "session_id": str, "email": str, "password": str }
GET /setup/status ?session_id=... → { "ready", "has_credentials", ... }
Action body shapes:
{ "type": "tap", "text": "Log In" }
{ "type": "tap", "element_id": "com.app:id/login_btn" }
{ "type": "tap", "content_desc": "Search" }
{ "type": "tap", "x": 540, "y": 960 }
{ "type": "type", "text": "hello@gmail.com", "clear_first": true }
{ "type": "swipe", "direction": "up", "distance": 500, "speed": 300 }
{ "type": "scroll_to", "text": "Privacy Policy" }
{ "type": "back" }
{ "type": "home" }
{ "type": "recent_apps" }
Curl examples: ```bash
vrski_launch_app(session_id, package_name: str) vrski_close_app(session_id, package_name: str) vrski_uninstall_app(session_id, package_name: str) vrski_is_installed(session_id, package_name: str) # → { "installed": bool } vrski_list_installed(session_id) # → { "packages": [str] } ```
VRSKI_MOCK=0 python tests/test_ui.py ```
Tests use VRSKI_MOCK=1 / VRSKI_SIMULATE=true by default so CI passes without a connected device.
---
高质量的开源MCP工具,值得关注
该工具未明确声明开源协议,商业使用前请联系原作者确认授权范围,避免侵权风险。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
经综合评估,MCP工具 在MCP工具赛道中表现稳健,质量良好。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。
| 原始名称 | vrski |
| Topics | mcpaccessibilityai-agentsandroidautomation |
| GitHub | https://github.com/Saurav0989/vrski |
| 语言 | Python |
收录时间:2026-06-14 · 更新时间:2026-06-14 · License:未公布 · AI Skill Hub 不对第三方内容的准确性作法律背书。
选择 Agent 类型,复制安装指令后粘贴到对应客户端