cited-mcp
Queries Google Gemini with Grounding with Google Search to answer buyer questions and report AI visibility signals such as naming, ranking, and citations.
Queries OpenAI's ChatGPT via the Responses API with the web_search tool to answer buyer questions and detect whether a business is named, ranked, or cited.
Queries Perplexity Sonar, which has built-in search, to answer buyer questions and report brand mentions, website citations, competitors, and source domains.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cited-mcpCheck if ChatGPT recommends Sunshine Dental for family dentist questions in Tampa, FL."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cited-mcp is an open-source Model Context Protocol server. Add it to Claude Desktop, Claude Code, Cursor or any MCP client, then ask something like:
Check whether AI engines recommend Sunshine Dental (sunshinedental.com) for family dentist questions in Tampa, FL.
For every question and engine it reports:
whether the business was named in the answer
its position if the answer was a list
whether its website was cited as a source
which competitors were named
the source domains the engine leaned on
an estimated cost for the call, from token usage at list prices
Tool
check_ai_visibility
Argument | Required | Notes |
| yes | e.g. |
| no | e.g. |
| no | 1 to 10 buyer questions. |
| if no questions | e.g. |
| no | e.g. |
| no | Any of |
Name matching ignores case and punctuation, treats & and and as the same, drops legal suffixes such as LLC, Inc and Co, and also counts a mention of your website domain. Website citation matches the domain and its subdomains against every URL the engine cited.
Related MCP server: Bing Copilot API MCP Server
Install
You bring your own API keys and pay each provider directly. Set any one, two or all three; engines without a key are skipped with a note.
Claude Desktop
Edit claude_desktop_config.json (Settings, Developer, Edit Config):
{
"mcpServers": {
"cited": {
"command": "npx",
"args": ["-y", "cited-mcp"],
"env": {
"OPENAI_API_KEY": "sk-...",
"PERPLEXITY_API_KEY": "pplx-...",
"GEMINI_API_KEY": "..."
}
}
}
}Claude Code
claude mcp add cited -e OPENAI_API_KEY=sk-... -e PERPLEXITY_API_KEY=pplx-... -e GEMINI_API_KEY=... -- npx -y cited-mcpCursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"cited": {
"command": "npx",
"args": ["-y", "cited-mcp"],
"env": {
"OPENAI_API_KEY": "sk-...",
"PERPLEXITY_API_KEY": "pplx-...",
"GEMINI_API_KEY": "..."
}
}
}
}Any other MCP client works the same way: run npx -y cited-mcp over stdio with the keys in its environment. Node 20 or newer.
Environment variables
Variable | Engine | Default model |
| ChatGPT via the OpenAI Responses API with the |
|
| Perplexity Sonar (search is built in) |
|
| Gemini with Grounding with Google Search |
|
The API versions of these engines are close to, but not the same as, the consumer apps. ChatGPT, Perplexity and Gemini in the browser can use different models, personalization and location signals.
Example output
This is the tool's real output format, run against the sample responses in test/fixtures, which follow each provider's documented response format (the businesses are made up):
# AI visibility check: Sunshine Dental & Implants (sunshinedental.com)
- ChatGPT (OpenAI API): named in 1 of 1 answers, website cited in 1
- Perplexity: named in 0 of 1 answers, website cited in 0
- Gemini: named in 1 of 1 answers, website cited in 1
## "What is the best dentist in Tampa, FL?"
- ChatGPT (OpenAI API): NAMED, #2 of 3 listed, website cited
- Named instead: Bayshore Smiles, Harbor Family Dentistry
- Sources: bayshoresmiles.com, yelp.com, sunshinedental.com
- Perplexity: not named, website not cited
- Named instead: Harbor Family Dentistry, Bayshore Smiles, Westshore Dental Group
- Sources: yelp.com, bayshoresmiles.com, healthgrades.com
- Gemini: NAMED, #2 of 3 listed, website cited
- Named instead: Westshore Dental Group, Bayshore Smiles
- Sources: sunshinedental.com, yelp.com
Estimated provider cost: $0.0229. AI answers change from run to run, so treat one check as a snapshot, not a score. Costs are estimates from token usage at list prices; you pay your provider directly.
Track this weekly with Cited: https://cited.voreli.aiThe tool also returns the same data as structured JSON (structuredContent) for clients that use it.
Cost
There is no Cited fee and no account. Each question is one API call per engine, billed to your own provider account at their list prices (checked October 2026):
Engine | What you pay per question |
OpenAI | $10 per 1,000 web search calls, plus tokens at $0.75 per 1M input and $4.50 per 1M output. Search results count as input tokens. |
Perplexity | $5 per 1,000 requests (low search context), plus tokens at $1 per 1M. Perplexity reports the exact cost and the tool uses it. |
Gemini | Tokens at $0.10 per 1M input and $0.40 per 1M output. Google lists 1,500 grounded prompts per day free on the paid tier, then $35 per 1,000. |
In practice that is a few cents or less per question per engine, so a default check (5 questions on 3 engines, 15 calls) should land well under a dollar. Every result includes an estimate computed from the token counts the provider returned. It does not include Gemini grounding fees past the free daily allowance. Check your provider dashboard for the exact charge. Prices change; see OpenAI, Perplexity and Gemini.
Run one live check
PERPLEXITY_API_KEY=your-key npm run liveUses whichever of OPENAI_API_KEY, PERPLEXITY_API_KEY and GEMINI_API_KEY are set. Override the target with BUSINESS, WEBSITE, LOCATION and QUESTION. A single check costs a few cents.
Limitations
Answers vary from run to run. In our Tampa Bay AI Search Study 2026, we asked ChatGPT the same 12 questions twice. On average the two answers shared 11% of the businesses they named, and on 6 of the 12 questions they shared none. One check is a snapshot. Trends need repeated checks over time.
API is not the app. Results approximate what people see in the consumer apps; they are not identical.
Competitor names are pulled heuristically from list items, headings and bold text. Expect the odd miss or stray phrase. The answer excerpt is included so your assistant can read it directly.
Name matching is fuzzy, not magic. A nickname or abbreviation the engine uses (for example "SDI" for Sunshine Dental & Implants) will not match unless you pass it as the business name.
Location. The engines infer location from the question text, so put the city in the question.
Tracking it over time
This server answers "are we named today?". Cited runs the same questions every week across engines, stores the history, and shows which competitors and sources are winning so you can see whether your work is moving the number.
Development
npm install
npm test # unit tests against sample responses, no network
npm run typecheck
npm run build
npm run smoke # spawns the server over stdio, lists tools, runs a no-key callTo try it with the MCP Inspector: npx @modelcontextprotocol/inspector node dist/index.js.
License
MIT. Built by Voreli AI. Questions or ideas: open an issue, or visit cited.voreli.ai.
Available Tools
1 toolcheck_ai_visibilityCheck AI visibilityARead-only
Ask AI engines (ChatGPT via the OpenAI API, Perplexity, Gemini) buyer questions with live web search on, and report whether a business is named, its position in any list, whether its website is cited, which competitors are named instead, and the source domains each engine used. Engines without an API key in the server env are skipped. Each question costs a few cents per engine, billed by the provider. Pass 1 to 10 questions, or omit them and pass a category (for example "family dentist") plus a location to use 5 generic buyer questions.
| Name | Required | Description | Default |
|---|---|---|---|
| engines | No | Subset of engines to run. Default: every engine with a key. | |
| website | No | The business website, e.g. sunshinedental.com. Used to detect citations of its pages. | |
| category | No | What the business is, e.g. "family dentist". Required when questions are omitted. | |
| location | No | City or area, e.g. "Tampa, FL". Used when questions are generated. | |
| questions | No | 1 to 10 questions a buyer would ask an AI assistant. | |
| business_name | Yes | The business to look for, e.g. "Sunshine Dental LLC" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the readOnlyHint/openWorldHint annotations: engines lacking an env API key are silently skipped, live web search is enabled, each question costs a few cents per engine billed by the provider. Cost and engine-skip behavior are exactly the operational traits an agent must know before spending money.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and outputs, then operational caveats (skipped engines, cost), then the two input modes. Dense but every sentence earns its place; the pricing sentence could be slightly tighter but the mode-switching examples are load-bearing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description enumerates the reported fields, and it covers defaults, cost, skipped engines, and both input modes. Nothing needed to invoke this 6-parameter tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds cross-field semantics the schema does not: questions and category+location are mutually exclusive modes, and omitting questions with a category yields exactly 5 generated questions. It does not explain the engines subset default beyond what the schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb (ask engines buyer questions) and enumerates the exact outputs: whether the business is named, its list position, website citation, competitors named, and source domains. An agent knows precisely what this tool does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection logic between the two input modes — pass 1-10 questions, or omit them and pass category plus location to get 5 generic buyer questions. There are no sibling tools, so no alternative-tool routing is needed, but it omits any when-not-to-use case.
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 tool update
v0.1.0- First observed
check_ai_visibility
TDQS
Scored across 1 tool
Only one tool exists, so there is no possibility of overlap or misselection. The tool's purpose is clearly distinct and unambiguous.
The single tool name follows a clear verb_noun snake_case pattern (check_ai_visibility). With only one tool, consistency is trivially satisfied.
A single tool is on the thin side for the server's stated purpose; while the tool is comprehensive, the absence of auxiliary tools (e.g., engine configuration, result retrieval) makes the surface feel minimal. The rubric considers 1-2 tools borderline.
The tool covers the core AI visibility check thoroughly, including question generation, multi-engine querying, and detailed reporting. Minor gaps exist (e.g., no way to select specific engines or retrieve historical data), but these are not critical for the primary use case.
Maintenance
Related MCP Connectors
Audit your brand's visibility across ChatGPT, Gemini, Claude, Perplexity + 6 more engines.
Query your brand's AI visibility across ChatGPT, Claude, Perplexity, and Gemini.
Brand visibility auditing across LLMs, AI search, and answer engines with GEO reports and scores.
Measure what ChatGPT, Claude, Gemini and 4 more AI engines say about any business. No auth.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to scan brand visibility across ChatGPT, Claude, Gemini & Perplexity, analyze website GEO readiness, compare competitors, and get actionable recommendations.MIT
- FlicenseNot gradedqualityBmaintenanceEnables querying Microsoft's Bing Copilot AI to retrieve structured answers, citations, and brand mention checks as JSON, designed for AEO/GEO monitoring.-
- AlicenseNot gradedqualityBmaintenanceEnables auditing AI search visibility: checks site readiness for AI crawlers and measures whether ChatGPT, Gemini, and Perplexity recommend your site, including verbatim answers and citation gap analysis.147 npm4AGPL 3.0
- AlicenseAqualityAmaintenanceChecks whether ChatGPT, Perplexity, and Gemini cite your brand for a given keyword, and who's winning the citation battle for it instead.29MIT