URL to Markdown (Article Extractor)

io.github.kitedesk-erm由 GitHub 帳號 kitedesk-erm 發布v1.0.0更新於 Oct 29, 2026

Turn any URL into clean Markdown or text for LLMs, RAG and agents. Strips nav, ads and footers.

概覽

AI 產生的概覽

本機 MCP 伺服器,抓取公開網頁並把正文轉成乾淨的 Markdown 或純文字,供助理閱讀與摘要。

可以做什麼
  • 抓取公開網址,只回傳正文內容,移除導覽列、廣告、Cookie 提示、側欄、頁尾與留言。
  • 可選擇 Markdown、純文字或兩者,保留或移除連結與圖片,並用 max_chars 限制長度以控制 token 預算。
  • 在正文前附上標題、作者、發佈日期、字數與閱讀時間等中繼資料。
  • 遇到缺少金鑰、私有或 localhost 位址、非 HTML 頁面、網站無法連線、配額限制,以及被封鎖或內容為空等情況時,回傳可讀的工具錯誤。
適用情境
適合讓助理讀取文章、部落格、文件頁、README 或維基百科條目並進行摘要、比較或存成筆記,也適合把網頁內容送進 RAG 與代理流程而不夾帶頁面雜項。
執行需求
需要 Node.js 18 或更新版本,並在本機 stdio 用戶端透過 npx 執行該 npm 套件(另提供 Docker 與原始碼建置方式)。必須在 ZYLA_API_KEY 環境變數中提供 Zyla API Hub 金鑰,提供 7 天免費試用。需要能連線至託管擷取 API 的網路。
安裝前請注意
ZYLA_API_KEY 金鑰需寫入用戶端設定,應妥善保管。擷取由第三方託管 API 執行,所抓取的網址都會傳送給該服務。呼叫會計入 Zyla 方案的配額與速率限制,但僅成功呼叫才計費。需要 JavaScript 渲染或付費牆的頁面只能取得很少或沒有內容。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 URL to Markdown (Article Extractor),將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

url-to-markdown-mcp

[npm] [MCP Registry] [License: MIT]

npm: @kitedesk-erm/url-to-markdown-mcp · Official MCP Registry: io.github.kitedesk-erm/url-to-markdown-mcp

An MCP server that turns any URL into clean Markdown or plain text for your AI assistant. It gives Claude, Cursor, Windsurf, Cline, VS Code Copilot and any other MCP client one tool, extract_url. The tool fetches a page and returns only the main content (no nav, ads, cookie banners, sidebars, footers or comments), plus the title, author, publish date, word count and reading time.

It's backed by the hosted Article Extractor and URL to Markdown API on Zyla API Hub. You'll need a Zyla API key, and you can get one with a 7-day free trial.

  • Fast: p50 about 230 ms and p95 about 650 ms for extraction (20 real article URLs, measured 2026-10-22)
  • LLM-ready Markdown with headings, lists, code blocks and absolute links; max_chars keeps you inside a token budget
  • Read-only and SSRF-safe: localhost and private IPs are refused
  • Small: one tool, stdio transport, and two runtime dependencies (@modelcontextprotocol/sdk and zod)

Tool

extract_url

ArgumentTypeDefaultDescription
urlstring, requiredPublic http(s) URL (the scheme is optional)
formatmarkdown | text | bothmarkdownOutput format
max_charsintegerno limitTruncate the content to N characters
linksbooleantrueKeep [text](url) links
imagesbooleanfalseInclude ![alt](src) images

The tool returns a short metadata header followed by the content:

# How to Work HardSource: https://paulgraham.com/hwh.htmlWords: 3313 (~14 min read) | truncated by max_chars
June 2021
It might not seem there's much to learn about how to work hard. Anyone who's been to school knows what it entails, ...

Errors come back as MCP tool errors (isError: true) with a readable message, so the model can recover. That covers a missing key, a private or localhost URL, a non-HTML target, an unreachable site, a Zyla quota or rate limit, and the API's 502 errors: upstream_blocked (the site returned 401/403/429/451 or a bot-challenge page) and empty_content (about 0 words, for example a page rendered client-side). Zyla only bills successful calls, so blocked or empty pages aren't charged.

