@sonarapp/mcpMCP

Sonar MCP Server

Official Sonar MCP server. Drops App Store Optimization tools into Claude Code, Codex, Cursor, Claude Desktop, ChatGPT, Cline, and any Model Context Protocol-compatible client. AI agents can look up apps, research keywords, audit ASO, and analyze reviews directly from chat.

At a glance

Hosted MCP server
https://trysonar.app/mcp — streamable HTTP. Sign in through the browser on the first tool call that needs your account; no API key or install.
Claude Code
claude mcp add --transport http sonar https://trysonar.app/mcp
With an API key
claude mcp add sonar -e SONAR_API_KEY=aso_your_key_here -- npx -y @sonarapp/mcp — runs the npm package locally, for scripts, CI and clients without OAuth. Keys start with aso_.
Claude directory
Sonar ASO connector at https://claude.ai/directory/sonar
ChatGPT
The Sonar app in ChatGPT: https://chatgpt.com/plugins/plugin_asdk_app_6ab4efdf6b2081918af783da376edf18 — connect it and sign in with your Sonar account, no API key. It runs on https://trysonar.app/mcp/chatgpt.
MCP tools
80 tools covering the whole REST API (79 on the hosted endpoint — exporting screenshots to disk is local-only).
npm packages
@sonarapp/[email protected] (MCP server) · @sonarapp/[email protected] (CLI, binary sonar)
Free tier
No account or key: 7 stateless endpoints (app lookup, app search, ASO score, keyword extraction, keyword suggestions, keyword metrics and top charts). 30 requests/day per IP shared, and keyword metrics allows 5 keywords/day per IP.
API credits
50 free credits on signup. Prepaid packs, no subscription, credits never expire: $10 / 1,000 credits · $20 / 2,500 credits · $50 / 7,000 credits · $100 / 15,000 credits.
Indie plan
$29/month or $290/year · 10 apps · 2,500 tracked keywords · competitors uncapped · 1 seat · 1,000 API requests/day
Agency plan
$149/month or $1,490/year · 50 apps · 10,000 tracked keywords · competitors uncapped · 5 seats · 5,000 API requests/day · portfolio rollup, white-label client reports

Tools

The server exposes 80 tools covering the entire Sonar API — iOS App Store and Google Play, all with one API key: 10 stateless lookups, 19 workspace reads (including App Store Connect sales and engagement and your review inbox), 22 write tools that set up and manage your tracking, alerts and review replies, 12 Screenshot Studio tools, and 17 Ad Spy tools for your competitors' Meta ads and TikTok videos. The hosted endpoint exposes 79 tools; filesystem screenshot export is available only in the local package. An agent can create a product, track keywords and competitors, then read back rankings, changes, discovered-keyword suggestions, review insights, and gap analyses — and tear any of it down again.

Stateless read tools

Live store lookups — no tracking required. Work on any plan with credits.

