Skip to main content
Glama

Server Details

ASO tools for AI agents: keyword research, rank tracking, competitor analysis (iOS & Android).

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 82 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
trysonar/mcp
GitHub Stars
0
Server Listing
@sonarapp/mcp
ChatGPT
–
Claude
Sonar ASO

TDQS

A3.7/5.0

Scored across 79 tools

Disambiguation3/5

Most tools are distinct and the descriptions do heavy lifting to separate near-neighbors (cached read vs. WRITE generate, sonar_app_rankings vs. sonar_keyword_rankings, sonar_review_insights vs. sonar_app_reviews). But the set contains genuine redundancies — sonar_delete_tracked_keyword is explicitly equivalent to sonar_untrack_keywords with one id, sonar_ad_spy_open_page / sonar_ad_spy_refresh / sonar_ad_spy_ads all return the same ad view, and the app-identity cluster (app_lookup vs get_app vs list_apps vs list_products vs track_app vs create_product) is subtle enough to invite misselection.

Naming Consistency3/5

Names are uniformly snake_case with a sonar_ prefix, which is good, but the convention underneath is mixed: some tools are verb-first (get_app, list_apps, create_product, track_keywords, delete_alert) while others are entity-first (app_keywords, app_rankings, app_overview, keyword_metrics, top_charts, portfolio). The ad_spy_* family is consistent, but the core ASO surfaces mix both patterns for the same kinds of operations, so an agent can't reliably predict a name.

Tool Count2/5

79 tools is far past the comfortable range and forces an agent to choose among many similar-sounding options on every call. The breadth is partly justified — the server spans keyword research, rank tracking, competitor analysis, reviews, screenshots, alerts, ad spy, and App Store Connect analytics — but several clusters (screenshot studio alone is ~10 tools, ad spy ~16) could be consolidated into fewer parameterized tools.

Completeness4/5

Coverage is unusually thorough: full lifecycles for products/apps, keywords (track/untrack/star/note/rankings/discovery), reviews (inbox, draft, edit, post, schedule, cancel), screenshot sets (CRUD, screens, translations, devices, layout guide), alerts (list/set/delete/events), and ad spy (competitors, scan, link, refresh, analyze, script, vault). Only minor gaps remain, such as no update/rename operation for a product and read-only App Store Connect analytics.

Available Tools

79 tools
sonar_add_screenshotAdd ScreenshotAInspect

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.

NameRequiredDescriptionDefault
layoutNoOmit for a blank screen.
set_idYesScreenshot set to append to.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), and the description adds non-obvious requirements not in the schema: an Indie plan (trials count) and an authorized account or write-scope API key. This is genuine additional context beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the action and its ordering behavior come first, followed by prerequisites. Every clause earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter append tool with no output schema, the description covers action, ordering, prerequisites, and auth. An agent has enough to invoke it correctly, though it doesn't describe the resulting state or any limits on set size.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (set_id and layout) are already documented, including the 'omit for a blank screen' hint. The description adds nothing parameter-specific, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb (append) and resource (a screen to a screenshot set), with the append-at-end semantics made explicit. It also names the sibling sonar_update_screenshot_set for reordering, clearly distinguishing it from create/update/delete screenshot tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains that the new screen is appended at the end and points to sonar_update_screenshot_set when reordering is needed, which is useful routing. It does not, however, state when to prefer this over creating a new set or other alternatives explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_ad_analysisCached Ad AnalysisA
Read-onlyIdempotent
Inspect

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).

NameRequiredDescriptionDefault
creative_idYesSonar id of an ad (the `id` of an item in `ads` from sonar_ad_spy_ads) — not the Meta `ad_id`.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered; the description adds information the annotations cannot express: the read is free (no analysis credits consumed), it is plan-gated to Indie/Agency, and it returns `analysis: null` rather than erroring when no analysis exists. That null-vs-error distinction is the key behavioral fact for correct agent handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the return payload, followed by short clauses for the fallback, cost and plan gate. Slightly awkward mid-sentence dash construction for the sibling routing, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still enumerates what comes back (analysis fields plus video transcript) and covers the null case, cost, and plan prerequisite. Nothing an agent needs in order to call this correctly and interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the `creative_id` field already spells out that it is the Sonar id from sonar_ad_spy_ads, not the Meta `ad_id`. The description adds nothing about the parameter, so the baseline 3 applies — the schema carries the full parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: the cached AI analysis of an ad (hook, angle, format, structure, CTA, why it works) plus its video transcript, and explicitly names the empty case (`analysis: null`). It also names the sibling sonar_ad_spy_analyze_ad as the counterpart, so an agent can separate the cached read from the analysis-generating tool without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit routing rule: if the result is null / not yet analyzed, call sonar_ad_spy_analyze_ad instead. It also states the access condition (Indie or Agency plan, trial counts) and that the call is free, which are the two conditions an agent needs before choosing this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_adsCompetitor Meta AdsA
Read-onlyIdempotent
Inspect

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 running and a longevity tier (30d+/60d+/90d+), and daily history of active/new ads (creative velocity). No spend or impression data exists for ads outside the EU — longevity and variants are the signals. Compact by default (no expiring media links; fields: "full" adds them). Media URLs are expiring CDN links; always give users each ad's permanent library_url. refresh_due: true means the copy is over 24h old (sonar_ad_spy_refresh fetches it). Cached read. Requires an Indie or Agency plan (a trial counts).

NameRequiredDescriptionDefault
sortNolongest running (default), newest, or most variants.
limitNoAds to return (1-300, default 50).
fieldsNo"compact" (default): each ad without its expiring `media` links and `media_expires_at` — ids, the permanent `library_url`, dates, days running, longevity, format, copy, CTA, landing URL, placements, variants and EU reach stay (about 2.4× smaller). "full": adds each ad's `media` (video/image CDN links, which expire) and `media_expires_at` — only for downloading media right away.compact
formatNoOnly ads in this format.
statusNoactive (default) = running now; all = include stopped ads.
min_daysNoOnly ads running at least this many days — longevity is the honest 'winner' signal (30/60/90).
history_daysNoDays of daily active/new-ad history (default 30).
advertiser_idYesSonar advertiser id of a Facebook page (`advertiser_id` from sonar_ad_spy_competitors, or `advertiser.id` from sonar_ad_spy_open_page).
include_hiddenNoInclude ads this account removed from its scans.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations: discloses that no spend or impression data exists outside the EU, that longevity and variant counts are the substitute signals, that media URLs are expiring CDN links and library_url is the permanent one, and what refresh_due=true implies. The compact/full payload tradeoff and plan gating are exactly the kind of context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what is returned, then moves to signals, payload shape, freshness, and access requirements in a logical order. The compact-vs-full point is stated twice (parenthetical plus the media URL sentence), which is minor redundancy in an otherwise dense, purposeful block.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter read tool with no output schema, the description fully describes the return surface (stats block, filtered ads, daily history) and flags the key constraints (EU-only reach data, expiring media, plan requirement). Nothing an agent needs in order to call it and interpret the result is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still earns credit by explaining why min_days matters (longevity is the honest winner signal, 30/60/90) and the size/expiry tradeoff between compact and full. It adds interpretive value on top of an already well-documented schema rather than restating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — a Facebook page's cached Meta ads — and enumerates the payload (ad stats, filtered ads with copy/CTA/landing URL/placements/days running/longevity tier, daily active-new history). It names related siblings (sonar_ad_spy_refresh, sonar_ad_spy_competitors, sonar_ad_spy_open_page) by role, so an agent can place it in the family without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the acquisition path (cached read; refresh via sonar_ad_spy_refresh when refresh_due is true) and states the plan prerequisite (Indie or Agency, trial counts). It does not explicitly contrast itself with sonar_ad_spy_ad_analysis or sonar_ad_spy_analyze_ad, which are the closest siblings, so the when-not guidance is incomplete rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_analyze_adAnalyze Competitor AdAInspect

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), otherwise the first analysis spends one of the account's daily Ad Spy lookups (a video transcript plus one AI call). Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
creative_idYesSonar id of an ad (the `id` of an item in `ads` from sonar_ad_spy_ads) — not the Meta `ad_id`.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false; the description goes well beyond that by disclosing the caching model, the 'cached: true' marker on repeat calls, the cost (one of the account's daily Ad Spy lookups, consisting of a video transcript plus one AI call), and the plan/auth prerequisites. It also sets a scope boundary — no invented metrics — so the agent knows the analysis is grounded in the ad's actual content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the WRITE label and the output contents, then cost/caching, then prerequisites — a sensible ordering that matches how an agent decides and executes. It is dense but every clause carries operational information; the only minor cost is the length of the parenthetical describing the lookup's composition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no output schema, the description covers everything an agent needs: what is produced, what an existing cached entry looks like in the response, what the call costs, and what entitlements are required. The absence of an output schema is compensated by the enumerated result fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter and schema description coverage is 100%, with the schema itself clarifying that creative_id is the Sonar ad id from sonar_ad_spy_ads rather than the Meta ad_id. The description adds no additional parameter guidance, so the baseline of 3 applies — the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (analyze/generate a breakdown) and resource (a competitor ad) and enumerates the concrete output sections: hook, persuasion angle, creative format, beat-by-beat structure, CTA, and a grounded 'why it works'. It explicitly labels itself a WRITE tool, distinguishing it from the sibling sonar_ad_spy_ad_analysis, which by name reads as a retrieval counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear qualifying conditions — requires an Indie/Agency plan (trial counts) and an authorized account or write-scoped API key — plus the practical rule that already-cached ads come back free instead of consuming a lookup. It does not explicitly name sonar_ad_spy_ad_analysis as the cheaper read path, so the routing to that sibling is left inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_competitorsAd Spy CompetitorsA
Read-onlyIdempotent
Inspect

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 with no linked page needs sonar_ad_spy_scan then sonar_ad_spy_link. Cached read. Requires an Indie or Agency plan (a trial counts).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, but the description adds behavior the annotations cannot: the response is cached, and the call is gated behind an Indie or Agency plan (a trial counts). It also explains that a usage allowance with used/limit/remaining/resets_at is returned, which tells the agent to watch for quota exhaustion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the routing purpose before the payload detail and the plan caveat. Every clause carries information: what it returns, what to do when data is missing, and what the call costs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so burden falls on the description to describe returns, and it does so field-by-field along with the plan and quota prerequisites. Nothing an agent needs in order to call this zero-arg tool or interpret its result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the schema baseline is 4 and there is nothing parameter-level to explain. The description does add value by naming the response fields (meta_pages, tiktok_accounts, allowance counters) an agent should look for, even though these are outputs rather than inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (every competitor the account tracks) and enumerates exactly what comes back: linked meta_pages, tiktok_accounts, last page scan, and today's lookup allowance. The opening 'Start here for competitor ads' positions it against the many sibling ad_spy tools without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit entry point ('Start here'), plus a concrete routing rule for the edge case: a competitor with no linked page needs sonar_ad_spy_scan then sonar_ad_spy_link. Names the alternative tools and the condition that selects them, so the agent never has to guess a next step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_hide_adsHide Ads From ScansA
Idempotent
Inspect

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 write scope.

NameRequiredDescriptionDefault
hiddenNotrue (default) removes them from this account's scans; false puts them back.
creative_idsYesAds to hide or restore (Sonar ad ids).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, and the description adds genuinely new behavior: the effect is account-scoped only ('other accounts still see them'), the change is reversible via hidden:false, and there are plan and auth-scope gates. It does not describe the response payload, but that is minor given the safety profile is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the write/mutation marker and the primary action, followed by the scoping and prerequisite details. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with full schema coverage and annotations, the description covers scope, reversibility, and access requirements. The only gap is the absence of any statement about the return value, which matters slightly since no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, including the hidden default and the warning to use Sonar ids rather than Meta ad_id. The description only restates the restore semantics with 'hidden: false' and adds nothing about batch limits or id sourcing beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with an explicit 'WRITE tool' marker, then states the specific verb+resource: remove ads from this account's scans, with the inverse operation (hidden: false) named in the same sentence. An agent can distinguish this from read-oriented siblings like sonar_ad_spy_ads without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real operational preconditions — per-account scope, Indie/Agency plan (trial counts), authorized account or write-scoped API key. It does not name an alternative tool or state when-not to use it, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_open_pageOpen Facebook Page AdsAInspect

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's usage comes back in allowance from sonar_ad_spy_competitors); re-opening the same page, account or ad the same day is free. Past the allowance a refresh returns the cached copy with meta.stale and a meta.note to relay. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
sortNolongest running (default), newest, or most variants.
limitNoAds to return (1-300, default 50).
formatNoOnly ads in this format.
statusNoactive (default) = running now; all = include stopped ads.
page_idYes`page_id` of a candidate from sonar_ad_spy_search_pages or sonar_ad_spy_scan (last 2 days).
min_daysNoOnly ads running at least this many days — longevity is the honest 'winner' signal (30/60/90).
history_daysNoDays of daily active/new-ad history (default 30).
include_hiddenNoInclude ads this account removed from its scans.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare write/openWorld/non-idempotent/non-destructive; the description adds the substantive behavior an agent cannot infer: a 24h cache refresh threshold, consumption of one daily Ad Spy lookup, free same-page-account-ad re-opens within a day, and the degraded path past the allowance (cached copy with meta.stale plus a meta.note the agent is told to relay). It also discloses plan and authorization prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the WRITE marker and the action, then cost, then failure mode, then prerequisites. Every clause carries information, though the final sentence packs quota, cache, plan, and auth into one dense run that could be split for scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with 8 params and no output schema, the definition covers everything an agent needs: where page_id comes from, what the returned payload looks like via the sonar_ad_spy_ads reference, what stale results look like, what the call costs, and what account/plan state is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with enums and ranges already documented for all 8 parameters, so the schema carries the load. The description adds only a pointer that filters match sonar_ad_spy_ads and a note that page_id derives from search_pages/scan — useful framing but no per-parameter semantics beyond structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with 'WRITE tool' then a specific verb+resource: open a Facebook page from a recent search or scan and return its ads. It explicitly distinguishes itself from the linking flow ('without linking it to a competitor') and anchors the response shape to sonar_ad_spy_ads, so an agent can place it among sonar_ad_spy_link, sonar_ad_spy_ads, and sonar_ad_spy_refresh without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the entry condition clearly: the page_id must come from a recent search or scan (last 2 days), and the tool is the non-linking path. Cost conditions are spelled out (one daily lookup, same-day re-opens free, plan and scope requirements). The alternative tool is implied rather than named — it never says 'use sonar_ad_spy_link if you want competitor tracking' — so it falls just short of explicit when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_refreshRefresh Competitor AdsAInspect

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_spy_tiktok_posts. Spends one of the account's daily Ad Spy lookups (today's usage comes back in allowance from sonar_ad_spy_competitors); re-opening the same page, account or ad the same day is free. Past the allowance a refresh returns the cached copy with meta.stale and a meta.note to relay. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
idYesadvertiser_id (kind meta) or account_id (kind tiktok) from sonar_ad_spy_competitors.
kindYes"meta" refreshes a Facebook page's ads; "tiktok" a TikTok account's videos.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say write/non-idempotent/open-world; the description goes well beyond by disclosing quota mechanics (one daily Ad Spy lookup, free same-day re-opens, allowance visible via `allowance` from sonar_ad_spy_competitors), the over-quota fallback (`meta.stale` plus `meta.note` to relay), and plan/auth prerequisites. No contradiction with readOnlyHint=false or destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the write nature and the freshness trigger, then quota, fallback, and auth in descending priority; every sentence carries information. It is a single dense paragraph with stacked parentheticals, which costs a little readability but not content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two params, full schema coverage, and no output schema, the description covers what remains: return shape (same view as the sibling read tools), failure-mode payloads (`meta.stale`/`meta.note`), cost model, and authorization requirements. An agent can decide and call correctly from this alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are documented there, including the meta/tiktok enum meanings and the id source. The description only restates the provenance of `id` (from sonar_ad_spy_competitors) rather than adding new constraints, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first clause names a specific verb (refresh/fetch) plus the two resources (Meta ads, TikTok videos) and scopes it to stale cache. It explicitly tells the agent it returns the same view as sonar_ad_spy_ads / sonar_ad_spy_tiktok_posts, so the difference from those siblings is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the trigger condition (cached copy over 24h old), the no-op case ('a fresher copy comes back unchanged and costs nothing'), and the free same-day re-open case. Alternatives are named directly via sonar_ad_spy_ads / sonar_ad_spy_tiktok_posts, leaving nothing material to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_scanFind Competitor PageAInspect

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 page mapping is shared by every Sonar account, so a wrong link misleads everyone). A Meta scan that found nothing in the last 24h replays for free (cooldown: true). Spends one of the account's daily Ad Spy lookups (today's usage comes back in allowance from sonar_ad_spy_competitors); re-opening the same page, account or ad the same day is free. Past the allowance a refresh returns the cached copy with meta.stale and a meta.note to relay. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
queryNoSearch this brand name or @handle instead of the app's name.
channelNo"meta" (default) finds the Facebook page; "tiktok" the TikTok account.
competitor_idYesSonar app id of a tracked competitor (an `app_id` from sonar_ad_spy_competitors), or its store id.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, so the write/open-world nature is covered structurally. The description goes well beyond them by disclosing quota consumption, the free-repeat cooldown, cached stale responses with a `meta.note` to relay, and plan/auth requirements — genuinely useful operational context. It stops short of describing the candidate list shape or how ranking works, so a 3 rather than higher.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the "WRITE tool" marker and the core action before operational caveats. Dense with parentheticals (cooldown, allowance, plan requirement) which are individually load-bearing but make the prose heavier than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter write tool with no output schema, the definition covers the action, the follow-up workflow, cost/quota behavior, cached-result fallback, and access requirements. Nothing an agent needs in order to invoke it correctly and interpret the outcome is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and all three parameters carry their own descriptions including the channel enum. The description reinforces channel semantics ("meta" for Facebook, "tiktok" for TikTok) but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb plus resource ("search a competitor's Facebook page ... or TikTok account") and names the return shape (ranked candidates with a `best_match` flag). It explicitly negates the neighboring capability ("never links"), so an agent can separate it from sonar_ad_spy_link and sonar_ad_spy_search_pages without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the follow-up action explicitly: show candidates, let the user confirm, then call sonar_ad_spy_link, with the rationale that the mapping is account-shared. It also gives exclusions and edge conditions (unambiguous top match, free 24h cooldown replay, same-day re-open free, stale fallback past allowance), which is the full when/when-not picture.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_scriptOrganic Script From AdAInspect

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 daily Ad Spy lookups (plus one for the ad's first analysis when it has none yet). Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
app_idNoOne of the user's own apps (an `id` from sonar_list_apps) to ground the script; omit for [YOUR APP] placeholders.
platformNotiktok (default) or reels (Instagram Reels).
creative_idYesSonar id of an ad (the `id` of an item in `ads` from sonar_ad_spy_ads) — not the Meta `ad_id`.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (which only flag non-read-only, non-idempotent, closed-world) by disclosing that every call is a fresh AI generation, consumes one daily Ad Spy lookup plus an extra lookup for a first-time ad analysis, and requires specific plan and auth scopes. This is exactly the cost/entitlement context an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the operation and output shape, then prerequisites and cost. Dense but nearly every clause carries information; the second sentence is long but justified by the billing and entitlement caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still enumerates the returned script structure (hook, shot/text beats, soft CTA, audio, caption) plus platform targets, cost model, and plan/auth requirements. An agent has everything needed to decide and call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in-schema, including the creative_id vs Meta ad_id distinction and the app_id placeholder behavior. The description adds the framing that only format is borrowed, but no additional per-parameter syntax or format detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and artifact: adapting a competitor ad's FORMAT into an organic TikTok/Reels script with named components (hook, beats, soft CTA, audio, caption). The parenthetical '(not its claims or brand)' sharply distinguishes it from ad-copying or analysis siblings like sonar_ad_spy_ad_analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames the use case (turn a proven ad format into a filmable organic script) and adds preconditions: Indie/Agency plan or trial, and an authorized Sonar account or write-scope API key. It does not name a specific alternative tool or say when NOT to use it versus sonar_ad_spy_analyze_ad.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_search_pagesSearch Facebook AdvertisersAInspect

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 comes back in allowance from sonar_ad_spy_competitors); re-opening the same page, account or ad the same day is free. Past the allowance a refresh returns the cached copy with meta.stale and a meta.note to relay. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
queryYesBrand or company name, e.g. "duolingo".

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag a non-readonly, open-world, non-idempotent call, and the description corroborates with "WRITE tool". It adds genuinely useful context the annotations cannot carry: it spends one of the account's daily Ad Spy lookups, same-day re-opens are free, over-allowance calls return a cached copy flagged with meta.stale and a meta.note to relay, and an Indie/Agency plan plus write-scoped auth is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, each carrying distinct information (purpose, routing, cost/auth), with the tool's own verb and resource front-loaded. The quota and plan constraints are packed into one long clause, which is slightly heavy but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by naming the relevant response fields (allowance, meta.stale, meta.note) and the auth/plan prerequisites. For a single-parameter search tool, nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and the schema already documents it at 100% coverage with an example ("Brand or company name, e.g. \"duolingo\""). The description's "free-text search ... by brand or company name" restates the schema rather than adding syntax, normalization, or matching-behavior detail, so the high-coverage baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("free-text search for Facebook advertiser pages") plus the qualifying scope "by brand or company name, not tied to a tracked competitor", which separates it from competitor-bound siblings like sonar_ad_spy_scan or sonar_ad_spy_competitors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the two concrete follow-up paths and their conditions: open a result with sonar_ad_spy_open_page, or attach it to a competitor with sonar_ad_spy_link. It also states the quota consequence of calling, which is the main decision factor versus other discovery tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_tiktok_postsCompetitor TikTok VideosA
Read-onlyIdempotent
Inspect

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 (fields: "full" adds it). Cached read; sonar_ad_spy_refresh with kind "tiktok" fetches newer videos. Requires an Indie or Agency plan (a trial counts).

