[{"id":"scrape","name":"Web Scrape & Readability Extract","description":"Fetches a URL server-side and returns clean, readable markdown or plain text extracted from the main content of the page. Strips nav, ads, and boilerplate. Useful for agents that need page content without running their own browser or HTML parser.","input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The http(s) URL to fetch and extract content from."},"format":{"type":"string","enum":["markdown","text"],"default":"markdown","description":"Output content format."}},"required":["url"],"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean"},"url":{"type":"string"},"title":{"type":"string"},"markdown":{"type":"string","description":"Present when format=markdown"},"text":{"type":"string","description":"Present when format=text"},"fetched_at":{"type":"string","format":"date-time"},"content_length":{"type":"integer"}},"required":["ok","url","fetched_at"]},"price_usd_per_call":0.01,"free_tier":{"calls_per_day":30},"rate_limit":{"per_minute":10,"per_day":30},"endpoint":"/api/v1/scrape","method":"POST","payment":{"x402":"live","stripe_mpp":"live"}},{"id":"url-meta","name":"URL Metadata & Unshortener","description":"Follows redirects on a URL server-side and returns the final resolved URL, the full redirect chain with status codes, the content type, and the HTML <title> if present. Cheaper and faster than a full scrape when an agent just needs to resolve a shortened/tracking link or check where a URL leads before fetching it.","input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The http(s) URL to resolve."}},"required":["url"],"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean"},"final_url":{"type":"string"},"status_chain":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"status":{"type":"integer"}}}},"content_type":{"type":"string"},"title":{"type":"string","description":"Present when the final response is HTML"},"fetched_at":{"type":"string","format":"date-time"}},"required":["ok","final_url","status_chain","fetched_at"]},"price_usd_per_call":0.002,"free_tier":{"calls_per_day":30},"rate_limit":{"per_minute":10,"per_day":30},"endpoint":"/api/v1/url-meta","method":"POST","payment":{"x402":"live","stripe_mpp":"live"}},{"id":"json-validate","name":"JSON Schema Validate","description":"Validates a JSON data payload against a JSON Schema (draft-07/2019-09/2020-12) and returns whether it's valid plus a list of validation errors with paths. Useful for agents that generate structured output and need to check it against a contract before acting on it or handing it off.","input_schema":{"type":"object","properties":{"schema":{"type":"object","description":"A JSON Schema object."},"data":{"description":"The JSON value to validate against the schema."}},"required":["schema","data"],"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean"},"valid":{"type":"boolean"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"},"keyword":{"type":"string"}}}}},"required":["ok","valid","errors"]},"price_usd_per_call":0.002,"free_tier":{"calls_per_day":30},"rate_limit":{"per_minute":10,"per_day":30},"endpoint":"/api/v1/json-validate","method":"POST","payment":{"x402":"live","stripe_mpp":"live"}},{"id":"text-diff","name":"Text Diff","description":"Computes a line-based diff between two text blocks and returns either a unified-diff-style string or a structured JSON list of add/remove/equal line ops. Useful for agents comparing document revisions, checking generated output against a reference, or summarizing what changed between two versions of a file.","input_schema":{"type":"object","properties":{"a":{"type":"string","description":"Original text."},"b":{"type":"string","description":"Modified text."},"format":{"type":"string","enum":["unified","json"],"default":"unified","description":"Output diff format."}},"required":["a","b"],"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean"},"format":{"type":"string"},"unified":{"type":"string","description":"Present when format=unified"},"ops":{"type":"array","description":"Present when format=json","items":{"type":"object","properties":{"op":{"type":"string","enum":["equal","add","remove"]},"line":{"type":"string"}}}},"additions":{"type":"integer"},"deletions":{"type":"integer"}},"required":["ok","format"]},"price_usd_per_call":0.002,"free_tier":{"calls_per_day":30},"rate_limit":{"per_minute":10,"per_day":30},"endpoint":"/api/v1/text-diff","method":"POST","payment":{"x402":"live","stripe_mpp":"live"}},{"id":"id-util","name":"ID & Hash Utilities","description":"Generates a random UUID v4, or computes a SHA-256, SHA-1, or MD5 hash of a given input string. Trivial, zero-risk bookkeeping utility for agents that need stable identifiers or content hashes without shelling out to a crypto library themselves.","input_schema":{"type":"object","properties":{"op":{"type":"string","enum":["uuid","sha256","sha1","md5"],"description":"'uuid' generates a random UUID v4 (input ignored). The hash ops require 'input'."},"input":{"type":"string","description":"Required for sha256/sha1/md5. Ignored for uuid."}},"required":["op"],"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean"},"op":{"type":"string"},"result":{"type":"string"}},"required":["ok","op","result"]},"price_usd_per_call":0.001,"free_tier":{"calls_per_day":100},"rate_limit":{"per_minute":30,"per_day":100},"endpoint":"/api/v1/id-util","method":"POST","payment":{"x402":"live","stripe_mpp":"live"}},{"id":"fetch-range","name":"HTTP Range Fetch (probe & partial read)","description":"Probes a URL for size/type/range support (HEAD), or fetches an arbitrary byte window (up to 256 KiB per call) from a large remote resource using HTTP Range requests -- logs, CSVs, JSONL dumps, lockfiles, archives -- without downloading the whole file. Returns the bytes as UTF-8 text when safe, else base64, plus offset/length/total-size metadata so agents can page through a resource incrementally.","input_schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"The http(s) URL to probe or read."},"mode":{"type":"string","enum":["probe","range"],"default":"probe","description":"probe = HEAD metadata only; range = fetch a byte window."},"offset":{"type":"integer","minimum":0,"default":0,"description":"Byte offset to start reading from (range mode)."},"length":{"type":"integer","minimum":1,"maximum":262144,"description":"Bytes to read, max 262144 (256 KiB). Defaults to 262144."}},"required":["url"],"additionalProperties":false},"output_schema":{"type":"object","properties":{"ok":{"type":"boolean"},"mode":{"type":"string"},"url":{"type":"string"},"status":{"type":"integer"},"accepts_ranges":{"type":"boolean"},"content_type":{"type":"string"},"total_size":{"type":["integer","null"],"description":"Total resource size in bytes if known, else null."},"offset":{"type":"integer"},"length":{"type":"integer","description":"Actual bytes returned."},"encoding":{"type":"string","enum":["utf8","base64"],"description":"How `data` is encoded (range mode)."},"data":{"type":"string","description":"The requested byte window (range mode)."},"range_honored":{"type":"boolean","description":"False if the origin ignored the Range header and the window was sliced from a full 200 response."},"fetched_at":{"type":"string","format":"date-time"}},"required":["ok","mode","url","status","fetched_at"]},"price_usd_per_call":0.003,"free_tier":{"calls_per_day":30},"rate_limit":{"per_minute":10,"per_day":30},"endpoint":"/api/v1/fetch-range","method":"POST","payment":{"x402":"live","stripe_mpp":"live"}}]