Bots St

bots.st/shipvo

Shipvo

Simulate a phone and automate UI actions

2379 ms

answered our call

State
Answered
Protocol
MCP 2025-06-18
Tools listed
64
Answered
3 of the last 3 calls

How to reach it

  • MCP, HTTPhttps://sim.shipvo.dev/mcpNeeds header Authorization
  • npmnpx -y @shipvo/mcpReleased 7 Nov 2026, version 0.0.11

What it can do

ToolWhat it says it does
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 owner token.
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'.
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.
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 state change is logged…
close_panelsClose the notification shade, Notification Center or Control Center (swipe up).
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_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 typed value.
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.
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 simulated: nothing…
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_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.
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, and only from a…
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 no_url_listener if…
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 returned challenge…
owner_describeList the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN.
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 simulated.
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).
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).
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 nothing is installed…
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 call secret_status to…
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.
resume_appTap the app icon on the home screen, or its card in the app switcher: the app comes back (AppState "active") with its screen kept. Fails with app_in_foreground if it is already in front.
screenThe current screen as an accessibility tree with refs.
screenshotA PNG of the phone screen (for checking layout, colours, images). The result says `source`: tab-capture (the person's live tab), rendered (the page drawn to an image; it lists what it could not draw) or headless. The tree from `screen` is usually enough to act.
scrollScroll the page (down/up) or a horizontal rail (right/left, give the rail's ref). Returns the new screen. The result starts with 'Change: none | content changed | new screen | scrolled'.
secret_statusWhether a key is saved in the vault, as { saved, valid, access }. Never returns the key. valid is null when it was not checked. Needs an owner token.
set_deviceChange what the simulated phone has: location, the address book (contacts), calendar events, files for the file picker, a barcode in front of the camera, permission states, whether the fingerprint will match, whether a payment will be approved, network on/off. Takes effect for the next action.
set_settingChange one system setting, as a person would in the phone's Settings screen. The app sees it through Appearance (dark_mode), PixelRatio.getFontScale (font_size), AccessibilityInfo (bold_text, reduce_motion), I18nManager (rtl) and Intl (language). Setting language to ar turns rtl on; en and fr turn…
switch_appOpen an installed app (tap its icon on the home screen): it becomes current_app and comes to the front. Fails with not_installed. Logged in device_log as simulated.
tapTap a button, link or choice by ref. Returns the new screen. The result starts with 'Change: none | content changed | new screen | scrolled'. Work that starts on a tap (paying, saving, loading) can finish after this returns, so the screen may show 'Paying...' or a spinner. Do not report that as…
toggle_tileFlip a quick-settings tile in the open shade or Control Center. It changes the simulated device like set_device: Wi-Fi and mobile data both off take the network offline, dark_mode changes the app's colour scheme, dnd stops banners. Tiles: wifi, mobile_data, airplane, location, dark_mode, dnd…

And 4 more tools.

In its maker's words

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

Website
shipvo.dev
Source
github.com/shipvo/shipvo
Publisher
shipvo
Listed from
the official MCP Registry as io.github.shipvo/shipvo
Version
0.0.6, updated 31 Oct 2026
Kinds of work
Browser and automation, Images, video and audio, Devices and the physical world

The domain it lives on

shipvo.dev
registered 31 Oct 2026 (1 months ago), at Cloudflare, Inc., its home page is a working site

From our own crawl of domain names: registry records and the home page as our crawler last saw it.

Every call we made

WhenWhat happenedTime
Answered2379 ms
Answered2283 ms
Answered1119 ms

Next door

Is this your bot? Claim its address to add a verified badge and keep the listing current.