Install

You need Node.js 18 or later. Every client runs the same command, npx -y @kitedesk-erm/url-to-markdown-mcp, with your key in ZYLA_API_KEY.

Claude Desktop

Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

json
{  "mcpServers": {    "url-to-markdown": {      "command": "npx",      "args": ["-y", "@kitedesk-erm/url-to-markdown-mcp"],      "env": { "ZYLA_API_KEY": "your-zyla-api-key" }    }  }}

Claude Code

bash
claude mcp add url-to-markdown --env ZYLA_API_KEY=your-zyla-api-key -- npx -y @kitedesk-erm/url-to-markdown-mcp

Cursor

Use ~/.cursor/mcp.json for a global setup, or .cursor/mcp.json for a single project:

json
{  "mcpServers": {    "url-to-markdown": {      "command": "npx",      "args": ["-y", "@kitedesk-erm/url-to-markdown-mcp"],      "env": { "ZYLA_API_KEY": "your-zyla-api-key" }    }  }}

VS Code (GitHub Copilot agent mode)

Add this to .vscode/mcp.json. VS Code prompts for the key and stores it securely:

json
{  "inputs": [    { "type": "promptString", "id": "zyla-key", "description": "Zyla API key", "password": true }  ],  "servers": {    "url-to-markdown": {      "type": "stdio",      "command": "npx",      "args": ["-y", "@kitedesk-erm/url-to-markdown-mcp"],      "env": { "ZYLA_API_KEY": "${input:zyla-key}" }    }  }}

Windsurf, Cline, Continue, Zed and other clients

Most clients take the same mcpServers block shown for Claude Desktop and Cursor (Windsurf uses ~/.codeium/windsurf/mcp_config.json; Cline uses its MCP Servers → Configure panel). The generic form is:

  • command: npx
  • args: ["-y", "@kitedesk-erm/url-to-markdown-mcp"]
  • env: ZYLA_API_KEY=<your key>
  • transport: stdio

Smithery / Docker

The repo includes smithery.yaml and a Dockerfile. You can also run it in Docker: docker build -t url-to-markdown-mcp . && docker run -i --rm -e ZYLA_API_KEY url-to-markdown-mcp.

From source

If you're installing before the npm release, build from source:

bash
git clone https://github.com/kitedesk-erm/url-to-markdown-mcp.gitcd url-to-markdown-mcp && npm install && npm run build# then use "command": "node", "args": ["/absolute/path/to/url-to-markdown-mcp/dist/index.js"]

Example prompts

  • "Read https://go.dev/blog/go1.22 and summarize what changed in loops."
  • "Pull the text of these three articles and compare their arguments" (with max_chars: 6000 each).
  • "Save this page as a Markdown note with title and author front matter."

Limits

  • No JavaScript rendering. Pages that build their content only in the browser (some SPAs) return little text.
  • Paywalled or bot-protected sites return only what they serve publicly. Blocked or challenged requests return an upstream_blocked tool error and aren't billed.
  • Your Zyla plan sets the quota and rate limit. Only successful (200) calls count against your plan.

Development

bash
npm installnpm test          # build, then the raw JSON-RPC handshake + tools/list, a tool call via a local mock Zyla gateway, and metadata checksnpm run test:live # same, but the mock gateway forwards to the live extraction backend

The tests use a fake key against a local mock, so no real key is needed or stored. The Zyla endpoint lives in one constant, src/config.ts. ZYLA_ENDPOINT overrides it, but only for testing.

Changing the GitHub handle or namespace: package.json → mcpName is the source of truth. Run npm run set-github-handle -- <handle> to rewrite package.json, server.json, README.md and smithery.yaml. npm test then checks that they all agree, which the MCP Registry also requires.

Related

License

MIT

來源:README.md,提交 c69a13c

工具

1

extract_url

Extract URL to Markdown

Fetch a public web page (article, blog post, docs page, README, Wikipedia...) and return its main content as clean Markdown and/or plain text, with nav, ads, footers and comments removed, plus title, author, publish date, word count and reading time. Does not run JavaScript; paywalled pages return only public content.

輸入參數url必填linksformatimagesmax_chars

版本歷史

1
  1. v1.0.0最新Oct 23, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分