Sonar MCP Server
Official Sonar MCP server. Drops App Store Optimization tools into Claude Desktop, Claude Code, Cursor, Codex, Cline, and any Model Context Protocol-compatible client. AI agents can look up apps, research keywords, audit ASO, and analyze reviews directly from chat.
Tools
The server exposes 53 tools covering the entire Sonar API — iOS App Store and Google Play, all with one API key: 10 stateless lookups, 15 workspace reads, 16 write tools that set up and manage your tracking and alerts, and 12 Screenshot Studio tools. The hosted endpoint exposes 52 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.
| Tool | Description |
|---|---|
| sonar_app_lookup | Look up app metadata by store ID (rating, reviews, category, installs, price) |
| sonar_app_search | Search apps by keyword in store ranking order |
| sonar_app_aso_score | ASO audit score (0-100) with itemized checks |
| sonar_app_extract_keywords | Extract target keywords from an app's listing |
| sonar_app_reviews | Fetch reviews with rating filters and sort options |
| sonar_app_revenue | Estimate monthly revenue with methodology |
| sonar_keyword_search | Keyword research — difficulty, popularity, related terms |
| sonar_keyword_metrics | Difficulty + popularity for specific keywords (single or bulk) |
| sonar_keyword_suggestions | Autocomplete suggestions from the store |
| sonar_top_charts | Top free/paid/grossing chart with day-over-day movement, new entries and biggest movers |
Workspace read tools (Indie plan)
Read your tracked apps, keywords, rankings, competitor data, products, and alert subscriptions. Require a Indie plan (an active trial counts); the default read-scope key is enough. Available in @sonarapp/mcp ≥ 0.5.0.
| Tool | Description |
|---|---|
| sonar_list_apps | List your tracked apps with latest snapshots (rating, reviews, installs) |
| sonar_get_app | App detail + up to 90 days of snapshot history |
| sonar_app_keywords | Keywords tracked for an app, with difficulty + popularity |
| sonar_app_rankings | Daily rank history for an app's tracked keywords |
| sonar_app_changes | Detected releases, metadata edits, screenshot/price/category changes |
| sonar_keyword_rankings | SERP history for a tracked keyword — who ranked, when |
| sonar_competitor_keywords | Keywords a competitor ranks for + gap analysis vs your app |
| sonar_competitor_landscape | Full competitive picture for one of your own apps — gap/winnable/threat/lead stats + latest AI insight |
| sonar_list_products | Your products with linked store versions + competitor counts (find app/product UUIDs) |
| sonar_list_alerts | Your alert subscriptions with effective thresholds and enabled state |
| sonar_alert_events | Detected alert events feed (rank drops, review spikes, …) — poll with since to react to changes |
| sonar_discovered_keywords | Keywords Sonar discovered for an app but not yet tracked — ranked/gap/idea buckets, sorted by opportunity |
| sonar_review_insights | Latest AI review analysis for a tracked app — praise/complaint themes, sentiment, feature requests |
| sonar_app_overview | The dashboard's computed scoreboard — visibility + share of voice, movement, best rank, opportunity list |
| sonar_portfolio | Agency-only portfolio rollup — per-app KPIs, movers, needs-attention triage, cross-app opportunities |
Write tools (Indie 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, and untrack or delete anything it set up. They require an Indie 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.
| Tool | Description |
|---|---|
| sonar_create_product | Create a product in your workspace and start tracking its app(s) |
| sonar_track_app | Link the second-store version (iOS ↔ Android) of an existing product |
| sonar_track_competitor | Add a competitor app under a product |
| sonar_track_keywords | Start daily rank tracking for keywords on an app (bulk, idempotent) |
| sonar_update_keyword_note | Set or clear the note on a tracked keyword |
| sonar_star_keyword | Star/unstar a tracked keyword (favorite/target marker) |
| sonar_scan_competitor | Run a keyword discovery scan on a competitor and record ranks |
| sonar_analyze_competitors | Generate a fresh AI competitive insight for one of your own apps (7-day cooldown, paid non-trial plans) |
| sonar_generate_review_insights | Generate a fresh AI review analysis for a tracked app (90-day cooldown, paid non-trial plans) |
| sonar_delete_tracked_keyword | Stop tracking one keyword/app pair |
| sonar_untrack_keywords | Untrack many keywords for an app — pass exactly one of all:true or ids:[…] |
| sonar_untrack_app | Untrack an app and its org-scoped data |
| sonar_delete_product | Delete a product and untrack its apps |
| sonar_remove_competitor | Remove a competitor from a product (auto-untracks the app if nothing else references it) |
| sonar_set_alert | Create or update an alert subscription (upserts on type + scope) |
| sonar_delete_alert | Delete an alert subscription |
Screenshot Studio tools (Indie 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.
| Tool | Description |
|---|---|
| sonar_screenshot_layout_guide | Embedded layout-format reference — call once before authoring layouts |
| sonar_screenshot_devices | Supported device sizes + canvas dimensions |
| sonar_list_screenshot_sets | A product's screenshot sets (metadata) |
| sonar_create_screenshot_set | Create a set from layouts or a built-in template |
| sonar_get_screenshot_set | Full set — layouts + per-locale translations |
| sonar_update_screenshot_set | Rename / replace locales / reorder screens |
| sonar_delete_screenshot_set | Delete a set with its screens and translations |
| sonar_add_screenshot | Append a screen to a set |
| sonar_update_screenshot | Replace one screen's layout |
| sonar_delete_screenshot | Delete a screen (the last one is protected) |
| sonar_set_screenshot_translations | Write one locale's translation overrides |
| sonar_export_screenshots | Server-rendered store-ready PNG ZIPs, one per locale — no browser needed |
1. Get an API key (or skip this step entirely)
Using an OAuth-capable client? Claude Code and claude.ai custom connectors 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.
No key? The server runs in free mode: app search, app lookup, ASO score, keyword extraction, and keyword suggestions 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)
For ChatGPT, use https://trysonar.app/mcp/chatgpt and connect your existing Sonar account. 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. Native directory availability depends on OpenAI review and publication.
For Claude and other streamable-HTTP MCP clients, use https://trysonar.app/mcp. OAuth-capable clients (Claude Code, claude.ai custom connectors) 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:
claude mcp add --transport http sonar https://trysonar.app/mcpAlternatively, 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 31 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/mcpRestart 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/mcpOr 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.
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.duolingoon 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
1517783697on 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
| Variable | Required | Description |
|---|---|---|
| SONAR_API_KEY | no | Your Sonar API key (aso_...). Without it the npx server runs in free mode; the hosted endpoint can use OAuth instead. |
| SONAR_API_URL | no | Override 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
- REST API reference — same data, called over HTTP
- CLI reference — same data, from your terminal
- API Credits — pricing for AI agents
- @sonarapp/mcp on npm
- Source on GitHub
- Agent skills on GitHub — ready-made ASO workflows (keyword research, audits, competitor analysis) for Claude Code, Cursor, and any Agent Skills-compatible client