Koskamo

Citehound MCP

A free, read-only MCP server that scans domains for AI readiness, generates llms.txt, robots.txt, and schema JSON-LD, and provides benchmarks and research data for AI crawlers.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Citehound MCP logo, by CitehoundCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by Citehound
MCP endpoint (Streamable HTTP)
https://getcitehound.com/api/mcp
Vendor documentation

What you can do with it

  • Scan a domain for AI readiness and get fixes
  • Generate llms.txt, robots.txt, and schema
  • Compare two sites for crawler access differences
  • View benchmarks and AI crawler research

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
citehound 1.0.0
MCP protocol
2025-06-18
Tools
13 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
3 advertised
Server-advertised capabilities
{
  "tools": {},
  "prompts": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Citehound scans a domain’s public robots.txt, llms.txt and homepage for AI-crawler access and on-page signals, and generates the fixes (schema, robots.txt, llms.txt). It also serves the scoring methodology, the research, a sample report of our own site, the vertical playbooks and the citation question sets, and three prompts for common workflows. Every tool is read-only and non-destructive. It measures readiness, not whether any assistant names a brand.

Tools

13 advertised

scan_site — Scan a site for AI readiness
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

scan_site input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "A bare domain, e.g. \"example.com\". No scheme (https://) and no path — the scan always targets the domain root."
    }
  }
}
scan_site annotations
{
  "title": "Scan a site for AI readiness",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
compare_sites — Compare two sites
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

compare_sites input schema
{
  "type": "object",
  "required": [
    "domain_a",
    "domain_b"
  ],
  "properties": {
    "domain_a": {
      "type": "string",
      "description": "The first bare domain, e.g. \"example.com\"."
    },
    "domain_b": {
      "type": "string",
      "description": "The second bare domain, e.g. \"competitor.com\". Must differ from domain_a."
    }
  }
}
compare_sites annotations
{
  "title": "Compare two sites",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
generate_schema — Generate JSON-LD for a site
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

generate_schema input schema
{
  "type": "object",
  "required": [
    "domain",
    "type"
  ],
  "properties": {
    "type": {
      "enum": [
        "organization",
        "faqpage",
        "article",
        "product",
        "localbusiness"
      ],
      "type": "string",
      "description": "\"organization\" returns Organization + WebSite schema as an @graph; the others (faqpage, article, product, localbusiness) each return one schema of that @type."
    },
    "domain": {
      "type": "string",
      "description": "A bare domain, e.g. \"example.com\"."
    }
  }
}
generate_schema annotations
{
  "title": "Generate JSON-LD for a site",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
generate_robots_txt — Generate an AI-crawler robots.txt
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

generate_robots_txt input schema
{
  "type": "object",
  "properties": {
    "allow": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Crawler names to explicitly allow, e.g. [\"GPTBot\", \"ClaudeBot\"]. Must be names from the tracked list."
    },
    "block": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Crawler names to explicitly block. Must be names from the tracked list, and must not overlap with \"allow\"."
    },
    "sitemap_url": {
      "type": "string",
      "description": "Optional absolute sitemap URL to add as a Sitemap: line, e.g. \"https://example.com/sitemap.xml\"."
    }
  }
}
generate_robots_txt annotations
{
  "title": "Generate an AI-crawler robots.txt",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
generate_llms_txt — Generate an llms.txt file
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

generate_llms_txt input schema
{
  "type": "object",
  "required": [
    "name",
    "description"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The site or product name for the llms.txt header."
    },
    "key_pages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url",
          "description"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "Absolute URL of the page."
          },
          "description": {
            "type": "string",
            "description": "One line describing what the page covers."
          }
        }
      },
      "description": "Pages worth pointing an AI system to, most important first."
    },
    "description": {
      "type": "string",
      "description": "A one-sentence summary of what the site is."
    }
  }
}
generate_llms_txt annotations
{
  "title": "Generate an llms.txt file",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_playbook — Get a vertical playbook
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_playbook input schema
{
  "type": "object",
  "properties": {
    "vertical": {
      "type": "string",
      "description": "Optional. A vertical slug. B2B SaaS: crm, martech, hrtech, fintech, cybersecurity, devtools. Consumer brands: ecommerce, consumerapps, hospitality, marketplaces. Professionals: health, localservices, realestate, legal. Omit to list them all."
    }
  }
}
get_playbook annotations
{
  "title": "Get a vertical playbook",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_benchmark — Get category benchmark data
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_benchmark input schema
{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "description": "Optional. One of: crm, cybersecurity, devtools, dtc-brands, consumer-apps, hospitality. Omit to get every category."
    }
  }
}
get_benchmark annotations
{
  "title": "Get category benchmark data",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_ai_crawlers — List tracked AI crawlers
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_ai_crawlers input schema
{
  "type": "object",
  "properties": {}
}
list_ai_crawlers annotations
{
  "title": "List tracked AI crawlers",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_citation_prompts — Get citation questions for a vertical
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_citation_prompts input schema
{
  "type": "object",
  "required": [
    "vertical"
  ],
  "properties": {
    "vertical": {
      "type": "string",
      "description": "A vertical slug. Valid: consumerapps, crm, cybersecurity, devtools, ecommerce, fintech, health, hospitality, hrtech, legal, localservices, marketplaces, martech, realestate. Question sets exist for: consumerapps, crm, cybersecurity, devtools, ecommerce, fintech, health, hospitality, hrtech, legal, localservices, marketplaces, martech, realestate."
    }
  }
}
get_citation_prompts annotations
{
  "title": "Get citation questions for a vertical",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_citation_sample — Get the anonymised citation sample
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_citation_sample input schema
{
  "type": "object",
  "properties": {}
}
get_citation_sample annotations
{
  "title": "Get the anonymised citation sample",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_methodology — Get the scoring methodology
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_methodology input schema
{
  "type": "object",
  "properties": {
    "check": {
      "type": "string",
      "description": "Optional. A check label exactly as scan_site reports it, e.g. \"Page title\" or \"AI crawler access\". Case does not matter. Omit for the whole methodology."
    }
  }
}
get_methodology annotations
{
  "title": "Get the scoring methodology",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_research — Get Citehound research
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_research input schema
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Optional. A report slug from the list this tool returns with no argument. Omit to list the reports."
    }
  }
}
get_research annotations
{
  "title": "Get Citehound research",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_sample_report — Get the sample full-site report
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_sample_report input schema
{
  "type": "object",
  "properties": {}
}
get_sample_report annotations
{
  "title": "Get the sample full-site report",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

3 advertised

geo_audit — Audit a site for AI readiness

Advertised by the server during the last successful anonymous check.

Scans a domain, compares it with its category benchmark, reads the matching playbook, generates the fixes and returns an ordered plan, then says what the scan does not measure.

domain
A bare domain, e.g. "example.com". No scheme and no path. (required)
commerce_readiness — Check a store for agentic-commerce readiness

Advertised by the server during the last successful anonymous check.

Scans a store, reads the commerce sub-score (UCP endpoint, product schema, llms.txt authorship) and returns what to fix, with a replacement llms.txt if the file is a platform default.

domain
A bare domain of an online store, e.g. "shop.example.com". (required)
citation_questions — Get the questions to test whether an assistant names a brand

Advertised by the server during the last successful anonymous check.

Returns the buying-intent question set for a vertical and the protocol for running it yourself in any assistant, five tries per question, and what to record.

vertical
A vertical slug, e.g. "crm". Valid: consumerapps, crm, cybersecurity, devtools, ecommerce, fintech, health, hospitality, hrtech, legal, localservices, marketplaces, martech, realestate. (required)
brand
The brand name to look for in the answers. (required)

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
561 ms
95th percentile latency
561 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 561 ms · metadata changed · 13 tool(s), 3 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http citehound-mcp https://getcitehound.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add citehound-mcp --url https://getcitehound.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable citehound-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "citehound-mcp": {
      "url": "https://getcitehound.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "citehound-mcp": {
      "type": "streamableHttp",
      "url": "https://getcitehound.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start citehound-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "citehound-mcp": {
      "type": "http",
      "url": "https://getcitehound.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http citehound-mcp https://getcitehound.com/api/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "citehound-mcp": {
      "url": "https://getcitehound.com/api/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "citehound-mcp": {
      "serverUrl": "https://getcitehound.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Citehound MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.