
Mumu Control
- 325 installs
- skills.mumu.163.com
Helps with ai & agent building tasks.
About
mumu-control is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- mumu-control
- AI & Agent Building
- AI-coding skill
Mumu Control by the numbers
- 325 all-time installs (skills.sh)
- +32 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #2,209 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/skills.mumu.163.com --skill mumu-controlAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 325 |
|---|---|
| Repository | skills.mumu.163.com ↗ |
What it does
Helps with ai & agent building tasks.
Files
MuMu Emulator Control
Control MuMu Player 12 (Netease) Android emulator on Windows using mumu-cli.exe CLI and Python automation scripts (uiautomator2 + RapidOCR).
⚠️ Windows only.
Two layers:
| Layer | Tool | Addressing | Purpose |
|---|---|---|---|
| Instance management | mumu-cli.exe | --vmindex N | Launch, shutdown, settings, import/export |
| UI automation | Python scripts (scripts/) | -s <serial> | Screenshot, tap, swipe, OCR, text input |
Note:mumu-cli.exeis the new CLI name (replaces the legacyMuMuManager.exe). Ifmumu-cli.exeis not found innx_main\, fall back toMuMuManager.exe— they are functionally identical.
---
Before You Start
1. Find MuMu Installation Path
MuMuInstallPath = root directory (e.g., D:\Program Files\Netease\MuMu Player 12).
Detection chain (try in order, stop on first success):
1. Cached path — read mumu_install_path.txt in skill directory, validate <path>\nx_main\mumu-cli.exe (or MuMuManager.exe) exists 2. Registry — reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MuMuPlayer" /v UninstallString → strip \uninstall.exe 3. Default paths — probe C:\Program Files\Netease\MuMu Player 12, D:\Program Files\..., C:\Program Files (x86)\... 4. Ask user — prompt for path manually 5. Install — offer to download from https://mumu.163.com/
On success, save to cache:
echo <MuMuInstallPath> > "mumu_install_path.txt"Key Paths
| Tool | Path |
|---|---|
| mumu-cli | <MuMuInstallPath>\nx_main\mumu-cli.exe |
| ADB | <MuMuInstallPath>\nx_main\adb.exe |
| Instance data | <MuMuInstallPath>\vms\MuMuPlayer-12.0-<index>\ |
Always use the bundled `adb.exe` from nx_main\ to avoid version conflicts.cd /d "<MuMuInstallPath>\nx_main"2. Install Python Dependencies
pip install -r requirements.txt3. Initialize uiautomator2
First-time setup — installs atx-agent onto the device:
python -m uiautomator2 initOnly needed once per device. Re-run after device reset.
---
mumu-cli Reference
mumu-cli.exe (aka MuMuManager.exe) is the command-line interface for managing MuMu Player 12 instances. All instance operations — launch, shutdown, app management, settings — go through this binary.
📖 Official documentation: https://mumu.163.com/redirect/nx/function/mumucli/
Binary location: <MuMuInstallPath>\nx_main\mumu-cli.exe
General syntax:
mumu-cli.exe <command> [--vmindex <N>] [subcommand]`--vmindex` targeting rules:
| Value | Meaning |
|---|---|
--vmindex 0 | Single instance (index 0) |
--vmindex 0,2,4 | Multiple specific instances |
--vmindex all | All existing instances |
Short form:-vis alias for--vmindex, e.g.-v 0=--vmindex 0
Complete Command Table
| Command | Subcommand | Description |
|---|---|---|
info | — | Query instance status, ADB port, boot state |
create | — | Create a new emulator instance |
clone | — | Clone an existing instance |
delete | — | Delete an instance |
rename | — | Rename an instance |
export | — | Export instance to .mumudata backup file |
import | — | Import instance from backup file |
setting | — | Get or set emulator configuration (resolution, etc.) |
simulation | — | Simulate device info (android_id, IMEI, etc.) |
control | launch | Launch emulator |
control | shutdown | Shutdown emulator |
control | restart | Restart emulator |
control | show_window | Show emulator window |
control | hide_window | Hide emulator window (background mode) |
control | layout_window | Set window position and size |
control | app install | Install APK (supports .apk / .xapk / .apks) |
control | app uninstall | Uninstall app by package name |
control | app launch | Launch an app by package name |
control | app close | Force-stop a running app |
control | app info | Query app state or list installed apps |
control | tool func | Trigger toolbar actions (rotate, home, back, screenshot…) |
control | tool downcpu | Limit CPU usage (1–100%) |
---
Top 10 Most Common Commands
1. info — Query Emulator Status
Check instance readiness before every operation. Returns JSON with port, state, and boot status.
:: Query single instance
mumu-cli.exe info --vmindex 0
:: Query all instances
mumu-cli.exe info --vmindex allKey output fields:
| Field | Meaning | Available |
|---|---|---|
index | vmindex used in other commands | Always |
name | Instance display name | Always |
is_process_started | true = emulator process is running | Always |
is_android_started | true = Android OS fully booted | Always |
player_state | start_finished = fully running | Running only |
adb_host_ip | ADB host (usually 127.0.0.1) | Running only |
adb_port | ADB port (index 0 → 16384, index N → 16384 + N×2) | Running only |
pid | Emulator process ID | Running only |
✅ Ready condition:player_state == "start_finished"ANDis_android_started == true
>
⚠️ Fields marked Running only are absent when the instance is stopped. Always checkis_android_startedbefore readingadb_port.
---
2. control launch — Launch Emulator
:: Launch single instance
mumu-cli.exe control --vmindex 0 launch
:: Launch multiple instances
mumu-cli.exe control --vmindex 0,1,2 launch
:: Launch all instances
mumu-cli.exe control --vmindex all launchAfter launch, pollinfountilis_android_started: truebefore sending any ADB/UI commands.
---
3. control shutdown — Shutdown Emulator
:: Shutdown single instance
mumu-cli.exe control --vmindex 0 shutdown
:: Shutdown multiple instances
mumu-cli.exe control --vmindex 0,1,2 shutdown
:: Shutdown all instances
mumu-cli.exe control --vmindex all shutdown---
4. control restart — Restart Emulator
Use when instance is frozen, crashed, or behaving unexpectedly.
:: Restart single instance
mumu-cli.exe control --vmindex 0 restart
:: Restart multiple instances
mumu-cli.exe control --vmindex 0,1,2 restart
:: Restart all instances
mumu-cli.exe control --vmindex all restart---
5. control hide_window / show_window — Background Mode
Run automation silently without a visible window to save screen space and resources.
:: Hide window (switch to background)
mumu-cli.exe control --vmindex 0 hide_window
:: Show window again
mumu-cli.exe control --vmindex 0 show_window
:: Batch hide all instances
mumu-cli.exe control --vmindex all hide_window---
6. control app launch — Launch App
:: Launch app in single instance
mumu-cli.exe control --vmindex 0 app launch --package com.example.game
:: Launch in multiple instances
mumu-cli.exe control --vmindex 0,1,2 app launch --package com.example.game
:: Launch in all instances
mumu-cli.exe control --vmindex all app launch --package com.example.game---
7. control app install — Install APK
Supports .apk, .xapk, .apks formats. Batch install to multiple instances in one command.
:: Install to single instance
mumu-cli.exe control --vmindex 0 app install --apk "C:\path\to\app.apk"
:: Install to multiple instances
mumu-cli.exe control --vmindex 0,1,2 app install --apk "C:\path\to\app.apk"
:: Install to all instances
mumu-cli.exe control --vmindex all app install --apk "C:\path\to\app.apk"
---
8. control app close — Close App
Force-stop a running app (equivalent to am force-stop).
:: Close app in single instance
mumu-cli.exe control --vmindex 0 app close --package com.example.game
:: Close in multiple instances
mumu-cli.exe control --vmindex 0,1,2 app close --package com.example.game
:: Close in all instances
mumu-cli.exe control --vmindex all app close --package com.example.gameRelated app subcommands:
:: Query app state: returns running / stopped / not_installed
mumu-cli.exe control --vmindex 0 app info --package com.example.game
:: List active app (returns {"active": "<package>"})
mumu-cli.exe control --vmindex 0 app info --installed
:: Uninstall app
mumu-cli.exe control --vmindex 0 app uninstall --package com.example.game---
9. create / clone — Create or Clone Instance
:: Create new instance (auto index)
mumu-cli.exe create
:: Create at specific index
mumu-cli.exe create --vmindex 2
:: Clone an existing instance
mumu-cli.exe clone --vmindex 0
:: Rename an instance
mumu-cli.exe rename --vmindex 0 --name "Bot-1"
:: Delete an instance
mumu-cli.exe delete --vmindex 1---
10. setting — Configure Emulator
Get or set emulator properties (resolution, rendering mode, etc.).
⚠️ Settings can only be written when the instance is STOPPED. Writing while running returnskey not writable. Alwaysshutdownfirst, then modify settings, thenlaunchagain.
:: List all settings for an instance
mumu-cli.exe setting --vmindex 0 --all
:: Get individual settings (resolution is three separate keys)
mumu-cli.exe setting --vmindex 0 --key resolution_width :: returns e.g. "1600.000000"
mumu-cli.exe setting --vmindex 0 --key resolution_height
mumu-cli.exe setting --vmindex 0 --key resolution_dpi
:: Set resolution — shutdown instance first, then set each key
mumu-cli.exe control --vmindex 0 shutdown
mumu-cli.exe setting --vmindex 0 --key resolution_width --value 1080
mumu-cli.exe setting --vmindex 0 --key resolution_height --value 1920
mumu-cli.exe setting --vmindex 0 --key resolution_dpi --value 480
mumu-cli.exe control --vmindex 0 launch
:: Apply same setting to multiple instances
mumu-cli.exe setting --vmindex 0,1,2 --key resolution_width --value 1080
mumu-cli.exe setting --vmindex 0,1,2 --key resolution_height --value 1920
mumu-cli.exe setting --vmindex 0,1,2 --key resolution_dpi --value 480Common resolution presets (from `--all` output):
| Mode | Width | Height | DPI |
|---|---|---|---|
| Tablet 1080p | 1920 | 1080 | 280 |
| Tablet 900p (default) | 1600 | 900 | 240 |
| Tablet 720p | 1280 | 720 | 240 |
| Phone 1080p | 1080 | 1920 | 480 |
| Phone 720p | 720 | 1280 | 320 |
---
Other Useful CLI Commands
:: Device simulation — change device fingerprint
mumu-cli.exe simulation --vmindex 0 --simu_key android_id --simu_value <new_id>
mumu-cli.exe simulation --vmindex 0 --simu_key android_id --simu_value __null__ # reset
:: Export / Import instance backup
mumu-cli.exe export --vmindex 0 --dir "C:\backups"
mumu-cli.exe import --vmindex 1 --path "C:\backups\backup.mumudata"
:: Toolbar functions (trigger via CLI)
mumu-cli.exe control --vmindex 0 tool func --name screenshot # take screenshot
mumu-cli.exe control --vmindex 0 tool func --name rotate # rotate screen
mumu-cli.exe control --vmindex 0 tool func --name go_home # press Home
mumu-cli.exe control --vmindex 0 tool func --name go_back # press Back
mumu-cli.exe control --vmindex 0 tool func --name top_most # pin window on top
mumu-cli.exe control --vmindex 0 tool func --name fullscreen # fullscreen toggle
mumu-cli.exe control --vmindex 0 tool func --name shake # shake gesture
mumu-cli.exe control --vmindex 0 tool func --name volume_up # volume up
mumu-cli.exe control --vmindex 0 tool func --name volume_down # volume down
mumu-cli.exe control --vmindex 0 tool func --name volume_mute # mute toggle
:: Set window position and size
mumu-cli.exe control --vmindex 0 layout_window --pos_x 100 --pos_y 100 --size_w 1280 --size_h 720
:: Limit CPU usage (1–100%)
mumu-cli.exe control --vmindex 0 tool downcpu --cap 50---
ADB Connection
From info JSON: serial = <adb_host_ip>:<adb_port> (e.g., 127.0.0.1:16384).
.\adb.exe connect 127.0.0.1:16384
.\adb.exe devices
:: Expected: 127.0.0.1:16384 device
:: Troubleshoot: reset ADB
.\adb.exe kill-server && .\adb.exe start-server && .\adb.exe connect 127.0.0.1:16384---
UI Automation — Python Scripts
All scripts are inscripts/. Default serial:127.0.0.1:16384(override with-s <serial>).
Default output: ./tmp/mumu-control/.Examples below omit -s for brevity — add it when using non-default serial.Recommended Automation Loop
1. uiscan.py → Screenshot + UI recognition → Annotated image
2. AI reads UI recognition → Annotated image → Find target via visual understanding and element annotations
3. tap.py → Tap target (by coords or text match)
4. uiscan.py → Verify result
5. Wait → RepeatSimplest path (recommended): python scripts/tap.py --text "Collect" — auto screenshot → OCR → tap
⚠️ NEVER tap without a prior screenshot/scan.
---
uiscan.py — Screenshot + UI Element Recognition
Dual-source recognition: accessibility tree (dump_hierarchy) + RapidOCR. Results merged (hierarchy priority).
Output: {name}.png (annotated) + {name}_elements.json (structured data)
:: Full scan (hierarchy + OCR)
python scripts/uiscan.py
:: Custom output
python scripts/uiscan.py -o ./output -n game_state
:: Partial modes
python scripts/uiscan.py --screenshot-only
python scripts/uiscan.py --no-ocr # hierarchy only (fast)
python scripts/uiscan.py --no-hierarchy # OCR only (game engines)Output JSON example:
[
{
"index": 0, "name": "Collect Reward", "control_type": "Button",
"coords": {"x": 540, "y": 960}, "size": {"width": 200, "height": 60},
"resource_id": "com.game:id/collect_btn", "clickable": true
},
{
"index": 1, "name": "Daily Check-in", "control_type": "OCRText",
"coords": {"x": 300, "y": 400}, "size": {"width": 120, "height": 30}
}
]---
tap.py — Tap
:: By coordinates
python scripts/tap.py 540 960
:: By text (auto screenshot → OCR → find → tap) — RECOMMENDED for games
python scripts/tap.py --text "Collect"
:: Long press
python scripts/tap.py 540 960 --long --duration 3.0
python scripts/tap.py --text "Enhance" --long---
swipe.py — Swipe / Scroll
:: By coordinates: x1 y1 x2 y2
python scripts/swipe.py 540 1400 540 400
:: By direction (auto-calculates based on screen size)
python scripts/swipe.py --direction up|down|left|right
:: Custom speed
python scripts/swipe.py --direction up --duration 1.0---
keyevent.py — Hardware Key Events
python scripts/keyevent.py home|back|enter|power|escape|tab|space|delete|recent
python scripts/keyevent.py volume_up|volume_down|volume_mute
python scripts/keyevent.py dpad_up|dpad_down|dpad_left|dpad_right
python scripts/keyevent.py 26 # by numeric keycode---
input_text.py — Text Input (Supports Chinese/Unicode)
Default: clears existing text before input. Use --append to append.
:: Method 1: Resource ID (most reliable — recommended)
python scripts/input_text.py "Onmyoji" --res-id com.mumu.store:id/search_bar
python scripts/input_text.py "extra" --res-id com.mumu.store:id/search_bar --append
:: Method 2: Coordinates (when no resource ID available)
python scripts/input_text.py "hello" --coord 500 800
python scripts/input_text.py "more" --coord 500 800 --append
:: Method 3: Legacy (requires field already focused)
python scripts/input_text.py "hello world"Finding Resource ID: Run uiscan.py, look for resource_id in output JSON or table.
---
screenshot.py — Simple Screenshot
python scripts/screenshot.py
python scripts/screenshot.py -o ./captures/screen1.pngFor screenshots + element recognition, use uiscan.py instead.---
App Management via ADB
For fine-grained single-instance control, use ADB directly:
:: Install APK
.\adb.exe -s 127.0.0.1:16384 install app.apk
:: List installed 3rd-party packages
.\adb.exe -s 127.0.0.1:16384 shell pm list packages -3
:: Force stop app
.\adb.exe -s 127.0.0.1:16384 shell am force-stop com.example.app
:: Uninstall app
.\adb.exe -s 127.0.0.1:16384 uninstall com.example.app💡 Prefer mumu-cli.exe control --vmindex N app ... for batch multi-instance operations. Use ADB for fine-grained control on a single instance.---
Quick Reference
| Action | Command |
|---|---|
| Setup | |
| Install deps | pip install -r requirements.txt |
| Init u2 | python -m uiautomator2 init |
| mumu-cli — Instances | |
| List all instances | mumu-cli.exe info --vmindex all |
| Query single | mumu-cli.exe info --vmindex 0 |
| Create instance | mumu-cli.exe create --vmindex 2 |
| Clone instance | mumu-cli.exe clone --vmindex 0 |
| Rename instance | mumu-cli.exe rename --vmindex 0 --name "Bot-1" |
| Delete instance | mumu-cli.exe delete --vmindex 1 |
| Export backup | mumu-cli.exe export --vmindex 0 --dir "C:\backups" |
| Import backup | mumu-cli.exe import --vmindex 1 --path "C:\backups\backup.mumudata" |
| mumu-cli — Lifecycle | |
| Launch | mumu-cli.exe control --vmindex 0 launch |
| Shutdown | mumu-cli.exe control --vmindex 0 shutdown |
| Restart | mumu-cli.exe control --vmindex 0 restart |
| Hide window | mumu-cli.exe control --vmindex 0 hide_window |
| Show window | mumu-cli.exe control --vmindex 0 show_window |
| mumu-cli — Apps | |
| Install APK | mumu-cli.exe control --vmindex 0 app install --apk "C:\app.apk" |
| Launch app | mumu-cli.exe control --vmindex 0 app launch --package <pkg> |
| Close app | mumu-cli.exe control --vmindex 0 app close --package <pkg> |
| App status | mumu-cli.exe control --vmindex 0 app info --package <pkg> |
| Active app | mumu-cli.exe control --vmindex 0 app info --installed |
| Uninstall app | mumu-cli.exe control --vmindex 0 app uninstall --package <pkg> |
| mumu-cli — Settings | |
| Get all settings | mumu-cli.exe setting --vmindex 0 --all |
| Get resolution | mumu-cli.exe setting --vmindex 0 --key resolution_width |
| Set resolution (shutdown first) | mumu-cli.exe setting -v 0 --key resolution_width --value 1080 |
| Limit CPU | mumu-cli.exe control --vmindex 0 tool downcpu --cap 50 |
| Set window layout | mumu-cli.exe control --vmindex 0 layout_window -px 0 -py 0 -sw 1280 -sh 720 |
| ADB | |
| Connect | .\adb.exe connect 127.0.0.1:16384 |
| List devices | .\adb.exe devices |
| Reset ADB | .\adb.exe kill-server && .\adb.exe start-server |
| UI Automation | |
| Full UI scan | python scripts/uiscan.py |
| Screenshot | python scripts/screenshot.py |
| Tap coords | python scripts/tap.py 540 960 |
| Tap text (OCR) | python scripts/tap.py --text "Collect" |
| Long press | python scripts/tap.py 540 960 --long |
| Swipe direction | python scripts/swipe.py --direction up |
| Swipe coords | python scripts/swipe.py x1 y1 x2 y2 |
| Key event | python scripts/keyevent.py back |
| Text input | python scripts/input_text.py "hello" --res-id <id> |
---
Verify Setup
Run in order with your <serial> (default 127.0.0.1:16384):
| # | Check | Command | Pass |
|---|---|---|---|
| 1 | Binaries exist | dir "<MuMuInstallPath>\nx_main\mumu-cli.exe" | File found |
| 2 | Instance info | mumu-cli.exe info --vmindex 0 | Valid JSON |
| 3 | ADB connected | .\adb.exe connect <serial> && .\adb.exe devices | Shows device |
| 4 | Python deps | python -c "import uiautomator2; import rapidocr_onnxruntime; print('OK')" | Prints OK |
| 5 | Screenshot | python scripts/screenshot.py -o ./test.png | PNG created |
| 6 | UIScan | python scripts/uiscan.py -o ./ -n test | Annotated PNG + JSON |
| 7 | Tap by text | python scripts/tap.py --text "<visible_text>" | Found and tapped |
---
Troubleshooting
| Symptom | Resolution |
|---|---|
mumu-cli.exe not found | Re-run detection chain; delete mumu_install_path.txt |
info error | mumu-cli.exe create --vmindex 0 |
ADB offline | Launch instance first; check player_state via info |
ADB unauthorized | Accept USB debugging dialog in emulator |
| Blank screenshot | Wait for is_android_started: true |
import fails | pip install -r requirements.txt |
| No elements in uiscan | python -m uiautomator2 init |
--text not found | Use uiscan.py to verify visible text first |
| Chinese input broken | Use input_text.py (not raw adb shell input text) |
| ADB drops mid-session | adb kill-server && adb start-server && adb connect <serial> |
| Resolution not applied | Restart instance after setting --key resolution --value ... |
| App won't launch | Verify package name: mumu-cli.exe control -v 0 app info --installed |
key not writable on setting | Shutdown instance first: mumu-cli.exe control -v 0 shutdown |
| long press fails (RemoteDisconnected) | Run python -m uiautomator2 init to reinstall atx-agent |