@algosoftltd/aso-mcp
v0.6.0
Published
App Store Optimization MCP server — keyword traffic and difficulty, rankings, and per-country competitor discovery from Apple's public App Store data. No account, no API key.
Maintainers
Readme
@algosoftltd/aso-mcp
An MCP server for App Store Optimization: keyword traffic and difficulty, search rankings, and per-country competitor discovery — built entirely on Apple's public App Store data.
No account. No API key. Nothing to configure.
npx @algosoftltd/aso-mcpWhat it answers
"lecture note taker" traffic 73/100 difficulty 69/100 your rank #35
suggested from "lectu" at #5 of 10 · median 16,263 ratings in the top 10
"ai note taker" traffic 95/100 difficulty 82/100 not in top 100
suggested from "ai n" at #1 of 10 · median 21,390 ratings in the top 10Setup
None. Add it to any MCP client:
{
"mcpServers": {
"aso": {
"command": "npx",
"args": ["-y", "@algosoftltd/aso-mcp"]
}
}
}Tools
| Tool | Answers |
| --- | --- |
| keyword_scores | How much traffic a keyword carries, how hard it is, and where your app ranks |
| suggest_keywords | Apple's own autocomplete for a prefix — what people actually type |
| search_rankings | Which apps rank for a term, in order |
| app_rank | Where one app sits for a list of terms |
| find_competitors | Which apps keep appearing across your terms, in a given country |
| competitor_keywords | Terms a rival is likely targeting, from its public name |
| get_app | Public details for any app: ratings, genres, price, dates |
Every tool takes a country (89 supported). An unknown one is refused, never silently answered
with US data — plausible-looking numbers from the wrong market are worse than an error.
Country matters more than people expect
The same two search terms, run in two storefronts:
| | United States | Germany | | --- | --- | --- | | 1 | Otter Transcribe Voice Notes — 72,463 ratings | Notability: Notizen, PDF, Docs — 66,812 | | 2 | Notability: AI Notes & Planner — 452,139 | Goodnotes: KI Notizen, PDF app — 350,180 | | 3 | Coconote - AI Note Taker — 16,263 | Otter Transcribe Voice Notes — 467 |
Otter is a giant in the US and a rounding error in Germany. Any single "competitor list" is really
one market's list wearing a flag, which is why find_competitors is per-country by construction.
What the scores are, and are not
They are ordinal comparators, not search volumes.
A paid ASO tool sells you "12,400 searches a month", modelled from a proprietary panel. Nothing free can produce that number and this does not pretend to. What it produces instead:
- Traffic — Apple only autocompletes what people actually search, and it orders suggestions by its own popularity model. So the server types your term one character at a time and finds the shortest prefix at which Apple already suggests it, and how high. A term surfacing from four characters at position one is searched far more than one needing eleven characters to appear at position nine.
- Difficulty — how strong the apps already ranking are: median rating count on a log scale (the only free proxy for install base), how many put the term in their app name (deliberate targeting, which Apple weights heavily), and how many are free. Median rather than mean, so one giant at position one doesn't make a reachable field look impossible.
- Opportunity — traffic ÷ difficulty, for sorting a candidate list. Always reported beside its two components, because a single blended number is the easiest thing in an ASO report to mistake for a measurement.
Every result carries the evidence behind its score — the prefix, the rank, the sample size, the median ratings. A number out of 100 with nothing behind it is unarguable; the same number with its working can be checked and disagreed with.
Use them to rank candidates and pack a keyword field. Do not use them to forecast installs.
Data sources, and how solid each is
| Source | Status |
| --- | --- |
| itunes.apple.com/search, /lookup | Apple's documented Search API. Stable, public, rate-limited near 20 calls/minute. |
| App Store autocomplete | Undocumented. The only free source of what people type. Can change without notice. |
Because the second is undocumented, every path degrades rather than throwing — a keyword report missing its popularity column is worth reading; one that dies is not.
The autocomplete endpoint needs an X-Apple-Store-Front header. Without it, it answers 200 with
an empty list — not an error — which is why this data appears unavailable to anyone who tries it
once.
Rate limits
Apple allows roughly 20 searches a minute per IP. The server serializes every outbound call with a
minimum gap and caches results for six hours, because a keyword set re-queries the same prefixes
constantly ("lectu" is hit by every keyword starting with it). Scoring ten keywords costs roughly
thirty requests, so it takes a minute or two — that is the budget, not a stall. Rate-limit
rejections come back as code: "rate_limited" so a caller can tell "wait" from "broken".
Development
npm install
npm run build # one self-contained ESM file in dist/
node dist/index.jsLicence
MIT — see LICENSE. Copyright © 2026 AlgoSoft Technologies Limited.
