Server definition
- Hash
- sha256:094e289c495e60ba242510e18eae8c15c837190caeed8c71b8aca49ef1c4f7a6
- What it is
- What a remote MCP server returned when asked what it offers: 12 tools
The blob, as servednamed by its sha256
{
"instructions": "ShipASO exposes read-only ASO data and the proof surfaces as tools. Tools audit, check ranks, find keyword gaps, and draft optimized copy — but NEVER publish. Pushing a change to the App Store is a human-approved step inside ShipASO; no tool here writes to the store. `propose_copy` returns a draft only.",
"tools": [
{
"description": "Read-only listing audit: prioritized findings (severity + impact) plus a summary, derived from the live public listing. Read-only — never edits or pushes.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"bundleId": {
"description": "Exact bundle id (skips resolution)",
"type": "string"
},
"country": {
"description": "ISO country storefront, e.g. US",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"query": {
"description": "App name, App Store URL, numeric id, or bundle id",
"type": "string"
}
},
"type": "object"
},
"name": "audit_app",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"brand": {
"description": "App brand name, so brand-burn in the short description is flagged",
"type": "string"
},
"country": {
"description": "ISO country storefront, e.g. US",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"packageName": {
"description": "Exact Play package id (skips resolution)",
"type": "string"
},
"query": {
"description": "Google Play package id (com.foo.bar) or a play.google.com app URL",
"type": "string"
},
"targets": {
"description": "Target search terms to measure long-description coverage for",
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
},
"name": "audit_play_app",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"brand": {
"description": "App brand name, so short-description brand-burn is flagged",
"type": "string"
},
"language": {
"description": "BCP-47 listing language, e.g. en-US",
"type": "string"
},
"packageName": {
"description": "Your app's Play package id, e.g. com.foo.bar",
"type": "string"
},
"targets": {
"description": "Target search terms to measure long-description coverage for",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"packageName"
],
"type": "object"
},
"name": "audit_play_app_owner",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"bundleId": {
"description": "Exact bundle id (skips resolution)",
"type": "string"
},
"competitors": {
"description": "Competitor app names or bundle ids to compare against",
"items": {
"type": "string"
},
"minItems": 1,
"type": "array"
},
"country": {
"description": "ISO country storefront, e.g. US",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"query": {
"description": "App name, App Store URL, numeric id, or bundle id",
"type": "string"
}
},
"required": [
"competitors"
],
"type": "object"
},
"name": "competitor_watch",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"bundleId": {
"description": "Exact bundle id (skips resolution)",
"type": "string"
},
"country": {
"description": "ISO country storefront, e.g. US",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"query": {
"description": "App name, App Store URL, numeric id, or bundle id",
"type": "string"
}
},
"type": "object"
},
"name": "keyword_gaps",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"appId": {
"description": "Id of a connected app you own",
"type": "string"
}
},
"required": [
"appId"
],
"type": "object"
},
"name": "localization_gaps",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"bundleId": {
"description": "Exact bundle id (skips resolution)",
"type": "string"
},
"country": {
"description": "ISO country storefront, e.g. US",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"query": {
"description": "App name, App Store URL, numeric id, or bundle id",
"type": "string"
}
},
"type": "object"
},
"name": "preview_app",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "proof",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"bundleId": {
"description": "Exact bundle id (skips resolution)",
"type": "string"
},
"country": {
"description": "ISO country storefront, e.g. US",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"query": {
"description": "App name, App Store URL, numeric id, or bundle id",
"type": "string"
}
},
"type": "object"
},
"name": "propose_copy",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"bundleId": {
"description": "Exact bundle id (skips resolution)",
"type": "string"
},
"country": {
"description": "ISO country storefront, e.g. US",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"query": {
"description": "App name, App Store URL, numeric id, or bundle id",
"type": "string"
}
},
"type": "object"
},
"name": "rank_check",
"outputSchema": null
},
{
"description": "Read-only screenshot scoring for the app's live store gallery (count, score, grade, levers to improve). Read-only — never uploads or pushes assets.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"bundleId": {
"description": "Exact bundle id (skips resolution)",
"type": "string"
},
"country": {
"description": "ISO country storefront, e.g. US",
"maxLength": 2,
"minLength": 2,
"type": "string"
},
"query": {
"description": "App name, App Store URL, numeric id, or bundle id",
"type": "string"
}
},
"type": "object"
},
"name": "screenshot_coverage",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"appId": {
"description": "Id of a connected app you own",
"type": "string"
},
"competitors": {
"description": "Competitor names to compare (max 4)",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"appId"
],
"type": "object"
},
"name": "war_room",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:094e289c495e60ba242510e18eae8c15c837190caeed8c71b8aca49ef1c4f7a6 | sha256sum