Crawlerpeek について
Crawlerpeekは、クローラーがURLにアクセスできるかを調べる読み取り専用のライブラリ、コマンドラインツール、MCPサーバーです。robots.txtの判定と実際の取得結果を報告し、クローラーIPの検証やrobots.txtの生成も行います。
主な機能
- 01クローラーごとのrobots.txt判定
- 02クローラーのUser-Agentでページ取得
- 03リダイレクト、ステータス、ブロック状況の報告
- 04クローラーIPアドレスの検証
- 05robots.txtルールの生成
活用シーン
- 01公開前のAIクローラーアクセス確認
- 02CIでのアクセスチェック実行
- 03サーバーログ内のクローラーリクエスト調査
MCP 対応
stdioのMCPサーバーは、check_ai_access、see_as_bot、verify_bot_ip、generate_robots_txtの4つの読み取り専用ツールを公開します。各呼び出しの結果は10分間キャッシュされます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
4掲載時のツール一覧 · 2 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | string | はい | 確認するページの公開 http(s) URL。 |
| bots | array | いいえ | 確認するボットトークン。省略するとデフォルトの 15 個を使用します。既知の値:GPTBot、OAI-SearchBot、ChatGPT-User、ClaudeBot、Claude-SearchBot、Claude-User、PerplexityBot、Perplexity-User、Google-Extended、Applebot-Extended、CCBot、meta-externalagent、Bytespider、Googlebot、Bingbot、Applebot、meta-externalfetcher、DuckAssistBot、Amazonbot、AhrefsBot、SemrushBot、MJ12bot、facebookexternalhit、Slackbot。 |
| http | boolean | いいえ | 各ボットの user agent でもページを取得します(デフォルトは true)。false の場合は robots.txt のみを確認します。 |
詳細
crawlerpeek
AI クローラーがサイトにアクセスできるか確認します。各ボット(GPTBot、OAI-SearchBot、ChatGPT-User、ClaudeBot、Claude-SearchBot、PerplexityBot、Google-Extended、Googlebot、Bingbot、CCBot など)について、以下を確認できます。
robots.txtがそのボットに対して URL のパスへのアクセスを許可しているか(RFC 9309:user-agent グループ、ワイルドカード、$、最長一致が優先)、および- そのボットの user-agent 文字列で取得したとき、ページが実際に返す内容:ステータス、リダイレクト後の最終 URL、コンテンツタイプ、サイズ、タイトル、レスポンスがブロックページまたはチャレンジページのように見えるかどうか。
AI クローラーを歓迎する robots.txt も生成します。ライブラリ、CI 用 CLI、MCP サーバーを提供します。Node 20 以降、実行時依存関係なし、ESM と CommonJS に対応し、TypeScript 型定義も含まれています。
同じチェックをウェブツールとして利用できます:crawlerpeek.com。CI と MCP クライアント向けの例を含むドキュメントはこちらです:crawlerpeek.com/cli。
インストール
npm install crawlerpeek # library
npx crawlerpeek --help # CLI, no install needed
CLI
npx crawlerpeek check https://example.com
https://example.com
robots.txt: ok (HTTP 200) at https://example.com/robots.txt
Bot robots HTTP
GPTBot blocked 200 FAIL
ClaudeBot allowed 403 (block page) FAIL
Google-Extended allowed -
npx crawlerpeek check https://example.com/pricing --bots GPTBot,ClaudeBot --fail-on blocked
npx crawlerpeek check https://example.com --bots all --json
npx crawlerpeek check https://example.com --no-http # robots.txt only
npx crawlerpeek see https://example.com --bot ClaudeBot # one bot, full detail
npx crawlerpeek verify 66.249.66.1 --bot Googlebot # is this IP really Googlebot?
npx crawlerpeek robots --disallow /admin/,/cart/ --sitemap https://example.com/sitemap.xml
終了コード:0 は成功、1 は --fail-on の条件に該当、2 は使用方法のエラー(不明なオプションを含む)またはリクエストエラーです。see はページを取得できた場合、HTTP ステータスにかかわらず 0 で終了し、リクエストが失敗または拒否された場合は 2 で終了します。
verify <ip> [--bot GPTBot] [--json] は、サーバーログにあるアドレスが実際にクローラーのものかどうかを確認します。運営者が公開している情報のみを使用します。公開 IP 範囲 JSON(Google、OpenAI、Anthropic、Perplexity、Bing、Apple、Common Crawl、DuckDuckGo、Ahrefs)、または逆引き DNS と正引きによる確認(Google、Bing、Apple、Common Crawl、Ahrefs)です。--bot を指定しない場合、該当する方法があるすべてのボットを確認します。各結果には method(ip-list、reverse-dns、none)、verified(true、false、またはリストにアクセスできない、運営者が確認方法を公開していないなど、判定不能な場合の null)、および detail が含まれます。リストは 1 時間キャッシュされ、IP に対して何かを送信することはありません。終了コード:少なくとも 1 つのボットで確認できた場合は 0、確認できなかった、または判定不能の場合は 1、使用方法のエラーの場合は 2 です。
--fail-on | 失敗する条件 |
|---|---|
blocked | robots.txt がボットに対してそのパスを閉じている場合、またはページがそのボットに 401/403/406/451 かチャレンジページを返す場合 |
any-non-200 | 上記に加え、その他のステータス(404、5xx、別の場所に到達するリダイレクト)やリクエストの失敗がある場合 |
--fail-on を指定しない場合、結果にかかわらず終了コードは 0 です。--bots にはトークンまたは all を指定します。デフォルトは 15 個のボットで、主要な AI クローラーに Googlebot と Bingbot を加えたものです。robots.txt を取得できない場合(タイムアウト、5xx、拒否されたリダイレクト、または遷移先のないリダイレクト)は、理由を robotsTxt.error に記載して unknown と報告され、ブロックとして扱われることはありません。注:これは RFC 9309 §2.3.1.4 とは意図的に異なります。同節では、クローラーは到達不能な robots.txt(5xx)を「すべてを disallow」として扱うことになっており(Google も同様です)。したがって、robots.txt が 5xx を返すサイトは、--fail-on blocked を通過しても、多くのボットに対して実質的に閉鎖されています。unknown は修正が必要な問題として扱ってください。
ライブラリ
import { checkAiAccess, seeAsBot, verifyBotIp, generateRobotsTxt, failingBots } from "crawlerpeek";
const report = await checkAiAccess("https://example.com/pricing", { bots: ["GPTBot", "ClaudeBot"] });
report.bots[0].robots; // { access: "allowed", pathAllowed: true, matchedGroup: "*" }
report.bots[0].http; // { status: 200, finalUrl, redirects, contentType, bytes, title, looksBlocked, outcome: "ok", ... }
failingBots(report, "blocked"); // ["ClaudeBot"] when it is closed or challenged
await seeAsBot("https://example.com", "PerplexityBot");
await verifyBotIp("66.249.66.1", { bot: "Googlebot" }); // [{ bot: "Googlebot", method: "ip-list", verified: true, detail, source }]
generateRobotsTxt({ disallow: ["/admin/"], blockBots: ["CCBot"], sitemap: "https://example.com/sitemap.xml" });
generateRobotsTxt は、各 AI ボットを明示的に指定し、Allow: / を設定します。許可しないパスをそのグループ内に繰り返し記述するのは意図的です。独自のグループを持つボットは、* グループを無視するためです。
MCP サーバー
crawlerpeek mcp は stdio 経由で Model Context Protocol を使用し、読み取り専用の 4 つのツール check_ai_access、see_as_bot、verify_bot_ip、generate_robots_txt を公開します。結果は呼び出しごとに 10 分間キャッシュされます。LLM は呼び出されません。ツールは指定された URL の取得のみを行います。
| クライアント | インストール |
|---|---|
| Claude Code | claude mcp add --transport stdio crawlerpeek -- npx -y crawlerpeek mcp |
| Claude Code(プラグイン:MCP サーバーとスキル) | /plugin marketplace add crawlerpeek/crawlerpeek、続けて /plugin install crawlerpeek@crawlerpeek |
| Claude Desktop | Releases から crawlerpeek-<version>.mcpb をダウンロードして開くか、以下の JSON を追加します |
| Codex | codex mcp add crawlerpeek -- npx -y crawlerpeek mcp |
| VS Code | code --add-mcp '{"name":"crawlerpeek","type":"stdio","command":"npx","args":["-y","crawlerpeek","mcp"]}' |
| その他のクライアント | 以下の JSON |
汎用設定(Claude Desktop、Cursor、Windsurf、Cline などでは、この mcpServers 形式を使用します):
{ "mcpServers": { "crawlerpeek": { "command": "npx", "args": ["-y", "crawlerpeek", "mcp"] } } }
VS Code は、ルートキーに servers を指定し、エントリーに "type": "stdio" を設定した .vscode/mcp.json を読み込みます。Codex は ~/.codex/config.toml を読み込みます。初回の npx ダウンロードがデフォルトの 10 秒のタイムアウトに達しないよう、起動タイムアウトを延長してください。
[mcp_servers.crawlerpeek]
command = "npx"
args = ["-y", "crawlerpeek", "mcp"]
startup_timeout_sec = 30
エージェントスキル
skills/crawlerpeek/ は Agent Skill です。AI エージェントに、AI クローラーのアクセスを確認するタイミング、実行するコマンド、結果の読み取り方を指示する SKILL.md が含まれています。共通のフロントマター項目のみを使用しているため、同じフォルダーを複数のエージェントで使用できます。
| エージェント | インストール |
|---|---|
| Claude Code | 上記のプラグインとともにインストールされます。または、フォルダーを ~/.claude/skills/crawlerpeek にコピーします |
| claude.ai | crawlerpeek フォルダーを zip に圧縮し、Customize > Skills からアップロードします(コード実行とネットワークアクセスが必要です。スキルの注意事項を参照してください) |
| Codex | フォルダーを ~/.agents/skills/(すべてのプロジェクト用)またはリポジトリ内の .agents/skills/ にコピーします |
| OpenClaw | フォルダーを ~/.agents/skills/ またはワークスペース内の skills/ にコピーします |
| Hermes | hermes skills install crawlerpeek/crawlerpeek/skills/crawlerpeek |
git clone --depth 1 https://github.com/crawlerpeek/crawlerpeek.git
mkdir -p ~/.agents/skills && cp -r crawlerpeek/skills/crawlerpeek ~/.agents/skills/
新しいスキルを読み込ませるため、作業後にエージェントを再起動してください。スキルと MCP サーバーは独立しています。MCP サーバーに接続されている場合、スキルはそのツールを使用し、接続されていない場合は npx -y crawlerpeek を実行します。
GitHub Action
コンポジットアクションは action/ にあります。action/README.md を参照してください。
- uses: crawlerpeek/crawlerpeek/action@v0
with: { url: "https://example.com", fail-on: blocked }
知っておくべきこと
- see-as-bot は、お使いのマシンからボット自身のユーザーエージェント文字列を送信します。 実際のボットではなく、運営者の IP 範囲から送信されるものでもありません。ボットの IP を検証するサイト(Googlebot、GPTBot などは IP 範囲を公開しています)では、ボットを名乗るだけのリクエストを異なる方法で扱い、ブロックすることもよくあります。そのため、ここで
Googlebotに対して 403 が返るのは正常な場合があります。一方、ブラウザーでは 200 が返るのに、一般的でないボットに対して 403 が返る場合は、通常 WAF または CDN のルールが原因と考えられます。robots.txt自体は、正直なcrawlerpeek/<version>ユーザーエージェントで取得します。 - Google-Extended と Applebot-Extended はクローラーではなく、robots.txt の制御トークンです。robots.txt による判定は受けますが、取得されることはありません。
- ページは生の HTML として取得されます。JavaScript は実行されません。
- robots.txt はリクエストであり、アクセス制御ではありません。ユーザーの操作をきっかけにページを取得するフェッチャー(ChatGPT-User、Perplexity-User など)は、robots.txt に従わない場合があります。各運営者のドキュメントに、従うかどうかが記載されています。
- ボットの一覧とユーザーエージェント文字列は各運営者のドキュメントに基づいており、変更される場合があります。一覧は、2026-10-18 に各運営者のドキュメントと最後に照合されました。
安全性の制限
ボットごとに 1 回、robots.txt に 1 回リクエストを送信し、300 ms の間隔を空けて順次実行します(--delay)。リクエストチェーン全体のタイムアウトは 10 s で、リダイレクトは最大 5 回までです。リダイレクトのたびに再確認します(拒否対象へのリダイレクトは、そのボットまたは robots.txt に対する結果として報告され、実行は停止しません)。レスポンス本文は 2 MB までに制限され、Cookie は使用しません。DNS 解決後(および接続時にも再度)、プライベート、ループバック、リンクローカル、メタデータの各アドレスを拒否します。また、80 と 443 以外のポート、および認証情報を含む URL も拒否します。--allow-private(CLI および crawlerpeek mcp)または allowPrivate: true を指定すると、ローカルテスト時にこれらの制限が解除されます。
コントリビューション
課題の報告とプルリクエストを歓迎します。CONTRIBUTING.md をご覧ください。セキュリティ上の問題は非公開で報告してください。SECURITY.md をご覧ください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。