Professor Sausages — Web & Documents

Read pages & files to text, news, weather, market holidays and timezones via x402.

사용해야 할까요

품질 및 안전성

A
설명 품질
98%
스키마 완전성
91%
이름 품질
83%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~3,756토큰 (도구 정의)
~2.4 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.93%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "sausage-web": {
      "url": "https://x402.professorsausages.com/mcp/web"
    }
  }
}

원격 엔드포인트

https://x402.professorsausages.com/mcp/webstreamable-http

할 수 있는 일

도구 목록

도구 (12)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢find_data(task)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "task": {
      "type": "string",
      "description": "What you're trying to find or do, in your own words",
      "examples": [
        "Apple risk factors 2023"
      ]
    }
  },
  "required": [
    "task"
  ]
}
🟢pricing

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.

입력 스키마

{
  "type": "object",
  "properties": {}
}
⚪request_data(description, use_case, contact)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "description": "What data you need, in your own words",
      "examples": [
        "Tesla 10-K for fiscal 2014"
      ]
    },
    "use_case": {
      "type": "string",
      "description": "Optional: what you're building",
      "examples": [
        "a risk-factor diffing agent"
      ]
    },
    "contact": {
      "type": "string",
      "description": "Optional: URL/email/handle for follow-up",
      "examples": [
        "https://example.com/contact"
      ]
    }
  },
  "required": [
    "description"
  ]
}
🟢read_url(url, x_payment)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Absolute URL to read.",
      "examples": [
        "https://example.com/"
      ]
    },
    "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."
    }
  },
  "required": [
    "url"
  ]
}
🟢pdf_extract(url, format, x_payment)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "URL of the PDF.",
      "examples": [
        "https://raw.githubusercontent.com/py-pdf/sample-files/main/001-trivial/minimal-document.pdf"
      ]
    },
    "format": {
      "type": "string",
      "enum": [
        "text",
        "json"
      ],
      "default": "text",
      "description": "Flat text, or per-page JSON with metadata.",
      "examples": [
        "text"
      ]
    },
    "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."
    }
  },
  "required": [
    "url"
  ]
}
🟢image_to_text(url, prompt, max_tokens, x_payment)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "URL of the image.",
      "examples": [
        "https://raw.githubusercontent.com/python-pillow/Pillow/main/Tests/images/hopper.png"
      ]
    },
    "prompt": {
      "type": "string",
      "description": "What to do with it; omit for a straight transcription.",
      "examples": [
        "Describe this image in one sentence."
      ]
    },
    "max_tokens": {
      "type": "integer",
      "default": 512,
      "description": "Output cap.",
      "examples": [
        512
      ]
    },
    "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."
    }
  },
  "required": [
    "url"
  ]
}
🟢news(q, category, since, limit, x_payment)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Keyword query — switches to archive search.",
      "examples": [
        "stablecoin regulation"
      ]
    },
    "category": {
      "type": "string",
      "enum": [
        "world",
        "business",
        "technology",
        "ai",
        "crypto",
        "markets",
        "health",
        "science",
        "energy",
        "politics",
        "climate",
        "sports"
      ],
      "description": "Headline category; 'ai' and 'crypto' are curated high-signal cuts.",
      "examples": [
        "technology"
      ]
    },
    "since": {
      "type": "string",
      "format": "date-time",
      "description": "Only items after this instant (ai/crypto cuts).",
      "examples": [
        "2026-07-21T00:00:00Z"
      ]
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "description": "Max headlines.",
      "examples": [
        10
      ]
    },
    "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(since, category, topic, limit, x_payment)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "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})$",
      "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.",
      "examples": [
        "2026-07-21T00:00:00Z"
      ]
    },
    "category": {
      "type": "string",
      "enum": [
        "world",
        "business",
        "technology",
        "ai",
        "crypto",
        "nft",
        "markets",
        "health",
        "science",
        "energy",
        "politics",
        "climate",
        "sports",
        "general"
      ],
      "description": "Optional: follow one category of the whole pile. Not combinable with `topic`.",
      "examples": [
        "technology"
      ]
    },
    "topic": {
      "type": "string",
      "enum": [
        "ai",
        "crypto"
      ],
      "description": "Optional: follow a curated high-signal tape instead of the whole pile (marketing, how-tos and chatter filtered out). Not combinable with `category`.",
      "examples": [
        "ai"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Most articles to return. If new_count exceeds it, call again at once with next_cursor to drain the rest.",
      "examples": [
        20
      ]
    },
    "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(requests, x_payment)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "requests": {
      "type": "array",
      "minItems": 1,
      "maxItems": 10,
      "description": "1 to 10 reads, answered in order.",
      "items": {
        "type": "object",
        "properties": {
          "route": {
            "type": "string",
            "enum": [
              "headlines",
              "ai",
              "crypto",
              "search"
            ],
            "description": "Which news read this element is.",
            "examples": [
              "ai"
            ]
          },
          "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})$",
            "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.",
            "examples": [
              "2026-07-21T00:00:00Z"
            ]
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 20,
            "description": "Most articles to return. If new_count exceeds it, call again at once with next_cursor to drain the rest.",
            "examples": [
              20
            ]
          },
          "category": {
            "type": "string",
            "enum": [
              "world",
              "business",
              "technology",
              "ai",
              "crypto",
              "nft",
              "markets",
              "health",
              "science",
              "energy",
              "politics",
              "climate",
              "sports",
              "general"
            ],
            "description": "headlines only: restrict to one category.",
            "examples": [
              "technology"
            ]
          },
          "q": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "description": "search only: keywords (AND-ed) and \"quoted phrases\".",
            "examples": [
              "stablecoin regulation"
            ]
          }
        },
        "required": [
          "route"
        ]
      },
      "examples": [
        [
          {
            "route": "ai",
            "limit": 5
          },
          {
            "route": "crypto",
            "since": "2026-07-21T00:00:00Z"
          },
          {
            "route": "search",
            "q": "stablecoin regulation"
          }
        ]
      ]
    },
    "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."
    }
  },
  "required": [
    "requests"
  ]
}
⚪weather(place, lat, lon, view, hours, ...)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "description": "Place name — resolved via the built-in gazetteer. Use this or lat+lon.",
      "examples": [
        "Tokyo"
      ]
    },
    "lat": {
      "type": "number",
      "description": "Latitude (with lon).",
      "examples": [
        35.6895
      ]
    },
    "lon": {
      "type": "number",
      "description": "Longitude (with lat).",
      "examples": [
        139.6917
      ]
    },
    "view": {
      "type": "string",
      "enum": [
        "current",
        "forecast",
        "alerts"
      ],
      "default": "current",
      "description": "Which weather read to perform.",
      "examples": [
        "current"
      ]
    },
    "hours": {
      "type": "integer",
      "default": 24,
      "description": "Forecast horizon in hours.",
      "examples": [
        24
      ]
    },
    "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."
    }
  }
}
⚪holidays(market, date, view, from, to, ...)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "market": {
      "type": "string",
      "enum": [
        "nyse",
        "us-federal",
        "lse",
        "target2",
        "weekend-only"
      ],
      "default": "nyse",
      "description": "Which calendar to use.",
      "examples": [
        "nyse"
      ]
    },
    "date": {
      "type": "string",
      "format": "date",
      "description": "Reference date (YYYY-MM-DD).",
      "examples": [
        "2026-07-03"
      ]
    },
    "view": {
      "type": "string",
      "enum": [
        "is_open",
        "next_session",
        "settle",
        "business_days",
        "year"
      ],
      "default": "is_open",
      "description": "Which calendar question to answer.",
      "examples": [
        "is_open"
      ]
    },
    "from": {
      "type": "string",
      "format": "date",
      "description": "Range start (view='business_days').",
      "examples": [
        "2026-07-01"
      ]
    },
    "to": {
      "type": "string",
      "format": "date",
      "description": "Range end (view='business_days').",
      "examples": [
        "2026-07-31"
      ]
    },
    "days": {
      "type": "integer",
      "default": 2,
      "description": "N in T+N (view='settle').",
      "examples": [
        2
      ]
    },
    "year": {
      "type": "integer",
      "description": "Calendar year (view='year').",
      "examples": [
        2026
      ]
    },
    "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."
    }
  }
}
⚪timezone(zone, view, at, to, time, ...)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "zone": {
      "type": "string",
      "description": "IANA zone.",
      "examples": [
        "America/New_York"
      ]
    },
    "view": {
      "type": "string",
      "enum": [
        "now",
        "offset",
        "convert",
        "business_hours"
      ],
      "default": "now",
      "description": "Which time question to answer.",
      "examples": [
        "now"
      ]
    },
    "at": {
      "type": "string",
      "format": "date-time",
      "description": "Instant for offset/business_hours.",
      "examples": [
        "2026-01-15T12:00:00Z"
      ]
    },
    "to": {
      "type": "string",
      "description": "Target zone (view='convert').",
      "examples": [
        "Asia/Tokyo"
      ]
    },
    "time": {
      "type": "string",
      "description": "Wall-clock time to convert, no offset (view='convert').",
      "examples": [
        "2026-07-25T09:00:00"
      ]
    },
    "open": {
      "type": "integer",
      "default": 9,
      "description": "Business day start hour.",
      "examples": [
        9
      ]
    },
    "close": {
      "type": "integer",
      "default": 17,
      "description": "Business day end hour.",
      "examples": [
        17
      ]
    },
    "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."
    }
  },
  "required": [
    "zone"
  ]
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 12개
검증됨버전이 기록되지 않음도구 12개