关于 App Store Operator
App Store Operator 是面向独立 iOS 开发者的开源 MCP 服务,用于研究竞品和 App Store 关键词。它结合商店搜索、SensorTower 分析与应用内活动文案准备,且对外部账户仅提供只读访问。
主要功能
- 01搜索 App Store 排名结果
- 02查看竞品下载量和收入估算
- 03获取评分与市场详情
- 04撰写应用内活动文案
- 05提供只读工具、提示词和资源
适用场景
- 01查找目标关键词的排名应用
- 02比较不同市场的竞品指标
- 03准备本地化应用内活动文案
MCP 相关
向 MCP 客户端提供 4 个工具、6 个提示词和 7 个资源。搜索与活动文案工具无需账户;SensorTower 分析工具需要免费登录。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
4收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| country | string | 是 | 两字母 App Store 国家/地区代码(例如:us、gb、tr) |
| keyword | string | 是 | 要在 App Store 中搜索的关键词(例如:psikoloji、meditation) |
详细介绍
App Store Operator
在 Claude 中获取 App Store 竞争情报。
App Store Operator 是一个 MCP 服务,可将 App Store 研究直接带入你的 AI 助手。无需切换到仪表板,只需向 Claude 询问排名靠前的关键词结果、竞争对手的下载量和收入估算,或可直接用于 App Store Connect 的 App 内活动文案——然后就在你做决策的对话中获得答案。
专为希望在工作流中而不是另一个浏览器标签页里进行研究的独立 iOS 开发者打造。免费且开源(MIT)。对于仅限 iOS 的竞争研究,它是 SensorTower、AppTweak 和 AppFollow 的轻量级替代方案。
claude mcp add --transport stdio app-store-operator -- npx -y app-store-operator@latest
→ app-store-operator.com · 设置指南
功能
按指定关键词搜索 App Store 中的竞品应用,并从 SensorTower 获取详细分析数据——下载量、收入、评分、主要市场、发布者信息等。
search_app_store 和 prepare_iae 完全无需账号即可使用。research_rivals 和
get_app_details 会打开一次浏览器,用于登录 SensorTower 免费账号,之后会重复使用保存的会话——无需付费套餐或 API 密钥。
该服务提供的所有内容——四个工具、六个提示词、七个资源——均为只读。不会向你的 App Store Connect 账号、SensorTower 或本地缓存文件以外的任何位置写入数据。
工具
research_rivals
查找指定关键词下排名前 3 的应用,并为每个应用返回完整的指标报告。
| 参数 | 类型 | 描述 |
|---|---|---|
keyword | string | 要查询的搜索词(例如 meditation、psikoloji) |
country | string | 两位字母的国家代码(例如 us、tr、gb) |
每个竞品返回的信息:
- App Store 和 SensorTower 链接
- 全球及上月下载量和收入
- 评分和评分数量
- 发布者、类别、主要市场
- 发布日期、最近更新日期、支持的语言
- 应用内购买和广告网络信息
缓存 24 小时,因此再次查询相同关键词和国家时无需付费,也不会打开浏览器。
search_app_store
按关键词搜索 App Store,并立即以 Markdown 表格形式返回排名结果,无需 SensorTower。
| 参数 | 类型 | 描述 |
|---|---|---|
keyword | string | 要查询的搜索词 |
country | string | 两位字母的国家代码 |
limit | number | 返回结果数量(1–25,默认值为 3) |
先用此工具了解哪些应用排名靠前,再决定要分析哪些应用。随后可使用 get_app_details 获取特定应用的分析数据。
get_app_details
获取一个或多个你已有应用 ID 的 SensorTower 分析数据。
| 参数 | 类型 | 说明 |
|---|---|---|
app_ids | array | 数字形式的 App Store ID(例如来自 search_app_store) |
country | string | 两位国家代码 |
每个应用返回:
- 下载量和收入(全球及上个月)
- 评分和评分数
- 发布者、类别、主要市场
- 发布日期、上次更新时间、支持的语言
- 应用内购买和广告网络信息
不会缓存——每次调用都会抓取最新数据,每个应用 ID 大约需要 10–20 秒。
prepare_iae
生成 iOS App Store 应用内活动(IAE)文案——使用目标语言生成 3 个版本,然后提供最终报告。
| 参数 | 类型 | 说明 |
|---|---|---|
keywords | array | 按优先级排序的关键词(索引 0–2 = 第 1 级,3–6 = 第 2 级,7–9 = 第 3 级) |
locale | string | 目标区域设置(例如 en-us、en-gb、de-de、tr、ja、ko) |
event_purpose | string | 活动主题及其对用户的意义 |
audience | string | 目标受众(例如学生、专业人士、家长) |
event_context | string | 将活动与某个时刻联系起来的现实背景(例如节日、季节) |
goal | string | 主要转化目标(例如吸引新用户、提升参与度) |
tone | string | 文案语气:Engaging、Playful、Motivational、Authoritative、Calm 或 Urgent |
返回: 一份结构化简报,用于生成 3 个文案版本;每个版本包含活动名称(≤30 个字符)、简短描述(≤50 个字符)和详细描述(≤120 个字符)。
SensorTower 未提供或设为付费墙限制的任何字段,都会返回 N/A。
服务会报告数据缺口,而不会补填;下方的提示词也会要求助手这样做。
提示词
六个现成的工作流,已将上述工具串联起来,因此你无需自行描述调用顺序。在 Claude Code 中,它们会显示为斜杠命令;其他客户端会在提示词选择器中展示。
| 提示词 | 参数 | 功能 |
|---|---|---|
competitor_snapshot | keyword、country | 获取某个关键词的竞品分析数据,然后说明该关键词由谁主导以及竞争有多激烈 |
keyword_shortlist | seed_keyword、country、count? | 扩展种子关键词以生成候选词,用实时搜索结果逐一验证,并按 进攻 / 观察 / 跳过 排序 |
app_teardown | app_ids、country | 拆解已知应用——规模、地位、变现、覆盖范围、发展势头、获客情况 |
positioning_gap | keyword、country、my_app_id | 用同一套指标衡量你的应用和现有领先应用,并区分 落后 与 可进攻 |
metadata_rewrite | app_name、keyword、country、must_keep? | 提供 3 组名称 / 副标题 / 关键词字段方案,并根据 Apple 的限制统计字符数 |
in_app_event | event_context、locale、keywords?、audience?、tone? | 执行完整的应用内活动流程,并询问 prepare_iae 尚需的内容 |
标有 ? 的参数为可选。每个提示词都会要求助手不得编造数据;涉及 SensorTower 时,如果必须登录,也不得悄悄改用功能较弱的工具。
资源
客户端可以附加为上下文的参考数据和本地状态,无需为此调用工具。
| URI | 类型 | 内容 |
|---|---|---|
asops://guide/tool-selection | markdown | 应使用哪个工具、各自的成本,以及 SensorTower 登录的工作方式 |
asops://reference/country-codes | markdown | 各地区的两字母 App Store 代码 |
asops://reference/aso-fields | JSON | App Store Connect 字符限制,以及哪些字段会被搜索索引 |
asops://reference/iae-fields | JSON | App 内活动限制、素材尺寸、文案规则、关键词层级 |
asops://reference/iae-locales | JSON | prepare_iae 接受的所有区域设置——由工具用于验证的同一张表生成 |
asops://cache/research | JSON | 此机器上已完成的研究,以及结果是否仍然有效 |
asops://cache/research/{country}/{keyword} | JSON | 一条缓存的 research_rivals 结果,无需重新抓取 |
这里的任何内容都不会离开你的机器:参考资源是静态的,两个缓存资源会读取 ~/.app-store-operator/cache.json。
要求
- Node.js v18+
- 桌面会话,用于运行
research_rivals和get_app_details。它们会驱动一个真实、可见的 Chromium 窗口,以便你登录 SensorTower,因此需要显示器——它们无法通过普通 SSH 或在容器内运行。其他两个工具没有此要求。 - Chromium 所需的磁盘空间。 安装软件包时,会通过 postinstall 步骤下载一个 Playwright Chromium 版本(数百 MB)。如果该步骤失败,服务会在首次使用时安装它;你也可以自行运行
npx playwright install chromium。
使用方法
作为 MCP 服务使用(Claude Code / Claude Desktop / OpenAI Codex)
Claude Code — 运行此命令一次:
claude mcp add --transport stdio app-store-operator -- npx -y app-store-operator@latest
Claude Desktop — 添加到 MCP 配置中:
{
"mcpServers": {
"app-store-operator": {
"command": "npx",
"args": ["app-store-operator@latest"]
}
}
}
OpenAI Codex — 运行此命令一次:
codex mcp add app-store-operator -- npx -y app-store-operator@latest
Codex 将 MCP 服务保存在 ~/.codex/config.toml 中。如果你更愿意直接编辑:
[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
然后重启 Codex 或开始一个新对话,并提出类似以下的问题:
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
无需安装步骤——npx 会自动获取并运行软件包。
该服务通过 stdio 通信,设计为由 MCP 客户端调用。它会在 initialize 期间公布服务级 instructions,以便客户端正确选择工具;如果需要 SensorTower 登录,则会返回 MCP 工具错误。
配置
这两个设置都是服务进程上的可选环境变量。
| 变量 | 默认值 | 作用 |
|---|---|---|
ASO_CACHE_TTL_HOURS | 24 | research_rivals 结果在本地缓存中保持有效的时长,超过后会重新抓取 |
ASO_DEBUG_RATINGS | unset | 设置为 1 时,如果评分或数量返回 N/A,则将 SensorTower 的评分面板打印到 stderr——有助于报告抓取错误 |
在容器中
仓库提供了一个基于 Playwright 官方镜像构建的 Dockerfile:
docker build -t app-store-operator .
docker run -i --rm app-store-operator
该服务通过 stdio 传输 JSON-RPC,因此不会暴露端口——将 MCP 客户端连接到容器的 stdin/stdout 即可。请注意,容器没有显示器:search_app_store 和 prepare_iae 可以在其中运行,但两个 SensorTower 工具无法打开登录窗口,因此会直接失败,而不会提示你登录。
工作原理
- 按关键词和国家/地区搜索 App Store,并通过 Apple 的公共 iTunes Lookup API 直接查询你提供的任何 App ID
- 对每个 App,驱动 Chromium 浏览器抓取 SensorTower 分析数据
- 提取指标并返回汇总报告
由于 SensorTower 的内容是在客户端渲染的,因此通过 Playwright 抓取数据。
浏览器窗口将会打开。 这是有意为之,并非故障:SensorTower 需要登录,因此首次运行时会打开一个可见窗口供你登录。会话会保存到 ~/.app-store-operator/profile,并在之后的每次调用中重复使用,因此你只需登录一次。如果工具报告 not_logged_in,请在该窗口中完成登录,然后再次运行工具。
research_rivals 的结果会在 ~/.app-store-operator/cache.json 中缓存 24 小时 — 可通过 ASO_CACHE_TTL_HOURS 环境变量更改缓存时长。
限制
- 仅支持 iOS。 不涵盖 Google Play 或 Android。
- 只读。 没有任何工具会更改 App Store Connect 或 SensorTower 中的内容。
research_rivals固定返回排名前 3 的结果。 如需更多结果,请使用search_app_store(最多 25 个),然后使用get_app_details。- 抓取本身容易出错。 SensorTower 在客户端渲染其仪表盘,并且会在不另行通知的情况下更改其标记;发生这种情况时,受影响的字段会返回
N/A,直到更新选择器。单个 App 抓取失败不会导致整个调用失败。 - 你能看到的内容由 SensorTower 的免费套餐决定。 需要付费才能查看的数据会返回
N/A。
隐私政策
完整政策:https://app-store-operator.com/privacy
App Store Operator 完全在你的计算机上运行。它没有后端、没有遥测,也没有分析功能 — 作者不会收集、接收或存储关于你或你使用情况的任何信息。
各工具发送的内容及其去向:
| 工具 | 账号 | 离开你计算机的内容 |
|---|---|---|
search_app_store | 无 | 关键词和国家/地区代码 → Apple 的公共 App Store 搜索 |
prepare_iae | 无 | 无 — 纯本地计算,不联系任何外部服务 |
research_rivals | SensorTower 免费账号 | 关键词和国家/地区代码 → Apple,然后通过你自己的浏览器会话访问 SensorTower |
get_app_details | SensorTower 免费账号 | App Store App ID → Apple 的公共查询 API 和 SensorTower |
本地存储的内容:
~/.app-store-operator/cache.json— 缓存的结果,默认在 24 小时后过期(ASO_CACHE_TTL_HOURS)~/.app-store-operator/profile— 保存 SensorTower 会话的 Chromium 配置文件
你需要在计算机上的浏览器窗口中,向 SensorTower 自己的页面输入 SensorTower 凭据。服务不会读取或存储你的密码,作者也永远不会收到密码。
删除所有内容 — 无需联系作者,也无需等待:
rm -rf ~/.app-store-operator
Apple 和 SensorTower 是各自制定政策的独立第三方。本项目与两者均无关联。
项目结构
src/
├── index.js # MCP server setup and request handlers
├── shared.js # App Store lookup + SensorTower scraping
├── cache.js # 24h local cache (research_rivals only)
├── prompts.js # the six prompt workflows
├── resources.js # reference data + cache resources
└── 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
scripts/sync-version.js # syncs server.json, manifest.json and CHANGELOG.md on release
test/smoke-test-mcp.js # stdio smoke test
server.json # MCP registry manifest
manifest.json # Claude Desktop / MCPB bundle manifest
Dockerfile # container build (no display: search + IAE tools only)
开发
无需构建步骤或代码检查工具——克隆项目后,运行 npm install,再运行 npm start,即可通过 stdio 启动服务器。
冒烟测试会验证服务器能否启动并公开所有应有内容。它会检查 initialize(包括服务器说明和公布的版本)、tools/list、prompts/list、prompts/get、resources/list、resources/templates/list,并读取每项资源;如果声明为 JSON 的资源无法解析,测试就会失败。测试不会发起网络请求,也不会打开浏览器:
npm run smoke
发布由标签驱动:在 CHANGELOG.md 的 ## Unreleased 下编写发布说明,运行 npm version <patch|minor|major>——该命令会将版本同步到 server.json 和 manifest.json,并将该标题重命名为新版本号——然后使用 --follow-tags 推送。GitHub Actions 会运行冒烟测试、发布到 npm 和 MCP 注册表,并根据该变更日志部分创建发布版本。如果 ## Unreleased 为空,版本更新将拒绝运行。
欢迎贡献——请在 github.com/meyusufdemirci/app-store-operator 提交问题或拉取请求。
许可证
MIT © Yusuf Demirci
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。