minradar

App Store opportunity data for coding agents: unmet demand, paying markets, build briefs.

Should I use this

Quality & Safety

A
Description quality
94%
Schema completeness
77%
Naming quality
93%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • LOWTool 'explain_method' description lacks action verbin explain_method
  • LOWTool 'search_open_source_accelerators' name length outside 3-30 rangein search_open_source_accelerators

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,385Tokens (tool definitions)
~1.5 KBTypical response size
Moderate attention impact (1.08% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "minradar": {
      "url": "https://minradar.com/mcp"
    }
  }
}

Remote endpoints

https://minradar.com/mcpstreamable-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢find_unmet_demand(storefront, limit, min_rating_count, min_rating_count_scaled, max_rating_count, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "storefront": {
      "type": "string",
      "default": "us",
      "description": "Two-letter App Store region. The value is region identity, never a label."
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 200,
      "description": "Maximum number of results to return."
    },
    "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."
    },
    "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))."
    },
    "max_rating_count": {
      "type": "integer",
      "default": 0,
      "description": "Optional ceiling to exclude unassailable giants."
    },
    "max_rating": {
      "type": "number",
      "description": "Only include apps at or below this average rating, e.g. 4.0."
    },
    "genre": {
      "type": "string",
      "description": "Restrict to one App Store category, e.g. Productivity."
    },
    "include_institutional": {
      "type": "boolean",
      "default": false,
      "description": "Include institution-locked products that a solo dev cannot win."
    }
  },
  "required": []
}
🔴find_solo_buildable(storefront, limit, min_rating_count, min_rating_count_scaled, max_rating_count, ...)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "storefront": {
      "type": "string",
      "default": "us",
      "description": "Two-letter App Store region. The value is region identity, never a label."
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 200,
      "description": "Maximum number of results to return."
    },
    "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."
    },
    "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))."
    },
    "max_rating_count": {
      "type": "integer",
      "default": 0,
      "description": "Optional ceiling to exclude unassailable giants."
    },
    "max_rating": {
      "type": "number",
      "description": "Only include apps at or below this average rating, e.g. 4.0."
    },
    "genre": {
      "type": "string",
      "description": "Restrict to one App Store category, e.g. Productivity."
    },
    "include_institutional": {
      "type": "boolean",
      "default": false,
      "description": "Include institution-locked products that a solo dev cannot win."
    }
  },
  "required": []
}
⚪validate_paying_market(storefront, limit, min_rating_count)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "storefront": {
      "type": "string",
      "default": "us",
      "description": "Two-letter App Store region. The value is region identity, never a label."
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 200,
      "description": "Maximum number of results to return."
    },
    "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."
    }
  },
  "required": []
}
🟢get_opportunity_brief(app_id, storefront, include_github)

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.

Input Schema

{
  "type": "object",
  "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."
    }
  },
  "required": [
    "app_id"
  ]
}
⚪generate_app_brief(app_id, storefront, target)

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.

Input Schema

{
  "type": "object",
  "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."
    },
    "target": {
      "type": "string",
      "enum": [
        "codex",
        "claude",
        "cursor"
      ],
      "default": "codex",
      "description": "AI coding agent that will receive the brief."
    }
  },
  "required": [
    "app_id"
  ]
}
🟢search_open_source_accelerators(genre, theme, limit)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "genre": {
      "type": "string",
      "description": "Restrict to one App Store category, e.g. Productivity."
    },
    "theme": {
      "type": "string",
      "description": "Complaint theme key, e.g. data_loss_sync, paywall_aggressive, ai_quality."
    },
    "limit": {
      "type": "integer",
      "default": 6,
      "maximum": 200,
      "description": "Maximum number of results to return."
    }
  },
  "required": []
}
🟢explain_method

Explain the scoring formulas, weights, and the honest limitations of the data. Use when a user questions the numbers.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": []
}
⚪market_stats

Report local data coverage (apps, reviews, chart snapshots) and the last ingest run.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": []
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools
verifiedversion not recorded8 tools