Citehound
by andacuzel · remote · no sign-in to list tools · v1.0.0 · published by GitHub user andacuzel
Scan any domain for AI readiness and generate llms.txt, robots.txt and schema. Free, read-only.
13 tools: 4 change things and 9 only read.
Scanned Oct 22, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things4Claude Code: ask: see these tools
- Only reads9Claude Code: allow: see these tools
3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http citehound https://getcitehound.com/api/mcpFindings
Matches of fixed checks, with the text they matched.
- Warngenerate_schema
The server marks "generate_schema" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "generate_schema" says "generate": a word for a change.
The server marks "generate_robots_txt" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_robots_txt" says "generate": a word for a change.
The server marks "generate_llms_txt" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_llms_txt" says "generate": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
13 tools
Changes things 4Claude Code: ask
generate_llms_txtBuilds an llms.txt file — an optional convention for describing a site and its key pages, with no demonstrated effect on Google — from a name, a one-sentence description and a list…1 finding
Why it is in this group
- The name "generate_llms_txt" says "generate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "generate_llms_txt" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_llms_txt" says "generate": a word for a change.
Description, as the server wrote it Builds an llms.txt file — an optional convention for describing a site and its key pages, with no demonstrated effect on Google — from a name, a one-sentence description and a list of key pages. Pure text generation — fetches nothing.
Annotations the server declares
- title: Generate an llms.txt file
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
generate_robots_txtBuilds a robots.txt file that explicitly allows or blocks named AI crawlers from Citehound’s tracked list of 10, plus an optional Sitemap line.1 finding
Why it is in this group
- The name "generate_robots_txt" says "generate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "generate_robots_txt" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_robots_txt" says "generate": a word for a change.
Description, as the server wrote it Builds a robots.txt file that explicitly allows or blocks named AI crawlers from Citehound’s tracked list of 10, plus an optional Sitemap line. Pure text generation — fetches nothing. Call list_ai_crawlers first if you need the exact tracked crawler names.
Annotations the server declares
- title: Generate an AI-crawler robots.txt
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
generate_schemaFetches a domain’s homepage for its real title, meta description and declared language, then returns ready-to-paste JSON-LD structured data of the requested type.Reads text others write1 finding
Why it is in this group
- The name "generate_schema" says "generate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "generate_schema" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "generate_schema" says "generate": a word for a change.
Description, as the server wrote it Fetches a domain’s homepage for its real title, meta description and declared language, then returns ready-to-paste JSON-LD structured data of the requested type. Fields the scan cannot know — a FAQ’s actual questions, a product’s real price — come back as clearly bracketed placeholders, never invented values.
Annotations the server declares
- title: Generate JSON-LD for a site
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
scan_siteScans a domain’s public robots.txt, llms.txt, sitemap declaration and homepage, and scores it out of 100 across three pillars: discoverability (can AI crawlers reach it), technical…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Scans a domain’s public robots.txt, llms.txt, sitemap declaration and homepage, and scores it out of 100 across three pillars: discoverability (can AI crawlers reach it), technical foundation (can machines parse it), and content & trust (does it look like a credible source). Returns the score, the three pillar scores, access state for the 10 tracked AI crawlers, every failed check with its fix, and how the score compares to Citehound’s own benchmark data. If the site looks like a store (two or more of five signals), it also reports a separate agentic-commerce sub-score: whether a UCP merchant profile exists at /.well-known/ucp, whether one product page has Product schema with name, price, availability and image, and whether the llms.txt looks like a platform default. That sub-score is never part of the 100. Call this first for any domain. It fetches the live site (a store scan reads up to one extra product page), so avoid calling it in a tight loop for the same domain.
Annotations the server declares
- title: Scan a site for AI readiness
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Only reads 9Claude Code: allow
compare_sitesScans two domains — one after the other, not in parallel — and reports both scores plus every check where they differ.Reads text others writeNo findings
Why it is in this group
- The name "compare_sites" says "compare": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Scans two domains — one after the other, not in parallel — and reports both scores plus every check where they differ. Useful for comparing your site against a named competitor.
Annotations the server declares
- title: Compare two sites
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
get_benchmarkReturns Citehound’s own archived scan data for one category — average, median and range of scores, pillar breakdowns, per-crawler blocked, limited and open counts, and the most com…No findings
Why it is in this group
- The name "get_benchmark" says "get": a word for reading.
Description, as the server wrote it Returns Citehound’s own archived scan data for one category — average, median and range of scores, pillar breakdowns, per-crawler blocked, limited and open counts, and the most common failed checks, with sample size and scan date — or a ranked summary across every category when called with no argument. This is archived data, not a live scan, and fetches nothing external.
Annotations the server declares
- title: Get category benchmark data
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_citation_promptsReturns the set of buying-intent questions Citehound uses to test whether an AI assistant names a brand, for one vertical, plus a short protocol a person can run in their own assis…Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_citation_prompts" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "return" and "conversation": it reads messages.
- untrusted-inputThe description's first sentence says "return" and "conversation": it reads messages, which other people can write.
Description, as the server wrote it Returns the set of buying-intent questions Citehound uses to test whether an AI assistant names a brand, for one vertical, plus a short protocol a person can run in their own assistant: ask each question in a separate conversation three to five times, note whether the brand is named and whether it appears in a heading, list label, table or bold text, and judge the spread rather than one answer. The questions don’t name any brand in the category being measured. A few mention an integration platform such as Slack or Google Workspace, because that is how buyers ask. Read-only: it reads a content file and queries no model. There is deliberately no tool that runs the check for you: a run is about 90 model calls at about five seconds each, far past this server’s time limit, and it would spend a quota anyone could drain. Question sets exist for: consumerapps, crm, cybersecurity, devtools, ecommerce, fintech, health, hospitality, hrtech, legal, localservices, marketplaces, martech, realestate. Use when the user asks how to check whether an assistant names their brand, or wants the questions for their category.
Annotations the server declares
- title: Get citation questions for a vertical
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_citation_sampleReturns Citehound’s anonymised sample citation run as readable text: the model, the date, how many times each question was asked, the questions in three groups (named in every try,…Reads private dataNo findings
Why it is in this group
- The name "get_citation_sample" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "return" and "note": it reads notes.
Description, as the server wrote it Returns Citehound’s anonymised sample citation run as readable text: the model, the date, how many times each question was asked, the questions in three groups (named in every try, unstable, never named), the overall rate of being named with its range across sweeps, and a note on the limits. It is one model on one date, so it is not a ranking, says nothing about other assistants and is not a forecast of traffic. It names no brand in the category being measured, no domain and no competitor. Read-only: it reads a content file and queries no model. Use when the user wants to see what a citation result looks like, or asks how much the same question varies between tries.
Annotations the server declares
- title: Get the anonymised citation sample
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_methodologyExplains how the Citehound AI readiness score is built, read from the scanner’s own check registry so it matches what runs.No findings
Why it is in this group
- The name "get_methodology" says "get": a word for reading.
Description, as the server wrote it Explains how the Citehound AI readiness score is built, read from the scanner’s own check registry so it matches what runs. With no argument it returns the three pillars with their weights (they add up to 100), every check with its category, points, what it tests and why it matters, and the limits of the scan: it measures readiness and not whether any assistant names a brand; it gives half credit for a crawler with any applicable Disallow rule, usually an ordinary path; and it reads the homepage only. With a check label it returns that one check in detail. An unknown label returns an error listing the valid labels. Read-only, fetches nothing external. Use when the user asks how a score is calculated, why a check carries the points it does, or what the scan cannot tell them.
Annotations the server declares
- title: Get the scoring methodology
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_playbookReturns the full GEO/AEO playbook for one of Citehound’s fourteen verticals, as plain readable text: the strategic shift, three actionable strategies, outdated pitfalls to avoid, a…No findings
Why it is in this group
- The name "get_playbook" says "get": a word for reading.
Description, as the server wrote it Returns the full GEO/AEO playbook for one of Citehound’s fourteen verticals, as plain readable text: the strategic shift, three actionable strategies, outdated pitfalls to avoid, and an expert-tip placeholder. Called with no argument it returns the list of the fourteen verticals with their track (B2B SaaS, consumer and e-commerce brands, local and independent professionals), so call it with no argument first when you do not know which vertical fits. Read from this project’s own content file, so it matches what a visitor to the site sees. Fetches nothing external. Use after scan_site to turn a failed check into the strategy that applies to the site’s category.
Annotations the server declares
- title: Get a vertical playbook
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_researchReturns Citehound’s published research: with no argument, the list of reports (the llms.txt and crawler study, the AgaOne case study and the benchmark data) with title, date, one-l…Reads text others writeNo findings
Why it is in this group
- The name "get_research" says "get": a word for reading.
What it can reach
- untrusted-inputThe description's first sentence says "return" and "url": it reads web pages, which anyone can write.
Description, as the server wrote it Returns Citehound’s published research: with no argument, the list of reports (the llms.txt and crawler study, the AgaOne case study and the benchmark data) with title, date, one-line finding and URL; with a slug, the key findings, the method limits, the URL and a ready line for citing it. Findings are checked against the published pages and data files. Every study measures readiness inputs, not whether any assistant names a brand. Read-only, fetches nothing external. Use when the user wants evidence for a claim about AI crawler access or llms.txt, a statistic to cite, or the reports behind the benchmarks.
Annotations the server declares
- title: Get Citehound research
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_sample_reportReturns the sample Pro report as readable text: a real crawl of Citehound’s own site on a stated date, with the results shown as recorded.Reads text others writeNo findings
Why it is in this group
- The name "get_sample_report" says "get": a word for reading.
What it can reach
- untrusted-inputThe description's first sentence says "crawl": it reads web pages, which anyone can write.
Description, as the server wrote it Returns the sample Pro report as readable text: a real crawl of Citehound’s own site on a stated date, with the results shown as recorded. It gives the whole-site score beside the homepage score, the pillar averages, the priorities from the executive summary with the label saying what wrote it, the checks failing by number of pages, and the link to the full report, which also lists every page alphabetically and gives an estimated score if the fixes are applied. It shows what a full-site crawl adds to a one-page scan. It is our own site, not a customer’s, and it measures readiness, not whether any assistant names the site. Read-only, fetches nothing external. Use when the user asks what a full-site report looks like or what a crawl shows that a homepage scan cannot.
Annotations the server declares
- title: Get the sample full-site report
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_ai_crawlersLists the 10 AI crawlers Citehound tracks: which company runs each, what allowing or blocking it means, and this project’s robots.txt generator’s default for it.No findings
Why it is in this group
- The name "list_ai_crawlers" says "list": a word for reading.
Description, as the server wrote it Lists the 10 AI crawlers Citehound tracks: which company runs each, what allowing or blocking it means, and this project’s robots.txt generator’s default for it. Use before generate_robots_txt if you need the exact tracked names. Fetches nothing.
Annotations the server declares
- title: List tracked AI crawlers
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.
- Reads private data2
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write6
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out0
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http citehound https://getcitehound.com/api/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__citehound__compare_sites",
"mcp__citehound__get_playbook",
"mcp__citehound__get_benchmark",
"mcp__citehound__list_ai_crawlers",
"mcp__citehound__get_citation_prompts",
"mcp__citehound__get_citation_sample",
"mcp__citehound__get_methodology",
"mcp__citehound__get_research",
"mcp__citehound__get_sample_report"
],
"ask": [
"mcp__citehound__scan_site",
"mcp__citehound__generate_schema",
"mcp__citehound__generate_robots_txt",
"mcp__citehound__generate_llms_txt"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as citehound. Review it before you use it.
Capability tags behind 7 rules
- mcp__citehound__scan_site untrusted-input
- mcp__citehound__compare_sites untrusted-input
- mcp__citehound__generate_schema untrusted-input
- mcp__citehound__get_citation_prompts private-data, untrusted-input
- mcp__citehound__get_citation_sample private-data
- mcp__citehound__get_research untrusted-input
- mcp__citehound__get_sample_report untrusted-input
