OpenApps
Rankings, launches and featuring across the ChatGPT, Claude, Cursor and Grok Bot app stores.
Should I use this
Quality & Safety
Findings (4)
- HIGH
- LOWin market_get
- LOWin feedback_send
- LOWin fetch
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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": {
"openapps": {
"url": "https://theopenapps.com/mcp"
}
}
}Remote endpoints
https://theopenapps.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (14)
🟢changes_list(store, region, since, apps, types, ...)
Use this when the user asks what changed in a store: chart moves, featuring, launches, delistings, metric moves or MCP changes, newest first with counts per type. Do not use for a chart's full current order; use charts_get.
Input Schema
{
"type": "object",
"properties": {
"store": {
"type": "string",
"enum": [
"chatgpt",
"claude",
"cursor",
"grokbot"
]
},
"region": {
"type": "string",
"description": "ChatGPT country code (default us)."
},
"since": {
"default": "-24h",
"type": "string",
"description": "Window start: ISO-8601 or -24h, -7d."
},
"apps": {
"type": "array",
"items": {
"type": "string"
},
"description": "Listing refs or OpenApps URLs."
},
"types": {
"type": "array",
"items": {
"type": "string",
"enum": [
"rank_move",
"chart_enter",
"chart_exit",
"featuring_enter",
"featuring_exit",
"launch",
"toolset_change",
"listing_change",
"release_change",
"mcp_status_change",
"delisted",
"metric_change"
]
},
"description": "Default: all but release_change."
},
"limit": {
"type": "integer"
},
"cursor": {
"type": "string"
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
},
"required": [
"store"
]
}🟢new_list(store, since, sort, limit, cursor, ...)
Use this when the user asks which apps are new in a store since a time, by launch date or else the day each went live. Do not use for rank or toolset changes; use changes_list.
Input Schema
{
"type": "object",
"properties": {
"store": {
"type": "string",
"enum": [
"chatgpt",
"claude",
"cursor",
"grokbot"
]
},
"since": {
"default": "-24h",
"type": "string",
"description": "Window start: ISO-8601 or -24h, -7d."
},
"sort": {
"default": "released_at",
"type": "string",
"enum": [
"released_at",
"first_seen_at"
]
},
"limit": {
"type": "integer"
},
"cursor": {
"type": "string"
},
"category": {
"type": "string",
"description": "Category title (ChatGPT)."
},
"kinds": {
"type": "array",
"items": {
"type": "string"
},
"description": "e.g. claude:connector; stores_get lists them."
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
},
"required": [
"store"
]
}🟢stores_get(store, guide, response_format, context)
Use this when you need stores, app counts, countries, freshness, charts or metrics. Pass store for chart names. guide returns a playbook's steps: weekly_brief (a store's week), competitor_watch (compare apps), audit_my_server (an MCP server's tools). Do not use for rankings; use charts_get.
Input Schema
{
"type": "object",
"properties": {
"store": {
"type": "string",
"enum": [
"chatgpt",
"claude",
"cursor",
"grokbot"
]
},
"guide": {
"type": "string",
"enum": [
"weekly_brief",
"competitor_watch",
"audit_my_server"
]
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
}
}🟢charts_get(store, chart, region, at, kinds, ...)
Use this when you need a chart now or at a past time, with movement and 1-based positions. Do not use for a listing across charts; use listings_profile.
Input Schema
{
"type": "object",
"properties": {
"store": {
"type": "string",
"enum": [
"chatgpt",
"claude",
"cursor",
"grokbot"
]
},
"chart": {
"type": "string",
"description": "Chart name; stores_get lists them."
},
"region": {
"type": "string",
"description": "ChatGPT country code (default us)."
},
"at": {
"type": "string",
"description": "Past time: ISO-8601 or -24h, -7d."
},
"kinds": {
"type": "array",
"items": {
"type": "string"
},
"description": "e.g. claude:connector; stores_get lists them."
},
"limit": {
"type": "integer"
},
"cursor": {
"type": "string"
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
},
"required": [
"store",
"chart"
]
}🟢leaderboards_get(store, metric, kinds, limit, cursor, ...)
Use this when the user asks which apps lead a store by a published number. claude: installs, popularity_score, trending_score, gh_stars; cursor: dir_installs, dir_stars. Do not use for chart positions; use charts_get.
Input Schema
{
"type": "object",
"properties": {
"store": {
"type": "string",
"enum": [
"chatgpt",
"claude",
"cursor",
"grokbot"
]
},
"metric": {
"type": "string",
"description": "Metric name; stores_get lists each store's."
},
"kinds": {
"type": "array",
"items": {
"type": "string"
},
"description": "e.g. claude:connector; stores_get lists them."
},
"limit": {
"type": "integer"
},
"cursor": {
"type": "string"
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
},
"required": [
"store",
"metric"
]
}🟢scores_list(store, chart, limit, cursor, response_format, ...)
Use this when the user asks which apps are popular in a store over the last month: OpenApps Rank, a 28-day aggregate of its popularity charts, with tier and momentum. Do not use for one day's chart order (charts_get) or published counts (leaderboards_get).
Input Schema
{
"type": "object",
"properties": {
"store": {
"type": "string",
"enum": [
"chatgpt",
"claude",
"cursor",
"grokbot"
]
},
"chart": {
"type": "string",
"description": "Chart name; stores_get lists them."
},
"limit": {
"type": "integer"
},
"cursor": {
"type": "string"
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
},
"required": [
"store"
]
}🟢listings_search(query, publisher, store, kind, limit, ...)
Use this when you need an app's ref from its name, its publisher, a brand it works with or what it does ("create jira ticket"); one row per app, best match first. Do not use for popularity or rankings; use charts_get.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Words in app names, descriptions or publishers."
},
"publisher": {
"type": "string",
"description": "Publisher name, in any form."
},
"store": {
"type": "string",
"enum": [
"chatgpt",
"claude",
"cursor",
"grokbot"
]
},
"kind": {
"type": "string",
"enum": [
"app",
"connector",
"plugin",
"desktop_extension",
"directory_rule",
"directory_mcp"
]
},
"limit": {
"type": "integer"
},
"cursor": {
"type": "string"
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
},
"required": [
"query"
]
}🟢featuring_history(store, app, chart, region, since, ...)
Use this when you need when and where apps were featured, per app or home shelf, over at most 30 days. Do not use for current shelf order; use charts_get.
Input Schema
{
"type": "object",
"properties": {
"store": {
"type": "string",
"enum": [
"chatgpt",
"claude",
"cursor",
"grokbot"
]
},
"app": {
"type": "string",
"description": "Listing ref or OpenApps URL."
},
"chart": {
"type": "string",
"description": "Chart name; stores_get lists them."
},
"region": {
"type": "string",
"description": "ChatGPT country code (default us)."
},
"since": {
"default": "-24h",
"type": "string",
"description": "Window start: ISO-8601 or -24h, -7d."
},
"at": {
"type": "string",
"description": "Past time: ISO-8601 or -24h, -7d."
},
"limit": {
"type": "integer"
},
"cursor": {
"type": "string"
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
},
"required": [
"store"
]
}🟢listings_profile(apps, include, response_format, context)
Use this when you need a listing profile, or up to 5 (Pro): its app, country availability, ranks, metrics and MCP tools. Stale or refused countries read unknown. Do not use for discovery; use listings_search.
Input Schema
{
"type": "object",
"properties": {
"apps": {
"type": "array",
"items": {
"type": "string"
},
"description": "Listing refs or OpenApps URLs."
},
"include": {
"default": [
"ranks",
"metrics",
"tools"
],
"type": "array",
"items": {
"type": "string",
"enum": [
"ranks",
"metrics",
"tools"
]
},
"description": "Sections per profile."
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
},
"required": [
"apps"
]
}🟢mcp_toolset_get(app, server, at, diff_from, response_format, ...)
Use this when you need a tracked app or server's stored MCP tools or changes. at selects a past snapshot; diff_from compares versions. Do not use for arbitrary URLs; only tracked servers.
Input Schema
{
"type": "object",
"properties": {
"app": {
"type": "string",
"description": "Listing ref or OpenApps URL."
},
"server": {
"type": "string",
"description": "MCP server URL."
},
"at": {
"type": "string",
"description": "Past time: ISO-8601 or -24h, -7d."
},
"diff_from": {
"type": "string",
"description": "Earlier toolset: snapshot hash or time."
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
}
}🟢market_get(store, response_format, context)
Use this when you need store sizes, weekly launches, app kinds or MCP ecosystem statistics. Do not use for app profiles or rankings.
Input Schema
{
"type": "object",
"properties": {
"store": {
"type": "string",
"enum": [
"chatgpt",
"claude",
"cursor",
"grokbot"
]
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
]
},
"context": {
"type": "string",
"description": "The user's goal, briefly."
}
}
}🟢search(query)
Use this when ChatGPT deep research needs listings, apps, tags (query tag:<id>), charts or tracked MCP URLs. Returns typed ids for fetch. Do not use for rankings or events; use charts_get or changes_list.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Words in app names, descriptions or publishers."
}
},
"required": [
"query"
]
}Output Schema
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object"
}
}
}
}🟢fetch(id)
Use this when ChatGPT deep research needs a document for an id returned by search: listing, app, tag, chart or MCP toolset. Do not use for ids outside search results.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A search result id: listing:{store}:{plugin_id}, app:{slug}, tag:{id}, chart:{store}:{chart} or server:{url}."
}
},
"required": [
"id"
]
}Output Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"text": {
"type": "string"
},
"url": {
"type": "string"
},
"metadata": {
"type": "object"
}
}
}🟡feedback_send(issue, summary, initiator, details, tool, ...)
Use this when OpenApps' tools or data fail the user: an error, data the user says is wrong (such as an app bound to the wrong listing), a missing capability, or something confusing. Ask the user before sending a report they did not ask for. It is stored privately with the caller's account and client; no reply comes in this conversation. Summarize; never include secrets or personal data. Do not use for other servers or the client app; it does not finish the user's task.
Input Schema
{
"type": "object",
"properties": {
"issue": {
"type": "string",
"enum": [
"bug",
"wrong_data",
"missing_capability",
"confusing",
"other"
]
},
"summary": {
"type": "string",
"description": "One line."
},
"initiator": {
"type": "string",
"enum": [
"user",
"model"
],
"description": "user if the user asked for it, else model."
},
"details": {
"type": "string"
},
"tool": {
"type": "string"
},
"subject_type": {
"type": "string",
"enum": [
"app",
"listing",
"binding",
"publisher",
"tag",
"chart",
"server"
]
},
"subject_id": {
"type": "string",
"description": "Ref, slug or URL."
},
"request_id": {
"type": "string",
"description": "From an error answer."
}
},
"required": [
"issue",
"summary",
"initiator"
]
}Community
Evidence