NameRequiredDescriptionDefault
sortNoOrder (default most viewed).
limitNoVideos to return (1-200, default 50).
fieldsNo"compact" (default): each video without its expiring `cover_url`; the permanent `url`, caption, dates and every counter stay. "full": adds `cover_url` (an expiring CDN image link).compact
account_idYesSonar id of a linked TikTok account (`account_id` from sonar_ad_spy_competitors).

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations it discloses non-obvious traits: results are cached (so potentially stale), newer data requires a separate refresh call, `cover_url` expires while `url` is permanent, and access is gated to Indie/Agency plans. It also defines the derived `breakout` flag (≥3× the account's median views), which is behavioral meaning an agent could not infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with what is returned, then the compact/full trade-off, then freshness and plan gating. Dense and mostly waste-free, though the parenthetical counter list and the `breakout` definition make the first sentence long.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so well: field list, the breakout flag, and the compact/full difference including which URL is durable. It covers caching, refresh, and plan gating. What it omits is pagination/truncation behavior beyond `limit` and the shape of the response envelope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so baseline is 3. The description still adds value by explaining the consequence of `fields`: compact omits the expiring `cover_url` but keeps the permanent `url`, caption, dates and all counters. It does not discuss `sort` or `limit` beyond the schema, so it earns only a modest lift over baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a precise verb+resource+scope: 'A linked TikTok account's cached public videos with real counters (views, likes, comments, shares, saves), caption, post date and a `breakout` flag'. It names the sibling that does the adjacent job (sonar_ad_spy_refresh) and clarifies the cached-vs-live distinction, so an agent can separate it from refresh without reading either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing advice: 'Cached read; sonar_ad_spy_refresh with kind "tiktok" fetches newer videos', which tells the agent when to pick the alternative. It also states the plan prerequisite (Indie/Agency, trial counts). It stops short of saying when NOT to use this tool at all (e.g. for non-TikTok platforms or unlinked accounts), so it is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_vaultAd Spy VaultA
Read-onlyIdempotent
Inspect

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 public links. Requires an Indie or Agency plan (a trial counts).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only annotations, the description discloses that saved details are frozen at save time, lists possible status values, describes included notes/media, explains vault limit usage, and flags that media URLs are private and API-key-gated. These are meaningful behavioral and access constraints that an agent would not know from annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it first identifies the vault contents and ordering, then adds privacy context and plan requirements. Every sentence carries useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only tool with no output schema, the description is complete enough to tell an agent what is returned, how it is ordered, what statuses exist, and what access limitations apply. No critical calling information appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics to document and the baseline is 4. The description does not need to compensate for an input schema, and it appropriately focuses on output content and access constraints instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: the account's saved ads in the vault, returned newest first, with frozen details, statuses, notes, media files, and plan usage. It distinguishes itself from sibling vault operations like save/remove/update by describing the stored vault contents rather than a mutation action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear prerequisites — an Indie or Agency plan, with trials counting — and warns that asset URLs require the account’s API key and must not be shared publicly. It does not explicitly name when to use this instead of vault_save, vault_remove, or vault_update, but the viewing context is clear from the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_vault_removeRemove Saved AdA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
item_idYesA vault item `id` from sonar_ad_spy_vault.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, yet the description adds genuinely new context: that stored media files are also destroyed, that an Indie or Agency plan (trial included) is required, and that the caller needs an authorized account or an API key with write scope. It stops short of stating reversibility or cascade effects on linked references.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both load-bearing, with the "WRITE tool" marker and the destructive scope front-loaded ahead of the prerequisite details. No redundant or filler language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with no output schema, the definition covers what is destroyed and what access is required, which is what an agent needs before calling. It omits whether the removal can be undone or what the response confirms, leaving a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single item_id parameter is fully documented in the schema, so the description need not restate it. The description adds nothing about the identifier's format or sourcing, which is correct at baseline for one well-documented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("delete") and resource ("a saved ad and its stored media files from the vault"), which separates it from sonar_ad_spy_vault_save and sonar_ad_spy_vault_update. It does not explicitly name those siblings, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the delete verb and the plan/auth prerequisites, but there is no explicit guidance on when to remove versus update or hide an ad, and no named alternative tool. It gives prerequisites rather than selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_vault_saveSave Ads to VaultAInspect

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_vault for status. An ad whose media links already expired is refetched once, which spends one Ad Spy lookup. Requires an Indie or Agency plan (a trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
creative_idsYesMeta ads to save.
competitor_idNoThe competitor these ads belong to (its Sonar app id).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the provided annotations by detailing internal operational behaviors. It explains that media is downloaded and details specific logic regarding expired links—they are refetched once, which incurs a specific cost ('one Ad Spy lookup').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is highly dense but maximizes information density; every sentence conveys critical operational detail. It avoids unnecessary jargon while clearly laying out constraints and consequences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a vault-saving mechanism, this is extremely complete. It covers authentication needs, storage limits, state management (polling), and resource costs, leaving no ambiguity for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since the schema description coverage is 100%, the baseline score is 3. However, the description adds useful semantic context by clarifying that 'creative_ids' refers to the internal Sonar ID, not the external Meta Ad ID, which is a vital distinction.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific term 'save Meta ads to the account's private vault,' clearly identifying the action and the resource. It distinguishes this function from other related functions by focusing on the persistence and freezing of the ad details and media within Sonar's storage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides comprehensive usage guidelines, including plan requirements (Indie or Agency), necessary permissions (authorized account/API key), and operational flow. Crucially, it outlines the limitation behavior, reporting 'over_limit,' and instructs the user to poll 'sonar_ad_spy_vault' for status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_ad_spy_vault_updateUpdate Saved AdA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
noteNoNote text; null clears it.
retryNotrue re-queues a failed or partial media download.
item_idYesA vault item `id` from sonar_ad_spy_vault.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a non-read-only, idempotent, non-destructive, closed-world mutation, so the "WRITE tool" label adds little. The genuine additions are the plan gate (Indie/Agency, trial counts) and the write-scope auth requirement, which are valuable; missing is behavior on failure, whether retry is only valid for failed/partial items, and any rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the action first, prerequisites second. No filler, though the em-dash and parenthetical phrasing is slightly dense; it could front-load the item scope more explicitly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter, fully documented mutation with no output schema, the description covers action, plan tier, and auth scope adequately. It leaves out error/not-found behavior and whether a successful call returns the updated item, which are minor given the small surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter already carries its own description, including 'null clears it' and what `retry` re-queues. The description's 'set or clear' and 'retry its media download' restate the schema rather than adding format or edge-case detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb phrase and resource: sets or clears a saved ad's note and re-queues its media download. That is clearly distinguishable from sibling mutators like sonar_ad_spy_vault_save and sonar_ad_spy_vault_remove by effect, even though it doesn't name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the two supported actions (edit note, retry download) and the plan/auth prerequisites, which implies when to reach for it. However, it never tells the agent when NOT to use it or which sibling to pick instead (e.g., vault_save for a new item, update_keyword_note for keyword notes).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_alert_eventsAlert Events FeedA
Read-onlyIdempotent
Inspect

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/keyword names, old vs new values). Events only exist for alert types you've enabled rules for (sonar_set_alert); detection runs once daily. Poll with since to react to changes programmatically. Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault
typeNoFilter to one alert type. Omit for all types.
limitNoMax events to return (1-200). Default 50.
sinceNoOnly events created at/after this ISO 8601 timestamp (e.g. "2026-08-01T00:00:00Z"). Use your last poll time to fetch only new events.
app_idNoFilter to events about one tracked app (Sonar app UUID or store id).

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds substantial behavioral context: newest-first ordering, parity with the in-app Recent Alerts panel and email digest, type-specific payloads, dependency on enabled alert rules, daily detection cadence, and the Indie-plan requirement. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: it front-loads what the feed is and its ordering, then covers prerequisites, cadence, and polling behavior. Each clause carries operational information, with no filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description gives the agent enough to call the tool correctly: event categories, payload contents, the dependency on enabled rules, daily detection, and plan requirements. It could be slightly more complete by mentioning event identifiers or how to paginate beyond `limit`, but those are minor for a read-only feed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by prescribing `since` for polling use, tying `type` to the alert rules the user has enabled, and indicating that payloads vary by event type. It does not discuss `limit` or `app_id`, but the schema already documents those fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a feed of detected alert events for the workspace, newest first, and enumerates the event types. It also indirectly distinguishes itself from rule-management tools by noting events only exist for alert types enabled via sonar_set_alert. However, it lacks an explicit verb like 'list' or 'get' and does not directly contrast with the sibling sonar_list_alerts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit operational guidance: poll with `since` to react programmatically, and expect detection to run once daily. It also states the prerequisite that alert rules must be enabled. It does not explicitly say when to prefer this over list_alerts/delete_alert, so it stops short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_analyze_competitorsAnalyze Competitors (AI)AInspect

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, and diffs against the previous analysis. At most one analysis per app per 7 days (429 with the next available time while in cooldown — use sonar_competitor_landscape to read the current one). Requires a paid (non-trial) Indie plan and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
app_idYesSonar app UUID of YOUR OWN tracked app to analyze. NOT a store id, NOT a competitor id.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false), and the description goes well beyond them: it discloses a 7-day per-app rate limit with the exact 429 cooldown behavior, and the authorization requirements (paid non-trial Indie plan, authorized account or API key with write scope). That is the kind of operational context an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the critical "WRITE tool" signal, then capabilities, then constraints, then auth — a sensible priority order with no filler sentences. The middle capability clause is a dense multi-item run-on, but every clause carries distinct information, so the density is defensible rather than wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing returns, and it does so concretely (named opportunity themes with why-now narrative and per-keyword metrics, threat narratives, diff vs previous). Combined with rate-limit and auth disclosure, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, and schema description coverage is 100% — the schema already spells out "Sonar app UUID of YOUR OWN tracked app to analyze. NOT a store id, NOT a competitor id." The description's "one of your own apps" reinforces the ownership constraint but adds no format or sourcing detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("generates a fresh AI competitive insight for one of your own apps") and enumerates the three concrete artifacts it produces: opportunity themes, threat narratives, and a diff against the prior analysis. This is clearly distinguishable from read-oriented siblings like sonar_competitor_landscape or sonar_competitor_keywords.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-not condition ("At most one analysis per app per 7 days") including the failure mode (429 with next available time) and names the alternative for reading the existing result ("use sonar_competitor_landscape to read the current one"). It also states the plan and auth prerequisites that gate invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_aso_scoreASO ScoreA
Read-onlyIdempotent
Inspect

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 daily use per IP).

NameRequiredDescriptionDefault
storeYesApp store. "ios" for Apple App Store, "android" for Google Play.
countryNoMarket as an ISO 3166-1 alpha-2 code (e.g. "us", "gb", "de", "mt"). Any App Store storefront (175 countries) or Google Play market (145). Default "us".us
store_idYesStore-specific app identifier. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, non-destructive, openWorld), so the bar is lower. The description adds genuinely new behavioral context: it discloses the return shape (overall score plus itemized checks) and an operational constraint (free tier with limited daily use per IP). That rate-limit disclosure is exactly the kind of detail annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the verb and return value, then the improvement use case, then the operational caveat. Nothing is wasted, though the trailing 'etc.' is slightly loose and the return-value sentence could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully explains what comes back (score + itemized breakdown). Rate limits and no-API-key operation are covered, and the required inputs are handled by the schema. Missing only guidance on failure modes or how the breakdown is structured, which is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents store, country, and store_id in detail (including enum values and storeId cross-reference to sonar_app_search). The description adds no parameter-level meaning beyond 'for an app', so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Calculate an ASO (App Store Optimization) audit score (0-100) for an app.' The purpose is unambiguous and none of the sibling tools (keyword, screenshot, rankings, revenue) do the same thing, so an agent can route to it without confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage ('so you can identify what to improve') and notes it works without an API key, but never states when to prefer this over adjacent tools like sonar_app_overview, sonar_app_extract_keywords, or sonar_analyze_competitors, nor any prerequisites. Usage context is implied rather than prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_changesApp Change HistoryA
Read-onlyIdempotent
Inspect

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, dates), newest first. Useful for correlating rank movements with what the app (or a competitor) changed. Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault
typeNoFilter to one change type. Omit for all types.
limitNoMax changes to return (1-200). Default 50.
app_idYesSonar app UUID — the `id` returned by sonar_list_apps or sonar_create_product. NOT a store id.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered; the description adds ordering ('newest first'), a plan gate ('Requires an Indie plan (trial counts)'), and which fields each specialized change type carries. It omits pagination/continuation behavior, which is the only notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single dense paragraph, front-loaded with the resource and scope, and the ordering rule and use case land before the parenthetical detail. The long parenthetical enumeration of change types is information-dense but earns its place; slightly heavy for one sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries return-value burden — it discloses ordering and the fields for the two specialized types, plus the plan requirement. It could say more about the shape/fields of the common change records, but what an agent needs to call the tool correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with an enum and default documented, so baseline is 3. The description goes further by explaining what the `header` and `in_app_event` enum values actually yield (action added/changed/removed plus artwork; title, kind, dates), which the schema does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (change history for a tracked app) and enumerates the exact change classes it returns: releases, metadata edits, screenshot swaps, price changes, category moves, header swaps, and iOS In-App Events. An agent can distinguish this from sibling tools like sonar_app_overview or sonar_alert_events purely from the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete use case — 'correlating rank movements with what the app (or a competitor) changed' — which implies when to reach for it. It also names the `type` filter's role ('omit for all types') and the plan prerequisite. It stops short of naming alternatives (e.g. sonar_alert_events) or stating when NOT to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_engagementApp Engagement (App Store Connect)A
Read-onlyIdempotent
Inspect

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 referrer…), plus daily installs, deletions and sessions. Impressions follow App Store Connect's definition and INCLUDE product page views, so totals reconcile with ASC. Downloads come from the Sales report. Same numbers as the Engagement page. iOS only. Requires the Agency plan (403 on other plans) AND an App Store Connect connection with an Admin-role key (key_lacks_analytics otherwise); Apple delivers the first analytics 24-48 hours after connecting (pending). Always check status: anything other than ready (not_connected, not_ios, app_not_in_account, pending, key_lacks_analytics) means there's no data and message says how to fix it — never read an empty series as zero. Days Apple hasn't reported yet have reported: false and null metrics.

