Servidor MCP

Professor Sausages — Web & Documents

com.professorsausages/sausage-web

Qué hace este MCP

Reads web pages and PDFs, performs image OCR or description, and provides news, weather, market-calendar, timezone, and business-hours data.

find_data
Find the right data source
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.
Esquema de entrada
{'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"}}}
holidays
Market calendars & settlement dates
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.
Esquema de entrada
{'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.'}}}
image_to_text
OCR or describe an image
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.
Esquema de entrada
{'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.'}}}
news
Headlines and news search
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.
Esquema de entrada
{'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.'}}}
news_batch
Several news reads in one paid call
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 (amount, asset, network), sign them, then call again with x_payment. The free `pricing` tool lists every price at once.
Esquema de entrada
{'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.'}}}
news_poll
Poll the news for what's new since your last call
The polling loop for a news-watching agent. First call: omit `since` — you get the current page plus a `next_cursor`. Every later call: pass that `next_cursor` as `since` and receive ONLY articles ingested after it, oldest first, plus the next cursor to store. Follow the whole pile (optionally one `category`) or a curated high-signal `topic` tape (ai, crypto). The pile refreshes every 15 minutes (`suggested_interval_seconds`); dedupe by article `id`, and by `cluster_id` to keep one record per story. A poll with nothing new is still a complete answer (new_count 0, cursor unchanged). Full loop + a paying Node poller: /skills/news.md. 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.
Esquema de entrada
{'type': 'object', 'properties': {'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.'}, '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.'}, 'topic': {'enum': ['ai', 'crypto'], 'type': 'string', 'examples': ['ai'], 'description': 'Optional: follow a curated high-signal tape instead of the whole pile (marketing, how-tos and chatter filtered out). Not combinable with `category`.'}, 'category': {'enum': ['world', 'business', 'technology', 'ai', 'crypto', 'nft', 'markets', 'health', 'science', 'energy', 'politics', 'climate', 'sports', 'general'], 'type': 'string', 'examples': ['technology'], 'description': 'Optional: follow one category of the whole pile. Not combinable with `topic`.'}, '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.'}}}
pdf_extract
PDF to text or JSON
Extract any PDF up to 10 MB by URL. format='text' returns one clean plain-text string; format='json' returns a per-page text array plus document metadata. Parsed in-Worker, no upstream service. 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.
Esquema de entrada
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'examples': ['https://raw.githubusercontent.com/py-pdf/sample-files/main/001-trivial/minimal-document.pdf'], 'description': 'URL of the PDF.'}, 'format': {'enum': ['text', 'json'], 'type': 'string', 'default': 'text', 'examples': ['text'], 'description': 'Flat text, or per-page JSON with metadata.'}, '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.'}}}
pricing
Price list
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.
Esquema de entrada
{'type': 'object', 'properties': {}}
read_url
Read a page as markdown
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.
Esquema de entrada
{'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.'}}}
request_data
Request missing data
The suggestion box: ask for data we don't have (a pre-2015 filing, an uncovered ticker, an unsupported chain, a whole dataset). Requests feed the nightly ingestion queue — filings are usually available within ~24h. Include contact if you want to hear back. Free.
Esquema de entrada
{'type': 'object', 'required': ['description'], 'properties': {'contact': {'type': 'string', 'examples': ['https://example.com/contact'], 'description': 'Optional: URL/email/handle for follow-up'}, 'use_case': {'type': 'string', 'examples': ['a risk-factor diffing agent'], 'description': "Optional: what you're building"}, 'description': {'type': 'string', 'examples': ['Tesla 10-K for fiscal 2014'], 'description': 'What data you need, in your own words'}}}
timezone
Time, offsets & business hours
Current local time, UTC offset and DST state for an IANA zone. view='offset' answers at a specific instant; view='convert' moves a wall-clock time between two zones; view='business_hours' says whether an instant is inside local business hours. 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.
Esquema de entrada
{'type': 'object', 'required': ['zone'], 'properties': {'at': {'type': 'string', 'format': 'date-time', 'examples': ['2026-01-15T12:00:00Z'], 'description': 'Instant for offset/business_hours.'}, 'to': {'type': 'string', 'examples': ['Asia/Tokyo'], 'description': "Target zone (view='convert')."}, 'open': {'type': 'integer', 'default': 9, 'examples': [9], 'description': 'Business day start hour.'}, 'time': {'type': 'string', 'examples': ['2026-07-25T09:00:00'], 'description': "Wall-clock time to convert, no offset (view='convert')."}, 'view': {'enum': ['now', 'offset', 'convert', 'business_hours'], 'type': 'string', 'default': 'now', 'examples': ['now'], 'description': 'Which time question to answer.'}, 'zone': {'type': 'string', 'examples': ['America/New_York'], 'description': 'IANA zone.'}, 'close': {'type': 'integer', 'default': 17, 'examples': [17], 'description': 'Business day end hour.'}, '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.'}}}
weather
Weather now, forecast, or alerts
Current conditions for a named place or coordinate. view='forecast' returns the hourly series; view='alerts' returns active severe-weather alerts (US coverage). 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.
Esquema de entrada
{'type': 'object', 'properties': {'lat': {'type': 'number', 'examples': [35.6895], 'description': 'Latitude (with lon).'}, 'lon': {'type': 'number', 'examples': [139.6917], 'description': 'Longitude (with lat).'}, 'view': {'enum': ['current', 'forecast', 'alerts'], 'type': 'string', 'default': 'current', 'examples': ['current'], 'description': 'Which weather read to perform.'}, 'hours': {'type': 'integer', 'default': 24, 'examples': [24], 'description': 'Forecast horizon in hours.'}, 'place': {'type': 'string', 'examples': ['Tokyo'], 'description': 'Place name — resolved via the built-in gazetteer. Use this or lat+lon.'}, '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.'}}}
Eliminado
screenshot_url
23 de September de 2026 a las 02:54
Eliminado
icon_search
23 de September de 2026 a las 02:54
Añadido
news_batch
23 de September de 2026 a las 02:54
Añadido
news_poll
23 de September de 2026 a las 02:54
Añadido
icon_search
17 de September de 2026 a las 12:36
Añadido
timezone
17 de September de 2026 a las 12:36
Añadido
holidays
17 de September de 2026 a las 12:36
Añadido
weather
17 de September de 2026 a las 12:36
Añadido
news
17 de September de 2026 a las 12:36
Añadido
image_to_text
17 de September de 2026 a las 12:36
Añadido
pdf_extract
17 de September de 2026 a las 12:36
Añadido
screenshot_url
17 de September de 2026 a las 12:36
Añadido
read_url
17 de September de 2026 a las 12:36
Añadido
request_data
17 de September de 2026 a las 12:36
Añadido
pricing
17 de September de 2026 a las 12:36
Añadido
find_data
17 de September de 2026 a las 12:36