App Store opportunity data for coding agents: unmet demand, paying markets, build briefs.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Explain the scoring formulas, weights, and the honest limitations of the data. Use when a user questions the numbers.
This tool takes no arguments.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Explain the scoring formulas, weights, and the honest limitations of the data. Use when a user questions the numbers.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Find opportunities a single developer can realistically build: clear winnability plus an explicit single-user, local or offline core. Use when solo feasibility is the primary constraint.
| Argument | Type | Description |
|---|---|---|
| genre | string | Restrict to one App Store category, e.g. Productivity. |
| limit | integer | Maximum number of results to return. |
| max_rating | number | Only include apps at or below this average rating, e.g. 4.0. |
| storefront | string | Two-letter App Store region. The value is region identity, never a label. |
| max_rating_count | integer | Optional ceiling to exclude unassailable giants. |
| min_rating_count | integer | Rating volume is the install proxy. On /api/lens this remains a legacy alias for the scaled value; /api/hotspots uses it literally. |
| include_institutional | boolean | Include institution-locked products that a solo dev cannot win. |
| min_rating_count_scaled | integer | Pre-scaled rating volume filter. /api/lens applies max(300, floor(value / 3)); /api/paying applies max(200, floor(value / 5)). |
{
"type": "object",
"required": [],
"properties": {
"genre": {
"type": "string",
"description": "Restrict to one App Store category, e.g. Productivity."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 200,
"description": "Maximum number of results to return."
},
"max_rating": {
"type": "number",
"description": "Only include apps at or below this average rating, e.g. 4.0."
},
"storefront": {
"type": "string",
"default": "us",
"description": "Two-letter App Store region. The value is region identity, never a label."
},
"max_rating_count": {
"type": "integer",
"default": 0,
"description": "Optional ceiling to exclude unassailable giants."
},
"min_rating_count": {
"type": "integer",
"default": 5000,
"description": "Rating volume is the install proxy. On /api/lens this remains a legacy alias for the scaled value; /api/hotspots uses it literally."
},
"include_institutional": {
"type": "boolean",
"default": false,
"description": "Include institution-locked products that a solo dev cannot win."
},
"min_rating_count_scaled": {
"type": "integer",
"default": 5000,
"description": "Pre-scaled rating volume filter. /api/lens applies max(300, floor(value / 3)); /api/paying applies max(200, floor(value / 5))."
}
}
}Rank App Store opportunities in apps that already have a large user base but whose users are clearly unhappy (unmet demand). Returns a ranked table with tier, score, rating and scale. Use this first when deciding what app to build.
| Argument | Type | Description |
|---|---|---|
| genre | string | Restrict to one App Store category, e.g. Productivity. |
| limit | integer | Maximum number of results to return. |
| max_rating | number | Only include apps at or below this average rating, e.g. 4.0. |
| storefront | string | Two-letter App Store region. The value is region identity, never a label. |
| max_rating_count | integer | Optional ceiling to exclude unassailable giants. |
| min_rating_count | integer | Rating volume is the install proxy. On /api/lens this remains a legacy alias for the scaled value; /api/hotspots uses it literally. |
| include_institutional | boolean | Include institution-locked products that a solo dev cannot win. |
| min_rating_count_scaled | integer | Pre-scaled rating volume filter. /api/lens applies max(300, floor(value / 3)); /api/paying applies max(200, floor(value / 5)). |
Produce a ready-to-build product specification for an opportunity, formatted for a specific AI coding agent (codex, claude, or cursor). Includes the wedge, the verbatim complaints to fix, verified open-source accelerators, and a verification plan.
| Argument | Type | Description |
|---|---|---|
| app_id* | integer | App Store track id. |
| target | string | AI coding agent that will receive the brief. |
| storefront | string | Two-letter App Store region. The value is region identity, never a label. |
{
"type": "object",
"required": [
"app_id"
],
"properties": {
"app_id": {
"type": "integer",
"description": "App Store track id."
},
"target": {
"enum": [
"codex",
"claude",
"cursor"
],
"type": "string",
"default": "codex",
"description": "AI coding agent that will receive the brief."
},
"storefront": {
"type": "string",
"default": "us",
"description": "Two-letter App Store region. The value is region identity, never a label."
}
}
}Full evidence dossier for one app: score breakdown, plain-language diagnosis, complaint themes with verbatim user quotes, review provenance, and matching open-source accelerators. Use after find_low_hanging_fruit to inspect a specific candidate.
| Argument | Type | Description |
|---|---|---|
| app_id* | integer | App Store track id. |
| storefront | string | Two-letter App Store region. The value is region identity, never a label. |
| include_github | boolean | MCP name for the REST with_github switch. |
{
"type": "object",
"required": [
"app_id"
],
"properties": {
"app_id": {
"type": "integer",
"description": "App Store track id."
},
"storefront": {
"type": "string",
"default": "us",
"description": "Two-letter App Store region. The value is region identity, never a label."
},
"include_github": {
"type": "boolean",
"default": true,
"description": "MCP name for the REST with_github switch."
}
}
}Report local data coverage (apps, reviews, chart snapshots) and the last ingest run.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Find maintained, commercially reusable open-source projects for a niche, with license posture. Use to avoid rebuilding infrastructure and to check whether a dependency is safe to ship.
| Argument | Type | Description |
|---|---|---|
| genre | string | Restrict to one App Store category, e.g. Productivity. |
| limit | integer | Maximum number of results to return. |
| theme | string | Complaint theme key, e.g. data_loss_sync, paywall_aggressive, ai_quality. |
{
"type": "object",
"required": [],
"properties": {
"genre": {
"type": "string",
"description": "Restrict to one App Store category, e.g. Productivity."
},
"limit": {
"type": "integer",
"default": 6,
"maximum": 200,
"description": "Maximum number of results to return."
},
"theme": {
"type": "string",
"description": "Complaint theme key, e.g. data_loss_sync, paywall_aggressive, ai_quality."
}
}
}Rank app categories by evidence that users already pay inside them: how many of its apps reach the store-wide Top-Grossing chart, how many charge upfront, paywall language in sampled reviews, and review depth. Call this before building to confirm a market monetises.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return. |
| storefront | string | Two-letter App Store region. The value is region identity, never a label. |
| min_rating_count | integer | Rating volume is the install proxy. On /api/lens this remains a legacy alias for the scaled value; /api/hotspots uses it literally. |
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 200,
"description": "Maximum number of results to return."
},
"storefront": {
"type": "string",
"default": "us",
"description": "Two-letter App Store region. The value is region identity, never a label."
},
"min_rating_count": {
"type": "integer",
"default": 5000,
"description": "Rating volume is the install proxy. On /api/lens this remains a legacy alias for the scaled value; /api/hotspots uses it literally."
}
}
}{
"type": "object",
"required": [],
"properties": {
"genre": {
"type": "string",
"description": "Restrict to one App Store category, e.g. Productivity."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 200,
"description": "Maximum number of results to return."
},
"max_rating": {
"type": "number",
"description": "Only include apps at or below this average rating, e.g. 4.0."
},
"storefront": {
"type": "string",
"default": "us",
"description": "Two-letter App Store region. The value is region identity, never a label."
},
"max_rating_count": {
"type": "integer",
"default": 0,
"description": "Optional ceiling to exclude unassailable giants."
},
"min_rating_count": {
"type": "integer",
"default": 5000,
"description": "Rating volume is the install proxy. On /api/lens this remains a legacy alias for the scaled value; /api/hotspots uses it literally."
},
"include_institutional": {
"type": "boolean",
"default": false,
"description": "Include institution-locked products that a solo dev cannot win."
},
"min_rating_count_scaled": {
"type": "integer",
"default": 5000,
"description": "Pre-scaled rating volume filter. /api/lens applies max(300, floor(value / 3)); /api/paying applies max(200, floor(value / 5))."
}
}
}