App Store Operator について
App Store Operatorは、競合やApp Storeのキーワードを調査する、個人iOS開発者向けのオープンソースMCPサーバーです。ストア検索、SensorTower分析、アプリ内イベント文案の作成をまとめ、外部アカウントへの操作は読み取り専用です。
主な機能
- 01App Storeの検索順位を取得
- 02競合のダウンロード数・売上推定を確認
- 03評価と市場情報を取得
- 04アプリ内イベント文案を作成
- 05読み取り専用のツール・プロンプト・リソース
活用シーン
- 01対象キーワードの上位アプリを調査
- 02市場ごとの競合指標を比較
- 03ローカライズしたイベント文案を準備
MCP 対応
MCPクライアントに4つのツール、6つのプロンプト、7つのリソースを提供します。検索と文案作成はアカウント不要で、SensorTower分析には無料ログインが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
4掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| country | string | はい | App Store の 2 文字の国コード(例:us、gb、tr) |
| keyword | string | はい | App Store で検索するキーワード(例:psikoloji、meditation) |
詳細
App Store Operator
Claude の中で、App Store の競合情報を調査できます。
App Store Operator は、App Store の調査機能を AI アシスタントに直接提供する MCP サーバーです。ダッシュボードに切り替える代わりに、Claude にキーワード別のランキング結果、競合アプリのダウンロード数や収益の推定値、App Store Connect にそのまま使えるアプリ内イベントのコピーを尋ねると、意思決定をしている会話の中で回答が得られます。
別のブラウザータブではなく、ワークフローの中で調査したいインディー 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 キーは不要です。
サーバーが提供するすべての機能(4 つのツール、6 つのプロンプト、7 つのリソース)は読み取り専用です。App Store Connect アカウントや SensorTower、ローカルのキャッシュファイル以外の場所に書き込むことはありません。
ツール
research_rivals
キーワードに一致する上位 3 つのアプリを見つけ、それぞれの詳細な指標レポートを返します。
| パラメーター | 型 | 説明 |
|---|---|---|
keyword | string | 検索する語句(例:meditation、psikoloji) |
country | string | 2 文字の国コード(例:us、tr、gb) |
各競合アプリについて返される情報:
- App Store と SensorTower の URL
- 全世界および直近 1 か月のダウンロード数と収益
- 評価スコアと評価件数
- パブリッシャー、カテゴリ、主要市場
- リリース日、最終更新日、対応言語
- アプリ内課金と広告ネットワークの有無
結果は 24 時間キャッシュされるため、同じキーワードと国について再度尋ねてもコストはかからず、ブラウザーも開きません。
search_app_store
App Store でキーワードを検索し、ランキング順の結果をマークダウンテーブルで即座に返します。SensorTower は不要です。
| パラメーター | 型 | 説明 |
|---|---|---|
keyword | string | 検索する語句 |
country | string | 2 文字の国コード |
limit | number | 返す結果の数(1~25、既定値:3) |
分析対象を決める前に、どのアプリが上位にランクインしているかを確認するために使います。特定のアプリの分析データを確認するには、続けて get_app_details を実行してください。
get_app_details
すでに取得している1つ以上のアプリ ID について、SensorTower の分析データを取得します。
| パラメーター | 型 | 説明 |
|---|---|---|
app_ids | array | 数値の App Store ID(例:search_app_store で取得したもの) |
country | string | 2文字の国コード |
アプリごとに返される内容:
- ダウンロード数と収益(全世界および直近1か月)
- 評価スコアと評価件数
- パブリッシャー、カテゴリ、主要市場
- リリース日、最終更新日、対応言語
- アプリ内課金と広告ネットワークの有無
キャッシュされません。呼び出しのたびに最新のデータをスクレイピングするため、アプリ ID 1件あたり約10~20秒かかります。
prepare_iae
iOS App Store のアプリ内イベント(IAE)用コピーを作成します。対象言語で3つのバリエーションを生成し、最後にレポートを出力します。
| パラメーター | 型 | 説明 |
|---|---|---|
keywords | array | 優先度順のキーワード(インデックス0~2=Tier 1、3~6=Tier 2、7~9=Tier 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 として返されます。
サーバーは不足している情報を補完せず、その不足を報告します。以下のプロンプトでも、アシスタントに同様の対応を指示しています。
プロンプト
上記のツールをすでに連携した、すぐに使える6つのワークフローです。自分で手順を説明する必要はありません。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? | Apple の制限に基づいて文字数を数えながら、アプリ名/サブタイトル/キーワード欄の3つのバリエーションを作成します |
in_app_event | event_context、locale、keywords?、audience?、tone? | prepare_iae にまだ必要な情報を確認しながら、アプリ内イベントのワークフロー全体を実行します |
? が付いた引数は省略可能です。どのプロンプトも、数値を捏造しないこと、および SensorTower が関わる場合にログインが必要なら、性能の低いツールへひそかに切り替えないことをアシスタントに指示します。
リソース
クライアントがツール呼び出しを消費せずにコンテキストとして添付できる参照データとローカル状態です。
| URI | 種類 | 内容 |
|---|---|---|
asops://guide/tool-selection | Markdown | 使用するツール、それぞれのコスト、SensorTower のログイン方法 |
asops://reference/country-codes | Markdown | 地域別の2文字のストアフロントコード |
asops://reference/aso-fields | JSON | App Store Connect の文字数制限と、検索対象としてインデックスされるフィールド |
asops://reference/iae-fields | JSON | In-App Event の制限、アートワークのサイズ、コピーのルール、キーワードの階層 |
asops://reference/iae-locales | JSON | prepare_iae が受け付けるすべてのロケール。ツールの検証に使用するものと同じテーブルから生成されます |
asops://cache/research | JSON | このマシンですでに調査された内容と、その情報がまだ新しいかどうか |
asops://cache/research/{country}/{keyword} | JSON | キャッシュされた research_rivals の結果1件。再スクレイピングは行いません |
ここにある情報がマシンの外に出ることはありません。参照リソースは静的で、2つのキャッシュリソースは ~/.app-store-operator/cache.json を読み取ります。
要件
- Node.js v18+
- デスクトップセッション。
research_rivalsとget_app_detailsでは、SensorTower にサインインできるよう、実際に表示される Chromium ウィンドウを操作します。そのためディスプレイが必要で、通常の SSH 接続やコンテナ内では動作しません。他の2つのツールにはこの要件はありません。 - Chromium 用のディスク容量。 パッケージをインストールすると、postinstall のステップで Playwright の Chromium ビルド(数百 MB)がダウンロードされます。このステップに失敗した場合、サーバーは初回使用時にインストールします。また、
npx playwright install chromiumを自分で実行することもできます。
使い方
MCP サーバーとして使用する場合(Claude Code / Claude Desktop / OpenAI Codex)
Claude Code — 次のコマンドを1回実行します。
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 — 次のコマンドを1回実行します。
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 を再起動するか、新しいスレッドを開始して、次のように質問します。
GB App Store で「hairstyle」の競合を調査してフランスの App Store で「beard style」を検索してen-gb で夏のヘアスタイルキャンペーン用のアプリ内イベントを準備して
インストール手順は不要です。npx がパッケージを自動的に取得して実行します。
このサーバーは stdio 経由で通信し、MCP クライアントから呼び出されるように設計されています。initialize の際にサーバー全体の instructions を通知するため、クライアントは各ツールを適切に使い分けられます。また、SensorTower へのログインが必要な場合は、MCP ツールエラーを返します。
設定
サーバープロセスで、どちらの設定も任意の環境変数として指定できます。
| 変数 | デフォルト | 機能 |
|---|---|---|
ASO_CACHE_TTL_HOURS | 24 | research_rivals の結果を再スクレイピングするまで、ローカルキャッシュで新しい状態に保つ時間 |
ASO_DEBUG_RATINGS | 未設定 | 評価スコアまたは件数が N/A で返されたとき、SensorTower の評価パネルを stderr に出力するには 1 を設定します。スクレイピングのバグを報告する際に便利です |
コンテナで使用する場合
このリポジトリには、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 を使う2つのツールはログインウィンドウを開けず、サインインを求める代わりに失敗します。
仕組み
- キーワードと国を指定して App Store を検索し、渡されたアプリ ID を Apple の公開 iTunes Lookup API に直接照会します
- 各アプリについて、Chromium ブラウザーを操作して SensorTower の分析データをスクレイピングします
- 指標を抽出し、レポートにまとめて返します
SensorTower のデータはクライアント側でレンダリングされるため、Playwright を使ってスクレイピングします。
ブラウザーウィンドウが開きます。 これは意図した動作であり、バグではありません。SensorTower へのログインが必要なため、初回実行時にログイン用のウィンドウが表示されます。セッションは ~/.app-store-operator/profile に保存され、以降の呼び出しで再利用されるため、ログインは一度だけで済みます。ツールが not_logged_in を報告した場合は、そのウィンドウでログインを完了してからツールを再実行してください。
research_rivals の結果は ~/.app-store-operator/cache.json に 24 時間キャッシュされます。環境変数 ASO_CACHE_TTL_HOURS で TTL を変更できます。
制限事項
- iOS のみです。 Google Play や Android は対象外です。
- 読み取り専用です。 App Store Connect や SensorTower の内容を変更するツールはありません。
research_rivalsの結果は上位 3 件に固定されています。 より多くの結果が必要な場合は、search_app_store(最大 25 件)を使ってからget_app_detailsを実行してください。- スクレイピングは本質的に不安定です。 SensorTower はダッシュボードをクライアント側でレンダリングし、予告なくマークアップを変更します。変更があった場合、セレクターが更新されるまで該当フィールドは
N/Aを返します。1 つのアプリで失敗しても、呼び出し全体が失敗することはありません。 - 表示される内容は 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 のアプリ ID → Apple の公開 Lookup 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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。