{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_k3ftmhyes79y","handle":"shipvo","url":"https://wellknown.network/agents/shipvo","links":{"self":"https://wellknown.network/agents/shipvo/record.json","html":"https://wellknown.network/agents/shipvo","markdown":"https://wellknown.network/agents/shipvo/record.md","api":"https://wellknown.network/api/v1/agents/shipvo","status":"https://wellknown.network/api/v1/agents/shipvo/status","claim":"https://wellknown.network/agents/shipvo/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/shipvo/claim.json","badge":"https://wellknown.network/agents/shipvo/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/shipvo/history","tools":"https://wellknown.network/api/v1/agents/shipvo/tools"},"ard":{"identifier":"urn:air:sim.shipvo.dev:server:shipvo","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Shipvo","summary":"Open a React Native app in a simulated phone: read the screen, tap, type, set device state.","description":"Open a React Native app in a simulated phone: read the screen, tap, type, set device state.","publisher":{"name":"shipvo","url":null},"homepage":"https://shipvo.dev","repository":"https://github.com/shipvo/shipvo","version":"0.0.6","license":"Apache-2.0","protocols":["mcp"],"tags":["mcp","model-context-protocol","ai-agents","react-native","expo","mobile-testing","simulator","shipvo"],"pricing":null,"endpoints":[{"url":"https://sim.shipvo.dev/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"npm:@shipvo/mcp","type":"package_npm","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-31T19:37:32.717956Z","npmKeywords":["mcp","model-context-protocol","ai-agents","react-native","expo","mobile-testing","simulator","shipvo"],"publishedAt":"2026-10-31T19:37:32.717956Z","registryName":"io.github.shipvo/shipvo"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","license":"npm","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"commerce.payments","name":"Payments","confidence":1,"provenance":"derived"},{"slug":"communication.notifications","name":"Notifications","confidence":1,"provenance":"derived"},{"slug":"security.identity","name":"Identity & Access","confidence":1,"provenance":"derived"},{"slug":"infra.devices","name":"Devices & IoT","confidence":0.885,"provenance":"derived"},{"slug":"communication.sms-voice","name":"SMS & Voice","confidence":0.859,"provenance":"derived"},{"slug":"code.testing","name":"Testing","confidence":0.656,"provenance":"derived"},{"slug":"productivity.calendar","name":"Calendar & Scheduling","confidence":0.525,"provenance":"derived"}],"categories":["code","commerce","communication","infra","productivity","security"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 4h ago.","lastOkAt":"2026-11-05T20:26:51.683Z","lastProbedAt":"2026-11-05T20:26:51.683Z","statusComputedAt":"2026-11-05T20:29:45.290Z","reliability30d":{"probes":7,"successRate":1,"p50Ms":31,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":7,"ok":7,"authBoundaryOk":0,"serviceOk":7,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-11-05T20:26:51.683Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":80,"error":null,"detail":{"tools":[{"name":"list_apps","description":"Apps this server can open, with what each one does. Optional query filters by name, description or category (e.g. 'shop', 'douala')."},{"name":"open_app","description":"Open an app in a fresh phone-sized session and return its first screen."},{"name":"list_sessions","description":"Open simulator sessions (phones) on this server: id, app, release and when each started. Use to resume after a reconnect."},{"name":"screen","description":"The current screen as an accessibility tree with refs."},{"name":"tap","description":"Tap a button, link or choice by ref. Returns the new screen."},{"name":"type","description":"Type into a text field by ref (replaces its content). Returns the new screen."},{"name":"scroll","description":"Scroll the page (down/up) or a horizontal rail (right/left, give the rail's ref). Returns the new screen."},{"name":"back","description":"Go back one screen."},{"name":"screenshot","description":"A PNG of the phone screen (for checking layout, colours, images). The tree from `screen` is usually enough to act."},{"name":"set_device","description":"Change what the simulated phone has: location, the address book (contacts), calendar events, files for the file picker, a barcode in front of the camera, permis"},{"name":"push_notification","description":"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; ot"},{"name":"notifications","description":"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)."},{"name":"open_notification","description":"Tap a notification from the shade (newest if no id is given): the app handles it exactly as if its banner was tapped."},{"name":"open_url","description":"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 no_url_listener if the app does not l"},{"name":"device_log","description":"What the app did with the device in this session: permission prompts and answers, location reads, scans, fingerprint checks, payments, notifications, shares."},{"name":"device_reset","description":"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 p"},{"name":"end_session","description":"Close the session and get a report: steps taken, and the orders the app sent to its backend during the session."},{"name":"owner_describe","description":"List the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN."},{"name":"owner_command","description":"Run an owner command against the live app (changes are audited; `publish` makes them live on every phone within seconds)."}],"toolCount":19,"toolsHash":"ddf63ec872d027cbda09ff9420f2deddd0bc3f8b916af3e0e323843b4a30a7ea","serverName":"shipvo","capabilities":["tools"],"serverVersion":"0.0.6","protocolVersion":"2025-06-18"}},{"at":"2026-11-05T11:22:24.716Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":31,"error":null,"detail":{"tools":[{"name":"list_apps","description":"Apps this server can open, with what each one does. Optional query filters by name, description or category (e.g. 'shop', 'douala')."},{"name":"open_app","description":"Open an app in a fresh phone-sized session and return its first screen."},{"name":"list_sessions","description":"Open simulator sessions (phones) on this server: id, app, release and when each started. Use to resume after a reconnect."},{"name":"screen","description":"The current screen as an accessibility tree with refs."},{"name":"tap","description":"Tap a button, link or choice by ref. Returns the new screen."},{"name":"type","description":"Type into a text field by ref (replaces its content). Returns the new screen."},{"name":"scroll","description":"Scroll the page (down/up) or a horizontal rail (right/left, give the rail's ref). Returns the new screen."},{"name":"back","description":"Go back one screen."},{"name":"screenshot","description":"A PNG of the phone screen (for checking layout, colours, images). The tree from `screen` is usually enough to act."},{"name":"set_device","description":"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 b"},{"name":"push_notification","description":"Deliver a push notification to the simulated phone; it appears as a banner the agent can tap."},{"name":"notifications","description":"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)."},{"name":"open_notification","description":"Tap a notification from the shade (newest if no id is given): the app handles it exactly as if its banner was tapped."},{"name":"open_url","description":"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 no_url_listener if the app does not l"},{"name":"device_log","description":"What the app did with the device in this session: permission prompts and answers, location reads, scans, fingerprint checks, payments, notifications, shares."},{"name":"device_reset","description":"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 p"},{"name":"end_session","description":"Close the session and get a report: steps taken, and the orders the app sent to its backend during the session."},{"name":"owner_describe","description":"List the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN."},{"name":"owner_command","description":"Run an owner command against the live app (changes are audited; `publish` makes them live on every phone within seconds)."}],"toolCount":19,"toolsHash":"60ac0978c349e3ec24850b7257825d90c1ef1af0b4678ad1efd5baf2286648f1","serverName":"shipvo","capabilities":["tools"],"serverVersion":"0.0.6","protocolVersion":"2025-06-18"}},{"at":"2026-11-05T02:22:19.514Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":21,"error":null,"detail":{"tools":[{"name":"list_apps","description":"Apps this server can open, with what each one does. Optional query filters by name, description or category (e.g. 'shop', 'douala')."},{"name":"open_app","description":"Open an app in a fresh phone-sized session and return its first screen."},{"name":"list_sessions","description":"Open simulator sessions (phones) on this server: id, app, release and when each started. Use to resume after a reconnect."},{"name":"screen","description":"The current screen as an accessibility tree with refs."},{"name":"tap","description":"Tap a button, link or choice by ref. Returns the new screen."},{"name":"type","description":"Type into a text field by ref (replaces its content). Returns the new screen."},{"name":"scroll","description":"Scroll the page (down/up) or a horizontal rail (right/left, give the rail's ref). Returns the new screen."},{"name":"back","description":"Go back one screen."},{"name":"screenshot","description":"A PNG of the phone screen (for checking layout, colours, images). The tree from `screen` is usually enough to act."},{"name":"set_device","description":"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 b"},{"name":"push_notification","description":"Deliver a push notification to the simulated phone; it appears as a banner the agent can tap."},{"name":"notifications","description":"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)."},{"name":"open_notification","description":"Tap a notification from the shade (newest if no id is given): the app handles it exactly as if its banner was tapped."},{"name":"open_url","description":"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 no_url_listener if the app does not l"},{"name":"device_log","description":"What the app did with the device in this session: permission prompts and answers, location reads, scans, fingerprint checks, payments, notifications, shares."},{"name":"device_reset","description":"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 p"},{"name":"end_session","description":"Close the session and get a report: steps taken, and the orders the app sent to its backend during the session."},{"name":"owner_describe","description":"List the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN."},{"name":"owner_command","description":"Run an owner command against the live app (changes are audited; `publish` makes them live on every phone within seconds)."}],"toolCount":19,"toolsHash":"60ac0978c349e3ec24850b7257825d90c1ef1af0b4678ad1efd5baf2286648f1","serverName":"shipvo","capabilities":["tools"],"serverVersion":"0.0.6","protocolVersion":"2025-06-18"}},{"at":"2026-11-04T18:23:43.152Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":31,"error":null,"detail":{"tools":[{"name":"list_apps","description":"Apps this server can open, with what each one does. Optional query filters by name, description or category (e.g. 'shop', 'douala')."},{"name":"open_app","description":"Open an app in a fresh phone-sized session and return its first screen."},{"name":"list_sessions","description":"Open simulator sessions (phones) on this server: id, app, release and when each started. Use to resume after a reconnect."},{"name":"screen","description":"The current screen as an accessibility tree with refs."},{"name":"tap","description":"Tap a button, link or choice by ref. Returns the new screen."},{"name":"type","description":"Type into a text field by ref (replaces its content). Returns the new screen."},{"name":"scroll","description":"Scroll the page (down/up) or a horizontal rail (right/left, give the rail's ref). Returns the new screen."},{"name":"back","description":"Go back one screen."},{"name":"screenshot","description":"A PNG of the phone screen (for checking layout, colours, images). The tree from `screen` is usually enough to act."},{"name":"set_device","description":"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 b"},{"name":"push_notification","description":"Deliver a push notification to the simulated phone; it appears as a banner the agent can tap."},{"name":"notifications","description":"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)."},{"name":"open_notification","description":"Tap a notification from the shade (newest if no id is given): the app handles it exactly as if its banner was tapped."},{"name":"device_log","description":"What the app did with the device in this session: permission prompts and answers, location reads, scans, fingerprint checks, payments, notifications, shares."},{"name":"device_reset","description":"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 p"},{"name":"end_session","description":"Close the session and get a report: steps taken, and the orders the app sent to its backend during the session."},{"name":"owner_describe","description":"List the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN."},{"name":"owner_command","description":"Run an owner command against the live app (changes are audited; `publish` makes them live on every phone within seconds)."}],"toolCount":18,"toolsHash":"56199a132f674727c57f8d69fc3b70316a4f2297a817376f820a411e6f2a43a5","serverName":"shipvo","capabilities":["tools"],"serverVersion":"0.0.6","protocolVersion":"2025-06-18"}},{"at":"2026-11-04T09:29:29.793Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":54,"error":null,"detail":{"tools":[{"name":"list_apps","description":"Apps this server can open, with what each one does. Optional query filters by name, description or category (e.g. 'shop', 'douala')."},{"name":"open_app","description":"Open an app in a fresh phone-sized session and return its first screen."},{"name":"list_sessions","description":"Open simulator sessions (phones) on this server: id, app, release and when each started. Use to resume after a reconnect."},{"name":"screen","description":"The current screen as an accessibility tree with refs."},{"name":"tap","description":"Tap a button, link or choice by ref. Returns the new screen."},{"name":"type","description":"Type into a text field by ref (replaces its content). Returns the new screen."},{"name":"scroll","description":"Scroll the page (down/up) or a horizontal rail (right/left, give the rail's ref). Returns the new screen."},{"name":"back","description":"Go back one screen."},{"name":"screenshot","description":"A PNG of the phone screen (for checking layout, colours, images). The tree from `screen` is usually enough to act."},{"name":"set_device","description":"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 b"},{"name":"push_notification","description":"Deliver a push notification to the simulated phone; it appears as a banner the agent can tap."},{"name":"notifications","description":"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)."},{"name":"open_notification","description":"Tap a notification from the shade (newest if no id is given): the app handles it exactly as if its banner was tapped."},{"name":"device_log","description":"What the app did with the device in this session: permission prompts and answers, location reads, scans, fingerprint checks, payments, notifications, shares."},{"name":"device_reset","description":"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 p"},{"name":"end_session","description":"Close the session and get a report: steps taken, and the orders the app sent to its backend during the session."},{"name":"owner_describe","description":"List the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN."},{"name":"owner_command","description":"Run an owner command against the live app (changes are audited; `publish` makes them live on every phone within seconds)."}],"toolCount":18,"toolsHash":"56199a132f674727c57f8d69fc3b70316a4f2297a817376f820a411e6f2a43a5","serverName":"shipvo","capabilities":["tools"],"serverVersion":"0.0.6","protocolVersion":"2025-06-18"}},{"at":"2026-11-04T01:30:07.138Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":23,"error":null,"detail":{"tools":[{"name":"list_apps","description":"Apps this server can open, with what each one does. Optional query filters by name, description or category (e.g. 'shop', 'douala')."},{"name":"open_app","description":"Open an app in a fresh phone-sized session and return its first screen."},{"name":"list_sessions","description":"Open simulator sessions (phones) on this server: id, app, release and when each started. Use to resume after a reconnect."},{"name":"screen","description":"The current screen as an accessibility tree with refs."},{"name":"tap","description":"Tap a button, link or choice by ref. Returns the new screen."},{"name":"type","description":"Type into a text field by ref (replaces its content). Returns the new screen."},{"name":"scroll","description":"Scroll the page (down/up) or a horizontal rail (right/left, give the rail's ref). Returns the new screen."},{"name":"back","description":"Go back one screen."},{"name":"screenshot","description":"A PNG of the phone screen (for checking layout, colours, images). The tree from `screen` is usually enough to act."},{"name":"set_device","description":"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 b"},{"name":"push_notification","description":"Deliver a push notification to the simulated phone; it appears as a banner the agent can tap."},{"name":"notifications","description":"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)."},{"name":"open_notification","description":"Tap a notification from the shade (newest if no id is given): the app handles it exactly as if its banner was tapped."},{"name":"device_log","description":"What the app did with the device in this session: permission prompts and answers, location reads, scans, fingerprint checks, payments, notifications, shares."},{"name":"device_reset","description":"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 p"},{"name":"end_session","description":"Close the session and get a report: steps taken, and the orders the app sent to its backend during the session."},{"name":"owner_describe","description":"List the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN."},{"name":"owner_command","description":"Run an owner command against the live app (changes are audited; `publish` makes them live on every phone within seconds)."}],"toolCount":18,"toolsHash":"56199a132f674727c57f8d69fc3b70316a4f2297a817376f820a411e6f2a43a5","serverName":"shipvo","capabilities":["tools"],"serverVersion":"0.0.6","protocolVersion":"2025-06-18"}},{"at":"2026-11-03T17:31:20.168Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":90,"error":null,"detail":{"tools":[{"name":"list_apps","description":"Apps this server can open, with what each one does. Optional query filters by name, description or category (e.g. 'shop', 'douala')."},{"name":"open_app","description":"Open an app in a fresh phone-sized session and return its first screen."},{"name":"list_sessions","description":"Open simulator sessions (phones) on this server: id, app, release and when each started. Use to resume after a reconnect."},{"name":"screen","description":"The current screen as an accessibility tree with refs."},{"name":"tap","description":"Tap a button, link or choice by ref. Returns the new screen."},{"name":"type","description":"Type into a text field by ref (replaces its content). Returns the new screen."},{"name":"scroll","description":"Scroll the page (down/up) or a horizontal rail (right/left, give the rail's ref). Returns the new screen."},{"name":"back","description":"Go back one screen."},{"name":"screenshot","description":"A PNG of the phone screen (for checking layout, colours, images). The tree from `screen` is usually enough to act."},{"name":"set_device","description":"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 b"},{"name":"push_notification","description":"Deliver a push notification to the simulated phone; it appears as a banner the agent can tap."},{"name":"notifications","description":"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)."},{"name":"open_notification","description":"Tap a notification from the shade (newest if no id is given): the app handles it exactly as if its banner was tapped."},{"name":"device_log","description":"What the app did with the device in this session: permission prompts and answers, location reads, scans, fingerprint checks, payments, notifications, shares."},{"name":"device_reset","description":"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 p"},{"name":"end_session","description":"Close the session and get a report: steps taken, and the orders the app sent to its backend during the session."},{"name":"owner_describe","description":"List the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN."},{"name":"owner_command","description":"Run an owner command against the live app (changes are audited; `publish` makes them live on every phone within seconds)."}],"toolCount":18,"toolsHash":"56199a132f674727c57f8d69fc3b70316a4f2297a817376f820a411e6f2a43a5","serverName":"shipvo","capabilities":["tools"],"serverVersion":"0.0.6","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_apps","description":"Apps this server can open, with what each one does. Optional query filters by name, description or category (e.g. 'shop', 'douala')."},{"name":"open_app","description":"Open an app in a fresh phone-sized session and return its first screen."},{"name":"list_sessions","description":"Open simulator sessions (phones) on this server: id, app, release and when each started. Use to resume after a reconnect."},{"name":"screen","description":"The current screen as an accessibility tree with refs."},{"name":"tap","description":"Tap a button, link or choice by ref. Returns the new screen."},{"name":"type","description":"Type into a text field by ref (replaces its content). Returns the new screen."},{"name":"scroll","description":"Scroll the page (down/up) or a horizontal rail (right/left, give the rail's ref). Returns the new screen."},{"name":"back","description":"Go back one screen."},{"name":"screenshot","description":"A PNG of the phone screen (for checking layout, colours, images). The tree from `screen` is usually enough to act."},{"name":"set_device","description":"Change what the simulated phone has: location, the address book (contacts), calendar events, files for the file picker, a barcode in front of the camera, permis"},{"name":"push_notification","description":"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; ot"},{"name":"notifications","description":"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)."},{"name":"open_notification","description":"Tap a notification from the shade (newest if no id is given): the app handles it exactly as if its banner was tapped."},{"name":"open_url","description":"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 no_url_listener if the app does not l"},{"name":"device_log","description":"What the app did with the device in this session: permission prompts and answers, location reads, scans, fingerprint checks, payments, notifications, shares."},{"name":"device_reset","description":"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 p"},{"name":"end_session","description":"Close the session and get a report: steps taken, and the orders the app sent to its backend during the session."},{"name":"owner_describe","description":"List the owner commands of an app (content, prices, offers, orders, publish). Needs PN_OWNER_TOKEN."},{"name":"owner_command","description":"Run an owner command against the live app (changes are audited; `publish` makes them live on every phone within seconds)."}],"package":{"name":"@shipvo/mcp","registry":"npm","observedAt":"2026-11-05T20:31:08.810Z","publishedAt":"2026-11-04T19:54:17.732Z","latestVersion":"0.0.7","weeklyDownloads":1299},"toolSurface":{"id":"ts_mnq9g9suw3nt","endpointId":"ep_suv2z45b7ckq","hash":"ddf63ec872d027cbda09ff9420f2deddd0bc3f8b916af3e0e323843b4a30a7ea","toolCount":19,"serverName":"shipvo","serverVersion":"0.0.6","protocolVersion":"2025-06-18","firstSeenAt":"2026-11-05T20:26:51.688Z","lastSeenAt":"2026-11-05T20:26:51.688Z","observations":1,"toolNames":["list_apps","open_app","list_sessions","screen","tap","type","scroll","back","screenshot","set_device","push_notification","notifications","open_notification","open_url","device_log","device_reset","end_session","owner_describe","owner_command"],"distinctSurfaces":3},"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.shipvo/shipvo","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.shipvo%2Fshipvo","firstSeenAt":"2026-11-03T15:18:50.869Z","fetchedAt":"2026-11-03T15:18:50.869Z","normalizedAt":"2026-11-03T15:18:50.869Z"},{"source":"npm","key":"@shipvo/mcp","url":"https://www.npmjs.com/package/@shipvo/mcp","firstSeenAt":"2026-11-05T11:17:56.191Z","fetchedAt":"2026-11-05T11:17:56.191Z","normalizedAt":"2026-11-05T11:17:56.191Z"}]},"firstSeenAt":"2026-11-03T15:18:50.869Z","updatedAt":"2026-11-05T20:31:08.810Z"}