MCP server for safe multi-IDE App Inventor automation and offline AIA/AIX inspection
AndroidBuilder MCP has 24 tools with consistent verb-noun naming (get_, update_, add_, list_, etc.) and all tools include descriptions. However, descriptions are often terse (10-50 chars) and lack actionable context for LLM selection. Input schemas are present but many parameters lack descriptions or type details. Output schemas are not documented. Error handling is minimal, no recovery guidance or categorization. Security concerns: write operations gated by environment variables rather than per-request authorization. Composition is reasonable (single responsibility per tool), but chaining IDs are not always returned.
Injects validated Blockly XML into the Blocks workspace. Requires ANDROIDBUILDER_ALLOW_WRITE=1.
Clears all blocks from the Blocks workspace. Requires ANDROIDBUILDER_ALLOW_WRITE=1 and explicit confirmation.
Clicks an element on the IDE page using a CSS selector. Requires ANDROIDBUILDER_ALLOW_UNSAFE_CLICK=1 and explicit confirmation.
Compares two AIA files and returns a detailed diff of screens, components, blocks, and assets.
Analyzes the Blocks workspace for errors and warnings.
Exports the current Blockly workspace as pretty-printed XML. Requires Blocks view.
Output schemas not documented. Tools return data but LLMs cannot plan downstream calls without knowing response structure. E.g., get_project_info, get_component_tree, inspect_aia lack documented return types.
Descriptions are terse (10-50 chars) and lack actionable context. E.g., 'Switches the active screen in Designer or Blocks view' does not explain WHEN to use it vs other tools or what prerequisites exist. LLMs cannot disambiguate.
Write operations (update_component_property, add_blocks, clear_blocks) are gated by environment variables (ANDROIDBUILDER_ALLOW_WRITE) rather than per-request authorization. No permission checks or audit trail per tool invocation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2025-06-18+ | v2 |
Returns the catalog of available components for the current IDE.
Selects a component by name when possible, then reads visible values from the Properties sidebar.
Returns the schema (properties, events, methods) for a specific component type.
Returns the Designer component hierarchy as {name, type, uid, children}. Requires Designer view.
Returns project name, active screen, view mode, IDE type, and page URL. Use first to understand context.
Inspects an offline AIA (App Inventor Archive) file and returns metadata about screens, components, blocks, assets, and extensions.
Inspects an offline AIX (App Inventor Extension) file and returns metadata about components, permissions, dependencies, and artifacts.
Lists all open IDE tabs in the debug Chrome session with their metadata.
Lists all screens in the current project.
Reads a specific entry from an offline AIA or AIX archive and returns its contents.
Searches the component catalog by name or description.
Selects an IDE tab by ID for subsequent operations.
Switches the active screen in Designer or Blocks view.
Captures a screenshot of the IDE or a specific area (Designer, Blocks, or full page).
Updates multiple properties of a component at once.
Updates a component property in Designer view. Requires ANDROIDBUILDER_ALLOW_WRITE=1.
Validates an offline AIA file for structural integrity and returns validation status with diagnostics.
Validates an offline AIX file for structural integrity and returns validation status with diagnostics.
Error handling is minimal. No recovery guidance, categorization (retryable vs fatal), or actionable error messages. E.g., if add_blocks fails due to invalid XML, the LLM receives no hint on how to fix it.
Chaining IDs not always returned. E.g., get_component_tree returns component hierarchy but unclear if response includes UIDs needed for update_component_property. Broken chains force discovery detours.