Open a React Native app in a simulated phone: read the screen, tap, type, set device state.
Connect Remote server
claude mcp add --transport http shipvo https://sim.shipvo.dev/mcp --header "Authorization: Bearer <YOUR_API_KEY>"
{
"mcpServers": {
"shipvo": {
"url": "https://sim.shipvo.dev/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}
{
"servers": {
"shipvo": {
"type": "http",
"url": "https://sim.shipvo.dev/mcp",
"headers": {
"Authorization": "Bearer <YOUR_API_KEY>"
}
}
}
}
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_auditCheck 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_actionsWhat 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_openOpen 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_sendSend 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_activityWhat 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_updateApply 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_approveApprove 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_listList 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_appsLay 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_sessionAttach 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_logRead 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.
backGo back one screen. The result starts with 'Change: none | content changed | new screen | scrolled'.
backup_phoneBack 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_backGo back one page in the phone browser. Returns the snapshot.
browser_clickClick an element of the phone browser's page by ref from browser_snapshot. Returns the new snapshot.
browser_close_tabClose a tab of the phone browser by its index from browser_tabs. Returns the remaining tabs.
browser_openOpen 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_screenshotA PNG of the phone browser's page.
browser_scrollScroll the phone browser's page by dy CSS pixels (positive is down) and dx (positive is right). Returns the snapshot.
browser_snapshotThe phone browser's page as an accessibility tree with refs, marked source "web" (untrusted).
browser_tabsList the phone browser's tabs (index, url, title, which is active). Titles are untrusted web content.
browser_typeType into a field of the phone browser's page by ref (replaces its content). Returns the new snapshot.
browser_wait_forWait until text appears in the phone browser's page, or is gone (gone: true). Fails with code timeout. Returns the snapshot.
cancel_reminderCancel a reminder by id. Returns whether it existed.
check_for_updateAsk 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_scheduleRemove an app's schedule so pin and hide decide again whether it shows. Fails with not_installed.
clear_wakeupStop waking an assistant by webhook. Returns whether one was registered.
close_panelsClose the notification shade, Notification Center or Control Center (swipe up).
create_appDescribe 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_logWhat the app did with the device in this session: permission prompts and answers, location reads, scans, fingerprint checks, payments, notifications, shares.
device_resetPut 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_notificationSwipe a notification away in the open shade (newest if no id), or Clear all with all: true.
end_sessionClose the session and get a report: steps taken, and the orders the app sent to its backend during the session.
export_phone_appsCopy 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_testTurn 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_appsSearch 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_clipboardThe text on the phone's clipboard, the same one apps copy to and paste from on Android and iOS.
get_connectivityThe 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_profileRead the phone's current network profile name (online until set_network_profile or phone.json changes it).
get_settingsRead 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_stateThe 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_appHide 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_appsPut 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_clearEmpty this session's private inbox. Returns how many messages were removed.
inbox_readRead 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_viewShow 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_waitWait 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_appInstall 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_statusRead 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_appSwipe 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_appsApps this server can open, with what each one does. Optional query filters by name, description or category (e.g. 'shop', 'douala').
list_installed_appsList the apps installed on the person's persistent phone, the same in every chat and assistant. Needs PN_ASSISTANT_TOKEN.
list_remindersThe reminders waiting on the phone (id, title, next time, repeat) and the last ones that fired with whether each was delivered.
list_sessionsOpen 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_appsList 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_wakeupsThe wake-up URLs registered on this phone: assistant name, URL and events (never the secret).
lockPress 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.
notificationsThe 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_appOpens 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_centeriPhone 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_notificationTap a notification from the shade (newest if no id is given): the app handles it exactly as if its banner was tapped.
open_notificationsPull 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_recentsOpen 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_urlOpen 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_commandRun 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_describeList the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN.
permission_logEvery 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_modelsThe 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_appPin 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_homePress 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_previewBuild 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_notificationDeliver 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_markerAdd a chapter at the current time of the running recording.
record_startStart recording the phone frame to an MP4 under .shipvo/recordings/. Use record_marker for chapters and record_stop to finish.
record_stopStop 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_appFetch 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_wakeupWake 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_installAsk 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_secretAsk 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…
restartRestart 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
| Name | Description |
|---|---|
AuthorizationRequired, secret | Bearer <key from `npx @shipvo/cli login`> |
Details
| Endpoint | https://sim.shipvo.dev/mcp (Streamable HTTP) |
| Package | @shipvo/[email protected] (NPM, stdio) |
| First published | 31 Oct 2026 |
| Last updated | 31 Oct 2026 |
| Registry name | io.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.
