Koskamo

rankcusp MCP

An official MCP server by rankcusp that allows AI assistants to directly access App Store Optimization data. It provides tools to query keyword rankings, identify the 'cusp band' (keywords ranking 11-30), audit metadata, and analyze competitor positions, enabling automated ASO workflows without manual screenshots.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

rankcusp MCP logo, by rankcuspVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by rankcusp
You need:One key opens both the REST API and the MCP endpointboth come with the Studio plan
MCP endpoint (Streamable HTTP)
https://rankcusp.com/api/mcp
Vendor documentation

What its tools do

9 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Can change data (1)

9 of 9 have a description · 9 of 9 declare behavior hints · 5 of 8 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to rankcusp.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Query which keywords are in the 11-30 ranking band
  • Audit draft app metadata for wasted characters
  • Check keyword popularity and difficulty scores
  • Identify competitor weaknesses in specific storefronts

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
rankcusp 1.0.0
MCP protocol negotiated in check
2025-06-18
Tools
9 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

rankcusp finds the keywords an app ranks 11-30 for on the App Store. Call list_apps first to find the app, then cusp_actions for the priority work. Unmeasured values come back as null; do not read them as zero.

Tools

9 advertised

list_apps
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists the apps and rivals tracked on the account. The appId and storefront codes the other tools want come from here.

list_apps input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_apps annotations
{
  "title": "List tracked apps",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_keywords
Advertised by the server during the last successful anonymous check.
Advertised read-only

Lists an app's keywords in one storefront, with rank, popularity and difficulty.

list_keywords input schema
{
  "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
}
list_keywords annotations
{
  "title": "List keywords in a storefront",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_keyword
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_keyword input schema
{
  "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
}
get_keyword annotations
{
  "title": "Look up one keyword",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
audit_metadata
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

audit_metadata input schema
{
  "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
}
audit_metadata annotations
{
  "title": "Audit a metadata draft",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
country_priorities
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

country_priorities input schema
{
  "type": "object",
  "required": [
    "appId"
  ],
  "properties": {
    "appId": {
      "type": "string",
      "description": "App Store app id"
    }
  },
  "additionalProperties": false
}
country_priorities annotations
{
  "title": "Rank storefronts by opportunity",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
ranking_keywords
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

ranking_keywords input schema
{
  "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
}
ranking_keywords annotations
{
  "title": "Keywords an app already ranks for",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
keyword_competitors
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

keyword_competitors input schema
{
  "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
}
keyword_competitors annotations
{
  "title": "Who holds a keyword's first page",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
add_keywords
Advertised by the server during the last successful anonymous check.

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.

add_keywords input schema
{
  "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
}
add_keywords annotations
{
  "title": "Add keywords to the pool",
  "readOnlyHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
cusp_actions
Advertised by the server during the last successful anonymous check.
Advertised read-only

The keywords in the 11-30 band, ordered by popularity. The work list a metadata edit pays off on most.

cusp_actions input schema
{
  "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
}
cusp_actions annotations
{
  "title": "The 11-30 cusp band",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
682 ms
95th percentile latency
682 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 682 ms · metadata changed · 9 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http rankcusp-mcp https://rankcusp.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add rankcusp-mcp --url https://rankcusp.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable rankcusp-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "rankcusp-mcp": {
      "url": "https://rankcusp.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "rankcusp-mcp": {
      "type": "streamableHttp",
      "url": "https://rankcusp.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start rankcusp-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "rankcusp-mcp": {
      "type": "http",
      "url": "https://rankcusp.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http rankcusp-mcp https://rankcusp.com/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://rankcusp.com/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "rankcusp-mcp": {
      "serverUrl": "https://rankcusp.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like rankcusp MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run rankcusp MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing