podium-mcp

by hoainho

184 downloads Not rated yet

About

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

Explore

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name podium-mcp
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "podium-mcp": {
            "server": {
                "command": "npx",
                "args": [
                    "-y",
                    "podium-mcp"
                ]
            }
        }
    }
}

McpServers

{
    "server": {
        "command": "npx",
        "args": [
            "-y",
            "podium-mcp"
        ]
    }
}

Transport

"stdio"

Package

"podium-mcp"

Registry

"npm"

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 [email protected]: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.