app-store-scraper-mcp
Provides tools for querying the Apple App Store directly, including app details, search, top charts, developer apps, similar apps, reviews, ratings, privacy labels, and search suggestions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@app-store-scraper-mcpsearch the App Store for meditation apps"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
app-store-scraper-mcp
An MCP server that exposes app-store-scraper as tools, so AI assistants can query the Apple App Store directly: app details, search, top charts, reviews, ratings, privacy labels, and keyword suggestions.
Tools
Tool | Description |
| Full app details by |
| Search apps by term ( |
| Top charts ( |
| All apps by a developer ( |
| "Customers also bought" apps. |
| One page of reviews (pages 1–10, sort |
| Total ratings count and 1–5 star histogram. |
| The App Privacy ("nutrition label") details. |
| Search autocomplete suggestions, useful for ASO and keyword research. |
Most tools accept country (two-letter code, default us) and lang.
List-style tools (search_apps, list_apps, developer_apps, similar_apps) return a compact form by default: no screenshots, device lists, languages or release notes, and descriptions cut to 300 characters. This keeps responses small in the model's context. Pass verbose: true to get full objects.
Responses are cached in memory for 5 minutes.
Related MCP server: AppRanks MCP Server
Fixes over upstream
app_ratings/app_details({ratings: true}): upstream reportsratings: 4for "4,041,456 Ratings" because its regex stops at the comma. This server works out the total from the histogram.app_privacy: upstream is broken since Apple's apps.apple.com redesign (the token regex no longer matches). This server reads the privacy data from the page's embedded JSON (src/privacy.ts) and keeps the original output shape, plus aprivacyPolicyUrlfield.
Setup
No install needed: clients run it with npx. Requires Node.js 18+.
Claude Code
claude mcp add app-store -- npx -y app-store-scraper-mcpClaude Desktop / other clients
{
"mcpServers": {
"app-store": {
"command": "npx",
"args": ["-y", "app-store-scraper-mcp"]
}
}
}From source
git clone https://github.com/rprih/app-store-scraper-mcp.git && cd app-store-scraper-mcp
npm install && npm run build
claude mcp add app-store -- node "$PWD/dist/index.js"Debugging
npm run inspect # opens the MCP Inspector against the built serverNotes
This is unofficial scraping of Apple endpoints. It can break when Apple changes things, and heavy use may get rate-limited.
Available Tools
9 toolsapp_detailsApp detailsARead-only
Get full details for an App Store app (title, description, price, rating, version, developer, screenshots…). Provide either id or appId.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Numeric iTunes trackId of the app, e.g. 553834731 (Candy Crush Saga). | |
| lang | No | Language code for result text, e.g. 'en-us'. Defaults to the country's language. | |
| appId | No | Bundle id of the app, e.g. 'com.midasplayer.apps.candycrushsaga'. | |
| country | No | Two-letter country code of the store (default: us). Also affects result language. | |
| ratings | No | Also load the ratings count and star histogram (one extra request). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and reach profile is known. The description adds the useful fact that the response is a rich field-level payload, but says nothing about error behaviour when neither identifier is supplied, rate limits, or how the optional `ratings` extra request affects latency.
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?
Two tight sentences with the main purpose front-loaded and the identifier rule appended, no filler. The parenthetical field list is long but earns its place because no output schema exists to describe the return shape.
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 usefully enumerates what comes back, and it names the alternative identifier inputs. What is missing is the failure behaviour when both/neither identifier is given and any note about the cost of the optional ratings lookup, which matters for a 5-parameter tool with zero required parameters.
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 all five parameters are documented in the schema itself, establishing the baseline of 3. The description adds only the either/or relationship between `id` and `appId`, which the schema does not encode (both are optional, none required), but leaves the exact-one requirement ambiguous.
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 ('Get full details for an App Store app') and enumerates the returned fields (title, description, price, rating, version, developer, screenshots), which distinguishes it from list/search siblings. It does not explicitly differentiate from near-neighbours like app_ratings or app_privacy, which cover subsets of the same data.
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?
The only guidance is 'Provide either `id` or `appId`', which is an invocation constraint rather than a when-to-use rule. There is no statement about when to prefer this over sibling tools such as app_ratings (for the histogram), app_privacy, or search_apps for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_privacyApp privacyCRead-only
Get the App Privacy ('nutrition label') details for an app.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric iTunes trackId of the app, e.g. 553834731 (Candy Crush Saga). | |
| country | No | Two-letter country code (default us). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered by structured data. The description adds nothing beyond that: it does not say whether privacy labels may be absent for some apps, whether the result is region-dependent, or whether the call requires an existing app record. For a lookup whose payload is often missing or partial, that omission is material.
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?
A single front-loaded sentence with zero filler and no redundant restatement of the title. It is efficiently worded, though its brevity is part of why behavioral and usage context is absent.
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?
This is a simple two-parameter read tool with fully documented parameters and annotations covering safety, so a short description is defensible. However, with no output schema, the description gives no hint of what the privacy label response contains or how missing data appears, leaving a real gap for the agent.
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%, with the id parameter documented with an example and country documented as a two-letter code defaulting to us, so the schema carries the parameter burden. The description contributes no additional meaning about how id or country affect the returned privacy label, so the baseline of 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?
The verb 'Get' plus the specific resource 'App Privacy (nutrition label) details' makes the retrieval target unambiguous, and the parenthetical clarifies what data class is returned. It is distinguishable from siblings such as app_details and app_ratings by resource name, though the description never explicitly contrasts itself with them.
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?
There is no guidance on when to choose this over app_details or app_ratings, and no preconditions or exclusions are stated. The only usable signal is the restated purpose, which leaves the agent to infer selection from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_ratingsApp ratingsARead-only
Get the total ratings count and 1–5 star histogram for an app.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric iTunes trackId of the app, e.g. 553834731 (Candy Crush Saga). | |
| country | No | Two-letter country code of the store (default: us). Also affects result language. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and external-source behavior are covered. The description adds useful context by naming the returned content (total count plus 1–5 star histogram), which matters because no output schema exists, but it leaves open whether the histogram values are counts or percentages and whether results are scoped by country.
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?
A single front-loaded sentence with no filler, and the key output content appears immediately. Nothing in it is redundant with the title or schema in a wasteful way.
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?
For a two-parameter, read-only lookup with no output schema, stating the returned values is the main thing an agent needs, and the description does that. The only real gap is unit/format ambiguity in the histogram and the absence of a pointer to the sibling review tool.
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%, and the schema itself explains the iTunes trackId format and the two-letter country code with its default and language effect. The description adds nothing on top of that, so the baseline of 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?
The description names a specific verb and resource ('Get the total ratings count and 1–5 star histogram for an app'), which is far more precise than a generic 'get app data'. It implicitly separates itself from app_reviews (textual reviews) by focusing on aggregate counts and the star histogram, though it never names that sibling or states the distinction explicitly.
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?
Usage is only implied: an agent can infer this is the tool for aggregate rating stats rather than reviews or details, but the description gives no explicit when-to-use or when-not-to-use guidance. There is no mention of the closest alternative (app_reviews) or of choosing between ratings-only and full app metadata.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_reviewsApp reviewsARead-only
Get a page of user reviews for an app (up to 10 pages of ~50 reviews). Provide either id or appId.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Numeric iTunes trackId of the app, e.g. 553834731 (Candy Crush Saga). | |
| page | No | Page 1–10 (default 1). | |
| sort | No | RECENT (default) or HELPFUL. | |
| appId | No | Bundle id of the app, e.g. 'com.midasplayer.apps.candycrushsaga'. | |
| country | No | Two-letter country code of the store (default: us). Also affects result language. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds a useful bound on result volume ('up to 10 pages of ~50 reviews'), but says nothing about ordering of the returned data, whether reviews are filtered/truncated, or what a page object contains.
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?
Two short sentences, zero filler, with the core action first and the identifier requirement second. Nothing could be removed without losing 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?
For a simple read-only listing tool with full schema coverage and safety annotations, the definition covers purpose, volume bounds, and identifier requirements. The main remaining gap is that, with no output schema, the shape of a returned review is never described, but this is a modest omission for a well-understood resource.
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 the baseline is 3, but the description adds one genuinely new constraint: at least one of `id` or `appId` must be supplied, which the schema does not enforce (zero required parameters). That goes beyond the per-field docs and prevents a call with no identifier.
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?
The description states a specific verb and resource ('Get a page of user reviews for an app') and bounds the result volume (up to 10 pages of ~50 reviews). It is clearly distinct from siblings like app_ratings or app_details by naming the resource type, though it never explicitly contrasts with them.
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?
The only guidance is the selection rule between the two identifiers ('Provide either `id` or `appId`'). There is no indication of when to prefer this over app_ratings or app_details, nor any note on when paging past page 1 is worthwhile, so usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
developer_appsDeveloper appsARead-only
List all apps published by a developer, given the developer's iTunes artistId.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language code for result text, e.g. 'en-us'. Defaults to the country's language. | |
| devId | Yes | iTunes artistId of the developer (the `developerId` field of an app), e.g. 284882218. | |
| country | No | Two-letter country code of the store (default: us). Also affects result language. | |
| verbose | No | Return full app objects (screenshots, full description, devices). Default false returns a compact form. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing about result size limits, pagination, or ordering of the returned apps — behavior an agent would want to know when listing a prolific developer's catalog. It is consistent with the annotations, just thin.
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?
One front-loaded sentence with the resource and the required identifier up front and zero filler. Nothing is redundant with the schema in a wasteful way.
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?
For a simple read-only lookup with four fully documented parameters and no output schema, the description covers what the tool does and what it needs. The only meaningful gap is the absence of any note on result volume or pagination behavior, which matters for developers with large catalogs.
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 all four parameters (devId, lang, country, verbose) are already documented in the schema, and the description's mention of artistId merely restates the devId description. Baseline 3 applies since the description adds no syntax, default, or interaction detail beyond the schema.
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?
The description gives a specific verb and resource ('List all apps published by a developer') plus the key input ('iTunes artistId'), which distinguishes it from search_apps and app_details. It does not explicitly name a sibling tool or contrast its scope with list_apps, so it stops short of full differentiation.
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?
Use is implied by the phrase 'given the developer's iTunes artistId' — you call it when you already have an artistId. There is no explicit when-not guidance, no mention of alternatives such as list_apps or search_apps, and no note about what to do if you only have an app ID rather than a developer ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsTop chartsBRead-only
Get apps from an App Store chart/collection (top free, top paid, top grossing, new…), optionally filtered by category.
| Name | Required | Description | Default |
|---|---|---|---|
| num | No | Number of apps (default 50, max 200). | |
| lang | No | Language code for result text, e.g. 'en-us'. Defaults to the country's language. | |
| country | No | Two-letter country code of the store (default: us). Also affects result language. | |
| verbose | No | Return full app objects (screenshots, full description, devices). Default false returns a compact form. | |
| category | No | Restrict to a category/genre. | |
| collection | No | Chart to fetch (default TOP_FREE_IOS). | |
| fullDetail | No | Do an extra lookup to return full app attributes like app_details. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and network reach are covered. The description adds that category filtering is optional, but says nothing about result ordering, pagination limits, or the difference between the two similarly named output-shaping flags (verbose vs fullDetail), which is exactly the kind of behavioral detail annotations cannot carry.
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?
One sentence, front-loaded with the action and resource, with the optional filter trailing. No filler. It is arguably too terse for a 7-parameter tool, but nothing in it is wasted.
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?
The tool is simple and the schema is fully self-documenting, so most of the burden is met elsewhere. However, with no output schema and two overlapping flags (verbose and fullDetail) whose interaction is unexplained, an agent must guess what it will actually receive back.
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 every one of the 7 parameters is already documented, including defaults, enum values, and the 200 max. The description only restates the chart examples that the collection enum already lists, adding no new meaning; 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 ("Get apps from an App Store chart/collection") and enumerates example charts (top free, top paid, top grossing, new), so the agent knows this is a chart-browsing tool rather than a keyword search. It never names the sibling search_apps, so the distinction from search-style tools is left implicit.
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?
The phrase "chart/collection" plus the optional category filter implies browsing-oriented usage, but the description never says when to prefer this over search_apps, similar_apps, or developer_apps. No exclusions, no prerequisites, no mention of default behavior when no collection is supplied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_appsSearch appsCRead-only
Search the App Store for apps matching a term.
| Name | Required | Description | Default |
|---|---|---|---|
| num | No | Results per page (default 50). | |
| lang | No | Language code for result text, e.g. 'en-us'. Defaults to the country's language. | |
| page | No | Page of results (default 1). | |
| term | Yes | Search term. | |
| country | No | Two-letter country code of the store (default: us). Also affects result language. | |
| idsOnly | No | Return only an array of trackIds (skips the detail lookup; faster). | |
| verbose | No | Return full app objects (screenshots, full description, devices). Default false returns a compact form. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: it does not mention pagination behavior, the compact-vs-full result modes, ranking, or that results come from an external live store that can vary by country.
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?
A single front-loaded sentence with zero filler or redundancy. It is efficient, though its brevity leaves the heavier informational burden entirely to the 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?
For a 7-parameter, paginated, external-store search with no output schema, the description omits anything about result shape, pagination limits, or the idsOnly/verbose trade-offs. An agent could call it correctly on `term` alone but would be guessing about everything else.
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 the schema itself documents num, page, lang, country, idsOnly, and verbose thoroughly. The description only echoes the required `term` parameter ("matching a term") and adds no meaning beyond the schema, which is the expected baseline here.
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?
The description states a specific verb ("Search") and resource ("the App Store for apps") plus the matching criterion ("matching a term"), so an agent knows exactly what the tool does. It does not, however, distinguish it from siblings like search_suggestions, list_apps, or similar_apps, which all operate on apps.
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?
There is no when-to-use guidance, no exclusions, and no mention of alternatives such as list_apps (browsing) or search_suggestions (autocomplete). The agent must infer from the name alone which sibling to call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_suggestionsSearch suggestionsARead-only
Get up to 50 App Store search autocomplete suggestions for a term. Useful for keyword/ASO research.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Partial search term. | |
| country | No | Two-letter country code of the store (default: us). Also affects result language. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the external-read nature is covered. The description meaningfully adds the result cap of 50 and that input is a partial term, but says nothing about result ordering, rate limits, or what an empty response means.
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?
Two short sentences with the capability and its bound front-loaded, followed by the use case. No redundant restatement of the title or schema details.
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?
For a two-parameter read-only lookup with full schema coverage and no output schema, the description supplies what an agent needs to invoke it correctly. Minor gap: it doesn't describe the shape of returned suggestions or how they should be used downstream.
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%, with both 'term' (partial search term) and 'country' (two-letter code, default us, affects result language) fully documented in the schema. The description only reiterates that a 'term' is required and adds no new semantics, so the baseline of 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 ('Get ... App Store search autocomplete suggestions') plus a bounded scope ('up to 50'). It implicitly distinguishes itself from search_apps by being autocomplete rather than full app search, though it doesn't name the sibling explicitly.
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?
The phrase 'Useful for keyword/ASO research' gives an implied usage context, but there is no explicit when-to-use rule, no exclusion of cases better served by search_apps or similar_apps, and no mention of how to follow up on the suggestions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
similar_appsSimilar appsARead-only
Get the 'customers also bought' / similar apps shown on an app's page. Provide either id or appId.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Numeric iTunes trackId of the app, e.g. 553834731 (Candy Crush Saga). | |
| lang | No | Language code for result text, e.g. 'en-us'. Defaults to the country's language. | |
| appId | No | Bundle id of the app, e.g. 'com.midasplayer.apps.candycrushsaga'. | |
| country | No | Two-letter country code of the store (default: us). Also affects result language. | |
| verbose | No | Return full app objects (screenshots, full description, devices). Default false returns a compact form. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered elsewhere. The description's real contribution is stating that one of `id` or `appId` must be supplied, which is non-obvious because the schema lists no required parameters. It says nothing about rate limits, coverage per country, or empty results, so it is modest rather than rich.
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?
Two short sentences, with the resource definition front-loaded and the invocation constraint immediately after. Nothing is wasted and there is no filler.
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?
For a simple read-only lookup with five fully documented parameters and no output schema, the description plus schema covers essentially everything. The remaining gap is edge behavior (both identifiers supplied, no similar apps found), which is minor for a tool of this complexity.
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 per-parameter meaning is already fully documented, and the baseline of 3 applies. The description adds only the mutual-exclusivity/at-least-one rule for `id` vs `appId`, which the schema does not express via `required`; it adds nothing about `lang`, `country`, or `verbose`.
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?
The description states a specific verb and resource: retrieve the 'customers also bought' / similar apps shown on an app's page. That is unambiguous and distinct from app_details or search_apps. It does not explicitly name how it differs from siblings, so it lands just short of a 5.
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?
Usage is implied by the resource itself (call it when you want related apps), and the constraint 'Provide either `id` or `appId`' gives a concrete invocation rule. There is no explicit when-not guidance, no mention of app_details as the tool for the app's own metadata, and no note on behavior when the app has no similar apps.
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.
9 tool updates
v0.1.1- First observed
app_details - First observed
app_privacy - First observed
app_ratings - First observed
app_reviews - First observed
developer_apps - First observed
list_apps - First observed
search_apps - First observed
search_suggestions - First observed
similar_apps
TDQS
Scored across 9 tools
Each tool maps to a distinct data facet (search, charts, details, ratings, privacy, reviews, similar apps, developer catalog, autocomplete), so an agent can pick correctly in most cases. The only real overlap is that `app_details` already returns rating/version info that `app_ratings` surfaces separately, and `search_apps` vs `search_suggestions` vs `list_apps` require reading descriptions to keep straight.
All names are lowercase snake_case and semantically transparent, but they follow three different patterns: verb_noun (`search_apps`, `list_apps`), resource_aspect (`app_ratings`, `app_privacy`, `app_details`, `app_reviews`), and qualifier_noun (`similar_apps`, `developer_apps`). Readable and predictable enough, with only minor style drift rather than true inconsistency.
Nine tools is well within the sweet spot and each covers a genuinely different App Store data surface. No tool feels redundant filler or obviously missing from the core set.
The surface covers the main read-only App Store research workflow: autocomplete, search, charts, details, ratings, reviews, privacy labels, similar apps, and developer catalogs. Minor gaps remain, such as app version/changelog history, in-app purchase listings, and explicit storefront/country selection, but agents can work around them.
Maintenance
Related MCP Connectors
App Store keyword rankings, competitors, markets, reviews and analytics for iOS apps, from your AI.
App Store data for agents: app metadata, reviews, chart rankings, prices, in-app purchases.
App Store Optimization data for AI agents: keyword ranks, scores, competitors, charts
App Store and Google Play reviews, ratings, sentiment and developer replies as agent tools.
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
- AlicenseNot gradedqualityDmaintenanceEnables searching the App Store, retrieving app details, discovering trending apps, and accessing screenshots and release information via Apple's public APIs.4 npm4MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Apple App Store Connect resources like apps, builds, TestFlight, and reviews through natural language.209 npmMIT