citable

io.github.genzagents由 GitHub 账号 genzagents 发布v0.4.2更新于 Oct 29, 2026

Can ChatGPT, Claude and Perplexity read and cite your site? robots.txt, edge blocks, llms.txt.

概览

AI 生成的概览

检查网站能否被 AI 问答引擎读取和引用,对 robots.txt、边缘拦截、llms.txt 与页面标记打分,并可生成 llms.txt 草稿。

可以做什么
  • 检查网站的 AI 可引用性:以各问答机器人的身份抓取首页,对 robots.txt、CDN/WAF 边缘拦截、llms.txt、无 JS 可读内容、JSON-LD、标题与描述、HTTPS、canonical 和站点地图按 100 分制评分,并给出每项失败的修复建议。
  • 根据网站首页生成一份入门 llms.txt 草稿。
  • 仅以信息形式报告训练爬虫规则,不因此扣分。
适用场景
适合在 MCP 客户端中让助手审计网站的 AI 可见性、排查 ChatGPT、Claude 或 Perplexity 不引用该站点的原因,或生成第一份 llms.txt。
运行要求
以 stdio 方式在本机运行,需要 Python 3.9 及以上,无依赖;可从 citable-cli 的 PyPI 包安装(例如通过 uvx)或直接运行单个文件。MCP 服务器未声明需要账号、密钥或环境变量;抓取目标站点需要网络访问。
安装前请注意
检查会以具名 AI 机器人身份多次抓取目标站点首页,可能触发限流或 WAF 规则。边缘检查只比较 HTTP 状态码,返回 200 的验证页也可能通过。README 中的 watch、track 和托管服务属于另外的 CLI 或付费功能,会使用 API 密钥或 GitHub 令牌并发布公开 issue,不属于这两个 MCP 工具。

安装

在 SourceWeft 中

  1. 打开 控制台中的 citable,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

citable

[GitHub Marketplace] [PyPI]

Can ChatGPT, Claude and Perplexity actually read and cite your site?

Most "AI visibility" checkers read robots.txt and stop. citable fetches your homepage as each AI bot and reports the blocks that robots.txt never mentions (Cloudflare "Block AI bots", WAF rules, rate limiters), then checks the rest of the list: llms.txt, JSON-LD, title and description, JS-only content, sitemap, canonical. Score out of 100, every failure with the fix. Also runs as an MCP server so your agent can check sites for you.

Zero dependencies. One file. Python 3.9+.

bash
pipx install citable-cli     # from PyPI; on a Mac: brew install pipx first. Or: uvx --from citable-cli citablecitable example.com                # reportcitable 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 homepagecitable watch a.com b.com          # weekly watch: GitHub issue per site, comment (email) on regressionscitable track a.com "best X" "how Y"  # prompt tracking: which engines cite you, who gets cited instead

No install at all:

bash
curl -sL https://raw.githubusercontent.com/genzagents/citable/main/citable/__init__.py | python3 - example.com

What a run looks like

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  ...

What it checks

CheckPointsWhy it matters
robots.txt allows the answer bots (OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User, DuckAssistBot, Bingbot, Googlebot)15These fetch pages to answer live questions and cite the source. Blocked means never cited.
Not blocked at the edge: homepage fetched as each of those bots returns what a browser gets20CDN and WAF "block AI" toggles stop bots that robots.txt allows. Nothing else on this list matters until this passes.
Training crawlers (GPTBot, ClaudeBot, Google-Extended, CCBot, Applebot-Extended, meta-externalagent, Amazonbot, Bytespider)infoBlocking them is a legitimate choice and does not affect citations. Reported, never penalised.
/llms.txt present, plain text, with an H1, a > summary and links15The convention answer engines and agents read first. A soft-404 HTML page counts as missing.
Content readable without JavaScript (words in the raw HTML)15Most AI crawlers do not run JS. A client-rendered shell is invisible to them.
JSON-LD structured data (Organization, WebSite, Article, FAQPage...)10Entities and FAQs get quoted directly.
Title and meta description, sensible lengths8Quoted verbatim in answers.
HTTPS, response time, canonical, Open Graph, sitemap, <html lang>, no noindex22Hygiene that decides which URL gets the citation.

As an MCP server (Claude Code, Claude Desktop, Cursor, any MCP client)

