citable について
citableは、AI回答エンジンがウェブサイトを読み取り、引用できるかを調べるCLIおよびMCPサーバーです。ボットのアクセス、ページ情報、コンテンツの可読性を確認し、スコアと修正案を報告します。
主な機能
- 01回答エンジンとしてサイトを取得
- 02robots.txtとエッジでのブロックを確認
- 03llms.txtと構造化データを検証
- 04JavaScript描画コンテンツを検出
- 05スコアと修正案を提示
- 06変更監視と引用状況の追跡
活用シーン
- 01ウェブサイトのデプロイ後にAIアクセスを確認
- 02アクセススコア低下時にCIを失敗させる
- 03サイトのアクセス問題を継続監視
- 04指定したプロンプトのエンジン引用を追跡
MCP 対応
サイト確認とllms.txtの草案作成を行うcheck_siteおよびdraft_llms_txtツールをMCPクライアントに提供します。サーバーは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の「Block AI bots」、WAFルール、レート制限など)を報告します。さらに、残りの項目もチェックします。llms.txt、JSON-LD、タイトルと説明、JavaScriptのみのコンテンツ、サイトマップ、canonicalです。100点満点で採点し、失敗した項目にはそれぞれ修正方法を示します。MCP サーバーとしても動作するため、エージェントにサイトをチェックさせることもできます。
依存関係はゼロ。ファイルは1つ。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 | 回答エンジンやエージェントが最初に読む慣例的なファイルです。ソフト404のHTMLページは、存在しないものとして扱われます。 |
| JavaScriptなしでコンテンツを読み取れる(生のHTMLに単語が含まれている) | 15 | ほとんどのAIクローラーはJavaScriptを実行しません。クライアント側で描画されるだけのシェルは、クローラーから見えません。 |
| JSON-LDの構造化データ(Organization、WebSite、Article、FAQPageなど) | 10 | エンティティやFAQは、回答で直接引用されます。 |
| タイトルとメタディスクリプションの長さが適切 | 8 | 回答でそのまま引用されます。 |
HTTPS、応答時間、canonical、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での使用
新しいWAFルール、llms.txtの削除、紛れ込んだDisallow: /などによってデプロイ後にAIからのアクセスが妨げられた場合、ビルドを失敗させます。
citable yoursite.com --min-score=70 --json > citable.json
監視
WAF の切り替えを行うデプロイによって、すべての AI の回答から知らないうちに除外されることがあります。監視機能はそのアラームです。所有する任意のリポジトリで GitHub Action として実行でき(サイトのリポジトリである必要はありません)、サイトごとに 1 件の Issue を最新の状態に保ち、回答ボットがブロックされた場合、llms.txt が消えた場合、サイトがダウンした場合、またはスコアが下がった場合に、ただちにその Issue にコメントします。そのコメントは GitHub からメールで通知されます。サーバーもアカウントも依存関係も不要です。例:Issue #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(Issue で追跡するかどうか。デフォルトは true)、notify(回帰時にメンションするログイン名。デフォルトはリポジトリの所有者)、fail-on-regression(デフォルトは true)。出力:score、regressed、changed。gh にログイン済みのシェルからも同じ処理を実行できます。
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 のウェブ検索)、perplexity(PERPLEXITY_API_KEY、sonar)、claude-code(マシン上の claude CLI。キーは不要)。キーが設定されているエンジンはすべて実行されます。--engines= で対象を選べます。--issue --repo=you/repo を追加するか(または Action から prompts: 入力を使って実行すると)、"citable track: example.com" という Issue を最新の状態に保ち、引用が失われた際にコメントします。これは有料ツールが月額 $29〜$39 で提供している週次メールに相当します。キーはご自身で用意してください。3 つのエンジンで 10 個のプロンプトを実行する費用は数セントです。
ホスト型(月額 £9)
リポジトリもキーも cron も不要です。月に 1 回支払い、チェックアウト時にサイト(最大 5 件)、重要なプロンプト(最大 10 件)、ブランドを入力すると、最初のレポートが 1 時間以内に受信トレイに届きます。その後は、何かに回帰があった時点でメールが届き、プロンプト追跡を含むダイジェストが週 1 回届きます。領収書からキャンセルできます。
実行プログラムはこのリポジトリにあるため(citable hosted)、ご自身の顧客向けに同じものを実行することもできます。Polar をポーリングして有効なサブスクリプションを確認し、購読者ごとに小さな状態ファイルを 1 つ保持して、Resend 経由で送信します。依存関係はゼロで、1 時間ごとの 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 なら合格します。ドメインを添えて Issue を作成すると、ヒューリスティックを追加します。
-
--no-liveを指定するとボットへの取得をスキップします(高速化され、robots.txt のみを確認します)。
開発
python3 -m unittest discover -s tests -v
MIT。開発者:genzagents。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。