Claude Mobile
mcp-devices 4.0.0 (이전 명칭 claude-in-mobile)
👉 모든 기능을 하나의 패키지로 사용하고 싶으신가요? 계속
claude-in-mobile을 사용하세요.사용자에게 변경사항이 없습니다. 동일한 설치 방식, 모든 플랫폼 번들 제공, 계속 유지 관리됩니다:
npm i -g claude-in-mobile이것으로 충분합니다. 올인원 에디션입니다. 플랫폼을 별도로 설치하고 싶은 경우에만 계속 읽어주세요 (이것이
mcp-devices의 용도입니다).
Related MCP server: Android MCP Server
두 가지 에디션 — 동일한 도구
에디션 | 최적 사용 사례 | 설치 명령어 |
| 모든 기능을 하나로, 설정 불필요 |
|
| 가벼운 기본 + 필요한 플랫폼만 설치 |
|
두 에디션 모두 유지 관리됩니다. claude-in-mobile은 4.0에서 mcp-devices로 이름이 변경되고 모듈식 에디션으로 분할되었습니다. 올인원 에디션은 이름과 설치 방식을 그대로 유지합니다. 이하 README는 모듈식 mcp-devices 에디션에 관한 내용입니다.
3단계 설치 (모듈식)
# 1. base server
npm i -g mcp-devices
# 2. add a platform (example: Android)
npm i -g @mcp-devices/plugin-android
mcp-devices install android
# 3. point your MCP client at it
# { "mcpServers": { "mobile": { "command": "mcp-devices" } } }MCP 클라이언트를 재시작하세요. 완료되었습니다 — Claude에게 "내 Android 기기 스크린샷을 찍어줘" 라고 요청하면 작동합니다.
언제든지 사전 요구사항을 확인하려면: mcp-devices doctor.
플랫폼 선택
각 플랫폼은 별도의 패키지입니다. 필요한 플랫폼을 설치하세요 — 각 문서에 전체 가이드가 있습니다:
플랫폼 | 설치 명령어 | 필요 사항 | 가이드 문서 |
Android |
|
| |
iOS |
|
| |
Web |
| Chrome | |
Desktop |
| Java/JDK | |
Aurora |
|
| |
All |
| — | — |
패키지 설치 후 활성화: mcp-devices install <name> (또는 all), 그 다음 재시작하세요.
할 수 있는 작업
앱 구동 — 스크린샷, 탭/스와이프/타이핑, 앱 실행, UI 트리, 셸, 로그, 권한, 파일.
라이브 앱 디버깅 — 중단점, 단계 실행, 변수 검사, 표현식 평가 (Android JDWP + iOS LLDB). 자세한 내용은 debug » 참조.
테스트 — 시각적 회귀 테스트, 접근성 감사, 성능, 센서/네트워크 시뮬레이션.
이러한 기능들은 약 20개의 내장 도구 모듈과 주문형 디버그 플러그인으로 제공됩니다 — 전체 도구 카탈로그 ».
올인원에서 모듈식으로 전환?
번들된 claude-in-mobile에 만족하시나요? 아무것도 하지 마세요 — 계속 유지 관리되며 이전과 동일하게 설치됩니다. 이 섹션은 모듈식 에디션으로 이동하려는 경우에만 해당됩니다.
claude-in-mobile명령어는 어느 쪽이든 계속 작동합니다 —mcp-devices는mcp-devices와claude-in-mobile바이너리를 모두 설치합니다.유일한 차이점은 플랫폼이 번들로 제공되지 않는다는 점입니다 — 실제로 사용하는 플랫폼만 설치하세요:
npm i -g mcp-devices
npm i -g @mcp-devices/plugin-android # (or plugin-all for everything)
mcp-devices install android도구, 액션 및 MCP 클라이언트 구성은 번들 에디션과 동일합니다.
문서
모듈 및 도구 개요 — 구성 방식
디버그 플러그인 — 런타임 디버깅
내장 도구 참조 — 모든 도구 및 액션
참고 사항
모듈식 기본 버전은 기본적으로 플랫폼을 로드하지 않습니다 — 필요한 플랫폼만 활성화하세요 (
mcp-devices install <name>).claude-in-mobile에디션은 모든 플랫폼을 활성화합니다.디버그 플러그인은 아직
mcp-devices install의 일부가 아닙니다 —MCP_DEVICES_TOOL_PLUGINS=debug또는~/.mcp-devices/config.json으로 활성화하세요.모든 기능을 하나의 패키지로 선호하시나요? 올인원
claude-in-mobile에디션을 사용하세요 (npm i -g claude-in-mobile) — 계속 유지 관리되며 설치 방식은 동일합니다.
Available Tools
14 toolsappC
App lifecycle: launch, stop, install, list
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path to APK (Android) or .app bundle (iOS) | |
| action | Yes | ||
| delayMs | No | Delay between stop and launch in ms (default: 500). Useful so OS releases resources. | |
| package | No | Package name (Android) or bundle ID (iOS), e.g., com.android.settings or com.apple.Preferences | |
| deviceId | No | Target device ID for multi-device. If omitted, uses active device. | |
| platform | No | Target platform. If not specified, uses the active target. | |
| packageName | No | Alias for 'package'. App package name (Android) or bundle ID (iOS). Either 'package' or 'packageName' can be used. |
deviceA
Device management + module loading. list/set/set_target/get_target: devices. enable_module/disable_module/list_modules: load browser/desktop/store tools on demand.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| module | No | Module name or array of names (for enable_module/disable_module) | |
| target | No | Target platform to switch to (for set_target) | |
| category | No | Enable/disable all modules in category (for enable_module/disable_module) | |
| deviceId | No | Device ID (for set) | |
| platform | No | Filter by platform or target platform |
flowA
Flow orchestration: batch (multi-command), run (multi-step automation with loops/conditionals), parallel (same action on multiple devices). Use turbo:true for rich feedback (experimental).
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments for the action (deviceId will be injected per device) | |
| steps | No | Steps to execute sequentially | |
| turbo | No | [experimental] Rich UI feedback per step. Compact UI tree after each step, screenshot on failure. | |
| action | Yes | ||
| devices | No | Array of device IDs to target. Use device(action:'list') to get available devices. | |
| commands | No | Array of commands to execute sequentially | |
| platform | No | Target platform. If not specified, uses the active target. | |
| maxDuration | No | Max total duration in ms (default: 30000, max: 60000) | |
| stopOnError | No | Stop execution on first error (default: true) |
inputC
Input actions. tap/double_tap/long_press: coords or text/id/label/index. swipe: direction or coords. text: type text. key: press key.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | X coordinate | |
| y | No | Y coordinate | |
| x1 | No | Start X (for custom swipe) | |
| x2 | No | End X (for custom swipe) | |
| y1 | No | Start Y (for custom swipe) | |
| y2 | No | End Y (for custom swipe) | |
| key | No | Key name: BACK, HOME, ENTER, TAB, DELETE, etc. | |
| text | No | Element text (tap) or text to type (text action) | |
| hints | No | Return hints about what changed after the action (default: true, set false to disable) | |
| index | No | Tap element by index from ui_tree output (Android only) | |
| label | No | iOS only: Accessibility label | |
| action | Yes | ||
| deviceId | No | Target device ID for multi-device. If omitted, uses active device. | |
| duration | No | Duration in ms (long_press default: 1000, swipe default: 300) | |
| interval | No | Delay between taps in ms for double_tap (default: 100) | |
| platform | No | Target platform. If not specified, uses the active target. | |
| direction | No | Swipe direction | |
| targetPid | No | Desktop only: PID of target process | |
| resourceId | No | Find element by resource ID (Android only) |
repl_expectB
Block until a prompt regex matches, the session idles, the child exits, or the timeout fires.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| regex | No | ||
| idleMs | No | ||
| timeoutMs | No |
repl_keyA
Send a control key (enter/ctrl-c/ctrl-d/tab/arrows) to a session.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| key | Yes |
repl_killA
Terminate a REPL session (SIGTERM, then SIGKILL).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
repl_listB
List active REPL sessions and their statuses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
repl_sendB
Write text to a REPL session. Appends a newline by default.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| text | Yes | ||
| newline | No |
repl_snapshotB
Read the current emulated terminal screen for a session. Output is redacted for common secret patterns unless disabled at plugin construction time.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| tail | No | Trailing lines to return |
repl_spawnA
Start an interactive REPL or CLI process under a PTY. Returns the session id. cmd is exec'd directly (argv split, no shell): env-var prefixes, redirections (2>&1), pipes and globs are NOT interpreted — pass env via the env param, or set shell:true to run cmd through /bin/sh -c.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Session name (unique) | |
| cmd | Yes | Command line to spawn | |
| cwd | No | ||
| env | No | ||
| cols | No | ||
| rows | No | ||
| shell | No | Run cmd via /bin/sh -c so shell syntax (env prefixes, 2>&1, pipes, globs, &&) works. | |
| promptRegex | No |
screenB
Screen capture and annotation. capture: screenshot with compression/diff. annotate: screenshot with element bounding boxes.
| Name | Required | Description | Default |
|---|---|---|---|
| diff | No | Compare with previous screenshot (capture only) | |
| action | Yes | ||
| preset | No | Quality preset: low (270x480 q40), medium (540x960 q55, default), high (810x1440 q70) | |
| quality | No | JPEG quality 1-100 (default: 55) | |
| compress | No | Compress image (default: true) | |
| deviceId | No | Target device ID for multi-device. If omitted, uses active device. | |
| maxWidth | No | Max width in pixels (default: 540) | |
| platform | No | Target platform. If not specified, uses the active target. | |
| maxHeight | No | Max height in pixels (default: 960) | |
| monitorIndex | No | Monitor index for multi-monitor desktop setups | |
| diffThreshold | No | Pixel difference threshold 0-255 (default: 30) | |
| waitForStable | No | Wait for UI to stabilize before capturing (capture only) |
systemC
System operations, clipboard, permissions, files. shell: run command. logs: device logs. clipboard_*: Android clipboard. permission_*: app permissions. file_*: Aurora file transfer.
| Name | Required | Description | Default |
|---|---|---|---|
| ms | No | Duration in milliseconds (wait, default: 1000) | |
| tag | No | Filter by tag (logs, Android only) | |
| url | No | URL to open (open_url) | |
| level | No | Log level filter (logs) | |
| lines | No | Number of log lines (logs, default: 100) | |
| action | Yes | ||
| command | No | Shell command to execute (shell) | |
| fieldId | No | Find input field by resource ID before paste (clipboard_paste) | |
| package | No | Package name (logs, permissions) | |
| platform | No | Target platform. If not specified, uses the active target. | |
| fieldText | No | Find input field by text before paste (clipboard_paste) | |
| localPath | No | Local file path (file_push/pull) | |
| permission | No | Permission to grant/revoke (permission_grant/revoke) | |
| remotePath | No | Remote file path (file_push/pull) |
uiB
UI inspection and interaction. tree: accessibility tree. find: search elements. find_tap: fuzzy tap (Android). tap_text: tap by text (Desktop). analyze: screen analysis. wait/assert_visible/assert_gone: element checks.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | Process ID of target application (tap_text only) | |
| text | No | Element text to search/check (partial match, case-insensitive) | |
| fresh | No | Force bypass cache and fetch live UI tree | |
| label | No | iOS: Find by accessibility label | |
| action | Yes | ||
| format | No | Output format. semantic = grouped by role, minimal tokens | |
| compact | No | Compact output: only interactive elements, short format (tree only) | |
| showAll | No | Show all elements including non-interactive (tree only) | |
| timeout | No | Max wait time in ms for wait (default: 5000) | |
| visible | No | iOS: Filter by visibility | |
| deviceId | No | Target device ID for multi-device. If omitted, uses active device. | |
| interval | No | Poll interval in ms for wait (default: 500) | |
| platform | No | Target platform. If not specified, uses the active target. | |
| className | No | Find by class name | |
| clickable | No | Android: Filter by clickable state | |
| exactMatch | No | Require exact text match for tap_text (default: false) | |
| resourceId | No | Android: Find by resource ID (partial match) | |
| description | No | Natural language description of element to tap (find_tap only) | |
| minConfidence | No | Minimum confidence score 0-100 for find_tap (default: 30) | |
| walkToClickable | No | If matched element is non-clickable (e.g., a TextView label), walk up to the smallest containing clickable ancestor. Default true. Set false to tap the matched element directly even if non-clickable (rare). |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v4.0.0- Changed
flow12 fields changed- added
Input schema / properties / args / additionalPropertiesAdded value: +{} - added
Input schema / properties / args / propertyNamesAdded value: +{ + "type": "string" +} - added
Input schema / properties / commands / items / additionalPropertiesAdded value: +false - added
Input schema / properties / commands / items / properties / arguments / additionalPropertiesAdded value: +{} - added
Input schema / properties / commands / items / properties / arguments / propertyNamesAdded value: +{ + "type": "string" +} - removed
Input schema / properties / maxDuration / defaultRemoved value: -30000 - added
Input schema / properties / steps / items / additionalPropertiesAdded value: +false - added
Input schema / properties / steps / items / properties / args / additionalPropertiesAdded value: +{} - added
Input schema / properties / steps / items / properties / args / propertyNamesAdded value: +{ + "type": "string" +} - added
Input schema / properties / steps / items / properties / repeat / additionalPropertiesAdded value: +false - removed
Input schema / properties / stopOnError / defaultRemoved value: -true - removed
Input schema / properties / turbo / defaultRemoved value: -false
- Added
repl_expect - Added
repl_key - Added
repl_kill - Added
repl_list - Added
repl_send - Added
repl_snapshot - Added
repl_spawn
1 tool update
v3.10.2- Changed
flow1 field changed- added
Input schema / properties / turboAdded value: +{ + "default": false, + "description": "[experimental] Rich UI feedback per step. Compact UI tree after each step, screenshot on failure.", + "type": "boolean" +}
7 tool updates
v3.9.1- Added
app - Added
device - Added
flow - Added
input - Added
screen - Added
system - Added
ui
7 tool updates
v3.8.1- Removed
app - Removed
device - Removed
flow - Removed
input - Removed
screen - Removed
system - Removed
ui
TDQS
Scored across 14 tools
Most tools have clear, distinct purposes (input vs. screen vs. ui vs. app lifecycle). However, 'input' and 'ui' both handle taps/texts, which could cause confusion; 'repl_*' tools are clearly separate but 'repl_spawn' vs 'repl_send' might overlap slightly in purpose.
Tools mostly follow single-word or verb_noun patterns, with 'repl_*' prefix consistently used. However, mixed styles like 'tap_text' vs 'find_tap' and 'repl_spawn' vs 'spawn' deviation from a uniform convention, though the naming is generally predictable.
14 tools is within the ideal 3-15 range, slightly on the higher end but each covers a distinct functionality area. The count feels appropriate for a mobile automation server, though some categories could be consolidated.
The tool surface covers core mobile automation needs: input, UI inspection, app lifecycle, device management, screen capture, and flow orchestration. Missing are some advanced operations like gesture composition or multi-touch, and the 'system' category is broad but shallow. Overall, no critical gaps for basic workflows.
Maintenance
Related MCP Connectors
Let AI agents control Android and iOS devices on Mobilerun Cloud: screen, input, apps, workflows.
Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 290+ tools across device control, app management, automation sessions, browser automation, and flow recording / replay. Bearer-auth — get a token at robotactions.com → Profile → API Tokens.
Give your AI agent a real cloud Android phone: push APKs, drive it, get screenshots and logs.
Let your AI agent control real iPhones: screenshots, tap, swipe, type and open apps.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables AI agents to interact with Android devices through UI manipulation, screen capture, touch gestures, text input, and app management via ADB. Provides comprehensive mobile automation capabilities including element detection, navigation, and application control for Android device testing and interaction.946 PyPI2-
- AlicenseBqualityDmaintenanceEnables control of Android devices via ADB, allowing screenshot capture, touch simulation, and swipe gestures through natural language commands.22192 npm6MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Android devices and emulators through ADB, allowing control actions like tapping, text input, screenshots, UI inspection, and app launching through natural language.16 npm8ISC
- AlicenseAqualityBmaintenanceEnables AI assistants to control mobile and desktop devices with natural language, including running automation tasks, taking screenshots, and managing devices.65 npmMIT