NameRequiredDescriptionDefault
endNoLast day of the window (YYYY-MM-DD, inclusive). Default yesterday (UTC) — Apple posts a day the next morning at the earliest.
daysNoWindow length in days (1-366) when `start` is omitted. Default 30.
startNoFirst day of the window (YYYY-MM-DD, inclusive). Omit to count `days` back from `end`.
storeNoOnly needed when `app_id` is a store id tracked in both stores. App Store Connect data is iOS-only.
app_idYesSonar app UUID of one of your own tracked iOS apps — the `id` returned by sonar_list_apps or sonar_create_product. The app's store id (bundle id) also works; pass `store` if it exists in both stores.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this read-only, idempotent and non-destructive, but the description goes well beyond them: 403 gating on plan tier, `key_lacks_analytics`, `pending` delivery lag of 24-48h, the full set of non-ready status values with their fixes, `reported: false`/null semantics, and the warning not to read an empty series as zero. That is exactly the behavioral context an agent cannot get from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the funnel definition comes first, then data sources, then prerequisites, then the status/error protocol. Every clause carries information, though the status enumeration is long enough that it reads as a wall of text rather than a tight structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description explains what comes back (funnel metrics, conversion rates, source breakdown, daily series, status/message, reported flags) and how to interpret gaps. For a complex, connection-gated analytics tool, the agent has everything needed to call it and to avoid misreading results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (including the `store` enum and window semantics) are already documented in the schema. The description reinforces the ASC-definition subtlety (impressions include product page views) and the Sales-report provenance of downloads, but adds little per-parameter meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (App Store Connect App Analytics funnel for one of your own iOS apps) and enumerates exactly what it returns: impressions → page views → downloads, conversion rates, search share, sources, installs, deletions, sessions. The iOS-only framing plus 'Downloads come from the Sales report' distinguishes it from siblings like sonar_app_sales and sonar_app_revenue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use: requires Agency plan and an ASC connection with an Admin-role key, and tells the agent to always check `status` before reading data. It does not, however, name a sibling alternative or state explicitly when to prefer sonar_app_sales / sonar_app_overview instead, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_extract_keywordsExtract App KeywordsA
Read-onlyIdempotent
Inspect

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).

NameRequiredDescriptionDefault
maxNoMaximum number of keywords to extract (1-50, default 20).
storeYesApp store. "ios" for Apple App Store, "android" for Google Play.
countryNoMarket as an ISO 3166-1 alpha-2 code (e.g. "us", "gb", "de", "mt"). Any App Store storefront (175 countries) or Google Play market (145). Default "us".us
store_idYesStore-specific app identifier. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds genuinely new operational context not present in structured fields: no API key required and a per-IP daily free-tier rate limit, which matters for call planning.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is extracted and how it is ranked, then use case, then the constraint. Nothing is redundant with the name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only extraction tool with full schema coverage, annotations covering safety, and no output schema, the description supplies what is missing (ranking, competitor relevance, free-tier limits). It could be tighter on return shape (e.g., how many keywords come back by default), but that is largely covered by the 'max' parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all four parameters (store, store_id, country, max) are fully documented in the schema, including the store_id cross-reference to sonar_app_search. The description adds no parameter-level detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Extract the most likely target keywords from an app's title and description') and adds ranking behavior. It is clear what the tool produces, though it never names or contrasts the closely related siblings (sonar_app_keywords, sonar_competitor_keywords, sonar_keyword_suggestions), so an agent must infer the distinction from the inputs alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for understanding what an app (yours or a competitor) is optimizing for' implies the use case and adds the free-tier constraint, but there is no explicit when-to-use vs. when-not, and no alternative tool is named despite several keyword-oriented siblings existing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_keywordsList App KeywordsA
Read-onlyIdempotent
Inspect

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 keyword_ids used by sonar_keyword_rankings. Cursor-paginated (default 50 per page). Requires an Indie plan (trial counts). popularity (5-100) is the value Sonar's dashboard shows: Apple's Search Popularity when Apple has a real reading; when Apple reports a keyword below its threshold (popularity_apple 5, about 20) it is Sonar's estimate (at most 18). popularity_source says which (apple | proxy), popularity_apple is Apple's own reading (null on Android), popularity_proxy is Sonar's estimate beside a floored reading.

NameRequiredDescriptionDefault
limitNoPage size (1-200). Server default applies when omitted.
app_idYesSonar app UUID — the `id` returned by sonar_list_apps or sonar_create_product. NOT a store id.
cursorNoPagination cursor from a previous call's `next_cursor`. Omit for the first page.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent/non-destructive, so the bar is low, and the description clears it comfortably: it discloses cursor pagination with a default page size of 50, the Indie-plan requirement, and the provenance semantics of `popularity` (apple vs proxy, floored Apple readings, null on Android). That is non-obvious behavioral context an agent cannot get from the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and return fields before the domain detail, with no filler sentences. The popularity paragraph is dense and long, but each sentence carries semantics an agent would otherwise misread, so it earns its space even if it could be broken into shorter clauses.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the work of explaining the returned record shape (difficulty, popularity variants, results count, note, starred_at, ids), plus pagination and plan gating. An agent can call this correctly and interpret the response without further reference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds a detail absent from the schema: the concrete default page size of 50 (the schema only says 'server default applies'). It also clarifies that `keyword_ids` and tracked-keyword ids come back from this call, which frames how pagination params are used.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list tracked keywords for an app) and enumerates the returned fields, so the scope is unambiguous. It never explicitly contrasts itself with the keyword-related siblings (sonar_keyword_metrics, sonar_competitor_keywords, sonar_discovered_keywords), so sibling differentiation is only indirect via the downstream-id mentions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the description tells you the ids feed sonar_update_keyword_note, sonar_star_keyword, and sonar_keyword_rankings, which helps an agent place the tool in a workflow. It gives no explicit when-to-use/when-not versus the other keyword-listing tools, though it does add the practical prerequisite that an Indie plan is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_lookupLook Up AppA
Read-onlyIdempotent
Inspect

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 then comes back as { data, meta } with meta.stale: true, its date in meta.stale_as_of, and a meta.note to pass on to the user.

NameRequiredDescriptionDefault
storeYesApp store. "ios" for Apple App Store, "android" for Google Play.
countryNoMarket as an ISO 3166-1 alpha-2 code (e.g. "us", "gb", "de", "mt"). Any App Store storefront (175 countries) or Google Play market (145). Default "us".us
store_idYesStore-specific app identifier. iOS: bundle ID (e.g. "com.spotify.client") or numeric track ID (e.g. "324684580") — the `storeId` returned by sonar_app_search works as-is. Android: package name (e.g. "com.spotify.music").

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, and the description adds materially new behavior: free-tier daily limits per IP, and a throttling fallback that returns Sonar's stored copy as `{ data, meta }` with `meta.stale: true`, `meta.stale_as_of`, and a `meta.note` to relay to the user. That is exactly the kind of operational detail annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: what it does and returns, the auth/rate-limit profile, then the stale-data contract. Front-loaded with the core action, no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by naming the returned fields and the alternate `{ data, meta }` stale shape. Combined with the free-tier caveat, an agent has everything needed to call it and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so store/country/store_id formats are fully documented in the schema. The description adds only the notion of a 'store ID' and the Android-vs-iOS metadata nuance, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Look up a single app by its store ID') and enumerates what comes back (name, developer, category, rating, reviews, installs, price). This clearly separates it from the search-oriented sibling sonar_app_search, which returns many apps rather than one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Establishes the usage context: single-app lookup keyed by store ID, usable without an API key on the free tier. It also cross-references the workflow ('the storeId returned by sonar_app_search works as-is'). It stops short of explicitly excluding or routing against the near-sibling sonar_get_app, so it is strong context without full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_overviewApp Overview (Dashboard Scoreboard)A
Read-onlyIdempotent
Inspect

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, and the actionable opportunity list (near_page_one / top_three_push / easy_target). Use it when asked how an app is doing: these are the same numbers the dashboard renders, already computed from rank history. Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault
daysNoRank-history window in days (7-90). Default 30.
app_idYesSonar app UUID of one of your own tracked apps — the `id` returned by sonar_list_apps or sonar_create_product. NOT a store id.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new context: it is a computed, rank-history-derived read ('already computed from rank history') and it carries a plan precondition ('Requires an Indie plan (trial counts)'). It does not describe rate limits or response shape, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded before the metric enumeration, and every listed element serves to convey scope. The single dense run-on sentence is long and could be segmented, but it avoids filler and does not pad beyond useful content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the return contents, which an agent needs. Combined with the plan precondition and the when-to-use cue, an agent has enough to call it correctly. Response types/units and any pagination behavior remain unstated, keeping it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (app_id with its UUID/not-a-store-id note, and the days 7-90 window) are already fully documented. The description mentions 7-day deltas and improvements, echoing but not extending the days parameter. With the schema doing the heavy lifting, baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: the dashboard's computed scoreboard for one app, delivered in a single call, and enumerates the exact contents (visibility index, share of voice, keyword counts, improvements/drops, opportunity list). This makes the tool's scope unambiguous. It stops short of naming a sibling (e.g., sonar_app_aso_score or sonar_app_rankings) it differs from, so it does not fully reach the sibling-differentiation bar for a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear trigger: 'Use it when asked how an app is doing.' That gives an agent a concrete context for selection. It does not, however, name alternatives or say when NOT to use it (e.g., versus raw rank or keyword tools), so it is a strong 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_rankingsApp Rank HistoryA
Read-onlyIdempotent
Inspect

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 fields: "full" for the per-day observations grid: ranked has a numeric rank; not_found means a completed search did not return the app (results_count is the returned search size); not_observed means no confirmed check, including legacy gaps. Never interpret an absent rank as a collection failure or assign a numeric rank to it. The legacy history array contains positive ranks only. Use this to check how rankings moved after a metadata change or to find keywords trending up or down. Cursor-paginated over keywords (default 50 per page). Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault
daysNoHistory window in days (1-365). Default 30.
limitNoPage size (1-200). Server default applies when omitted.
app_idYesSonar app UUID — the `id` returned by sonar_list_apps or sonar_create_product. NOT a store id.
cursorNoPagination cursor from a previous call's `next_cursor`. Omit for the first page.
fieldsNo"compact" (default): per keyword: rank + status + measured_at (latest day with a completed check or recorded rank), best_rank, positions_gained (oldest ranked day in the window minus the current rank; positive = moved up), and ranks — one entry per day, newest first starting at ranks_end: a number = the rank, "unranked" = a completed check did not find the app, null = no check that day (never report a null day as not ranked). About 7× smaller. "full": per keyword: the `history` array (positive ranks only) and the daily `observations` grid with status (ranked / not_found / not_observed) and results_count per day.compact
keyword_idNoRestrict to one keyword — a keyword_id from sonar_app_keywords. Omit for all tracked keywords.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description still adds substantial behavior: compact-by-default output shape, a roughly 7x size difference for `full`, cursor pagination at 50 keywords per page, plan gating, and explicit interpretive rules (null ≠ not ranked, absent rank ≠ collection failure, legacy history holds positive ranks only). Those warning-level semantics go well beyond anything in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then output shape, then semantics, then usage and constraints — a sensible order with no filler sentences. It is dense and somewhat long, and the rank/unranked/null encoding is explained in the body in a way that duplicates the `fields` schema text, but nothing is purely decorative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and six parameters, the description carries the return-value burden and discharges it well: default shape, alternate shape, pagination, and ambiguity rules are all covered. It stops short of stating the response envelope (next_cursor handling, total counts) or behavior when the app has no tracked keywords.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the `fields` enum already documents compact vs full, the `ranks` list encoding, positions_gained sign convention, and the observations statuses in comparable detail. The description largely restates that material, adding only the pagination default of 50 per page and the implicit cue that `full` is for day-by-day observation grids.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb-plus-resource statement: rank history for an app's tracked keywords over a requested window. The app-scoped framing implicitly separates it from sonar_keyword_rankings, but it never names that sibling explicitly, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this to check how rankings moved after a metadata change or to find keywords trending up or down" gives concrete decision context, and "Requires an Indie plan (trial counts)" is a useful prerequisite. There is no explicit when-not guidance or named alternative (e.g., sonar_keyword_rankings or sonar_app_keywords).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_revenueEstimate App RevenueA
Read-onlyIdempotent
Inspect

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) with the factors behind it, and the methodology used. On the App Store installs aren't public: they are estimated from that storefront's rating count (source: review_derived), apps differ several-fold in installs per rating, so quote the range rather than the point figure — those estimates are never graded above medium. Google Play's public install count (source: public_install_count) has no install range. The figure is a model estimate, not reported revenue. Needs a Sonar API key or connected account (1 credit per call on prepaid API credits); not part of the free tier.

NameRequiredDescriptionDefault
storeYesApp store. "ios" for Apple App Store, "android" for Google Play.
countryNoMarket as an ISO 3166-1 alpha-2 code (e.g. "us", "gb", "de", "mt"). Any App Store storefront (175 countries) or Google Play market (145). Default "us".us
store_idYesStore-specific app identifier. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive and open-world, and the description layers on real operational context: an API key or connected account is required, billing is 1 credit per call, and it is excluded from the free tier. It also discloses accuracy limits per storefront (never above medium for review-derived iOS installs) and enumerates the returned fields, which annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the return-field list are front-loaded, then the store-specific caveats follow in a logical order. The single dense paragraph is slightly heavy, and the `source` values are mentioned twice, but no sentence is filler given the absence of an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full burden of explaining return values, and it does so field by field (`monthly_range`, `installs` with estimate/low/high/source, confidence grade with factors, methodology). Combined with auth, cost, and per-store accuracy caveats, an agent has everything needed to call it and interpret the result responsibly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description goes further by explaining why `store` matters — iOS installs come from rating counts (`source: review_derived`) while Android exposes a public count with no range. It adds nothing extra for `country` beyond the schema's own ISO-code explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — "Estimate monthly revenue for an app" — plus the signals the model uses (installs, ratings, category benchmarks). The closing line "The figure is a model estimate, not reported revenue" implicitly separates it from the actual-sales sibling, so an agent can pick between them without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong situational guidance: on iOS the install base is derived and estimates are capped at medium confidence, so the caller is told to "quote the range rather than the point figure"; on Google Play there is no install range. It never names a specific sibling alternative (e.g. sonar_app_sales) by name, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_reviewsFetch App ReviewsA
Read-onlyIdempotent
Inspect

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, feature-request mining, and competitive research; for an already-summarized view of a tracked app, sonar_review_insights returns themed AI analysis instead. Needs a Sonar API key or connected account (1 credit per call on prepaid API credits); not part of the free tier. If the store is throttling, the result may be Sonar's stored copy: it then comes back as { data, meta } with meta.stale: true, its date in meta.stale_as_of, and a meta.note to pass on to the user.

NameRequiredDescriptionDefault
langNoAndroid only: fetch one language feed (e.g. ar, fr). Omit to merge the market language plus en, es, fr, ar; coverage is not exhaustive.
sortNoSort order. "recent" returns newest first, "helpful" returns most-voted first.recent
limitNoMaximum number of reviews to return (1-200).
storeYesApp store. "ios" for Apple App Store, "android" for Google Play.
countryNoMarket as an ISO 3166-1 alpha-2 code (e.g. "us", "gb", "de", "mt"). Any App Store storefront (175 countries) or Google Play market (145). Default "us".us
store_idYesStore-specific app identifier. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.
max_ratingNoFilter to reviews with a star rating <= this value (1-5).
min_ratingNoFilter to reviews with a star rating >= this value (1-5).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds substantial context beyond them: API-key/connected-account requirement, cost (1 credit per call, not free tier), and the throttling fallback behavior with the exact `{ data, meta }` shape, `meta.stale`, `meta.stale_as_of`, and `meta.note` to relay to the user.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the four sentences are dense with distinct value (routing, filters-vs-window caveat, cost/auth, stale fallback). It is on the longer side and the throttling detail is information-heavy, but each sentence carries unique information rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description covers the missing pieces an agent needs: auth/cost prerequisites, the sparse-filter caveat, and the alternate return shape under throttling. Nothing needed to call it correctly appears to be absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by explaining that the star-rating filters and `limit` operate on the fetched window (up to ~500), which explains why filtered results can be sparse. It doesn't restate per-parameter syntax, appropriately leaving that to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Fetch user reviews for any app") plus the source ("live from the store") and scope (~500 most recent or helpful per country). It explicitly distinguishes itself from the sibling sonar_review_insights, which returns themed AI analysis, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use contexts (sentiment analysis, feature-request mining, competitive research) and names the alternative for summarized data (sonar_review_insights). It also warns about a usage pitfall: a narrow filter on a small app may return few or no reviews, since filters apply to the fetched window.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_app_salesApp Sales (App Store Connect)A
Read-onlyIdempotent
Inspect

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 sorted by downloads. Same numbers as the Performance page. iOS only. Requires the Agency plan (403 on other plans) AND an App Store Connect connection at /settings/connections. Always check status: anything other than ready (not_connected, not_ios, app_not_in_account, pending, key_lacks_analytics) means there's no data and message says how to fix it — never read an empty series as zero. Days Apple hasn't reported yet have reported: false and null metrics.

