
Sonar
Connects Claude to Sonar's ASO (App Store Optimization) platform for mobile app intelligence. You get tools for keyword research across iOS and Android stores, rank tracking to monitor where apps place for specific search terms, and competitor analysis to see how other apps are positioned. Reach for this when you're optimizing app store listings, researching market opportunities for a mobile app, or need to pull ASO data into your workflow without switching to a separate dashboard. Saves you from manually checking app store rankings or exporting CSV files from traditional ASO tools when you want to integrate that data into broader analysis or decision making.
- tools
- 79
- auth
- Secret needed
- transport
- STDIO, HTTP
- env vars
- 2
- last updated
- Aug 17, 2026
Install
From registry metadata$ npx add-mcp https://trysonar.app/mcp --name sonar --header 'Authorization: Bearer ${API_TOKEN}'Run in your terminal. add-mcp asks which agents to add it to, then asks for each value it needs. Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http sonar https://trysonar.app/mcp --header 'Authorization: YOUR_AUTHORIZATION'Run in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 79 toolsVerified live against the running server on Nov 6, 2026.
sonar_app_lookupLook up a single app by its store ID. Returns app metadata including name, developer, category, rating, reviews, installs (Android), and price. Works without an API key (free tier, limited daily use per IP). If the store is throttling, the result may be Sonar's stored copy: it...3 params
Look up a single app by its store ID. Returns app metadata including name, developer, category, rating, reviews, installs (Android), and price. Works without an API key (free tier, limited daily use per IP). If the store is throttling, the result may be Sonar's stored copy: it...
countrystringstore*stringios · androidstore_id*stringsonar_app_searchFind apps in the App Store or Google Play by keyword, e.g. to get an app's store ID before calling other tools. Returns `{ source, data }`: `data` is the matching apps, compact by default (store ID, name, subtitle, developer, category, icon, rating, rating count, price, store...5 params
Find apps in the App Store or Google Play by keyword, e.g. to get an app's store ID before calling other tools. Returns `{ source, data }`: `data` is the matching apps, compact by default (store ID, name, subtitle, developer, category, icon, rating, rating count, price, store...
countrystringfieldsstringcompact · fulldefault: compactnumintegerquery*stringstore*stringios · androidsonar_app_aso_scoreCalculate an ASO (App Store Optimization) audit score (0-100) for an app. Returns the overall score plus an itemized breakdown of checks (title length, keyword usage, screenshots, ratings, etc.) so you can identify what to improve. Works without an API key (free tier, limited...3 params
Calculate an ASO (App Store Optimization) audit score (0-100) for an app. Returns the overall score plus an itemized breakdown of checks (title length, keyword usage, screenshots, ratings, etc.) so you can identify what to improve. Works without an API key (free tier, limited...
countrystringstore*stringios · androidstore_id*stringsonar_app_extract_keywordsExtract the most likely target keywords from an app's title and description, ranked by relevance. Useful for understanding what an app (yours or a competitor) is optimizing for. Works without an API key (free tier, limited daily use per IP).4 params
Extract the most likely target keywords from an app's title and description, ranked by relevance. Useful for understanding what an app (yours or a competitor) is optimizing for. Works without an API key (free tier, limited daily use per IP).
countrystringmaxintegerstore*stringios · androidstore_id*stringsonar_app_reviewsFetch user reviews for any app, live from the store (up to ~500 of the most recent or most helpful for the country). The star-rating filters and `limit` apply to that fetched window, so a narrow filter on a small app can return few or no reviews. Useful for sentiment analysis,...8 params
Fetch user reviews for any app, live from the store (up to ~500 of the most recent or most helpful for the country). The star-rating filters and `limit` apply to that fetched window, so a narrow filter on a small app can return few or no reviews. Useful for sentiment analysis,...
countrystringlangstringlimitintegermax_ratingintegermin_ratingintegersortstringrecent · helpfuldefault: recentstore*stringios · androidstore_id*stringsonar_app_revenueEstimate monthly revenue for an app, based on install counts, ratings, and category benchmarks. Returns the dollar estimate with its likely range (`monthly_range`), the install base it rests on (`installs`: estimate, low, high, source), a confidence grade (high/medium/low) wit...3 params
Estimate monthly revenue for an app, based on install counts, ratings, and category benchmarks. Returns the dollar estimate with its likely range (`monthly_range`), the install base it rests on (`installs`: estimate, low, high, source), a confidence grade (high/medium/low) wit...
countrystringstore*stringios · androidstore_id*stringsonar_keyword_searchResearch a keyword and related terms. Returns up to 10 rows — the seed keyword plus the store's top autocomplete suggestions — each with difficulty (0-100), popularity score, and results count. Use this to find keywords worth targeting; for metrics on terms you already know, s...3 params
Research a keyword and related terms. Returns up to 10 rows — the seed keyword plus the store's top autocomplete suggestions — each with difficulty (0-100), popularity score, and results count. Use this to find keywords worth targeting; for metrics on terms you already know, s...
countrystringquery*stringstore*stringios · androidsonar_keyword_metricsDifficulty + popularity for a specific keyword (or up to 25 in bulk). Use this when you already know which keywords you care about — costs 1 credit per keyword. Works without an API key for up to 5 keywords/day (free tier, per IP); an API key removes that cap. Use sonar_keywor...4 params
Difficulty + popularity for a specific keyword (or up to 25 in bulk). Use this when you already know which keywords you care about — costs 1 credit per keyword. Works without an API key for up to 5 keywords/day (free tier, per IP); an API key removes that cap. Use sonar_keywor...
countrystringkeywordstringkeywordsarraystore*stringios · androidsonar_keyword_suggestionsGet autocomplete suggestions for a seed keyword from the App Store or Google Play, in the order the store shows them. List position is the only demand signal: the `priority` field is 0 on Google Play and currently 0 on the App Store as well. Lighter and faster than sonar_keywo...3 params
Get autocomplete suggestions for a seed keyword from the App Store or Google Play, in the order the store shows them. List position is the only demand signal: the `priority` field is 0 on Google Play and currently 0 on the App Store as well. Lighter and faster than sonar_keywo...
countrystringseed*stringstore*stringios · androidsonar_top_chartsGet a store top chart (free / paid / grossing, overall or by category) with day-over-day movement: per-app rank delta, apps new to the chart, biggest movers and apps that dropped out. Use to see what's rising in a market or category. Note: summary, movers and droppedApps alway...6 params
Get a store top chart (free / paid / grossing, overall or by category) with day-over-day movement: per-app rank delta, apps new to the chart, biggest movers and apps that dropped out. Use to see what's rising in a market or category. Note: summary, movers and droppedApps alway...
categorystringchartstringfree · paid · grossingdefault: freecountrystringfieldsstringcompact · fulldefault: compactlimitintegerstore*stringios · androidsonar_list_appsList the apps tracked in the caller's Sonar workspace (own apps + competitors), each with its latest snapshot (rating, review count, version, installs). Returns the Sonar app UUIDs needed by sonar_get_app, sonar_app_keywords, sonar_app_rankings, and sonar_app_changes. Cursor-p...2 params
List the apps tracked in the caller's Sonar workspace (own apps + competitors), each with its latest snapshot (rating, review count, version, installs). Returns the Sonar app UUIDs needed by sonar_get_app, sonar_app_keywords, sonar_app_rankings, and sonar_app_changes. Cursor-p...
cursorstringlimitintegersonar_get_appGet details for one tracked app in the caller's Sonar workspace: store metadata plus daily snapshots of rating, review count, version, and installs. Compact by default (listing basics + the 7 newest snapshots); pass fields: "full" for the description, screenshots, release note...2 params
Get details for one tracked app in the caller's Sonar workspace: store metadata plus daily snapshots of rating, review count, version, and installs. Compact by default (listing basics + the 7 newest snapshots); pass fields: "full" for the description, screenshots, release note...
app_id*stringfieldsstringcompact · fulldefault: compactsonar_app_keywordsList the keywords tracked for an app in the caller's Sonar workspace, with latest difficulty, popularity, results count, note, and starred_at (favorite/target marker) per keyword. Returns the tracked-keyword ids used by sonar_update_keyword_note and sonar_star_keyword, and the...3 params
List the keywords tracked for an app in the caller's Sonar workspace, with latest difficulty, popularity, results count, note, and starred_at (favorite/target marker) per keyword. Returns the tracked-keyword ids used by sonar_update_keyword_note and sonar_star_keyword, and the...
app_id*stringcursorstringlimitintegersonar_app_rankingsRank history for an app's tracked keywords over the requested window. Compact by default: each keyword's current rank and status, best rank, positions gained and a newest-first daily `ranks` list (a rank, "unranked" = checked but not found, null = no check that day). Pass fiel...6 params
Rank history for an app's tracked keywords over the requested window. Compact by default: each keyword's current rank and status, best rank, positions gained and a newest-first daily `ranks` list (a rank, "unranked" = checked but not found, null = no check that day). Pass fiel...
app_id*stringcursorstringdaysintegerfieldsstringcompact · fulldefault: compactkeyword_idstringlimitintegersonar_app_changesChange history for a tracked app — detected releases, metadata edits, screenshot swaps, price changes, category moves, iOS product page header swaps (`header`: data.action added/changed/removed + header artwork) and newly listed iOS In-App Events (`in_app_event`: title, kind,...3 params
Change history for a tracked app — detected releases, metadata edits, screenshot swaps, price changes, category moves, iOS product page header swaps (`header`: data.action added/changed/removed + header artwork) and newly listed iOS In-App Events (`in_app_event`: title, kind,...
app_id*stringlimitintegertypestringrelease · metadata · screenshots · price · category · headersonar_keyword_rankingsSERP history for one tracked keyword — which apps ranked in the top results on each measured day, newest first (compact by default: no icon URLs; fields: "full" adds them). Use this to see who competes on a keyword and how the top spots shifted over time. The keyword must be t...3 params
SERP history for one tracked keyword — which apps ranked in the top results on each measured day, newest first (compact by default: no icon URLs; fields: "full" adds them). Use this to see who competes on a keyword and how the top spots shifted over time. The keyword must be t...
daysintegerfieldsstringcompact · fulldefault: compactkeyword_id*stringsonar_competitor_keywordsKeywords a tracked competitor currently ranks for (last 7 days of SERP data), with difficulty and popularity per keyword. Pass own_app_id for gap analysis: keywords where the competitor ranks but your app doesn't are marked gap=missing. Cursor-paginated (default 50 per page)....4 params
Keywords a tracked competitor currently ranks for (last 7 days of SERP data), with difficulty and popularity per keyword. Pass own_app_id for gap analysis: keywords where the competitor ranks but your app doesn't are marked gap=missing. Cursor-paginated (default 50 per page)....
competitor_app_id*stringcursorstringlimitintegerown_app_idstringsonar_competitor_landscapeThe full competitive keyword picture for one of your own apps vs every tracked competitor, in one call: live stats (keyword gaps where competitors rank and you don't, winnable gaps, competitors climbing on your tracked keywords, keywords you lead), the top gap/threat/lead rows...1 params
The full competitive keyword picture for one of your own apps vs every tracked competitor, in one call: live stats (keyword gaps where competitors rank and you don't, winnable gaps, competitors climbing on your tracked keywords, keywords you lead), the top gap/threat/lead rows...
app_id*stringsonar_list_productsList every product in your workspace (unpaginated): each product's id, name, country, competitor count, and its linked store versions (Sonar app id, store, store_id, name). Product ids are what sonar_track_app, sonar_track_competitor, sonar_remove_competitor, sonar_delete_prod...
List every product in your workspace (unpaginated): each product's id, name, country, competitor count, and its linked store versions (Sonar app id, store, store_id, name). Product ids are what sonar_track_app, sonar_track_competitor, sonar_remove_competitor, sonar_delete_prod...
No parameters. Call it with no arguments.
sonar_list_alertsList your alert subscriptions — each rule defines a change type (rank drops, review spikes, etc.), its scope (a specific app or org-wide), threshold, and whether it's enabled. Requires an Indie plan (trial counts).
List your alert subscriptions — each rule defines a change type (rank drops, review spikes, etc.), its scope (a specific app or org-wide), threshold, and whether it's enabled. Requires an Indie plan (trial counts).
No parameters. Call it with no arguments.
sonar_alert_eventsThe detected alert events for your workspace, newest first — the same feed as the in-app Recent Alerts panel and the email digest: rank drops/gains, top-10 entries/exits, new rankings, rating drops, review spikes, and competitor changes, each with a type-specific payload (app/...4 params
The detected alert events for your workspace, newest first — the same feed as the in-app Recent Alerts panel and the email digest: rank drops/gains, top-10 entries/exits, new rankings, rating drops, review spikes, and competitor changes, each with a type-specific payload (app/...
app_idstringlimitintegersincestringtypestringrank_drop · rank_gain · entered_top10 · left_top10 · new_ranking · rating_dropsonar_app_overviewThe dashboard's computed scoreboard for one of your apps in a single call: visibility index and share of voice (with 7-day deltas and a daily spark), ranked / top-10 keyword counts with movement, best rank, the biggest 7-day improvements and drops, the rank-distribution trend,...2 params
The dashboard's computed scoreboard for one of your apps in a single call: visibility index and share of voice (with 7-day deltas and a daily spark), ranked / top-10 keyword counts with movement, best rank, the biggest 7-day improvements and drops, the rank-distribution trend,...
app_id*stringdaysintegersonar_discovered_keywordsKeywords Sonar's discovery engine surfaced for one of your tracked apps but that aren't tracked yet — ranked finds (the app already ranks, unnoticed), competitor gaps, and AI/autocomplete-sourced ideas — each with popularity, difficulty, AI relevance, and an opportunity score...9 params
Keywords Sonar's discovery engine surfaced for one of your tracked apps but that aren't tracked yet — ranked finds (the app already ranks, unnoticed), competitor gaps, and AI/autocomplete-sourced ideas — each with popularity, difficulty, AI relevance, and an opportunity score...
app_id*stringbucketstringranked · gap · ideacountrystringfieldsstringcompact · fulldefault: compactlimitintegermin_opportunityintegermin_relevanceintegersourcestringautocomplete · metadata · serp_scan · competitor · apple_ads · aistatusstringnew · tracked · hidden · allsonar_review_insightsThe latest AI review analysis for a tracked app (your own or a competitor): what users praise and complain about as named themes with frequency, verbatim quotes, and trend movement (new / persisting / growing / improving / resolved), plus overall sentiment, surfaced feature re...2 params
The latest AI review analysis for a tracked app (your own or a competitor): what users praise and complain about as named themes with frequency, verbatim quotes, and trend movement (new / persisting / growing / improving / resolved), plus overall sentiment, surfaced feature re...
app_id*stringcountrystringsonar_review_responderThe review responder's configuration for an own iOS app: whether it is switched on, manual vs auto mode (auto posts AI replies after a delay, only for reviews written after auto was enabled and within the star range), the reply instructions, sign-off, reply language, last sync...1 params
The review responder's configuration for an own iOS app: whether it is switched on, manual vs auto mode (auto posts AI replies after a delay, only for reviews written after auto was enabled and within the star range), the reply instructions, sign-off, reply language, last sync...
app_id*stringsonar_review_inboxAn own iOS app's App Store reviews (synced from App Store Connect every 5 minutes) with their reply state: the AI draft or your text, English translations of non-English reviews and drafts, hold reasons (needs_human, quota, daily_cap), schedule time, and any live App Store res...7 params
An own iOS app's App Store reviews (synced from App Store Connect every 5 minutes) with their reply state: the AI draft or your text, English translations of non-English reviews and drafts, hold reasons (needs_human, quota, daily_cap), schedule time, and any live App Store res...
app_id*stringcountrystringcursorstringlanguagestringlimitintegerratingintegerstatusstringneeds_reply · scheduled · replied · dismissedsonar_portfolioThe whole portfolio's health in one call — for orgs managing many apps: per-app KPIs (visibility + 7-day delta, ranked/top-10 counts, net rank movement, rating, review count), org-wide totals, the biggest keyword movers in both directions, a needs-attention triage list (visibi...
The whole portfolio's health in one call — for orgs managing many apps: per-app KPIs (visibility + 7-day delta, ranked/top-10 counts, net rank movement, rating, review count), org-wide totals, the biggest keyword movers in both directions, a needs-attention triage list (visibi...
No parameters. Call it with no arguments.
sonar_app_salesApp Store Connect sales for one of your own iOS apps: daily first-time downloads, redownloads, in-app purchase units and approximate USD proceeds (`proceeds_usd_approx`, converted with a static FX table — present it as approximate), window totals, and a per-country breakdown s...5 params
App Store Connect sales for one of your own iOS apps: daily first-time downloads, redownloads, in-app purchase units and approximate USD proceeds (`proceeds_usd_approx`, converted with a static FX table — present it as approximate), window totals, and a per-country breakdown s...
app_id*stringdaysintegerendstringstartstringstorestringios · androidsonar_app_engagementApp Store Connect App Analytics for one of your own iOS apps: the impressions → product page views → downloads funnel with conversion rates (`page_view_rate`, `download_rate`) and App Store search share, impressions by source (App Store search, browse, app referrer, web referr...5 params
App Store Connect App Analytics for one of your own iOS apps: the impressions → product page views → downloads funnel with conversion rates (`page_view_rate`, `download_rate`) and App Store search share, impressions by source (App Store search, browse, app referrer, web referr...
app_id*stringdaysintegerendstringstartstringstorestringios · androidsonar_create_productWRITE tool — creates a product in the caller's Sonar workspace and starts tracking the given app(s). A product is the cross-store unit (one iOS + one Android app, or just one of either). Returns the product id and the Sonar app ids needed by sonar_track_keywords and sonar_trac...2 params
WRITE tool — creates a product in the caller's Sonar workspace and starts tracking the given app(s). A product is the cross-store unit (one iOS + one Android app, or just one of either). Returns the product id and the Sonar app ids needed by sonar_track_keywords and sonar_trac...
apps*arraynamestringsonar_track_appWRITE tool — links the second-store version of an existing Sonar product (e.g. the product already tracks the iOS app and you want to add the Android version, or vice versa). Each product holds at most one iOS + one Android app; to start tracking a brand-new app, use sonar_cre...4 params
WRITE tool — links the second-store version of an existing Sonar product (e.g. the product already tracks the iOS app and you want to add the Android version, or vice versa). Each product holds at most one iOS + one Android app; to start tracking a brand-new app, use sonar_cre...
countrystringproduct_id*stringstore*stringios · androidstore_id*stringsonar_track_competitorWRITE tool — adds a competitor app under a Sonar product so its keywords and rankings get tracked alongside the product's own app. The product must already have its own app linked in the same store as the competitor. Requires an Indie plan (trial counts) and an authorized Sona...4 params
WRITE tool — adds a competitor app under a Sonar product so its keywords and rankings get tracked alongside the product's own app. The product must already have its own app linked in the same store as the competitor. Requires an Indie plan (trial counts) and an authorized Sona...
countrystringproduct_id*stringstore*stringios · androidstore_id*stringsonar_track_keywordsWRITE tool — starts daily rank tracking for one or more keywords on an app in the caller's Sonar workspace. Idempotent: re-posting the same terms reports them as already_tracked instead of creating duplicates. Returns per-keyword outcomes (created / already_tracked / failed)....3 params
WRITE tool — starts daily rank tracking for one or more keywords on an app in the caller's Sonar workspace. Idempotent: re-posting the same terms reports them as already_tracked instead of creating duplicates. Returns per-keyword outcomes (created / already_tracked / failed)....
app_id*stringcountrystringkeywords*arraysonar_update_keyword_noteWRITE tool — sets or clears the note on a tracked keyword in the caller's Sonar workspace (e.g. why it's tracked, an optimization hypothesis, a reminder). Idempotent: re-sending the same note is a no-op. Requires an Indie plan (trial counts) and an authorized Sonar account or...2 params
WRITE tool — sets or clears the note on a tracked keyword in the caller's Sonar workspace (e.g. why it's tracked, an optimization hypothesis, a reminder). Idempotent: re-sending the same note is a no-op. Requires an Indie plan (trial counts) and an authorized Sonar account or...
note*valuetracked_keyword_id*stringsonar_star_keywordWRITE tool — stars or unstars a tracked keyword in the caller's Sonar workspace. A star marks the keyword as a favorite/target the user is actively pursuing; starred keywords carry a starred_at timestamp in sonar_app_keywords results. Idempotent: re-starring refreshes the time...2 params
WRITE tool — stars or unstars a tracked keyword in the caller's Sonar workspace. A star marks the keyword as a favorite/target the user is actively pursuing; starred keywords carry a starred_at timestamp in sonar_app_keywords results. Idempotent: re-starring refreshes the time...
starred*booleantracked_keyword_id*stringsonar_scan_competitorWRITE tool — runs an AI keyword discovery scan on a tracked competitor: generates the search terms the competitor's listing is optimized for (brand terms included), queues them for SERP verification, and verifies the first batch inline (~30s), recording both apps' ranks. Retur...2 params
WRITE tool — runs an AI keyword discovery scan on a tracked competitor: generates the search terms the competitor's listing is optimized for (brand terms included), queues them for SERP verification, and verifies the first batch inline (~30s), recording both apps' ranks. Retur...
competitor_app_id*stringown_app_id*stringsonar_analyze_competitorsWRITE tool — generates a fresh AI competitive insight for one of your own apps: clusters the keyword gaps vs your competitors into named opportunity themes (with a why-now narrative and per-keyword metrics), writes threat narratives for competitors climbing on your keywords, a...1 params
WRITE tool — generates a fresh AI competitive insight for one of your own apps: clusters the keyword gaps vs your competitors into named opportunity themes (with a why-now narrative and per-keyword metrics), writes threat narratives for competitors climbing on your keywords, a...
app_id*stringsonar_generate_review_insightsWRITE tool — generates a fresh AI review analysis for a tracked app from its recent reviews (praise/complaint themes, sentiment, feature requests, trend vs the previous run). At most one analysis per app+country every 90 days (429 with the next available time while in cooldown...2 params
WRITE tool — generates a fresh AI review analysis for a tracked app from its recent reviews (praise/complaint themes, sentiment, feature requests, trend vs the previous run). At most one analysis per app+country every 90 days (429 with the next available time while in cooldown...
app_id*stringcountrystringsonar_delete_tracked_keywordWRITE tool — stop tracking one keyword/app pair in the caller's Sonar workspace. Identify the pair by its tracked-keyword id (from sonar_app_keywords). Equivalent to sonar_untrack_keywords with a single id; that tool removes several (or all) of an app's keywords in one call. R...1 params
WRITE tool — stop tracking one keyword/app pair in the caller's Sonar workspace. Identify the pair by its tracked-keyword id (from sonar_app_keywords). Equivalent to sonar_untrack_keywords with a single id; that tool removes several (or all) of an app's keywords in one call. R...
tracked_keyword_id*stringsonar_untrack_keywordsWRITE tool — bulk-untrack keywords for an app in the caller's Sonar workspace. Pass `all: true` to remove every tracked keyword, OR `ids: [...]` to remove specific ones (exactly one of the two). For a single keyword, sonar_delete_tracked_keyword is equivalent. Requires an Indi...3 params
WRITE tool — bulk-untrack keywords for an app in the caller's Sonar workspace. Pass `all: true` to remove every tracked keyword, OR `ids: [...]` to remove specific ones (exactly one of the two). For a single keyword, sonar_delete_tracked_keyword is equivalent. Requires an Indi...
allbooleanapp_id*stringidsarraysonar_untrack_appWRITE tool — untrack an app in the caller's Sonar workspace. Deletes the workspace's tracked keywords for it (with their notes and stars), its discovered keywords, and its competitor links, and detaches it from its product — deleting the product, and that product's screenshot...1 params
WRITE tool — untrack an app in the caller's Sonar workspace. Deletes the workspace's tracked keywords for it (with their notes and stars), its discovered keywords, and its competitor links, and detaches it from its product — deleting the product, and that product's screenshot...
app_id*stringsonar_delete_productWRITE tool — delete a product in the caller's Sonar workspace and untrack every app linked to it, with their tracked keywords, discovered keywords, and competitor links. The product's screenshot sets are deleted too. Shared store data (app metadata, snapshots, rank history) is...1 params
WRITE tool — delete a product in the caller's Sonar workspace and untrack every app linked to it, with their tracked keywords, discovered keywords, and competitor links. The product's screenshot sets are deleted too. Shared store data (app metadata, snapshots, rank history) is...
product_id*stringsonar_remove_competitorWRITE tool — remove a competitor from a product in the caller's Sonar workspace. Drops the competitor link under every own app of the product; if no other own app in the workspace still references the competitor, the competitor app is untracked as well. 404 when the product ha...2 params
WRITE tool — remove a competitor from a product in the caller's Sonar workspace. Drops the competitor link under every own app of the product; if no other own app in the workspace still references the competitor, the competitor app is untracked as well. 404 when the product ha...
competitor_app_id*stringproduct_id*stringsonar_set_alertWRITE tool — create or update an alert subscription in the caller's Sonar workspace. Upserts on (type + scope): re-submitting the same type/scope updates the existing rule. Omit `threshold` for the per-type default; omit `scope_app_id` for an org-wide rule. Requires an Indie p...6 params
WRITE tool — create or update an alert subscription in the caller's Sonar workspace. Upserts on (type + scope): re-submitting the same type/scope updates the existing rule. Omit `threshold` for the per-type default; omit `scope_app_id` for an org-wide rule. Requires an Indie p...
cadencevaluecountriesvalueenabledbooleanscope_app_idvaluethresholdvaluetype*stringrank_drop · rank_gain · entered_top10 · left_top10 · new_ranking · rating_dropsonar_delete_alertWRITE tool — delete an alert subscription in the caller's Sonar workspace. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.1 params
WRITE tool — delete an alert subscription in the caller's Sonar workspace. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.
id*stringsonar_set_review_responderWRITE tool — switch the review responder on/off for an own iOS app and update its instructions or auto-mode policy (partial update; omitted fields keep their value). Turning auto mode on only affects reviews written afterwards; anything the AI flags as needing a human is held....10 params
WRITE tool — switch the review responder on/off for an own iOS app and update its instructions or auto-mode policy (partial update; omitted fields keep their value). Turning auto mode on only affects reviews written afterwards; anything the AI flags as needing a human is held....
app_id*stringauto_daily_capintegerauto_delay_minutesintegerauto_max_ratingintegerauto_min_ratingintegerenabledbooleaninstructionsstringmodestringmanual · autoreply_languagestringreview · ensign_offvaluesonar_draft_review_replyWRITE tool — write a fresh AI reply draft for a review using the app's instructions (and an optional hint), with English translations. Counts against the monthly AI-draft allowance, then 1 credit per draft. Never posts. Tip: agents can skip this and write the reply themselves...2 params
WRITE tool — write a fresh AI reply draft for a review using the app's instructions (and an optional hint), with English translations. Counts against the monthly AI-draft allowance, then 1 credit per draft. Never posts. Tip: agents can skip this and write the reply themselves...
hintstringreview_id*stringsonar_update_review_replyWRITE tool — replace a review's reply text (not metered, doesn't post). Use sonar_post_review_reply to publish. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.3 params
WRITE tool — replace a review's reply text (not metered, doesn't post). Use sonar_post_review_reply to publish. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.
body*stringreview_id*stringtranslate_from_englishbooleansonar_post_review_replyWRITE tool — PUBLIC ACTION: publishes the reply on the App Store under the developer's name (now, or after delay_minutes). Overwrites an existing response (Apple keeps one per review and marks it edited). Apple shows it within ~24h: status pending_publish, then published. Need...3 params
WRITE tool — PUBLIC ACTION: publishes the reply on the App Store under the developer's name (now, or after delay_minutes). Overwrites an existing response (Apple keeps one per review and marks it edited). Apple shows it within ~24h: status pending_publish, then published. Need...
bodystringdelay_minutesintegerreview_id*stringsonar_dismiss_review_replyWRITE tool — mark a review as not needing a reply (also cancels a scheduled post). Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.1 params
WRITE tool — mark a review as not needing a reply (also cancels a scheduled post). Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.
review_id*stringsonar_cancel_review_replyWRITE tool — cancel a scheduled reply (manual or auto mode) before it posts; it goes back to draft. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.1 params
WRITE tool — cancel a scheduled reply (manual or auto mode) before it posts; it goes back to draft. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.
review_id*stringsonar_screenshot_layout_guideThe layout-format reference for Sonar screenshot sets: static text, so one call per session is enough. It documents the layout JSON schema, coordinate system, image handling (remote URLs), flowing background shapes, fonts, translation overrides, and the recommended workflow.
The layout-format reference for Sonar screenshot sets: static text, so one call per session is enough. It documents the layout JSON schema, coordinate system, image handling (remote URLs), flowing background shapes, fonts, translation overrides, and the recommended workflow.
No parameters. Call it with no arguments.
sonar_screenshot_devicesList the device sizes supported for app-store screenshot sets, with their canvas dimensions (the pixel coordinate space all layouts use) and which store each belongs to — including the landscape App Store creative-asset canvases (category "creative": product page header and se...
List the device sizes supported for app-store screenshot sets, with their canvas dimensions (the pixel coordinate space all layouts use) and which store each belongs to — including the landscape App Store creative-asset canvases (category "creative": product page header and se...
No parameters. Call it with no arguments.
sonar_list_screenshot_setsList a product's app-store screenshot sets (metadata only: store, device size, locales, studio_url). Use sonar_get_screenshot_set for full layouts. Requires an Indie plan (trial counts).1 params
List a product's app-store screenshot sets (metadata only: store, device size, locales, studio_url). Use sonar_get_screenshot_set for full layouts. Requires an Indie plan (trial counts).
product_id*stringsonar_create_screenshot_setCreate an app-store screenshot set for a product, from your own `screens` layouts or a built-in template. The layout JSON format and template ids are documented by sonar_screenshot_layout_guide. The set is immediately visible/editable for humans in the Screenshot Studio (studi...6 params
Create an app-store screenshot set for a product, from your own `screens` layouts or a built-in template. The layout JSON format and template ids are documented by sonar_screenshot_layout_guide. The set is immediately visible/editable for humans in the Screenshot Studio (studi...
device_size*stringnamestringproduct_id*stringscreensarraystore*stringios · androidtemplate_idstringsonar_get_screenshot_setFetch a screenshot set in full: every screen's layout JSON plus per-screen translation overrides keyed by locale. By default inline image data is replaced with placeholders to keep the response readable. Requires an Indie plan (trial counts).2 params
Fetch a screenshot set in full: every screen's layout JSON plus per-screen translation overrides keyed by locale. By default inline image data is replaced with placeholders to keep the response readable. Requires an Indie plan (trial counts).
include_image_databooleanset_id*stringsonar_update_screenshot_setRename a screenshot set, replace its extra-locale list, and/or reorder its screens. Returns the updated set (with image data stripped). Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.4 params
Rename a screenshot set, replace its extra-locale list, and/or reorder its screens. Returns the updated set (with image data stripped). Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
localesarraynamestringscreen_orderarrayset_id*stringsonar_delete_screenshot_setPermanently delete a screenshot set and everything in it (screens, translations). Irreversible — confirm with the user before deleting work they may want. Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.1 params
Permanently delete a screenshot set and everything in it (screens, translations). Irreversible — confirm with the user before deleting work they may want. Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
set_id*stringsonar_add_screenshotAppend a screen to a screenshot set (at the end; reorder with sonar_update_screenshot_set). Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.2 params
Append a screen to a screenshot set (at the end; reorder with sonar_update_screenshot_set). Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
layoutobjectset_id*stringsonar_update_screenshotReplace one screen's layout in a screenshot set. Whole-document replace — fetch the current layout, modify it, send it back. The change shows up immediately in the Screenshot Studio for human review. Requires an Indie plan (trial counts) and an authorized Sonar account or a wr...2 params
Replace one screen's layout in a screenshot set. Whole-document replace — fetch the current layout, modify it, send it back. The change shows up immediately in the Screenshot Studio for human review. Requires an Indie plan (trial counts) and an authorized Sonar account or a wr...
layout*objectscreenshot_id*stringsonar_delete_screenshotDelete one screen from a screenshot set. A set keeps at least one screen — deleting the last one is rejected. Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.1 params
Delete one screen from a screenshot set. A set keeps at least one screen — deleting the last one is rejected. Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.
screenshot_id*stringsonar_set_screenshot_translationsWrite a locale's translation overrides for screens in a screenshot set (text copy, localized captures/images). Geometry and styling always come from the source layout; anything not overridden falls back to it. The locale is auto-enabled on the set. Requires an Indie plan (tria...3 params
Write a locale's translation overrides for screens in a screenshot set (text copy, localized captures/images). Geometry and styling always come from the source layout; anything not overridden falls back to it. The locale is auto-enabled on the set. Requires an Indie plan (tria...
entries*arraylocale*stringset_id*stringsonar_ad_spy_competitorsStart here for competitor ads. Every competitor the account tracks, with the Facebook pages (meta_pages) and TikTok accounts (tiktok_accounts) already linked to it and its last page scan, plus today's Ad Spy lookup allowance (used / limit / remaining / resets_at). A competitor...
Start here for competitor ads. Every competitor the account tracks, with the Facebook pages (meta_pages) and TikTok accounts (tiktok_accounts) already linked to it and its last page scan, plus today's Ad Spy lookup allowance (used / limit / remaining / resets_at). A competitor...
No parameters. Call it with no arguments.
sonar_ad_spy_adsA Facebook page's cached Meta ads (Facebook, Instagram, Messenger, Audience Network): stats over every cached ad (active count, longest running, new in 30 days, format and placement mix, max variants), the ads matching the filters with copy, CTA, landing URL, placements, days...9 params
A Facebook page's cached Meta ads (Facebook, Instagram, Messenger, Audience Network): stats over every cached ad (active count, longest running, new in 30 days, format and placement mix, max variants), the ads matching the filters with copy, CTA, landing URL, placements, days...
advertiser_id*stringfieldsstringcompact · fulldefault: compactformatstringvideo · image · carousel · texthistory_daysintegerinclude_hiddenbooleanlimitintegermin_daysintegersortstringlongest · newest · variantsstatusstringactive · allsonar_ad_spy_tiktok_postsA linked TikTok account's cached public videos with real counters (views, likes, comments, shares, saves), caption, post date and a `breakout` flag (3× or more the account's median views). Use `url` (permanent); compact by default, so the expiring `cover_url` is left out (fiel...4 params
A linked TikTok account's cached public videos with real counters (views, likes, comments, shares, saves), caption, post date and a `breakout` flag (3× or more the account's median views). Use `url` (permanent); compact by default, so the expiring `cover_url` is left out (fiel...
account_id*stringfieldsstringcompact · fulldefault: compactlimitintegersortstringviews · newest · shares · likes · savessonar_ad_spy_ad_analysisThe cached AI analysis of an ad (hook, angle, format, structure, CTA, why it works) and its video transcript, or `analysis: null` when it hasn't been analyzed yet — then use sonar_ad_spy_analyze_ad. Free cached read. Requires an Indie or Agency plan (a trial counts).1 params
The cached AI analysis of an ad (hook, angle, format, structure, CTA, why it works) and its video transcript, or `analysis: null` when it hasn't been analyzed yet — then use sonar_ad_spy_analyze_ad. Free cached read. Requires an Indie or Agency plan (a trial counts).
creative_id*stringsonar_ad_spy_vaultThe account's saved ads (the vault), newest first: details frozen at save time, status (pending/stored/partial/failed), notes and stored media files, plus usage vs the plan's vault limit. Asset URLs need the account's API key — vault media is private, never share them as publi...
The account's saved ads (the vault), newest first: details frozen at save time, status (pending/stored/partial/failed), notes and stored media files, plus usage vs the plan's vault limit. Asset URLs need the account's API key — vault media is private, never share them as publi...
No parameters. Call it with no arguments.
sonar_ad_spy_scanWRITE tool — search a competitor's Facebook page (channel "meta") or TikTok account (channel "tiktok") and return ranked candidates; an unambiguous top match is flagged `best_match`. It never links: show the candidates and let the user confirm, then call sonar_ad_spy_link (the...3 params
WRITE tool — search a competitor's Facebook page (channel "meta") or TikTok account (channel "tiktok") and return ranked candidates; an unambiguous top match is flagged `best_match`. It never links: show the candidates and let the user confirm, then call sonar_ad_spy_link (the...
channelstringmeta · tiktokcompetitor_id*stringquerystringsonar_ad_spy_search_pagesWRITE tool — free-text search for Facebook advertiser pages by brand or company name, not tied to a tracked competitor. Open a result with sonar_ad_spy_open_page, or link it to a competitor with sonar_ad_spy_link. Spends one of the account's daily Ad Spy lookups (today's usage...1 params
WRITE tool — free-text search for Facebook advertiser pages by brand or company name, not tied to a tracked competitor. Open a result with sonar_ad_spy_open_page, or link it to a competitor with sonar_ad_spy_link. Spends one of the account's daily Ad Spy lookups (today's usage...
query*stringsonar_ad_spy_linkWRITE tool — confirm which Facebook page or TikTok account belongs to a competitor. Only call it after the user picked the candidate (the mapping is shared by every Sonar account). Accepts only candidates this account's own scans or searches returned in the last 2 days. Spends...6 params
WRITE tool — confirm which Facebook page or TikTok account belongs to a competitor. Only call it after the user picked the candidate (the mapping is shared by every Sonar account). Accepts only candidates this account's own scans or searches returned in the last 2 days. Spends...
account_idstringadvertiser_idstringchannel*stringmeta · tiktokcompetitor_id*stringpage_idstringuser_idstringsonar_ad_spy_unlinkWRITE tool — remove a wrong competitor → Facebook page (advertiser_id) or TikTok account (account_id) link. Pass exactly one. The link is shared, so this also removes it for other Sonar accounts tracking that competitor. Requires an Indie or Agency plan (a trial counts) and an...3 params
WRITE tool — remove a wrong competitor → Facebook page (advertiser_id) or TikTok account (account_id) link. Pass exactly one. The link is shared, so this also removes it for other Sonar accounts tracking that competitor. Requires an Indie or Agency plan (a trial counts) and an...
account_idstringadvertiser_idstringcompetitor_id*stringsonar_ad_spy_open_pageWRITE tool — open a Facebook page from a recent search or scan without linking it to a competitor, and return its ads (same shape and filters as sonar_ad_spy_ads). The ads are fetched when the cached copy is over 24h old. Spends one of the account's daily Ad Spy lookups (today...8 params
WRITE tool — open a Facebook page from a recent search or scan without linking it to a competitor, and return its ads (same shape and filters as sonar_ad_spy_ads). The ads are fetched when the cached copy is over 24h old. Spends one of the account's daily Ad Spy lookups (today...
formatstringvideo · image · carousel · texthistory_daysintegerinclude_hiddenbooleanlimitintegermin_daysintegerpage_id*stringsortstringlongest · newest · variantsstatusstringactive · allsonar_ad_spy_refreshWRITE tool — fetch a page's current Meta ads or a TikTok account's latest videos when the cached copy is over 24h old (a fresher copy comes back unchanged and costs nothing). Linked pages also refresh weekly on their own. Returns the same view as sonar_ad_spy_ads / sonar_ad_sp...2 params
WRITE tool — fetch a page's current Meta ads or a TikTok account's latest videos when the cached copy is over 24h old (a fresher copy comes back unchanged and costs nothing). Linked pages also refresh weekly on their own. Returns the same view as sonar_ad_spy_ads / sonar_ad_sp...
id*stringkind*stringmeta · tiktoksonar_ad_spy_analyze_adWRITE tool — AI breakdown of why an ad works: hook, persuasion angle, creative format, beat-by-beat structure, CTA and a grounded "why it works" (no invented metrics). Analyses are cached for every Sonar account: an ad that already has one comes back free (`cached: true`), oth...1 params
WRITE tool — AI breakdown of why an ad works: hook, persuasion angle, creative format, beat-by-beat structure, CTA and a grounded "why it works" (no invented metrics). Analyses are cached for every Sonar account: an ad that already has one comes back free (`cached: true`), oth...
creative_id*stringsonar_ad_spy_scriptWRITE tool — adapt a proven competitor ad's FORMAT (not its claims or brand) into an organic TikTok or Reels script the user can film: hook, beats (shot + on-screen text), soft CTA, audio and caption ideas. Every call is a new AI generation and spends one of the account's dail...3 params
WRITE tool — adapt a proven competitor ad's FORMAT (not its claims or brand) into an organic TikTok or Reels script the user can film: hook, beats (shot + on-screen text), soft CTA, audio and caption ideas. Every call is a new AI generation and spends one of the account's dail...
app_idstringcreative_id*stringplatformstringtiktok · reelssonar_ad_spy_hide_adsWRITE tool — remove irrelevant ads from this account's scans ("Remove from scan"), or put them back with hidden: false. Per account only; other accounts still see them. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the wri...2 params
WRITE tool — remove irrelevant ads from this account's scans ("Remove from scan"), or put them back with hidden: false. Per account only; other accounts still see them. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the wri...
creative_ids*arrayhiddenbooleansonar_ad_spy_vault_saveWRITE tool — save Meta ads to the account's private vault: details are frozen and the media downloaded into Sonar's storage, so the ad survives being stopped or its links expiring. Saves what fits the plan's vault limit and reports the rest as `over_limit`; poll sonar_ad_spy_v...2 params
WRITE tool — save Meta ads to the account's private vault: details are frozen and the media downloaded into Sonar's storage, so the ad survives being stopped or its links expiring. Saves what fits the plan's vault limit and reports the rest as `over_limit`; poll sonar_ad_spy_v...
competitor_idstringcreative_ids*arraysonar_ad_spy_vault_updateWRITE tool — set or clear a saved ad's note and/or retry its media download. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.3 params
WRITE tool — set or clear a saved ad's note and/or retry its media download. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.
item_id*stringnotevalueretrybooleansonar_ad_spy_vault_removeWRITE tool — delete a saved ad and its stored media files from the vault. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.1 params
WRITE tool — delete a saved ad and its stored media files from the vault. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.
item_id*stringSponsors
Configuration
SONAR_API_KEY*secretYour Sonar API key (aso_...). Create one at https://trysonar.app
SONAR_API_URLdefault: https://trysonar.appAPI base URL. Defaults to https://trysonar.app.
Readme
@sonarapp/mcp
The official Sonar MCP server — App Store Optimization tools for AI agents.
For the hosted Grok Build and Cursor marketplace plugin, see plugin setup, authentication, and permissions.
Lets Claude Desktop, Claude Code, Cursor, Cline, and any Model Context Protocol-compatible client look up apps, research keywords, audit ASO, mine reviews, and estimate revenue across the iOS App Store and Google Play. Powered by Sonar.
Tools
55 tools covering the whole Sonar REST API, grouped by what they need.
Read tools — stateless (any plan with credits)
Details
- Repository
- github.com/trysonar/mcp
- Category
- Mobile Development
- Package
@sonarapp/mcp- Transport
- STDIO, HTTP
- Auth
- Required
- Registry
- MCP registry, active
- Tools verified
- Nov 6, 2026