Build an Expo app locally with EAS and install it onto a device — a physical device connected to your machine, or a BrowserStack App Live cloud device. Ships as both an MCP server and a CLI.
Two tools with complete schemas and detailed descriptions. build_and_install has a comprehensive 6-parameter schema with proper types, enums, and descriptions (pattern:constrained-input). list_devices is minimal but correct. Descriptions are well-written (180+ chars for build_and_install), explaining WHAT, WHEN, and routing logic. However, no tool annotations (readOnlyHint/destructiveHint), no error recovery guidance in descriptions, and no output schema documentation. Parameters lack explicit validation constraints (e.g., min/max for osVersion). Missing idempotency guidance for the write operation.
Build an Expo app locally with `eas build --local`, then install the resulting .ipa/.apk onto the requested device. If the device name matches a device connected to this machine (physical or simulator/emulator), it installs there directly. Otherwise it routes the build to BrowserStack App Live as a cloud device. Use this when the user asks to build and install/run the app on a named device.
List iOS/Android devices, simulators, and emulators currently connected to this machine. Use to see which device names are available for local install.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). build_and_install is destructive (builds, installs) but lacks destructiveHint. list_devices is read-only but lacks readOnlyHint. Agents cannot distinguish safe from risky operations.
Output schemas not documented. build_and_install returns BuildAndInstallResult (visible in core/index.ts) but MCP tool definition does not declare the response structure. Agents cannot plan downstream operations or extract required fields.
No error recovery guidance in descriptions. build_and_install can fail (missing osVersion for cloud devices, build failure, device not found) but descriptions do not guide the agent on recovery steps (e.g., 'If osVersion is missing, ask the user or infer from device name').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Parameter osVersion lacks format/range constraints. Description says 'e.g. "17"' but does not specify valid range (e.g., 10-18 for iOS, 8-15 for Android) or format (integer vs string with decimals). LLMs may pass invalid values.
list_devices output schema is empty ({}). No documentation of what fields are returned (device names, IDs, platform, status). Agents cannot extract or chain results to build_and_install.