Tools: check_site(url, live=true) and draft_llms_txt(url).

Claude Code plugin (includes the MCP server and a skill that knows how to act on the report):

bash
claude plugin marketplace add genzagents/marketplaceclaude plugin install citable@genzagents

Any MCP client, by hand:

json
{ "mcpServers": { "citable": { "command": "python3", "args": ["/path/to/citable/citable/__init__.py", "mcp"] } } }

The server speaks MCP over stdio with no dependencies, so it runs anywhere Python does.

In CI

Fail the build when a deploy breaks AI access (a new WAF rule, a lost llms.txt, a Disallow: / that slipped in):

bash
citable yoursite.com --min-score=70 --json > citable.json

Watch

A deploy that flips a WAF toggle silently removes you from every AI answer. The watch is the alarm. It runs as a GitHub Action in any repo you own (it need not be the site's repo), keeps one issue per site up to date, and comments on that issue the moment an answer bot is blocked, llms.txt disappears, the site goes down or the score drops, which GitHub emails to you. No server, no account, no dependencies. Example: issue #1 watches this project's own page.

Copy docs/watch.yml to .github/workflows/citable-watch.yml:

yaml
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

Inputs: sites (required), min-score (fail below it), live (fetch as each bot, default true), issue (track in an issue, default true), notify (login to @mention on a regression, default repo owner), fail-on-regression (default true). Outputs: score, regressed, changed. Same thing from a shell where gh is logged in:

bash
citable watch example.com docs.example.com --repo=you/your-repo --notify=you

Hosted, $12/month (about £9): the same watch run by us, no repo needed, up to 5 domains, with a weekly digest. Live now through GitHub Sponsors:

  1. Sponsor genzagents at $12 a month →
  2. Open your Hosted watch issue → from the same account. Reports are posted on it (the issue is public).

Track

The watch tells you whether engines can read you. Track tells you whether they do: for the questions you want to be the answer to, does ChatGPT, Claude or Perplexity link to your site, and who gets linked instead?

bash
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)

Engines: anthropic (ANTHROPIC_API_KEY, the web_search tool), openai (OPENAI_API_KEY, Responses API web search), perplexity (PERPLEXITY_API_KEY, sonar) and claude-code (the claude CLI on your machine, no key). Every engine whose key is present runs; --engines= picks a subset. Add --issue --repo=you/repo (or run it from the Action with a prompts: input) and it keeps a "citable track: example.com" issue up to date and comments when a citation is lost, which is the weekly email the paid tools charge $29 to $39 a month for. Bring your own keys; a 10-prompt run on three engines costs a few cents.

Hosted ($12/month, about £9)

No repo, no keys, no cron: sponsor genzagents at $12 a month, open a Hosted watch issue with your sites (up to 5), the prompts that matter (up to 10) and your brand, and the first report is posted on the issue within the hour. After that you get a comment the moment something regresses and a digest once a week with the prompt tracking (GitHub emails you each one). Cancel from your GitHub sponsorships page.

citable hosted run --source=github matches active sponsors to the open hosted issues they authored and comments the reports there, so it needs only a GitHub token. The Polar + Resend mode below is for private email delivery.

The runner is in this repo (citable hosted), so you can also run the same thing yourself for your own customers: it polls Polar for active subscriptions, keeps one small state file per subscriber, and sends through Resend. Zero dependencies, one hourly cron. See docs/HOSTED.md.

bash
citable hosted run --dry-run                  # against Polar, prints the emails instead of sendingcitable hosted run --subscribers=subs.json    # against a local list (no Polar), e.g. for your own clientscitable hosted launchd                        # a launchd plist that runs it hourly on a Mac

Notes

  • MCP registry name: mcp-name: io.github.genzagents/citable (PyPI package citable-cli; the import and the command stay citable).

  • Bot user agents and roles follow the vendors' published strings (OpenAI, Anthropic, Perplexity). Role "answer" = fetches to answer or cite in a live conversation; "train" = builds training corpora.

  • The edge check compares HTTP status only. A site that returns 200 with a challenge page to bots will pass; file an issue with the domain and it gets a heuristic.

  • --no-live skips the bot fetches (faster, robots.txt only).

Development

bash
python3 -m unittest discover -s tests -v

MIT. Built by genzagents.

来源:README.md,提交 3d8d974

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.4.2最新Oct 29, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分