App Store keyword ranks, the 11-30 cusp band, metadata audits and rival positions.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer auth with a rankcusp service key - create one free at https://rankcusp.com
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Adds keywords to an app's tracked set in one storefront. Takes a list or a comma-separated paste. They arrive unscored - scoring costs requests to Apple and happens on the collector's schedule - so do not read a null popularity here as a zero.
App Store app id
Storefront code, e.g. us, tr, de
The phrases to track.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Adds keywords to an app's tracked set in one storefront. Takes a list or a comma-separated paste. They arrive unscored - scoring costs requests to Apple and happens on the collector's schedule - so do not read a null popularity here as a zero.
| Argument | Type | Description |
|---|---|---|
| appId* | string | App Store app id |
| country* | string | Storefront code, e.g. us, tr, de |
| keywords* | array | The phrases to track. |
{
"type": "object",
"required": [
"appId",
"country",
"keywords"
],
"properties": {
"appId": {
"type": "string",
"description": "App Store app id"
},
"country": {
"type": "string",
"description": "Storefront code, e.g. us, tr, de"
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"description": "The phrases to track."
}
},
"additionalProperties": false
}Audits a draft title, subtitle and 100-character keyword field against Apple's rules and against each other. Returns what is wasted, what Apple will actually index, and the field rewritten without the waste. Nothing is submitted anywhere - this only reads the text you pass in.
| Argument | Type | Description |
|---|---|---|
| title | string | Up to 30 characters. |
| country* | string | Storefront code, e.g. us, tr, de |
| subtitle | string | Up to 30 characters. |
| keywordField | string | The 100-character field, comma-separated, as App Store Connect wants it. |
{
"type": "object",
"required": [
"country"
],
"properties": {
"title": {
"type": "string",
"description": "Up to 30 characters."
},
"country": {
"type": "string",
"description": "Storefront code, e.g. us, tr, de"
},
"subtitle": {
"type": "string",
"description": "Up to 30 characters."
},
"keywordField": {
"type": "string",
"description": "The 100-character field, comma-separated, as App Store Connect wants it."
}
},
"additionalProperties": false
}Ranks the storefronts an app is tracked in by how much is winnable there: how many keywords sit in the cusp band, how many already reach the top ten, and whether the rivals' ratings leave an opening. Answers which market to work on first.
| Argument | Type | Description |
|---|---|---|
| appId* | string | App Store app id |
{
"type": "object",
"required": [
"appId"
],
"properties": {
"appId": {
"type": "string",
"description": "App Store app id"
}
},
"additionalProperties": false
}The keywords in the 11-30 band, ordered by popularity. The work list a metadata edit pays off on most.
| Argument | Type | Description |
|---|---|---|
| appId* | string | App Store app id |
| limit | number | |
| country* | string | Storefront code, e.g. us, tr, de |
{
"type": "object",
"required": [
"appId",
"country"
],
"properties": {
"appId": {
"type": "string",
"description": "App Store app id"
},
"limit": {
"type": "number"
},
"country": {
"type": "string",
"description": "Storefront code, e.g. us, tr, de"
}
},
"additionalProperties": false
}One keyword: its rank, its scores, its first page and the verdict - should it be targeted, and why. Every unmeasured value comes back null, never zero.
| Argument | Type | Description |
|---|---|---|
| appId* | string | App Store app id |
| country* | string | Storefront code, e.g. us, tr, de |
| keyword* | string | The phrase to look up. |
{
"type": "object",
"required": [
"appId",
"country",
"keyword"
],
"properties": {
"appId": {
"type": "string",
"description": "App Store app id"
},
"country": {
"type": "string",
"description": "Storefront code, e.g. us, tr, de"
},
"keyword": {
"type": "string",
"description": "The phrase to look up."
}
},
"additionalProperties": false
}Who ranks for a phrase, deeper than the ten the first page carries. Use it to find the rivals a first-page reading misses - an app at 40 for a phrase you sit at 60 for is the one to study.
| Argument | Type | Description |
|---|---|---|
| limit | number | |
| country* | string | Storefront code, e.g. us, tr, de |
| keyword* | string | The phrase to look up. |
{
"type": "object",
"required": [
"keyword",
"country"
],
"properties": {
"limit": {
"type": "number"
},
"country": {
"type": "string",
"description": "Storefront code, e.g. us, tr, de"
},
"keyword": {
"type": "string",
"description": "The phrase to look up."
}
},
"additionalProperties": false
}Lists the apps and rivals tracked on the account. The appId and storefront codes the other tools want come from here.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Lists an app's keywords in one storefront, with rank, popularity and difficulty.
| Argument | Type | Description |
|---|---|---|
| appId* | string | App Store app id |
| limit | number | How many rows, at most 200. |
| offset | number | |
| country* | string | Storefront code, e.g. us, tr, de |
| cuspOnly | boolean | The 11-30 band only: the ones that reach the first page with the least effort. |
| rankedOnly | boolean | Only the ones ranking in the top 200. |
{
"type": "object",
"required": [
"appId",
"country"
],
"properties": {
"appId": {
"type": "string",
"description": "App Store app id"
},
"limit": {
"type": "number",
"description": "How many rows, at most 200."
},
"offset": {
"type": "number"
},
"country": {
"type": "string",
"description": "Storefront code, e.g. us, tr, de"
},
"cuspOnly": {
"type": "boolean",
"description": "The 11-30 band only: the ones that reach the first page with the least effort."
},
"rankedOnly": {
"type": "boolean",
"description": "Only the ones ranking in the top 200."
}
},
"additionalProperties": false
}Which keywords an app is already ranking for, from the pooled record of every search this product has run. Works on any App Store id, not only the ones on this account - point it at a rival to read theirs. Apple publishes no endpoint for this; the answer is only as wide as what has been observed, so an app nobody has swept near returns little.
| Argument | Type | Description |
|---|---|---|
| appId* | string | App Store app id |
| limit | number | How many rows, at most 200. |
| country | string | Storefront code, e.g. us, tr, de |
| maxRank | number | Only positions at or above this, e.g. 30 for the reachable band. |
{
"type": "object",
"required": [
"appId"
],
"properties": {
"appId": {
"type": "string",
"description": "App Store app id"
},
"limit": {
"type": "number",
"description": "How many rows, at most 200."
},
"country": {
"type": "string",
"description": "Storefront code, e.g. us, tr, de"
},
"maxRank": {
"type": "number",
"description": "Only positions at or above this, e.g. 30 for the reachable band."
}
},
"additionalProperties": false
}