{"serverId":"mcp-registry/com.professorsausages/sausage-web","tools":[{"name":"find_data","fixed":{"name":"find_data","description":"Describe the data you need in plain language (e.g. 'Apple risk factors 2023', 'is this token a honeypot', 'is this email deliverable', 'read this page'). Searches this server's datasets first, then the whole Professor Sausages catalog, and returns matching endpoints with method, URL, price, and how to call them. Free.","inputSchema":{"type":"object","required":["task"],"properties":{"task":{"type":"string","examples":["Apple risk factors 2023"],"description":"What you're trying to find or do, in your own words"}}},"annotations":{"readOnlyHint":true},"title":"Find the right data source"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":155,"tokensAfter":155},{"name":"holidays","fixed":{"name":"holidays","description":"Is a market open on a date, and why not if it isn't. view='next_session' finds the next open day; view='settle' computes a T+N settlement date skipping weekends and holidays; view='business_days' counts open sessions in a range; view='year' lists a calendar's whole year. Paid: call without x_payment to receive this call's exact terms (amount, asset, network), sign them, then call again with x_payment. The free `pricing` tool lists every price at once.","inputSchema":{"type":"object","properties":{"to":{"type":"string","format":"date","examples":["2026-07-31"],"description":"Range end (view='business_days')."},"date":{"type":"string","format":"date","examples":["2026-07-03"],"description":"Reference date (YYYY-MM-DD)."},"days":{"type":"integer","default":2,"examples":[2],"description":"N in T+N (view='settle')."},"from":{"type":"string","format":"date","examples":["2026-07-01"],"description":"Range start (view='business_days')."},"view":{"enum":["is_open","next_session","settle","business_days","year"],"type":"string","default":"is_open","examples":["is_open"],"description":"Which calendar question to answer."},"year":{"type":"integer","examples":[2026],"description":"Calendar year (view='year')."},"market":{"enum":["nyse","us-federal","lse","target2","weekend-only"],"type":"string","default":"nyse","examples":["nyse"],"description":"Which calendar to use."},"x_payment":{"type":"string","description":"Optional signed x402 payment payload (base64, what the X-PAYMENT header carries). Omit to receive the exact payment terms; sign them (e.g. @x402/fetch) and call again with this argument to settle and get the data."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Market calendars & settlement dates"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":466,"tokensAfter":466},{"name":"image_to_text","fixed":{"name":"image_to_text","description":"Transcribe an image to text (OCR) or describe it via a vision model — steerable with your own prompt. Paid: call without x_payment to receive this call's exact terms (amount, asset, network), sign them, then call again with x_payment. The free `pricing` tool lists every price at once.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","examples":["https://raw.githubusercontent.com/python-pillow/Pillow/main/Tests/images/hopper.png"],"description":"URL of the image."},"prompt":{"type":"string","examples":["Describe this image in one sentence."],"description":"What to do with it; omit for a straight transcription."},"x_payment":{"type":"string","description":"Optional signed x402 payment payload (base64, what the X-PAYMENT header carries). Omit to receive the exact payment terms; sign them (e.g. @x402/fetch) and call again with this argument to settle and get the data."},"max_tokens":{"type":"integer","default":512,"examples":[512],"description":"Output cap."}}},"annotations":{"readOnlyHint":true},"title":"OCR or describe an image"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":292,"tokensAfter":292},{"name":"news","fixed":{"name":"news","description":"Newest headlines from a deduped, tiered direct-feed pile (official press, wires and majors). Pass q to keyword-search the retained multi-day archive instead; category='ai' or 'crypto' return the high-signal curated cuts. Snapshot of ingested feeds, not a live web search. Paid: call without x_payment to receive this call's exact terms (amount, asset, network), sign them, then call again with x_payment. The free `pricing` tool lists every price at once.","inputSchema":{"type":"object","properties":{"q":{"type":"string","examples":["stablecoin regulation"],"description":"Keyword query — switches to archive search."},"limit":{"type":"integer","default":10,"examples":[10],"description":"Max headlines."},"since":{"type":"string","format":"date-time","examples":["2026-07-21T00:00:00Z"],"description":"Only items after this instant (ai/crypto cuts)."},"category":{"enum":["world","business","technology","ai","crypto","markets","health","science","energy","politics","climate","sports"],"type":"string","examples":["technology"],"description":"Headline category; 'ai' and 'crypto' are curated high-signal cuts."},"x_payment":{"type":"string","description":"Optional signed x402 payment payload (base64, what the X-PAYMENT header carries). Omit to receive the exact payment terms; sign them (e.g. @x402/fetch) and call again with this argument to settle and get the data."}}},"annotations":{"readOnlyHint":true},"title":"Headlines and news search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":392,"tokensAfter":392},{"name":"news_batch","fixed":{"name":"news_batch","description":"Up to 10 headlines / ai / crypto / search reads behind ONE payment (POST /news/batch). Each request names a `route` and carries that route's own parameters — including `since` with a cursor, so one batch can advance several polls at once. `data.results[i]` is exactly the single-route answer for `requests[i]`, in order, each with its own `next_cursor` to store per feed. Every element is validated before any payment is asked for. Paid: call without x_payment to receive this call's exact terms (amo","inputSchema":{"type":"object","required":["requests"],"properties":{"requests":{"type":"array","items":{"type":"object","required":["route"],"properties":{"q":{"type":"string","examples":["stablecoin regulation"],"maxLength":120,"minLength":1,"description":"search only: keywords (AND-ed) and \"quoted phrases\"."},"limit":{"type":"integer","default":20,"maximum":100,"minimum":1,"examples":[20],"description":"Most articles to return. If new_count exceeds it, call again at once with next_cursor to drain the rest."},"route":{"enum":["headlines","ai","crypto","search"],"type":"string","examples":["ai"],"description":"Which news read this element is."},"since":{"type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,6})?)?(Z|[+-]\\d{2}:?\\d{2})?)?|nc1\\.[A-Za-z0-9_-]{4,120})$","examples":["2026-07-21T00:00:00Z"],"maxLength":160,"description":"Omit on your FIRST call. After that pass the `next_cursor` from your previous answer (an opaque nc1.… token — store it, never parse it) and only articles ingested after it come back, oldest first, never a repeat or a gap. An ISO date-time also works to start from an instant."},"category":{"enum":["world","business","technology","ai","crypto","nft","markets","health","science","energy","politics","climate","sports","general"],"type":"string","examples":["technology"],"description":"headlines only: restrict to one category."}}},"examples":[[{"limit":5,"route":"ai"},{"route":"crypto","since":"2026-07-21T00:00:00Z"},{"q":"stablecoin regulation","route":"search"}]],"maxItems":10,"minItems":1,"description":"1 to 10 reads, answered in order."},"x_payment":{"type":"string","description":"Optional signed x402 payment payload (base64, what the X-PAYMENT header carries). Omit to receive the exact payment terms; sign them (e.g. @x402/fetch) and call again with this argument to settle and get the data."}}},"annotations":{"readOnlyHint":true},"title":"Several news reads in one paid call"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":674,"tokensAfter":674},{"name":"pricing","fixed":{"name":"pricing","description":"Every endpoint this server fronts, with its exact per-call USD price (x402, USDC on Base) and a one-line summary, read live from the route table. Free.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"Price list"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":65,"tokensAfter":65},{"name":"read_url","fixed":{"name":"read_url","description":"Render a URL in a real headless browser (JavaScript executed) and return clean, LLM-ready markdown. Use this when fetch() gives you an empty shell or a bot wall. Paid: call without x_payment to receive this call's exact terms (amount, asset, network), sign them, then call again with x_payment. The free `pricing` tool lists every price at once.","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","examples":["https://example.com/"],"description":"Absolute URL to read."},"x_payment":{"type":"string","description":"Optional signed x402 payment payload (base64, what the X-PAYMENT header carries). Omit to receive the exact payment terms; sign them (e.g. @x402/fetch) and call again with this argument to settle and get the data."}}},"annotations":{"readOnlyHint":true},"title":"Read a page as markdown"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":224,"tokensAfter":224}],"toolsChanged":7,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}