Storevisor

Connect an AI assistant to Storevisor

Storevisor is a remote MCP server. An AI assistant that supports remote MCP servers (custom connectors) reaches the 35 tools below, on the data of one workspace you choose.

Before you start

Create an account (an e-mail address and a password; it costs nothing today), create a workspace, and connect your stores on the Connections page.

Connect with OAuth (Claude, ChatGPT and other MCP clients)

  1. Add a custom connector (remote MCP server) in your AI client and paste this URL:
    https://storevisor.devino.ca/mcp
  2. The client finds the sign-in on its own (OAuth 2.1 with PKCE; the server describes itself at https://storevisor.devino.ca/.well-known/oauth-protected-resource, and client registration is open). Sign in to your Storevisor account in the window it opens.
  3. Pick the workspace the assistant may use. One connection reaches one workspace.
  4. Approve. The approval page shows your account and the workspace. Reading is the default; making changes is a separate box, unticked unless you tick it.
  5. To disconnect, open the MCP & API page and press Disconnect. The assistant's next call fails.

Or use a workspace key

  • For clients that send a header instead of signing in: create a key on the MCP & API page (read, or read and write; it is shown once) and send it as Authorization: Bearer sws_… to https://storevisor.devino.ca/mcp.
  • The same tools over REST: POST https://storevisor.devino.ca/api/tools/<tool name> with the tool's arguments as a JSON body and the same header. The API reference lists every tool's arguments.
  • Revoking the key on the MCP & API page stops it at once.

Writes: preview first, then confirm

  • Every store write (listings, versions, App Review submissions, releases and rollouts) runs as a preview first. The answer shows what would change and carries a confirm_token. Nothing reaches the store.
  • To apply it, repeat the same call with apply: true and confirmToken. The token is single use, valid 10 minutes, and bound to you, the AI client, the tool and those exact arguments; changed arguments are refused and need a new preview.
  • Release steps (builds, versions, submissions, releases, rollouts, Microsoft submissions) also return commit_args: the store state the preview saw. The commit repeats the arguments with commit_args merged in; if the store changed since the preview, the commit is refused.
  • Write tools are listed only for a connection that was allowed to make changes (the "make changes" box at sign-in, or a read-and-write key). A read-only connection never sees them.
  • The token proves that a preview of exactly those arguments ran. It is not a person's approval: your AI client decides whether to ask you before it calls a write tool.

A store you have not connected

Every tool is listed whether or not its store is connected. A tool whose store this workspace has not connected answers that the store must be connected first, and reads or changes nothing.

More guides

  • Connect your stores: one guide per connection, with the key or role to create in each console and the errors the check can show.
  • API reference: the REST endpoint, its OpenAPI document and every tool's arguments.
  • Error codes: every refusal the MCP server and the API can answer, and what to do.

Tools (35)

14 read, 21 write. The same names and wording your AI client lists.

ToolWhat it doesKind
apple_listing_getApple: read the live App Store listing
Reads the CURRENT App Store listing for an app straight from App Store Connect (not the warehouse cache): name, subtitle, keywords, description, promotional text, what's new, URLs, and a screenshot-set summary per…
read
apple_cpp_listApple: list custom product pages
Lists App Store custom product pages (CPPs) for an app, with their versions and states.
read
apple_screenshots_getApple: read App Store screenshot sets
Reads the screenshot sets live from App Store Connect for the EDITABLE App Store version when one exists (that is the only surface a write can touch), otherwise the live version.
read
apple_release_statusApple: release state (live / in review / waiting build)
Reads the app's release pipeline live from App Store Connect: every App Store version (versionString, appVersionState, platform, createdDate, releaseType) with its attached build (version, processingState,…
read
apple_builds_listApple: list TestFlight builds (newest first)
Lists the newest TestFlight builds for an app live from App Store Connect: id, build_number (CFBundleVersion), pre_release_version (the marketing version), platform, processing_state, uploaded_at, expired,…
read
apple_testflight_overviewApple: TestFlight overview — beta groups, testers, builds in testing, tester feedback
Reads an app's TestFlight state live from App Store Connect — the truthful, citable answer to App Review's "what beta testing did you do?": every beta group (name, internal / external, public link enabled + URL + limit,…
read
play_listing_getPlay: get store listing
Read a Google Play store listing live from androidpublisher (title, short/full description, video, image counts per type).
read
play_listing_localesPlay: list every localized store listing
Every localization of a Google Play store listing, live from androidpublisher edits.listings.list (language, title, shortDescription, fullDescription, video + character counts against Play's limits).
read
play_app_details_getPlay: contact details + default language
The app's store contact details (contactEmail, contactPhone, contactWebsite) and default language, live from androidpublisher edits.details through a throwaway edit that is always deleted.
read
play_release_statusPlay: release state per track
Reads every Play track (internal, alpha, beta, production, custom) live from androidpublisher with its releases: status (draft | inProgress | halted | completed), name, versionCodes, userFraction for staged rollouts,…
read
ms_listing_getMicrosoft Store listing (live)
Live Partner Center listing for an app: description, short description, features, search terms, image slots.
read
ms_release_statusMicrosoft Store release state (live)
Live Partner Center release state for an app: the last published submission and the pending one — status, statusDetails (errors, warnings, certification reports), targetPublishMode, and every package with its version,…
read
release_statusRelease state across stores (live)
One compact row per app x store, read live: live_version, pending_version, pending_state, latest_build, blocked_reason (null when nothing waits on you).
read
review_watch_statusApp Review check state (no store call)
What this workspace's App Review check saw on its last run, read from its saved state: NO store call.
read
apple_listing_updateApple: update App Store listing metadata (gated)
Proposes a listing metadata change. ALWAYS snapshots the current listing first and records the change in listing_changes.
write
apple_cpp_createApple: create a custom product page (gated)
Creates a custom product page with one localization (promotional text only — screenshots are out of scope in this version).
write
apple_screenshot_deleteApple: delete an App Store screenshot (gated)
Deletes one screenshot from a display-type set on the EDITABLE App Store version's localization.
write
apple_screenshots_copyApple: copy one localization's screenshots to another (gated)
Copies the screenshot sets of `from_locale` onto `to_locale` of the SAME platform's EDITABLE App Store version (every display type, or only `display_types`).
write
apple_cloud_workflow_updateApple: make an Xcode Cloud workflow archive a platform for the App Store (gated)
Adds an APP_STORE_ELIGIBLE ARCHIVE action for a platform to an Xcode Cloud workflow (default "Release (tag)"), or lifts an existing archive of that platform to APP_STORE_ELIGIBLE — the way to get macOS builds of a Mac…
write
apple_cloud_build_createApple: start an Xcode Cloud release build (gated)
Starts ONE Xcode Cloud build of the app's store-eligible workflow on a branch or tag — the way to get a build App Review accepts without a Mac.
write
apple_version_submitApple: submit a prepared version for review (gated)
Submits an EXISTING App Store version for App Review — attaches nothing new.
write
apple_version_releaseApple: release an approved version that waits on a manual release (gated)
Releases an App Store version that App Review has ALREADY approved and that waits on the developer (appVersionState PENDING_DEVELOPER_RELEASE — a version created with release_type MANUAL).
write
apple_submission_cancelApple: withdraw a version from App Review / cancel a review submission (gated)
Cancels ONE open review submission of a platform — App Store Connect's "Remove from Review" / "Cancel Submission" — with PATCH /v1/reviewSubmissions/{id} {canceled:true}.
write
apple_version_createApple: create the next App Store version (gated)
Creates the NEXT App Store version (PREPARE_FOR_SUBMISSION) for a platform and optionally attaches a TestFlight build to it (ids from apple_builds_list).
write
apple_version_build_attachApple: attach a TestFlight build to the editable version (gated)
Attaches (or replaces) the TestFlight build on the EDITABLE App Store version of a platform (PREPARE_FOR_SUBMISSION / *_REJECTED) — the step between apple_version_create and apple_version_submit.
write
apple_app_setup_updateApple: first-release App Store setup — content rights, free price, privacy URL, copyright, App Review details (gated)
Sets the first-release fields App Review refuses a submission without, through App Store Connect's public API: content_rights_declaration (PATCH /v1/apps), price: "free" (POST /v1/appPriceSchedules, base territory USA,…
write
play_listing_updatePlay: update store listing, or add a new language (gated)
Change Play listing text, or CREATE a localization by passing a `locale` the listing does not have yet together with `create_locale: true` (then title, shortDescription and fullDescription are all required — Play…
write
play_app_details_updatePlay: set contact details / default language (gated)
Sets the store contact e-mail, phone, website and/or default language (a Play dashboard setup task) through edits.details.
write
play_data_safety_updatePlay: replace the Data safety declaration (gated)
Replaces the app's whole Data safety declaration through applications.dataSafety, using the CSV format Play Console exports (App content → Data safety → Export to CSV; columns Question ID / Response ID / Response value…
write
play_release_promotePlay: promote a release to another track (gated)
Promotes the latest completed (else in-progress) release of `from_track` onto `to_track` via edits.tracks.update + edits.commit.
write
play_rollout_updatePlay: change or halt a staged rollout (gated)
Moves a track's staged rollout: `user_fraction` raises it (Play never lets a fraction go down; 1 completes the rollout), `halt: true` halts it.
write
ms_listing_updateMicrosoft Store listing update (gated write)
Propose a Microsoft Store listing change.
write
ms_submission_createMicrosoft Store: create a pending submission (gated)
Creates a new pending submission on an app, cloned from the last published one (POST /submissions) — the first step of a release: create, upload the package (package upload is not in the cloud yet), then…
write
ms_submission_commitMicrosoft Store: commit the pending submission (gated)
Commits the app's pending submission (POST /submissions/{id}/commit): Partner Center then runs pre-processing and certification, and publishes per the submission's targetPublishMode (a Manual mode still needs a human…
write
ms_submission_deleteMicrosoft Store: delete the pending submission (gated)
Deletes the app's pending submission (DELETE /submissions/{id}) — the last published submission is untouched.
write

Not in the cloud yet

  • Changes from the web pages: the release board reads the stores; every change (submit, release, roll out, edit a listing) is made from your AI app or the API, preview first.
  • Uploading builds (.ipa, .pkg, .aab, Microsoft Store packages), screenshots or App Review attachments.
  • Replying in the App Store Resolution Center and editing the App Privacy label (both need an Apple web session).