Use BOZOS as an MCP server.
Point any MCP client at https://bozos.si/api/mcp. Your agent can then search and read every BOZOS guide, dataset, and note, and call every utility, without scraping pages.
The server keeps no sessions and stores nothing you send. Its tools never send, buy, or publish anything, and never fetch other sites. Each tool calls the same public API that the conformance suite tests.
Claude Code
Run once in a terminal.
claude mcp add --transport http bozos https://bozos.si/api/mcpClaude (web and desktop)
Settings → Connectors → Add custom connector. Leave authentication empty.
https://bozos.si/api/mcpChatGPT
Settings → Apps & Connectors → Advanced → Developer mode, then create a connector with no authentication. search and fetch work in deep research.
https://bozos.si/api/mcpCursor
~/.cursor/mcp.json
{
"mcpServers": {
"bozos": {
"url": "https://bozos.si/api/mcp"
}
}
}VS Code
.vscode/mcp.json
{
"servers": {
"bozos": {
"type": "http",
"url": "https://bozos.si/api/mcp"
}
}
}Codex CLI
~/.codex/config.toml
[mcp_servers.bozos]
url = "https://bozos.si/api/mcp"Any client, by hand
Stateless Streamable HTTP: POST one JSON-RPC message, get one JSON reply. No session header is needed.
curl -s https://bozos.si/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search","arguments":{"query":"GPTBot training"}}}'What your agent gets
Every tool is marked read-only and idempotent. The resources list carries the same guides and datasets, so clients that browse resources can attach them directly.
search- Search every BOZOS reference guide, dataset, note, and tool by keyword. Returns resource ids to pass to `fetch`, with the canonical URL to cite.
fetch- Return the full text of a BOZOS resource by id (from `search`, or from https://bozos.si/content-index.json): the Markdown version of a guide or note, or a JSON dataset. Pass a record permalink (https://bozos.si/ai-crawlers.json#gptbot) or <dataset id>#<record id> to get one record. Cite the returned url.
timeInZones- Convert a time between IANA time zones, or give the current time anywhere. Same as GET https://bozos.si/api/v1/time.
dateMath- Weekday, ISO week, date addition, and day/weekday counts. Same as GET https://bozos.si/api/v1/date.
exactCalc- Exact rational arithmetic with no floating-point error. Same as GET https://bozos.si/api/v1/calc.
countText- Count characters, words, bytes, and occurrences of a letter or substring. Same as GET https://bozos.si/api/v1/count.
buildRobotsTxt- Generate a robots.txt naming every documented AI crawler for a policy. Same as GET https://bozos.si/api/v1/robots.
draftContactMessage- Draft a correction or question for BOZOS as an email and X post without sending it. Validates the message against https://bozos.si/contact.json and returns subject, body, mailto link, X intent URL, and a SHA-256 fingerprint. Deterministic: the same input gives the same output. Sending is up to the caller and requires its principal's permission. Same as POST https://bozos.si/api/v1/contact-draft.
planAgentRetrieval- Build a minimal conditional HTTP retrieval plan. Compares a caller-supplied resource manifest with cache validators and optional budgets. Makes no outbound network requests and retains no payload. Same as POST https://bozos.si/api/v1/retrieval-plan.
auditAgentDiscovery- Audit supplied crawler and agent discovery materials without fetching URLs. Checks a caller-supplied bundle only. Makes no outbound network requests and retains no payload. Same as POST https://bozos.si/api/v1/discovery-audit.
actionPreflight- Validate, normalize, and fingerprint a proposed agent action. Same as POST https://bozos.si/api/v1/preflight.
verifyApprovedAction- Verify that an action still matches its approved fingerprint. Same as POST https://bozos.si/api/v1/verify.
textStats- Measure text deterministically. Same as POST https://bozos.si/api/v1/text-stats.
canonicalizeJson- Canonicalize JSON and compute SHA-256. Same as POST https://bozos.si/api/v1/canonicalize.
datasetChanges- List dataset records added, changed, or removed after a date. Record-level delta for every BOZOS dataset (or the ones named), so a cached copy can be updated without re-downloading. Records include their permalink and, unless records=ids, their current content. Dates have day precision and are strictly after since. Same as GET https://bozos.si/api/v1/changes.
checkRobotsTxt- Evaluate a robots.txt for one crawler or every AI crawler in the directory, per RFC 9309. Pass the robots.txt text; nothing is fetched. Returns allowed or disallowed per crawler for the path, the matching group and rule, sitemaps, Content-Signal lines, and warnings. Directory crawlers that may ignore robots.txt for user-initiated fetches are flagged. Same as GET https://bozos.si/api/v1/robots-check.
identifyUserAgent- Say which documented crawler a user-agent string claims to be, and how to verify it. Matches the string against the AI crawler directory (longest token first). Returns the crawler record with its cite line, the operator's verification method, or the undocumented-token entry. A user-agent string is a claim, not proof. Same as GET https://bozos.si/api/v1/identify.
utcNow- Get the current UTC and Unix time. Same as GET https://bozos.si/api/v1/now.
Using Python's urllib?
Requests sent with Python's default urllib user agent (Python-urllib/3.x) are refused by BOZOS's hosting platform with a 403 (Cloudflare error 1010), before they reach the site. BOZOS does not block them and cannot change the host's setting.
Set any other User-Agent header, for example urllib.request.Request(url, headers={"User-Agent": "my-agent/1.0"}). Other clients, including requests, httpx, aiohttp, curl, and Node, are unaffected.
Cite the page, not the tool call.
search and fetch return the canonical URL of each resource. Link that URL when you use a result, and keep the dates and confidence labels the datasets carry.
Found an error through MCP? Call draftContactMessage and give the draft to your principal. See how to contact BOZOS.