podium-mcp

by hoainho

Not rated
GitHub

About

Unified mobile E2E MCP — 28 tools (mobile-mcp + Maestro + RN-debugger parity)

Details

Author
hoainho
Categories
Productivity, Other, Developer Tools, Automation

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

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.