Shipvo

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

使うべきか

品質と安全性

A
説明の品質
88%
スキーマの完全性
89%
命名の品質
86%
ポイズニングのリスク
100%
権限の一致
100%
プロトコルへの準拠
100%

検出事項(7)

  • LOWTool 'screen' description lacks action verbscreen 内
  • LOWTool 'tap' description lacks action verbtap 内
  • LOWTool 'type' description lacks action verbtype 内
  • LOWTool 'scroll' description lacks action verbscroll 内
  • LOWTool 'back' description lacks action verbback 内
  • LOWTool 'push_notification' description lacks action verbpush_notification 内
  • LOWTool 'notifications' description lacks action verbnotifications 内

ツール定義とプロトコルへの準拠に関する自動分析に基づいています。

コンテキストコスト

~2,197トークン数(ツール定義)
~990 B一般的なレスポンスサイズ
注意への影響は中程度(128k コンテキストの 1.72%)

これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。

インストール

ワンクリックインストール

これを `claude_desktop_config.json` ファイルに追加してください:

{
  "mcpServers": {
    "shipvo": {
      "command": "npx",
      "args": [
        "@shipvo/mcp"
      ]
    }
  }
}

実行可能なパッケージ

npm@shipvo/mcp0.0.6stdio

リモートエンドポイント

https://sim.shipvo.dev/mcpstreamable-http

できること

ツール一覧

ツール(19)

🟢 読み取り専用🟡 書き込み🔴 削除⚪ 不明
🟢list_apps(query)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪open_app(app, session, seed_cart, dark)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "app": {
      "type": "string",
      "description": "App id from list_apps, optionally with a release: 'tide' (local build), 'tide@latest' or 'tide@r13' (the published release phones run)"
    },
    "session": {
      "type": "string",
      "description": "Session name (default: generated). One session is one phone."
    },
    "seed_cart": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "quantity": {
            "type": "integer",
            "exclusiveMinimum": 0
          },
          "qty": {
            "type": "integer",
            "exclusiveMinimum": 0
          }
        },
        "additionalProperties": false
      },
      "description": "Start with these items already in the cart (test shortcut). Each line: { product_id, quantity }; { id, qty } also works."
    },
    "dark": {
      "type": "boolean",
      "description": "Dark mode"
    }
  },
  "required": [
    "app"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_sessions

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

入力スキーマ

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪screen(session)

The current screen as an accessibility tree with refs.

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    }
  },
  "required": [
    "session"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪tap(session, ref)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    },
    "ref": {
      "type": "string",
      "pattern": "^e\\d+$",
      "description": "Element ref from the screen, e.g. e42"
    }
  },
  "required": [
    "session",
    "ref"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪type(session, ref, text, enter)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    },
    "ref": {
      "type": "string",
      "pattern": "^e\\d+$",
      "description": "Element ref from the screen, e.g. e42"
    },
    "text": {
      "type": "string"
    },
    "enter": {
      "type": "boolean",
      "description": "Press Enter afterwards"
    }
  },
  "required": [
    "session",
    "ref",
    "text"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪scroll(session, direction, ref)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    },
    "direction": {
      "type": "string",
      "enum": [
        "down",
        "up",
        "left",
        "right"
      ]
    },
    "ref": {
      "type": "string",
      "pattern": "^e\\d+$",
      "description": "Scroll inside this element (a rail or list); omit for the page"
    }
  },
  "required": [
    "session",
    "direction"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪back(session)

Go back one screen.

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    }
  },
  "required": [
    "session"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪screenshot(session)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    }
  },
  "required": [
    "session"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡set_device(session, location, camera, permissions, biometrics, ...)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    },
    "location": {
      "type": "object",
      "properties": {
        "latitude": {
          "type": "number"
        },
        "longitude": {
          "type": "number"
        },
        "accuracy": {
          "type": "number"
        }
      },
      "required": [
        "latitude",
        "longitude"
      ],
      "additionalProperties": false
    },
    "camera": {
      "type": "object",
      "properties": {
        "barcode": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string"
                },
                "data": {
                  "type": "string"
                }
              },
              "required": [
                "type",
                "data"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "delayMs": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "permissions": {
      "type": "object",
      "properties": {
        "camera": {
          "type": "string",
          "enum": [
            "granted",
            "denied",
            "undetermined"
          ]
        },
        "location": {
          "type": "string",
          "enum": [
            "granted",
            "denied",
            "undetermined"
          ]
        },
        "notifications": {
          "type": "string",
          "enum": [
            "granted",
            "denied",
            "undetermined"
          ]
        }
      },
      "additionalProperties": false
    },
    "biometrics": {
      "type": "object",
      "properties": {
        "enrolled": {
          "type": "boolean"
        },
        "nextResult": {
          "type": "string",
          "enum": [
            "success",
            "fail",
            "cancel"
          ]
        }
      },
      "additionalProperties": false
    },
    "payment": {
      "type": "object",
      "properties": {
        "nextResult": {
          "type": "string",
          "enum": [
            "approve",
            "decline",
            "timeout",
            "insufficient_funds"
          ]
        },
        "pin": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "online": {
      "type": "boolean"
    }
  },
  "required": [
    "session"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪push_notification(session, title, body, data)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    },
    "title": {
      "type": "string"
    },
    "body": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "required": [
    "session",
    "title",
    "body"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪notifications(session)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    }
  },
  "required": [
    "session"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪open_notification(session, id)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    },
    "id": {
      "type": "string"
    }
  },
  "required": [
    "session"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪open_url(session, 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 no_url_listener if the app does not listen for URLs.

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    },
    "url": {
      "type": "string",
      "description": "The URL to deliver, e.g. myapp://item/3"
    }
  },
  "required": [
    "session",
    "url"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪device_log(session)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    }
  },
  "required": [
    "session"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡device_reset(session, platform, api)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    },
    "platform": {
      "type": "string",
      "enum": [
        "android",
        "ios"
      ]
    },
    "api": {
      "type": "number"
    }
  },
  "required": [
    "session"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢end_session(session)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "session": {
      "type": "string",
      "description": "Session from open_app"
    }
  },
  "required": [
    "session"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢owner_describe(app)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "app": {
      "type": "string"
    }
  },
  "required": [
    "app"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪owner_command(app, command, args)

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

入力スキーマ

{
  "type": "object",
  "properties": {
    "app": {
      "type": "string"
    },
    "command": {
      "type": "string"
    },
    "args": {
      "type": "object",
      "additionalProperties": {}
    }
  },
  "required": [
    "app",
    "command"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

コミュニティ

このサーバーを評価する

エビデンス

最近の観測

検証済みバージョンは記録されていませんツール 19 件