Skip to main content
Read tools are available with the mcp:read scope (granted automatically). Write tools additionally require mcp:write, which you grant explicitly on the consent page. Calling a write tool without it returns JSON-RPC error -32002 missing scope: mcp:write.

Read tools

Write tools

Notable tool behavior

  • get_brand_report in raw mode (no group_by) orders rows newest first (date descending), so the 500-row-per-call cap returns your most recent window instead of the oldest day of a multi-day query. Grouped mode (group_by set) stays chronological, oldest first.
  • get_url_report rows include a brand_mentioned boolean: true when your own brand was mentioned in at least one chat that cited that URL during the window, the same signal the dashboard’s Sources table uses for its “Mentioned” column.
  • get_chat rows include prompt_text, the source prompt’s text at capture time; null when that prompt has since been deleted.
  • list_search_queries and list_shopping_queries return the fan-out sub-queries the AI engines ran while answering your project’s prompts. Raw mode is one row per (query, chat), starting with chat_id: pass that with the row’s date to get_chat to open the full captured chat behind any query. Each row also carries an own_brand_cited boolean (true when that same chat also cites one of your own-brand domains). Optional group_by=query instead returns one row per distinct query with occurrences and own_brand_cited_count: the content-gap list of queries the engines ran that never cite you, ranked by how often each one came up. list_shopping_queries is the same shape filtered to shopping sub-queries (naturally rarer, since they only appear behind a rendered product carousel). Both require a start_date/end_date window, capped at 92 days per call; limit/offset must be a real integer (a number, or the exact string form of one, like "40", the same rule every paginated tool’s limit/offset follows) or the call fails with -32602 (error.data.code = MCP_ARG_INVALID) instead of silently falling back to the default page size. summary.channels_capturing is derived per call from this project’s own captured data in the requested window (any query type, ignoring this call’s channel/prompt filters), so it is always a superset of the channels in the returned rows and can never contradict them; an empty result means nothing was captured for this project in this window, not that no fan-outs happened anywhere (see issue #1774 for which channels have fan-out capture wired at all). Absence of data is not evidence of absence of fan-outs, the same principle behind every partial-coverage tool in this catalog. Data-quality caveat: perplexity-0 rows currently mix Perplexity’s related/suggested-question strings in with executed search fan-outs (issue #2101); weigh perplexity-0 aggregates accordingly until that lands.
  • update_domain_classification writes are scoped to your project: a manual reclassification only changes what your project sees. Other projects citing the same domain, including ones in a different org, are unaffected. Every report or table that shows a domain’s classification reads the effective value: your project’s override if you’ve set one, otherwise the shared classification.
  • classify_prompts is subject to a per-organization daily budget set by your plan. Exceeding it fails the whole call with a PLAN_LIMIT_REACHED error naming the UTC time the budget resets.

Calling tools directly

Tools are ordinary JSON-RPC 2.0 calls. See Authentication for the full protocol surface.