Skip to content

ShipASO

by airowe · remote · no sign-in to list tools · v0.1.0 · published by GitHub user airowe

Audit any App Store or Google Play listing: measured ranks, keyword gaps, draft copy. Read-only.

Changes · 1

12 tools: 1 change things and 11 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http shipaso https://api.shipaso.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "propose_copy" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "propose_copy" says "copy": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

12 tools

Changes things 1Claude Code: ask
  • propose_copyReturns a DRAFT optimized listing (name/subtitle/keywords/description) with validation for any app.1 finding

    Why it is in this group

    • The name "propose_copy" says "copy": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "propose_copy" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "propose_copy" says "copy": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Returns a DRAFT optimized listing (name/subtitle/keywords/description) with validation for any app. THIS IS A DRAFT ONLY: it does NOT persist a proposal and does NOT push to the App Store. Publishing stays a human-approved action in ShipASO — an agent can draft and read; only a human approves and pushes.

    Annotations the server declares

    • title: propose_copy
    • readOnlyHint: true
    • openWorldHint: true
Only reads 11Claude Code: allow
  • audit_appRead-only listing audit: prioritized findings (severity + impact) plus a summary, derived from the live public listing.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only listing audit: prioritized findings (severity + impact) plus a summary, derived from the live public listing. Read-only — never edits or pushes.

    Annotations the server declares

    • title: audit_app
    • readOnlyHint: true
    • openWorldHint: true
  • audit_play_appRead-only GOOGLE PLAY listing audit: screenshot grade, the 30/80/4000 title/short/long-description budget, target-term coverage in the long description (Play's keyword surface), a …No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only GOOGLE PLAY listing audit: screenshot grade, the 30/80/4000 title/short/long-description budget, target-term coverage in the long description (Play's keyword surface), a keyword-stuffing guard, prioritized findings + summary, and capability locks for surfaces a public read can't see. Takes a Play package id (com.foo.bar) or a play.google.com URL — NOT a free-text name (Play has no public name search). Play has NO keyword field. Reads public Play data only; never edits or pushes.

    Annotations the server declares

    • title: audit_play_app
    • readOnlyHint: true
    • openWorldHint: true
  • audit_play_app_ownerRead-only audit of YOUR OWN Google Play app via the official Play Developer API — full fidelity including the short description (which the public page can't show), with NO capabili…No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only audit of YOUR OWN Google Play app via the official Play Developer API — full fidelity including the short description (which the public page can't show), with NO capability locks. Requires a configured Play service account (GOOGLE_PLAY_SERVICE_ACCOUNT). Reads only — it opens and DISCARDS a Play 'edit' and NEVER commits, so it can't publish. Owner-only; for a competitor use audit_play_app.

    Annotations the server declares

    • title: audit_play_app_owner
    • readOnlyHint: true
    • openWorldHint: true
  • competitor_watchRead-only competitor diff: resolves the named competitors and reports their current listings, what changed vs.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only competitor diff: resolves the named competitors and reports their current listings, what changed vs. the last seen state, and a digest line. Read-only metadata comparison; no ranking-algorithm data is invented.

    Annotations the server declares

    • title: competitor_watch
    • readOnlyHint: true
    • openWorldHint: true
  • keyword_gapsRead-only keyword opportunities: terms tracked competitors VISIBLY use that this app doesn't target and doesn't rank top-50 for, sorted by winnability.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only keyword opportunities: terms tracked competitors VISIBLY use that this app doesn't target and doesn't rank top-50 for, sorted by winnability. Inferred from competitor name/subtitle only — never their ranking algorithm.

    Annotations the server declares

    • title: keyword_gaps
    • readOnlyHint: true
    • openWorldHint: true
  • localization_gapsRead-only localization expansion recommendations (ROI-sorted locales to add) for one of YOUR connected apps, from its most recent App Store Connect run.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only localization expansion recommendations (ROI-sorted locales to add) for one of YOUR connected apps, from its most recent App Store Connect run. A static, bundled heuristic over the locales already read — no live install data is fabricated. Empty until you've run an ASC-connected pass.

    Annotations the server declares

    • title: localization_gaps
    • readOnlyHint: true
    • openWorldHint: true
  • preview_appRead-only ASO snapshot of any App Store app (grade, lead rank, top-10 count, sample).No findings

    Why it is in this group

    • The name "preview_app" says "preview": a word for reading.
    Description, as the server wrote it
    Read-only ASO snapshot of any App Store app (grade, lead rank, top-10 count, sample). No account or store push — the optimized copy + push commands stay behind the human-approved loop. Works without a key.

    Annotations the server declares

    • title: preview_app
    • readOnlyHint: true
    • openWorldHint: true
  • proofRead-only, anonymized aggregate proof across all tracked apps (real rank-win numbers — no app names, no user data).No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only, anonymized aggregate proof across all tracked apps (real rank-win numbers — no app names, no user data). This is the 'prove the rank moved' surface that closes the prepare → approve → push → prove loop. Works without a key.

    Annotations the server declares

    • title: proof
    • readOnlyHint: true
    • openWorldHint: true
  • rank_checkRead-only organic rank check across the app's target keywords, plus winnability-ranked opportunities computed from those measured positions.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only organic rank check across the app's target keywords, plus winnability-ranked opportunities computed from those measured positions. Positions are live-measured, never fabricated.

    Annotations the server declares

    • title: rank_check
    • readOnlyHint: true
    • openWorldHint: true
  • screenshot_coverageRead-only screenshot scoring for the app's live store gallery (count, score, grade, levers to improve).No findings

    Why it is in this group

    • The name "screenshot_coverage" says "screenshot": a word for reading.
    Description, as the server wrote it
    Read-only screenshot scoring for the app's live store gallery (count, score, grade, levers to improve). Read-only — never uploads or pushes assets.

    Annotations the server declares

    • title: screenshot_coverage
    • readOnlyHint: true
    • openWorldHint: true
  • war_roomRead-only head-to-head rank war room for one of YOUR connected apps: your tracked-keyword rank history vs.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only head-to-head rank war room for one of YOUR connected apps: your tracked-keyword rank history vs. live competitor positions on those same keywords. Reads stored data + live competitor ranks; writes nothing.

    Annotations the server declares

    • title: war_room
    • readOnlyHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http shipaso https://api.shipaso.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__shipaso__preview_app",
      "mcp__shipaso__audit_app",
      "mcp__shipaso__audit_play_app",
      "mcp__shipaso__audit_play_app_owner",
      "mcp__shipaso__keyword_gaps",
      "mcp__shipaso__rank_check",
      "mcp__shipaso__screenshot_coverage",
      "mcp__shipaso__competitor_watch",
      "mcp__shipaso__war_room",
      "mcp__shipaso__localization_gaps",
      "mcp__shipaso__proof"
    ],
    "ask": [
      "mcp__shipaso__propose_copy"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as shipaso. Review it before you use it.