AppTierList
Find iPhone apps by use case: ranked S to F tier lists from public App Store data. Read-only, no key.
Hosted MCP Server
npx add-mcp 'https://apptierlist.com/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
AppTierList for AI agents
An AI agent can read every AppTierList ranking directly: 1,301 lists of iPhone apps ranked S to F by use case, each with the score behind it, from public App Store data and, as a small component, verified ownership (weighted like Editors' Choice; never a tier on its own; updated daily). 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 score components, per-store search ranks, membership status (active), 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.find_alternatives: Apps that do the same job as the given app, in three groups: most_similar (S to C tier; apps that also sit in more of this app's other categories first, then the same App Store genre, then tier), top_rated (the category's own order) and best_free (free to download, in-app purchases allowed); each app in one group at most, every one with why it is there (shared_lists, same_genre, free).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, 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 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} (ranked apps without screenshots, the rest compact: full details are at each app's api_url), 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. Rate limited per IP; heavy use or a used-up daily budget is refused (HTTP 429 or 403) with Retry-After where possible. Wait the Retry-After seconds and ask again. During an attack, search and MCP may answer HTTP 503 with a Retry-After header for every client until the load drops, while pages and records keep serving cached copies; unverified clients may also get a challenge for at most 3 hours. Verified bots are never challenged. 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.