# Tool reference

Every MCP call names a tool and passes request.action. That action is one HTTP route, not a second catalogue.

## Tools

Reads use context:read. Save, remove, and data-request commands use content:write. The server checks the credential, the scope, and the owner before it runs the action.

| Tool | Action | HTTP route | Scope |
| --- | --- | --- | --- |
| `search_apps` | `search` | `GET /v1/competitors` | context:read |
| `search_apps` | `categories` | `GET /v1/competitors/categories` | context:read |
| `search_apps` | `similar` | `GET /v1/competitors/{platform}/{storeId}/similar` | context:read |
| `search_apps` | `emerging` | `GET /v1/competitors/intake/emerging` | context:read |
| `get_app` | `case_file` | `GET /v1/competitors/{platform}/{storeId}/case-file` | context:read |
| `get_app` | `get` | `GET /v1/competitors/{platform}/{storeId}` | context:read |
| `get_app` | `aso` | `GET /v1/competitors/{platform}/{storeId}/aso` | context:read |
| `get_app` | `keywords` | `GET /v1/competitors/{platform}/{storeId}/aso/keywords` | context:read |
| `get_app` | `aso_status` | `GET /v1/competitors/{platform}/{storeId}/aso/collection` | context:read |
| `get_app` | `organic` | `GET /v1/competitors/{platform}/{storeId}/organic` | context:read |
| `get_app` | `estimates` | `GET /v1/competitors/{platform}/{storeId}/estimates/history` | context:read |
| `get_app` | `technology` | `GET /v1/competitors/{platform}/{storeId}/technology` | context:read |
| `get_app` | `media` | `GET /v1/competitors/{platform}/{storeId}/media` | context:read |
| `get_app` | `data_requests` | `GET /v1/competitors/{platform}/{storeId}/data-requests` | context:read |
| `get_app` | `chart_history` | `GET /v1/charts/apps/{storeId}/history` | context:read |
| `get_ads` | `search` | `GET /v1/paid-ads` | context:read |
| `get_ads` | `get` | `GET /v1/paid-ads/{platform}/{archiveId}` | context:read |
| `get_ads` | `intelligence` | `GET /v1/paid-ads/intelligence` | context:read |
| `get_ads` | `rails` | `GET /v1/paid-ads/rails` | context:read |
| `search_organic` | `search` | `GET /v1/organic` | context:read |
| `search_organic` | `get` | `GET /v1/organic/{postId}` | context:read |
| `search_organic` | `saved` | `GET /v1/organic/saved` | context:read |
| `aso` | `list` | `GET /v1/aso/apps` | context:read |
| `aso` | `evidence` | `GET /v1/aso/case-evidence` | context:read |
| `aso` | `get` | `GET /v1/aso/apps/{appId}` | context:read |
| `aso` | `discover` | `GET /v1/aso/apps/{appId}/keyword-discovery` | context:read |
| `aso` | `gap` | `GET /v1/aso/apps/{appId}/gap/{rivalStoreId}` | context:read |
| `aso` | `explore` | `GET /v1/aso/keywords/{query}` | context:read |
| `get_market` | `overview` | `GET /v1/market/overview` | context:read |
| `get_market` | `leaderboard` | `GET /v1/market/leaderboard` | context:read |
| `get_market` | `signals` | `GET /v1/market/signals` | context:read |
| `get_market` | `charts` | `GET /v1/charts` | context:read |
| `save` | `organic` | `POST /v1/organic/{postId}/saved` | content:write |
| `save` | `unsave_organic` | `DELETE /v1/organic/{postId}/saved` | content:write |
| `save` | `ad` | `POST /v1/paid-ads/{platform}/{archiveId}/saved` | content:write |
| `save` | `unsave_ad` | `DELETE /v1/paid-ads/{platform}/{archiveId}/saved` | content:write |
| `refresh` | `aso_collection` | `POST /v1/competitors/{platform}/{storeId}/aso/collection` | content:write |
| `refresh` | `estimates` | `POST /v1/competitors/{platform}/{storeId}/estimates/refresh` | content:write |
| `refresh` | `technology` | `POST /v1/competitors/{platform}/{storeId}/technology` | content:write |
| `refresh` | `aso_app` | `POST /v1/aso/apps/{appId}/refresh` | content:write |
| `refresh` | `aso_keyword` | `POST /v1/aso/keywords/{query}/refresh` | content:write |
| `refresh` | `ad_transcript` | `POST /v1/paid-ads/{platform}/{archiveId}/transcript` | content:write |
| `refresh` | `ad_analysis` | `POST /v1/paid-ads/{platform}/{archiveId}/analysis` | content:write |
| `request_data` | `request` | `POST /v1/competitors/{platform}/{storeId}/data-requests` | content:write |
| `request_data` | `intake` | `POST /v1/competitors/intake/requested` | content:write |
| `request_data` | `discover_emerging` | `POST /v1/competitors/intake/emerging-discovery` | content:write |
| `manage_aso` | `track` | `POST /v1/aso/apps` | content:write |
| `manage_aso` | `add_temporary` | `POST /v1/aso/apps/temporary` | content:write |
| `manage_aso` | `update` | `PATCH /v1/aso/apps/{appId}` | content:write |
| `manage_aso` | `untrack` | `DELETE /v1/aso/apps/{appId}` | content:write |
| `manage_aso` | `create_folder` | `POST /v1/aso/folders` | content:write |
| `manage_aso` | `update_folder` | `PATCH /v1/aso/folders/{folderId}` | content:write |
| `manage_aso` | `remove_folder` | `DELETE /v1/aso/folders/{folderId}` | content:write |
| `manage_aso` | `add_keywords` | `POST /v1/aso/apps/{appId}/keywords` | content:write |
| `manage_aso` | `update_keyword` | `PATCH /v1/aso/apps/{appId}/keywords/{keywordId}` | content:write |
| `manage_aso` | `remove_keyword` | `DELETE /v1/aso/apps/{appId}/keywords/{keywordId}` | content:write |
| `manage_aso` | `assign_tag` | `POST /v1/aso/apps/{appId}/keywords/tags` | content:write |
| `manage_aso` | `create_tag` | `POST /v1/aso/tags` | content:write |
| `manage_aso` | `update_tag` | `PATCH /v1/aso/tags/{tagId}` | content:write |
| `manage_aso` | `remove_tag` | `DELETE /v1/aso/tags/{tagId}` | content:write |
| `manage_aso` | `search_ios` | `POST /v1/aso/app-search` | content:write |
