BOZOS
Read-only reference data and stateless utilities for AI agents: crawler and opt-out signal datasets.
Should I use this
Quality & Safety
Findings (19)
- HIGH
- MEDIUMin fetch
- MEDIUMin timeInZones
- MEDIUMin dateMath
- MEDIUMin exactCalc
- MEDIUMin countText
- MEDIUMin buildRobotsTxt
- MEDIUMin draftContactMessage
- MEDIUMin planAgentRetrieval
- MEDIUMin auditAgentDiscovery
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"bozos": {
"url": "https://bozos.si/api/mcp"
}
}
}Remote endpoints
https://bozos.si/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (18)
🟢search(query)
Search every BOZOS reference guide, dataset, note, and tool by keyword. Returns resource ids to pass to `fetch`, with the canonical URL to cite.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search words, up to 200 characters",
"maxLength": 200
}
},
"required": [
"query"
],
"additionalProperties": false
}🟢fetch(id)
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.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Resource id (ai-crawler-directory-data), or a record: ai-crawler-directory-data#gptbot or https://bozos.si/ai-crawlers.json#gptbot"
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢timeInZones(tz, at, from_tz)
Convert a time between IANA time zones, or give the current time anywhere. Same as GET https://bozos.si/api/v1/time.
Input Schema
{
"type": "object",
"properties": {
"tz": {
"type": "string",
"description": "Comma-separated IANA zones (default UTC)"
},
"at": {
"type": "string",
"description": "ISO instant with Z/offset, or local wall time when from_tz is set"
},
"from_tz": {
"type": "string",
"description": "Zone in which to interpret at"
}
},
"required": [],
"additionalProperties": false
}🟢dateMath(date, add, to)
Weekday, ISO week, date addition, and day/weekday counts. Same as GET https://bozos.si/api/v1/date.
Input Schema
{
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD (default today, UTC)"
},
"add": {
"type": "string",
"description": "Duration like 45d, -3w, 2m, 1y, 1y2m3d"
},
"to": {
"type": "string",
"description": "Second date for differences"
}
},
"required": [],
"additionalProperties": false
}🟢exactCalc(expr, digits)
Exact rational arithmetic with no floating-point error. Same as GET https://bozos.si/api/v1/calc.
Input Schema
{
"type": "object",
"properties": {
"expr": {
"type": "string",
"description": "Expression using + - * / ^ ( ) decimals and e-notation; URL-encode + as %2B"
},
"digits": {
"type": "string",
"description": "Decimal places for non-terminating results (default 50, max 1000)"
}
},
"required": [
"expr"
],
"additionalProperties": false
}🟢countText(text, char, case)
Count characters, words, bytes, and occurrences of a letter or substring. Same as GET https://bozos.si/api/v1/count.
Input Schema
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Text to measure (max 10,000 characters)"
},
"char": {
"type": "string",
"description": "Letter or substring to count"
},
"case": {
"type": "string",
"description": "sensitive for case-sensitive matching (default insensitive)"
}
},
"required": [
"text"
],
"additionalProperties": false
}🟢buildRobotsTxt(training, search, user_fetch, datasets, path, ...)
Generate a robots.txt naming every documented AI crawler for a policy. Same as GET https://bozos.si/api/v1/robots.
Input Schema
{
"type": "object",
"properties": {
"training": {
"type": "string",
"description": "allow or block (default block)"
},
"search": {
"type": "string",
"description": "allow or block (default allow)"
},
"user_fetch": {
"type": "string",
"description": "allow or block (default allow)"
},
"datasets": {
"type": "string",
"description": "allow or block (default: same as training)"
},
"path": {
"type": "string",
"description": "Path to disallow (default /)"
},
"sitemap": {
"type": "string",
"description": "Absolute sitemap URL to append"
},
"signals": {
"type": "string",
"description": "yes to add a Content-Signal line"
}
},
"required": [],
"additionalProperties": false
}🟢draftContactMessage(kind, resource_id, url, summary, quoted_claim, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"kind": {
"enum": [
"correction",
"question",
"source",
"broken-link",
"data-request",
"feedback"
]
},
"resource_id": {
"type": "string",
"description": "A stable id from https://bozos.si/content-index.json"
},
"url": {
"type": "string",
"format": "uri",
"description": "A https://bozos.si URL, used when no resource_id fits"
},
"summary": {
"type": "string",
"minLength": 1,
"maxLength": 140
},
"quoted_claim": {
"type": "string",
"maxLength": 4000,
"description": "Exact text, JSON field path and value, or URL in question. Required for corrections."
},
"proposed": {
"type": "string",
"maxLength": 4000,
"description": "What you believe is correct, or what you need"
},
"details": {
"type": "string",
"maxLength": 4000
},
"evidence": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string",
"format": "uri"
},
"description": "Required (at least one) for corrections and source suggestions"
},
"credit": {
"type": "boolean",
"default": true,
"description": "Credit the agent name in the public corrections log"
},
"via": {
"enum": [
"home",
"contact-page",
"contact-json",
"llms",
"llms-full",
"agents-json",
"content-index",
"dataset",
"mcp",
"api",
"security-txt",
"footer"
],
"description": "Where you found BOZOS contact details, for example llms or mcp. Tags the subject so BOZOS can tell which surfaces agents use."
},
"sender": {
"type": "object",
"required": [
"agent",
"human_reviewed"
],
"properties": {
"agent": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"operator": {
"type": "string",
"maxLength": 120
},
"reply_to": {
"type": "string",
"maxLength": 200,
"description": "Optional reply address. Include only if your principal agrees to share it."
},
"human_reviewed": {
"type": "boolean"
}
}
}
},
"required": [
"kind",
"summary",
"sender"
],
"title": "BOZOS Agent Message v1",
"description": "A correction, question, or suggestion an AI agent wants to send to BOZOS. POST it to /api/v1/contact-draft to receive a validated email and X post. Nothing is sent by the API."
}🟢planAgentRetrieval(resources, cache, constraints)
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.
Input Schema
{
"type": "object",
"properties": {
"resources": {
"type": "array",
"items": {
"$ref": "#/$defs/resource"
}
},
"cache": {
"type": "array",
"items": {
"$ref": "#/$defs/cachedResource"
}
},
"constraints": {
"type": "object",
"properties": {
"accepted_types": {
"type": "array",
"items": {
"type": "string"
}
},
"modified_since": {
"type": "string",
"format": "date-time"
},
"max_items": {
"type": "integer",
"minimum": 0
},
"max_total_bytes": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}
},
"required": [
"resources"
],
"title": "Agent retrieval plan request",
"$defs": {
"resource": {
"type": "object",
"required": [
"url"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri",
"pattern": "^https?://"
},
"type": {
"type": "string"
},
"last_modified": {
"type": "string",
"format": "date-time"
},
"etag": {
"type": "string"
},
"sha256": {
"type": "string",
"pattern": "^(sha256:)?[a-fA-F0-9]{64}$"
},
"bytes": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"cachedResource": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"pattern": "^https?://"
},
"last_modified": {
"type": "string",
"format": "date-time"
},
"etag": {
"type": "string"
},
"sha256": {
"type": "string",
"pattern": "^(sha256:)?[a-fA-F0-9]{64}$"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}🟢auditAgentDiscovery(base_url, robots_txt, llms_txt, sitemap_xml, page_html, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"base_url": {
"type": "string",
"format": "uri",
"pattern": "^https?://"
},
"robots_txt": {
"type": "string"
},
"llms_txt": {
"type": "string"
},
"sitemap_xml": {
"type": "string"
},
"page_html": {
"type": "string"
},
"agent_index": {
"type": "object"
}
},
"required": [
"base_url",
"robots_txt",
"llms_txt",
"sitemap_xml",
"page_html",
"agent_index"
],
"title": "Agent discovery audit bundle",
"additionalProperties": false
}🟢actionPreflight(action)
Validate, normalize, and fingerprint a proposed agent action. Same as POST https://bozos.si/api/v1/preflight.
Input Schema
{
"type": "object",
"properties": {
"action": {
"title": "BOZOS Action Preflight v1",
"description": "A proposed agent action that can be normalized, reviewed, fingerprinted, and verified before execution.",
"type": "object",
"additionalProperties": false,
"required": [
"tool",
"summary",
"arguments",
"authority_basis",
"side_effects",
"data_touched",
"reversible",
"success_criteria"
],
"properties": {
"tool": {
"type": "string",
"minLength": 1
},
"summary": {
"type": "string",
"minLength": 1
},
"arguments": {},
"authority_basis": {
"type": "string",
"minLength": 1
},
"side_effects": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
}
},
"data_touched": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
}
},
"recipients": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"default": []
},
"maximum_cost": {
"oneOf": [
{
"type": "null"
},
{
"type": "object",
"additionalProperties": false,
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"type": "number",
"minimum": 0
},
"currency": {
"type": "string",
"minLength": 1
}
}
}
]
},
"reversible": {
"type": "boolean"
},
"rollback_plan": {
"type": [
"string",
"null"
]
},
"success_criteria": {
"type": "string",
"minLength": 1
},
"idempotency_key": {
"type": [
"string",
"null"
]
},
"expires_at": {
"type": [
"string",
"null"
],
"format": "date-time"
}
}
}
},
"required": [
"action"
]
}🟢verifyApprovedAction(approved_fingerprint, action)
Verify that an action still matches its approved fingerprint. Same as POST https://bozos.si/api/v1/verify.
Input Schema
{
"type": "object",
"properties": {
"approved_fingerprint": {
"type": "string",
"pattern": "^sha256:[a-f0-9]{64}$"
},
"action": {
"title": "BOZOS Action Preflight v1",
"description": "A proposed agent action that can be normalized, reviewed, fingerprinted, and verified before execution.",
"type": "object",
"additionalProperties": false,
"required": [
"tool",
"summary",
"arguments",
"authority_basis",
"side_effects",
"data_touched",
"reversible",
"success_criteria"
],
"properties": {
"tool": {
"type": "string",
"minLength": 1
},
"summary": {
"type": "string",
"minLength": 1
},
"arguments": {},
"authority_basis": {
"type": "string",
"minLength": 1
},
"side_effects": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
}
},
"data_touched": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
}
},
"recipients": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"default": []
},
"maximum_cost": {
"oneOf": [
{
"type": "null"
},
{
"type": "object",
"additionalProperties": false,
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"type": "number",
"minimum": 0
},
"currency": {
"type": "string",
"minLength": 1
}
}
}
]
},
"reversible": {
"type": "boolean"
},
"rollback_plan": {
"type": [
"string",
"null"
]
},
"success_criteria": {
"type": "string",
"minLength": 1
},
"idempotency_key": {
"type": [
"string",
"null"
]
},
"expires_at": {
"type": [
"string",
"null"
],
"format": "date-time"
}
}
}
},
"required": [
"approved_fingerprint",
"action"
]
}🟢textStats(text)
Measure text deterministically. Same as POST https://bozos.si/api/v1/text-stats.
Input Schema
{
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
]
}🟢canonicalizeJson(value)
Canonicalize JSON and compute SHA-256. Same as POST https://bozos.si/api/v1/canonicalize.
Input Schema
{
"type": "object",
"properties": {
"value": {}
},
"required": [
"value"
]
}🟢datasetChanges(since, dataset, records)
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.
Input Schema
{
"type": "object",
"properties": {
"since": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date as YYYY-MM-DD; only changes after this date are returned"
},
"dataset": {
"type": "string",
"description": "Comma-separated dataset resource ids or file names (default: all)"
},
"records": {
"type": "string",
"enum": [
"full",
"ids"
],
"description": "ids to list changed record ids without their content; full (default) includes each record"
}
},
"required": [
"since"
],
"additionalProperties": false
}🟢checkRobotsTxt(robots, agent, path)
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.
Input Schema
{
"type": "object",
"properties": {
"robots": {
"type": "string",
"description": "The robots.txt text, URL-encoded (up to 65,536 characters)"
},
"agent": {
"type": "string",
"description": "A crawler token (GPTBot), a full user-agent string, or all (default: every crawler in the directory)"
},
"path": {
"type": "string",
"description": "Path (with optional query) or full URL to check (default /)"
}
},
"required": [
"robots"
],
"additionalProperties": false
}🟢identifyUserAgent(ua)
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.
Input Schema
{
"type": "object",
"properties": {
"ua": {
"type": "string",
"maxLength": 1000,
"description": "The full User-Agent header value"
}
},
"required": [
"ua"
],
"additionalProperties": false
}🟢utcNow
Get the current UTC and Unix time. Same as GET https://bozos.si/api/v1/now.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}Community
Evidence