apk-preview-mcp
Provides tools for managing Android app sessions on a dedicated Android Emulator, including installing and launching APKs, capturing screen and UI tree inspections, and sending touch and navigation interactions.
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., "@apk-preview-mcpInstall app.apk and show me its UI tree"
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.
APK Preview Desktop
Aplicativo Windows para instalar, executar, navegar e inspecionar APKs em um Android Emulator dedicado. A mesma sessão pode ser controlada pela interface PySide6 ou por ferramentas MCP locais usadas pelo Codex.
O projeto não implementa uma máquina virtual Android. Ele controla o Android Emulator oficial e renderiza capturas ADB dentro de uma interface desktop.
Recursos
descoberta automática do Android SDK no Windows;
inicialização de AVDs dedicados com prefixo
ApkPreview_;instalação e atualização de APKs com
adb install -r;abertura de aplicativos instalados;
preview atualizado dentro da janela desktop;
cliques no preview convertidos em coordenadas Android;
botões Voltar, Início e Recentes;
perfis de celular e tablet;
orientação retrato e paisagem;
tema claro, escuro ou definido pelo sistema;
captura PNG e inspeção da árvore UI;
servidor MCP local sem comandos shell arbitrários;
launcher Windows sem console e ponte nativa para isolamento de DLLs Qt/ADB.
Related MCP server: mobila
Arquitetura
flowchart LR
UI[Desktop PySide6] --> C[AndroidController]
MCP[Servidor MCP stdio] --> C
C --> R[ProcessRunner]
R --> B[ProcessBridge Windows]
B --> ADB[adb / emulator]
ADB --> AVD[AVD ApkPreview_*]
AVD --> PNG[Capturas e árvore UI]
PNG --> UI
PNG --> MCPAndroidController concentra validação, instalação, navegação e captura.
ProcessRunner executa somente binários conhecidos usando listas de argumentos
e shell=False. No Windows, ProcessBridge.exe cria uma fronteira limpa entre
as DLLs carregadas pelo Qt e as ferramentas do Android SDK.
Requisitos
Windows 11;
Python 3.12 ou superior;
uv;
JDK 21 para projetos Android que precisem ser compilados;
Android SDK Platform Tools e Android Emulator;
imagem Android x86_64 compatível;
virtualização de hardware habilitada.
O SDK é procurado nesta ordem: ANDROID_HOME, ANDROID_SDK_ROOT, depois
%LOCALAPPDATA%\Android\Sdk.
Instalação para desenvolvimento
git clone https://github.com/Famel-svg/apk-preview-desktop.git
cd apk-preview-desktop
uv sync --all-groupsCrie pelo Android Studio um AVD cujo nome comece por ApkPreview_. Exemplo:
ApkPreview_Phone_API37.
Executar
uv run apk-preview-desktopFluxo básico:
selecione o AVD;
clique em Iniciar;
escolha um arquivo
.apk;clique em Instalar APK;
selecione o pacote instalado e clique em Abrir app;
use o preview, perfis de tela e controles Android.
Servidor MCP
uv run apk-preview-mcpFerramenta | Função |
| Diagnostica SDK, AVDs e dispositivos |
| Lista AVDs dedicados permitidos |
| Inicializa ou reutiliza um AVD |
| Instala APK local validado |
| Lista pacotes de terceiros instalados |
| Abre um pacote Android |
| Troca perfil, orientação e tema |
| Captura PNG e árvore UI |
| Envia toque ou controle de navegação |
| Encerra a sessão dedicada |
Plugin portátil: plugins/apk-preview/. Configurações com caminhos absolutos da
máquina não fazem parte do repositório.
Gerar executável Windows
.\scripts\build-windows.ps1Saída: dist/APK Preview Desktop/APK Preview Desktop.exe.
O launcher usa .venv do projeto. Execute uv sync antes de abrir o executável.
Artefatos binários não são versionados.
Testes e qualidade
uv run pytest -q
uv run ruff check .
uv run pyrightEstrutura
src/apk_preview/ aplicação, Android e MCP
tests/ testes automatizados
native/ launcher e ponte de processos em C#
scripts/ build Windows
plugins/apk-preview/ plugin MCP portátil
APK_PREVIEW_DESKTOP_SPEC.md especificação funcionalSegurança
dispositivos físicos são recusados;
somente seriais
emulator-*confirmados como QEMU são aceitos;somente AVDs
ApkPreview_*são controlados;APK precisa existir localmente e possuir extensão
.apk;subprocessos não recebem texto shell arbitrário;
capturas temporárias usam nomes únicos e são removidas;
stop_sessionnão apaga AVD nem dados;credenciais, APKs, executáveis, artefatos e configurações locais são ignorados.
Use apenas APKs próprios ou autorizados. Use dados sintéticos e contas de teste.
Solução de problemas
Android SDK não encontrado
Defina ANDROID_HOME e confirme platform-tools/adb.exe e
emulator/emulator.exe.
AVD não aparece
Crie ou renomeie um AVD usando prefixo ApkPreview_.
Erro de DLL do Qt ou console piscando
Recompile com scripts/build-windows.ps1. Launcher e ponte são aplicativos
Windows sem console.
Preview não atualiza
Confirme boot concluído e estado device em adb devices -l; clique em
Atualizar.
Limitações
suporte principal: Windows;
requer Android Emulator oficial;
não substitui testes instrumentados do APK;
não contorna autenticação, permissões Android ou proteções do aplicativo;
executável local depende do ambiente Python sincronizado.
Licença
Nenhuma licença pública definida. Todos os direitos permanecem com o autor.
Available Tools
10 toolsapk_preview_configure_displayB
Switch emulator screen profile, orientation, theme and font scale.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | system | |
| profile | Yes | ||
| font_scale | No | ||
| orientation | No | portrait |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating operation (readOnlyHint=false) but not destructive. The description's 'Switch' is consistent but adds no behavioral detail beyond that, such as whether changes apply live, require a restart, reset when the session stops, or affect the running app.
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?
One short sentence with no filler, and the key settings are clearly front-loaded. It is appropriately sized for a configuration tool and avoids redundant restating of the schema.
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 four parameters, zero schema descriptions, and a mutating side effect, this is too thin. It omits prerequisites like an active session, the meaning/range of font_scale, and the implications of changing the profile or orientation. The presence of an output schema helps with return values, but not with correct invocation context.
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 needs to carry the semantic weight. It simply repeats the parameter names (profile, orientation, theme, font scale) without explaining what the enum values mean, what font_scale values are valid, or how profile choices differ. This adds little beyond what the input schema already shows.
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 ('Switch') and identifies the resource ('emulator screen') along with the exact dimensions being configured: profile, orientation, theme, and font scale. It clearly distinguishes this tool from siblings like apk_preview_inspect_screen or apk_preview_interact, which are about reading or acting on the screen rather than configuring it.
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 guidance on when to use this tool versus siblings. It does not mention that an active emulator session is required, does not describe sequencing relative to apk_preview_start_session or apk_preview_launch_app, and does not contrast with inspect_screen or interact.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apk_preview_doctorARead-only
Diagnose Android SDK, Emulator, ADB, AVDs and connected devices.
| 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?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds what gets diagnosed (SDK, emulator, ADB, AVDs, connected devices) but does not disclose output formatting or other behavioral details, though the output schema covers return structure.
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 filler, and the primary purpose is stated upfront. Every word contributes to 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?
For a read-only diagnostic tool with no parameters and an output schema, the description is fully sufficient. It identifies the tool's scope and, combined with annotations and output schema, gives an agent what it needs to use the tool 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?
The tool has zero parameters, so there is no parameter semantics to document; the baseline for 0 params is 4. The description correctly omits parameter information that would be irrelevant.
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, 'Diagnose', and names a clear resource set: Android SDK, Emulator, ADB, AVDs, and connected devices. This distinguishes it from sibling tools that install APKs, launch apps, or manage sessions.
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 a health-check or troubleshooting purpose, which makes it reasonable to run when diagnosing environment issues. However, it does not explicitly state when to use this tool versus the specific sibling operations, nor 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.
apk_preview_inspect_screenARead-only
Return current emulator PNG and optional accessible UI tree.
| Name | Required | Description | Default |
|---|---|---|---|
| include_ui_tree | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the annotated facts, such as whether the screenshot is freshly captured, the cost of including the UI tree, or any session requirements. It does not contradict the annotations.
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 names the primary output and the optional addition. Every word earns its place; there is no filler or repetition of schema details.
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 simple read-only inspection tool, the description covers the return artifacts: the PNG and optional UI tree. No output schema exists, but the description states enough about the result. It could add a bit more about what 'accessible UI tree' contains or when include_ui_tree matters, but the core context is present.
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 does this by clarifying that the single parameter controls whether the accessible UI tree is included, and the word 'optional' conveys the boolean toggle semantics. This is meaningful guidance for a one-parameter boolean tool.
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 states exactly what the tool does: it returns the current emulator PNG and, optionally, an accessible UI tree. The verb 'Return' and the specific resources make its purpose immediately clear and distinguish it from sibling tools like apk_preview_interact or apk_preview_configure_display.
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 guidance about when to use this tool versus the sibling apk_preview_* tools. There are no explicit conditions, alternatives, or exclusion criteria, so an agent must infer usage from the tool name and the bare description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apk_preview_install_apkA
Install or replace one local APK on active dedicated emulator.
| Name | Required | Description | Default |
|---|---|---|---|
| apk_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating operation (readOnlyHint=false) and not destructive. The description adds the useful scoping details that it installs or replaces an APK on an active emulator, but does not disclose side effects such as whether existing app data is cleared or whether a session must be started first.
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?
A single, front-loaded sentence with no filler. Every word contributes to understanding the action, target, and context.
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 one parameter, an output schema, and annotations covering read-only/destructive aspects, the description covers the essential action and prerequisite. It could add explicit 'run after apk_preview_start_session' guidance, but 'active dedicated emulator' sufficiently implies the required context.
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. The phrase 'one local APK' clarifies that apk_path refers to a local file path, but it does not specify path form, required file extension, or constraints on the emulator side.
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 ('Install or replace') and names both the resource ('one local APK') and the target context ('active dedicated emulator'). This clearly differentiates it from sibling tools like apk_preview_launch_app and apk_preview_list_apps.
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?
It explicitly scopes use to an active dedicated emulator and to a single local APK, giving clear contextual conditions. It does not name siblings or explicitly state when not to use it, but the intended context is evident from the wording and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apk_preview_interactB
Tap coordinates or press an allowed Android navigation key.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| action | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the operation (send tap or navigation key events) but does not disclose side effects, coordinate-system assumptions, or that navigation actions may leave the app context. Annotations are present and not contradicted, so the lowered bar is met but not exceeded.
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 one short sentence with no filler, and the main verb is front-loaded. It is appropriately concise for a simple tool, though it spends no words on usage context.
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 an output schema available and a simple action enum, this is minimally adequate. Missing context includes prerequisites (active session) and the relationship between action values and x/y requirements, but the core invocation is understandable from the description plus schema.
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 adds useful grouping: x/y are 'coordinates' for tapping, and action corresponds to a navigation key. However, it does not clarify that x/y are only needed for tap, that x/y are nullable, or that action is required.
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 specific verbs ('tap', 'press') and identifies the input resource: screen coordinates and Android navigation keys. It is clearly the interaction tool among the apk_preview_* siblings, though it does not explicitly name the running preview session as the target.
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 choose this tool over siblings or what state is required (e.g., an active preview session). The context is only implied by the verb 'tap'/'press'; no exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apk_preview_launch_appB
Launch installed package main activity.
| Name | Required | Description | Default |
|---|---|---|---|
| package | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the concrete behavior: launching the main activity of an installed package. The annotations already indicate this is not read-only and not destructive, so the description adds the target-specific behavior without contradicting the annotations.
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 short sentence with no filler, making it easy to parse and front-loaded. It could be slightly more informative, but it does not waste any words.
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 one-parameter tool with an output schema and annotations, the description covers the basic operation. However, it does not mention prerequisites such as an active session or that the package must already be installed, which would help an agent plan the correct sequence of calls.
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 schema provides no description for the 'package' parameter, and schema coverage is 0%. The description only casually mentions 'installed package' and does not explain the expected format, the need for a full package name, or how to discover valid package values.
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 action ('Launch') and the resource ('installed package main activity'), making the tool's purpose immediately understandable. It is distinct from siblings like install_apk or list_apps, though it does not explicitly compare itself to 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?
There is no guidance on when to use this tool versus alternatives, such as listing available packages first or installing the package if it is not present. The phrase 'installed package' implies a prerequisite but does not state it explicitly or point to a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apk_preview_list_appsARead-only
List third-party packages installed in active emulator.
| 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?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds scoping context ('third-party packages', 'active emulator') but reveals no additional behavioral traits beyond what annotations provide.
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?
A single, direct sentence conveys the tool's purpose and scope with no filler or redundancy. Every word contributes to understanding.
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 no parameters, simple tool behavior, existing annotations, and an output schema, the description is complete. It states the exact scope ('third-party packages') and the required context ('active emulator') needed 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?
There are zero parameters and schema coverage is complete, so the schema places no burden on the description. A baseline of 4 applies for a no-parameter tool; the description adequately defines what the tool returns without needing parameter explanations.
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 ('third-party packages') and context ('in active emulator'). It clearly differentiates from siblings like apk_preview_list_avds and apk_preview_install_apk by scope.
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 context 'in active emulator' implies that this tool is for retrieving installed apps in a running emulator session, and the act of listing installed packages suggests when it would be useful. However, it does not explicitly mention alternatives or state 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.
apk_preview_list_avdsARead-only
List dedicated AVDs accepted by APK Preview.
| 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?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds the behavioral nuance that only AVDs accepted by APK Preview are returned, which is useful, but it does not elaborate on any other behavior such as output format, errors, or why an AVD might be excluded.
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, focused sentence with no wasted words. The key verb and resource are front-loaded, making it immediately scannable and easy for an agent to parse.
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 parameterless, read-only list operation with an output schema present, the description is complete. It clearly conveys what the tool returns without needing to explain return values, and the annotations cover the safety aspects. Nothing essential is missing 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?
The tool has zero parameters, so the baseline is 4. The description cannot add parameter meaning because there are none, and the empty input schema is fully sufficient. No additional parameter clarification 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 states a specific action ('List') and a clear resource ('dedicated AVDs accepted by APK Preview'). It distinguishes itself from sibling tools like apk_preview_list_apps, making the tool's exact purpose unambiguous.
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 provided on when to use this tool versus alternatives. There is no mention of typical workflows (e.g., checking available AVDs before starting a session) or any exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apk_preview_start_sessionC
Start a dedicated AVD and save shared session.
| Name | Required | Description | Default |
|---|---|---|---|
| avd | Yes | ||
| visible | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate a state-changing operation, and the description adds that it starts a dedicated AVD and saves a shared session. This is useful context, but it does not disclose boot/wait behavior, what happens if an AVD is already running, session cleanup, or failure/timeout behavior. The timeout_seconds parameter hints at wait behavior, but the description does not confirm 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 a single concise sentence with no wasted words, and the main action is front-loaded. It is appropriately short, though it could have included a bit more operational detail without becoming bloated.
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?
While an output schema exists, so return value documentation is less critical, the description is still incomplete for a state-changing session lifecycle tool. It lacks usage ordering, parameter meaning, and behavioral details about the shared session. An agent would likely need to inspect the schema and sibling tools to understand how and when to call 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?
Schema description coverage is 0%, so the description carries the burden of explaining the parameters, but it does not mention avd, visible, or timeout_seconds at all. Even though the parameter names are somewhat self-explanatory, the description adds no meaning about valid avd values, the effect of visible, or how timeout_seconds is used.
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 and resource: 'Start a dedicated AVD and save shared session.' This conveys the core purpose and distinguishes it from siblings like list_avds, install_apk, or launch_app. However, it does not explicitly differentiate it from the related session lifecycle tools beyond naming the session concept.
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 guidance on when to use this tool versus alternatives such as apk_preview_launch_app or apk_preview_stop_session. It does not state that this should be called before installing/launching, nor does it mention any prerequisites or ordering. Usage context is only weakly implied by the term 'session'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apk_preview_stop_sessionA
Stop active emulator without deleting AVD or artifacts.
| 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?
The description adds valuable behavioral context by clarifying that stopping the emulator does not delete the AVD or artifacts, which complements the annotations. It does not disclose what happens if no active emulator exists or whether state is saved, but the annotations already signal this is not a destructive 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 entire description is a single, front-loaded sentence with no wasted words. It states the action, the target, and the important non-destructive guarantee in concise form.
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 simple zero-parameter stop operation with an output schema and annotations present, the description is complete. It gives the agent the essential purpose and the key safety property, and nothing critical is missing for correct tool selection.
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, and the input schema covers everything. The description therefore does not need to explain parameter semantics, and the 0-parameter baseline of 4 is appropriate.
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 ('Stop') with a clear resource ('active emulator') and explicitly states the non-destructive scope ('without deleting AVD or artifacts'). This clearly distinguishes the tool from its siblings such as apk_preview_start_session and apk_preview_doctor.
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 phrase 'Stop active emulator' clearly indicates when to use the tool, and 'without deleting AVD or artifacts' provides an explicit exclusion that helps an agent understand this is not a teardown/delete operation. It does not explicitly name alternatives, but the sibling list and the action itself make the usage context unambiguous.
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
apk_preview_configure_display - First observed
apk_preview_doctor - First observed
apk_preview_inspect_screen - First observed
apk_preview_install_apk - First observed
apk_preview_interact - First observed
apk_preview_launch_app - First observed
apk_preview_list_apps - First observed
apk_preview_list_avds - First observed
apk_preview_start_session - First observed
apk_preview_stop_session
TDQS
Scored across 10 tools
Each tool targets a distinct stage or action in the APK preview workflow: diagnosis, AVD listing, session lifecycle, installation, app listing, launching, display configuration, screen inspection, interaction, and session teardown. There is no meaningful overlap or ambiguity between tool purposes.
All tools follow the same `apk_preview_` prefix with a clear verb_noun pattern (e.g., start_session, install_apk, stop_session). This is highly predictable and consistent across the entire set.
Ten tools provide a focused but complete toolset for the APK preview use case without unnecessary bloat. Each tool earns its place in the emulator workflow.
The toolset covers the full preview lifecycle: setup, session start, install, launch, inspect, interact, configure, and stop. Minor gaps exist such as no explicit uninstall or text input, but these do not block the core preview workflow.
Maintenance
Related MCP Connectors
Disposable cloud Android emulators for coding agents: run an APK or PR build, tap, type, screenshot.
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Mozark's MCP server for AI-powered app testing: device access, test automation, and QA insights.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables authorized Android security testing with static and dynamic analysis, Frida instrumentation, storage inspection, and traffic interception via MCP tools.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to control an Android emulator via MCP, allowing tasks like tapping, typing, swiping, taking screenshots, and installing apps through natural language commands.MIT
- FlicenseNot gradedqualityDmaintenanceProvides Android UI automation tools via MCP, enabling device interaction, UI snapshot, and gesture recording.-
- AlicenseAqualityCmaintenanceEnables Codex to inspect, test, and control Android emulators through adb with strict typed tools, returning screenshots as native MCP images and keeping physical devices and Gradle execution behind explicit opt-in policies.19MIT