podium-mcp
About
Unified mobile E2E MCP — 28 tools (mobile-mcp + Maestro + RN-debugger parity)
Details
- Author
- hoainho
- Categories
- Productivity, Other, Developer Tools, Automation
Jump to
Setup
Install podium-mcp in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/hoainho/podium-mcp
Follow the installation instructions in the repository README, then restart your MCP client.
A single MCP stdio endpoint with51 toolsforiOS (simulator + real) and Androiddevice control, native UI automation, end-to-end flows, trustworthy assertions, React Native debugging,WebView DOM + network inspection, and ano-vision canvas/WebGL brainfor Pixi/Konva/Fabric/Phaser/Three/Babylon (validated live in WebKit) — plus anexperimentalengine bridge for instrumented Unity/GL builds (AltTester) — one connection instead of half a dozen servers.
One prompt → podium drives Safari live → types the URL → explores the profile → opens a repo. Footage captured on a live iPhone 16 Pro simulator.
A podium is where a maestro stands — one place to conduct the whole orchestra. This MCP server unifies eight capability sets behind a single stdio endpoint:
- Device & app management— iOS simulators (simctl), real iPhones (devicectl), and Android (adb) behind one platform-tagged device model.
- Native UI inspection & gestures— route throughidb/mobilecliwith a Maestro fallback (no per-gesture JVM spin-up).
- End-to-end flows & batch automation— declarative Maestro flows, ordered action batches, and an engineer→QA flow exporter.
- Trustworthy assertions— anoracle ladder(WebView-DOM › native a11y › Maestro) that returns falsifiable, evidenced verdicts andfails closed.
- WebView DOM + network— resolveWKWebViewDOM to tap coordinates, evaluate JS, drive navigation, and capture in-page HTTP traffic as JSON/HAR.
- React Native debugging— Metro console logs, network requests, and in-app state over CDP, plus host/simulator crash reports.
- Real devices— Android emulator/device viaadb(gestures +uiautomatorhierarchy); real iOS viadevicectllifecycle + an opt-in WebDriverAgent backend.
- Canvas & game-engine automation, no vision— acanvas/WebGL braindrives Pixi/Konva/Fabric/Phaser/Three/Babylon UIs as addressable objects (validated live in WebKit). Anexperimentalengine bridge drives Unity/GL via anAltTester-instrumentedbuild (or awindow.__podiumEngineWebGL bridge) — code-complete + mock-tested, not yet run against a live Unity build.
Rather than wiring several MCP servers into every client config,podium-mcpexposes everything behindone connection, with a sharedexecFilelayer (no shell), consistent structured errors, automatic retry around Maestro's iOS-driver flakiness, and a single health-check tool to confirm what's available on the host.
- Why
- Benchmarks
- Requirements
- Install
- Usage
- Quick start
- The 51 tools
- The oracle ladder — trustworthy assertions
- Native-first gesture backend
- WebView & RN network introspection
- Documented limits
- Architecture
- Development & testing
- Roadmap & contributing
- Releasing
- Prompt playbook & references
- Design ideas
- Contributing·Security·License
Driving a React Native app end-to-end usually means juggling several MCP servers — one for device/app control, one for UI flows, one for Metro/debugger logs, another for WebView inspection — each with its own config entry, quirks, and failure modes. podium-mcp collapses that intooneserver with:
- a singleexecFile-based command runner (no shell — arguments are passed verbatim),
- consistent structured errors (a tool never crashes the server),
- automatic retry around Maestro's known iOS-driver flakiness,
- graceful degradation when a toolchain (e.g.adb) is absent,
- evidenced verdictsso an agent knows when a flowactuallyworked.
Podium is built on two choices that make itfastandcheap: it drives UIs asstructured data— never screenshots — and routes gestures through anative backendwith no per-action JVM spin-up.
Token economics — no-vision is ~5× cheaper
A screenshot-driven agent sends an image to a vision model onevery step. Podium returns a compact structured element list instead. On an equivalent 8-step mobile flow (1179×2556 screenshots vs ~20-element lists):
vision loop ████████████████████████████████ 16,557 tokens Podium ██████ 3,117 tokens (5.3× cheaper, −81%)
The gapcompounds with every step— a 30-step session runs roughly62k vs 12kinput tokens. On top of per-step cost, the full51-tool schema travels with every request (~3,612 tokens, ~71/tool); Podium keeps tool descriptions lean so the tool block never dominates the context window.
For canvas / WebGL UIs the advantage isstructural, not just cheaper: theCanvas Brainaddresses objects by name and text, where a screenshot-only agent must re-analyze pixels on every frame.
Gestures route throughidb/mobilecliinstead of spinning up Maestro's JVM per action (measured on a live iPhone 16 Pro simulator):
All51 tools— device & app control, UI automation, declarative Maestro flows, evidenced assertions, WebView DOM + network capture, React Native / Metro debugging, and no-vision canvas/WebGL automation (plus an experimental engine bridge for instrumented Unity/GL) — sit behind asingle stdio endpoint, replacing the usual stack of half a dozen separate MCP servers.
Token figures are heuristic estimates (~4 chars/token; Anthropic's ~750 px/token image formula) — reproduce withnpm run token-bench, or swap in the Anthropiccount_tokensAPI for exact counts. Speed figures were measured on a live iPhone 16 Pro simulator (npm run benchmark).
- macOSwith Xcode command-line tools (xcrun,simctl)
- Node.js ≥ 22(uses nativefetchandWebSocket;.npmrcsetsengine-strict=true)
- mobilecli— bundled automatically as an npm dependency; the default native gesture + WebView backend (no separate install)
- (optional)idb(idb+idb_companion) — preferred native gesture backend when both are present; auto-detected
- (optional)MaestroonPATH(or at~/.maestro/bin) — therun_flowengine and the gesture fallback path
- (optional)a runningMetrobundler for themetro_debugging tools
- (optional)*Android SDK +adb— adb paths aredetection-onlyand degrade gracefully when absent
Platform scope (v0.3.0):podium automatesiOS simulators,real iPhones(devicectllifecycle + opt-in WebDriverAgent), andAndroidemulators/devices (adbgestures +uiautomatorhierarchy).device_listtags each target with its platform and the backend is selected per target. When a toolchain (e.g.adb) is absent, those paths degrade to an informative result instead of failing.
No manual config — one-time marketplace setup, then install:
/plugin marketplace add github:hoainho/podium-mcp /plugin install podium-mcp@podium
The plugin auto-starts the MCP server (all 51 tools) and ships five skills:
{ "mcpServers": { "podium": { "command": "npx", "args": ["-y", "podium-mcp"] } } }
git clone git@github.com:hoainho/podium-mcp.git cd podium-mcp npm install npm run build
Register the built server with any MCP client.Claude Code(.mcp.json):
{ "mcpServers": { "podium": { "type": "stdio", "command": "node", "args": ["/absolute/path/to/podium-mcp/dist/index.js"] } } }
Quick manual smoke test over raw stdio (lists the 51 registered tools):
printf '%s\n' \ '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}' \ '{"jsonrpc":"2.0","method":"notifications/initialized"}' \ '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | node dist/index.js
…
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





