Skip to main content
Glama
vantagemcp

vantage-mcp

Check if AI cites your site

analyze_citation_coverage
Read-onlyIdempotent

Check which keywords make AI answers cite a domain and which do not, showing where your brand appears and where it is invisible.

Instructions

Check which of several prompts/keywords actually cite a specific domain, and which ones don't. It answers "out of everything we care about, where do we already show up, and where are we invisible"; its not_cited list is the set of keywords worth a closer look.

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), "cited_pages" (list of your own page URLs the answers cited, empty when none - saved with the check, so get_check_history can follow one page over time), "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 with the same number of samples, 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 one sample is weak evidence either way.

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.

Input Schema

NameRequiredDescriptionDefault
brandNo
domainYes
engineNochat_gpt
countryNoUnited States
samplesNo
keywordsYes
languageNoen

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.10.0

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, and the description adds substantial non-obvious context: quota cost per keyword per sample, the 30-unit free-tier budget, that a per-keyword provider error is isolated rather than failing the call, 180-day result caching keyed to the API key, and that single-sample results are weak evidence. It also clarifies that 'cited' and 'mentioned' are separate claims — behavior an agent would otherwise misread. Note that idempotentHint=true is not contradicted, since the variability discussed is in the read results, not in side effects.

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 and organized into purpose, cost/behavior, returns, and args. The returns block is very dense and long, but with no output schema that verbosity is largely earned. A few parenthetical asides could be trimmed without loss.

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 7-parameter, no-output-schema tool with 0% schema coverage, the description supplies everything needed: exhaustive return-field documentation, cost model, caching behavior, error semantics, and per-argument semantics. Nothing material is missing for correct invocation or interpretation.

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 parameter burden and does so thoroughly: domain format rules (bare, no https/www), keywords with examples and a max of 10, brand's default fallback to the domain's first label plus the rationale for overriding it, country/language defaults with the instruction to match keyword language, engine enum values, and samples range (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?

The opening sentence states a specific verb+resource+scope: which of several prompts/keywords cite a specific domain and which don't. It frames the question the tool answers and names the actionable output (not_cited). It is clearly distinguishable from siblings like analyze_citation_gap and analyze_citation_structure, which it references.

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 a clear frame for when to use it ('where do we already show up, and where are we invisible') and points to get_check_history for reading back cached history for free. However, it never explicitly contrasts this tool with siblings like analyze_citation_gap or analyze_citation_structure, so the routing decision is left largely to inference.

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