NameRequiredDescriptionDefault
endNoLast day of the window (YYYY-MM-DD, inclusive). Default yesterday (UTC) — Apple posts a day the next morning at the earliest.
daysNoWindow length in days (1-366) when `start` is omitted. Default 30.
startNoFirst day of the window (YYYY-MM-DD, inclusive). Omit to count `days` back from `end`.
storeNoOnly needed when `app_id` is a store id tracked in both stores. App Store Connect data is iOS-only.
app_idYesSonar app UUID of one of your own tracked iOS apps — the `id` returned by sonar_list_apps or sonar_create_product. The app's store id (bundle id) also works; pass `store` if it exists in both stores.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: plan-gating behavior (403), the connection prerequisite, the meaning of every non-`ready` status value, the warning never to read an empty series as zero, the `reported: false` null-metric convention, and the static-FX approximation caveat on proceeds_usd_approx. That is exactly the behavioral context an agent cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: what it returns first, then constraints, then the status-handling rules. Every sentence carries operational information, though the status paragraph is long enough that a bulleted treatment would scan faster.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and five parameters, the description carries the full burden and does so: it describes the returned metrics and breakdown shape, the time-window semantics, the gating conditions, and how to interpret empty or partial results. Nothing an agent needs to call and correctly interpret this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so app_id, start, end, days and store are all documented in the schema with patterns, defaults and ranges. The description adds no parameter-level syntax or format detail beyond confirming iOS-only data, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (App Store Connect sales for one of your own iOS apps) and enumerates exactly what is returned: daily first-time downloads, redownloads, IAP units, approximate proceeds, window totals, and a per-country breakdown. The scope narrowing ('iOS only', 'your own apps', 'same numbers as the Performance page') makes it distinguishable from the broader revenue/overview siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete preconditions and failure routing: requires the Agency plan (403 otherwise) and an App Store Connect connection at /settings/connections, plus the instruction to check `status` before trusting data. It does not name an alternative sibling (e.g. sonar_app_revenue) for the non-App-Store-Connect case, so the when-to-use-this-instead guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_cancel_review_replyCancel Scheduled Review ReplyAInspect

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.

NameRequiredDescriptionDefault
review_idYesSonar review id (the `id` of an item from sonar_review_inbox — not Apple's review id).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description adds genuinely useful context: this is a cancellation rather than a deletion, the reply reverts to draft rather than vanishing, and a plan plus write-scoped credential is required. It stops short of saying what happens on a non-scheduled or already-posted reply, and it does not acknowledge the non-idempotent behavior the annotations flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence with the operation class ('WRITE tool') front-loaded, followed by the effect, then the prerequisites. No filler and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool, the description covers what it does, the resulting state, and the access requirements. The only real gap is edge-case behavior when the reply is not currently scheduled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, and the schema already explains that review_id is a Sonar review id from sonar_review_inbox rather than Apple's id. The description adds no further parameter guidance, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('cancel a scheduled reply') and even specifies the state transition ('it goes back to draft'), which cleanly separates it from sonar_post_review_reply and sonar_draft_review_reply in effect. It never explicitly names a sibling tool, so it falls just short of the top band.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The timing condition 'before it posts' tells the agent when the tool applies, and the entry conditions (Indie plan, authorized account or write-scoped API key) are stated outright. What is missing is an explicit exclusion, e.g. what to use if the reply has already been posted, or how it differs from dismiss_review_reply.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_competitor_keywordsCompetitor KeywordsA
Read-onlyIdempotent
Inspect

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). Requires an Indie plan (trial counts). popularity (5-100) is the value Sonar's dashboard shows: Apple's Search Popularity when Apple has a real reading; when Apple reports a keyword below its threshold (popularity_apple 5, about 20) it is Sonar's estimate (at most 18). popularity_source says which (apple | proxy), popularity_apple is Apple's own reading (null on Android), popularity_proxy is Sonar's estimate beside a floored reading.

NameRequiredDescriptionDefault
limitNoPage size (1-200). Server default applies when omitted.
cursorNoPagination cursor from a previous call's `next_cursor`. Omit for the first page.
own_app_idNoSonar app UUID of your own app. When set, each keyword includes your current rank and a gap marker for keywords you don't rank for.
competitor_app_idYesSonar app UUID of the competitor — the `competitor.id` from sonar_track_competitor, or an `id` from sonar_list_apps where is_own is false. NOT a store id.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, it discloses plan requirements, data freshness (last 7 days), pagination defaults, gap-marking behavior, and detailed popularity-source semantics including Apple vs proxy readings. This is rich behavioral context that helps an agent interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and scoping, then moves logically through gap analysis, pagination, plan requirements, and popularity interpretation. The popularity section is lengthy but justified by the nuance it explains; only minor tightening would improve it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description covers the essential context: what is returned, freshness window, pagination, plan gating, gap analysis, and the tricky popularity fields. An agent has enough information to invoke and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the input schema already documents every parameter thoroughly. The description adds some useful meaning, notably the default page size and the gap=missing marker for own_app_id, but most parameter semantics are still carried by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: keywords a tracked competitor currently ranks for, with difficulty and popularity. It also gives scope (last 7 days of SERP data) and distinguishes this from own-app keyword tools by centering on a competitor.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly explains the main usage context: pass own_app_id to get gap analysis, and the tool requires a tracked competitor plus an Indie plan. It does not explicitly name sibling alternatives such as sonar_app_keywords or sonar_keyword_rankings, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_competitor_landscapeCompetitor LandscapeA
Read-onlyIdempotent
Inspect

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 with metrics, and the latest AI insight if one was generated (opportunity clusters, threat narratives, strengths, posture). Use it when choosing which keywords to target next. Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault
app_idYesSonar app UUID of YOUR OWN tracked app (an `id` from sonar_list_apps where is_own is true). NOT a store id, NOT a competitor id.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive/non-open-world, so the safety bar is low. The description adds genuine value beyond them by disclosing the plan gating ('Requires an Indie plan (trial counts)') and the AI-insight condition ('if one was generated'), which the agent cannot infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the opening clause, and the parenthetical inventory of return contents is informative rather than filler. The middle sentence is long and comma-heavy, slightly taxing readability but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so thoroughly: it enumerates live stats, the top gap/threat/lead rows, and the optional AI insight. Combined with the plan requirement and the schema's app_id guidance, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already spells out that app_id is a Sonar UUID of your own app, not a store or competitor id. The description adds nothing about the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource: the full competitive keyword picture for one of your own apps vs every tracked competitor, and enumerates the returned stats (gaps, winnable gaps, climbers, leads). It distinguishes itself functionally ('in one call') from narrower siblings like sonar_competitor_keywords, but never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage context: 'Use it when choosing which keywords to target next.' This tells the agent the decision the tool supports, but gives no when-not guidance and does not point to alternative tools for related questions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_create_productCreate ProductAInspect

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_track_competitor. Own apps count against the plan cap (Indie 10, Agency 50; competitors are not capped) — at the cap the call fails with a 403 plan_limit error. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
appsYes1-2 store versions: a single iOS or Android app, or one of each for a cross-store product.
nameNoProduct name. Optional — defaults to the first app's name.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the write profile (readOnlyHint=false, non-idempotent, openWorld), and the description adds substantial non-redundant behavior: plan caps (Indie 10 / Agency 50, competitors uncapped), the 403 plan_limit failure mode, the required Indie plan, and the write-scope auth requirement. That is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the WRITE marker and core action come first, then product definition, return value, and constraints. Every sentence carries distinct information, though the plan/auth detail makes it longer than strictly minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers return values (product id and Sonar app ids), plan caps, error behavior, and auth requirements. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents the apps array, store enum, country, store_id, and optional name. The description reinforces the 1-2 store-versions framing but adds no format or syntax detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('creates a product in the caller's Sonar workspace'), defines what a product is (cross-store unit of one iOS + one Android app), and distinguishes it from sibling tracking tools. An agent can immediately tell this is the creation entry point rather than a tracking or listing tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the workflow context clearly — this starts tracking apps and produces the ids needed by sonar_track_keywords and sonar_track_competitor — and gives plan/auth preconditions. It does not explicitly contrast against alternatives like sonar_track_app, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_create_screenshot_setCreate Screenshot SetAInspect

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 (studio_url in the response). Requires an Indie plan (trial counts) and an authorized Sonar account or a write-scope API key.

NameRequiredDescriptionDefault
nameNoDisplay name.
storeYesTarget app store.
screensNoInitial screens, in order (max 10). Either this or template_id, not both; with neither you get one blank screen.
product_idYesProduct the set belongs to.
device_sizeYesDevice id from sonar_screenshot_devices, e.g. "iphone-6.7".
template_idNoSeed from a built-in template (see sonar_screenshot_layout_guide) instead of providing screens.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation/safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true). The description adds genuinely useful context beyond that: the plan gating, the auth requirement, and that the set becomes immediately human-visible in the Screenshot Studio with studio_url returned. It does not spell out non-idempotency, but annotations cover that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, then reference routing, then side effects and prerequisites. No filler; every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description steps in to note the returned studio_url, and it covers plan/auth prerequisites and the input-source alternatives. Nothing an agent needs to call this mutation correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters, including the screens/template_id exclusivity and the device_size reference to sonar_screenshot_devices. The description only restates the screens-vs-template choice, adding no format or syntax beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Create) and resource (app-store screenshot set), scoped to a product, and names the two input modes (own screens layouts or built-in template). This distinguishes it from siblings like sonar_add_screenshot and sonar_update_screenshot_set without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routes the agent to sonar_screenshot_layout_guide for the JSON format and template ids, and states prerequisites (Indie plan, authorized account or write-scope API key). It does not give an explicit when-not-to-use case versus sonar_add_screenshot or update_screenshot_set, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_delete_alertDelete Alert RuleA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
idYesThe alert subscription UUID — the `id` returned by sonar_list_alerts or sonar_set_alert.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is partly covered. The description adds value beyond that by disclosing auth requirements (Indie plan, authorized account or API key with write scope), which an agent needs before calling. It stops short of stating irreversibility or what the deletion returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler, and the critical 'WRITE tool' nature is front-loaded before the resource and prerequisites. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, no-output-schema destructive tool, the description covers the operation, its scope, and the permission requirements. Remaining gaps (reversibility, response shape) are minor, and the lack of an output schema means return values need not be explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the id property already explains it is the UUID returned by sonar_list_alerts or sonar_set_alert. The description adds no parameter-level detail, so the baseline 3 applies rather than any compensation being warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'delete an alert subscription in the caller's Sonar workspace.' The 'WRITE tool' prefix disambiguates it from read siblings like sonar_list_alerts, and 'delete' is clearly distinguishable from sonar_set_alert. It does not, however, explicitly name those siblings as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'delete an alert subscription,' and the plan/write-scope prerequisites are useful context, but the description never states when to reach for this tool versus sonar_set_alert (to modify) or sonar_list_alerts (to inspect). No explicit exclusions or routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_delete_productDelete ProductA
DestructiveIdempotent
Inspect

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 not deleted. Returns { id, deleted, untracked_apps }. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
product_idYesSonar product UUID — the `id` returned by sonar_list_products or sonar_create_product.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, and the description goes well beyond them: it enumerates exactly what is destroyed (apps, tracked keywords, discovered keywords, competitor links, screenshot sets) and, crucially, what is preserved (shared store metadata, snapshots, rank history). It also states the auth/plan requirements, which no annotation conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph that is aggressively front-loaded with the operation scope, then the delete/no-delete boundary, then the return shape, then prerequisites. Every clause carries decision-relevant information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description compensates by naming the return object keys ({ id, deleted, untracked_apps }). Combined with the explicit preserved-vs-destroyed inventory and auth requirements, an agent has everything needed to call this correctly and reason about consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single parameter, so the schema already fully documents product_id and its provenance. The description adds nothing about parameter format or sourcing beyond what the schema field description provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) and resource (product) plus the full cascade: untracking every linked app with its tracked/discovered keywords and competitor links, and deleting screenshot sets. This is enough for an agent to distinguish it from the narrower sibling tools like sonar_untrack_app or sonar_delete_screenshot_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description discloses prerequisites (Indie plan, authorized account or write-scope API key) and the blast radius, which helps an agent decide whether it is safe to call. However, it never explicitly contrasts itself with siblings that partially overlap (sonar_untrack_app, sonar_delete_screenshot_set), so the when-to-use-this-vs-alternatives guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_delete_screenshotDelete ScreenshotA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
screenshot_idYesScreen id to delete.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds genuinely new behavior: the last-screen deletion guard, the plan gating (trial counts), and the auth/write-scope requirement. These are exactly the failure modes an agent needs to anticipate before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying distinct information (what it does, the at-least-one-screen rule, the plan/auth requirements), with the core action front-loaded. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive tool with no output schema, the description covers the mutation's guard, plan prerequisite, and auth requirement. An agent has everything needed to decide whether and how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single screenshot_id parameter, so the schema fully documents it ('Screen id to delete'). The description adds no additional format or sourcing detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete one screen from a screenshot set'), and the singular 'one screen' implicitly contrasts with the sibling sonar_delete_screenshot_set, which removes the whole set. An agent can distinguish the two without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions (Indie plan, authorized Sonar account or write-scope API key) and an important usage constraint (a set must keep at least one screen, so deleting the last is rejected). It does not name alternatives or explicitly say when not to use it, but the operational context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_delete_screenshot_setDelete Screenshot SetA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
set_idYesScreenshot set id.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known, yet the description adds genuinely new context: the exact cascade of what gets destroyed (screens and translations), that it is irreversible, and the auth/plan requirements. This is meaningful disclosure beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the destructive scope, then the irreversible warning, then prerequisites. Every sentence carries distinct information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive mutation with no output schema, the description covers everything an agent needs: what is destroyed, irreversibility, and required authorization/plan. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and there is only one parameter (set_id, described as 'Screenshot set id.'), so the schema carries the parameter semantics. The description adds no format, syntax, or ID-source guidance beyond it, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) and resource (screenshot set) and immediately clarifies cascade scope ('everything in it (screens, translations)'), which distinguishes it from the sibling sonar_delete_screenshot that removes a single screenshot. An agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: confirm with the user before deleting work they may want, and states the plan/account prerequisites (Indie plan, authorized Sonar account or write-scope API key). It stops short of explicitly naming alternative tools (e.g., update_screenshot_set or delete_screenshot), so it is a strong 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_delete_tracked_keywordDelete Tracked KeywordA
DestructiveIdempotent
Inspect

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. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
tracked_keyword_idYesThe tracked-keyword UUID — the `id` returned by sonar_app_keywords. NOT the keyword_id.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds non-obvious context the annotations cannot: the plan requirement and the auth/scope requirement. It does not say what gets destroyed beyond the pair itself, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with 'WRITE tool', each carrying distinct information (what it does, which sibling replaces it, what it requires). No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Single required param, no output schema, rich annotations, and the description still covers the destructive-write framing, the id-source convention, the sibling alternative, and the plan/auth prerequisites. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already spells out that tracked_keyword_id is the UUID returned by sonar_app_keywords and not the keyword_id. The description's mention of the same distinction therefore repeats structured data rather than adding meaning — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope ('stop tracking one keyword/app pair in the caller's Sonar workspace') and explicitly names the sibling it differs from. An agent can distinguish it from sonar_untrack_keywords without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the routing rule directly: use this for a single id, use sonar_untrack_keywords to remove several or all of an app's keywords. Also names the prerequisite (Indie plan, authorized account or write-scoped API key).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_discovered_keywordsDiscovered KeywordsA
Read-onlyIdempotent
Inspect

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 (0-100, best first). This is Sonar's "what should I track next" answer; rows can be tracked with sonar_track_keywords (by keyword text + country). Compact by default (no discovered-row id, store or timestamps; keyword_id stays; fields: "full" adds them). Requires an Indie plan (trial counts). popularity (5-100) is the value Sonar's dashboard shows: Apple's Search Popularity when Apple has a real reading; when Apple reports a keyword below its threshold (popularity_apple 5, about 20) it is Sonar's estimate (at most 18). popularity_source says which (apple | proxy), popularity_apple is Apple's own reading (null on Android), popularity_proxy is Sonar's estimate beside a floored reading.

NameRequiredDescriptionDefault
limitNoMax rows to return (1-500). Default 200.
app_idYesSonar app UUID of one of your tracked apps — the `id` returned by sonar_list_apps or sonar_create_product. NOT a store id.
bucketNoFilter by classification: "ranked" = the app already ranks for it, "gap" = a competitor ranks but the app does not, "idea" = verified research suggestion with no rank evidence yet. Omit for all.
fieldsNo"compact" (default): keyword_id, keyword, country, rank, source, status, bucket, the four popularity fields, difficulty, ai_relevance, opportunity, competitor_rank, competitor_name. "full": adds the discovered-row id, store, discovered_at and ranks_checked_at.compact
sourceNoFilter by how the keyword was discovered. Omit for all sources.
statusNoFilter by row status. Default "new" — the still-actionable suggestions; "all" includes rows already tracked or hidden.
countryNoFilter to one market (ISO country code). Omit for all markets.
min_relevanceNoOnly rows with AI relevance at or above this value (0-100).
min_opportunityNoOnly rows with an opportunity score at or above this value (0-100).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive behavior, and the description adds real context on top: an Indie-plan prerequisite, a default status filter of "new" that hides already-tracked/hidden rows, opportunity-ranked ordering (best first), and a compact-vs-full payload default. It doesn't discuss result-size behavior or what happens when the app has no discovered rows, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause, and the popularity explanation is dense but genuinely non-obvious. However, the parenthetical restating the compact/full field lists duplicates the schema's `fields` description, and the popularity paragraph is a single sprawling sentence that could be split.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With nine parameters, no output schema, and no nested objects, the description does the work the schema cannot: it explains what a row contains, how results are ordered, how popularity is derived when Apple's reading is floored, the default filtering, and the plan gate. An agent has everything needed to call it correctly and interpret the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, including enum definitions and defaults, so the schema carries the parameter burden. The description restates the compact/full field lists almost verbatim from the schema and adds meaning mainly for output fields (popularity, popularity_source, popularity_apple, popularity_proxy) rather than inputs, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource with precise scope: keywords the discovery engine surfaced for a tracked app that aren't tracked yet, split into ranked finds, competitor gaps, and AI/autocomplete ideas. It explicitly frames itself as Sonar's "what should I track next" answer, which distinguishes it from siblings like sonar_app_keywords (already-tracked) and sonar_competitor_keywords.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the use case clearly and gives the follow-up path: rows can be tracked with sonar_track_keywords by keyword text + country. It also notes the Indie plan requirement. It does not explicitly contrast with the nearest alternatives (sonar_keyword_suggestions, sonar_app_extract_keywords), so the agent must infer when those are preferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_dismiss_review_replyDismiss ReviewAInspect

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.

