NestDaddy

Shipvo

io.github.shipvo/shipvo · v0.0.6

Open a React Native app in a simulated phone: read the screen, tap, type, set device state.

Connect Remote server

Terminal
claude mcp add --transport http shipvo https://sim.shipvo.dev/mcp --header "Authorization: Bearer <YOUR_API_KEY>"
~/.cursor/mcp.json
{
  "mcpServers": {
    "shipvo": {
      "url": "https://sim.shipvo.dev/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_API_KEY>"
      }
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "shipvo": {
      "type": "http",
      "url": "https://sim.shipvo.dev/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_API_KEY>"
      }
    }
  }
}
Claude Desktop
Settings > Connectors > Add custom connector
URL: https://sim.shipvo.dev/mcp

Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.

Tools 80 found in our last check

  • a11y_audit

    Check the current screen for controls TalkBack and VoiceOver users cannot use. Lists every button, link, field or other control with no accessible name (missing_label) and every tap target under the platform minimum (small_target: 48 dp wide or high on the Android style, 44 pt o…

  • a2ui_actions

    What an A2UI session sent to the agent: the action messages from buttons the person pressed, with their context read from the data model. Pass `since` (the `next` of the last call) to get only newer ones.

  • a2ui_open

    Open A2UI v1.0 messages as a screen on a phone and return it as a tree. The messages are the agent's own: createSurface, updateComponents, updateDataModel, deleteSurface. Needs no app. Then use screen, tap, type and screenshot on the session like any app, a2ui_send to change the…

  • a2ui_send

    Send more A2UI messages to a session from a2ui_open and return the screen after them. The result says how many were applied and lists each refused message with the reason.

  • app_activity

    What was built and changed on the phone: for each app made with create_app, its versions with a plain line for what changed in each (added, removed or changed screens, actions and data), its http data sources and how often each refreshes, and its events (create, update, action,…

  • apply_update

    Apply the ready release: the app restarts on the new bundle, like restart. After 3 boots that throw, the phone goes back to the old release and the state is reverted with reason crash_loop. Fails with not_ready unless the state is ready. Simulated; logged in device_log.

  • approval_approve

    Approve a held promote so it goes live. The proposer cannot approve it, and an agent cannot approve an agent's proposal: that is refused with rule self_approval. Ask the owner to approve in that case. Both outcomes are audited.

  • approvals_list

    List what waits for an owner. approvals: promotes held above the app's policy band (hold id, release, band, proposer, age). challenges: owner commands waiting for the owner to approve in the admin (id, command, plan, expiry, approval_url). Agents cannot approve either. Needs an…

  • arrange_apps

    Lay out an installed app on the home screen: pinned (first), hidden (not on the home screen, still opens with switch_app), position (0 first) and schedule (days, from, to: the app shows only then, e.g. a weekly planner Monday to Friday 08:00-18:00 and weekend plans on Saturday).…

  • attach_session

    Attach to the phone of a live `shipvo run` in this project (read from .shipvo/run.json) and return its screen. The person sees every action in their browser. Same as open_app with attach: 'always', without needing the app id.

  • audit_log

    Read the app's release audit log, newest first: who (actor) did what (action) to which release (subject) and when (at). Read-only. Needs an owner token.

  • back

    Go back one screen. The result starts with 'Change: none | content changed | new screen | scrolled'.

  • backup_phone

    Back up the whole phone as one JSON object, on Android and iOS: every app you built with its spec, data, settings, home-screen place and permission answers; every Store app with its listing and permission answers; the system settings; and the clipboard. Saved keys in the vault a…

  • browser_back

    Go back one page in the phone browser. Returns the snapshot.

  • browser_click

    Click an element of the phone browser's page by ref from browser_snapshot. Returns the new snapshot.

  • browser_close_tab

    Close a tab of the phone browser by its index from browser_tabs. Returns the remaining tabs.

  • browser_open

    Open a web page in the phone's Chromium (separate from the app) and return its snapshot. Private hosts (localhost, 127.x, 10.x, 192.168.x, 169.254.x, CGNAT, .local, .internal) are refused with host_not_allowed unless you opt in.

  • browser_screenshot

    A PNG of the phone browser's page.

  • browser_scroll

    Scroll the phone browser's page by dy CSS pixels (positive is down) and dx (positive is right). Returns the snapshot.

  • browser_snapshot

    The phone browser's page as an accessibility tree with refs, marked source "web" (untrusted).

  • browser_tabs

    List the phone browser's tabs (index, url, title, which is active). Titles are untrusted web content.

  • browser_type

    Type into a field of the phone browser's page by ref (replaces its content). Returns the new snapshot.

  • browser_wait_for

    Wait until text appears in the phone browser's page, or is gone (gone: true). Fails with code timeout. Returns the snapshot.

  • cancel_reminder

    Cancel a reminder by id. Returns whether it existed.

  • check_for_update

    Ask the update source for a newer release: checks its signature and hash and downloads it. Ends in ready, or idle with reason verify_failed or download_failed (the release is never applied). Fails with no_update when nothing newer exists or no source is set. Simulated; each stat…

  • clear_schedule

    Remove an app's schedule so pin and hide decide again whether it shows. Fails with not_installed.

  • clear_wakeup

    Stop waking an assistant by webhook. Returns whether one was registered.

  • close_panels

    Close the notification shade, Notification Center or Control Center (swipe up).

  • create_app

    Describe an app and it appears on the phone. Pass an app spec (JSON, shipvo.app/v0: data, actions, screens). The spec is checked first: every problem comes back with its path and a fix, and nothing is installed until it is valid. A valid spec is started, gets an icon on the home…

  • device_log

    What the app did with the device in this session: permission prompts and answers, location reads, scans, fingerprint checks, payments, notifications, shares.

  • device_reset

    Put the simulated phone back to a known state (permissions undetermined, default location, nothing in front of the camera, log cleared), optionally with a new profile.

  • dismiss_notification

    Swipe a notification away in the open shade (newest if no id), or Clear all with all: true.

  • end_session

    Close the session and get a report: steps taken, and the orders the app sent to its backend during the session.

  • export_phone_apps

    Copy the spec apps (made with create_app) out of the phone. Returns JSON with, per app, id, name, style (android or ios), spec, data (what was entered into its collections), settings and its home-screen layout (placement: pinned, hidden, position, schedule) when it has one. Pass…

  • export_test

    Turn the steps taken in this session (tap, type, scroll, back, set_device) into a @shipvo/test script and return its source. Read-only. Targets are named by their visible text; ambiguous ones become TODO comments and password fields use an environment variable instead of the typ…

  • find_apps

    Search the Store by need, for example "split bills". Matches the query against app name, description and tags (case-insensitive, word based) and filters by country, language and currency when an app declares them; apps that declare nothing for a filter still match. Returns up to…

  • get_clipboard

    The text on the phone's clipboard, the same one apps copy to and paste from on Android and iOS.

  • get_connectivity

    The phone's Wi-Fi, mobile data and airplane mode switches, and the network every app sees from them: online and type (wifi, cellular or none). Android and iOS.

  • get_network_profile

    Read the phone's current network profile name (online until set_network_profile or phone.json changes it).

  • get_settings

    Read the phone's system settings from the Settings screen: dark_mode, font_size (small, default, large, largest), bold_text, reduce_motion, language (en, fr, ar) and rtl. Returns each setting and the screen as rows.

  • get_update_state

    The phone's OTA update state: idle, checking, downloading, ready, applied or reverted, the running release, the held release, and the last reason (verify_failed, download_failed or crash_loop). Simulated and logged in device_log.

  • hide_app

    Hide an installed app from the home screen and the app list, or show it again with hidden: false. The app keeps its data and still opens with switch_app and run_app_action. Works for Store apps and apps made with create_app, and survives update_app. Fails with not_installed. Log…

  • import_phone_apps

    Put apps from export_phone_apps on this phone, with their data, settings and home-screen layout. Every spec is checked first: all problems come back with their path (for example apps[1].spec.screens) and nothing is installed unless all are valid. An id that is already installed…

  • inbox_clear

    Empty this session's private inbox. Returns how many messages were removed.

  • inbox_read

    Read this session's private inbox: its address and every message, oldest first, each with from, subject, text, codes (4 to 8 digits) and links. Reading changes nothing: a second call returns the same result.

  • inbox_view

    Show the Assistant Inbox of this phone live in the chat: every message and task between assistants, who you are, and what waits for you. In a chat that shows MCP Apps views, a live inbox appears and, with auto-continue on, each new message or task for you is posted into the chat…

  • inbox_wait

    Wait for mail in this session's private inbox (its address is in the result; type it into the app's email field). Returns the first message that matches, already there or arriving within timeout_ms: from, subject, text, the 4 to 8 digit codes and the links in it. Use it to finis…

  • install_app

    Install a Store app on the phone, as tapping Install in the Store screen does. The app icon appears on the home screen. Fails with unknown_app (not in the Store) or already_installed. If the marketplace is unreachable the phone's own Store list is used. Logged in device_log as s…

  • job_status

    Read a slow job started by publish_preview or upload_build. Returns { status: running | done | failed, job } with the result when done or a typed error { code, error } when failed. Pass wait_ms to wait for it (long poll, default 0, max 55000). A job id from another key is not fo…

  • kill_app

    Swipe the app's card away in the app switcher (call open_recents first). The app is killed: the next resume_app is a cold start, with storage kept. Fails with recents_not_open otherwise.

  • list_apps

    Apps this server can open, with what each one does. Optional query filters by name, description or category (e.g. 'shop', 'douala').

  • list_installed_apps

    List the apps installed on the person's persistent phone, the same in every chat and assistant. Needs PN_ASSISTANT_TOKEN.

  • list_reminders

    The reminders waiting on the phone (id, title, next time, repeat) and the last ones that fired with whether each was delivered.

  • list_sessions

    Open simulator sessions (phones) on this server: id, app, platform, room, who opened it (the MCP client name), start time and current screen title. Use to resume after a reconnect or to see who shares a room.

  • list_store_apps

    List the apps in the phone's Store: the marketplace apps from the control plane, each with id, name, bundle url and version. Fails with store_unreachable when the marketplace cannot be reached (nothing is guessed). Install one with install_app.

  • list_wakeups

    The wake-up URLs registered on this phone: assistant name, URL and events (never the secret).

  • lock

    Press the power button: the simulated phone locks and shows the lock screen. The app and its screen are kept. While locked, tap, type, scroll and back fail with phone_locked. Logged in device_log as simulated.

  • notifications

    The notification shade: notifications delivered to the simulated phone in this session (their banners vanish after 5 s, like a heads-up on a real phone).

  • open_app

    Opens the phone in the user's browser so they can watch. Opens an app in a phone-sized session and returns its first screen. With no live `shipvo run` for the project, it starts one (pick platform: 'android' or 'ios') when the project has `shipvo` installed, or when show is true…

  • open_control_center

    iPhone only: swipe down from the top right to open Control Center (airplane, Wi-Fi, mobile data, focus, orientation lock, brightness, dark mode). Android fails with no_control_center: use open_notifications.

  • open_notification

    Tap a notification from the shade (newest if no id is given): the app handles it exactly as if its banner was tapped.

  • open_notifications

    Pull down from the top. Android: the first call opens the notification shade (a few quick-settings tiles and the notifications); a second call expands all tiles. iPhone: opens Notification Center (grouped by app). Returns the tiles and notifications.

  • open_recents

    Open the app switcher: the app goes to the background and its card is shown. resume_app opens the card again; kill_app swipes it away.

  • open_url

    Open a deep link (such as myapp://item/3) in the running app, as a push tap, auth callback or share link would. Fails with invalid_url if the text has no scheme, or no_handler if apps declare URL schemes and none matches; a match returns the owning app id. Otherwise fails with n…

  • owner_command

    Run an owner command against the live app (changes are audited). Commands that cannot be undone or reach users (publish, prices, offers, deletes, API keys) do nothing and return { code: "needs_confirm", plan } first: show the plan to the owner, then ask the owner to approve the…

  • owner_describe

    List the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN.

  • permission_log

    Every device permission decision on the phone, oldest first, on Android and iOS: when an app was granted or denied a permission (by install, import, update or the Settings switch), when a permission was removed, and each time an app action used a permission or was blocked by a d…

  • phone_models

    The phone models a headless session can be, each with its platform, screen size in CSS pixels and pixel ratio, and the default model for android and ios. Pass a name to open_app as `model`.

  • pin_app

    Pin an installed app to the top of the home screen (Android and iOS style), after any apps pinned before it, or unpin it with pinned: false. Works for Store apps and apps made with create_app, and survives update_app. Fails with not_installed. Logged in device_log.

  • press_home

    Press Home: the app goes to the background (it receives AppState "background") and the phone shows the home screen with the app icon. While there, tap, type, scroll and back fail with app_not_foreground. Call resume_app to bring the app back (AppState "active"). Logged as simula…

  • publish_preview

    Build the app in PN_APP_DIR (or the current folder) with the simulated device and publish a shareable web preview to here.now, no account. The link is PUBLIC and expires in 24 hours; claimUrl keeps it. Returns { url, claimUrl, expiresAt }. Needs @shipvo/cli (npx). Slow: waits up…

  • push_notification

    Deliver a push notification to the simulated phone; it appears as a banner the agent can tap. The app receives it only if notification permission is granted; otherwise nothing is delivered.

  • record_marker

    Add a chapter at the current time of the running recording.

  • record_start

    Start recording the phone frame to an MP4 under .shipvo/recordings/. Use record_marker for chapters and record_stop to finish.

  • record_stop

    Stop the recording and write the MP4. Returns the file, duration in seconds, size and chapters. With music: true, mixes a ducked music bed under the video and writes a credits JSON next to it (credit the track where you publish).

  • refresh_app

    Fetch the data of a spec app now (its http data sources) and redraw the open screen if anything changed. Apps with a refresh interval in the spec also refresh by themselves. The result lists the sources that changed and any errors; a source that fails keeps its last good data. F…

  • register_wakeup

    Wake an assistant that is not in a turn: when a new message or task arrives for `name` in the Assistant Inbox app, the phone POSTs a small signed JSON note to `url` (who it is for, whether it is a message or a task, a one-line summary and the ids; never the message text). The UR…

  • request_app_install

    Ask to add an app to the person's own persistent phone (not the simulator). Returns a consent card: app name, publisher, the permissions it asks for, and approve_url and decline_url. Show the card to the person and tell them to open a link themselves: you cannot approve, and not…

  • request_secret

    Ask the person for an API key without it passing through this chat. Returns a one-time link to the Shipvo vault page (valid 10 minutes, works once) and a notice to show the person. The key goes straight into the vault: you never see it. Tell the person to open the link, then cal…

  • restart

    Restart the simulated phone from the power menu: a boot screen, then the app starts fresh (cold start). Storage is kept. Returns the first screen. Logged in device_log as simulated.

Headers

NameDescription
Authorization
Required, secret
Bearer <key from `npx @shipvo/cli login`>

Details

Endpointhttps://sim.shipvo.dev/mcp (Streamable HTTP)
Package@shipvo/[email protected] (NPM, stdio)
First published31 Oct 2026
Last updated31 Oct 2026
Registry nameio.github.shipvo/shipvo

More browser automation servers See all

Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.