airtest-mcp
Allows controlling Android devices through ADB, including listing devices, running Airtest scripts, capturing screenshots, tapping, swiping, sending key events, and starting or stopping apps.
Allows controlling iOS devices via a WebDriverAgent endpoint, including running Airtest scripts, capturing screenshots, tapping, swiping, and starting or stopping apps.
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., "@airtest-mcplist connected Android devices"
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.
Airtest MCP
A local Model Context Protocol server that lets MCP clients operate the portable AirtestIDE runner on Android, iOS and Windows.
The project does not bundle AirtestIDE, ADB, WebDriverAgent or any NetEase binaries. Download AirtestIDE separately from its official distribution and point this server at the extracted directory.
Tools
Tool | Purpose |
| Show the detected AirtestIDE runtime |
| Enumerate devices through bundled ADB |
| Run an existing |
| Run trusted inline Airtest Python |
| Capture a device screenshot |
| Tap an absolute coordinate |
| Swipe between coordinates |
| Send an Android-oriented key event |
| Start an Android package or iOS bundle ID |
| Stop an Android package or iOS bundle ID |
Related MCP server: MCP Appium Server
Requirements
Windows 10/11
Python 3.11 or newer
Portable AirtestIDE extracted locally
Android: USB debugging or network ADB
iOS: a signed and running WebDriverAgent endpoint
Install for Codex
git clone https://github.com/Heand-Broken/airtest-mcp.git
cd airtest-mcp
.\scripts\install_codex.ps1 -AirtestIdeRoot "F:\AirtestIDE"Restart Codex after installation. The installer creates an isolated virtual
environment, installs the package, backs up ~/.codex/config.toml, and adds:
[mcp_servers.airtest]
command = 'C:\Users\you\.codex\mcp\airtest-mcp\.venv\Scripts\python.exe'
args = [ '-m', 'airtest_mcp' ]
[mcp_servers.airtest.env]
AIRTEST_IDE_ROOT = 'F:\AirtestIDE'
AIRTEST_MCP_RUNS_DIR = 'C:\Users\you\AppData\Local\airtest-mcp\runs'Ready-to-edit service configurations are included for multiple clients:
config/codex.toml.exampleconfig/claude_desktop_config.json.exampleconfig/stdio-server.json.example
See docs/configuration.md for installation paths, environment variables and
service verification.
Environment variables
Variable | Required | Purpose |
| Yes, unless auto-detected | Directory containing |
| No | Directory for generated temporary |
Start from .env.example when configuring a shell or local development
environment. MCP clients should normally place these values in the server's
env object instead.
Device URIs
Android:///SERIAL
iOS:///http://127.0.0.1:8100
Windows:///Run list_android_devices first, then build the Android URI from the returned
serial. iOS requires WebDriverAgent to be deployed and reachable before Airtest
can connect.
Development
python -m venv .venv
.\.venv\Scripts\python -m pip install -e ".[dev]"
.\.venv\Scripts\ruff check .
.\.venv\Scripts\pytest
.\.venv\Scripts\python scripts\verify_mcp.pySafety
run_airtest_code executes Python inside the local Airtest runner. Keep the MCP
server on stdio and only invoke code from trusted clients. Use automation only
on applications, devices and accounts you control or are authorized to test.
License
MIT
Available Tools
10 toolsairtest_infoA
Return the detected AirtestIDE, runner and bundled ADB paths.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavioral traits. It only states that paths are 'detected' and returned; it does not clarify whether this is a safe, read-only operation, whether it may fail if the IDE is not installed, or any potential side effects.
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 a single, clear sentence with no unnecessary words. It is appropriately sized for a simple info tool.
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?
The tool has low complexity: no parameters and an output schema (not shown but indicated). The description covers the essential purpose, and since the output schema exists, it need not explain return formatting. This is sufficient for an agent to use it correctly.
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?
There are zero parameters, so the baseline is 4. The description correctly notes the tool takes no arguments, and nothing more is needed.
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 uses a specific verb 'Return' and names the exact resources (AirtestIDE, runner, bundled ADB paths). It clearly distinguishes this from sibling tools like list_android_devices or run_airtest_script, which have different purposes.
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 no guidance on when to use this tool versus alternatives. There is no mention of prerequisites or typical scenarios, leaving the agent to infer when this information is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyeventC
Send an Airtest key event, primarily for Android.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| device | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure, but it reveals nothing beyond the basic action—no side effects, blocking behavior, key format expectations, or error handling. The one-line description offers no meaningful behavioral context for a mutation-type operation.
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 a single, front-loaded sentence that conveys the core purpose without wasted words. It is appropriately minimal, and every word contributes meaning.
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 zero annotations, zero schema descriptions, and an output schema that covers return values, the description still fails to address parameter semantics or behavioral context. For a simple two-parameter tool it is somewhat complete in scope, but the total absence of supplementary guidance makes it inadequate for an agent to invoke it confidently.
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% for both required parameters, so the description must compensate. 'Key event' hints that 'key' refers to the key to send, but it does not explain valid key formats (e.g., KEYCODE_* vs symbolic names) or how 'device' should be specified (serial, ID, etc.), leaving the agent under-informed.
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 the action ('Send') and resource ('an Airtest key event'), with a platform qualifier ('primarily for Android'). It is distinguishable from sibling tools like touch/swipe by the nature of a key event, though it does not explicitly name alternatives or contrast with them.
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 no guidance on when to use this tool versus alternatives like touch, swipe, or start_app. 'Primarily for Android' is a weak scope qualifier, not a usage directive, and no exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_android_devicesA
List Android devices visible to the ADB bundled with AirtestIDE.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It states the operation is a list (read-only) but does not mention whether the ADB server is started, the format of the output, or any side effects. For a simple list tool, this is minimal but sufficient; it adds the context of the specific ADB binary, which is useful.
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 a single sentence with no wasted words. The verb 'List' is front-loaded, and the qualifier 'ADB bundled with AirtestIDE' is precise and necessary. Perfectly concise.
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?
For a tool with an empty input schema and an existing output schema, the description adequately covers the tool's purpose and scope. It does not detail the return values, but the output schema is expected to provide that. The only minor gap is the lack of mention of any side effects like starting the ADB server, but this is not critical for a list operation.
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?
The tool has zero parameters, so the schema is trivially covered. The baseline for 0-parameter tools is 4, and the description correctly does not attempt to explain parameters. No additional parameter semantics are needed.
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 uses a specific verb 'List' with a clear resource 'Android devices' and a qualifier 'visible to the ADB bundled with AirtestIDE', making the tool's purpose unambiguous. It distinguishes itself from sibling action-oriented tools like touch, swipe, and start_app by being a discovery/list operation.
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 by specifying the ADB source (bundled with AirtestIDE), which is relevant for when the tool should be used. It does not explicitly mention alternatives or exclusions, but none of the sibling tools serve a similar listing function, so the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_airtest_codeB
Run trusted, hand-written Airtest Python code in a temporary .air project.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| device | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to rely on, the description must disclose behavioral traits. It does mention that the code runs in a 'temporary .air project,' which hints at environment isolation. However, it does not warn about potential side effects on the device, mention that arbitrary Python code can be executed, or explain error/timeout behavior. The 'trusted' qualifier is a minimal safety nod but far from sufficient.
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 a single, front-loaded sentence that effectively communicates the core action. There is no redundancy or filler, earning a high score for conciseness.
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 tool's complexity (executing arbitrary Python code), the lack of annotations, and the minimal description, the tool is under-specified. While the output schema exists and may describe return values, the description does not address safety, device interactions, or how this integrates with the sibling toolset. The 'temporary .air project' detail is a small positive, but overall the description is incomplete for such a powerful tool.
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?
The input schema lists three parameters (code, device, timeout) with 0% schema description coverage. The description does not mention any of these parameters, nor does it explain that 'code' is required, how 'device' should be formatted, or what the timeout controls. The description adds no value to parameter understanding.
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 identifies the tool as executing 'trusted, hand-written Airtest Python code' within a 'temporary .air project.' This specific verb-resource pair distinguishes it from sibling tools like run_airtest_script (which presumably runs existing scripts) and the point-action tools (touch/swipe).
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 word 'trusted' implies a safety condition for use, but there is no explicit guidance on when to choose this over run_airtest_script or the individual action tools. The description does not discuss prerequisites or typical scenarios, making the usage guidance implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_airtest_scriptB
Run an existing .air directory with an optional Airtest device URI.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| timeout | No | ||
| script_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, and the description does not disclose any behavioral aspects such as side effects, return values, or required environment. It only states the action.
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 a single, clear sentence with no wasted words. It is front-loaded with the action and resource, though it could have included a bit more detail.
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 lack of annotations and schema descriptions, the tool description is too minimal. It does not explain what the tool returns, how timeout is used, or device URI format, making it insufficient for correct invocation.
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 coverage is 0% and the description only explains the device parameter as an optional Airtest device URI. It does not describe script_path or timeout, leaving their semantics unclear.
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 it runs an existing .air directory, distinguishing it from the sibling run_airtest_code. It also mentions the optional device URI, making the scope specific.
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 implies it is for existing .air directories but does not explicitly mention when to use it vs alternatives like run_airtest_code. It provides no exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshotB
Capture a device screenshot to an absolute local path.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| quality | No | ||
| output_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that a screenshot will be captured to a path, without mentioning side effects like file overwriting, device requirements, or error handling. This lacks transparency for a tool that writes to the filesystem.
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 a single, direct sentence that immediately communicates the core action and destination. It contains no unnecessary words or repetition, making it appropriately concise and front-loaded.
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?
For a tool with 3 parameters, no annotations, and no description-based explanation of return values, the description is under-specified. It leaves key parameter details and usage context unmentioned, making it incomplete for an agent to use confidently.
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%, so the description must compensate. It clarifies that output_path is an absolute local path, but provides no additional meaning for the 'device' or 'quality' parameters. The description adds minimal value beyond the schema's field titles and types.
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 the tool's function: capturing a device screenshot to a local path. It uses a specific verb ('capture') and identifies the resource (device screenshot) and output location (absolute local path), distinguishing it from sibling tools like touch, swipe, and run_airtest_script.
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 gives no explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites for use (e.g., connected device, permissions). Usage is only implied by the purpose, which is insufficient for selecting among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_appC
Start an Android package or iOS bundle identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| package | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It only states the action, without mentioning side effects, failure cases, whether it waits for launch, or permissions needed.
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 concise (one sentence), but it is under-specified. It lacks parameter details and usage context, so the conciseness does not fully serve the agent.
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?
For a tool with two required parameters and no annotations, the description is incomplete. It does not explain what each parameter is or how to use them. The output schema exists, but does not compensate for missing parameter and behavioral information.
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 has 0% description coverage, and the description does not explain the 'device' parameter or clarify the format of 'package'. It only implies that 'package' is an Android package or iOS bundle, but offers no additional meaning.
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 the action ('Start') and the resource ('an Android package or iOS bundle identifier'). It effectively distinguishes from sibling tools like stop_app and run_airtest_script.
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 on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or contexts where another tool (e.g., run_airtest_script) would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_appB
Stop an Android package or iOS bundle identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| package | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It says 'stop' but does not explain whether it force-stops, if it is reversible, what side effects occur, or any required permissions. This is minimal disclosure beyond the verb.
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 a single, front-loaded sentence that states the core function with no filler or redundant content. Every word earns its place, making it highly concise.
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 tool's simplicity and the presence of an output schema, the description covers the essential purpose but lacks behavioral or usage details. It is adequate for a minimally specified command but leaves gaps in understanding exactly what stopping entails.
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?
The description adds slight meaning by indicating that 'package' can be either an Android package name or iOS bundle identifier, which helps interpret the package parameter. However, it does not explain the 'device' parameter, and with 0% schema coverage, the description only partially compensates for the lack of parameter documentation.
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 the action ('stop') and the resource ('an Android package or iOS bundle identifier'), making the tool's purpose evident. It implicitly differentiates from the sibling 'start_app' by being the inverse operation, though it does not explicitly name alternatives.
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 no guidance on when to use this tool versus alternatives. It does not mention prerequisites, scenarios, or exclusions, leaving the agent to infer usage solely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
swipeC
Swipe between two absolute screen coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| end_x | Yes | ||
| end_y | Yes | ||
| steps | No | ||
| device | Yes | ||
| start_x | Yes | ||
| start_y | Yes | ||
| duration | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds minimal behavioral information beyond the name, such as the 'absolute' coordinate qualifier, but does not disclose side effects, execution behavior, device interaction, or any required permissions. With no annotations to rely on, the description fails to carry the burden of behavioral disclosure.
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 a single concise sentence with no wasted words, efficiently conveying the basic purpose. It is appropriately short for a simple action, though it could benefit from additional detail without becoming verbose.
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 tool has 7 parameters and no annotations, the description is far from complete. It omits important details about parameter meanings (steps, duration, device), usage context, and behavioral implications. The existence of an output schema partially reduces the need to explain return values, but the description still leaves significant gaps.
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?
The description clarifies that start_x, start_y, end_x, end_y are absolute screen coordinates, addressing the core coordinate parameters. However, it does not explain the meaning or purpose of 'steps', 'duration', or 'device', leaving the remaining 3 of 7 parameters undocumented in a context where schema descriptions are absent.
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 the action (swipe) and the resource (screen coordinates), specifying that it operates between two absolute coordinate points. This is a distinct operation compared to sibling tools like 'touch' or 'keyevent', making it easy to identify when to select this tool.
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?
There is no guidance on when to use this tool versus alternatives, such as 'touch' for a single tap or other gesture tools. The description only defines the action without contextualizing its use cases or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
touchC
Touch an absolute screen coordinate.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| device | Yes | ||
| duration | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It does not mention coordinate origin, duration semantics, whether the touch is a tap or press, or any side effects. The only behavior disclosed is the action itself, which is minimal.
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 a single, front-loaded sentence with no wasted words. However, it is under-specified, which prevents a perfect score; the brevity is structurally fine but offers too little substance.
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?
Although the tool is simple, there are 4 parameters (3 required) and an output schema not shown. The description does not explain coordinate system, duration behavior, or expected return values. Given the lack of annotations and schema descriptions, more context is needed for reliable invocation.
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 adds no meaning to the parameters. It does not explain what 'absolute' means for x/y, how duration is interpreted, or what 'device' refers to. The description entirely fails to compensate for the lack of schema documentation.
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 the action (touch) and the target (an absolute screen coordinate), making the tool's purpose immediately understandable. It also implicitly distinguishes itself from sibling tools like swipe and keyevent by specifying a direct touch at a coordinate.
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?
There is no guidance on when to use this tool versus alternatives such as swipe or keyevent. The description only states what the tool does, not the context in which it should be preferred.
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.
10 tool updates
v0.1.0- First observed
airtest_info - First observed
keyevent - First observed
list_android_devices - First observed
run_airtest_code - First observed
run_airtest_script - First observed
snapshot - First observed
start_app - First observed
stop_app - First observed
swipe - First observed
touch
TDQS
Scored across 10 tools
Most tools have clearly distinct purposes. The only potential ambiguity is between run_airtest_script and run_airtest_code, but their descriptions clarify that one runs a .air directory while the other executes inline code. No other tools overlap significantly.
All tool names use snake_case, but the pattern is mixed: some are verb_noun (list_android_devices, start_app), while others are single verbs (touch, swipe) or nouns (airtest_info, snapshot, keyevent). This inconsistency is minor, as the names are short and readable.
With 10 tools, the server is well-scoped for mobile automation. Each tool covers a core operation, and the count is appropriate for the domain without feeling sparse or overwhelming.
Core workflows are covered: device discovery, script/code execution, screenshot capture, UI interactions, and app lifecycle. Missing features like text input or screen size query can be worked around via run_airtest_code, so gaps are minor.
Maintenance
Related MCP Connectors
MCP server for Appcircle mobile CI/CD platform.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for building and testing AI agents with multi-model experimentation and insights.
Remote MCP server to read and manage your Atako AI agents, messages, files, and integrations.
Related MCP Servers
- AlicenseAqualityCmaintenanceA Model Context Protocol (MCP) server that enables AI assistants to control and interact with Android devices, allowing for device management, app debugging, system analysis, and UI automation through natural language commands.8432Apache 2.0
- AlicenseCqualityCmaintenanceA Model Context Protocol (MCP) server that enables mobile app automation using Appium, supporting various device interactions, element operations, and app management through a standardized protocol.10015 npm63Apache 2.0
- AlicenseBqualityDmaintenanceA Model Context Protocol server that provides Android Debug Bridge functionality for automating Android devices, enabling remote device management, screen operations, app management, file operations, and shell command execution.204 npm1MIT
- FlicenseAqualityDmaintenanceA MCP server that enables AI assistants to control Android devices via ADB, supporting device info, screen control, input simulation, app management, shell execution, file transfer, and UI parsing.20-