NameRequiredDescriptionDefault
review_idYesSonar review id (the `id` of an item from sonar_review_inbox — not Apple's review id).

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, and the 'WRITE tool' label is consistent with them. The description adds value annotations do not carry: the hidden side effect that this also cancels a scheduled post, plus plan and write-scope auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with the tool type and effect front-loaded, no filler. The parenthetical '(trial counts)' is slightly cryptic but still earns its space by clarifying plan applicability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter write tool with no output schema, the description covers the write nature, the side effect, and the auth/plan gates. It lacks reversibility details and routing to the sibling cancel/post/draft tools, but nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema description coverage is 100%, so the schema already defines review_id as a Sonar review id distinct from Apple's review id. The description adds no further syntax, default, or lookup guidance, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('mark a review as not needing a reply') and adds a secondary effect (cancels a scheduled post). It does not name the adjacent siblings (sonar_cancel_review_reply, sonar_post_review_reply, sonar_draft_review_reply), leaving a real overlap with cancel_review_reply unresolved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides prerequisites (Indie plan, authorized account or write-scoped API key) but no explicit when-to-use or when-not guidance. Nothing tells the agent how to choose between dismissing and cancelling a reply, even though the description itself implies the two overlap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_draft_review_replyDraft Review Reply (AI)AInspect

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 with sonar_update_review_reply (not metered). Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
hintNoOne-off direction for this draft, e.g. "mention the fix in 2.1".
review_idYesSonar review id (the `id` of an item from sonar_review_inbox — not Apple's review id).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the non-destructive write profile; the description adds substantial context beyond them: metered billing (monthly AI-draft allowance, then 1 credit per draft), the fact that it never posts, and the auth/plan prerequisites (Indie plan, authorized account or write-scope API key). This is exactly the extra behavior an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Opens with a 'WRITE tool' marker, then purpose, then billing, then the routing tip — every sentence carries distinct, load-bearing information with no filler. Dense but appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema, the description covers purpose, cost, side effects (never posts), prerequisites, and alternatives. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented in the schema, so baseline is 3. The description references the optional hint as 'direction for this draft' but adds no syntax or format detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('write a fresh AI reply draft for a review') and immediately clarifies the mechanism (app instructions + optional hint) and translation behavior. It is clearly distinguishable from the write-sibling sonar_update_review_reply, which it names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'agents can skip this and write the reply themselves with sonar_update_review_reply (not metered)' gives both the alternative and the reason to prefer it. Combined with 'Never posts', the when-to-use/when-not decision is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_generate_review_insightsGenerate Review Insights (AI)AInspect

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 — use sonar_review_insights to read the current one); needs at least 5 recent reviews. Requires a paid (non-trial) Indie plan and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
app_idYesSonar app UUID of a tracked app — your own or a competitor (an `id` from sonar_list_apps). NOT a store id.
countryNoReviews market (ISO country code). Insights are generated per country. Default "us".us

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnly=false, destructive=false, idempotent=false). The description adds substantial behavioral context beyond that: a 90-day cooldown with a 429 and next-available time, the minimum review threshold, and non-trial Indie plan plus write-scope authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the operation type ('WRITE tool'), then the outcome, then constraints. Every clause carries signal — no filler, and the alternative tool and 429 behavior are stated compactly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description lists what the analysis contains, and it covers preconditions, rate limits, and auth. For a 2-parameter write tool with no nested objects, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already fully documented, including that app_id is a Sonar app UUID (not a store id) and country is a per-market ISO code with default 'us'. The description reinforces the country dimension but adds no syntax beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'generates a fresh AI review analysis for a tracked app from its recent reviews', and enumerates the output (praise/complaint themes, sentiment, feature requests, trend). It explicitly names the sibling sonar_review_insights as the read counterpart, so an agent can distinguish write from read without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Labeled 'WRITE tool' and gives explicit routing: use sonar_review_insights to read the current one. It states preconditions (at least 5 recent reviews), the rate limit (one analysis per app+country every 90 days), and account/plan requirements, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_get_appGet Tracked AppA
Read-onlyIdempotent
Inspect

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 notes and up to 90 snapshots. Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault
app_idYesSonar app UUID — the `id` returned by sonar_list_apps or sonar_create_product. NOT a store id.
fieldsNo"compact" (default): identity plus the listing basics in `metadata` (numericId, subtitle, url, rating, reviews, installs, price, currency, free, offersIAP, iapRange, version, released, updated, contentRating) and the 7 newest daily snapshots — about 1.5 KB. "full": the whole stored listing (description, screenshots, release notes, languages, IAP items, product-page creative) and up to 90 snapshots — about 10× larger.compact

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish this as a safe, idempotent, closed-world read, so the bar is lower; the description still adds real context beyond them by quantifying output size (~1.5 KB compact versus ~10× larger for full), capping snapshots at 7 versus 90, and disclosing an Indie plan entitlement requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences with the scope first, then the payload shape, then the mode toggle; every clause carries information. Minor clutter comes from the terse '(trial counts)' parenthetical, which is unclear without context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with full schema coverage, rich annotations, and no output schema, the description covers scope, payload contents, both output modes with size tradeoffs, snapshot limits, and the plan prerequisite. Nothing an agent needs in order to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains app_id (a Sonar UUID, not a store id) and both fields modes in detail. The description restates the same compact/full distinction without adding syntax, defaults, or error semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get details for one tracked app'), and defines the payload as store metadata plus daily snapshots of rating, review count, version and installs. It is not differentiated from related read tools such as sonar_app_overview or sonar_app_lookup, so an agent cannot be fully certain which to pick from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a useful default-and-override pattern ('Compact by default ... pass fields: "full"'), which implies when the lighter versus heavier mode is appropriate. It does not state when to prefer this tool over sibling read tools like sonar_app_overview or sonar_app_lookup, and the Indie-plan note is presented as a constraint rather than a selection criterion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_get_screenshot_setGet Screenshot SetA
Read-onlyIdempotent
Inspect

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).

NameRequiredDescriptionDefault
set_idYesScreenshot set id.
include_image_dataNoWhen false (default), inline base64 images are replaced with short placeholders to keep the response small. Set true only when you need the raw data URLs (a layout containing placeholders is rejected on update).

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, and the description still adds real context: inline image data is placeholder-substituted by default, and an Indie plan is required (trial counts). It stops short of explaining pagination or response size limits, but the placeholder behavior is exactly the kind of non-obvious trait worth disclosing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what is returned and the default placeholder behavior. The trailing '(trial counts)' clause is slightly cryptic but not wasteful; nothing else could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing the return payload, and it does so at a useful level of abstraction (layout JSON plus locale-keyed translation overrides). The plan requirement is a genuine prerequisite an agent needs. Only minor gaps remain around response size or pagination behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema's include_image_data description is more complete than the tool description, including the update-rejection consequence of placeholders. The description's mention of placeholders echoes rather than extends the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Fetch') and resource ('a screenshot set') and enumerates exactly what comes back: every screen's layout JSON plus per-screen translation overrides keyed by locale. This clearly distinguishes it from sonar_list_screenshot_sets, which would return summaries rather than the full payload.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer this is the detail-fetch counterpart to the list tool, and the description notes an 'Indie plan' prerequisite. But it never says when to choose this over the list tool or names an alternative, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_keyword_metricsKeyword MetricsA
Read-onlyIdempotent
Inspect

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_keyword_search instead when you want related keyword ideas alongside metrics. Answers within about 30 seconds: a keyword that can't be computed in that time comes back as pending (queued on Sonar's scrape fleet, not charged, results are being cached) — call again after retry_after_seconds for just those keywords. Each row carries measured_at (when difficulty was measured) and popularity_measured_at (when the popularity value was measured — can be older), both ISO 8601 UTC. stale: false means both are under 7 days old; stale: true rows are real but older data (refreshed in the background) — check the timestamps when freshness matters. popularity (5-100) is the value Sonar's dashboard shows: Apple's Search Popularity when Apple has a real reading; when Apple reports a keyword below its threshold (popularity_apple 5, about 20) it is Sonar's estimate (at most 18). popularity_source says which (apple | proxy), popularity_apple is Apple's own reading (null on Android), popularity_proxy is Sonar's estimate beside a floored reading.

NameRequiredDescriptionDefault
storeYesApp store. "ios" for Apple App Store, "android" for Google Play.
countryNoOne of Sonar's 72 keyword-research markets, as an ISO 3166-1 alpha-2 code (e.g. "us", "gb", "de", "jp", "br"). Keyword data isn't available for other storefronts. Default "us".us
keywordNoSingle keyword to fetch metrics for. Use this OR `keywords`, not both.
keywordsNoBulk list of keywords to fetch metrics for (max 25). Use this OR `keyword`, not both. 1 credit per keyword.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations carry the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: 1 credit per keyword, a 5/day free tier per IP removed by an API key, a ~30 second budget with `pending`/`retry_after_seconds` retry semantics for unfinished keywords, and what `stale`/`measured_at` mean. This is exactly the behavioral disclosure the annotations cannot provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose, cost, and free-tier limits are front-loaded, and the density is justified because there is no output schema and the return-field semantics must live somewhere. It is a single long run-on paragraph, though, and the popularity_source/popularity_apple/popularity_proxy clause could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the return-value burden and does so thoroughly: freshness timestamps, stale flag semantics, popularity range and source attribution. Combined with cost, rate limits, and lateness handling, an agent has everything needed to call it and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents store, country, keyword vs keywords, and the max-25 limit; baseline is 3. The description reinforces the single-vs-bulk choice and the per-keyword credit cost but adds no new input-level semantics (the detailed field explanations concern outputs, not parameters).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise statement of what is returned (difficulty + popularity) for a specific resource (a keyword, or up to 25 in bulk), and explicitly distinguishes itself from sonar_keyword_search. An agent can tell exactly what this tool produces without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the selecting condition directly ('use this when you already know which keywords you care about') and names the alternative with its own selecting condition ('use sonar_keyword_search instead when you want related keyword ideas alongside metrics'). Both when-to-use and when-not-to-use are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_keyword_rankingsKeyword SERP HistoryA
Read-onlyIdempotent
Inspect

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 tracked in the caller's Sonar workspace. Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault
daysNoHistory window in days (1-365). Default 30.
fieldsNo"compact" (default): each entry is rank, store_id, app_name, measured_at, outlier — about half the size. "full": adds app_icon_url to every entry (one icon URL per app per day).compact
keyword_idYesSonar keyword UUID — a `keyword_id` from sonar_app_keywords or sonar_competitor_keywords. NOT the keyword text.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive behavior, and the description adds real operational context on top: results are ordered newest first, the default response omits icon URLs to roughly halve payload size, the keyword must be tracked, and Indie plan/trial limits apply. These are the details an agent needs before deciding whether to call it or to set fields=full.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the what and how, followed by use case and prerequisites. The nested parenthetical about compact fields is slightly dense but carries genuine information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does well by naming the per-entry fields (rank, store_id, app_name, measured_at, outlier) and the ordering. The `days` window default is left entirely to the schema and the return container shape (a list of per-day entries) is only implied, so a small gap remains for a data-retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both `days` and `fields` are fully documented structurally. The description only restates the compact-vs-full distinction already present in the `fields` schema description and never mentions the `days` history window, so it adds little beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "SERP history for one tracked keyword — which apps ranked in the top results on each measured day, newest first." This clearly scopes it to keyword-level competitor SERP data, implicitly separating it from app-level tools like sonar_app_rankings. It stops short of naming a sibling tool explicitly, so it lands just below the top band.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit use case — "see who competes on a keyword and how the top spots shifted over time" — plus two hard preconditions: the keyword must be tracked in the caller's workspace, and it requires an Indie plan. What's missing is a named alternative for related questions (e.g. keyword metrics or app rankings), so there is no when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_keyword_suggestionsKeyword SuggestionsA
Read-onlyIdempotent
Inspect

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_keyword_search — use when you only need term ideas without difficulty/popularity scoring. 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 then comes back as { data, meta } with meta.stale: true, its date in meta.stale_as_of, and a meta.note to pass on to the user.

NameRequiredDescriptionDefault
seedYesSeed keyword. The store will return autocomplete suggestions starting from this term.
storeYesApp store. "ios" for Apple App Store, "android" for Google Play.
countryNoMarket as an ISO 3166-1 alpha-2 code (e.g. "us", "gb", "de", "mt"). Nearly every App Store storefront and Google Play market works; the few small storefronts that are not supported return an error naming them. Default "us".us

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations: it discloses that `priority` is always 0 on both stores, that no API key is needed with per-IP daily limits, and that throttling can yield Sonar's stored copy surfaced as `{ data, meta }` with `meta.stale`, `meta.stale_as_of`, and `meta.note`. This is genuinely useful operational context, though the free-tier limits are stated only qualitatively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool does, then layers the comparison, cost profile, and fallback behavior. Four sentences all carry information, though the throttling/meta explanation is dense and could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by explaining the returned ordering, the always-zero `priority` field, and the stale-fallback response shape including the note to relay to the user. An agent has what it needs to call and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter (seed, store enum, country) is already documented in the schema, so the baseline is 3. The description adds no syntax or format meaning for any parameter; its field-level detail concerns output (`priority`), not inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (autocomplete suggestions) plus the source (App Store / Google Play) and ordering semantics. It explicitly contrasts with sonar_keyword_search, so an agent can distinguish it from the many keyword siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (sonar_keyword_search) and the selecting condition ('use when you only need term ideas without difficulty/popularity scoring'), and adds that it works without an API key under a free tier. The routing decision is fully determined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_list_alertsList Alert RulesA
Read-onlyIdempotent
Inspect

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).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds real value beyond that: a plan-gating requirement (Indie plan, trial counts) and a summary of the per-rule fields returned (change type, scope, threshold, enabled state), which matters since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight clauses with the subject action front-loaded and no padding; the parenthetical example ('rank drops, review spikes, etc.') aids comprehension quickly. The trailing 'trial counts' note is slightly cryptic but still informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description does the needed work by sketching the shape of each returned rule and stating the plan prerequisite. It stops short of noting pagination or ordering behavior, which is a minor gap for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 applies. The description correctly implies a plain enumeration returning all subscriptions with no filtering syntax to explain, matching the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb+resource ('List your alert subscriptions') and immediately characterizes what a rule contains, distinguishing it from siblings like set_alert (creation), delete_alert, and alert_events (past events). An agent can tell what this returns without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb and the plan prerequisite ('Requires an Indie plan'), which is genuinely useful gating context. However, it never states when to prefer this over sibling tools like alert_events or what to do when no subscriptions exist, so routing guidance is only partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_list_appsList Tracked AppsA
Read-onlyIdempotent
Inspect

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-paginated (default 100 per page). Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault
limitNoPage size (1-200). Server default applies when omitted.
cursorNoPagination cursor from a previous call's `next_cursor`. Omit for the first page.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only/idempotent profile, so the description's job is to add beyond that. It adds real context: cursor pagination with a default of 100 per page, and a plan entitlement (Indie plan, trial counts) that affects whether the call succeeds. It doesn't cover rate limits or error behavior, but that is a minor gap against rich annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core purpose and scope, then output value, then pagination and entitlement caveats. No filler; every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must explain return values, and it does (per-app latest snapshot with rating, review count, version, installs, plus UUIDs). Pagination mechanics and the plan prerequisite are covered, so an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (limit, cursor) are already documented, and the description only restates the page-size default. Baseline 3 applies when the schema carries the parameter burden and the description adds no syntax or format detail beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the apps tracked in the caller's Sonar workspace') plus the exact scope (own apps + competitors) and the payload returned (latest snapshot fields). An agent can distinguish this from sonar_list_products and the many app_* tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause naming downstream tools (sonar_get_app, sonar_app_keywords, sonar_app_rankings, sonar_app_changes) effectively signals this is the entry point that yields needed UUIDs. It does not, however, state when to prefer this over sibling listers like sonar_list_products or sonar_app_search, so it stops short of explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_list_productsList ProductsA
Read-onlyIdempotent
Inspect

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_product, and the screenshot-set tools take; for per-app snapshots and competitor apps use sonar_list_apps. Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, and the description adds non-obvious behavior on top: the result is returned in full with no pagination, and the tool is gated behind an Indie plan (trial counts). Those two facts materially affect how an agent calls and budgets for this tool, which is exactly the value-add expected beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause and every clause carries information (return fields, id consumers, alternative tool, plan gate). It is, however, one very dense sentence with stacked parenthetical lists, which is slightly harder to scan than a two-sentence split would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description compensates by naming the returned fields, and it covers the entitlement prerequisite and the unpaginated behavior. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4, not 5. The description correctly implies there is no filtering or paging syntax to supply; nothing further is expected here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List every product in your workspace') and immediately scopes it as unpaginated while enumerating the returned fields (id, name, country, competitor count, store versions). It explicitly distinguishes itself from the closest sibling, sonar_list_apps, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the exact downstream tools that consume the returned product ids (sonar_track_app, sonar_track_competitor, sonar_remove_competitor, sonar_delete_product, screenshot-set tools) and names the alternative for per-app/competitor data (sonar_list_apps). It also states the plan prerequisite ('Requires an Indie plan (trial counts)').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_list_screenshot_setsList Screenshot SetsA
Read-onlyIdempotent
Inspect

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).

