Insights tools
Query brand visibility, sentiment, alignment, citations, and shopping from an LLM agent
The 16 Insights tools answer questions like "how are LLMs describing my brand?" and "which sources cite us?" — all read-only, no credits consumed.
Served at https://mcp.getmint.ai/mcp. See Connect, Authentication, and the Capabilities matrix. The MCP is a curated read set; the full Insights surface (per-report detail, prompt config, topic management, wider shopping, sponsored ads) stays on the REST API.
Discovery
list_domains — Every domain your org can reach. Usually the first call; other tools need a domainId.
Inputs: none.
get_domain — One domain's brand attributes, aliases, tracked markets/languages, owned sources. Every prompt of a brand attribute carries the attribute's id (attributeId, or its own id for the attribute's first prompt), the id alignment results are grouped by.
Inputs: domainId (required).
list_topics — A domain's tracked topics (competitors live here, not on the domain).
Inputs: domainId (required).
get_topic — One topic's config: prompts, LLM models, markets. name is the stored label; displayName is what the topic is shown as and what its competition prompts compare brands on, and competitionSubject overrides that subject when you set one. Both are absent when unset, in which case name is used. Each prompt carries modules, and adsPromptCount is how many of them your CSM assigned to Ads Radar.
Inputs: domainId, topicId (required).
get_topic_summary — Quick headline for a topic, your brand only: summary.visibility (the visibility score the page shows: level in %, pooled over the last 14 days, its 95% margin range95, verdict against 14 days earlier; null while nothing is measured), summary.averageCompetitionScore (0–100, averaged over the competition analyses of the last 30 days), lastAnalyzed and trends. No competitor figures, no sentiment.
Inputs: domainId, topicId (required). It takes no date, model or tag.
Visibility & competition
Visibility numbers are the ones the Visibility page shows: the share of answers naming a brand, pooled over the last 14 days, each with its 95% range. Brands whose ranges overlap share a tier: they are too close to call, so never read a gap inside one tier as a lead. See Read a Visibility report.
get_topic_visibility — Your brand's visibility on a topic against the other brands. Returns own (your brand: score, its range low–high and margin, verdict against 14 days earlier, score14dAgo, tier, calibratingDay), brands (tracked brands and the 20 brands with the highest share of voice, each with level, margin, tier, sharePct, shareMargin, shareTier), trend (your score on the days that matter, each with its range, move and shiftDay), shifts (days the AI engine itself changed), modelsMix, status (empty, calibrating, established), livePrompts, lastDay, brandsTotal.
Inputs: domainId, topicId (required); startDate, endDate, models (optional). The dates set how far back trend goes: omitted, the last 6 months; a window under 14 days is widened to 14, one over 182 days keeps its latest 182.
verdict is stable (no clear change), probably-up/probably-down (not confirmed yet) or really-up/really-down (confirmed). A Shift in shifts moved every brand at once: it is the AI engine, not your brand. score, low and high are whole numbers, brand levels and shares one decimal, as on screen.
get_topic_mentions — Share of voice on a topic: every brand the AI names, tracked or not, ranked by sharePct (its share of all brand mentions over the last 14 days) with shareMargin and shareTier. Tracked brands also carry their visibility level and tier. Returns brands, total, page, pageSize, models, derived.
Inputs: domainId, topicId (required); page, pageSize (optional, max 100), startDate, endDate, models (optional). Share of voice always covers the latest 14 days: the dates do not change it.
get_topic_visibility_by_model — Visibility of each tracked brand on each AI model of a topic, as the Brand Visibility by Model tab shows it: per brand its level and margin over the models read, and byModel[] with each model's level, margin and calibratingDay. Also modelsMix (each model's share of the answers) and lastDay. A single model has fewer answers, so its margin is wider: two models whose ranges overlap are not different.
Inputs: domainId, topicId (required); models, tagIds (optional).
get_topic_visibility_prompts — Your visibility on each prompt of a topic, as the Prompt Visibility Ranking tab shows it, ranked highest first: prompt, level (the latest 14-day reading) with its margin, runs (answers it is built on) and ratePct (share of those answers naming your brand). Use it to find the prompts where you are absent or strong. A single prompt has few answers, so its margin is wide.
Inputs: domainId, topicId (required); models, tagIds (optional).
list_domain_tags — A domain's prompt tags, each { id, name }. Use it to turn a tag name into the tagIds that get_topic_visibility_by_model and get_topic_visibility_prompts take.
Inputs: domainId (required).
Every visibility tool takes models; get_topic_visibility_by_model and get_topic_visibility_prompts also take tagIds. One model reads its own numbers; two or more but not all read a combined estimate (derived: true). With tagIds, the numbers cover only the prompts carrying any of those tags, and the response adds taggedPrompts and tooFewPrompts: below 10 tagged prompts the numbers are not significant. Markets do not filter visibility. The period sets how far back trend goes; the score itself always pools the 14 days ending on lastDay, and movement is read against 14 days earlier, never against six months ago.
get_topic_competition — Your brand's competition score on the topic's 10 most recent analyses, newest first: each with reportDate, averageScore (0–100), scoreVariation, availableModels. No per-competitor scores.
Inputs: domainId, topicId (required). Takes no date and cannot reach older analyses, so it is not a monthly history.
Brand perception
get_domain_sentiment_aggregated — "How are LLMs describing my brand?" — aggregated sentiment scores and trend, each answer labelled positive, neutral or negative. modelBreakdown[] gives each model its own average score.
Inputs: domainId (required); fromDate, toDate (optional, inclusive ISO dates); citationsPage, citationsPageSize (optional).
get_domain_alignment_aggregated — How closely LLM depictions match the brand's stated attributes. modelBreakdown[] gives each model its own average score; modelAttributeScores splits it by attribute id, and attributeBreakdown[] names each id (removed: true for an attribute since dropped from the brand profile).
Inputs: domainId (required); fromDate, toDate (optional, inclusive ISO dates); citationsPage, citationsPageSize (optional).
Every scan produces one report per model. Both aggregates average each model over its own reports, so modelBreakdown[].score is comparable across models even when one of them ran on fewer days.
fromDate/toDate translate to the endpoint's startDate/endDate; omit them for the last 6 months. get_topic_visibility takes startDate/endDate too, for how far back its trend goes.
Both reports carry a citations block, and it is paginated default 20 · max 100. citations.items holds one page; totalItems, totalPages and hasMore describe the rest.
Prop
Type
Inline, the citation list is 93-99% of these responses — hundreds of KB on an active domain, past what some agent hosts accept in one tool result. Ask for the page you need; for the complete list over an arbitrary window, use GET /domains/{id}/{sentiment,alignment}/aggregated over REST.
Citations & sources
get_domain_explorer_aggregated — What your brand is known for in LLM answers. Returns topKeywords and topSources (each { count, percentage }), summary, domainSourceAnalysis, availableModels, availableTopics, reportCount, dateRange, totalAnswers. Top lists are top 25 and webSearchResults is dropped to stay compact.
Inputs: domainId (required); topicId (optional — narrows to one topic; visibility + competition only).
list_explorer_citations — Paginated individual citations, row by row. Each row carries link (cited URL), linkDomain, analysis type, and model. Filter to drill down to exact threads, videos, and pages.
Prop
Type
Always scoped to the last 1 month 1-month cap — the citation set is huge and a wider window would time out. Read further by passing the response's nextCursor back as cursor (or page with page/pageSize); for arbitrary ranges, query the REST endpoint directly.
Places
get_mention_entities — The places your brands are named at: a specific hotel property, store or branch, rather than the brand as a whole. Returns rows with displayName, propertyName (the establishment's own name, such as "ibis Paris Porte de la Chapelle", when the answer named one), countryCode, cityText, localityText, ownership (ourbrand / competitor / other, resolved live against your current configuration), mentions and mentionRate. On the default entity axis, two hotels of one brand in the same district are two rows. Spellings of one establishment that resolve to the same Google Maps listing ("IBIS Pte Chappelle", "ibis Paris Porte de la Chapelle") are one row, with its placeId and a listing (address, category, Google rating and review count). Establishments shown only in a surface's map, local pack or place cards count too: placeBlockAnswers and placeBlockByModel (answers and average position per model) count those appearances, and placeBlockRates says how often each model showed such a block at all. For a topic configured with its own establishment, isTopicHotel marks its row and topicHotel summarises it — mentions, rate and per-model counts — even when no answer named it.
mentions counts distinct answers — an answer naming one property three times counts once — and mentionRate is that over every answer in the window, 0-100.
Inputs: domainId (required), plus groupBy (entity by default, or country / city / locality / brand), segment, search, sortBy, sortDir, page, limit and the usual window filters.
get_mention_entity_geo — Where those brands are named. Returns two independent layers: countries (per-country totals, always populated) and points (one per named establishment, with its propertyName and brandName, and one per place named without an establishment, with coordinates where they have been resolved). A point's precision is property when it sits on the establishment itself; an establishment not located yet sits at its district or city until it is. unlocatedPoints says how many places carry no coordinates yet; they still count toward their country total, so countries is never under-reported by them. Spellings of one establishment that resolve to the same Google Maps listing are one point. For a topic configured with its own establishment, topicHotel carries its position, pinned even at zero mentions.
Inputs: domainId (required), plus segment, brandName and the usual window filters.
Both require brand entity extraction on the organization. Without it there is simply nothing to read: the tools return an empty list rather than an error.
Shopping
get_topic_shopping_overview — The shopping overview of one topic: how often the answers came back with product carousels, how often a product of the brand is in them and at what position (its mean slot against the longest carousel), the competitor brands on the shelf, the merchants and the top products, with the topic name. Fed by the prompts of the topic assigned to shopping, on ChatGPT and Alexa Shopping. Shopping surface only — for the answer-engine share of voice use get_topic_mentions. Empty sections when no prompt of the topic feeds shopping.
Inputs: domainId, topicId (required); startDate, endDate, usedModels, tagIds, granularity (optional).
Bi-weekly reports
Every other Monday, each domain gets a visibility report covering the two weeks before, stored as it was built and emailed to the organization. Both tools read that stored report; nothing is recomputed, so a report reads the same for ever.
list_domain_reports — The organization's reports, newest first and paginated default 20 · max 50. Each item carries domainId, domainName, period (from, to, referenceDay), generatedAt and latest (true on the newest report of its domain).
Inputs: domainId (optional, one domain), fromDate / toDate (optional ISO days; keeps the reports whose two weeks overlap them), page, pageSize.
get_domain_report — One report in full. report.domain is the brand's reading on the last day of the two weeks (a Sunday) against the first day (the Monday) (now, before, deltaPts, verdict: too-close while the two 95% ranges overlap, else up or down). report.topics lists every reported topic ranked by its reading, each with the same pair, its daily series (shiftDay marks a day the answers changed across the engine), its shifts (the reading the day before and 7 days after), its tracked competitors, its shareOfVoice (the brands of the first three tiers), its sources (up to 10 cited URLs, most cited first, each with its url, ownership, citations, mention rate and sparkline; group is core for the core sources, or other when the two weeks have no core source; totalUrls and totalCitations count the whole group, as the Sources Explorer does) and its contentGaps (the prompts leaving the brand out most, each with its gap percent). report.topicsLeftOut names the topics without a score yet and readyOn, the day their first score comes.
Inputs: reportId (required, from list_domain_reports).
Example Agent Session
User: How is my brand positioned vs. competitors for the topic "cloud security"?
Agent:
list_topics→ found "Cloud Security".get_topic_visibility→ your brand 34% (range 28–40%), tier 1, too close to call with Competitor A at 30.5%; Competitor B at 19.2% sits in tier 2. No clear change vs 14 days ago.get_topic_mentionsgives each brand's share of all mentions, including brands you don't track;get_topic_visibility_by_modelshows no model sets you apart;list_explorer_citations(linkDomain: ["reddit.com"]) surfaces the threads driving it. Wantget_topic_competitionfor how your competition score moved over the last few analyses?