Shipvo

io.github.shipvoPublished by GitHub account shipvov0.0.6Updated Nov 1, 2026

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

VerifiedStreamable HTTPWeb executableBrowser AutomationDeveloper ToolsBusiness & Commerce

Overview

AI-generated overview

Lets an assistant drive a React Native app inside a simulated phone: read the screen, tap, type, scroll, and set device state.

What you can do
  • List and open apps in a fresh phone-sized session, and resume open sessions after a reconnect.
  • Read the current screen as an accessibility tree, take PNG screenshots, tap, type, scroll and go back.
  • Simulate device conditions: location, barcode in front of the camera, permissions, fingerprint match, payment approval, network on/off.
  • Send push notifications, read the notification shade, open notifications, and inspect the device log of permission prompts, scans, payments and shares.
  • Reset the simulated phone, end a session and get a report of steps and backend orders.
  • List and run owner commands (content, prices, offers, orders, publish) against the live app.
When to use it
Useful when an assistant should exercise a React Native app end to end without a physical phone or emulator: walking through flows, checking screens, testing native prompts, or verifying what the app sends to its backend. Also for app owners who want an assistant to change content, prices or offers and publish them.
Requirements
Either the hosted endpoint at sim.shipvo.dev or a local run of the npm package @shipvo/mcp over stdio, with the simulator started first (shipvo sim in the app). A bearer API key in the Authorization header is required, obtained via npx @shipvo/cli login; owner commands additionally need PN_OWNER_TOKEN. The self-hosted HTTP mode uses PN_API_KEYS and should sit behind HTTPS.
Before you install
The Authorization bearer key is a credential and requests without a valid key are refused. Owner commands change live app content, prices and offers, and publish makes changes live on every phone within seconds; changes are audited. Sessions act on a real app backend, so orders and other writes reach it. The hosted service plans per-account keys with test, owner and read scopes.

Installation

In SourceWeft

  1. Open Shipvo in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.shipvo%2Fshipvo/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "shipvo": {
      "type": "http",
      "url": "https://sim.shipvo.dev/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

@shipvo/mcp

Lets AI agents (Claude, Cursor, Claude Code, PiPilot…) use a Shipvo app without a phone: open it, read the screen as an accessibility tree, tap, type, scroll, go back, take screenshots, and read what the app sent to its backend. Plus the owner API: change content, prices and offers, and publish to every phone.

json
{ "mcpServers": { "shipvo": {  "command": "npx", "args": ["-y", "@shipvo/mcp"],  "env": { "PN_SIM": "http://localhost:4545", "PN_OWNER_TOKEN": "…optional…" } } } }

Start the simulator first (shipvo sim in the app). The hosted version needs no local setup: { "url": "https://<host>/mcp/<key>" }.

Tools: list_apps, open_app, screen, tap, type, scroll, back, screenshot, set_device, push_notification, notifications, open_notification, device_log, end_session, owner_describe, owner_command.

Native features work with no phone: the simulated device (see @shipvo/device) shows permission dialogs, the camera, the fingerprint prompt, payment prompts, notification banners and the share sheet as real dialogs in the tree; set_device decides what the phone has (location, a barcode in view, whether the fingerprint matches, whether a payment is approved, network off).

The simulator shows only what a phone would: a horizontal rail lists the visible items, so agents swipe it (scroll right with the rail's ref) exactly as on a device. Measured against a real Android emulator and iPhone simulator, see docs/parity-results.md.

Remote (Streamable HTTP)

Run the server where the simulator runs and put it behind HTTPS (a Cloudflare Tunnel is enough):

PN_API_KEYS="key-for-claude,key-for-pipilot" shipvo-mcp --http 8787

Clients connect with a URL instead of a command:

json
{ "mcpServers": { "shipvo": { "url": "https://sim.shipvo.dev/mcp", "headers": { "Authorization": "Bearer key-for-claude" } } } }

Each client connection gets its own MCP session; each open_app gets its own phone. Requests without a valid key are refused. The hosted version at sim.shipvo.dev will issue keys per account with scopes (test, owner, read).

Source: packages/mcp/README.md at commit 04866d2

Tools

18

list_apps

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

Parametersquery

open_app

Open an app in a fresh phone-sized session and return its first screen.

Parametersapprequireddarksessionseed_cart

list_sessions

Open simulator sessions (phones) on this server: id, app, release and when each started. Use to resume after a reconnect.

Takes no parameters.

screen

The current screen as an accessibility tree with refs.

Parameterssessionrequired

tap

Tap a button, link or choice by ref. Returns the new screen.

Parametersrefrequiredsessionrequired

type

Type into a text field by ref (replaces its content). Returns the new screen.

Parametersrefrequiredtextrequiredentersessionrequired

scroll

Scroll the page (down/up) or a horizontal rail (right/left, give the rail's ref). Returns the new screen.

Parametersrefsessionrequireddirectionrequired

back

Go back one screen.

Parameterssessionrequired

screenshot

A PNG of the phone screen (for checking layout, colours, images). The tree from `screen` is usually enough to act.

Parameterssessionrequired

set_device

Change what the simulated phone has: location, 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.

Parameterscameraonlinepaymentsessionrequiredlocationbiometricspermissions

push_notification

Deliver a push notification to the simulated phone; it appears as a banner the agent can tap.

Parametersbodyrequireddatatitlerequiredsessionrequired

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).

Parameterssessionrequired

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.

Parametersidsessionrequired

device_log

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

Parameterssessionrequired

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.

Parametersapisessionrequiredplatform

end_session

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

Parameterssessionrequired

owner_describe

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

Parametersapprequired

owner_command

Run an owner command against the live app (changes are audited; `publish` makes them live on every phone within seconds).

Parametersapprequiredargscommandrequired

Version history

1
  1. v0.0.6LatestNov 1, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts