| title | MCP Server Reference |
|---|---|
| description | Model Context Protocol tools, resources, prompts, and transports for the html2rss gem. |
import { Code } from "@astrojs/starlight/components";
html2rss ships a built-in Model Context Protocol (MCP) server for AI agents and IDEs (Cursor, Claude Desktop, Copilot).
<Code code={`
html2rss mcp
html2rss mcp --transport http --port 8080 `} lang="bash" />
| Transport | Command | Notes |
|---|---|---|
stdio |
html2rss mcp |
Recommended for Cursor / Claude Desktop |
http |
html2rss mcp --transport http --port 8080 |
Bound to 127.0.0.1 only; needs rack, rackup, webrick |
Daemon logs go to stderr (stdout is JSON-RPC). Default LOG_LEVEL for the MCP process is info unless you set it.
scrape and capture use strategy: "auto" by default so html2rss can choose an available fetch path from the scrape result. Prefer native RSS/Atom when present; weak homepage URLs may be rewritten via entry resolution.
Keep auto for normal use. Pin strategy: "botasaurus" only when a diagnostic requires browser rendering or browser-specific controls.
Read html2rss://runtime for botasaurus_configured (boolean only). Set BOTASAURUS_SCRAPER_URL on the MCP process env.
Every tool returns one JSON object in text content and structuredContent:
<Code
code={{ "ok": true, "next_step": "test", "guidance": "...", "payload": {} }}
lang="json"
/>
isError matches ok: false. Articles live in payload.items; YAML in payload.yaml; RSS in payload.rss.
next_step is one of: done, inspect, recon, validate, apply, scrape, capture, read_runtime, test.
Golden path for durable YAML: inspect (optional) → recon → capture → test → apply. One-shot articles: scrape. Schema-only side door: validate.
One-shot article extraction as JSON Feed items (no saved config).
- Parameters:
url(required);strategy(auto/default/botasaurus, defaultauto);limit(default25); optionalitems_selector - Payload:
items, plus totals / strategy fields when present - Empty items can still be
ok: true— follownext_step/guidance
Diagnostics: final URL, status, scheme downgrade, rel=alternate feeds, surface category, admission drops.
- Parameters:
url(required);strategy(defaultauto) - Follow
next_step— oftenreconwhen alternates warrant it, orscrape/capture
Curation verdict and native_feed preference (BUILD / DEFER / DROP).
- Parameters:
url(required);strategy(defaultauto)
Derive a reusable YAML draft (payload.yaml). Same serializer as CLI html2rss capture. Catalog feeds still need directory.topics and explicit channel title / url.
- Parameters:
url(required);strategy; optionalitems_selector - Typical
next_step:testorinspect
Schema-only check against html2rss://schema. Exactly one of config or yaml.
- Success
next_stepis usuallytest
Schema validation plus live extraction (min_items, optional strict_quality, compare_enhance).
- Success
next_stepisapply - Payload includes sample items, timing, and
quality_reportwhen present
Ship gate: build RSS from a config. Required url plus exactly one of config or yaml.
- Payload:
rss,item_count isErrorwhen zero items
| Tool | Job |
|---|---|
batch_scrape |
Parallel scrape with per-URL isolation |
batch_inspect |
Parallel inspect |
batch_recon |
Parallel recon |
| URI | Description |
|---|---|
html2rss://schema |
Feed config JSON Schema |
html2rss://extractors |
Extractor names |
html2rss://strategies |
Runtime strategy names for client discovery; prefer auto, default, or botasaurus |
html2rss://runtime |
version, mcp_contract_version, catalog_fingerprint, tools, botasaurus_configured — never the scraper URL |
validate / apply reject strategy: local_file and request.local_file_path. Use CLI --input for fixtures.
| Name | Flow |
|---|---|
scrape-webpage |
One scrape call; inspect only if weak |
capture-feed-config |
capture → test → apply (catalog rewrite when targeting html2rss-configs) |
See AI Agent Workflows for Cursor / Claude Desktop mcp.json examples and the html2rss-config skill.