Skip to main content
Glama
vantagemcp

vantage-mcp

Vantage

vantage-mcp MCP server

Vantage is an AI visibility MCP server that checks whether ChatGPT, Gemini, Perplexity and Google AI Overviews cite your site.

Know if AI actually cites you: for which questions, who is cited instead, and whether that is changing. Call it directly from Claude Code, Cursor, or any MCP client. No dashboard to interpret, just a straight answer.

Try it without installing anything

vantagemcp.dev/check runs a real citation check with no account, no email and no card. Give it a keyword and it returns the measured shape of the answer ChatGPT actually cites for it: whether the answer opens with a list, how long the opening is, how many sources it cites, and which domains those are.

Every answer keeps a permanent page, and they are all listed in check/sitemap.xml.

Published on the Official MCP Registry under the domain-verified namespace dev.vantagemcp/vantage.

Not to be confused with: vantage.sh, a cloud cost-management company with its own, unrelated MCP server also named Vantage. Different product, same name.

Related MCP server: ai-visibility-mcp

Install

If your client supports MCP sign-in (OAuth), add https://vantagemcp.dev/mcp with no key and sign in: a free account from your email, or an existing key. Otherwise add to your MCP client config:

{
  "mcpServers": {
    "vantage": {
      "url": "https://vantagemcp.dev/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

If your client only starts servers as a local command, use the npm package vantage-ai-visibility-mcp, which connects to the same hosted server:

{
  "mcpServers": {
    "vantage": {
      "command": "npx",
      "args": ["-y", "vantage-ai-visibility-mcp"],
      "env": { "VANTAGE_API_KEY": "YOUR_API_KEY" }
    }
  }
}

Try it first with no account at all at vantagemcp.dev/check, or get a free API key (30 quota units a month, no card required) at vantagemcp.dev.

Tools

get_usage

How much of this billing period's quota is left, before spending any of it. Costs 0 units - reads Vantage's own record, never calls the paid data provider.

"How many checks do I have left?"

find_cited_questions

Starts from your domain instead of a keyword: the questions where AI answers already cite it, most asked first. 10 units.

"What does ChatGPT already cite us for?"

check_prompt_coverage

Which of several prompts actually cite a specific domain, and which don't - up to 10 keywords in one call. ChatGPT, Gemini or Perplexity (engine), 1 unit per keyword per sample. Pass samples=3 to get "cited in 2 of 3 answers" instead of one yes or no. Each result is remembered for 180 days, so the next check reports what changed (previous, change, newly_cited).

Cited and named are reported separately. An answer can name your brand without linking you (mentioned_not_cited: the model already knows you, it just isn't citing you) or link a page it never names. Pass brand (e.g. "Notion") so the name check looks for your real brand instead of a guess from the domain.

"Out of everything we care about, where do we already show up?"

get_check_history

Your earlier check_prompt_coverage results for a domain, newest first. 0 units.

"Did our changes last week move anything?"

find_citation_leaders

Who dominates AI-answer citations for a topic, and whether a domain is among them.

"Who's winning AI search for this?"

analyze_citation_trend

Month-by-month mention counts for a domain, so you can see whether visibility is growing or fading.

"Is our AI visibility improving?"

analyze_citation_structure

How the winning AI answer for a topic is actually shaped: list-led, sources cited, opening length.

"What does a winning answer look like?"

analyze_citation_structure_batch

Same as analyze_citation_structure, across up to 10 related topics in one call, for content planning across a cluster.

"What do winning answers look like across this whole topic cluster?"

analyze_citation_gap

Diffs your own page's structure against the winning AI-cited answer for the same keyword and returns a fix_brief: ordered rewrite instructions your agent can carry out on the page (opening, sections, the answer's points your page does not cover, table, sources), ending with one step beyond the page: which community sites or other websites the answer relies on. The brief never contains the cited answer's text.

"What should I actually change on this page to get cited?"

Source mix

Every tool that returns cited domains also returns source_mix: how much of them are community sites (Reddit, YouTube, X, Quora and similar) and which. A high share means the topic is won by what people say about a brand elsewhere, not by any one site's pages.

Country and language

Every tool except get_usage takes optional country (e.g. "Italy") and language (e.g. "it"), default United States / en. Tools that read a live ChatGPT answer work in any supported market; find_citation_leaders and analyze_citation_trend only have ChatGPT data for the United States in English, so use platform: "google" for other countries.

Example

> agent calls find_citation_leaders(
  keyword: "best mood tracker app",
  platform: "chat_gpt"
)

< response
{
  "keyword": "best mood tracker app",
  "platform": "chat_gpt",
  "top_domains": [
    { "domain": "www.reddit.com", "mentions": 59 },
    { "domain": "apps.apple.com", "mentions": 55 },
    { "domain": "en.wikipedia.org", "mentions": 49 },
    { "domain": "www.makeuseof.com", "mentions": 12 },
    { "domain": "play.google.com", "mentions": 11 }
  ]
}

Running your own instance

This repo is the MCP server itself: API-key auth, usage metering, one tool per read (see Tools above). Billing and account provisioning are a separate internal service, not included here.

uv pip install -e .
export DATAFORSEO_USERNAME=...
export DATAFORSEO_PASSWORD=...

# stdio (local MCP client, e.g. Claude Desktop config pointing at this command)
python -m vantage_mcp.server

# streamable-http (network service, bind to loopback behind your own reverse proxy)
export VANTAGE_PORT=8420
python -m vantage_mcp.server --http

Requires a DataForSEO account for the underlying SERP/AI-answer data.

Star it

Useful? A star on GitHub helps others find it. Already starred? Tell us what brought you here: support@vantagemcp.dev.

License

MIT

Available Tools

9 tools
analyze_citation_gapCompare your page with the cited answerA
Read-onlyIdempotent
Inspect

Compare your own page's structure against the AI-generated answer actually cited for this keyword, and return a fix brief: ordered rewrite instructions for your page, not just a description of the winner. Use this to answer 'what should I change on this page to get cited' rather than only 'what does a winning answer look like'. Carry out the fix_brief on the user's page in their own words; it never contains the cited answer's text.

Read-only: no side effects, safe to retry. Costs 1 quota unit/call (free tier is 30 units/month shared across every metered tool, so up to 30 calls to this tool alone if nothing else is used that period).

Returns: {"keyword", "your_url", "winning" (structure of the AI-cited answer, same shape as analyze_citation_structure), "yours" (same structure computed for your_url, including its own "outline" and "has_table", with "num_links_out"/"linked_domains" standing in for source count), "gaps" (list of plain-English differences worth acting on), "possibly_missing" (heads from the winning outline whose key words mostly do not appear on your page; word matching, so check each before adding it), "fix_brief" (list of instructions, most important first: opening, number, list, sections, missing points, table, sources, then a reminder to write in your own words - or a "no structural change indicated" line when every check already matches - and always last, one off-site step drawn from the winning answer's source_mix: which community sites (Reddit, YouTube, X...) it cites, or which other sites to get mentioned on. Page shape gets a page into the running; being cited is decided mostly by what other sites say about the brand)}, or {"error"} if either side couldn't be fetched/parsed.

Use analyze_citation_structure instead if you just want the winning answer's shape, not a comparison against your own page. Use check_prompt_coverage first if you have several keywords and do not yet know which ones you are missing from - this tool is for one keyword you already know needs work.

Args: keyword: the topic/query to check, e.g. "best project management tool". your_url: full URL of your own page to compare, e.g. "https://example.com/best-project-management-tools". country: market to read the cited answer in, e.g. "Italy". Defaults to "United States". language: language code, e.g. "it". Defaults to "en". engine: "chat_gpt" (default), "gemini" or "perplexity": whose answer to compare your page against.

ParametersJSON Schema
NameRequiredDescriptionDefault
engineNochat_gpt
countryNoUnited States
keywordYes
languageNoen
your_urlYes

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses cost (1 quota unit/call, 30/month shared free tier), confirms retry safety and no side effects, and adds a critical behavioral constraint that the fix_brief never contains the cited answer's text and must be rewritten in the user's own words. It also enumerates the return payload and the error case, which no structured field provides.

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 and cost are front-loaded, and the dense returns block earns its space given there is no output schema. It is longer than ideal and the fix_brief field enumeration could be tightened, but almost every clause 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?

For a tool with no output schema and 0% parameter coverage, the description supplies both: it documents the full return shape (winning, yours, gaps, possibly_missing, fix_brief) and the error variant, and explains the fix_brief ordering. 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.

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so: it defines each of the 5 params with examples and defaults, and supplies the engine's value set ('chat_gpt', 'gemini', 'perplexity') plus country/language examples that the schema lacks entirely.

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: comparing the user's own page structure against the AI-cited answer for a keyword and returning an actionable fix brief. It explicitly differentiates from the sibling analyze_citation_structure ('Use analyze_citation_structure instead if you just want the winning answer's shape'), so an agent can route 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 explicit when-to-use framing ('what should I change on this page to get cited'), names two alternatives with their selecting conditions (analyze_citation_structure for the winner's shape; check_prompt_coverage first when several keywords and the missing ones are unknown). 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.

analyze_citation_structureAnalyze a winning AI answerA
Read-onlyIdempotent
Inspect

Analyze the structural shape of the AI-generated answer actually cited for a keyword: does it lead with a list, how long is the opening passage, how many sources does it cite and from which domains. Use this to understand what a winning AI-search answer looks like for a topic, e.g. before writing content meant to get cited.

Read-only: no side effects, safe to retry. Costs 1 quota unit per sample (1 by default; free tier is 30 units/month shared across every metered tool, so up to 30 single-sample calls to this tool alone if nothing else is used that period).

Returns: {"keyword", "engine", "model" (the answering model's version, as the provider reports it), "checked_at" (when the answer was fetched, UTC), "leads_with_list" (bool), "opening_word_count" (int), "opening_has_number" (bool), "outline" (list of up to 12 section heads, in order: the answer's headings, or its top-level list items when it has fewer than two headings; heads only, never the text under them), "has_table" (bool), "num_sources_cited" (int), "source_domains" (list of up to 10 domain strings), "source_mix" ({"community_pct" (share of those sources that are community sites such as Reddit, YouTube, X, Quora), "community_domains", "other_domains"}), "country", "language"}. With samples above 1 the shape fields describe the first answer, plus "samples_ok" (answers that came back) and "source_frequency" (list of {"domain", "runs"}: how many of the answers cited each domain, most often first). Answers change from run to run, so a domain cited in every sample is a far stronger signal than one sample.

Use analyze_citation_structure_batch instead if you need this for more than one keyword - one call per topic here adds up fast for a cluster. Use analyze_citation_gap instead if you have your own page for this keyword and want the gap to the winner, not just the winner's shape.

Args: keyword: the topic/query to analyze, e.g. "how to reduce churn". country: market to read the answer in, e.g. "Italy". Defaults to "United States". For perplexity a 2-letter code also works. language: language code, e.g. "it". Defaults to "en". Write the keyword in that language too. engine: "chat_gpt" (default), "gemini" or "perplexity". chat_gpt and gemini are the answers a person sees in those apps; perplexity is Perplexity's sonar API with web search. samples: how many independent answers to read, 1 to 5. Default 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
engineNochat_gpt
countryNoUnited States
keywordYes
samplesNo
languageNoen

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the metering model: 1 quota unit per sample, 30 units/month shared across all metered tools, and how that caps single-sample calls. It also warns that answers change run to run, so cross-sample domain frequency is a stronger signal than a single run — real 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?

Purpose and routing are front-loaded, and since there is no output schema the returns block is justified. It is nevertheless long and dense, with the quota explanation and the returns enumeration both sizeable for a 5-parameter read tool.

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 present, the description documents the entire return shape (including conditional fields only present when samples > 1), plus cost, defaults, and the run-to-run variance caveat. Nothing an agent needs in order to call this correctly is missing.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does: it explains engine values with their real semantics (chat_gpt/gemini are in-app answers; perplexity is the sonar API with web search), gives examples for country and language, warns to write the keyword in the target language, and bounds samples at 1–5.

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 ('analyze the structural shape of the AI-generated answer actually cited for a keyword') and enumerates the exact dimensions measured (list-leading, opening length, source count/domains). It is clearly distinguishable from siblings like analyze_citation_gap and analyze_citation_structure_batch, 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: use the batch variant for more than one keyword, and analyze_citation_gap when you already have your own page and want the gap rather than the winner's shape. It also gives a concrete use case ('before writing content meant to get cited').

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

analyze_citation_structure_batchAnalyze winning AI answers in bulkA
Read-onlyIdempotent
Inspect

Analyze the structural shape of the winning AI answer across several related keywords/topics in one call: does each lead with a list, how long is the opening, how many sources it cites. Use this for content planning across a topic cluster, e.g. before writing several related pieces meant to get cited, instead of calling analyze_citation_structure once per topic.

Read-only: no side effects, safe to retry. Costs 1 quota unit per keyword in the batch (free tier is 30 units/month shared across all the metered tools, so up to 30 keywords total that period if nothing else is used). A per-keyword provider error doesn't fail the whole batch - that keyword's entry just carries an "error" field instead.

Returns: {"results" (list, one {"keyword", ...same shape as analyze_citation_structure, or "error"} per keyword, in the order given), "summary": {"topics_analyzed", "topics_requested", "list_led_count", "avg_sources_cited", "avg_community_pct" (average source_mix.community_pct across the analyzed topics)}}.

Args: keywords: topics/queries to analyze, e.g. ["how to reduce churn", "churn rate benchmarks", "reduce customer churn saas"]. Max 10. country: market to read the answers in, e.g. "Italy". Defaults to "United States". language: language code, e.g. "it". Defaults to "en". engine: "chat_gpt" (default), "gemini" or "perplexity", as in analyze_citation_structure. One answer per topic.

ParametersJSON Schema
NameRequiredDescriptionDefault
engineNochat_gpt
countryNoUnited States
keywordsYes
languageNoen

TDQS

A4.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description still adds real value beyond them: the quota cost (1 unit per keyword, 30/month shared across metered tools) and the partial-failure contract (a per-keyword provider error does not fail the whole batch). Those are meaningful operational disclosures not present 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?

Well front-loaded: purpose and when-to-use come first, then safety/cost/failure semantics, then the return shape, then args. Slightly long, but nearly every sentence earns its place given the 0% schema coverage and absent 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?

For a 4-param batch tool with no output schema, the description supplies the return shape (results list with per-keyword error entries plus a summary object with named fields), the quota model, and the partial-failure semantics. Nothing an agent needs in order to call or interpret it correctly is missing.

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

Parameters5/5

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

Schema coverage is 0%, so the description carries the full burden and does so: keywords are documented with concrete examples and a hard max of 10, country and language are given with defaults, and engine enumerates the valid values ('chat_gpt' default, 'gemini', 'perplexity') plus the one-answer-per-topic behavior. This fully compensates for 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?

States a specific verb (analyze) and resource (structural shape of the winning AI answer) at batch scope, and explicitly contrasts itself with the single-topic sibling analyze_citation_structure. An agent can distinguish it from siblings like analyze_citation_gap or find_citation_leaders 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 an explicit when (content planning across a topic cluster, e.g. before writing several related pieces meant to get cited) and an explicit alternative with its selection rule ('instead of calling analyze_citation_structure once per topic'). 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.

analyze_citation_trendTrack a site's AI citations over timeA
Read-onlyIdempotent
Inspect

Track how a domain's AI-citation count has moved month over month, so you can see whether visibility is growing or fading instead of only ever checking a single point in time. Use this to answer 'is our AI visibility improving' or 'did that content push actually move the needle'.

Read-only: no side effects, safe to retry. Costs 1 quota unit/call (free tier is 30 units/month shared across every metered tool, so up to 30 calls to this tool alone if nothing else is used that period).

Returns: {"domain", "platform", "months" (list of {"year", "month", "mentions" (int, 0 for a month with no tracked citations. A zero between two large months can be a gap in the provider's history rather than a real drop, so read isolated zeros with care), "ai_search_volume"}, oldest to newest), "trend": {"direction" ("up"/"down"/"flat"/"no_data"), "earliest_mentions", "latest_mentions", "excluded_current_partial_month" (bool, only present and true when the most recent calendar month was excluded from the trend calculation because it is still in progress and its count is not yet final - it is still returned inside months, just not compared)}}.

The most recent entry in months (or trend.latest_mentions when the current month is not excluded) already IS the current count, so there is no need for a separate call just to see it right now.

Args: domain: bare domain to check, e.g. "example.com" (no https://, no www). platform: "chat_gpt" or "google" (Google's AI Overview). Defaults to chat_gpt. Perplexity and Gemini aren't available - the underlying data provider doesn't cover them for this check. months: how many recent months of history to return. Defaults to 6, capped at 13 - DataForSEO's historical data only goes back to 2025-08-01. country: market to check, e.g. "Italy". Defaults to "United States". chat_gpt only has data for the United States; use platform "google" for any other country. language: language code, e.g. "it". Defaults to "en" (the only option for chat_gpt).

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes
monthsNo
countryNoUnited States
languageNoen
platformNochat_gpt

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, and the description adds substantially beyond that: cost (1 quota unit per call, 30 units/month shared across all metered tools), the zero-in-history caveat, and the partial-current-month exclusion behavior. This is exactly the kind of behavioral 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-loaded with purpose, then cost, then return shape, then args — a sensible ordering. The return-shape block is long, but it is justified because no output schema exists; the only minor drag is some repetition around the partial-month/latest-month explanation.

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 the description carries the full return contract and does so, including the trend object's possible values and the presence-condition on excluded_current_partial_month. Combined with quota, platform limits, and history depth, an agent has everything needed to call and interpret this correctly.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates: it documents all five parameters with formats ('example.com', no https:// or www), defaults, the 13-month cap with the reason (provider history starts 2025-08-01), and hard platform constraints (chat_gpt is US-only and en-only; use 'google' for other countries).

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: tracking a domain's AI-citation count month over month. It explicitly contrasts itself with point-in-time checking ('instead of only ever checking a single point in time'), which cleanly separates it from siblings like analyze_citation_gap or find_citation_leaders.

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 trigger questions ('is our AI visibility improving', 'did that content push actually move the needle') and a negative guideline: don't make a separate call just to read the current count, since the latest entry already is it. Context for when this beats a single-point check is explicit.

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

check_prompt_coverageCheck if AI cites your siteA
Read-onlyIdempotent
Inspect

Check which of several prompts/keywords actually cite a specific domain, and which ones don't. This is usually the first real question in an AI-answer-engine audit - not "what does a winning answer look like" (analyze_citation_structure) or "who wins this one topic" (find_citation_leaders), but "out of everything we care about, where do we already show up, and where are we invisible." Use this first, then use analyze_citation_gap on whichever keywords come back not cited to see what to actually change.

Read-only for the caller, safe to retry. Costs 1 quota unit per keyword per sample (1 sample by default; free tier is 30 units/month shared across every metered tool, so up to 30 keyword checks that period if nothing else is used). A per-keyword provider error doesn't fail the whole call - that keyword's entry just carries an "error" field instead. On the hosted endpoint each keyword's result is remembered for 180 days against your API key, so the next check of the same domain and keyword reports what changed (see "previous" and "change"); get_check_history reads that record back for free.

Returns: {"domain", "engine", "samples", "keywords_checked" (int, excludes any that errored), "keywords_cited" (int), "coverage_pct" (float, 0-100), "not_cited" (list of the keyword strings where domain was not cited - the actionable list), "newly_cited" and "no_longer_cited" (keywords whose status flipped since your last check of them), "results" (one entry per keyword, in the order given: {"keyword", "cited" (bool: cited in at least half of the samples), "cited_runs" (how many sampled answers cited it), "samples_ok" (how many answers came back), "rank" (int|null, best 1-based position among the answers' sources, null when never cited), "num_sources_cited", "source_domains" (who IS cited, for a keyword you are not in), "source_mix" (how much of that is community sites such as Reddit, YouTube, X - where to get discussed to close the gap), "source_frequency" (only with samples above 1: {"domain", "runs"} per domain), "leads_with_list", "opening_word_count", "mentioned" (bool - the answer's text names the domain or brand in at least half of the samples, whether or not it links to it), "model", "checked_at", "previous" ({"checked_at", "cited_runs", "samples", "best_rank"} from your last check of this domain and keyword on the same engine and market, or null), "change" ("first_check", "up", "down" or "same", comparing citation rates)}, or {"keyword", "error"} for one that failed), "keywords_mentioned" (int), "mentioned_not_cited" (keywords where the answer names you but does not cite you - the model already knows you, it just isn't linking you), "mention_terms" (exactly what was looked for in the answer text)}. "Cited" and "mentioned" are separate claims and are never merged. Answers change from run to run: with samples=1 a single answer decides "cited", so use samples=3 before telling someone they are or are not cited.

Args: domain: bare domain to check, e.g. "example.com" (no https://, no www). keywords: prompts/topics to check it against, e.g. ["best project management software", "asana alternatives", "free project management tool"]. Max 10. brand: optional brand name to look for in the answer text, e.g. "Notion". Without it, the domain's first label is used ("notion" for notion.so), which can match an ordinary word by accident for a dictionary-word domain, so pass the real brand when known. country: market to read the answers in, e.g. "Italy". Defaults to "United States". language: language code, e.g. "it". Defaults to "en". Write the keywords in that language too. engine: "chat_gpt" (default), "gemini" or "perplexity", as in analyze_citation_structure. samples: independent answers to read per keyword, 1 to 5. Default 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNo
domainYes
engineNochat_gpt
countryNoUnited States
samplesNo
keywordsYes
languageNoen

TDQS

A4.9/5.0
Behavior5/5

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

Goes far beyond the annotations: states quota cost per keyword per sample with the free-tier budget (30 units/month), how per-keyword provider errors are isolated rather than failing the call, the 180-day server-side retention window and how get_check_history reads it back for free, and the critical caveat that samples=1 lets a single answer decide 'cited' so samples=3 is needed before telling someone they are or are not cited. Annotations only declare readOnly/idempotent, so this description carries and exceeds the full behavioral burden.

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 core answer and the routing decision before the cost/behavioral detail, and each paragraph covers a distinct concern. It is long, but the length is earned by a 7-parameter, no-output-schema, no-schema-description tool. Slight density cost from the inline edge-case parentheticals.

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 the description documents the full return shape (coverage_pct, not_cited, newly_cited/no_longer_cited, per-keyword fields including mentioned vs cited, previous/change, error entries) and even explains the cited/mentioned distinction that a caller could easily conflate. Complete for the tool's complexity.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate, and it does for every parameter: domain format ('bare domain... no https://, no www'), keywords with examples and the max-10 limit, brand with the first-label fallback hazard for dictionary-word domains, country/language defaults plus the instruction to write keywords in that language, engine values, and samples range 1-5 with the reliability caveat. No parameter is left undocumented.

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 (check which prompts/keywords cite a domain) and explicitly distinguishes itself from three siblings: analyze_citation_structure ('what does a winning answer look like'), find_citation_leaders ('who wins this one topic'), and analyze_citation_gap (the follow-up for not-cited keywords). An agent can tell exactly what this tool answers 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?

Explicit when-to-use ('use this first'), explicit sequencing ('then use analyze_citation_gap on whichever keywords come back not cited'), and explicit exclusions naming sibling alternatives. 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.

find_citation_leadersFind who AI cites for a questionA
Read-onlyIdempotent
Inspect

Find which domains dominate AI-answer citations for a topic/keyword, and optionally check whether a specific domain shows up among them. Use this to answer 'who's winning AI search for this topic' or 'is my competitor cited more than me for X'.

Read-only: no side effects, safe to retry. Costs 10 quota units/call (free tier is 30 units/month shared across every metered tool, so up to 3 calls to this tool alone if nothing else is used that period).

Returns: {"keyword", "platform", "top_domains" (list of {"domain", "mentions"}, most-cited domains for this keyword/platform, order as ranked by the provider), "top_domains_limit" (int, the provider's own cap on this list - absence from it is NOT evidence a domain has zero citations, only that it did not rank in the top top_domains_limit), "compare_domain_rank" (int|null, only present when compare_domain was passed: the domain's 1-based position in top_domains, or null if it did not rank in the top top_domains_limit), "country", "language", "source_mix" ({"community_pct" (share of these mentions that go to community sites such as Reddit, YouTube, X, Quora), "community_domains", "other_domains"}: a high community_pct means this topic is won by what people say about a brand elsewhere, not by any one site's pages)}.

This tool's citation universe is the provider's tracked mention corpus for the keyword, which is a different measurement from analyze_citation_structure's single live answer - the two can legitimately disagree on whether a given domain shows up.

Use check_prompt_coverage instead if you already know which domain you care about and just want to know whether it is cited.

Args: keyword: the topic/query to check, e.g. "best project management tool". platform: "chat_gpt" or "google" (Google's AI Overview). Defaults to chat_gpt. Perplexity and Gemini aren't available - the underlying data provider doesn't cover them for this check. compare_domain: optional bare domain to look up in the results (exact match against the registrable domain, e.g. "notion.so" will not match "mynotion.so.example.com"). country: market to check, e.g. "Italy". Defaults to "United States". chat_gpt only has data for the United States; use platform "google" for any other country. language: language code, e.g. "it". Defaults to "en" (the only option for chat_gpt).

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoUnited States
keywordYes
languageNoen
platformNochat_gpt
compare_domainNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/destructive, so the description earns credit for adding quota economics (10 units/call, 30/month shared, max ~3 calls), provider coverage gaps, and the crucial caveat that absence from top_domains is not evidence of zero citations. It also explains that its measurement universe can legitimately disagree with analyze_citation_structure.

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 cost, then returns, then args – a sensible order. It is long (roughly 300 words) and the 'Read-only: no side effects' clause partly repeats the annotations, but nearly every other sentence adds non-redundant, decision-relevant detail.

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 fully documents the return shape (top_domains, compare_domain_rank, source_mix, etc.) and the interpretation caveats an agent needs. For a 5-param, no-schema tool it is complete.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does: keyword meaning plus example, platform enum values with default and what's excluded, compare_domain with exact-match/registrable-domain semantics and a worked example, country default and chat_gpt limitation, and language default with 'it' example.

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 (find) and resource (domains dominating AI-answer citations for a keyword), plus the exact user questions it answers ('who's winning AI search for this topic'). It explicitly distinguishes itself from analyze_citation_structure (single live answer vs. tracked mention corpus) and check_prompt_coverage, so an agent can route 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 direct routing rules: use check_prompt_coverage 'instead if you already know which domain you care about,' and use the compare_domain arg when you want a specific domain's rank. It also states platform availability limits (Perplexity/Gemini unavailable) and country/language constraints (chat_gpt is US/English only), which are genuine when-to-use conditions.

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

find_cited_questionsFind questions AI cites your site forA
Read-onlyIdempotent
Inspect

Find the questions people ask AI answer engines where a domain is already cited as a source, most-asked first. Starts from the domain, so nobody has to guess keywords first. Use this to answer 'what does ChatGPT already cite us for' or to pick the keywords to feed check_prompt_coverage and analyze_citation_gap.

Read-only: no side effects, safe to retry. Costs 10 quota units/call (free tier is 30 units/month shared across every metered tool, so up to 3 calls to this tool alone if nothing else is used that period).

Returns: {"domain", "platform", "country", "language", "total_questions" (int, every tracked question citing the domain, which can exceed the list), "questions" (up to limit, most-asked first: {"question", "ai_search_volume" (monthly asks as the provider estimates them), "your_position" (1-based position of the domain among that answer's sources), "source_domains" (who else that answer cites), "last_seen" (when the provider last recorded this answer, UTC)})}. An empty list means the provider's tracked answers do not cite the domain, not that no answer anywhere does.

This reads the provider's tracked answer corpus, the same measurement as find_citation_leaders, not a live answer: re-check a question with check_prompt_coverage to see today's answer.

Args: domain: bare domain, e.g. "example.com" (no https://, no www). Subdomains are included. platform: "chat_gpt" (default) or "google" (Google's AI Overview). limit: how many questions to return, 1 to 20. Default 20. country: market, e.g. "Italy". Defaults to "United States". chat_gpt only has United States data; use platform "google" elsewhere. language: language code, e.g. "it". Defaults to "en", the only option for chat_gpt.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
domainYes
countryNoUnited States
languageNoen
platformNochat_gpt

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 context annotations cannot carry: quota cost (10 units/call, 30 unit free tier shared across metered tools) and the important semantic caveat that an empty list means the provider's tracked corpus lacks the domain, not that no answer anywhere cites it.

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, cost, return shape, and parameter notes are ordered logically and mostly front-loaded. The inline return-value block is long but earns its place given there is no output schema; a couple of parenthetical explanations 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?

With no output schema, the description fully specifies the return object, field meanings, truncation behavior (total_questions can exceed the returned list), and the key limitation of the data source. Nothing needed to call or interpret the tool is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so: bare domain format with subdomains included, platform values with default, limit range (1-20, default 20), country default plus the chat_gpt-only-United-States constraint, and language default plus the en-only constraint for chat_gpt.

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 with scope: 'Find the questions people ask AI answer engines where a domain is already cited as a source, most-asked first.' It also differentiates itself from siblings by naming find_citation_leaders (same measurement corpus) and check_prompt_coverage/analyze_citation_gap as downstream consumers.

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 gives the use case ('what does ChatGPT already cite us for') and the follow-on workflow ('pick the keywords to feed check_prompt_coverage and analyze_citation_gap'). It also states when to re-verify with check_prompt_coverage instead of trusting this corpus snapshot.

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

get_check_historyShow your past citation checksA
Read-onlyIdempotent
Inspect

Read back your own earlier check_prompt_coverage results for a domain, newest first, to show progress over time or to confirm whether a change (a rewrite, a new mention somewhere) moved anything. Use this for 'has our citation status changed since last week' without spending units.

Costs 0 quota units: it only reads Vantage's own record of your checks, never the data provider. Results are kept 180 days per API key and are only visible to that key.

Returns: {"domain", "keyword" (or null for every keyword), "checks" (newest first: {"keyword", "engine", "country", "language", "samples", "cited_runs", "best_rank", "mentioned_runs", "checked_at"})}.

Args: domain: the bare domain the checks were run for, e.g. "example.com". keyword: optional, only this keyword's history. limit: how many rows to return, 1 to 200. Default 50.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
domainYes
keywordNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly/idempotent/non-destructive), but the description adds material behavior the agent could not infer: zero quota cost, reads Vantage's own record rather than the data provider, and 180-day per-API-key retention with key-scoped visibility.

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 purpose sentence, then cost, then return shape, then args -- a logical order with little waste. The nested Returns block is dense, though it is justified since no output schema exists.

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 present, the description compensates by spelling out the return fields, and it fully documents all three parameters plus retention and cost behavior. 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.

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so: domain is defined as the bare domain with an example, keyword is scoped to a single keyword's history, and limit is bounded 1-200 with a default of 50.

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 ('read back your own earlier check_prompt_coverage results for a domain, newest first') and explicitly frames it as distinct from the sibling check_prompt_coverage, which runs new checks. An agent can select this 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?

Names the selecting condition ('show progress over time', 'has our citation status changed since last week') and contrasts with the unit-spending alternative, making the when-to-use decision unambiguous. No exclusions are left to inference.

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

get_usageCheck remaining monthly unitsA
Read-onlyIdempotent
Inspect

Check how much of this billing period's quota is left, before spending any of it. Use this to answer 'how many checks do I have left' or to decide whether a batch call will fit before running it.

Costs 0 quota units - this never touches the paid data provider, it only reads Vantage's own record of what has been used.

Returns: {"tier", "period" (YYYY-MM), "units_used", "units_limit", "units_remaining"}. find_citation_leaders and find_cited_questions cost 10 units/call; analyze_citation_trend, analyze_citation_structure (and its batch form, per keyword), check_prompt_coverage (per keyword) and analyze_citation_gap cost 1, times samples where a tool takes it. get_check_history costs 0.

stdio/local-dev mode (no HTTP access token) has no metering at all - this returns tier "unmetered" with no real limit in that case.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare read-only/idempotent/non-destructive; the description adds substantial context beyond them: it costs 0 quota units, never touches the paid data provider, reads Vantage's own usage record, and degrades to tier 'unmetered' in stdio/local-dev mode with no HTTP token. This is exactly the operational context an agent needs and could not derive 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.

Conciseness5/5

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

Purpose and the zero-cost caveat are front-loaded, followed by the return shape and the sibling cost table. Although long, every sentence serves the agent's decision (whether to spend quota, what comes back), so nothing is 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?

No output schema exists, but the description supplies the full return shape ({tier, period, units_used, units_limit, units_remaining}), the quota-cost table for every sibling, and the stdio-mode edge case. An agent has everything required to call and interpret it.

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 and there is no schema semantics to elaborate. The description instead documents the return shape, which is useful but not a parameter concern.

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 ('Check how much of this billing period's quota is left') and frames the scope precisely. It clearly distinguishes itself from siblings by naming them and their costs, so an agent knows this is the free quota-inspection tool, not a data-consuming analysis tool.

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 ('before spending any of it', to answer 'how many checks do I have left', to check whether a batch call will fit) and reinforces the decision with per-sibling cost figures. No inference about when to prefer this tool is left to the agent.

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. 6 tool updatesv1.8.0
    • Changedanalyze_citation_gap1 field changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "default": "chat_gpt",
        +  "title": "Engine",
        +  "type": "string"
        +}
    • Changedanalyze_citation_structure2 fields changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "default": "chat_gpt",
        +  "title": "Engine",
        +  "type": "string"
        +}
      • addedInput schema / properties / samples
        Added value: +{
        +  "default": 1,
        +  "title": "Samples",
        +  "type": "integer"
        +}
    • Changedanalyze_citation_structure_batch1 field changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "default": "chat_gpt",
        +  "title": "Engine",
        +  "type": "string"
        +}
    • Changedcheck_prompt_coverage2 fields changed
      • addedInput schema / properties / engine
        Added value: +{
        +  "default": "chat_gpt",
        +  "title": "Engine",
        +  "type": "string"
        +}
      • addedInput schema / properties / samples
        Added value: +{
        +  "default": 1,
        +  "title": "Samples",
        +  "type": "integer"
        +}
    • Addedfind_cited_questions
    • Addedget_check_history
  2. 6 tool updatesv1.7.0
    • Changedanalyze_citation_gap2 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "default": "United States",
        +  "title": "Country",
        +  "type": "string"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "en",
        +  "title": "Language",
        +  "type": "string"
        +}
    • Changedanalyze_citation_structure2 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "default": "United States",
        +  "title": "Country",
        +  "type": "string"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "en",
        +  "title": "Language",
        +  "type": "string"
        +}
    • Changedanalyze_citation_structure_batch2 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "default": "United States",
        +  "title": "Country",
        +  "type": "string"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "en",
        +  "title": "Language",
        +  "type": "string"
        +}
    • Changedanalyze_citation_trend2 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "default": "United States",
        +  "title": "Country",
        +  "type": "string"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "en",
        +  "title": "Language",
        +  "type": "string"
        +}
    • Changedcheck_prompt_coverage2 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "default": "United States",
        +  "title": "Country",
        +  "type": "string"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "en",
        +  "title": "Language",
        +  "type": "string"
        +}
    • Changedfind_citation_leaders2 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "default": "United States",
        +  "title": "Country",
        +  "type": "string"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "en",
        +  "title": "Language",
        +  "type": "string"
        +}
  3. 3 tool updatesv1.6.0
    • Removedcheck_ai_visibility
    • Addedcheck_prompt_coverage
    • Addedget_usage
  4. 3 tool updatesv1.5.2
    • Addedanalyze_citation_gap
    • Removedcitation_leaders
    • Addedfind_citation_leaders
  5. 5 tool updatesv1.3.0
    • Addedanalyze_citation_structure
    • Addedanalyze_citation_structure_batch
    • Addedanalyze_citation_trend
    • Removedcitation_structure
    • Removedcitation_structure_batch
  6. 4 tool updatesv1.1.2
    • First observedcheck_ai_visibility
    • First observedcitation_leaders
    • First observedcitation_structure
    • First observedcitation_structure_batch

TDQS

A4.7/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, and the descriptions explicitly cross-reference related tools to guide selection. Overlaps such as find_citation_leaders vs. find_cited_questions and analyze_citation_structure vs. analyze_citation_gap are well differentiated by starting point and output.

Naming Consistency5/5

All tool names use consistent snake_case with a predictable verb_noun or verb_noun_qualifier pattern, e.g. find_citation_leaders, analyze_citation_structure, check_prompt_coverage. The batch variant is clearly named as a suffix, which maintains readability and consistency.

Tool Count5/5

Nine tools is well scoped for an AI citation analytics server, with separate tools for discovery, auditing, diagnosis, tracking, and usage. No tool feels redundant or trivial, and the batch forms are justified by cost/scale concerns.

Completeness4/5

The surface covers the core lifecycle: quota checks, leaderboard discovery, cited-question discovery, domain trend tracking, prompt coverage auditing, answer-structure analysis, gap analysis, and history. Minor gaps remain, such as no batch form for analyze_citation_gap or analyze_citation_trend, but agents can work around these one keyword at a time.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Audit your brand's visibility across ChatGPT, Perplexity, Claude, and Google AI - get citation rates, AEO health scores, content gap analysis, and a 9-page content suite to rank in AI-generated answers.
    5
    70 npm
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI agents to check brand mentions across AI search surfaces like ChatGPT, Claude, Gemini, Perplexity, and Google AI Overviews using natural language queries.
    4
    3 npm
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to monitor and analyze a brand's visibility across ChatGPT, Claude, Perplexity, and Google AI Overviews, providing insights, recommendations, and competitive analysis without switching tabs.
    25
    19 npm
    1
    MIT