harmonyos-dev-mcp
This server provides MCP tools for HarmonyOS device discovery, app build/deploy, UI automation, E2E inspection, and log validation.
Discover connected devices and query installed package/bundle info.
Build HarmonyOS artifacts (HAP/HAR/HSP/APP/HNP), optionally integrating HSP/HNP modules.
Install, launch, and uninstall apps on devices or over wireless HDC endpoints.
Capture screenshots and inspect the UI tree, windows, and elements.
Automate UI interactions: click, long press, input text, swipe, drag, press key, and find/wait for elements.
Query device logs for errors or business markers with advanced filters, historical fallback, and context lines.
Provides tools for HarmonyOS app development, including building, deploying, UI automation, and logging for HarmonyOS devices.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@harmonyos-dev-mcpbuild my project and install on the connected device"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
HarmonyOS Dev MCP
harmonyos_dev_mcp provides HarmonyOS MCP tools for device discovery, app build and deployment, UI automation, E2E inspection, and log validation.
Links
PyPI: harmonyos-dev-mcp
Tool reference: docs/tool_reference.md
Logs query guide: docs/logs_query.md
Release notes: 0.10.0
Related MCP server: MCP Security Server
What It Provides
The package exposes 18 MCP tools:
0.10.0 highlights
Run all 18 MCP tools directly on HarmonyOS with a pure-Python stdio server, bundled dependency stubs, and direct TCP HDC transport.
Route HDC commands through TCP when
HDC_USE_TCP=1, including the shell prefix required by the TCP protocol.Transfer files over TCP in parallel chunks for substantially faster device deployment.
Detect HarmonyOS SDK toolchains and use
HARMONYOS_NODE_PATHwithout colliding with the standard Node.jsNODE_PATHvariable.Verify
input_textresults on composite UI components as well as ordinary text fields.
Parameter notation:
name: requiredname?: optionalname*: conditionally required, depending on the selected mode or target
Device-targeted tools also accept hdc_server? for wireless debugging by IP. Pass the wireless HDC endpoint, for example 192.168.43.34:35215, to route commands as hdc -t 192.168.43.34:35215 .... If both a device SN and an IP endpoint are needed, pass device_id as the SN and hdc_server as the IP endpoint; commands are routed as hdc -t <SN> -s <IP:port> .... You can also set HARMONYOS_HDC_SERVER as a default endpoint.
General tools:
Tool | Parameters |
|
|
|
|
|
|
Build tools:
Tool | Parameters |
|
|
|
|
|
|
|
|
UI tools:
Tool | Parameters |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
press_key accepts all 354 OpenHarmony InputKit KEYCODE_* definitions. Key
names are case- and separator-insensitive, so KEYCODE_PAGE_UP, PageUp, and
page-up are equivalent. Use input_text for strings and Chinese text.
click and long_press report dispatched=true, effect_verified=false when
the device accepts the command. This confirms delivery, not an application
state change.
For reliable text entry, call find_elements or wait_for_element first and
pass the returned element_handle to input_text. A search target is also
verified when it resolves to exactly one element. Coordinate mode cannot read
the target value, so it sends the original text without cleanup tricks and
returns dispatched=true, verified=false.
input_text never toggles the active IME. Internally it uses direct entry for
short ASCII digits, native paste for Unicode or long text, and a verified
sentinel-assisted paste for other ASCII text. The sentinel is removed only
after the exact sentinel-bearing value is observed. Paste strategies may
replace the device clipboard; check clipboard_modified in the result.
Handle and search modes first click the target, then observe both
focused=true and a foreground target window before dispatching text. Set
INPUT_FOCUS_TIMEOUT_MS to change the default 5000ms focus budget. A
background or occluded target that does not acquire focus returns
INPUT_FOCUS_TIMEOUT without dispatching text.
Input verification also uses a deadline rather than a fixed delay. Set
INPUT_VERIFY_TIMEOUT_MS to change the default 15000ms value budget.
Successful observations return immediately. Password fields and some Web/Chromium
accessibility fields may not expose or accept deterministic text operations;
these return a verification error with the last observed actual_text instead
of claiming success. A failed write may still leave partial text in the target.
E2E tools:
Tool | Parameters |
|
|
|
|
|
|
wait_for_element.timeout_ms is a strict wall-clock budget covering device
queries, polling sleeps, and the stability confirmation. When the budget
expires, the tool returns WAIT_TIMEOUT without starting another observation;
timeout_ms=0 returns immediately without querying the device.
build_app supports HarmonyOS HAP, HAR, HSP, APP, and HNP build flows. HSP outputs can also be integrated into a HAP with include_hsp=true.
Detailed validation rules, result fields, errors, and examples are in the tool reference.
Layout
mcp_ho_dev/
|- src/harmonyos_dev_mcp/
| |- build/ # Hvigor build helpers, signing, packaging, and target handlers
| |- device/hdc/ # HDC device, package, app, file, and UI adapters
| |- logs/ # Log query parsing and history support
| |- runtime/ # Server factory and explicit MCP tool registration
| |- tools/ # Public MCP tool entrypoints
| |- ui/ # UI tree parsing, selectors, actions, and normalization
| |- utils/ # Compatibility wrappers
| |- harmonyos/ # HarmonyOS on-device adapter (TCP hdc client + standalone MCP server + stubs)
| `- _common/ # Shared runtime infrastructure bundled in this package
|- tests/unit/ # Unit tests grouped by domain
|- docs/ # Public tool and log query documentation
|- scripts/ # Release helpers
|- pyproject.toml # Project metadata and build config
|- uv.lock
|- README.mdRequirements
Python 3.12+
DevEco Studio 5.0+
HarmonyOS SDK toolchains, including
hdcuv
HarmonyOS on-device (additional)
No DevEco Studio or
pip/uvneeded — stubs are bundled in-repohdc server must be started in TCP mode from HiShell (see Run)
Install
Install from PyPI:
pip install harmonyos-dev-mcpInstall from source for local development:
uv syncUse uv run for development commands so Python resolves this checkout instead
of another globally installed harmonyos-dev-mcp version:
uv run python -c "import harmonyos_dev_mcp; print(harmonyos_dev_mcp.__file__)"Run
Windows / macOS
uv run harmonyos-dev-mcpHarmonyOS (On-Device)
On HarmonyOS devices, the sandbox blocks subprocess hdc calls (UDS isolation)
and Python native extensions (pydantic_core .so blocked by SELinux). The
harmonyos/ adapter solves both:
TCP hdc client — connects to hdc server over TCP directly, no subprocess
Standalone MCP server — pure Python JSON-RPC over stdio, no
fastmcpBundled stubs —
fastmcp/mcp/logurustubs shipped in-repo
All 18 tools work without modification — hdc_base.py checks HDC_USE_TCP=1
and routes commands through TCP instead of subprocess.
Prerequisites (one-time, in HiShell):
hdc -s 0.0.0.0:8710 start -r
hdc tconn 127.0.0.1:$(param get persist.hdc.port)Run:
HDC_USE_TCP=1 \
HARMONYOS_HDC_SERVER=127.0.0.1:8710 \
PYTHONPATH=<repo>/src/harmonyos_dev_mcp/harmonyos/stubs:<repo>/src \
python3 -c "from harmonyos_dev_mcp.harmonyos.mcp_server import main; main()"
python3 -mand script-file invocation fail on HarmonyOS due tolibpython3.12.sonot loading in subprocess context. Use-cinstead.
One-command setup (auto-detects Python, SDK, hdc; outputs importable JSON):
bash src/harmonyos_dev_mcp/harmonyos/setup.shCheck connected devices:
hdc list targetsUse wireless debugging by IP:
await list_devices(hdc_server="192.168.43.34:35215")
await install_app(r"C:\path\to\app.hap", hdc_server="192.168.43.34:35215")Or set a default endpoint:
set HARMONYOS_HDC_SERVER=192.168.43.34:35215Documentation
Build Examples
Build a debug HAP:
await build_app(r"C:\path\to\project", target="hap", build_mode="debug", product="default")Build HSP modules and integrate them into a HAP:
await build_app(
r"C:\path\to\project",
target="hap",
build_mode="debug",
product="default",
include_hsp=True,
hsp_module_names=["library_one", "library_two"],
)Build an HNP-injected HAP:
await build_app(r"C:\path\to\project", target="hnp", build_mode="debug", product="default")Development
Run unit tests:
uv run pytest tests/unit -vRun with coverage:
uv run pytest tests/unit -v --cov=harmonyos_dev_mcpBuild package artifacts:
uv build --out-dir dist --clearNotes
build_appis a long-running tool. Set MCPtools/call timeoutto at least60s, and prefer120sfor cold builds.build_app target="hnp"builds a base HAP, injects module HNP packages fromentry/hnp, and signs the HAP through SDK packaging tools.build_app target="hsp"builds shared modules;build_app target="hap" include_hsp=truecan integrate one or more HSP outputs into the HAP.logs_querysupportserrorsandmarkersmodes.The shared infrastructure that used to live in a separate common package is bundled in
harmonyos_dev_mcp._common.On HarmonyOS devices, set
HDC_USE_TCP=1to switch from subprocesshdccalls to direct TCP connections. This bypasses the sandbox UDS isolation. See HarmonyOS (On-Device) for details.
License
Apache License 2.0
Available Tools
18 toolsbuild_appC
Build HarmonyOS artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | hap | |
| product | No | default | |
| is_clean | No | ||
| build_mode | No | debug | |
| include_hsp | No | ||
| module_name | No | ||
| project_path | Yes | ||
| hsp_module_names | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. 'Build' implies a write operation, but there is no mention of whether it is destructive, requires specific permissions, or has side effects (e.g., cleaning previous builds). The schema includes 'is_clean' but description does not address it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short (4 words), which is under-specification rather than efficient conciseness. It fails to include necessary details that would fit in a concise but informative description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, no output schema, and no parameter descriptions, the description is grossly inadequate. It does not explain what the tool returns, how to interpret results, or any constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description must compensate for explaining all 8 parameters. It provides zero information about parameters like target, product, build_mode, etc., leaving the agent with no additional semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Build HarmonyOS artifact' provides a verb (build) and a resource (HarmonyOS artifact), making the general purpose clear. However, it lacks specificity about what kind of artifact (e.g., HAP, HAR) and does not differentiate from sibling tools like run_app or install_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. There is no mention of prerequisites, context (e.g., need for a configured project), or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_elementD
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| text | No | ||
| device_id | No | ||
| element_id | No | ||
| hdc_server | No | ||
| bundle_name | No | ||
| double_click | No | ||
| element_type | No | ||
| element_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dragD
| Name | Required | Description | Default |
|---|---|---|---|
| to_x | No | ||
| to_y | No | ||
| speed | No | ||
| from_x | No | ||
| from_y | No | ||
| device_id | No | ||
| hdc_server | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_elementD
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| device_id | No | ||
| window_id | No | ||
| element_id | No | ||
| hdc_server | No | ||
| bundle_name | No | ||
| element_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ui_treeD
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No | ||
| window_id | No | ||
| hdc_server | No | ||
| bundle_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
input_textD
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| text | No | ||
| device_id | No | ||
| element_id | No | ||
| hdc_server | No | ||
| bundle_name | No | ||
| element_text | No | ||
| element_type | No | ||
| element_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_appD
| Name | Required | Description | Default |
|---|---|---|---|
| hap_path | Yes | ||
| device_id | No | ||
| hdc_server | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesD
| Name | Required | Description | Default |
|---|---|---|---|
| hdc_server | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_windowsD
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No | ||
| hdc_server | No | ||
| bundle_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logs_queryC
Query HarmonyOS logs for errors or business markers.
Default mode focuses on actionable errors. Use mode="markers" to confirm
success or failure markers such as picker save results.
| Name | Required | Description | Default |
|---|---|---|---|
| pid | No | ||
| tag | No | ||
| logs | No | ||
| mode | No | errors | |
| level | No | ||
| lines | No | ||
| domain | No | ||
| keyword | No | ||
| seconds | No | ||
| end_time | No | ||
| device_id | No | ||
| save_path | No | ||
| time_expr | No | ||
| hdc_server | No | ||
| input_file | No | ||
| start_time | No | ||
| tag_search | No | ||
| input_files | No | ||
| package_name | No | ||
| context_lines | No | ||
| include_crash | No | ||
| marker_keywords | No | ||
| realtime_wait_ms | No | ||
| fallback_to_historical | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only mentions default behavior (error-focused) and a mode for markers, but does not disclose read-only nature, side effects, rate limits, or authentication needs. The 24 parameters are not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While the description is concise (2 sentences), it is under-specified for a tool with 24 parameters. It lacks structure and does not earn its place by adding value beyond the name. Additional sentences or bullet points for key parameters would improve it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high parameter count (24), no schema descriptions, no output schema, and no annotations, the description is severely incomplete. It does not explain return format, filtering logic, time ranges, or how to use most parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only covers the 'mode' parameter minimally. Over 20 parameters (e.g., pid, tag, lines, keyword) are completely undocumented, providing virtually no semantic guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool queries HarmonyOS logs for errors or business markers, with a specific verb and resource. It distinguishes from sibling tools (UI actions/app management) by focusing on log querying.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: default mode for errors and explicit guidance on using mode parameter for markers. However, it does not explicitly state when not to use this tool or reference alternatives, though sibling differentiation is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
long_press_elementD
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| text | No | ||
| device_id | No | ||
| element_id | No | ||
| hdc_server | No | ||
| bundle_name | No | ||
| element_type | No | ||
| element_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyD
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| device_id | No | ||
| hdc_server | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_packageD
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | No | ||
| device_id | No | ||
| info_type | No | list | |
| hdc_server | No | ||
| bundle_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_appD
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No | ||
| hdc_server | No | ||
| auto_detect | No | ||
| bundle_name | Yes | ||
| module_name | No | ||
| ability_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotD
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| left | No | ||
| right | No | ||
| bottom | No | ||
| device_id | No | ||
| display_id | No | ||
| hdc_server | No | ||
| local_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swipeD
| Name | Required | Description | Default |
|---|---|---|---|
| to_x | No | ||
| to_y | No | ||
| speed | No | ||
| from_x | No | ||
| from_y | No | ||
| device_id | No | ||
| direction | No | ||
| hdc_server | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uninstall_appD
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No | ||
| hdc_server | No | ||
| bundle_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_elementD
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| state | No | found | |
| device_id | No | ||
| window_id | No | ||
| element_id | No | ||
| hdc_server | No | ||
| timeout_ms | No | ||
| bundle_name | No | ||
| interval_ms | No | ||
| element_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
18 tool updates
v0.8.3- First observed
build_app - First observed
click_element - First observed
drag - First observed
find_element - First observed
get_ui_tree - First observed
input_text - First observed
install_app - First observed
list_devices - First observed
list_windows - First observed
logs_query - First observed
long_press_element - First observed
press_key - First observed
query_package - First observed
run_app - First observed
screenshot - First observed
swipe - First observed
uninstall_app - First observed
wait_element
TDQS
Scored across 18 tools
Many tools (e.g., click_element, drag, find_element) lack descriptions, making them indistinguishable. Even with names, similar actions (press_key vs click_element) are ambiguous without documentation.
Naming patterns are mixed: verb_noun (click_element, install_app) appears, but also single words (screenshot, swipe) and object_verb (logs_query). Inconsistent convention hinders predictability.
With 18 tools, the count is slightly above the ideal 3–15 range for a focused server, but still reasonable for UI automation and app lifecycle management. Not excessive.
The tools cover basic CI/CD and UI automation (build, install, uninstall, run, UI interactions, logs). However, missing descriptions and lack of update/debug tools suggest notable gaps in full lifecycle support.
Maintenance
Related MCP Connectors
Community preview of HuaweiCloud DevKit MCP server (official: io.github.huaweicloud)
MCP server for Appcircle mobile CI/CD platform.
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides Android UI automation tools via MCP, enabling device interaction, UI snapshot, and gesture recording.-
- AlicenseBqualityCmaintenanceEnables file operations, npm package management, and configuration checking through MCP.104 npm1MIT
- FlicenseNot gradedqualityDmaintenanceEnables Docker container management and test execution via MCP tools, supporting image building, container operations, and automated test runs.-
- AlicenseNot gradedqualityBmaintenanceMCP server for automating HarmonyOS HAP signing, installation, and verification on devices, enabling natural-language-driven deployment workflows.72 npmMIT