mcpField
W
web-to-markdown

web-to-markdown

github.com/rookie-ricardoDocuments937249 installsUpdated 14w ago
Repository

About web-to-markdown

web-to-markdown is a skill that fetches URLs through domain-specific routes and returns cleaned Markdown. It selects extraction methods for general sites, YouTube, and selected services such as WeChat, Zhihu, and Feishu, with fallback routes for generic pages.

Key features

  1. 01Domain-aware URL routing
  2. 02Markdown extraction from web pages
  3. 03YouTube transcript and content extraction
  4. 04Special-site HTTP and browser fallback
  5. 05Optional JSON metadata output

Use cases

  1. 01Turning a web article into Markdown
  2. 02Extracting content from YouTube URLs
  3. 03Fetching WeChat, Zhihu, or Feishu pages
  4. 04Inspecting extraction source and resolved URL

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/rookie-ricardo/erduo-skills --skill web-to-markdown

After installing, type/web-to-markdownin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

package-lock.json
package.json
agents/
openai.yaml
references/
routing-and-notes.md
scripts/
fetch_generic_fallback.mjs
fetch_special_sites_http.mjs
fetch_special_sites.mjs
url_to_markdown.mjs

Details

From the project README

Web To Markdown

Convert URLs into usable Markdown by applying domain-aware fetching routes, then return the cleaned content directly.

Quick Workflow

  1. Normalize and validate the input URL.
  2. Select route:
  • r.jina.ai: general web + X/Twitter.
  • defuddle.md: YouTube transcript/content extraction.
  • special-browser-fetch: WeChat/Zhihu/Feishu.
  1. Return markdown text (or JSON metadata if needed).

For generic URLs (non-YouTube, non-WeChat/Zhihu/Feishu), use this fallback chain:

  • try r.jina.ai first,
  • if it fails, fallback to direct HTTP fetch + Readability,
  • if direct fetch still fails or returns shell-like content, fallback to browser extraction.

Commands

Run from this skill directory (skills/web-to-markdown):

npm install
node scripts/url_to_markdown.mjs <url>

Return metadata with markdown:

node scripts/url_to_markdown.mjs <url> --json

Force special-site browser extraction:

node scripts/fetch_special_sites.mjs <url> --json

Routing Policy

  • Default route: https://r.jina.ai/<url>.
  • YouTube (youtube.com, youtu.be): https://defuddle.md/<url>.
  • X/Twitter (x.com, twitter.com): https://r.jina.ai/<url>.
  • WeChat/Zhihu/Feishu: run scripts/fetch_special_sites.mjs.
  • If input is already proxy-formatted (https://defuddle.md/https://... or https://r.jina.ai/https://...), normalize back to the original URL and re-apply routing.

Special-Site Extraction Behavior

Use a two-stage strategy for WeChat/Zhihu/Feishu:

  1. Try cuimp HTTP/TLS impersonation first, then clean HTML with Mozilla Readability.
  2. If stage 1 fails or returns blocked/shell content, fallback to puppeteer-extra browser impersonation.
  • HTTP stage impersonates modern Chrome TLS/HTTP profile via cuimp.
  • Browser stage impersonates a modern Chrome user agent and standard sec-ch-ua headers.
  • Remove known login modals and backdrop overlays (best effort).
  • Scroll the page to trigger lazy-loaded article blocks.
  • Parse cleaned document with Mozilla Readability.
  • Convert extracted HTML body to Markdown via Turndown.
  • Resolve browser executable from CHROME_PATH first, then system Chrome/Chromium/Edge paths.

If special-site extraction fails due to anti-bot checks, account-only pages, or network limits, report failure clearly and ask for fallback input (for example raw page text).

Output Contract

For normal usage, output markdown only.

When --json is used, return:

  • source: backend source (r.jina.ai, defuddle, cuimp, browser-readability).
  • strategy: selected route (r-jina, defuddle, special-http-fetch, special-browser-fetch-fallback).
  • requestedUrl: original input.
  • resolvedUrl: normalized/final URL.
  • markdown: extracted markdown body.

Resources

  • references/routing-and-notes.md: domain routing rules and operational caveats.
  • scripts/url_to_markdown.mjs: primary entrypoint.
  • scripts/fetch_special_sites_http.mjs: WeChat/Zhihu/Feishu HTTP impersonation fetcher (cuimp JS).
  • scripts/fetch_special_sites.mjs: two-stage extractor (HTTP-first, browser-fallback).

Comments

Markdown supported