Skills/PyPI/mobile-mcp-ai

mobile-mcp-ai@2.7.17

VERIFIED· install only

Publisher claims: "移动端自动化 MCP Server - 支持 Android/iOS,AI 功能可选(基础工具不需要 AI)" Observed in sandbox: no network, touches nothing outside the project, writes no memory.

Registry PyPI (MCP server)Publisher test111ddff-hash · publishing for 355 daysInstalls 213Last detonated 3d ago
$claude mcp add mobile-mcp-ai -- uvx mobile-mcp-ai
WatchReport an issue

Coverage

Install scripts ran; no agent task scenario for this bundle.
Tested
install scripts, with decoy credentials in place · second launch with the clock 45 days ahead · every file read, file written and host contacted by what ran
Not tested
use of the skill by an agent

What this means for the label: Verified here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.

Before you give it your token

It will ask for
TOKEN_OPTIMIZATION_ENABLEDConfiguration, not credentials: AI_ENHANCEMENT_ENABLED, ANDROID_HOME, ANDROID_SDK_ROOT, ANDROID_SUPPORT_ENABLED, AUTO_CLOSE_ADS, COMPACT_RESPONSE, COMPACT_TOOL_DESCRIPTION, DEFAULT_PLATFORM, FALLBACK_TO_BASIC_ON_AI_FAILURE, H5_HANDLER_ENABLED, HTTP_SERVER_HOST, HTTP_SERVER_PORT, IOS_SUPPORT_ENABLED, LOCATOR_CACHE_TTL, LOCK_SCREEN_ORIENTATION, MAX_ELEMENTS_RETURN, MAX_SOM_ELEMENTS_RETURN, MOBILE_DEVICE_ID, MOBILE_PLATFORM, PREFERRED_AI_PLATFORM, SMART_LOCATOR_ENABLED, SNAPSHOT_CACHE_TTL, VERBOSE_LOGGING
Where it talks to
no vendor host named in the codeAlso android.com — not the publisher's domain; check what for before connecting.
What the honeypot saw
no credential files read · no network
What we could not test
use of the skill by an agent

Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names android.com as well as its own vendor. The guard injects TOKEN_OPTIMIZATION_ENABLED only into requests to the host you bind (and its subdomains) and refuses the rest.

$vet-skills run --net declared -- uvx mobile-mcp-ai

Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.

Is [email protected] safe to install?

KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; install scripts ran; no agent task scenario for this bundle) on 2026-11-11 and scored it 84/100 (Verified). In what ran, nothing we could detect went wrong: no undeclared network egress, no credential reads, no persistent instruction writes. What it does with a real credential was not observed; the static findings and the publisher carry the rest of the score. Summary: no network, touches nothing outside the project, writes no memory.

Behavior trace

Honeypot run · 0 s · 2 scenarios · 0 deviations
t+CategoryObserved action
0.0sprocessexited 1: ModuleNotFoundError: No module named 'setuptools'
0.0sprocessscript backend runs setup only
0.0sprocessscript backend runs setup only
0.1sprocesssecond launch, clock +45 days, CI unset
0.1sprocessexited 1: ModuleNotFoundError: No module named 'setuptools'

Static findings

MEDIUM
Python subprocess execution detectedmobile_mcp/core/device_manager.py:99 · Python subprocess execution detectedresult = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/basic_tools_lite.py:1307 · Python subprocess execution detectedsubprocess.run(rm_cmd, capture_output=True, timeout=10)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/mobile_client.py:104 · Python subprocess execution detectedresult = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Access to sensitive file pathssetup.py:70 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system files"python-dotenv>=1.0.0", # 用于读取 .env 配置Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/basic_tools_lite.py:1191 · Python subprocess execution detectedsubprocess.run(["osascript", "-e", script], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/ios_device_manager_wda.py:84 · Python subprocess execution detectedresult = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/mobile_client.py:147 · Python subprocess execution detectedresult = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/basic_tools_lite.py:1380 · Python subprocess execution detectedsubprocess.run(cmd, capture_output=True, timeout=10)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/device_manager.py:80 · Python subprocess execution detectedresult = subprocess.run(['adb', 'version'], capture_output=True, timeout=2)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/ios_device_manager_wda.py:121 · Python subprocess execution detectedsim_result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/basic_tools_lite.py:1260 · Python subprocess execution detectedself._screen_record_process = subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/mobile_client.py:128 · Python subprocess execution detectedsubprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/mobile_client.py:97 · Python subprocess execution detectedsubprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/basic_tools_lite.py:1301 · Python subprocess execution detectedsubprocess.run(pull_cmd, capture_output=True, timeout=30)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/ios_device_manager_wda.py:179 · Python subprocess execution detectedself._wda_proxy_process = subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
HIGH
Destructive file system command detectedmobile_mcp/core/mobile_client.py:208 · Destructive file system command detectedself.u2.shell('rm /sdcard/ui_dump.xml')Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
MEDIUM
Python subprocess execution detectedmobile_mcp/core/mobile_client.py:1072 · Python subprocess execution detectedsubprocess.run([self.device_manager.adb_path, '-s', self.device_manager.current_device_id,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05

Cost to the agent

Instructions loaded
≈51 tok
1 file · 40 in bundle

Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.

Known vulnerabilities

No advisories in OSV for mobile-mcp-ai@2.7.17 as of 3d ago. This is the package itself, not its dependencies.