App Store Operator
Free App Store competitive intelligence for Claude — rival downloads, revenue, and ASO keywords. MCP server, no subscription.
README
App Store Operator
<p align="center"> <a href="https://www.npmjs.com/package/app-store-operator"><img src="https://img.shields.io/npm/v/app-store-operator?color=6366f1&label=npm" alt="npm"></a> <a href="https://www.npmjs.com/package/app-store-operator"><img src="https://img.shields.io/npm/dm/app-store-operator?color=818cf8&label=downloads" alt="downloads"></a> <a href="#license"><img src="https://img.shields.io/badge/license-MIT-green" alt="license"></a> <a href="https://nodejs.org"><img src="https://img.shields.io/badge/node-%E2%89%A518-brightgreen" alt="node"></a> <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-compatible-6366f1" alt="MCP"></a> </p>
App Store competitive intelligence, inside Claude.
App Store Operator is an MCP server that brings App Store research directly into your AI assistant. Instead of switching to a dashboard, you ask Claude for ranked keyword results, competitor download and revenue estimates, or App Store Connect-ready In-App Event copy — and get the answer in the same conversation where you are making the decision.
Built for indie iOS developers who want research inside their workflow rather than in another browser tab. Free and open source (MIT). A lightweight alternative to SensorTower, AppTweak, and AppFollow for iOS-only competitive research.
claude mcp add --transport stdio app-store-operator -- npx -y app-store-operator@latest
→ app-store-operator.com · Setup guide
What it does
Searches the App Store for competing apps on a given keyword and pulls detailed analytics from SensorTower — downloads, revenue, ratings, top markets, publisher info, and more.
search_app_store and prepare_iae work with no account at all. research_rivals and
get_app_details open a browser once for a free SensorTower sign-in, then reuse that
saved session — no paid plan, no API key.
Tools
research_rivals
Finds the top 3 apps for a keyword and returns a full metrics report for each.
| Parameter | Type | Description |
|---|---|---|
keyword |
string | Search term to look up (e.g. meditation, psikoloji) |
country |
string | Two-letter country code (e.g. us, tr, gb) |
Returns for each competitor:
- App Store & SensorTower URLs
- Worldwide and last-month downloads & revenue
- Rating score
- Publisher, categories, top markets
- Release date, last updated, supported languages
- In-app purchases and ad network presence
search_app_store
Searches the App Store for a keyword and returns ranked results as a markdown table — instantly, no SensorTower required.
| Parameter | Type | Description |
|---|---|---|
keyword |
string | Search term to look up |
country |
string | Two-letter country code |
limit |
number | Number of results to return (1–25, default 3) |
Use this to discover which apps rank before deciding which to analyse. Follow up with get_app_details for analytics on specific apps.
get_app_details
Fetches SensorTower analytics for one or more app IDs you already have.
| Parameter | Type | Description |
|---|---|---|
app_ids |
array | Numeric App Store IDs (e.g. from search_app_store) |
country |
string | Two-letter country code |
Returns for each app:
- Downloads and revenue (worldwide + last month)
- Rating score
- Publisher, categories, top markets
- Release date, last updated, supported languages
- In-app purchases and ad network presence
prepare_iae
Generates iOS App Store In-App Event (IAE) copy — 3 variations in the target language, then a final report.
| Parameter | Type | Description |
|---|---|---|
keywords |
array | Ordered keywords by priority (index 0–2 = Tier 1, 3–6 = Tier 2, 7–9 = Tier 3) |
locale |
string | Target locale (e.g. en-us, en-gb, de-de, tr, ja, ko) |
event_purpose |
string | What the event is about and why users should care |
audience |
string | Target audience (e.g. students, professionals, parents) |
event_context |
string | Real-world hook tying the event to a moment (e.g. a holiday, season) |
goal |
string | Primary conversion goal (e.g. attract new users, boost engagement) |
tone |
string | Copy tone: Engaging, Playful, Motivational, Authoritative, Calm, or Urgent |
Returns: a structured brief used to generate 3 copy variations, each with event name (≤30 chars), short description (≤50 chars), and long description (≤120 chars).
Requirements
- Node.js v18+
Usage
As an MCP server (Claude Code / Claude Desktop / OpenAI Codex)
Claude Code — run this command once:
claude mcp add --transport stdio app-store-operator -- npx -y app-store-operator@latest
Claude Desktop — add to your MCP config:
{
"mcpServers": {
"app-store-operator": {
"command": "npx",
"args": ["app-store-operator@latest"]
}
}
}
OpenAI Codex — run this command once:
codex mcp add app-store-operator -- npx -y app-store-operator@latest
Codex stores MCP servers in ~/.codex/config.toml. If you prefer to edit it directly:
[mcp_servers.app-store-operator]
command = "npx"
args = ["-y", "app-store-operator@latest"]
# Optional but useful for SensorTower scraping flows
startup_timeout_sec = 20
tool_timeout_sec = 180
Then restart Codex or start a new thread, and ask things like:
Research rivals for "hairstyle" in the GB App StoreSearch the App Store for "beard style" in FrancePrepare an in-app event for a summer hairstyle campaign in en-gb
No installation step needed — npx fetches and runs the package automatically.
The server communicates over stdio and is designed to be invoked by an MCP client. It advertises server-wide instructions during initialize so clients route between the tools correctly, and returns an MCP tool error when SensorTower login is required.
How it works
- Queries the iTunes Search API for the top 3 apps matching the keyword and country
- For each app, drives a Chromium browser to scrape SensorTower analytics
- Extracts metrics and returns a compiled plain-text report
SensorTower data is scraped via Playwright because it is rendered client-side.
A browser window will open. This is deliberate, not a bug: SensorTower requires a login, so the first run opens a visible window for you to sign in. The session is saved to ~/.app-store-operator/profile and reused on every later call, so you only log in once. If a tool reports not_logged_in, finish signing in on that window and run the tool again.
Results from research_rivals are cached for 24 hours in ~/.app-store-operator/cache.json — override the TTL with the ASO_CACHE_TTL_HOURS environment variable.
Project structure
src/
├── index.js # MCP server setup and request handlers
├── shared.js # App Store lookup + SensorTower scraping
├── cache.js # 24h local cache (research_rivals only)
└── tools/
├── research-rivals.js # research_rivals tool
├── search-app-store.js # search_app_store tool
├── get-app-details.js # get_app_details tool
└── prepare-iae.js # prepare_iae tool
scripts/postinstall.js # installs Playwright Chromium on install
test/smoke-test-mcp.js # stdio smoke test
Development
Run the smoke test to verify the server boots and exposes every tool over stdio — it checks initialize (including server instructions) and tools/list:
npm run smoke
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。