@perttu/app-store-mcp
Allows looking up apps, reviews, ratings, charts, in-app purchases, privacy details, and version history on Apple's App Store.
Click on "Install 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., "@@perttu/app-store-mcpShow me reviews for TikTok"
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.
@perttu/app-store-mcp
An MCP server for looking up apps, reviews, ratings, charts, in-app purchases, privacy details, and version history on Apple's App Store. It is built on @perttu/app-store-scraper and does not require an API key.
Requirements
Node.js 20 or newer
An MCP client that can launch local stdio servers
Related MCP server: aso-mcp
Setup
You do not need to install the package globally. Add this to your MCP client's server configuration:
{
"mcpServers": {
"app-store": {
"command": "npx",
"args": ["-y", "@perttu/app-store-mcp"]
}
}
}Restart the client after changing its configuration. It should discover eleven tools whose names begin with app_store_.
If your client cannot find npx, replace npx with its absolute path. Run which npx on macOS or Linux, or where npx on Windows, to find it.
To install the executable yourself instead:
npm install --global @perttu/app-store-mcpThen use app-store-mcp as the command and omit the arguments array.
Tools
Tool | What it returns |
| Full metadata for one app, addressed by track ID or bundle ID |
| Keyword search results, with pagination and an IDs-only option |
| Ranked App Store collections, optionally filtered by category |
| Apps published by a developer |
| Recent or helpful reviews, up to page 10 |
| Total rating count and the 1–5 star distribution |
| Apps related to a given app |
| Autocomplete suggestions for a search term |
| Privacy labels and policy information |
| Previous versions, dates, and release notes |
| Top in-app purchase names and localized prices |
Most tools accept a two-letter country code. The default is us. Tools backed by Apple's lookup and search APIs also accept a lang value such as en-us.
Every tool is read-only. Results are returned as both structured content and formatted JSON text, so they work with clients that support either response form.
Arguments
country is optional and defaults to us. Use a two-letter store code such as fi, gb, or jp; uppercase codes are accepted too. lang is an optional locale such as en-us.
Tool | Required | Optional |
|
|
|
|
|
|
| — |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
id, devId, and category are numeric. appId is the bundle identifier, for example com.apple.Pages.
The available collections are:
topmacapps topfreemacapps topgrossingmacapps
toppaidmacapps newapplications newfreeapplications
newpaidapplications topfreeapplications topfreeipadapplications
topgrossingapplications topgrossingipadapplications
toppaidapplications toppaidipadapplicationsReview sort is either mostRecent (the default) or mostHelpful. category is one of Apple's numeric App Store genre IDs; common values include games (6014), education (6017), productivity (6007), utilities (6002), and business (6000). The complete allowed set is included in the tool's input schema and exported as category from the package.
Example requests
The exact prompt is up to the client. These are representative:
Find the first five App Store results for "interval timer" in Finland.
Show the rating breakdown and recent reviews for app 553834731.
What data does app 284882215 say it collects?app_store_list can fetch full metadata for every chart entry with fullDetail: true. That makes one additional App Store request per result, so use it with a small num value.
Checking the server
The MCP Inspector can launch the published package and call its tools directly:
npx @modelcontextprotocol/inspector npx -y @perttu/app-store-mcpRunning from source
git clone https://github.com/plahteenlahti/app-store-mcp.git
cd app-store-mcp
npm ci
npm run build
node dist/cli.jsThe last command waits for MCP messages on stdin; it does not open an interactive prompt. For a local client configuration, point command at node and pass the absolute path to dist/cli.js in args.
Useful development commands:
npm test
npm run check
npm run buildAgent skill
The repository includes a concise Agent Skills workflow at skills/app-store-research. It teaches agents to choose the narrowest tool, reuse identifiers, and avoid unnecessarily large responses.
Codex and Claude Code discover it automatically while working in this repository through .agents/skills and .claude/skills. To use it in other projects, copy the canonical skill folder to your user skill directory:
# Codex
cp -R skills/app-store-research ~/.agents/skills/
# Claude Code
cp -R skills/app-store-research ~/.claude/skills/Notes
This project reads public Apple endpoints. Apple can change those endpoints or apply rate limits without notice. The server deliberately does not cache or throttle requests; the calling client remains in control of when tools run.
This project is not affiliated with or endorsed by Apple Inc. App Store is a trademark of Apple Inc.
License
Available Tools
11 toolsapp_store_appGet App DetailsARead-only
Get App Store metadata for one app by numeric track ID or bundle identifier. Can include the rating histogram.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Numeric App Store track ID | |
| lang | No | Response locale, such as en-us | |
| appId | No | Bundle identifier, such as com.apple.Pages | |
| country | No | App Store country; defaults to US | |
| ratings | No | Include the 1–5 star rating histogram |
Output Schema
| Name | Required | Description |
|---|---|---|
| app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description's read-only 'Get' wording is consistent. It adds the behavioral detail that the rating histogram can optionally be included, but does not disclose other nuances such as precedence or identifier requirements; with annotations covering safety, this is adequate but not 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; the key verb, resource, and invocation options are front-loaded. No filler or redundancy, and every sentence earns its place.
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?
Given the output schema, rich parameter schema, and read-only annotations, the description provides enough to invoke the tool correctly for common cases. It leaves a minor ambiguity about requiring at least one identifier, since the schema lists no required fields, but overall it is adequate.
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 already documents all five parameters. The description adds context that id and appId are two alternative identifier types and that ratings toggles the histogram, but does not go beyond the schema's own descriptions.
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 clearly states the action ('Get'), the resource ('App Store metadata'), the scope ('for one app'), and the accepted identifiers ('numeric track ID or bundle identifier'). This distinguishes it from sibling search/review/ratings tools by emphasizing it targets a single app by identifier.
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 description does not explain when to choose this tool over siblings like app_store_search or app_store_ratings, nor does it state exclusions or prerequisites (e.g., that id or appId should be provided). It implies usage through the identifier wording but gives no explicit context or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_developerGet Developer AppsARead-only
Get all apps published under an App Store developer account.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Response locale, such as en-us | |
| devId | Yes | Numeric App Store developer ID | |
| country | No | App Store country; defaults to US |
Output Schema
| Name | Required | Description |
|---|---|---|
| apps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety and dynamic data. The description adds the scope constraint 'all apps,' but no additional behavioral details like pagination or response limits. This matches the baseline where annotations carry the safety burden.
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?
The description is a single concise sentence, front-loaded with the action and resource, with zero filler words. It is immediately scannable and directly addresses the tool's purpose.
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 tool with an output schema and annotations, this description is complete. The agent knows what to expect (all apps for a developer) and can rely on the schema for parameters and output, so no further elaboration is needed.
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 all parameters (devId, lang, country) having clear inline descriptions. The tool description does not add parameter-specific meaning, so it meets the baseline of 3 without needing to compensate.
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 uses a specific verb ('Get') plus a clear resource ('all apps published under an App Store developer account'). It distinguishes from sibling tools like search or app lookup by scoping to a developer account, making the purpose unambiguous.
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 description implicitly defines the use case: when you need all apps for a given developer ID. It does not explicitly compare to alternatives or state exclusions, but the resource scope (developer account) clearly differentiates it from search or listing tools, providing enough context for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_in_app_purchasesGet In-App PurchasesARead-only
Get the top in-app purchases shown on an app's App Store page, with localized names and formatted prices.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric App Store track ID | |
| country | No | App Store country; defaults to US |
Output Schema
| Name | Required | Description |
|---|---|---|
| purchases | Yes |
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 useful context about localization and the 'top' qualifier, but provides no additional behavioral details (e.g., pagination, limits). This aligns with the calibration example for get_calls.
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?
The description is a single well-structured sentence of 14 words. It is front-loaded with the primary action ('Get'), clearly states the target resource, and includes relevant output characteristics without unnecessary detail.
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?
Given the presence of a complete input schema, output schema, and annotations, the description is fully adequate. It specifies the purpose and important output details (localized names and prices), leaving no critical gaps for an agent to misuse the 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 description coverage is 100%, with both `id` and `country` fully described. The description adds marginal value by implying country affects localization and price formatting, but the schema already provides the necessary semantics for both parameters.
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 clearly states the tool gets 'top in-app purchases shown on an app's App Store page' and specifies 'localized names and formatted prices.' This is a specific verb+resource combination that distinguishes it from sibling tools like app_store_reviews or app_store_app.
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 description provides clear context: it is for the top in-app purchases on an app's App Store page. It does not explicitly name alternatives or exclusion conditions, but the purpose is unambiguous relative to the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_listList App Store ChartsARead-only
Get a ranked App Store collection, optionally narrowed to a category. Full detail makes one additional request per app.
| Name | Required | Description | Default |
|---|---|---|---|
| num | No | Number of apps | |
| lang | No | Response locale, such as en-us | |
| country | No | App Store country; defaults to US | |
| category | No | Numeric App Store genre ID | |
| collection | No | Chart or collection to retrieve | |
| fullDetail | No | Fetch full metadata for every result |
Output Schema
| Name | Required | Description |
|---|---|---|
| apps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a significant operational cost: 'Full detail makes one additional request per app,' which is beyond the readOnlyHint annotation. It doesn't contradict annotations. It could have mentioned pagination or default behavior, but the per-app request warning adds useful transparency.
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, front-loaded sentences with no filler. Each sentence adds essential information: the core purpose and the cost caveat.
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 description covers the tool's core purpose, category filtering, and a cost caveat. With a fully-described schema and an output schema present, it is sufficient, though it could briefly mention how to select different collections or defaults.
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?
With 100% schema coverage, the baseline is 3. The description adds meaning for 'category' (optional narrowing) and 'fullDetail' (extra request per app), going slightly beyond the schema's descriptions.
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 clearly identifies the tool as retrieving a ranked App Store collection, with optional category narrowing. This distinguishes it from siblings like app_store_reviews, app_store_search, and app_store_developer, which target different resources.
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 description implies use for chart/collection retrieval and notes optional category narrowing, but does not explicitly compare with alternative tools like app_store_search or app_store_app, nor provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_privacyGet App Privacy DetailsARead-only
Get privacy labels and policy information published for an App Store app.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric App Store track ID | |
| country | No | App Store country; defaults to US |
Output Schema
| Name | Required | Description |
|---|---|---|
| privacy | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a safe read operation. The description adds that the data is 'published' privacy labels and policy info, but discloses no additional behaviors like rate limits or error handling. This is acceptable given the annotations but not exceptional.
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?
The description is a single sentence of about ten words, front-loaded with the action and resource, with zero waste or redundant content.
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?
Given an output schema exists to explain return values, the annotations cover safety, and the parameters are self-explanatory via the schema, the description is sufficient for the agent to understand the tool's scope. No critical context is missing.
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?
The input schema already provides full descriptions for both parameters (id and country), achieving 100% coverage. The description itself adds no parameter-level detail, so it remains at baseline.
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 uses the specific verb 'Get' and names a precise resource ('privacy labels and policy information') for an App Store app. It clearly distinguishes this tool from siblings like app_store_reviews or app_store_ratings, which target different data types.
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 description provides clear context: it is for retrieving privacy-related app data. However, it stops short of explicitly stating when to use this tool over alternatives or noting exclusions, so it misses the top score for guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_ratingsGet App RatingsARead-only
Get an app's total rating count and its 1–5 star histogram.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric App Store track ID | |
| country | No | App Store country; defaults to US |
Output Schema
| Name | Required | Description |
|---|---|---|
| ratings | Yes | |
| histogram | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the output shape (histogram) but does not disclose additional behaviors beyond what annotations already cover. The readOnlyHint indicates a safe read, and openWorldHint suggests variable results, both provided by annotations. With annotations present, the description does not contradict or significantly extend them.
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?
The description is a single, concise sentence that immediately communicates the tool's purpose. It contains no extraneous details, making it optimally front-loaded and easy to parse.
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 tool with a well-defined schema and output schema, the description is sufficient. It clearly states what the tool returns, and the schema covers parameter details, so an agent has all necessary context to use it 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?
The input schema already provides detailed descriptions for both parameters (id and country) with 100% coverage. The description adds no extra parameter context, so it meets the baseline but does not exceed schema documentation.
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 clearly states the tool's function: retrieving an app's total rating count and its 1-5 star histogram. It uses a specific verb ('Get') and resource ('an app's total rating count'), and it stands out from siblings like app_store_reviews by focusing on aggregate ratings rather than individual reviews.
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?
No guidance is provided on when to use this tool versus alternatives. The description implies its use for rating summaries, but it does not explicitly mention alternatives or when to prefer this over app_store_reviews or app_store_app.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_reviewsGet App ReviewsARead-only
Get a page of recent or helpful App Store reviews for an app.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Numeric App Store track ID | |
| lang | No | Response locale, such as en-us | |
| page | No | Review page, from 1 to 10 | |
| sort | No | Review order | |
| appId | No | Bundle identifier, such as com.apple.Pages | |
| country | No | App Store country; defaults to US |
Output Schema
| Name | Required | Description |
|---|---|---|
| reviews | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already indicate a safe read operation. The description adds minor context about pagination ('a page') and sorting ('recent or helpful'), but does not disclose requirements like needing either id or appId, or country defaults. This is a modest addition beyond annotations.
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?
The description is a single, clear sentence that immediately conveys the tool's purpose. It is well-front-loaded and contains no redundant information, making it highly concise and easy to parse.
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?
Given the presence of an output schema and full parameter descriptions, the description is largely complete. It effectively communicates the core purpose, but it could benefit from noting that reviews differ from ratings (given the app_store_ratings sibling) or specifying that either id or appId is required. Overall, it is adequate for a simple read-only 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%, with all six parameters described. The description's mention of 'recent or helpful' aligns with the sort parameter but adds no new semantic meaning beyond the schema. It neither clarifies the id/appId relationship nor parameter constraints, so it meets the baseline without exceeding it.
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 clearly states the tool fetches a page of App Store reviews, with 'page' and 'recent or helpful' indicating pagination and sorting. However, it does not explicitly differentiate from the sibling tool app_store_ratings, which could cause confusion about scope (reviews vs ratings).
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 description implies usage when you need app reviews but provides no explicit guidance on when to use this tool over alternatives like app_store_ratings or app_store_search. There are no exclusions or alternative tool mentions, leaving some ambiguity in tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_searchSearch the App StoreARead-only
Search the App Store by keyword, with country, locale, and pagination controls.
| Name | Required | Description | Default |
|---|---|---|---|
| num | No | Results per page | |
| lang | No | Response locale, such as en-us | |
| page | No | Page number | |
| term | Yes | Search query | |
| country | No | App Store country; defaults to US | |
| idsOnly | No | Return only numeric App Store IDs |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint and openWorldHint, indicating a safe read operation. The description adds that it supports keyword search with country/locale/pagination controls, but does not disclose default pagination behavior or error handling. Given annotation coverage, this is adequate but not 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?
The description is a single, front-loaded sentence that communicates the core action and key controls without unnecessary words. It effectively summarizes the tool's purpose and parameters.
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 has a well-documented schema, annotations, and an output schema, so the description does not need to explain return values. It is complete enough for an agent to select and invoke the tool, though it could briefly mention that results are app listings. Overall, the description is sufficient for a straightforward search 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?
The input schema provides 100% description coverage for all six parameters, including term, num, lang, page, country, and idsOnly. The description's mention of 'country, locale, and pagination controls' adds no meaning beyond what the schema already states. A baseline score of 3 is appropriate.
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 explicitly states 'Search the App Store by keyword' with a specific verb and resource. It also mentions country, locale, and pagination controls, making it distinct from sibling tools like app_store_reviews or app_store_app. This is clear and non-tautological.
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 description implies usage for keyword-based App Store searches but does not explicitly contrast with alternatives. It does not state when to choose this over app_store_suggest or app_store_similar, leaving the agent to infer from the name and schema. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_similarGet Similar AppsBRead-only
Get the apps shown as related to a given App Store app.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Numeric App Store track ID | |
| lang | No | Response locale, such as en-us | |
| appId | No | Bundle identifier, such as com.apple.Pages | |
| country | No | App Store country; defaults to US |
Output Schema
| Name | Required | Description |
|---|---|---|
| apps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to restate these. However, the description adds no behavioral details beyond a basic purpose statement, such as what happens when both 'id' and 'appId' are supplied, parameter precedence, or locale defaulting behavior.
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?
The description is a single, focused sentence of 12 words. It is front-loaded and contains no filler or redundant information, making it highly concise and easy to parse.
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?
Despite having an output schema and annotations, the description is incomplete because it does not explain which of the four optional parameters is necessary to identify the app. This is critical for invocation and is not adequately covered by the schema descriptions alone.
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?
All 4 parameters have schema descriptions (100% coverage), so the baseline is 3. The description adds no extra semantic meaning, but the schema already documents each parameter adequately, so no deduction is warranted.
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 'Get the apps shown as related to a given App Store app' clearly states a specific verb and resource, distinguishing it from sibling tools like app_store_search, app_store_reviews, or app_store_ratings. It unambiguously conveys the tool's function of retrieving similar apps for a given app.
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?
No guidance is provided on when to use this tool versus alternatives, and there is no mention of prerequisites such as needing either 'id' or 'appId' to identify the app. The optional parameters make usage ambiguous without additional instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_suggestGet Search SuggestionsARead-only
Get App Store autocomplete suggestions for a partial search term.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Partial search term | |
| country | No | App Store country; defaults to US |
Output Schema
| Name | Required | Description |
|---|---|---|
| suggestions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety and external access. The description adds the autocomplete context but discloses no additional behavioral traits such as rate limits, result limits, or error handling. With an output schema present, this is adequate but not deeply transparent.
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?
The description is a single, focused sentence that clearly states the tool's purpose without any filler or unnecessary detail. It is well-structured and immediately understandable.
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 2-parameter read-only tool with full schema coverage and an output schema, the description is sufficiently complete. It covers the core purpose and appropriately relies on the schema for parameter details and return values.
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?
The input schema provides 100% parameter coverage: 'term' is described as 'Partial search term' and 'country' is described with a default value. The description itself adds no parameter-specific information, so the baseline score 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 clearly states the tool's function: 'Get App Store autocomplete suggestions for a partial search term.' This uses a specific verb ('Get') and resource ('autocomplete suggestions'), and explicitly distinguishes it from sibling tools like app_store_search (full search) and app_store_similar (similar apps) by focusing on partial-term suggestions.
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 description explicitly states the intended scenario: providing autocomplete suggestions for a partial search term. This gives clear context for when to use the tool. However, it does not name alternatives or exclusions, though the autocomplete framing strongly implies it is for suggestion-style queries rather than full search or listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
app_store_version_historyGet App Version HistoryARead-only
Get past versions, release dates, and release notes for an App Store app.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeric App Store track ID | |
| country | No | App Store country; defaults to US |
Output Schema
| Name | Required | Description |
|---|---|---|
| versions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds the specific data fields returned but does not disclose behavioral aspects like rate limits or pagination. No contradiction.
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?
The description is a single sentence, front-loaded with the verb and object, and contains no unnecessary detail. It is highly concise and structured effectively.
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 an output schema present and annotations covering read-only/open-world behavior, the description is complete enough. It names the return data categories (past versions, release dates, release notes), and remaining details like country default and return format are in the schema.
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 descriptions cover 100% of parameters (id and country, including the country default). The description adds no additional parameter semantics, but the schema already provides sufficient meaning, so the baseline score 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 uses a specific verb ('Get') and names the resource ('App Store app') with exact data fields (past versions, release dates, release notes). This clearly distinguishes it from sibling tools like app_store_reviews or app_store_ratings.
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 description implies a clear use case—retrieving version history for an app—but does not explicitly mention when to use this tool over siblings or provide exclusions. The context is clear enough from the description and tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct data type (search, reviews, ratings, app details, etc.), but app_store_app and app_store_ratings have minor overlap since app metadata can include the rating histogram. Overall, descriptions clearly delineate purpose.
All 11 tools follow a consistent app_store_ prefix with snake_case. While the suffix part of speech varies (nouns, verbs, adjectives), the pattern is highly predictable and recognizable.
11 tools is well within the ideal range and each tool addresses a distinct read-only aspect of App Store data. No tool feels redundant or out of place.
The set covers all major App Store information surfaces: search, lookup, collections, developer listings, ratings, reviews, similar apps, suggestions, privacy, version history, and in-app purchases. There are no obvious dead ends for common use cases.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
iTunes Search MCP — Apple's public catalog search
Apple App Store reviews as structured JSON via the Apify Reviews API Actor, hosted MCP.
Remote MCP connector for App Store + Google Play data via StoreBridge API. No auth required.
MCP server for Appcircle mobile CI/CD platform.
Related MCP Servers
- AlicenseBqualityBmaintenanceMCP server that scrapes app data from Google Play and Apple App Store, providing tools for search, details, reviews, and similar apps.839MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server for App Store Optimization that provides keyword research, competitor analysis, review sentiment, and metadata optimization using real App Store data without requiring an API key.294MIT
- AlicenseAqualityCmaintenanceAn MCP server that gives AI assistants structured access to App Store Connect data. Built for ASO analysis, download tracking, and performance monitoring.7321MIT
- AlicenseAqualityAmaintenanceAn open-source MCP server for live Apple App Store competitor research, enabling AI agents to search apps, fetch metadata, compare competitors, and retrieve reviews and top charts as structured JSON.7MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/plahteenlahti/app-store-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server