readSource
Read a public HTTPS page or PDF as text with source and citation metadata
Read a public HTTPS page or PDF as text with source and citation metadata. Returns the page text itself, not a model-written summary, so you can quote and cite it. No AI model. Checks robots.txt for BOZOSReader, does not execute scripts, stores no content in the application, and makes outbound public HTTPS requests. Supports HTML, Markdown, plain text, and the text layer of PDFs (pages gives each page's code-point range); no OCR or JavaScript rendering. Limits: 15 seconds, 3 page redirects, 2 MiB source (10 MiB and 300 pages for PDFs), 100000 output code points. GET also accepts url, max_characters and format directly, or a JSON body in ?json= / ?b64=. Declared canonical URL and author/date fields are publisher-supplied and unverified. Cite final_url. Errors always return JSON. gzip, deflate, and Brotli response bodies are decoded before the size limit and source hash are computed. Headless instructions: https://bozos.si/tools/source-reader.md. Source failures include recovery and upstream. For upstream_error, robots_unavailable, and retry_after_redirect, upstream contains stage (robots or source), HTTP status, and parsed Retry-After seconds; other failures set upstream to null. No automatic retries or waiting. Redirects requesting a future delay stop with retry_after_redirect. For retry_later failures with a valid upstream delay, the response exposes a Retry-After header; MCP preserves it in si.bozos/retry-after metadata. Upstream failures continue to use HTTP 424. Set include_quote_source:true with JSON output to also receive the exact matching text from this retrieval, with its own hash and truncation flag. HTML text excludes generated titles and link destinations; Markdown/plain text keep literal syntax (outer whitespace trimmed); PDFs use the text layer. Reuse quote_source.source_text and source_truncated in supplied-text checks. Keep original retrieval metadata yourself. The second representation is opt-in and independently bounded by max_characters. Same as P
Parametersurlrequiredmax_charactersinclude_quote_source
checkQuote
Check a quotation against its source without AI
Check a quotation against its source without AI. Use this to locate a quotation in supplied text or one public HTTPS source. Returns original passages, ranges, context, hashes, and URL provenance. Supply exactly one of source_text or url. Only whitespace may be normalized; case, punctuation, and word boundaries are preserved. Does not judge truth, paraphrases, or author intent. Source content is not retained. Source URL failures return non-2xx and source_unavailable; absent quotes in partial sources remain inconclusive. Source failures include recovery and upstream. For upstream_error, robots_unavailable, and retry_after_redirect, upstream contains stage (robots or source), HTTP status, and parsed Retry-After seconds; other failures set upstream to null. No automatic retries or waiting. Redirects requesting a future delay stop with retry_after_redirect. For retry_later failures with a valid upstream delay, the response exposes a Retry-After header; MCP preserves it in si.bozos/retry-after metadata. Upstream failures continue to use HTTP 424. To read a page before choosing quotations, call readSource with include_quote_source:true, then supply its quote_source.source_text and source_truncated without refetching. Retain the original reader response for URL provenance; submitted text is still labeled supplied_text. Same as POST https://bozos.si/api/v1/quote-check.
Parametersurlquoterequiredmax_matchessource_textmax_characterssource_truncatedcontext_charactersnormalize_whitespace
checkCitations
Check cited links or quotations in supplied source text, without AI
Check cited links or quotations in supplied source text, without AI. Use this to check 1-10 cited public HTTPS links before relying on them, in one call. Send urls to check links, or citations to also check a quotation per link: each quote is matched against the same retrieval with Quote Checker's literal rules (case, punctuation, and word boundaries preserved; whitespace normalized) and returns up to three original passages with offsets and, for PDFs, page numbers. Returns, per link, the final URL, redirects, HTTP status, content type, title, content hash, and a specific failure reason. Readable means the reader got extractable text; it does not show the page is accurate or supports a claim. A quote match means the words appear, not that they support the claim. Failed means this reader could not read it, which can mean a dead link or a site that refuses automated requests, needs JavaScript or a login, or disallows BOZOSReader in robots.txt; its quotation is then unchecked (quote_check null). Uses the guarded Source Reader. Content is not retained. Repeat a URL for multiple quotations: each distinct requested URL is read once per batch (fragments ignored, query strings preserved, redirect aliases kept separate). Sources are retrieved again in later requests. Optional unique citation ids are echoed on success and failure. Results explain offsets, matching rules, checked text representation and lengths, and distinguish matches_truncated from source_truncated. Inspect individual results even when HTTP or MCP reports a successful batch. For text your agent already has, send sources [{id,source_text,source_truncated?}] and citations [{source_id,quote,id?}]. Several citations can share a source_id. These checks make no source-fetch requests and return status supplied_text, null URL/HTTP/retrieval metadata, and a checked_text_sha256; they do not verify origin or authenticity. Mixed URL and supplied-text batches are allowed. summary.supplied counts supplied-text entries sep
Parametersurlssourcescitations
structuredDiff
Compare two JSON values or two texts without AI
Compare two JSON values or two texts without AI. Use this to see exactly what changed between two supplied versions. format json (default): returns added, removed, and changed paths as JSON Pointers; objects compare by key (order ignored), arrays by index (no move detection), and a different type counts as a change. format text: returns line hunks with one-based line numbers, comparing exactly including whitespace and case. Returns canonical SHA-256 hashes (json) or text hashes. Up to 500 changes are returned; counts cover all. Limits: 64 KiB body, 2000 lines per text, 64 nesting levels. Nothing is fetched or retained. A difference is not a judgment of meaning. Same as POST https://bozos.si/api/v1/diff.
Parametersafterrequiredbeforerequiredformat
validateJsonSchema
Validate JSON against a JSON Schema without AI
Validate JSON against a JSON Schema without AI. Use this to check supplied data against a supplied JSON Schema before relying on it. Returns valid, and each failure with the JSON Pointer of the failing value, the schema path, the keyword, and the reason. Nothing is repaired or coerced. Drafts 2020-12 (default), 2019-09, 7, and 4. References resolve only inside the supplied schema; nothing is fetched. The pattern and patternProperties keywords are refused with unsupported_keyword because user-supplied regular expressions can hang a server. Limits: 64 KiB total, 100 errors returned (error_count covers all), 64 nesting levels. Nothing is retained. Valid means this instance satisfies this schema, not that the data is correct. Same as POST https://bozos.si/api/v1/schema-validate.
Parametersdraftschemarequiredinstancerequired
inspectAgentAccess
Inspect how a public URL looks to AI agents, without AI
Inspect how a public URL looks to AI agents, without AI. Use this to see what an agent would encounter at a public HTTPS URL. Reports robots.txt status and, for BOZOSReader and five named AI crawlers plus *, whether the path is allowed; the page's redirects, status, content type, selected headers (cache, Link, X-Robots-Tag, Content-Signal), title, description, canonical, meta robots, alternate and service-desc link relations, JSON-LD and anchor counts; whether the URL serves text/markdown when asked; and whether llms.txt, llms-full.txt, the API catalog, openapi.json, the MCP server card, and the sitemap exist (JSON entry points are checked for valid JSON). Respects robots.txt for BOZOSReader: a disallowed or unreadable robots.txt means the page is not fetched. At most 20 requests, 20 seconds; no scripts run; nothing is retained or scored. An allowed value is what robots.txt says, not what an operator does. Same as POST https://bozos.si/api/v1/access-inspect.
Parametersurlrequired
Search every BOZOS reference guide, dataset, note, and tool by keyword. Returns resource ids to pass to `fetch`, with the canonical URL to cite.
Parametersqueryrequired
fetch
Read a BOZOS resource
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 agent-recipes#check-existing-text for one executable recipe, a record permalink (https://bozos.si/ai-crawlers.json#gptbot) or <dataset id>#<record id> to get one record. Cite the returned url.
Parametersidrequired
submitFeedback
Submit public feedback directly to the private BOZOS inbox
Submit public feedback directly to the private BOZOS inbox. WRITE OPERATION. Saves a private report and may queue a server-side notification only to [email protected]. No sender email account, login, browser, or API key is required. Use only within your principal's permissions. Sender names are unverified. Corrections require quoted_claim and evidence; source suggestions require evidence. No arbitrary recipients or attachments. Identical normalized reports return the original receipt. A receipt confirms storage, not email delivery or acceptance of a correction. GET and HEAD return 405 and never write. Limits: 16 KiB per request, 5 new reports/minute and 50 per rolling day globally. Instructions: https://bozos.si/tools/contact-submit.md. Same as POST https://bozos.si/api/v1/contact-submit.
Parametersurlviakindrequiredcreditsenderrequireddetailssummaryrequiredevidenceproposedresource_idquoted_claim