关于 citable
citable 是用于检查网站能否被 AI 答案引擎读取和引用的命令行工具及 MCP 服务。它检测爬虫访问限制、页面标记和内容可读性,并给出评分与修复建议。
主要功能
- 01模拟答案引擎检查网站访问
- 02检查 robots.txt 与边缘拦截
- 03验证 llms.txt 和结构化数据
- 04检测 JavaScript 渲染内容
- 05生成评分和修复建议
- 06监控变化并追踪引用
适用场景
- 01部署后检查网站的 AI 可访问性
- 02在 CI 中阻止访问评分下降的变更
- 03定期监测站点访问故障
- 04追踪特定问题的引擎引用情况
MCP 相关
它提供 check_site 和 draft_llms_txt 工具,供 MCP 客户端检查网站并起草 llms.txt;服务通过 stdio 运行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
2收录的工具列表 · 更新于 1 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 网站 URL 或域名,例如 example.com |
| live | boolean | 否 | 同时以各 AI 机器人身份获取主页,以检测 WAF/CDN 拦截(默认值为 true) |
详细介绍
citable
ChatGPT、Claude 和 Perplexity 真的能读取并引用你的网站吗?
大多数“AI 可见度”检查工具只读取 robots.txt,然后就此打住。citable 会以每个 AI 机器人的身份抓取你的主页,并报告 robots.txt 从未提及的拦截(Cloudflare“拦截 AI 机器人”、WAF 规则、速率限制器),然后检查列表中的其余项目:llms.txt、JSON-LD、标题和描述、仅限 JS 的内容、站点地图、规范链接。评分满分 100,每项失败都会附上修复方法。它还可以作为 MCP 服务运行,让你的 Agent 替你检查网站。
零依赖。单个文件。Python 3.9+。
pipx install citable-cli # from PyPI; on a Mac: brew install pipx first. Or: uvx --from citable-cli citable
citable example.com # report
citable example.com --json # for scripts and CI (exit 1 if below --min-score=N)
citable example.com --llms-txt # a starter llms.txt built from your homepage
citable watch a.com b.com # weekly watch: GitHub issue per site, comment (email) on regressions
citable track a.com "best X" "how Y" # prompt tracking: which engines cite you, who gets cited instead
完全无需安装:
curl -sL https://raw.githubusercontent.com/genzagents/citable/main/citable/__init__.py | python3 - example.com
运行结果示例
citable 0.3.0: https://reddit.com/
score 13/100 grade F (final URL https://www.reddit.com/)
[FAIL] 0/15 robots.txt allows answer engines: robots.txt blocks: OAI-SearchBot, ChatGPT-User, Claude-SearchBot, ...
[FAIL] 0/20 Answer engines not blocked at the edge: Fetching the homepage as a bot: ChatGPT-User got HTTP 403; a browser got 200.
fix: Your CDN or WAF (Cloudflare 'Block AI bots', bot-fight mode, a rate limiter) is refusing them ...
[FAIL] 0/15 /llms.txt: /llms.txt returns HTTP 404.
...
Bot Vendor Role robots.txt live fetch
OAI-SearchBot OpenAI answer block HTTP 200
ChatGPT-User OpenAI answer block HTTP 403 <- BLOCKED
Claude-SearchBot Anthropic answer block HTTP 200
...
检查内容
| 检查项 | 分值 | 重要性 |
|---|---|---|
| robots.txt 允许答案机器人(OAI-SearchBot、ChatGPT-User、Claude-SearchBot、Claude-User、PerplexityBot、Perplexity-User、DuckAssistBot、Bingbot、Googlebot) | 15 | 这些机器人会抓取页面,以回答实时问题并引用来源。被拦截就意味着永远不会被引用。 |
| 未在边缘拦截:以这些机器人的身份访问主页,返回的内容与浏览器获取的内容相同 | 20 | CDN 和 WAF 的“拦截 AI”开关会阻止 robots.txt 允许的机器人。在此项通过之前,列表中的其他事项都无关紧要。 |
| 训练爬虫(GPTBot、ClaudeBot、Google-Extended、CCBot、Applebot-Extended、meta-externalagent、Amazonbot、Bytespider) | 信息 | 拦截它们是合理的选择,不会影响引用。仅报告,不扣分。 |
存在 /llms.txt,为纯文本,包含 H1、> summary 和链接 | 15 | 答案引擎和 Agent 会首先读取的约定文件。软 404 HTML 页面会被视为缺失。 |
| 无需 JavaScript 即可读取内容(原始 HTML 中的文字) | 15 | 大多数 AI 爬虫不会运行 JS。客户端渲染的空壳对它们不可见。 |
| JSON-LD 结构化数据(Organization、WebSite、Article、FAQPage 等) | 10 | 实体和常见问题会被直接引用。 |
| 标题和 meta 描述长度合理 | 8 | 会在回答中逐字引用。 |
HTTPS、响应时间、规范链接、Open Graph、站点地图、<html lang>、无 noindex | 22 | 决定哪个 URL 会获得引用的基础事项。 |
作为 MCP 服务运行(Claude Code、Claude Desktop、Cursor,以及任何 MCP 客户端)
工具:check_site(url, live=true) 和 draft_llms_txt(url)。
Claude Code 插件(包含 MCP 服务和一个知道如何处理报告的技能):
claude plugin marketplace add genzagents/marketplace
claude plugin install citable@genzagents
手动配置任意 MCP 客户端:
{ "mcpServers": { "citable": { "command": "python3", "args": ["/path/to/citable/citable/__init__.py", "mcp"] } } }
该服务通过 stdio 使用 MCP 通信,且无任何依赖,因此只要能运行 Python,就能运行它。
在 CI 中
当部署导致 AI 访问受阻时(新增 WAF 规则、llms.txt 丢失、误加了 Disallow: /),让构建失败:
citable yoursite.com --min-score=70 --json > citable.json
监控
一次部署只要切换 WAF 开关,就可能悄无声息地让你从所有 AI 答案中消失。监控会在这时发出警报。它以 GitHub Action 的形式运行在你拥有的任意仓库中(不必是网站所在的仓库),为每个网站维护一个最新的问题,并且一旦某个答案机器人被拦截、llms.txt 消失、网站宕机或评分下降,就会立即在该问题下发表评论,GitHub 会通过邮件通知你。无需服务、账号或依赖项。示例:问题 #1 监控的是本项目自己的页面。
将 docs/watch.yml 复制到 .github/workflows/citable-watch.yml:
on:
schedule: [{ cron: "17 6 * * 1" }] # Mondays
workflow_dispatch:
permissions: { issues: write, contents: read }
jobs:
watch:
runs-on: ubuntu-latest
steps:
- uses: genzagents/[email protected]
with:
sites: |
example.com
docs.example.com
# min-score: 75
输入项:sites(必填)、min-score(低于此分数时失败)、live(按各机器人身份进行抓取,默认 true)、issue
(在问题中跟踪,默认 true)、notify(回归时 @提及的用户名,默认为仓库所有者)、
fail-on-regression(默认 true)。输出项:score、regressed、changed。在已登录 gh 的 shell 中也可以执行同样的操作:
citable watch example.com docs.example.com --repo=you/your-repo --notify=you
托管服务,每月 £9:由我们运行同样的监控,无需仓库,最多支持 5 个域名,并提供每周邮件。 目前尚未上线;点击按钮告诉我们你是否需要,这将决定我们是否开发:
跟踪
监控会告诉你引擎能否读取你的网站。跟踪会告诉你它们是否会这么做:对于你希望成为答案的问题,ChatGPT、Claude 或 Perplexity 会链接到你的网站吗?如果没有,链接的是谁?
citable track example.com "best tools for X" "how do I Y" --brand=Example
## citable track: example.com
**Visibility 50%**: share of prompt-and-engine pairs where an answer linked to your site.
| Prompt | anthropic | openai | perplexity |
|---|---|---|---|
| best tools for X | **cited** | mentioned | **cited** |
| how do I Y | no | no | no |
**Who gets cited instead** (answers citing them): rival.io (4), other.org (2)
引擎:anthropic(ANTHROPIC_API_KEY,web_search 工具)、openai(OPENAI_API_KEY,Responses API web search)、perplexity(PERPLEXITY_API_KEY,sonar)和 claude-code(你电脑上的 claude CLI,无需密钥)。凡是已提供密钥的引擎都会运行;--engines= 可选择要运行的子集。添加 --issue --repo=you/repo(或者在 Action 中使用 prompts: 输入项运行),它就会维护一个名为“citable track: example.com”的问题,并在引用丢失时发表评论。这正是付费工具每月收费 $29 到 $39 提供的每周邮件。使用你自己的密钥;在三个引擎上运行 10 个提示词只需几美分。
托管服务(每月 £9)
无需仓库、密钥或 cron:每月付费一次,在结账时填写你的网站(最多 5 个)、重要提示词(最多 10 个)和品牌信息,首份报告会在一小时内发送到你的收件箱。之后,一旦出现回归,你就会立即收到邮件;每周还会收到一封包含提示词跟踪信息的摘要。可通过收据取消订阅。
运行器位于此仓库中(citable hosted),因此你也可以为自己的客户自行运行同样的服务:
它会轮询 Polar 以获取有效订阅,为每位订阅者维护一个小型状态文件,并通过 Resend 发送邮件。零依赖项,每小时运行一次 cron。详见 docs/HOSTED.md。
citable hosted run --dry-run # against Polar, prints the emails instead of sending
citable hosted run --subscribers=subs.json # against a local list (no Polar), e.g. for your own clients
citable hosted launchd # a launchd plist that runs it hourly on a Mac
说明
-
MCP 注册表名称:
mcp-name: io.github.genzagents/citable(PyPI 软件包citable-cli;导入名称和命令均为citable)。 -
机器人用户代理和角色遵循供应商公布的字符串(OpenAI、Anthropic、Perplexity)。角色“answer” = 在实时对话中获取内容以回答问题或引用;“train” = 构建训练语料。
-
边缘检查仅比较 HTTP 状态。若网站对机器人返回 200 并显示验证页面,检查仍会通过;提交包含域名的问题后,我们会为其添加启发式规则。
-
--no-live会跳过机器人抓取(速度更快,只检查 robots.txt)。
开发
python3 -m unittest discover -s tests -v
MIT。由 genzagents 构建。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。