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 分