Skip to content

AppTierList › For AI agents

AppTierList for AI agents

An AI agent can read every AppTierList ranking directly: 834 lists of iPhone apps ranked S to F by use case, each with the score behind it, from public App Store data. The MCP server and the JSON API are free, need no key, and only read.

MCP server

Server URL: https://apptierlist.com/mcp. Streamable HTTP, stateless, JSON-RPC 2.0 over POST, protocol 2025-06-18 (older revisions are answered too).

Connect

  • Claude (web and desktop): Settings, Connectors, Add custom connector. Name it AppTierList and paste the server URL. No key.
  • Claude Code: One command:
    claude mcp add --transport http apptierlist https://apptierlist.com/mcp
  • ChatGPT: With developer mode on, add a connector with the server URL and no authentication. The search and fetch tools are the ones ChatGPT's connectors call.
  • Cursor: In ~/.cursor/mcp.json:
    { "mcpServers": { "apptierlist": { "url": "https://apptierlist.com/mcp" } } }
  • VS Code: In .vscode/mcp.json:
    { "servers": { "apptierlist": { "type": "http", "url": "https://apptierlist.com/mcp" } } }
  • Any other client: Any MCP client that speaks Streamable HTTP: the server URL below, no key.

Tools

  • list_categories: Every ranked category (product type): slug, title, section, parent, how many apps are tiered, its #1 app, ranking_status (ranked; under_review: fewer than 6 apps checked against it yet; too_few: fewer than 6 apps in it at all; either way no ranking and no #1) and under_review_count (apps listed but not checked yet).
  • get_category: The tier list for one category: members in order with tier, score, the four score components, per-store search ranks, membership status (active|contested), confidence (normal|provisional), maker verification, freshness.
  • get_app: One app by slug or App Store id: App Store facts, generated summary, every category membership with tier/score/status/confidence and review_status (checked, or under_review: not checked against that category yet, so tier and position are null) and list_ranking_status (the category's own ranking_status: tier and position are null unless it is ranked), main_list (the list slug of the app's main job: the first category the placer marked primary on the current App Store listing; null when no read of the current listing marks one (never guessed).
  • search_apps: Find categories by name or definition and apps by name, word by word: 'best free ai companion', 'apps like calm' (the categories Calm is ranked in), 'chat gpt'.
  • explain_ranking: Why an app sits where it does: score components per category, per-store search ranks, every judge verdict (with reason, whether it is current for the app's present listing and the category's present definition), and the app's change history.
  • compare_apps: Side-by-side tier, position, score and components for two or more apps in one category (or in every category they share when list is omitted).
  • recent_changes: Append-only history: memberships added/removed/contested, tier changes, categories created/activated/archived, apps discovered/missing.
  • health: Is the data being maintained: per-job last success and next due time, provider cool-downs, invariant check status, counts of contested memberships, pending judgments, stale apps, and public_unchecked (memberships shown as under review, expected to fall to 0).
  • search: Search categories and apps; returns results with an id to pass to fetch (list:<slug> for a category's ranking, app:<slug> for an app), a title and a URL.
  • fetch: One document by the id search returned: list:<slug> is the category's ranking (compact members), app:<slug> the app's full record.

Try asking

  • best free VPN apps for iPhone
  • apps like Calm
  • which AI companion apps are ranked highest, and why
  • compare ChatGPT and Claude in the AI chat assistant list
  • what changed in the dating app rankings this week

JSON API

The same records over plain HTTP: /api/v1 (index and field meanings),OpenAPI, every list, one list at /api/v1/lists/{slug}, one app at /api/v1/apps/{slug or App Store id}, and what changed at /api/v1/changes?after_id=.

For language models: /llms.txt (a map of the site) and /llms-full.txt (the top 10 of every list).

Limits and freshness

No key and no sign-up. One address may send 10 requests every 10 seconds to the API, the MCP server and the llms files; beyond that the answer is HTTP 429 with a Retry-After header: wait that many seconds and ask again. App records (/api/v1/apps/) are limited for every client, crawlers included. This is where we start and we expect to raise it. Records are cached for up to 300 seconds, so poll /api/v1/changes?after_id= (start at 0, then send the next_after_id it returns) rather than re-reading every list. Every app is re-read from the App Store at least every two days, each list's App Store search ranks about twice a day.

Rankings are computed, never sold: see how we rank.