ToolDescription
sonar_app_lookupLook up app metadata by store ID (rating, reviews, category, installs, price)
sonar_app_searchFind apps by keyword (to get a store ID). Compact rows by default; source says the order — app_store (the App Store's own, top 50), itunes_search (text-match fallback, not a rank) or google_play. Rank history: sonar_app_rankings
sonar_app_aso_scoreASO audit score (0-100) with itemized checks
sonar_app_extract_keywordsExtract target keywords from an app's listing
sonar_app_reviewsFetch reviews with rating filters and sort options
sonar_app_revenueEstimate monthly revenue with its likely range, install base and methodology
sonar_keyword_searchKeyword research — difficulty, popularity, related terms
sonar_keyword_metricsDifficulty + popularity for specific keywords (single or bulk)
sonar_keyword_suggestionsAutocomplete suggestions from the store
sonar_top_chartsTop free/paid/grossing chart with day-over-day movement, new entries and biggest movers. Compact by default (no icon URLs or numeric ids)

When the store is throttling, sonar_app_lookup, sonar_app_search, sonar_app_reviews and sonar_keyword_suggestions can return Sonar's stored copy instead of an error. The result is then { data, meta }, with meta.stale: true, the copy's date in meta.stale_as_of, and a meta.note for the agent to pass on.

Compact by default. sonar_app_search, sonar_top_charts, sonar_get_app, sonar_app_rankings, sonar_keyword_rankings, sonar_discovered_keywords, sonar_ad_spy_ads and sonar_ad_spy_tiktok_posts take fields: "compact" | "full" and default to compact, which leaves out long descriptions, screenshot and icon URLs, per-day grids and internal ids. A 50-keyword rank history drops from about 38k to about 5.6k tokens. Pass fields: "full" when the agent needs the rest.

Workspace read tools (Indie or Agency plan)

Read your tracked apps, keywords, rankings, competitor data, products, alert subscriptions, and your own iOS apps' App Store reviews (the review tools also need App Store Connect connected in Sonar). Require an Indie or Agency plan (an active trial counts); the default read-scope key is enough. Available in @sonarapp/mcp ≥ 0.5.0.

ToolDescription
sonar_list_appsList your tracked apps with latest snapshots (rating, reviews, installs)
sonar_get_appApp detail + snapshot history. Compact by default (listing basics + the 7 newest snapshots); fields: "full" for description, screenshots and up to 90 snapshots
sonar_app_keywordsKeywords tracked for an app, with difficulty + popularity
sonar_app_rankingsDaily rank history for an app's tracked keywords. Compact by default (current rank, best rank, positions gained, newest-first daily ranks: a number, "unranked" = checked but not found, null = no check); fields: "full" for the per-day status grid
sonar_app_changesDetected releases, metadata edits, screenshot/price/category changes
sonar_keyword_rankingsSERP history for a tracked keyword — who ranked, when. Compact by default (no icon URLs)
sonar_competitor_keywordsKeywords a competitor ranks for + gap analysis vs your app
sonar_competitor_landscapeFull competitive picture for one of your own apps — gap/winnable/threat/lead stats + latest AI insight
sonar_list_productsYour products with linked store versions + competitor counts (find app/product UUIDs)
sonar_list_alertsYour alert subscriptions with effective thresholds and enabled state
sonar_alert_eventsDetected alert events feed (rank drops, review spikes, …) — poll with since to react to changes
sonar_discovered_keywordsKeywords Sonar discovered for an app but not yet tracked — ranked/gap/idea buckets, sorted by opportunity. Compact by default (no discovered-row id, store or timestamps; keyword_id stays)
sonar_review_insightsLatest AI review analysis for a tracked app — praise/complaint themes, sentiment, feature requests
sonar_app_overviewThe dashboard's computed scoreboard — visibility + share of voice, movement, best rank, opportunity list
sonar_portfolioAgency-only portfolio rollup — per-app KPIs, movers, needs-attention triage, cross-app opportunities
sonar_app_salesApp Store Connect sales for your iOS app — downloads, redownloads, IAP units, approximate proceeds, by day and country
sonar_app_engagementApp Store Connect analytics for your iOS app — impressions (incl. product page views), page views, downloads, rates, sources, sessions
sonar_review_responderReview responder settings for your own iOS app — on/off, manual or auto mode, instructions, reply language, this month's AI-draft usage
sonar_review_inboxYour iOS app's App Store reviews with reply state, AI draft, English translations, hold reasons and the live App Store response

Write tools (Indie or Agency plan + write scope)

Write tools mutate your workspace — they let an agent add your app, link competitors, start rank tracking, annotate keywords, run competitor scans, manage alert subscriptions, reply to your App Store reviews, and untrack or delete anything it set up. sonar_post_review_reply publishes a public reply under your developer name and needs an Admin-role App Store Connect key. They require an Indie or Agency plan (an active trial counts) and either an OAuth sign-in on the hosted endpoint (which carries write access — the grantor is the account owner) or an API key created with the write scope at /developers. Both are enforced server-side.

ToolDescription
sonar_create_productCreate a product in your workspace and start tracking its app(s)
sonar_track_appLink the second-store version (iOS ↔ Android) of an existing product
sonar_track_competitorAdd a competitor app under a product
sonar_track_keywordsStart daily rank tracking for keywords on an app (bulk, idempotent)
sonar_update_keyword_noteSet or clear the note on a tracked keyword
sonar_star_keywordStar/unstar a tracked keyword (favorite/target marker)
sonar_scan_competitorRun a keyword discovery scan on a competitor and record ranks
sonar_analyze_competitorsGenerate a fresh AI competitive insight for one of your own apps (7-day cooldown, paid non-trial plans)
sonar_generate_review_insightsGenerate a fresh AI review analysis for a tracked app (90-day cooldown, paid non-trial plans)
sonar_delete_tracked_keywordStop tracking one keyword/app pair
sonar_untrack_keywordsUntrack many keywords for an app — pass exactly one of all:true or ids:[…]
sonar_untrack_appUntrack an app and its org-scoped data
sonar_delete_productDelete a product and untrack its apps
sonar_remove_competitorRemove a competitor from a product (auto-untracks the app if nothing else references it)
sonar_set_alertCreate or update an alert subscription (upserts on type + scope; new_review takes a star threshold and an instant, hourly or daily cadence)
sonar_delete_alertDelete an alert subscription
sonar_set_review_responderSwitch the review responder on or off and set its instructions or auto-mode policy (delay, star range, daily cap)
sonar_draft_review_replyWrite a fresh AI reply draft for a review, with an optional hint (monthly allowance, then 1 credit); never posts
sonar_update_review_replyReplace a review's reply text, optionally translating your English into the reviewer's language (not metered)
sonar_post_review_replyPublish the reply on the App Store now or after a delay — a public action; needs an Admin App Store Connect key
sonar_dismiss_review_replyMark a review as not needing a reply
sonar_cancel_review_replyCancel a scheduled reply before it posts

Screenshot Studio tools (Indie or Agency plan; mutations need write scope)

Agents author app-store screenshot sets as layout JSON; humans review and fine-tune the same sets in the Screenshot Studio (every set response carries a studio_url). Call sonar_screenshot_layout_guide once before authoring layouts. Image fields accept https:// URLs — fetched and inlined server-side.

ToolDescription
sonar_screenshot_layout_guideEmbedded layout-format reference — call once before authoring layouts
sonar_screenshot_devicesSupported device sizes + canvas dimensions
sonar_list_screenshot_setsA product's screenshot sets (metadata)
sonar_create_screenshot_setCreate a set from layouts or a built-in template
sonar_get_screenshot_setFull set — layouts + per-locale translations
sonar_update_screenshot_setRename / replace locales / reorder screens
sonar_delete_screenshot_setDelete a set with its screens and translations
sonar_add_screenshotAppend a screen to a set
sonar_update_screenshotReplace one screen's layout
sonar_delete_screenshotDelete a screen (the last one is protected)
sonar_set_screenshot_translationsWrite one locale's translation overrides
sonar_export_screenshotsServer-rendered store-ready PNG ZIPs, one per locale — no browser needed

Ad Spy tools (Indie or Agency plan; lookups and changes need write scope)

Your competitors' Meta ads and public TikTok videos. Start with sonar_ad_spy_competitors. Cached reads are free; searches, refreshes of a copy over 24 hours old, an ad's first analysis and scripts spend the account's daily Ad Spy lookups (10 on a trial, 25 on Indie, 100 on Agency, shared with the dashboard). Past them a refresh returns the cached copy with a meta.note to relay. Scans never link a page on their own: the agent shows the candidates and links the one the user picks.

ToolDescription
sonar_ad_spy_competitorsTracked competitors with their linked Facebook pages and TikTok accounts, plus today's Ad Spy lookup allowance
sonar_ad_spy_adsA page's cached Meta ads — longevity, variants, placements, velocity history, permanent Ad Library links
sonar_ad_spy_tiktok_postsA linked TikTok account's cached public videos with views, shares and breakout flags
sonar_ad_spy_ad_analysisAn ad's cached AI analysis (hook, angle, structure, why it works)
sonar_ad_spy_vaultYour saved ads with status, notes and privately stored media
sonar_ad_spy_scanFind a competitor's Facebook page or TikTok account — candidates with the best match flagged, never links (1 lookup)
sonar_ad_spy_search_pagesSearch Facebook advertiser pages by brand name (1 lookup)
sonar_ad_spy_linkConfirm the page or TikTok account the user picked for a competitor
sonar_ad_spy_unlinkRemove a wrong competitor → page or account link
sonar_ad_spy_open_pageOpen a searched page without linking it (fetches when stale: 1 lookup)
sonar_ad_spy_refreshFetch current ads or TikTok videos when the copy is over 24h old (1 lookup)
sonar_ad_spy_analyze_adAI breakdown of why an ad works — free when cached, else 1 lookup
sonar_ad_spy_scriptTurn an ad's format into an organic TikTok or Reels script for your app (1 lookup)
sonar_ad_spy_hide_adsRemove ads from your scans, or put them back
sonar_ad_spy_vault_saveSave Meta ads to your private vault
sonar_ad_spy_vault_updateSet a saved ad's note or retry its media download
sonar_ad_spy_vault_removeDelete a saved ad and its stored files

1. Get an API key (or skip this step entirely)

Using an OAuth-capable client? Claude Code, Claude (Desktop and claude.ai custom connectors), Cursor and Codex can use the hosted endpoint with no API key at all — the first tool call that needs your account opens a browser sign-in, you approve it with your Sonar login, and the agent gets full access (read + write) to the workspace you own. API keys below are for the npx package, scripts, and clients without OAuth support. Per-client setup: Connect your agent.

No key? The server runs in free mode: app lookup, app search, ASO score, keyword extraction, keyword suggestions and top charts work with no key at all (shared 30 requests/day per IP), and keyword metrics allows 5 keywords/day. Just skip the env block in the config below and ask your agent about ASO. For everything else, you need a Sonar API key. Get one at trysonar.app/developers — keys start with aso_.

New accounts receive 50 free credits on signup — enough to evaluate every endpoint. Top up with prepaid packs from $10 (1,000 credits) when you need more. No subscription required; see the credits page for details and pack sizes.


2. Add the server to your MCP client

Two ways to connect: the hosted endpoint (nothing to install) or the @sonarapp/mcp npm package run locally via npx. Pick whichever your client supports — the tools are identical.

Hosted endpoint (no install)

In ChatGPT, use the Sonar app — there's no URL to add (see ChatGPT below). It runs on https://trysonar.app/mcp/chatgpt.

For Claude and other streamable-HTTP MCP clients, use https://trysonar.app/mcp. OAuth-capable clients (Claude Code, Claude Desktop and claude.ai custom connectors, Cursor, Codex) need no API key at all — add the server and a browser window asks you to authorize with your Sonar login the first time a tool needs it. Cursor takes { "mcpServers": { "sonar": { "url": "https://trysonar.app/mcp" } } } in ~/.cursor/mcp.json; Codex takes url = "https://trysonar.app/mcp" under [mcp_servers.sonar] in ~/.codex/config.toml, then codex mcp login sonar. Claude Code:

claude mcp add --transport http sonar https://trysonar.app/mcp

Alternatively, pass an API key as a bearer token — required for clients without OAuth support:

claude mcp add --transport http sonar https://trysonar.app/mcp --header "Authorization: Bearer aso_your_key_here"

Or as a remote-server config block:

{
  "mcpServers": {
    "sonar": {
      "url": "https://trysonar.app/mcp",
      "headers": { "Authorization": "Bearer aso_your_key_here" }
    }
  }
}

Claude Desktop

Open the config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add the sonar entry:

{
  "mcpServers": {
    "sonar": {
      "command": "npx",
      "args": ["-y", "@sonarapp/mcp"],
      "env": {
        "SONAR_API_KEY": "aso_your_key_here"
      }
    }
  }
}

Restart Claude Desktop. The 80 sonar_* tools will appear in the tool picker.

Claude Code

One-liner from your shell:

claude mcp add sonar -e SONAR_API_KEY=aso_your_key_here -- npx -y @sonarapp/mcp

Restart your Claude Code session and the tools will load automatically.

Cursor

Add to ~/.cursor/mcp.json (or per-project .cursor/mcp.json):

{
  "mcpServers": {
    "sonar": {
      "command": "npx",
      "args": ["-y", "@sonarapp/mcp"],
      "env": { "SONAR_API_KEY": "aso_your_key_here" }
    }
  }
}

Codex CLI

One-liner (recent Codex versions):

codex mcp add sonar --env SONAR_API_KEY=aso_your_key_here -- npx -y @sonarapp/mcp

Or add the server manually to ~/.codex/config.toml:

[mcp_servers.sonar]
command = "npx"
args = ["-y", "@sonarapp/mcp"]
env = { "SONAR_API_KEY" = "aso_your_key_here" }

Start a new Codex session and the sonar_* tools will be available.

ChatGPT

Sonar is a published app in ChatGPT, so there's no server URL, config file or API key to add:

  • Open the Sonar app in ChatGPT.
  • Connect it to your ChatGPT account.
  • Sign in with your Sonar account when ChatGPT asks. Approving the connection grants read and write access to the workspace you own, subject to your account's permissions and entitlements. If a session expires, reconnect when prompted.

Before you sign in, the free research tools (app lookup, app search, ASO score, keyword extraction, keyword suggestions, keyword metrics and top charts) already work within the keyless daily limits. The app talks to https://trysonar.app/mcp/chatgpt, the ChatGPT version of the hosted endpoint with the same 79 tools. Step-by-step guide: Connect Sonar to ChatGPT.

Cline / other MCP clients

Most clients use the same command + args + env shape. Point the command at npx -y @sonarapp/mcp and pass SONAR_API_KEY in the env. Some clients require an absolute path to npx — run which npx and use that.


3. Try it

Once installed, try prompts like:

  • “Use Sonar to look up Spotify on iOS in the US store and report its rating, review count, and category.”
  • “Run an ASO audit on com.duolingo on Android and tell me what to fix.”
  • “Research the keyword habit tracker on iOS — give me difficulty, popularity, and 5 related terms with lower difficulty I should consider.”
  • “Pull the 50 most recent 1- and 2-star reviews of 1517783697 on iOS US and group complaints by theme.”
  • “Search meditation on the App Store and estimate monthly revenue for the top 5 results.”
  • “Create a Sonar product for my app com.example.myapp, track its top 20 extracted keywords, and add Headspace as a competitor.”
  • “How did my tracked keywords move in the last 30 days? Flag anything that dropped more than 5 spots and check whether a competitor shipped a release around that time.”

Configuration

VariableRequiredDescription
SONAR_API_KEYnoYour Sonar API key (aso_...). Without it the npx server runs in free mode; the hosted endpoint can use OAuth instead.
SONAR_API_URLnoOverride base URL (default https://trysonar.app). HTTPS only, except localhost.

Pinning a version

By default npx -y @sonarapp/mcp resolves to the latest version. To pin:

"args": ["-y", "@sonarapp/[email protected]"]

See the package on npm for the version history.


Privacy & data flow

The MCP server is a thin client around the Sonar REST API. Your API key is sent as a Bearer token over HTTPS. Tool inputs and the resulting JSON pass through your AI client; the @sonarapp/mcp package itself does not log anything.


Troubleshooting

“SONAR_API_KEY is not set”

Your MCP client did not pass the env var through. Check the env section of your client's config. Some clients ignore env when the command path isn't absolute — try which npx and use that path.

“Authentication failed”

Your key is invalid, expired, or your subscription lapsed. Check /developers.

Tools don't appear in the picker

Restart the MCP client after editing config. In Claude Desktop, fully quit (Cmd+Q) — closing the window isn't enough. In Claude Code, end the session and start a new one.


See also