App Store Review Intelligence MCP Server
Analyze recent iOS App Store and Google Play reviews to uncover user complaints, release regressions, and competitor benchmarks.
Search apps by name or keyword and get app IDs plus metadata like rating, price, genre, version, and installs on Google Play.
Fetch raw reviews with ratings, text, version, date, helpful votes, and Google Play developer replies.
Generate review insights: rating distribution, ratings by version, top complaint phrases with quotes, and what worsened in the latest version.
Compare 2–10 apps side by side on store rating, recent review sentiment, latest-version average, and top complaints.
Mix Apple and Google Play apps in comparisons, including iOS-vs-Android checks.
Use it for release checks, competitor teardowns, weekly review monitoring, and understanding why users are unhappy.
All tools are read-only and require no Apple/Google API keys or developer console access.
Enables searching the Apple App Store for apps, retrieving recent iOS app reviews, and generating review intelligence such as top complaints, rating distribution by version, changes in user sentiment after the latest update, and competitor benchmarks.
Enables searching Google Play for Android apps, retrieving recent reviews with developer replies, installs and pricing, and generating review insights including top complaints, version-based rating changes, and comparisons between Google Play apps or against iOS apps.
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
App Store & Google Play Review Intelligence MCP Server
Ask your AI agent what users hate about any iOS or Android app, and what broke in the last update. This MCP server searches the Apple App Store and Google Play, pulls recent reviews for any app (yours or a competitor's), and returns analysis your agent can use directly: top complaints with quotes, rating by version, what got worse in the latest version, and side-by-side competitor benchmarks. No API keys, no App Store Connect or Play Console access needed.
Hosted (no setup): apify.com/parallelstudio/app-store-review-intelligence-mcp. Connect any MCP client to
https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcpwith your Apify token and pay per call. You can also run this open-source code locally over stdio:npm install && npm run build && npx app-review-intel-mcp.
Now with Google Play: every tool works on both the Apple App Store and Google Play, including iOS-vs-Android comparisons.
Works with Claude Desktop, Claude Code, Cursor, VS Code, Windsurf and any client that supports MCP over Streamable HTTP.
What you can ask
"What broke in Instagram's last update?"
review_insightscompares the newest version with the previous one: rating change, negative-share change, and the complaints that rose most, with quotes."Top 10 complaints about Duolingo on Android vs iOS." Same tool, either store. The store is inferred from the app id.
"Compare Notion, Obsidian and Evernote. Who has the unhappiest users, and why?"
compare_appsgives one table with leaders per metric. You can mix Apple and Google Play ids."Find the top meditation apps on Google Play."
search_appsreturns ids, ratings, installs and prices."Show me the latest reviews mentioning crashes."
get_app_reviewsreturns raw review text for your own analysis.
Related MCP server: AppRanks MCP Server
Tools
Tool | Use it when | Returns | Billing |
| You have an app name or a category and need its id | id (Apple numeric id or Play package name), name, developer, rating, rating count, price, genre, version, URL; installs on Google Play | per call |
| Start here for any "why are users unhappy / what changed / summarize feedback" question | rating distribution, rating by version, top complaint phrases (share of 1–2★ reviews + quote), | flat per call |
| You need the actual review text | reviews with rating, title (Apple), body, version, date, helpful votes; developer replies on Google Play | per review returned |
| Competitor benchmark of 2–10 apps (Apple and Google can be mixed) | store rating & count, installs, price, version, recent average, % negative/positive, latest-version average, top 5 complaints, leaders | flat per call |
Parameters. app_id accepts an Apple id (284882215, id284882215, or an apps.apple.com URL) or a Google Play package name (com.instagram.android or a play.google.com URL). store (apple | google) is optional because it's inferred from the id. On search_apps it defaults to apple. country is a 2-letter storefront code (us, gb, de…). pages is 1–10, about 50 reviews each. lang (Google Play only, default en) picks the review language. review_insights also takes countries (pool up to 10 storefronts), since_version (choose the version to compare from), keyword_limit and quotes.
All tools are read-only. Errors come back as MCP tool errors (isError: true), prefixed invalid_input, upstream_error or internal_error.
Example output
review_insights { "app_id": "389801252", "countries": ["us", "gb"] } (Instagram for iOS, real call, October 2026, trimmed):
{
"sample": { "reviews": 300, "negativeReviews": 188, "byCountry": { "us": 150, "gb": 150 } },
"ratingDistribution": { "average": 2.42, "total": 300 },
"storeRating": { "averageRating": 4.69, "ratingCount": 29583259 },
"versionDeltas": {
"basis": "version",
"latest": { "label": "450.1.0", "reviews": 210, "averageRating": 2.17, "negativeShare": 0.695 },
"previous": { "label": "previous versions 448.0.0–450.0.0", "reviews": 90, "averageRating": 3.0, "negativeShare": 0.467 },
"change": { "averageRating": -0.83, "negativeShare": 0.228 },
"whatGotWorse": [
{ "phrase": "ipad", "status": "new", "latestShare": 0.24, "previousShare": 0, "change": 0.24,
"examples": [{ "rating": 1, "text": "iPad Update Ruined Reels. Tiny, unchangeable aspect ratio that hovers over the search page?…" }] },
{ "phrase": "reels", "status": "increased", "latestShare": 0.281, "previousShare": 0.095, "change": 0.186 },
{ "phrase": "full screen", "status": "new", "latestShare": 0.11, "previousShare": 0, "change": 0.11,
"examples": [{ "rating": 1, "text": "Broken UI in latest update. Can no longer see full screen reels in iPad. They now crop reels to square format…" }] }
],
"confidence": "high",
"summary": "Version 450.1.0 (210 reviews) average 2.17★ vs 3.00★ for previous versions 448.0.0–450.0.0 (90 reviews), −0.83; negative share 69.5% vs 46.7% (+22.8 pp). Rising complaints: \"ipad\" (new, 24% of negative reviews), …"
},
"complaintKeywords": [
{ "phrase": "reels", "reviews": 45, "share": 0.239, "example": "…" },
{ "phrase": "ipad", "reviews": 35, "share": 0.186, "example": "…" },
{ "phrase": "account", "reviews": 34, "share": 0.181, "example": "…" },
{ "phrase": "full screen", "reviews": 16, "share": 0.085, "example": "…" }
]
}search_apps { "term": "meditation", "store": "google", "limit": 3 }:
id | name | developer | rating | installs |
com.spotlightsix.zentimerlite2 | Insight Timer - Meditation App | Insight Network Inc | 4.70 | 10,000,000+ |
meditofoundation.medito | Medito: Meditation & Sleep | Medito for Mindfulness, Meditation and Sleep | 4.79 | 1,000,000+ |
com.getsomeheadspace.android | Headspace: Sleep & Meditation | Headspace for Meditation, Mindfulness and Sleep | 4.26 | 10,000,000+ |
compare_apps { "app_ids": ["324684580", "com.spotify.music"], "pages": 1 } compares Spotify on iOS and Android. It reports a 4.77 vs 4.35 store rating, a 4.18 vs 3.90 recent average, and 16% vs 28% negative reviews. Top Android complaints: premium, song, ads.
See demo/transcript.md for full, untrimmed responses from every tool.
Step-by-step recipes (release check, competitor teardown, iOS vs Android, a weekly watch in Claude Code) with real results and per-workflow cost: docs/workflows.md.
Pricing
Pay-per-event: tool events are charged only for successful calls. Calls that fail validation or can't reach the store are not charged as tool events. Apify also charges its standard Actor start event ($0.00005 per GB of memory, minimum one event) each time a server instance starts. At the default 512 MB standby memory that's $0.00005 per start, and one running instance serves many calls before it idles out. The Pricing tab on this Actor is the authoritative list of current prices.
Event | Price | Charged for |
| $0.002 | each App Store |
| $0.001 | each App Store review returned by |
| $0.03 | each App Store |
| $0.05 | each |
Google Play calls are billed as separate events at the same prices: play-search $0.002 per search, play-review $0.001 per review, play-review-insights $0.03 per call, play-compare-apps $0.05 per comparison that includes any Google Play app.
Tip: review_insights and compare_apps cost the same however many reviews they analyze. For aggregates they are much cheaper than pulling hundreds of raw reviews.
Connect your MCP client
Endpoint (Streamable HTTP):
https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcpAuthenticate with your Apify API token by sending it as Authorization: Bearer <APIFY_TOKEN>.
Cursor (~/.cursor/mcp.json or .cursor/mcp.json)
{
"mcpServers": {
"app-store-reviews": {
"url": "https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer <APIFY_TOKEN>"
}
}
}
}Windsurf (~/.codeium/windsurf/mcp_config.json)
{
"mcpServers": {
"app-store-reviews": {
"serverUrl": "https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer <APIFY_TOKEN>"
}
}
}
}Claude Desktop (claude_desktop_config.json)
Claude Desktop's config file only launches local (stdio) servers, so bridge to the hosted endpoint with mcp-remote (needs Node.js). The same block works in any other client that only supports stdio:
{
"mcpServers": {
"app-store-reviews": {
"command": "npx",
"args": [
"-y", "mcp-remote",
"https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp",
"--header", "Authorization: Bearer ${APIFY_TOKEN}"
],
"env": { "APIFY_TOKEN": "<APIFY_TOKEN>" }
}
}
}Clients that can't send headers
Apify also accepts the token as a token query parameter, so a client that only takes a URL can use:
https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp?token=<APIFY_TOKEN>Prefer the Authorization header when your client supports it: a token in a URL can end up in logs. A scoped Apify token limits the damage if it leaks.
Claude Code
claude mcp add --transport http app-store-reviews \
https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp \
--header "Authorization: Bearer $APIFY_TOKEN"VS Code (.vscode/mcp.json)
{
"servers": {
"app-store-reviews": {
"type": "http",
"url": "https://parallelstudio--app-store-review-intelligence-mcp.apify.actor/mcp",
"headers": { "Authorization": "Bearer ${input:apifyToken}" }
}
},
"inputs": [{ "id": "apifyToken", "type": "promptString", "description": "Apify API token", "password": true }]
}Example prompts
Four ready-made workflows, with the prompt, tool calls and real results in docs/workflows.md:
Workflow | Tools | Tool-event cost on the hosted server (plus the Actor start fee above) |
Release check: did our last update make things worse? |
| $0.03 |
Competitor teardown before a roadmap or pricing call |
| $0.052 |
iOS vs Android: which platform is unhappier? |
| $0.05 |
Weekly review watch in Claude Code (cron + |
| $0.06 per week |
"Find the Duolingo app id and summarize what users complained about in the last 300 US reviews."
"Did Instagram's latest iOS release make things worse? Use us, gb and ca."
"Compare Spotify on iOS and Android: which platform's users are unhappier, and about what?"
"Compare Spotify, Apple Music and YouTube Music on recent reviews and tell me each one's biggest complaint."
How complaint keywords and "what got worse" are computed
The method is transparent and deterministic. It uses no LLM and no black-box model:
Tokenize each 1–2★ review. Curly and straight apostrophes are treated the same.
Build 1-, 2- and 3-word phrases made only of content words. Stopwords, filler ("never", "just", "still", "really", "keep"…), review boilerplate ("app", "update", "star"…), numbers and the app's own name and developer are excluded. Plurals and possessives are merged (
account/accounts).Rank phrases by how many reviews mention them, so one long rant can't dominate. Multi-word phrases get a small boost.
Drop redundant phrases. A word disappears when a longer phrase covers most of its mentions (
screen→full screen), and near-duplicate phrases are merged.Version deltas: split the sample into the newest app version and the version(s) just before it, or use
since_version. Compare average rating and negative share, then rank phrases by how much their share of negative reviews rose. If the sample holds a single version, fall back to the last 3 days (or 24 hours) vs earlier. If that's not possible either, say so and suggest morepagesorcountries. Aconfidencelevel reflects how many negative reviews each side has.
Limitations
Recent reviews, not the whole history. Up to 500 reviews per app, storefront and call (Apple's feed serves 10 pages of 50; the same cap applies to Google Play). Insights describe recent written reviews. The store-wide rating and count are reported separately.
Busy apps cover only a few days. For apps like Instagram, 150 reviews may span one day and a single version.
versionDeltasthen explains this and suggests morepagesorcountries.Unofficial endpoints. Apple's iTunes Search/Lookup APIs and RSS feed, and Google Play's public web endpoints, are key-less but undocumented for this use. They can change or rate-limit. The server retries with backoff, caches responses for 5 minutes, and returns partial results with
warningswhen a page or storefront fails.Google Play specifics. Reviews have no title, and filtering is by
lang(defaulten) more than by country. Storefronts overlap, soreview_insightsde-duplicates reviews across countries. Many apps report "varies with device" instead of a version number. App size is not available.Apple specifics. The feed has no developer replies and no rating-only (unwritten) reviews.
English-centric keywords. Reviews in any language are returned and counted, but the stopword list is mainly English, with basic Spanish, French and German.
FAQ
Do I need an Apple developer account, Play Console access or an API key? No. All data comes from public App Store and Google Play endpoints. You only need an Apify account and token to call this hosted server.
Can I analyze apps I don't own? Yes. Any app listed on the App Store or Google Play works, including competitors' apps.
How do I analyze the Android version of an app?
Use its Google Play package name (com.spotify.music) or Play URL as app_id, or call search_apps with store: "google" to find it.
Why is the sample average so different from the store rating? The store rating covers every rating the app has ever had, including the many silent 5★ taps. The sample covers only the most recent written reviews, and people who write reviews are more often unhappy. The gap is useful: a sharp drop in the recent average usually points to a problem in a recent release.
How many reviews does review_insights analyze?
pages × 50 per storefront, up to 500 per country. With pages: 10 and 10 countries, that's up to 5,000 reviews in one call, charged as a single event.
Which countries are supported?
Any storefront, by its 2-letter code. App Store reviews are separate per storefront, so pass several countries to review_insights for wider coverage. On Google Play, use lang to get reviews in other languages.
Is any data stored? No. The server is stateless. It keeps only a short in-memory response cache and writes nothing to datasets or key-value stores.
Can I self-host it?
Yes. Run npm install && npm run build, then node dist/index.js for stdio or node dist/index.js --http for Streamable HTTP at http://127.0.0.1:3000/mcp. Self-hosted, billing is off unless you set BILLING=apify.
Self-hosting and development
npm install
npm run build
npm start # MCP over stdio
npm run start:http # Streamable HTTP at http://127.0.0.1:3000/mcp (GET / and /health = health check)
npm test # build + unit checks + end-to-end smoke test against live Apple and Google Play endpointsenv var | default | purpose |
|
| HTTP bind ( |
|
| per-request timeout to Apple / Google Play |
|
| retries on 408/425/429/5xx/network errors |
|
| in-memory cache TTL ( |
| (unset); |
|
| enabled |
|
On Apify (Standby mode). When APIFY_IS_AT_HOME is set, the server calls Actor.init(), forces HTTP mode, and listens on 0.0.0.0:$ACTOR_WEB_SERVER_PORT, falling back to ACTOR_STANDBY_PORT, then PORT. GET / answers the Standby readiness probe and MCP is served at /mcp. The HTTP server has no authentication of its own: on Apify, the platform authenticates requests with your API token. If you self-host it beyond localhost, put it behind an auth proxy.
.actor/ actor.json, input_schema.json (empty), output_schema.json (MCP endpoint)
Dockerfile apify/actor-node:20, multi-stage TypeScript build, BILLING=apify
src/
index.ts entry: stdio or stateless Streamable HTTP; Apify Standby wiring
server.ts MCP tool registrations (zod schemas, error mapping, billing)
http.ts shared HTTP client: timeout, retry, cache
itunes.ts Apple API client: search, lookup, review feed parsing
googleplay.ts Google Play client: search, app details, reviews (batchexecute)
insights.ts distribution, by-version stats, n-gram keywords, version deltas, quotes
billing.ts chargeEvent() → Actor.charge() when BILLING=apify
util.ts errors, cache, concurrency limiter, input normalization
test/smoke.mjs unit checks + end-to-end test via the MCP SDK client (stdio + HTTP)License
MIT
Available Tools
4 toolscompare_appsCompare apps side by sideARead-onlyIdempotentInspect
Benchmark 2-10 apps in one storefront for competitor analysis: store rating, rating count, price, current version & release date (Google adds installs), plus recent-review metrics (sample average, % negative / positive, latest-version average, top 5 complaints) and per-metric leaders. Apple ids and Google Play package names can be mixed (e.g. iOS vs Android of the same app). Examples: "Notion vs Evernote", "which meditation app has the happiest users". One flat price per call. Get ids from search_apps first. For one app in depth (version deltas, more quotes) use review_insights instead.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Google Play only: review/listing language, e.g. "en", "de", "pt-BR". Default "en". Ignored for Apple. | en |
| pages | No | Review pages to fetch, ~50 newest reviews each (1-10). Default 2. | |
| app_ids | Yes | 2-10 app ids, e.g. ["284882215","389801252"] or ["389801252","com.instagram.android"]. | |
| country | No | 2-letter storefront country code, e.g. "us", "gb", "de". Default "us". | us |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent, so the description adds cost ('one flat price per call'), cross-platform id mixing behavior, and platform-specific differences (Google adds installs). It stops short of describing response shape or pagination of the comparison itself, so it's strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core capability and metric list, then routing, then examples. Dense but each clause carries information; the parenthetical metric list is slightly packed but justified given no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully enumerates return content (store rating, price, version, review sample metrics, top complaints, per-metric leaders) and discloses cost. An agent has everything needed to decide and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: the 2-10 constraint, that all apps share one storefront, and that Apple ids and Google Play package names can be mixed in a single call. That clarification goes beyond the per-parameter schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (benchmark/compare) and resource (2-10 apps in one storefront), and enumerates the exact metrics returned. It explicitly positions itself against siblings, noting review_insights is for single-app depth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites ('Get ids from search_apps first'), an explicit exclusion routing to review_insights for single-app deep dives, plus concrete example queries. Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_app_reviewsGet raw app reviewsARead-onlyIdempotentInspect
Fetch raw reviews for one app: rating, title (Apple only), text, app version, date, helpful votes (Google adds developer replies). Use when the user wants to read or quote actual reviews or you need text for custom analysis. For summaries, complaints or "what broke", call review_insights instead: it is one flat-priced call. Billed per review returned (~50 per page; default 1 page). Max 10 pages ≈ 500 reviews.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Google Play only: review/listing language, e.g. "en", "de", "pt-BR". Default "en". Ignored for Apple. | en |
| sort | No | "mostrecent" (default) or "mosthelpful" (most upvoted). | mostrecent |
| pages | No | Review pages to fetch, ~50 newest reviews each (1-10). Default 1. | |
| store | No | "apple" (App Store) or "google" (Google Play). Optional: inferred from app_id (numeric → apple, package name → google). | |
| app_id | Yes | App to analyse. Apple: numeric id (284882215), "id284882215" or an apps.apple.com URL. Google Play: package name (com.instagram.android) or a play.google.com URL. Get ids from search_apps. | |
| country | No | 2-letter storefront country code, e.g. "us", "gb", "de". Default "us". | us |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, open-world), and the description adds genuinely new operational context: the billing model is per review returned, pages are ~50 reviews, default 1 page, and hard cap of 10 pages (~500 reviews). That cost/limit disclosure is exactly the kind of trait annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences with zero filler, and the primary action plus when-to-use clause is front-loaded before the pricing detail. Slightly packed but every clause carries information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-shape burden and does so by naming the fields returned (rating, title with Apple-only caveat, text, app version, date, helpful votes, Google developer replies). Combined with cost and page limits, nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so lang, sort, pages, store, app_id and country are all documented in the schema already (including Apple/Google inference rules and ranges). The description only restates page sizing ("~50 per page; default 1 page") and adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Fetch raw reviews for one app") and enumerates the returned fields, immediately distinguishing it from the sibling that produces aggregated results. An agent can tell this apart from review_insights without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit positive trigger ("user wants to read or quote actual reviews or you need text for custom analysis") and an explicit negative trigger with the named alternative ("For summaries, complaints or 'what broke', call review_insights instead"), even noting why (one flat-priced call). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_insightsReview insights & what got worseARead-onlyIdempotentInspect
Best first call for any question about an app's user feedback. Analyses recent reviews and returns: rating distribution, average rating per app version, top complaint phrases from 1-2★ reviews (share + example quote), versionDeltas (latest version vs earlier: rating change, negative-share change, rising complaints with quotes; falls back to last 3 days vs earlier), and sample quotes. Use for "why are users unhappy with X", "what broke in the last update", "top complaints about X", "summarize feedback". One flat price per call regardless of pages/countries. For the review text itself use get_app_reviews; to benchmark several apps at once use compare_apps. Apple and Google Play.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Google Play only: review/listing language, e.g. "en", "de", "pt-BR". Default "en". Ignored for Apple. | en |
| pages | No | Review pages to fetch, ~50 newest reviews each (1-10). Default 3. | |
| store | No | "apple" (App Store) or "google" (Google Play). Optional: inferred from app_id (numeric → apple, package name → google). | |
| app_id | Yes | App to analyse. Apple: numeric id (284882215), "id284882215" or an apps.apple.com URL. Google Play: package name (com.instagram.android) or a play.google.com URL. Get ids from search_apps. | |
| quotes | No | Sample quotes per sentiment (0-10). Default 3. | |
| countries | No | Storefronts to pool, e.g. ["us","gb","ca"]. Default ["us"]. More countries = bigger sample. | |
| keyword_limit | No | Complaint phrases to return. Default 15. | |
| since_version | No | Optional: compare reviews on this version and newer against older versions (e.g. "450.0.0"). Default: newest version in the sample vs earlier ones. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, but the description adds real behavior beyond them: a flat per-call price independent of pages/countries, the versionDeltas fallback to "last 3 days vs earlier" when version data is thin, and the shape of each returned block. It stops short of error modes or data-freshness limits, so 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the highest-value routing sentence ("Best first call for any question about an app's user feedback") before the return-value enumeration. The versionDeltas clause is dense and nested with parentheses, but every sentence carries usage or output information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 8 parameters, the description carries the return-shape burden and does so thoroughly, including fallback behavior. Gaps are minor: no statement on data freshness/recency window or failure behavior when an app has few reviews.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds decision-relevant semantics: price is flat regardless of pages/countries, so an agent need not minimize them, and the versionDeltas fallback clarifies what happens when since_version is omitted. It does not explain keyword_limit or quotes behavior beyond the schema, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource (analyses recent reviews) plus an explicit enumeration of what is returned: rating distribution, average rating per version, complaint phrases with share and quote, versionDeltas, sample quotes. It also names the two siblings it is not (get_app_reviews, compare_apps), so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states both a positive trigger ("Best first call for any question about an app's user feedback") with concrete exemplar queries ("why are users unhappy with X", "what broke in the last update") and negative routing to alternatives for raw review text and multi-app benchmarking. When-to-use and when-not-to-use are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_appsSearch apps (App Store / Google Play)ARead-onlyIdempotentInspect
Find apps by name or keyword and get the app id the other tools need. Returns id (Apple numeric id or Google Play package name), name, developer, rating, rating count, price, genre, current version, store URL (Google adds installs). Use when the user names an app ("Duolingo", "Calm") or a category ("budget apps"). Set store: "google" for Android/Google Play. Cheap, one call. Next: review_insights or compare_apps.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Google Play only: review/listing language, e.g. "en", "de", "pt-BR". Default "en". Ignored for Apple. | en |
| term | Yes | App name or keywords, e.g. "notion" or "habit tracker". | |
| limit | No | Max results (1-50). Default 10. | |
| store | No | "apple" (App Store, default) or "google" (Google Play). | apple |
| country | No | 2-letter storefront country code, e.g. "us", "gb", "de". Default "us". | us |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower. The description still adds cost/latency context ('Cheap, one call') and enumerates the returned fields, including the store-dependent 'installs' for Google, which is genuinely additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the key payoff (the app id), then usage conditions, then routing. Every sentence carries information; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the return fields, and it covers store selection, cost, and next-step tools. An agent has everything needed to call this correctly and route onward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so lang, term, limit, store, and country are all documented in the schema itself. The description reiterates store: "google" for Android but adds no syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find apps by name or keyword') plus the downstream value ('get the app id the other tools need'). This clearly distinguishes it from siblings get_app_reviews, review_insights, and compare_apps, which all consume the id this tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit triggering conditions are given: when the user names an app ('Duolingo','Calm') or a category ('budget apps'). It also names the follow-on tools (review_insights, compare_apps) and the store selection rule, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v1.1.0- First observed
compare_apps - First observed
get_app_reviews - First observed
review_insights - First observed
search_apps
TDQS
Scored across 4 tools
Each tool targets a distinct step in the workflow: discovery (search_apps), analysis (review_insights), raw retrieval (get_app_reviews), and benchmarking (compare_apps). Descriptions explicitly cross-reference each other with routing guidance ('for summaries call review_insights instead'), leaving no real chance of misselection.
Three tools follow a clean verb_noun pattern (search_apps, get_app_reviews, compare_apps), all snake_case. review_insights breaks the verb-first convention by leading with a noun, a minor but noticeable deviation in an otherwise tight set.
Four tools is well-scoped for an app-review intelligence server: discovery, raw fetch, single-app analysis, and multi-app comparison. Each tool covers a genuinely separate need with no filler or redundancy.
The search → inspect → analyze → compare lifecycle is fully covered, with sensible handoffs between tools. Minor gaps remain: no filtering of raw reviews by rating/version/date, no explicit app-details lookup, and a hard cap of ~500 reviews per fetch.
Maintenance
Related MCP Connectors
App Store reviews for any app and country, past Apple's 500-review limit: rating, text, date, version and developer replies, with an only-new mode for monitoring. Runs on Apify, $0.08 per 1,000 reviews.
Your agent needs app-store data — what an app looks like on the App Store and Google Play, what reviewers say, and what ranks for a search in a given country. **What you can ask for** • "What does this app's store listing look like, and how is it rated?" • "Pull recent reviews for this app and group the complaints." • "What apps rank for this search term in Japan?" • "List the top apps in this category on both stores." • "Compare this app's listing on iOS and Android." **How to use it** Point any MCP client at https://mcp.aisa.one/seo-apps/mcp and sign in with OAuth — there is no key to create or paste. 37 tools: Apple App Store and Google Play app info, app lists, category listings, reviews and store search results, in live and queued forms, with categories, languages and locations for each. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Read the store listing here, then ask the same agent what the app's website ranks for — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/seo/mcp for all of it at once — rankings, keywords, backlinks, site health and AI-answer visibility across DataForSEO, Semrush and Ahrefs.
App Store data for agents: app metadata, reviews, chart rankings, prices, in-app purchases.
App Store keyword rankings, competitors, markets, reviews and analytics for iOS apps, from your AI.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables querying and retrieving data from App Store and Google Play Store, including app details, reviews, ratings, rankings, permissions, and search capabilities across both iOS and Android platforms.20MIT
- AlicenseNot gradedqualityDmaintenanceProvides live App Store rankings, charts, app details, reviews, and search across 55 countries, enabling AI assistants to query app store data.18 npmMIT

@sonarapp/mcpofficial
AlicenseAqualityCmaintenanceProvides App Store Optimization tools for AI agents, enabling app lookup, keyword research, ASO audit, review mining, and revenue estimation across iOS and Google Play.43201 npmMIT- AlicenseNot gradedqualityBmaintenanceProvides live App Store and Google Play data as MCP tools, enabling search, app details, reviews, charts, estimates, and more through natural language.1MIT