NameRequiredDescriptionDefault
product_idYesProduct id (find it with sonar_list_products).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description still adds value beyond them: it discloses that only metadata is returned (not layouts) and imposes a plan-level authorization requirement ('Requires an Indie plan (trial counts)'), which annotations cannot express. It stops short of describing ordering or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and payload scope, then routing, then the plan prerequisite. Every sentence carries distinct information and none is redundant with the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the return-value burden and does name the four metadata fields returned, plus the plan prerequisite. It leaves ordering/pagination of the list unspecified, which is a minor gap for a simple one-parameter list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, and the schema already tells the agent to find product_id via sonar_list_products. The description adds no syntax, format, or sourcing detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('List a product's app-store screenshot sets') and immediately scopes the payload ('metadata only: store, device size, locales, studio_url'). It also explicitly distinguishes itself from sonar_get_screenshot_set, so the agent can separate the two sibling list/get tools without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the condition that routes to the alternative ('Use sonar_get_screenshot_set for full layouts') and adds a prerequisite ('Requires an Indie plan (trial counts)'). Both when-to-use and the plan constraint are explicit rather than inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_portfolioPortfolio Rollup (Agency)A
Read-onlyIdempotent
Inspect

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 (visibility drops, rating drops, not-ranked apps), and the best discovered-keyword opportunities across all apps. Same numbers as the /portfolio page. Requires an Agency plan (403 on other plans).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so safety is covered. The description adds genuinely useful context beyond that: the Agency-plan requirement with a concrete 403 failure mode and parity with the /portfolio page, which helps an agent predict both eligibility and output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core value proposition, then a parenthetical inventory of what is returned. The enumeration is dense but each item earns its place as return-value disclosure; no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description carries the burden of describing the return contents, which it does thoroughly (KPIs, totals, movers, triage, opportunities), and it also states the plan prerequisite. Nothing an agent needs to decide or call correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the input schema is empty, so there is nothing for the description to disambiguate. Baseline for a no-parameter tool is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('The whole portfolio's health in one call') and enumerates the aggregation content: per-app KPIs, org-wide totals, keyword movers, triage list, and discovered-keyword opportunities. It is clearly differentiated from per-app siblings like sonar_app_overview by operating across the entire portfolio.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear usage context ('for orgs managing many apps') and a hard gate ('Requires an Agency plan (403 on other plans)'). It does not explicitly name the sibling alternatives an agent should prefer for single-app or per-metric queries, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_post_review_replyPost Review ReplyAInspect

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. Needs an Admin-role App Store Connect key. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
bodyNoReplace the reply text before posting. Omit to post the current draft.
review_idYesSonar review id (the `id` of an item from sonar_review_inbox — not Apple's review id).
delay_minutesNoSchedule instead of posting now (minutes). 0/omitted = post now.

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description is unusually rich about real behavior: overwrite semantics (Apple keeps one reply per review and marks it edited), the ~24h publication lag with pending_publish→published status, and auth/plan prerequisites. However, explicitly stating that it 'Overwrites an existing response' is a non-additive update, which conflicts with the declared destructiveHint=false. That inconsistency undercuts the otherwise strong disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action class and public consequence before operational details, and every clause (overwrite behavior, latency, auth, plan) earns its place. Dense but zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter write tool with no output schema, the description covers everything an agent needs to act correctly: confirmation of public side effect, timing, expected status transitions, and permission/plan prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already explains that review_id is Sonar's id (not Apple's), that body replaces the draft text, and that delay_minutes schedules posting. The description only echoes the now-vs-delayed timing, adding little beyond the schema, so the high-coverage baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('publishes the reply on the App Store under the developer's name') plus the action class ('WRITE tool — PUBLIC ACTION'). An agent can immediately distinguish this from sonar_draft_review_reply or sonar_update_review_reply without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear invocation context — post now or schedule via delay_minutes, requires an Admin-role App Store Connect key, an Indie plan, and an authorized Sonar account or write-scoped API key. It stops short of naming the sibling alternatives (draft/cancel/dismiss/update reply) and when to choose them over posting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_remove_competitorRemove CompetitorA
DestructiveIdempotent
Inspect

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 has no such competitor. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
product_idYesSonar product UUID — the `id` returned by sonar_list_products or sonar_create_product.
competitor_app_idYesSonar app UUID of the competitor to remove (the competitor's `id`, NOT a store id).

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing cascade semantics: the competitor link is dropped under every own app of the product, and the competitor app is untracked only if no other own app still references it. It also adds error behavior (404) and authorization/plan requirements, which annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the WRITE marker and the core action, followed by side effects and then prerequisites. No filler; each clause carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description covers everything an agent needs: action, cascade side effects, the untrack condition, the error case, and auth/plan requirements. Annotations and schema fill the remaining slots (idempotency, param types).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters are documented with UUID sourcing and an explicit warning that competitor_app_id is the app UUID, not a store id. The description adds no further parameter-level detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('remove a competitor from a product') and immediately flags it as a WRITE tool, distinguishing it from read-oriented siblings like sonar_competitor_landscape. The scope is unambiguous: one competitor, one product, in the caller's workspace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context — the 404 condition when the product has no such competitor, and the Indie-plan/auth prerequisites. It stops short of naming a sibling alternative (e.g., sonar_untrack_app) or stating when NOT to use it, but the trigger condition is well understood from the purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_review_inboxReview InboxA
Read-onlyIdempotent
Inspect

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 response. Newest first, with per-status counts. Use the review id with sonar_update_review_reply / sonar_post_review_reply. Requires an Indie plan (trial counts), App Store Connect connected in Sonar, and the app to be one of your own iOS apps.

NameRequiredDescriptionDefault
limitNoPage size, 1-100 (default 25).
app_idYesSonar app UUID of one of your own iOS apps (an `id` from sonar_list_apps). NOT a store id.
cursorNonext_cursor from the previous page.
ratingNoOnly reviews with this star rating.
statusNoneeds_reply = no reply yet (incl. AI drafts waiting for approval, held and failed ones), scheduled = will post soon, replied = live or waiting for Apple (incl. replies made in App Store Connect), dismissed. Omit for all.
countryNoOnly reviews from this storefront (ISO alpha-2).
languageNoOnly reviews in this language (ISO 639-1).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the read-only, idempotent, non-destructive profile, and the description adds genuine extra context: a 5-minute sync cadence, newest-first ordering, per-status counts, and what 'hold reasons' (needs_human, quota, daily_cap) mean. Pagination via cursor is left to the schema, so not everything is covered, but the added behavioral value is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool returns before the trailing prerequisites, and every clause carries information (reply state, translations, hold reasons, ordering, counts, next-step tool references). It is dense and slightly long, but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description responsibly enumerates return fields (draft/text reply, translations, hold reasons, schedule time, live App Store response) and setup requirements. It is complete enough to call correctly, with only pagination/return-shape details left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter (limit, cursor, rating, status, country, language) precisely, including the status enum semantics. The description adds nothing parameter-specific beyond the general reply-state context, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (own iOS app's App Store reviews) plus a precise scope: reply state, translations, hold reasons, schedule time, live responses. The 'own iOS app' qualifier and 'synced from App Store Connect' framing distinguish it from a generic review-listing sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear setup prerequisites (Indie plan, App Store Connect connected, own iOS app) and routes the agent forward: 'Use the review `id` with sonar_update_review_reply / sonar_post_review_reply.' However, it never states when to prefer this over related review siblings (e.g., a public-review or insights tool), so the when-not guidance is implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_review_insightsReview Insights (AI)A
Read-onlyIdempotent
Inspect

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 requests, and what changed vs the previous analysis. insight is null if none has been generated yet — use sonar_generate_review_insights. Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault
app_idYesSonar app UUID of a tracked app — your own or a competitor (an `id` from sonar_list_apps). NOT a store id.
countryNoReviews market (ISO country code). Insights are generated per country. Default "us".us

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the `insight` field can be null and what to do, and the Indie plan prerequisite (trial counts). It does not cover rate limits or generation latency, keeping it at a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose before the output enumeration, and the null-handling and plan note are placed last as operational details. It is dense with parenthetical lists but every clause carries distinct information, with little redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although no output schema exists, the description characterizes the return payload in detail (themes, frequency, quotes, trend states, sentiment, feature requests, delta vs previous analysis) and covers the null/empty case plus the required plan. An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, both parameters (app_id and country) are already fully documented in the schema, including that app_id is a Sonar UUID not a store id and that country drives per-country generation. The description adds no parameter-level syntax or semantics beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('the latest AI review analysis for a tracked app') and enumerates the concrete outputs (named themes, frequency, quotes, trend movement, sentiment, feature requests). It distinguishes itself from the raw-review sibling sonar_app_reviews by emphasizing AI-generated analysis rather than review listing, so an agent can tell them apart without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative (sonar_generate_review_insights) and the selecting condition (insight is null when none exists yet), plus notes the Indie plan requirement. It lacks a clear 'rely on sonar_app_reviews instead when you want raw reviews' exclusion, so it falls just short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_review_responderReview Responder SettingsA
Read-onlyIdempotent
Inspect

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, plus whether App Store Connect is connected and this month's AI-draft usage (included allowance, then 1 credit per extra draft). settings is null until the responder is switched on. Requires an Indie plan (trial counts), App Store Connect connected in Sonar, and the app to be one of your own iOS apps.

NameRequiredDescriptionDefault
app_idYesSonar app UUID of one of your own iOS apps (an `id` from sonar_list_apps). NOT a store id.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's added value is domain behavior: settings is null until the responder is switched on, auto mode only affects reviews written after enabling and within the star range, and credit usage is included-allowance-plus-1-per-extra-draft. That is meaningful operational context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the resource and its contents, then closes with the null-state caveat and prerequisites. Dense but every clause carries information; the parenthetical about auto-mode scoping and credit pricing is load-bearing rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the return payload field-by-field, which is exactly what an agent needs to consume the result. Combined with prerequisites and the null-state rule, it covers the important edges for a single-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single app_id parameter is already documented as a Sonar UUID that is not a store id. The description reinforces the same constraint ('one of your own iOS apps') but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (the review responder configuration) and enumerates exactly what the returned payload contains: on/off state, manual vs auto mode, instructions, sign-off, language, sync, App Store Connect status, and AI-draft usage. An agent knows precisely what it will receive. It does not explicitly contrast itself with the write sibling sonar_set_review_responder, though the 'settings' framing makes the read intent clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: this is clearly the read surface to pair with sonar_set_review_responder, but the description never says 'use this before/after setting' or names an alternative. It does supply real prerequisites (Indie plan, App Store Connect connected, own iOS app), which partly compensates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_scan_competitorScan Competitor KeywordsAInspect

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. Returns generated/queued/verified_now counts; the rest verify in the background over the following hours — read results with sonar_competitor_keywords. Each account can scan a limited number of different competitors per UTC day (50 on trial and Indie, 250 on Agency); re-scanning one already scanned today is free, and past the limit the tool reports when it resets. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
own_app_idYesSonar app UUID of your own app the scan compares against. The competitor must be linked to this app.
competitor_app_idYesSonar app UUID of the competitor to scan — the `competitor.id` from sonar_track_competitor, or an `id` from sonar_list_apps where is_own is false. NOT a store id.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true and destructiveHint=false, so the write/async profile is partly covered. The description goes well beyond that by disclosing the async execution model (~30s inline verification, remainder in background over hours), the exact return counts, and quota/auth constraints — exactly the kind of context annotations cannot carry. It stops short of stating what happens to previously generated keyword sets on re-scan.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the 'WRITE tool' label and the core action, then layered with returns, async behavior, and limits. Dense and largely waste-free, but delivered as a single long block where a sentence break before the quota/auth section would improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description specifies the return payload (generated/queued/verified_now counts) and explains why only a partial result returns inline. Combined with quota, plan, and auth requirements, an agent has everything needed to invoke this correctly and interpret the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both UUID parameters are already documented in the schema with their provenance and the 'NOT a store id' caveat. The description only implies the linkage requirement ('tracked competitor' must be linked to own_app_id), which the schema also states. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'runs an AI keyword discovery scan on a tracked competitor' — and enumerates the concrete outputs (generated terms, SERP verification queue, inline verification, recorded ranks for both apps). The word 'tracked' plus the explicit read-path pointer to sonar_competitor_keywords cleanly separates it from siblings like sonar_track_competitor and sonar_competitor_keywords.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use context (scan a tracked competitor to discover its optimized terms), names the companion read tool, and states prerequisites: Indie plan required, authorized Sonar account or API key with write scope. It also documents the operational conditions — daily competitor limits (50 trial/Indie, 250 Agency), free re-scans of the same competitor, and reset reporting past the limit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_screenshot_devicesList Screenshot DevicesA
Read-onlyIdempotent
Inspect

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 search results asset). Pick a device here before sonar_create_screenshot_set. Requires an Indie plan (trial counts).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: the Indie plan requirement (with trial counting), which materially affects whether an agent should call this. It does not add pagination or return-format detail, but the plan gate is the important addition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Essentially one dense sentence that front-loads the resource and its contents, then the routing instruction and the plan requirement. The nested parentheticals make it slightly heavy to parse, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the returned fields (canvas dimensions, store, creative-asset entries) and by disclosing the plan prerequisite. That is sufficient for a zero-parameter read tool, though it could say more about ordering/format of the returned list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 by rule. The description correctly implies a no-argument listing call and adds no misleading parameter claims.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (list device sizes for app-store screenshot sets) and enumerates what each entry contains: canvas dimensions, owning store, and the landscape App Store creative-asset category. It is clearly distinguishable from siblings like sonar_screenshot_layout_guide or sonar_get_screenshot_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Pick a device here before sonar_create_screenshot_set" explicitly names the downstream tool and the ordering constraint, which is strong routing guidance. It lacks a when-not-to-use clause or an alternative source for device data, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_screenshot_layout_guideScreenshot Layout GuideA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds non-obvious context: the content is static, so re-calling within a session is unnecessary, and it enumerates the reference material available.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The identity of the tool and the 'one call per session' constraint are front-loaded, followed by the content inventory.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-param, read-only reference tool with no output schema, the description is nearly complete: it identifies the artifact and lists the covered topics, and 'static text' hints at the return shape. An explicit pointer to the workflow step where it should be consulted would close the last gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is no parameter semantics to explain; the baseline of 4 applies. The description correctly avoids inventing arguments for a no-arg reference tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (the layout-format reference for Sonar screenshot sets) and states exactly what it covers: layout JSON schema, coordinate system, image handling, background shapes, fonts, translation overrides, and workflow. This is clearly distinguishable from the screenshot CRUD siblings like sonar_create_screenshot_set or sonar_update_screenshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent it is static text and that 'one call per session is enough', which is real invocation guidance about call frequency. It stops short of naming alternatives or stating when in the workflow to consult it (e.g., before creating a screenshot set), so it's clear but not fully routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_set_alertSet Alert RuleAInspect

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 plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
typeYesThe alert type to subscribe to. top_chart = one of your own apps entered or left a store top chart (overall + its category, free/paid/grossing). new_review = a new App Store review arrived for an own iOS app (needs App Store Connect connected and the review responder switched on for the app).
cadenceNonew_review only: email cadence. instant = within ~5 minutes of the review syncing, hourly = at most one email an hour, daily = the 08:30 UTC digest. Omit to keep the stored value (daily on create).
enabledNoWhether the rule is active. Defaults to enabled when omitted.
countriesNotop_chart only: storefronts to watch (ISO 3166-1 alpha-2, e.g. ["us", "de"]), max 10. Omit to keep the stored list; null or [] = the countries you track keywords in.
thresholdNoTrigger threshold; omit or null for the default. rank_drop / rank_gain: positions moved (default 5). rating_drop: tenths of a star (default 2 = a 0.2-star drop). review_spike: new reviews since the previous daily snapshot (default 25). top_chart: rank cutoff, 1-200 (default 200). new_review: highest star rating that alerts, 1-5 (default 5 = every review; 3 = only 1-3★). Ignored by entered_top10, left_top10, new_ranking, competitor_change.
scope_app_idNoLimit the alert to a single app (Sonar app UUID). Omit or null for an org-wide rule covering all tracked apps.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false) by disclosing the upsert keying, the partial-merge behavior of omitted fields (keep stored value), the plan gate, and the authorization requirement. The upsert claim sits in mild tension with idempotentHint=false, and no failure/error behavior is described, keeping this at 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with the WRITE declaration and the core action, then keying semantics, then defaults, then prerequisites. No boilerplate or repetition; every sentence carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the prerequisites, defaults, and upsert semantics an agent needs to call a 6-parameter mutation correctly. With no output schema, the only real gap is what the call returns (e.g., the created/updated rule identifier), which would further help an agent chain into sonar_list_alerts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter meaning is already largely carried by the schema, and several description statements (omit threshold/scope_app_id) restate it. The genuine addition is the composite key concept — 'upserts on (type + scope)' — which ties type and scope_app_id together in a way the schema alone does not express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: 'create or update an alert subscription in the caller's Sonar workspace', and flags itself as a WRITE tool. The create/update framing cleanly separates it from sonar_list_alerts, sonar_delete_alert, and sonar_alert_events without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: it upserts on (type + scope), omit `threshold` for the per-type default, omit `scope_app_id` for an org-wide rule, and it requires an Indie plan plus write-scoped credentials. It stops short of explicitly naming alternative siblings or stating when *not* to use it (e.g., to modify vs. re-create), so it is strong context without full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_set_review_responderConfigure Review ResponderAInspect

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. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
modeNomanual = every reply waits for approval; auto = AI replies post automatically after auto_delay_minutes.
app_idYesSonar app UUID of one of your own iOS apps (an `id` from sonar_list_apps). NOT a store id.
enabledNoSwitch the responder on (starts the review backfill) or off.
sign_offNoSign-off appended to every reply (null clears it).
instructionsNoInstructions for the AI: tone, support contact, product facts, known issues and fixes.
auto_daily_capNoAuto mode: max auto replies per app per day (default 50).
reply_languageNoreview = reply in the reviewer's language (default); en = always English.
auto_max_ratingNoAuto mode: highest star rating to auto-reply to (default 5).
auto_min_ratingNoAuto mode: lowest star rating to auto-reply to (default 4).
auto_delay_minutesNoAuto mode: minutes before posting (default 5).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond the annotations: partial update preserves omitted fields, auto mode only applies to reviews written afterwards, AI-flagged reviews requiring a human are held rather than auto-answered, plus plan and write-scope prerequisites. This is exactly the extra context a mutation tool needs beyond readOnlyHint/destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with 'WRITE tool —' so the operation class is immediately visible, and no filler. Every clause carries a distinct obligation or side effect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still covers mutation semantics, side effects, and prerequisites adequately for a 10-param config setter. It never mentions what the call returns or how to verify the new state, which is a minor residual gap rather than a blocker.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 10 parameters (mode, ranges, caps, delays, localization) are already fully documented in the schema. The description adds mutation semantics but no per-parameter meaning beyond that, which is the correct baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb set (switch on/off, update) and the exact resource (the review responder for one of your own iOS apps), scoping it to 'own iOS app' so it is distinguishable from the config-reading sibling sonar_review_responder and from reply-level tools. An agent knows precisely what changes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: partial-update semantics ('omitted fields keep their value'), the Indie plan requirement and the auth/write-scope need. It does not explicitly name the sibling to read current settings (sonar_review_responder) or when to prefer it, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_set_screenshot_translationsSet Screenshot TranslationsA
DestructiveIdempotent
Inspect

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 (trial counts) and an authorized Sonar account or a write-scope API key.

NameRequiredDescriptionDefault
localeYesTarget locale code, e.g. "de-DE", "pt-BR", "zh-Hans".
set_idYesScreenshot set id.
entriesYesOne entry per screen to localize.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so safety profile is covered. The description adds real context beyond them: the locale is auto-enabled on the set as a side effect, the fallback model, and plan/auth requirements. That is meaningful disclosure, though it doesn't spell out precisely what storing overrides destroys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences; the core action and scope lead, then the fallback rule, then prerequisites. Every clause carries information and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers purpose, fallback behavior, side effects (locale auto-enable) and access prerequisites, which is nearly everything an agent needs to invoke it correctly. Only a fuller account of what existing overrides are replaced would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so locale, set_id and entries are already well documented in the schema, including the sparse-override keying and wholesale replacement semantics. The description only gestures at override types ('text copy, localized captures/images') without adding format or syntax detail, so it sits at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Write) and recognizable resource (a locale's translation overrides for screens in a screenshot set), and clarifies scope with examples '(text copy, localized captures/images)'. An agent can distinguish this from siblings like sonar_update_screenshot or sonar_update_screenshot_set without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when to use it (writing per-locale overrides) and the governing rule 'geometry and styling always come from the source layout; anything not overridden falls back to it', plus prerequisites (Indie plan, authorized account or write-scope key). It does not name when-not to use it or point to an alternative sibling, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_star_keywordStar KeywordA
Idempotent
Inspect

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 timestamp, unstarring a non-starred keyword is a no-op. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
starredYestrue to star the keyword (mark as a favorite/target), false to unstar.
tracked_keyword_idYesTracked-keyword UUID — the `id` (not keyword_id) returned by sonar_app_keywords or sonar_track_keywords.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it explains that re-starring refreshes the timestamp and unstarring a non-starred keyword is a no-op (elaborating what idempotency means here), plus plan (Indie) and auth/write-scope prerequisites that no annotation conveys. This is exactly the extra behavioral context a write tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with 'WRITE tool', each carrying distinct value (semantics, result effect, idempotency, requirements). No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter write tool with no output schema, the description covers behavior, idempotency semantics, effect on downstream results, and auth/plan requirements. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning to the `starred` flag by tying it to the starred_at timestamp surfaced in sonar_app_keywords results. It slightly exceeds the schema's own documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('stars or unstars') and resource ('tracked keyword') plus scope ('caller's Sonar workspace'), and defines what a star means. An agent can distinguish this from sonar_track_keywords/sonar_untrack_keywords without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'star = favorite/target' framing implies when to use it, but there is no explicit when-to-use/when-not statement or named alternative for the tracking operations. Usage is inferable but not spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_top_chartsTop ChartsA
Read-onlyIdempotent
Inspect

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 always describe the full top 200 — limit truncates the returned entries only. Movement is empty on the first day a chart is requested (no previous snapshot yet). Answers within about 30 seconds: when a live refresh can't finish in time the newest stored chart is returned with stale: true and its measuredAt date. Compact by default (no icon URLs or numeric ids; fields: "full" adds them). Works without an API key (free tier, limited daily use per IP).

NameRequiredDescriptionDefault
chartNoChart type: "free", "paid" or "grossing". Default "free".free
limitNoNumber of chart entries to return (1-200). Default 50.
storeYesApp store. "ios" for Apple App Store, "android" for Google Play.
fieldsNo"compact" (default): each app is storeId, name, developer, rating, rank, delta, isNew (movers: rank + delta; droppedApps: previousRank) — about 60% smaller. "full": adds iconUrl and numericId to every app.compact
countryNoMarket as an ISO 3166-1 alpha-2 code (e.g. "us", "gb", "de", "mt"). Nearly every App Store storefront and Google Play market works; the few small storefronts that are not supported return an error naming them. Default "us".us
categoryNoCategory key; keys differ by store (e.g. iOS "SOCIAL_NETWORKING" / "GAMES", Android "SOCIAL" / "GAME"; "HEALTH_AND_FITNESS" exists on both). An unknown key is rejected with an error. Use "overall" (default) for the store-wide chart.overall

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses several non-obvious behaviors: summary, movers and droppedApps always cover the full top 200 regardless of `limit`; movement is empty on the first request for a chart; a ~30 second budget with fallback to the newest stored chart plus `stale: true` and `measuredAt`. It also states the no-API-key free tier with per-IP daily limits, which is exactly the kind of operational context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: the core capability leads, then caveats (limit scope, first-day movement, staleness, response size, auth tier) follow in short sequenced sentences. It is on the long side and the field-list parenthetical is cramped, but nearly every sentence carries decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-shape burden and does it: it names the per-app fields, describes what movers and droppedApps contain, and explains the `stale`/`measuredAt` fallback signature. That is enough for an agent to call the tool and interpret the response without further documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning the schema lacks: that `limit` truncates only the returned entries and not the summary/movers/droppedApps sets, and that `fields: "compact"` omits icon URLs and numeric ids. Category and country semantics are mostly restated from the schema, which keeps this from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get a store top chart') and enumerates the dimensions that define it (free/paid/grossing, overall or by category) plus the payload (per-app rank delta, new entries, movers, dropped apps). It never names a sibling such as sonar_app_rankings, so the store-wide-chart-versus-single-app distinction is left implicit even though the scope language points the right way.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use to see what's rising in a market or category' gives one positive use case, which is genuinely helpful framing. There is no when-not guidance, no mention of which sibling answers per-app ranking history or keyword ranking questions, and no prerequisites, so an agent must infer routing from the sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_track_appTrack AppAInspect

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_create_product instead. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
storeYesApp store. "ios" for Apple App Store, "android" for Google Play.
countryNoISO 3166-1 alpha-2 country code (e.g. "us"). Optional — defaults server-side.
store_idYesStore-specific app identifier of the version to link. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.
product_idYesSonar product UUID (from sonar_create_product). NOT a store id.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and openWorldHint=true, but the description adds genuinely new behavioral context: the WRITE nature, the 'at most one iOS + one Android app per product' constraint, the Indie plan requirement, and the auth/scope requirements. This is exactly the kind of value structured fields cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the critical 'WRITE tool' classification, followed by the constraint, the alternative, and the prerequisites. No filler; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with 100% schema coverage, no output schema needed, and annotations covering safety, the description is complete: purpose, constraints, alternative, plan, and auth requirements are all present. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (including the store_id formats and product UUID semantics) are already fully documented in the schema. The description adds no syntax or format detail beyond that, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (links) and resource (the second-store version of an existing Sonar product), and explicitly contrasts it with the sibling sonar_create_product used for brand-new apps. An agent can distinguish this from the other tracking tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (adding the second store's version), when-not-to-use (brand-new app → sonar_create_product), and the preconditions (Indie plan, authorized account or write-scoped API key). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_track_competitorTrack CompetitorAInspect

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 Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
storeYesApp store. "ios" for Apple App Store, "android" for Google Play.
countryNoISO 3166-1 alpha-2 country code (e.g. "us"). Optional — defaults server-side.
store_idYesStore-specific app identifier of the COMPETITOR app to track. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name.
product_idYesSonar product UUID (from sonar_create_product). NOT a store id.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=true, so the write/non-idempotent nature is covered structurally. The description adds real value beyond that: the 'WRITE tool' label, the plan tier requirement, and the auth model (authorized Sonar account or API key with write scope), which the agent cannot infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the 'WRITE tool' qualifier and then packs prerequisites and auth into two further sentences with little waste. Slightly dense, but every sentence carries actionable information (effect, precondition, plan, auth).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still covers purpose, preconditions, plan gating, and auth, which is what an agent needs to invoke it correctly. It doesn't state what happens on a duplicate/pre-existing competitor (relevant given idempotentHint=false), a minor gap for a 4-param mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are fully documented at the schema level and the baseline applies. The description reinforces the store/product relationship ('same store as the competitor') but adds no syntax or format detail beyond what the schema already states for store, store_id, product_id, and country.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (adds/tracks) and resource (a competitor app under a Sonar product) with the downstream effect (keywords and rankings tracked alongside the product's own app). This cleanly distinguishes it from sibling sonar_track_app (own app) and sonar_remove_competitor (the inverse).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions: the product must already have its own app linked in the same store as the competitor, plus the Indie plan and authorized-account/write-scope requirements. It stops short of naming the relevant sibling alternatives (e.g., create the product first via sonar_create_product), so it's context-rich but not fully routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_track_keywordsTrack KeywordsAInspect

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). Tracked keywords count against the workspace's plan cap (Indie 2,500, Agency 10,000 per workspace); terms beyond the remaining headroom come back as failed with the plan-limit message while the rest are still tracked. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
app_idYesSonar app UUID — the `apps[].id` returned by sonar_create_product (or sonar_track_app). NOT a store id; the store is implied by the app.
countryNoISO 3166-1 alpha-2 country code (e.g. "us"). Optional — defaults to the product's country.
keywordsYesKeywords to start tracking (1-200). Duplicates and already-tracked terms are reported, not duplicated.

