mcpField
C
citable

citable

ローカル
genzagents.github.ioビジネス・マーケティング02 日前に更新

citable について

citableは、AI回答エンジンがウェブサイトを読み取り、引用できるかを調べるCLIおよびMCPサーバーです。ボットのアクセス、ページ情報、コンテンツの可読性を確認し、スコアと修正案を報告します。

主な機能

  1. 01回答エンジンとしてサイトを取得
  2. 02robots.txtとエッジでのブロックを確認
  3. 03llms.txtと構造化データを検証
  4. 04JavaScript描画コンテンツを検出
  5. 05スコアと修正案を提示
  6. 06変更監視と引用状況の追跡

活用シーン

  1. 01ウェブサイトのデプロイ後にAIアクセスを確認
  2. 02アクセススコア低下時にCIを失敗させる
  3. 03サイトのアクセス問題を継続監視
  4. 04指定したプロンプトのエンジン引用を追跡

MCP 対応

サイト確認とllms.txtの草案作成を行うcheck_siteおよびdraft_llms_txtツールをMCPクライアントに提供します。サーバーはstdioで動作します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"genzagents-citable": {
"command": "uvx",
"args": [
"citable-cli"
]
}
}
}
起動コマンドuvx citable-cli

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypicitable-cli0.4.2

ツール

2

掲載時のツール一覧 · 1 日前に更新

パラメーター型必須説明
urlstringはいサイトの URL またはドメイン(例:example.com)
livebooleanいいえ各 AI ボットとしてホームページも取得し、WAF/CDN によるブロックを検出します(デフォルトは true)

詳細

citable

GitHub Marketplace PyPI

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これらは、リアルタイムの質問に回答し、情報源を引用するためにページを取得します。ブロックされると、引用されません。
エッジでブロックされていない:これらの各ボットとしてホームページを取得したとき、ブラウザーで取得した場合と同じ内容が返される20CDNや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。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。