Skip to main content
Glama
Famel-svg

apk-preview-mcp

by Famel-svg

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 --> MCP

AndroidController 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-groups

Crie pelo Android Studio um AVD cujo nome comece por ApkPreview_. Exemplo: ApkPreview_Phone_API37.

Executar

uv run apk-preview-desktop

Fluxo básico:

  1. selecione o AVD;

  2. clique em Iniciar;

  3. escolha um arquivo .apk;

  4. clique em Instalar APK;

  5. selecione o pacote instalado e clique em Abrir app;

  6. use o preview, perfis de tela e controles Android.

Servidor MCP

uv run apk-preview-mcp

Ferramenta

Função

apk_preview_doctor

Diagnostica SDK, AVDs e dispositivos

list_avds

Lista AVDs dedicados permitidos

start_session

Inicializa ou reutiliza um AVD

install_apk

Instala APK local validado

list_apps

Lista pacotes de terceiros instalados

launch_app

Abre um pacote Android

configure_display

Troca perfil, orientação e tema

inspect_screen

Captura PNG e árvore UI

interact

Envia toque ou controle de navegação

stop_session

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.ps1

Saí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 pyright

Estrutura

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 funcional

Seguranç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_session nã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 tools
apk_preview_configure_displayB

Switch emulator screen profile, orientation, theme and font scale.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNosystem
profileYes
font_scaleNo
orientationNoportrait

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_doctorA
Read-only

Diagnose Android SDK, Emulator, ADB, AVDs and connected devices.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_screenA
Read-only

Return current emulator PNG and optional accessible UI tree.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_ui_treeNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
apk_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
actionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
packageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_appsA
Read-only

List third-party packages installed in active emulator.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_avdsA
Read-only

List dedicated AVDs accepted by APK Preview.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
avdYes
visibleNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 10 tool updatesv0.1.0
    • First observedapk_preview_configure_display
    • First observedapk_preview_doctor
    • First observedapk_preview_inspect_screen
    • First observedapk_preview_install_apk
    • First observedapk_preview_interact
    • First observedapk_preview_launch_app
    • First observedapk_preview_list_apps
    • First observedapk_preview_list_avds
    • First observedapk_preview_start_session
    • First observedapk_preview_stop_session

TDQS

A3.7/5.0

Scored across 10 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    19
    MIT