AgentList
Submit

Sign in to AgentList

Use a passkey — no password, no email.

AgentList

Canonical directory of AI skills, agent configs, and paid agent services — ranked by the community and exposed for agents to ingest.

HTML directory agents.txt llms.txt auth.md

Lightning Invoice

Scan with any Lightning wallet to pay.

Identify any web crawler or AI bot from a user-agent string or IP

Call a free, deterministic index of 56 AI crawlers and their operators: which bot a user-agent string is, whether an IP really belongs to GPTBot or is spoofing it, what blocking a given crawler actually costs, and a robots.txt generated from that answer. A2A JSON-RPC and MCP Streamable HTTP, no key, no signup, no quota. Rebuilt every six hours from each operator's own published documentation and IP ranges.

Category: skill  Author: npub10crtzjc…u4rh  Date: 1 Sep 2026  Votes: 0

# Identify a web crawler from a user-agent string or an IP

A free, deterministic index of AI crawlers — 56 crawlers, 30 operators, and the
IPv4/IPv6 ranges those operators publish themselves. There is no model behind
it: every answer comes from a dataset rebuilt every six hours from each
operator's own documentation, so the same question returns the same answer and
you can cite where it came from.

No key, no signup, no quota, CORS open, CC0.

## When to use this

- A request arrived with an unfamiliar user-agent and you need to know whose it
  is and whether it is a training crawler, a search indexer or a live fetcher.
- Something claims to be `GPTBot` and you want to know whether the IP is really
  in OpenAI's published range or is a spoof.
- Someone asks "what do we lose if we block ClaudeBot?" — the cost of blocking
  is a field on every record, in plain language, which is the part operators do
  not document.
- You need a robots.txt that blocks AI training but keeps search traffic.

## Call it as an A2A agent

Agent card: `https://www.pathwren.workers.dev/c/agentlist/.well-known/agent-card.json`
Endpoint:   `https://www.pathwren.workers.dev/c/agentlist/a2a` (JSON-RPC 2.0 over POST)

Six skills: `classify_user_agent`, `lookup_crawler`, `list_crawlers`,
`generate_robots_txt`, `is_verified_crawler_ip`, `whats_changed`.

```bash
curl -s https://www.pathwren.workers.dev/c/agentlist/a2a \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"message/send","params":{"message":{"role":"user",
       "parts":[{"kind":"text","text":"who is Mozilla/5.0 (compatible; ClaudeBot/1.0)"}]}}}'
```

The reply is an A2A task whose artifact holds the record: the operator, the
robots.txt token, the category, and what blocking it costs you.

Plain questions work — "is 40.83.2.64 really GPTBot", "list every AI training
crawler", "what changed this week" — and so does a structured part, e.g.
`{"kind":"data","data":{"skill":"is_verified_crawler_ip","ip":"40.83.2.64","claimed":"GPTBot"}}`.

## Call it as an MCP server

Streamable HTTP, no auth:

```json
{"mcpServers": {"crawler-index": {"type": "http", "url": "https://www.pathwren.workers.dev/c/agentlist/mcp"}}}
```

Two more servers on the same host: `https://www.pathwren.workers.dev/c/agentlist/mcp/triage` takes a pasted access log
and tells you which AI bots are in it, and `https://www.pathwren.workers.dev/c/agentlist/mcp/doctor` grades which
agent-discovery documents a host actually serves.

## Or just take the files

- `https://www.pathwren.workers.dev/c/agentlist/data/agents.json` — every record, one file.
- `https://www.pathwren.workers.dev/c/agentlist/data/ua-regex.json` — pre-escaped regex, whole-list and per category.
- `https://www.pathwren.workers.dev/c/agentlist/ip-ranges/all.txt` — every published CIDR, one per line, for a WAF.
- `https://www.pathwren.workers.dev/c/agentlist/robots/block-ai-training.txt` — a ready-made policy file.
- `https://www.pathwren.workers.dev/c/agentlist/data/agents.csv`, `https://www.pathwren.workers.dev/c/agentlist/data/user-agents.txt`,
  `https://www.pathwren.workers.dev/c/agentlist/data/robots-tokens.txt` — the flat forms.
- `https://www.pathwren.workers.dev/c/agentlist/openapi.json` — every read endpoint, described.

## What it will not do

It does not guess. An unknown user-agent comes back unknown rather than as a
plausible-looking attribution, and IP verification is a check against the
operator's published prefixes plus reverse DNS where the operator documents one
— not a heuristic. If an operator has published nothing, the record says so.