TDQS

A3.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description asserts 'Idempotent: re-posting the same terms reports them as already_tracked instead of creating duplicates', but the annotations declare idempotentHint=false, which says repeated identical calls do have additional effects. This directly contradicts the structured hint. The remaining behavioral detail (plan caps, per-keyword outcomes, auth requirements) is genuinely useful, but the contradiction is the dominant signal here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the write designation and the core action, then layers requirements and limits. Every sentence earns its place, though the single dense block of five ideas could be broken up slightly for scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the return shape (per-keyword created / already_tracked / failed), the partial-success behavior at plan caps, and the required plan and auth scope. Nothing essential to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents app_id's origin, the country default, and the 1-200 keyword bounds. The description adds only that duplicates/already-tracked terms are reported rather than duplicated, which is behavior rather than parameter syntax, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('starts daily rank tracking for one or more keywords on an app') plus the write nature, which cleanly separates it from read-side siblings like sonar_app_keywords and from sonar_untrack_keywords/sonar_star_keyword. An agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions for use: an Indie plan, an authorized Sonar account or API key with write scope, and the consequences of hitting the plan cap. It never names a sibling alternative (e.g., when to prefer star_keyword or app_keywords extraction over tracking), so it is strong context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_untrack_appUntrack AppA
DestructiveIdempotent
Inspect

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 sets, if no other app is left. Shared store data (app metadata, snapshots, rank history) is not deleted. To drop a competitor from one product use sonar_remove_competitor instead. Requires an Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
app_idYesSonar app UUID — the `id` returned by sonar_list_apps or sonar_create_product. NOT a store id.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it enumerates precisely what is destroyed (keywords with their notes and stars, discovered keywords, competitor links, and the product plus its screenshot sets if no other app remains) and what is preserved (shared store data — metadata, snapshots, rank history). This is exactly the kind of consequence detail annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with 'WRITE tool' and the core action, then ordered by consequence, alternative, and prerequisites. Dense but each sentence carries needed information for a destructive operation; minor length is justified rather than wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-parameter tool with annotations covering the safety profile and no output schema, the description supplies everything an agent needs: the scope of deletion, what survives, plan/authorization requirements, and the correct sibling to use for a narrower task.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is only one parameter, so the baseline is 3. The description adds no format or syntax detail about app_id beyond what the schema already states ('UUID ... NOT a store id').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('untrack an app in the caller's Sonar workspace') and immediately enumerates the exact effects (tracked keywords, discovered keywords, competitor links, product detachment). This lets an agent distinguish it from sibling destructive tools like sonar_untrack_keywords or sonar_delete_product without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names an explicit alternative for a specific case ('To drop a competitor from one product use sonar_remove_competitor instead') and states prerequisites (Indie plan, authorized account or API key with write scope). Clear context is given, but there is no general when-not-to-use guidance covering the primary app-untracking operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_untrack_keywordsUntrack KeywordsA
DestructiveIdempotent
Inspect

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 Indie plan (trial counts) and an authorized Sonar account or an API key with the write scope.

NameRequiredDescriptionDefault
allNoSet true to untrack ALL keywords for the app. Mutually exclusive with `ids` — pass exactly one of `all` or `ids`.
idsNoTracked-keyword ids to untrack (from sonar_app_keywords). Mutually exclusive with `all` — pass exactly one of `all` or `ids`.
app_idYesSonar app UUID — the `id` returned by sonar_list_apps or sonar_create_product. NOT a store id.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the description's 'WRITE tool' framing is corroborating rather than novel. It does add value beyond annotations by disclosing the plan requirement (Indie/trial counts) and the auth modes (account vs write-scoped API key), which annotations cannot convey. It does not describe the return payload or partial-failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the WRITE classification and the mode-selection rule before the prerequisites. Every clause carries information, though the auth/plan sentence is somewhat packed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive bulk mutation with no output schema, the definition covers the essentials: operation type, the two mutually exclusive modes, the alternative tool, and the plan/auth gates. Only the response shape and any partial-failure semantics are unaddressed, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented, including the mutual-exclusivity rule the description repeats. The description adds the practical note that a single keyword should use the sibling tool instead, but no format or semantic detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: 'bulk-untrack keywords for an app in the caller's Sonar workspace.' It explicitly distinguishes itself from the single-keyword sibling (sonar_delete_tracked_keyword), so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the two mutually exclusive invocation modes (all:true vs ids:[...]), names the single-keyword alternative, and gives prerequisites (Indie plan, authorized account or write-scoped API key). This is explicit when-to-use guidance with an alternative named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_update_keyword_noteUpdate Keyword NoteA
Idempotent
Inspect

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 an API key with the write scope.

NameRequiredDescriptionDefault
noteYesNote text (max 1000 chars). Pass null or an empty string to clear the note.
tracked_keyword_idYesTracked-keyword UUID — the `id` (not keyword_id) returned by sonar_app_keywords or sonar_track_keywords.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations: specifies plan requirement (Indie), auth requirements (authorized account or API key with write scope), and idempotent semantics. The annotations declare idempotentHint=true, and the description reinforces it with the concrete 're-sending the same note is a no-op', adding operational detail the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads 'WRITE tool' and the core action in the first sentence, then layers idempotency and auth compactly. Every clause earns its place, though the parentheses around examples could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the mutation semantics, idempotency, plan/auth prerequisites, and note-clearing use cases; with schema handling parameter detail and no output schema needed, an agent has everything required to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are fully documented in the schema, including the null/empty-string clearing behavior and the ID disambiguation note. The description adds only a general phrase about notes; the baseline 3 applies when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('sets or clears the note on a tracked keyword') with example use cases, and distinguishes scope ('caller's Sonar workspace'). An agent can tell it apart from sonar_star_keyword or sonar_track_keywords.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage via examples (why tracked, hypothesis, reminder) and produces a 'WRITE tool' label, but does not state when-not-to-use or name an alternative sibling for note clearing vs. other keyword mutations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_update_review_replyUpdate Review ReplyAInspect

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.

NameRequiredDescriptionDefault
bodyYesThe reply text.
review_idYesSonar review id (the `id` of an item from sonar_review_inbox — not Apple's review id).
translate_from_englishNotrue = body is English; store its translation into the reviewer's language (keeps the English copy).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false), and the description goes well beyond them: it identifies this as a write that mutates stored reply text without publishing, discloses that it is not metered, and specifies plan and authorization/scope requirements. That is exactly the extra context annotations do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the 'WRITE tool' classification and the key distinction from the publish sibling. Every clause carries information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers operation, non-publishing semantics, routing to the publish sibling, and auth/plan prerequisites, which is sufficient for a 3-parameter write with no output schema. It could say more about replacement semantics (what happens to an existing reply) and the translate_from_english side effect, but the essentials are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter is documented in the schema, including the important warning that review_id is Sonar's id rather than Apple's. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('replace a review's reply text') and immediately distinguishes the operation from the sibling that publishes it. An agent can tell this apart from sonar_post_review_reply and sonar_draft_review_reply without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative ('Use sonar_post_review_reply to publish') and states the condition that separates the two ('not metered, doesn't post'). Prerequisites (Indie plan, authorized account or write-scoped API key) are stated up front so the agent can pre-check before calling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_update_screenshotUpdate ScreenshotA
DestructiveIdempotent
Inspect

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 write-scope API key.

NameRequiredDescriptionDefault
layoutYesThe FULL replacement layout — this replaces the whole document, it does not merge. Never send a layout containing '[inline image omitted…]' placeholders; refetch with include_image_data first.
screenshot_idYesScreen id (from the set's screens array).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds real value beyond them: the change is a full-document replacement (not a merge), it becomes immediately visible for human review, and it requires a specific plan and auth scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the operation, then the workflow, then the constraints. Every sentence carries distinct information with no repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-required-param nested-object mutation with no output schema, the description covers operation semantics, workflow, side effects (immediate visibility for review), and auth/plan requirements. Only failure/error behavior and the relationship to update_screenshot_set are left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema's 'layout' description already spells out full-replacement semantics and the inline-image-placeholder caveat. The description reinforces the whole-document replace but adds no new syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Replace') and resource ('one screen's layout in a screenshot set'), and the scope ('one screen') implicitly distinguishes it from the sibling sonar_update_screenshot_set. An agent can pick between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: whole-document replace, the fetch-modify-send workflow, and prerequisites (Indie plan, authorized account or write-scope key). It does not explicitly name update_screenshot_set as the alternative for set-level edits, so routing between the two is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sonar_update_screenshot_setUpdate Screenshot SetA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
nameNoNew display name.
set_idYesScreenshot set id.
localesNoReplaces the extra-locale list (e.g. ["de-DE","fr-FR"]). Locales removed here lose their stored translations.
screen_orderNoFull permutation of the set's screen ids in the new display order.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds genuinely new context: the response shape (updated set with image data stripped) and the auth/plan prerequisites. It does not warn that replacing the locale list drops stored translations, a data-loss detail left to the schema — mild given destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first front-loads exactly what can be changed, the second carries return format and prerequisites. No filler and no redundancy with the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully states what comes back, and it covers auth and plan gating for a mutating tool. The one gap is not surfacing the locale-replacement data loss, which an agent deciding whether to call this should know.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents name, set_id, locales, and screen_order including the translation-loss caveat and the full-permutation requirement. The description restates the parameters at a high level without adding format or constraint detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (update) and resource (screenshot set) and enumerates the three mutation surfaces — rename, replace extra-locale list, reorder screens. This clearly separates it from sonar_update_screenshot (singular) and sonar_create_screenshot_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real operating context: an Indie plan is required and either an authorized Sonar account or a write-scope API key is needed, plus the 'and/or' phrasing signals partial updates are allowed. It stops short of naming alternatives (e.g., when to use sonar_set_screenshot_translations instead) or stating when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updates
    • Changedsonar_ad_spy_ads1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "default": "compact",
        +  "description": "\"compact\" (default): each ad without its expiring `media` links and `media_expires_at` — ids, the permanent `library_url`, dates, days running, longevity, format, copy, CTA, landing URL, placements, variants and EU reach stay (about 2.4× smaller). \"full\": adds each ad's `media` (video/image CDN links, which expire) and `media_expires_at` — only for downloading media right away.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsonar_ad_spy_tiktok_posts1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "default": "compact",
        +  "description": "\"compact\" (default): each video without its expiring `cover_url`; the permanent `url`, caption, dates and every counter stay. \"full\": adds `cover_url` (an expiring CDN image link).",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsonar_app_rankings1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "default": "compact",
        +  "description": "\"compact\" (default): per keyword: rank + status + measured_at (latest day with a completed check or recorded rank), best_rank, positions_gained (oldest ranked day in the window minus the current rank; positive = moved up), and ranks — one entry per day, newest first starting at ranks_end: a number = the rank, \"unranked\" = a completed check did not find the app, null = no check that day (never report a null day as not ranked). About 7× smaller. \"full\": per keyword: the `history` array (positive ranks only) and the daily `observations` grid with status (ranked / not_found / not_observed) and results_count per day.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsonar_app_search1 field changed
      • changedInput schema / properties / fields / description
        Previous value: -"\"compact\" (default): rank, store, storeId, numericId, name, subtitle, developer, category, iconUrl, rating, reviews (rating count), installs (Android), price, free, url. \"full\": whole listings incl. description, screenshots, release notes and IAP items — large (~1k tokens per app); prefer sonar_app_lookup for the one app you need in full."New value: +"\"compact\" (default): rank, store, storeId, numericId, name, subtitle, developer, category, iconUrl, rating, reviews (rating count), installs (Android), price, currency (ISO code of price — store prices are storefront-local), free, url. \"full\": whole listings incl. description, screenshots, release notes and IAP items — large (~1k tokens per app); prefer sonar_app_lookup for the one app you need in full."
    • Changedsonar_discovered_keywords1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "default": "compact",
        +  "description": "\"compact\" (default): keyword_id, keyword, country, rank, source, status, bucket, the four popularity fields, difficulty, ai_relevance, opportunity, competitor_rank, competitor_name. \"full\": adds the discovered-row id, store, discovered_at and ranks_checked_at.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsonar_get_app1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "default": "compact",
        +  "description": "\"compact\" (default): identity plus the listing basics in `metadata` (numericId, subtitle, url, rating, reviews, installs, price, currency, free, offersIAP, iapRange, version, released, updated, contentRating) and the 7 newest daily snapshots — about 1.5 KB. \"full\": the whole stored listing (description, screenshots, release notes, languages, IAP items, product-page creative) and up to 90 snapshots — about 10× larger.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsonar_keyword_rankings1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "default": "compact",
        +  "description": "\"compact\" (default): each entry is rank, store_id, app_name, measured_at, outlier — about half the size. \"full\": adds app_icon_url to every entry (one icon URL per app per day).",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Changedsonar_top_charts1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "default": "compact",
        +  "description": "\"compact\" (default): each app is storeId, name, developer, rating, rank, delta, isNew (movers: rank + delta; droppedApps: previousRank) — about 60% smaller. \"full\": adds iconUrl and numericId to every app.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
  2. 18 tool updates
    • Addedsonar_ad_spy_ad_analysis
    • Addedsonar_ad_spy_ads
    • Addedsonar_ad_spy_analyze_ad
    • Addedsonar_ad_spy_competitors
    • Addedsonar_ad_spy_hide_ads
    • Addedsonar_ad_spy_link
    • Addedsonar_ad_spy_open_page
    • Addedsonar_ad_spy_refresh
    • Addedsonar_ad_spy_scan
    • Addedsonar_ad_spy_script
    • Addedsonar_ad_spy_search_pages
    • Addedsonar_ad_spy_tiktok_posts
    • Addedsonar_ad_spy_unlink
    • Addedsonar_ad_spy_vault
    • Addedsonar_ad_spy_vault_remove
    • Addedsonar_ad_spy_vault_save
    • Addedsonar_ad_spy_vault_update
    • Changedsonar_app_search1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "default": "compact",
        +  "description": "\"compact\" (default): rank, store, storeId, numericId, name, subtitle, developer, category, iconUrl, rating, reviews (rating count), installs (Android), price, free, url. \"full\": whole listings incl. description, screenshots, release notes and IAP items — large (~1k tokens per app); prefer sonar_app_lookup for the one app you need in full.",
        +  "enum": [
        +    "compact",
        +    "full"
        +  ],
        +  "type": "string"
        +}
  3. 9 tool updates
    • Addedsonar_cancel_review_reply
    • Addedsonar_dismiss_review_reply
    • Addedsonar_draft_review_reply
    • Addedsonar_post_review_reply
    • Addedsonar_review_inbox
    • Addedsonar_review_responder
    • Changedsonar_set_alert4 fields changed
      • addedInput schema / properties / cadence
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "instant",
        +        "hourly",
        +        "daily"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "new_review only: email cadence. instant = within ~5 minutes of the review syncing, hourly = at most one email an hour, daily = the 08:30 UTC digest. Omit to keep the stored value (daily on create)."
        +}
      • changedInput schema / properties / threshold / description
        Previous value: -"Trigger threshold; omit or null for the default. rank_drop / rank_gain: positions moved (default 5). rating_drop: tenths of a star (default 2 = a 0.2-star drop). review_spike: new reviews since the previous daily snapshot (default 25). top_chart: rank cutoff, 1-200 (default 200). Ignored by entered_top10, left_top10, new_ranking, competitor_change."New value: +"Trigger threshold; omit or null for the default. rank_drop / rank_gain: positions moved (default 5). rating_drop: tenths of a star (default 2 = a 0.2-star drop). review_spike: new reviews since the previous daily snapshot (default 25). top_chart: rank cutoff, 1-200 (default 200). new_review: highest star rating that alerts, 1-5 (default 5 = every review; 3 = only 1-3★). Ignored by entered_top10, left_top10, new_ranking, competitor_change."
      • changedInput schema / properties / type / description
        Previous value: -"The alert type to subscribe to. top_chart = one of your own apps entered or left a store top chart (overall + its category, free/paid/grossing)."New value: +"The alert type to subscribe to. top_chart = one of your own apps entered or left a store top chart (overall + its category, free/paid/grossing). new_review = a new App Store review arrived for an own iOS app (needs App Store Connect connected and the review responder switched on for the app)."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "rank_drop",
        -  "rank_gain",
        -  "entered_top10",
        -  "left_top10",
        -  "new_ranking",
        -  "rating_drop",
        -  "review_spike",
        -  "competitor_change",
        -  "top_chart"
        -]New value: +[
        +  "rank_drop",
        +  "rank_gain",
        +  "entered_top10",
        +  "left_top10",
        +  "new_ranking",
        +  "rating_drop",
        +  "review_spike",
        +  "competitor_change",
        +  "top_chart",
        +  "new_review"
        +]
    • Addedsonar_set_review_responder
    • Addedsonar_update_review_reply
  4. 1 tool update
    • Changedsonar_app_changes1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "release",
        -  "metadata",
        -  "screenshots",
        -  "price",
        -  "category"
        -]New value: +[
        +  "release",
        +  "metadata",
        +  "screenshots",
        +  "price",
        +  "category",
        +  "header",
        +  "in_app_event"
        +]
  5. 10 tool updates
    • Changedsonar_app_aso_score1 field changed
      • changedInput schema / properties / store_id / description
        Previous value: -"Store-specific app identifier. iOS: numeric track ID. Android: package name."New value: +"Store-specific app identifier. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name."
    • Changedsonar_app_extract_keywords1 field changed
      • changedInput schema / properties / store_id / description
        Previous value: -"Store-specific app identifier. iOS: numeric track ID. Android: package name."New value: +"Store-specific app identifier. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name."
    • Changedsonar_app_lookup1 field changed
      • changedInput schema / properties / store_id / description
        Previous value: -"Store-specific app identifier. iOS: numeric track ID (e.g. \"123456789\"). Android: package name (e.g. \"com.spotify.music\")."New value: +"Store-specific app identifier. iOS: bundle ID (e.g. \"com.spotify.client\") or numeric track ID (e.g. \"324684580\") — the `storeId` returned by sonar_app_search works as-is. Android: package name (e.g. \"com.spotify.music\")."
    • Changedsonar_app_revenue1 field changed
      • changedInput schema / properties / store_id / description
        Previous value: -"Store-specific app identifier. iOS: numeric track ID. Android: package name."New value: +"Store-specific app identifier. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name."
    • Changedsonar_app_reviews1 field changed
      • changedInput schema / properties / store_id / description
        Previous value: -"Store-specific app identifier. iOS: numeric track ID. Android: package name."New value: +"Store-specific app identifier. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name."
    • Changedsonar_create_product1 field changed
      • changedInput schema / properties / apps / items / properties / store_id / description
        Previous value: -"Store-specific app identifier. iOS: numeric track ID. Android: package name."New value: +"Store-specific app identifier. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name."
    • Changedsonar_set_alert1 field changed
      • changedInput schema / properties / threshold / description
        Previous value: -"Sensitivity threshold (meaning depends on type; for top_chart it's the rank cutoff, 1-200, default 200). Omit or null to use the per-type default."New value: +"Trigger threshold; omit or null for the default. rank_drop / rank_gain: positions moved (default 5). rating_drop: tenths of a star (default 2 = a 0.2-star drop). review_spike: new reviews since the previous daily snapshot (default 25). top_chart: rank cutoff, 1-200 (default 200). Ignored by entered_top10, left_top10, new_ranking, competitor_change."
    • Changedsonar_top_charts1 field changed
      • changedInput schema / properties / category / description
        Previous value: -"Category key, e.g. \"HEALTH_AND_FITNESS\" (iOS) or \"HEALTH_AND_FITNESS\" / \"GAME\" (Android). Use \"overall\" (default) for the store-wide chart."New value: +"Category key; keys differ by store (e.g. iOS \"SOCIAL_NETWORKING\" / \"GAMES\", Android \"SOCIAL\" / \"GAME\"; \"HEALTH_AND_FITNESS\" exists on both). An unknown key is rejected with an error. Use \"overall\" (default) for the store-wide chart."
    • Changedsonar_track_app1 field changed
      • changedInput schema / properties / store_id / description
        Previous value: -"Store-specific app identifier of the version to link. iOS: numeric track ID. Android: package name."New value: +"Store-specific app identifier of the version to link. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name."
    • Changedsonar_track_competitor1 field changed
      • changedInput schema / properties / store_id / description
        Previous value: -"Store-specific app identifier of the COMPETITOR app to track. iOS: numeric track ID. Android: package name."New value: +"Store-specific app identifier of the COMPETITOR app to track. iOS: bundle ID or numeric track ID — the `storeId` returned by sonar_app_search works as-is. Android: package name."
  6. 10 tool updates
    • Changedsonar_app_aso_score1 field changed
      • changedInput schema / properties / country / description
        Previous value: -"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\"). Default \"us\"."New value: +"Market as an ISO 3166-1 alpha-2 code (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\"."
    • Changedsonar_app_extract_keywords1 field changed
      • changedInput schema / properties / country / description
        Previous value: -"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\"). Default \"us\"."New value: +"Market as an ISO 3166-1 alpha-2 code (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\"."
    • Changedsonar_app_lookup1 field changed
      • changedInput schema / properties / country / description
        Previous value: -"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\"). Default \"us\"."New value: +"Market as an ISO 3166-1 alpha-2 code (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\"."
    • Changedsonar_app_revenue1 field changed
      • changedInput schema / properties / country / description
        Previous value: -"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\"). Default \"us\"."New value: +"Market as an ISO 3166-1 alpha-2 code (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\"."
    • Changedsonar_app_reviews1 field changed
      • changedInput schema / properties / country / description
        Previous value: -"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\"). Default \"us\"."New value: +"Market as an ISO 3166-1 alpha-2 code (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\"."
    • Changedsonar_app_search1 field changed
      • changedInput schema / properties / country / description
        Previous value: -"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\"). Default \"us\"."New value: +"Market as an ISO 3166-1 alpha-2 code (e.g. \"us\", \"gb\", \"de\", \"mt\"). Any App Store storefront (175 countries) or Google Play market (145). Default \"us\"."
    • Changedsonar_keyword_metrics1 field changed
      • changedInput schema / properties / country / description
        Previous value: -"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\"). Default \"us\"."New value: +"One of Sonar's 72 keyword-research markets, as an ISO 3166-1 alpha-2 code (e.g. \"us\", \"gb\", \"de\", \"jp\", \"br\"). Keyword data isn't available for other storefronts. Default \"us\"."
    • Changedsonar_keyword_search1 field changed
      • changedInput schema / properties / country / description
        Previous value: -"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\"). Default \"us\"."New value: +"One of Sonar's 72 keyword-research markets, as an ISO 3166-1 alpha-2 code (e.g. \"us\", \"gb\", \"de\", \"jp\", \"br\"). Keyword data isn't available for other storefronts. Default \"us\"."
    • Changedsonar_keyword_suggestions1 field changed
      • changedInput schema / properties / country / description
        Previous value: -"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\"). Default \"us\"."New value: +"Market as an ISO 3166-1 alpha-2 code (e.g. \"us\", \"gb\", \"de\", \"mt\"). Nearly every App Store storefront and Google Play market works; the few small storefronts that are not supported return an error naming them. Default \"us\"."
    • Changedsonar_top_charts1 field changed
      • changedInput schema / properties / country / description
        Previous value: -"ISO 3166-1 alpha-2 country code (e.g. \"us\", \"gb\", \"de\"). Default \"us\"."New value: +"Market as an ISO 3166-1 alpha-2 code (e.g. \"us\", \"gb\", \"de\", \"mt\"). Nearly every App Store storefront and Google Play market works; the few small storefronts that are not supported return an error naming them. Default \"us\"."
  7. 2 tool updates
    • Addedsonar_app_engagement
    • Addedsonar_app_sales
  8. 2 tool updates
    • Changedsonar_alert_events1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "rank_drop",
        -  "rank_gain",
        -  "entered_top10",
        -  "left_top10",
        -  "new_ranking",
        -  "rating_drop",
        -  "review_spike",
        -  "competitor_change"
        -]New value: +[
        +  "rank_drop",
        +  "rank_gain",
        +  "entered_top10",
        +  "left_top10",
        +  "new_ranking",
        +  "rating_drop",
        +  "review_spike",
        +  "competitor_change",
        +  "top_chart"
        +]
    • Changedsonar_set_alert4 fields changed
      • addedInput schema / properties / countries
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "maxLength": 2,
        +        "minLength": 2,
        +        "type": "string"
        +      },
        +      "maxItems": 10,
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "top_chart only: storefronts to watch (ISO 3166-1 alpha-2, e.g. [\"us\", \"de\"]), max 10. Omit to keep the stored list; null or [] = the countries you track keywords in."
        +}
      • changedInput schema / properties / threshold / description
        Previous value: -"Sensitivity threshold (meaning depends on type). Omit or null to use the per-type default."New value: +"Sensitivity threshold (meaning depends on type; for top_chart it's the rank cutoff, 1-200, default 200). Omit or null to use the per-type default."
      • changedInput schema / properties / type / description
        Previous value: -"The alert type to subscribe to."New value: +"The alert type to subscribe to. top_chart = one of your own apps entered or left a store top chart (overall + its category, free/paid/grossing)."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "rank_drop",
        -  "rank_gain",
        -  "entered_top10",
        -  "left_top10",
        -  "new_ranking",
        -  "rating_drop",
        -  "review_spike",
        -  "competitor_change"
        -]New value: +[
        +  "rank_drop",
        +  "rank_gain",
        +  "entered_top10",
        +  "left_top10",
        +  "new_ranking",
        +  "rating_drop",
        +  "review_spike",
        +  "competitor_change",
        +  "top_chart"
        +]
  9. 1 tool update
    • Changedsonar_app_reviews1 field changed
      • addedInput schema / properties / lang
        Added value: +{
        +  "description": "Android only: fetch one language feed (e.g. ar, fr). Omit to merge the market language plus en, es, fr, ar; coverage is not exhaustive.",
        +  "pattern": "^[a-z]{2}$",
        +  "type": "string"
        +}
  10. 1 tool update
    • Removedsonar_export_screenshots

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    App Store and Google Play ASO: keyword rankings, competitors, reviews, audits and an action queue.
    127
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to query live App Store and Google Play data — keyword demand, rank history, top charts, competitor sets, reviews and ratings — across 100+ countries, directly inside a chat instead of a dashboard. Exposes 35 read-only tools covering app search, ASO keyword profiling, ranking trajectories, and worldwide market comparisons through a remote OAuth-authenticated endpoint.
    3
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Connects App Store and Google Play keyword data to AI assistants, enabling ASO tasks like rank tracking, keyword analysis, competitor visibility, and top charts through natural language.
    30
    784 npm
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Storelift's MCP server lets Claude, ChatGPT, Cursor or any MCP client read your App Store and Google Play keyword ranks, rivals, reviews, store pages, charts and AI visibility from your Storelift workspace. The remote server is included on every plan, including Free (1 app, 25 keywords in each of 2 storefronts, no end date); the local server and public API come with Pro and Studio.
    85
    173 npm
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.