Vantage
dev.vantagemcp/vantageVersion 1.14.0Checks whether ChatGPT, Gemini and Perplexity cite your site, and who they cite instead.
Status
Responds82 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:28 UTC
- Latency
- 82 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- EU hosting detected (detected, not a legal statement)
- Registry data as of
- Nov 14, 2026, 21:12 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://vantagemcp.dev/mcpResponds82 msNo sign-in
Claude Code
claude mcp add --transport http vantage https://vantagemcp.dev/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: vantage
Remote MCP server URL: https://vantagemcp.dev/mcpCursor
{
"mcpServers": {
"vantage": {
"url": "https://vantagemcp.dev/mcp"
}
}
}VS Code
code --add-mcp '{"name":"vantage","type":"http","url":"https://vantagemcp.dev/mcp"}'Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
11 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
analyze_citation_coverageCheck 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" (bo | No | Yes | Yes | Yes |
analyze_citation_gapCompare your own page's structure against the AI-generated answer
actually cited for this keyword, and return a fix brief: the differences
between the two, each with the change worth testing, not just a
description of the winner. Use this to answer 'how does my page differ
from what AI cites for this, and what could I try'. The brief lists
things to test, not proven causes of citation. It never contains the
cited answer's text.
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). A sample that fails is not charged.
Returns: {"keyword", "your_url", "already_cited" (bool: your page's site
is among the answer's sources, in at least half of them with samples
above 1; when true, fix_brief is one line saying so instead of changes),
"basis" (one sentence: how many answers, which engine and market, and
that the brief lists things to test), "samples_ok" and
"cited_in_answers" (only with samples above 1), "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, most important first, each line what was
observed then what is worth testing: opening, number, list, sections,
missing points, table, 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 option drawn from the winning answer's
source_mix: which community sites (Reddit, YouTube, X...) it cites, or
which other sites to get men | No | Yes | Yes | Yes |
analyze_citation_structureAnalyze 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 on it.
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" (the answer's opening paragraph, as
text), "opening_word_count" (int), "opening_has_number" (bool),
"detail_preview" (up to 240 characters of what follows the opening,
cut at a word), "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_urls" (the
exact cited page URLs, up to 30, so you can see which page of a domain was
cited), "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.
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 | No | Yes | Yes | Yes |
analyze_citation_structure_batchAnalyze 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. It covers a topic
cluster in one call, for content planning across related pieces.
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.
| No | Yes | Yes | Yes |
analyze_citation_trendTrack 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'. Pass compare_domains to put competitors' trends next to it.
Read-only: no side effects, safe to retry. Costs 10 quota units per
domain (the main domain plus each one in compare_domains; free tier is 30
units/month shared across every metered tool, so up to 3 single-domain
calls to this tool alone if nothing else is used that period). A domain
the provider fails on is not charged.
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.
With compare_domains the result also carries "comparisons" (one
{"domain", "months", "trend"} per extra domain, same shape and month
window as above, in the order given, or {"domain", "error"} for one the
provider failed on - that one is refunded and the rest still return).
Args:
domain: bare domain to check, e.g. "example.com" (no https://, no www).
compare_domains: optional list of up to 5 more bare domains to track
over the same months, e.g. ["asana.com", | No | Yes | Yes | Yes |
check_page_readinessCheck whether one page has what AI answers look for before they cite
it, for the question it should answer, and say exactly what to change,
before or after a page is edited. It reads the HTML a crawler gets, so
it also catches content that only appears with JavaScript.
Checks: the <title> asks the question and fits (60 characters); one
<h1> matching it; the first paragraph after the heading is the answer
itself (12 to 45 words, a sentence, with a number or date); a visible
"Updated" date that matches the JSON-LD dateModified and is under 90
days old; at least 300 words without JavaScript; valid structured data,
and FAQ markup only for questions shown on the page; canonical and
noindex; robots.txt letting OAI-SearchBot, PerplexityBot,
Claude-SearchBot and Googlebot reach the page.
Costs 0 quota units: it fetches the page and its robots.txt itself and
never calls the data provider. Read-only, safe to retry. Passing makes
a page easier to cite, it does not cause a citation: whether the
question is one your site can own matters more, which only
analyze_citation_coverage measures.
Returns: {"url" (after redirects), "question", "passed", "failed",
"fixes" (what to change, one line per failed check, in page order),
"checks" (each {"rule", "ok", "observed", "fix"}), "basis" (one
sentence on where the checks come from)}, or {"url", "error"} when the
page cannot be fetched (not public, not HTML, an HTTP error).
Args:
url: full address of the page, e.g. "https://example.com/pricing".
question: what the page should answer, in the words people search
with, e.g. "how much does example cost".
| No | Yes | Yes | Yes |
find_citation_leadersFind which domains dominate AI-answer citations for a topic/keyword,
and optionally check where one domain, or several competitors at once,
show 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'. Comparing several
domains costs the same single call.
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`), "compare_domain_ranks"
(only present when compare_domains was passed: {domain: rank or null},
same rank rule as compare_domain_rank), "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.
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 | No | Yes | Yes | Yes |
find_cited_questionsFind 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
analyze_citation_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
analyze_citation_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.
| No | Yes | Yes | Yes |
get_check_historyRead back your own earlier analyze_citation_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.
Pass `page` to follow ONE page's citations over time instead of the whole
domain's.
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), "page" (the
URL asked about, or null), "checks" (newest first: {"keyword", "engine",
"country", "language", "samples", "cited_runs", "best_rank",
"mentioned_runs", "checked_at", "cited_pages" (your page URLs cited in
that check, or null for a check saved before page tracking), and with
`page` set, "page_cited" (true/false, or null when that check did not
record pages))}, and with `page` set also "times_cited" (checks that
cited that page) and "checks_with_page_data".
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.
page: optional full URL of one page on the domain, e.g.
"https://example.com/pricing". Matched ignoring "www.", the
scheme, a trailing slash and any #fragment.
| No | Yes | Yes | Yes |
get_supported_optionsList which AI engines, platforms and markets each Vantage tool
accepts, and the per-call limits, so you can pick valid arguments before
spending any quota. Use this to answer 'does Vantage cover Gemini in
Italy' or 'what can I pass as engine or platform'.
Costs 0 quota units - a fixed list, it never touches the data provider.
Returns: {"live_answer": {"tools" (analyze_citation_coverage,
analyze_citation_structure, analyze_citation_structure_batch,
analyze_citation_gap), "engines" (the values for `engine`),
"country" (any country name the provider accepts; for perplexity one of
"perplexity_countries" or a 2-letter ISO code), "language" (language
code), "max_samples", "max_keywords_per_call"}, "tracked_data":
{"tools" (find_citation_leaders, analyze_citation_trend,
find_cited_questions), "platforms" (the values for `platform`),
"chat_gpt_market" (the only market ChatGPT has tracked data for),
"other_markets" (where to get the rest), "max_trend_months",
"max_compare_domains" ({"find_citation_leaders", "analyze_citation_trend"})},
"default_market" ({"country", "language"})}. A market the provider does
not cover comes back as a refunded error, never a charge.
| No | Yes | Yes | Yes |
get_usageCheck 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 10 per domain looked up;
analyze_citation_structure (and its batch form, per keyword),
analyze_citation_coverage (per keyword) and analyze_citation_gap cost 1,
times `samples` where a tool takes it. get_check_history,
check_page_readiness and get_supported_options cost 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.
| No | Yes | Yes | Yes |
Details
- Registry status
- Active
- Published
- Nov 14, 2026
- Updated
- Nov 14, 2026
- Categories
- Uncategorized
- GDPR
- Not declared