Agent Wranglers

WEB-253Recommended

Let invited agents reach what you invite them to

robots.txt never blocks an endpoint that llms.txt, a skill or an agent card tells agents to use.

How to do it

Fetchers that act for one person, such as ChatGPT-User and Claude-User, read robots.txt in some setups. If robots.txt blocks /mcp while your skill tells agents to call it, those agents give up. Allow user-triggered agents to reach every endpoint you advertise. Keep search crawlers from indexing them with X-Robots-Tag: noindex on those answers instead. Set the crawler groups as Decide what each AI crawler may do says.

Examples

Plain text example

User-agent: ChatGPT-User
User-agent: Claude-User
User-agent: Perplexity-User
Allow: /mcp
Allow: /a2a
Allow: /ask

Python example

from urllib.robotparser import RobotFileParser
robots = RobotFileParser("https://example.com/robots.txt")
robots.read()
for agent in ["ChatGPT-User", "Claude-User", "Perplexity-User"]:
    assert all(robots.can_fetch(agent, url) for url in advertised_endpoints), agent

JavaScript example

import robotsParser from 'robots-parser';
const robots = robotsParser('https://example.com/robots.txt', robotsText);
for (const agent of ['ChatGPT-User', 'Claude-User', 'Perplexity-User'])
  for (const url of advertisedEndpoints) console.assert(robots.isAllowed(url, agent), `${agent} blocked from ${url}`);

How to check

A script collects every endpoint named in llms.txt, the skill files and the agent cards. A robots parser confirms that robots.txt allows each one for ChatGPT-User, Claude-User and Perplexity-User.

For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/website/ready-for-ai-agents/robots-allow-invited-endpoints">Agent Wranglers website playbook</a>. In code you write, add a comment next to it with the same link.