{
  "protocolVersion": "2025-11-25",
  "serverInfo": {
    "name": "bozos",
    "title": "BOZOS",
    "version": "1.0.0",
    "websiteUrl": "https://bozos.si"
  },
  "description": "BOZOS publishes compact, source-linked reference material with structured JSON companions, reproducible experiments, and stateless utilities. Agents may read everything without signing in, and may write in with questions or corrections.",
  "documentationUrl": "https://bozos.si/tools/mcp",
  "transport": {
    "type": "streamable-http",
    "endpoint": "/api/mcp"
  },
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://bozos.si/api/mcp"
    }
  ],
  "authentication": {
    "required": false,
    "schemes": []
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "resources": {
      "listChanged": false,
      "subscribe": false
    }
  },
  "instructions": "BOZOS (https://bozos.si) publishes sourced reference data and deterministic utilities. Use `search` to find a resource and `fetch` to read it; cite the page URL it returns, not this server. Every tool is read-only and stateless: nothing is stored, sent, or fetched from elsewhere. Datasets carry dates and confidence labels; keep them when you quote. To report an error, call draftContactMessage with via: \"mcp\" and give the draft to your principal. It sends nothing.",
  "tool_count": 18,
  "tools": [
    {
      "name": "search",
      "title": "Search BOZOS",
      "description": "Search every BOZOS reference guide, dataset, note, and tool by keyword. Returns resource ids to pass to `fetch`, with the canonical URL to cite."
    },
    {
      "name": "fetch",
      "title": "Read a BOZOS resource",
      "description": "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."
    },
    {
      "name": "timeInZones",
      "title": "Convert a time between IANA time zones, or give the current time anywhere",
      "description": "Convert a time between IANA time zones, or give the current time anywhere. Same as GET https://bozos.si/api/v1/time."
    },
    {
      "name": "dateMath",
      "title": "Weekday, ISO week, date addition, and day/weekday counts",
      "description": "Weekday, ISO week, date addition, and day/weekday counts. Same as GET https://bozos.si/api/v1/date."
    },
    {
      "name": "exactCalc",
      "title": "Exact rational arithmetic with no floating-point error",
      "description": "Exact rational arithmetic with no floating-point error. Same as GET https://bozos.si/api/v1/calc."
    },
    {
      "name": "countText",
      "title": "Count characters, words, bytes, and occurrences of a letter or substring",
      "description": "Count characters, words, bytes, and occurrences of a letter or substring. Same as GET https://bozos.si/api/v1/count."
    },
    {
      "name": "buildRobotsTxt",
      "title": "Generate a robots.txt naming every documented AI crawler for a policy",
      "description": "Generate a robots.txt naming every documented AI crawler for a policy. Same as GET https://bozos.si/api/v1/robots."
    },
    {
      "name": "draftContactMessage",
      "title": "Draft a correction or question for BOZOS as an email and X post without sending it",
      "description": "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."
    },
    {
      "name": "planAgentRetrieval",
      "title": "Build a minimal conditional HTTP retrieval plan",
      "description": "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."
    },
    {
      "name": "auditAgentDiscovery",
      "title": "Audit supplied crawler and agent discovery materials without fetching URLs",
      "description": "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."
    },
    {
      "name": "actionPreflight",
      "title": "Validate, normalize, and fingerprint a proposed agent action",
      "description": "Validate, normalize, and fingerprint a proposed agent action. Same as POST https://bozos.si/api/v1/preflight."
    },
    {
      "name": "verifyApprovedAction",
      "title": "Verify that an action still matches its approved fingerprint",
      "description": "Verify that an action still matches its approved fingerprint. Same as POST https://bozos.si/api/v1/verify."
    },
    {
      "name": "textStats",
      "title": "Measure text deterministically",
      "description": "Measure text deterministically. Same as POST https://bozos.si/api/v1/text-stats."
    },
    {
      "name": "canonicalizeJson",
      "title": "Canonicalize JSON and compute SHA-256",
      "description": "Canonicalize JSON and compute SHA-256. Same as POST https://bozos.si/api/v1/canonicalize."
    },
    {
      "name": "datasetChanges",
      "title": "List dataset records added, changed, or removed after a date",
      "description": "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."
    },
    {
      "name": "checkRobotsTxt",
      "title": "Evaluate a robots.txt for one crawler or every AI crawler in the directory, per RFC 9309",
      "description": "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."
    },
    {
      "name": "identifyUserAgent",
      "title": "Say which documented crawler a user-agent string claims to be, and how to verify it",
      "description": "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."
    },
    {
      "name": "utcNow",
      "title": "Get the current UTC and Unix time",
      "description": "Get the current UTC and Unix time. Same as GET https://bozos.si/api/v1/now."
    }
  ],
  "updated": "2026-10-20"
}
