关于 Crawlerpeek
Crawlerpeek 是用于检查爬虫能否访问 URL 的只读库、命令行工具和 MCP 服务。它报告 robots.txt 规则与实际抓取结果,也可验证爬虫 IP 或生成 robots.txt 规则。
主要功能
- 01检查各爬虫的 robots.txt 访问规则
- 02使用爬虫 User-Agent 抓取页面
- 03报告重定向、状态码和拦截情况
- 04验证爬虫 IP 地址
- 05生成 robots.txt 规则
适用场景
- 01发布前检查 AI 爬虫访问情况
- 02在 CI 中运行访问检查
- 03排查服务器日志中的爬虫请求
MCP 相关
stdio MCP 服务提供四个只读工具:check_ai_access、see_as_bot、verify_bot_ip 和 generate_robots_txt。每次调用的结果缓存 10 分钟。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
4收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | 要检查页面的公开 http(s) URL。 |
| bots | array | 否 | 要检查的 Bot token;省略时使用默认的 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 在页面抓取成功时退出代码为 0,无论其 HTTP 状态如何;请求失败或被拒绝时退出代码为 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。列表会缓存一小时,且绝不会向该 IP 发送任何内容。退出代码:至少有一个机器人通过验证时为 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、重定向被拒绝或没有目标地址)会报告为 unknown,原因记录在 robotsTxt.error 中,且绝不会计为拦截。注意:这与 RFC 9309 §2.3.1.4 有意不同;根据该规范,爬虫会将无法访问的 robots.txt(5xx)视为“禁止所有访问”(Google 也是如此),因此,返回 5xx 的 robots.txt 实际上会对许多机器人关闭网站,即使 --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 通过标准输入/输出使用 Model Context Protocol,并公开四个只读工具:check_ai_access、see_as_bot、verify_bot_ip、generate_robots_txt。每次调用的结果缓存 10 分钟。不会调用大模型;这些工具只会获取你提供的 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 使用 .vscode/mcp.json,以 servers 为根键,并在条目中设置 "type": "stdio"。Codex 使用 ~/.codex/config.toml;请调高启动超时时间,以免首次 npx 下载触发默认的 10 秒超时:
[mcp_servers.crawlerpeek]
command = "npx"
args = ["-y", "crawlerpeek", "mcp"]
startup_timeout_sec = 30
Agent 技能
skills/crawlerpeek/ 是一项 Agent 技能:其中的 SKILL.md 会告知 AI Agent 何时检查 AI 爬虫访问权限、运行哪些命令,以及如何读取结果。它只使用通用的 frontmatter 字段,因此同一个文件夹可在多个 Agent 中使用。
| Agent | 安装 |
|---|---|
| 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/
之后请重启 Agent,使其加载新技能。技能与 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 会从你的计算机发送该机器人的 user-agent 字符串。 它不是真正的机器人,也不来自运营方的 IP 范围。会验证机器人 IP 的网站(Googlebot、GPTBot 等会公开其 IP)可能会区别对待仅声称自己是机器人的请求,通常会将其拦截。因此,此处
Googlebot返回 403 可能是正常情况;如果浏览器返回 200,而某个不常见的机器人返回 403,通常说明存在 WAF 或 CDN 规则。robots.txt本身会使用如实的crawlerpeek/<version>user agent 获取。 - Google-Extended 和 Applebot-Extended 是 robots.txt 控制令牌,而不是爬虫:它们会获得 robots.txt 的判定,但绝不会被实际访问。
- 页面以原始 HTML 的形式获取,不会运行 JavaScript。
- robots.txt 是一项请求,不是访问控制。某些由用户触发的抓取器(ChatGPT-User、Perplexity-User)可能不会遵守;运营方的文档会说明具体情况。
- 机器人列表和 user-agent 字符串来自运营方的文档,且可能会变化;该列表上次与运营方文档核对的日期是 2026-10-18。
安全限制
每个机器人发送一个请求,另加一个 robots.txt 请求;请求按顺序执行,间隔 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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。