{
 "tool": "example",
 "endpoint": "https://www.pathwren.workers.dev/tools/example",
 "asked": {},
 "summary": "This is classify_user_agent run for real, with the arguments below. Everything after the line is what you would have got yourself.\n\n  arguments: {\"user_agent\":\"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)\"}\n  (the exact user-agent string of the busiest client in this host's own published log (/data/observed-clients.json, 1164 requests in the window) — our data, and no third party is asked anything)\n\n----------------------------------------\nClaudeBot — Anthropic (AI training crawlers).\nMatched on \"ClaudeBot\".\n\nWhat it is: Anthropic's bulk crawler, gathering pages that may be used to train Claude models.\n\nCost of blocking it: Content excluded from training data for future Claude models. No effect on Claude's ability to fetch a link a user gives it.\n\nrobots.txt token: ClaudeBot · robots.txt: obeys robots.txt (documented) · verification: no published verification method\n\nA user-agent string is a claim, not a proof: anyone can send it. Before you act on a match, check the address with is_verified_crawler_ip, or use the operator's reverse-DNS method where there are no published ranges.",
 "answer": {
  "ran": {
   "server": "ai-crawler-index",
   "endpoint": "https://www.pathwren.workers.dev/mcp",
   "tool": "classify_user_agent",
   "arguments": {
    "user_agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
   }
  },
  "input_came_from": "the exact user-agent string of the busiest client in this host's own published log (/data/observed-clients.json, 1164 requests in the window) — our data, and no third party is asked anything",
  "what_it_shows": "a full identification: operator, category, what it is for, what blocking it costs, its robots.txt token and stance, and how the operator says it can be verified.",
  "answer": {
   "user_agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)",
   "matched": true,
   "matched_on": "ClaudeBot",
   "crawler": {
    "slug": "claudebot",
    "name": "ClaudeBot",
    "operator": "Anthropic",
    "operator_slug": "anthropic",
    "category": "ai-training",
    "category_label": "AI training crawlers",
    "robots_token": "ClaudeBot",
    "user_agent_substring": "ClaudeBot",
    "user_agent_example": "Mozilla/5.0 (compatible; ClaudeBot/1.0; +claudebot@anthropic.com)",
    "respects_robots_txt": "documented",
    "respects_robots_txt_label": "obeys robots.txt (documented)",
    "verification_method": "none",
    "verification_label": "no published verification method",
    "published_ip_ranges_url": null,
    "ip_ranges_endpoint": null,
    "ipv4_prefix_count": 0,
    "ipv6_prefix_count": 0,
    "what_it_is": "Anthropic's bulk crawler, gathering pages that may be used to train Claude models.",
    "cost_of_blocking": "Content excluded from training data for future Claude models. No effect on Claude's ability to fetch a link a user gives it.",
    "operator_docs": "https://support.anthropic.com/en/articles/8896518",
    "docs_url": "https://www.pathwren.workers.dev/crawler/claudebot.html",
    "json_url": "https://www.pathwren.workers.dev/crawler/claudebot.json",
    "last_reviewed": "2026-09-02"
   },
   "also_matched": [],
   "verification": {
    "method": "none",
    "label": "no published verification method",
    "published_ip_ranges": null,
    "how": "The operator publishes no verification method at all, so this user-agent cannot be verified. Treat it as unverifiable."
   },
   "caveat": "A user-agent string is a claim, not a proof: anyone can send it. Before you act on a match, check the address with is_verified_crawler_ip, or use the operator's reverse-DNS method where there are no published ranges.",
   "source": "https://www.pathwren.workers.dev"
  },
  "reproduce": "curl -s https://www.pathwren.workers.dev/mcp -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"classify_user_agent\",\"arguments\":{\"user_agent\":\"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)\"}}}'",
  "this_is_not_a_mock": "The `answer` field is the structuredContent of a real call to classify_user_agent, produced by the same handler a client reaches over JSON-RPC. If the tool changes, this changes with it.",
  "answered_by": {
   "server": "ai-crawler-index",
   "endpoint": "https://www.pathwren.workers.dev/mcp",
   "tool": "example",
   "takes_arguments": false
  },
  "license": "CC0-1.0"
 },
 "answered_by": {
  "note": "The MCP tool itself answered this. One implementation, two doors — this endpoint holds no copy of it.",
  "server": "ai-crawler-index",
  "endpoint": "https://www.pathwren.workers.dev/mcp",
  "tool": "example",
  "protocol": "MCP streamable-http, JSON-RPC 2.0 tools/call"
 },
 "caveats": [
  "The input is canned from this host's own data. No third party is contacted and no URL of yours is fetched.",
  "The same answer over MCP: tools/call example with arguments {}."
 ],
 "docs": "https://www.pathwren.workers.dev/tools/example.html?s=client-dossiers",
 "catalogue": "https://www.pathwren.workers.dev/tools/index.json?s=client-dossiers",
 "more": {
  "who actually crawls this host": "https://www.pathwren.workers.dev/bot/index.html?s=client-dossiers",
  "every named client as one file": "https://www.pathwren.workers.dev/data/observed-clients.json?s=client-dossiers"
 },
 "auth": "none — no account, no key, no handshake. CORS open, cacheable, CC0-1.0.",
 "license": "CC0-1.0",
 "independent": true
}
