Skip to main content
Glama
zacfire
by zacfire

MCP Web Reader

一个强大的 MCP (Model Context Protocol) 服务器,让 Claude 和其他大语言模型能够读取和解析网页内容。支持突破访问限制,轻松获取微信文章、时代杂志等受保护内容。

功能特点

  • 🚀 三引擎支持:集成 Jina Reader API、本地解析器和 Playwright 浏览器

  • 🔄 智能降级:Jina Reader → 本地解析 → Playwright 浏览器三层自动切换

  • 🌐 突破限制:使用 Playwright 处理 Cloudflare、验证码等访问限制

  • 📦 批量处理:支持同时获取多个 URL

  • 🎯 灵活控制:可选择强制使用特定解析方式

  • 📝 Markdown 输出:自动转换为清晰的 Markdown 格式

Related MCP server: urltomarkdown-mcp

安装

方法 1:从源码安装

# 克隆仓库
git clone https://github.com/zacfire/mcp-web-reader.git
cd mcp-web-reader

# 安装依赖
npm install

# 构建项目
npm run build

# 安装 Playwright 浏览器(必需)
npx playwright install chromium

方法 2:使用 npm 安装(如果已发布)

npm install -g mcp-web-reader

配置

在 Claude Desktop 的配置文件中添加:

Windows: %APPDATA%\Claude\claude_desktop_config.json

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "web-reader": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-web-reader/dist/index.js"]
    }
  }
}

使用方法

配置完成后,在 Claude 中可以使用以下命令:

  1. 智能获取(推荐)

    • "请获取 https://example.com 的内容"

    • 自动三层降级:Jina Reader → 本地解析 → Playwright 浏览器

  2. 批量获取

    • "请获取这些网页:[url1, url2, url3]"

    • 每个URL都享受智能降级策略

  3. 强制使用 Jina Reader

  4. 强制使用本地解析

  5. 强制使用浏览器模式

    • "使用浏览器获取 https://example.com"

    • 直接跳过其他方式,适用于确定有访问限制的网站

支持的受限网站类型

微信公众号文章 - 自动绕过访问限制
时代杂志、纽约时报 - 突破付费墙和地区限制
Cloudflare 保护网站 - 通过真实浏览器绕过检测
需要 JavaScript 渲染的页面 - 完整执行页面脚本
有验证码/人机验证的网站 - 模拟真实用户行为

工具列表

  • fetch_url - 智能获取(三层降级:Jina → 本地 → Playwright)

  • fetch_url_with_jina - 强制使用 Jina Reader

  • fetch_url_local - 强制使用本地解析器

  • fetch_url_with_browser - 强制使用 Playwright 浏览器(突破访问限制)

  • fetch_multiple_urls - 批量获取多个 URL

技术架构

智能降级策略

用户请求 URL
    ↓
1. Jina Reader API (最快,成功率高)
    ↓ 失败
2. 本地解析器 (Node.js + JSDOM)
    ↓ 检测到访问限制
3. Playwright 浏览器 (真实浏览器,突破限制)

访问限制检测

自动识别以下情况并启用浏览器模式:

  • HTTP 状态码:403, 429, 503, 520-524

  • 错误关键词:Cloudflare, CAPTCHA, Access Denied, Rate Limit

  • 内容关键词:Security Check, Human Verification

开发

# 开发模式(自动重新编译)
npm run dev

# 构建
npm run build

# 测试运行
npm start

# 安装浏览器二进制文件(首次使用必需)
npx playwright install chromium

性能优化

  • 浏览器实例复用 - 避免重复启动开销

  • 🚫 资源过滤 - 阻止图片、样式表等不必要加载

  • 🎯 智能选择 - 优先使用快速方法,必要时才用浏览器

  • 💾 优雅关闭 - 正确清理浏览器资源

贡献

欢迎提交 Pull Request!

许可证

MIT License

Available Tools

5 tools
fetch_multiple_urlsC

批量获取多个URL的网页内容

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYes要获取内容的网页URL列表
preferJinaNo是否优先使用Jina Reader(默认为true)

TDQS

C2.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It does not mention concurrency limits, error handling per URL, response format, or any side effects. The tool's behavior is almost entirely opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence. While it lacks structure (e.g., separate sections), it is appropriately concise for its straightforward purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch tool with no output schema and no annotations, the description severely lacks necessary details such as return format, error handling, rate limits, and ordering of results. The agent would find it incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters well. The description adds no additional parameter detail beyond what the schema provides, earning the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description '批量获取多个URL的网页内容' clearly states the verb (batch fetch) and resource (web content of multiple URLs). It immediately distinguishes itself from single-URL sibling tools like fetch_url and its variants.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus single-URL alternatives, nor does it explain the preferJina option or scenarios for each backend. The agent must infer from sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_urlA

获取指定URL的网页内容,并转换为Markdown格式。默认使用Jina Reader,失败时自动切换到本地解析

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes要获取内容的网页URL(必须是http或https协议)
preferJinaNo是否优先使用Jina Reader(默认为true)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should carry the full burden. It discloses the conversion to Markdown and fallback mechanism, but lacks details on timeouts, error handling, or permission needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the key purpose. No extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description mentions Markdown conversion as output. It covers the primary workflow and fallback. Could be more precise about the return format but is adequate for the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds behavioral context for the 'preferJina' parameter by explaining the fallback logic, which is not in the schema. This enhances understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches web content and converts to Markdown. It distinguishes from siblings by specifying the default Jina Reader with local fallback strategy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the default behavior and fallback, implying general use. However, it does not explicitly state when to use this tool over siblings like fetch_url_with_jina or fetch_url_local.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_url_localA

强制使用本地解析器获取网页内容(适用于简单网页或Jina不可用时)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes要获取内容的网页URL

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must bear the burden. It discloses the forced use of a local parser and suitability for simple pages, implying limitations for complex content. But it omits details on read-only behavior, error handling, or performance implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the core purpose and usage context without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single parameter) and rich sibling context, the description adequately orients an agent. However, it lacks details about return format or error states, which might be needed for full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds no extra meaning beyond the parameter name and the schema's description, merely restating 'URL of the web page to fetch content'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches web page content using a local parser, with explicit conditions for use (simple pages or when Jina is unavailable). This distinguishes it from sibling tools, which use different backends.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells when to use this tool (simple pages or Jina unavailable), contrasting with fetch_url_with_jina. However, it does not explicitly list alternatives or provide a detailed when-not-to-use guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_url_with_browserA

强制使用Playwright浏览器获取网页内容(适用于有访问限制的网站,如Cloudflare保护、验证码等)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes要获取内容的网页URL

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description reveals it uses a browser (Playwright) which implies resource-intensive behavior and ability to handle JavaScript. However, it does not disclose potential downsides like slower performance or memory usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that clearly communicates the tool's purpose and usage context with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (1 parameter, no output schema, no annotations), the description is mostly complete. It could mention return format or error cases, but overall it sufficiently informs agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter (url) has schema description coverage of 100%, so the description adds no extra meaning beyond the schema. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it uses Playwright browser to fetch web content, specifically for restricted sites like those with Cloudflare or CAPTCHA. It effectively distinguishes from sibling tools that likely use simpler methods.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says '适用于有访问限制的网站' (suitable for access-restricted sites) and gives examples, providing clear context for when to use this tool. It does not explicitly mention when not to use it, but the guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_url_with_jinaB

强制使用Jina Reader获取网页内容(适用于复杂网页)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes要获取内容的网页URL

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description only mentions 'forcibly use Jina Reader' but does not disclose if it's read-only, error behavior, or output format. For a content fetching tool, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no redundancy, front-loaded with action. However, it could be slightly more structured with explicit statements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should explain return values. It does not. Also lacks info on rate limits or prerequisites. Incomplete for a tool with one required parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter 'url' with schema description. Description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it uses Jina Reader to fetch webpage content and targets complex webpages, distinguishing it from siblings like fetch_url which may use other methods. However, it does not explicitly differentiate from fetch_url_with_browser.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives usage context: '适用于复杂网页' (suitable for complex webpages), implying when to use this tool. But lacks explicit when-not-to-use or alternative names, leaving room for ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv2.0.0
    • First observedfetch_multiple_urls
    • First observedfetch_url
    • First observedfetch_url_local
    • First observedfetch_url_with_browser
    • First observedfetch_url_with_jina

TDQS

A3.8/5.0
Disambiguation5/5

Each tool has a distinct purpose: batch fetching, default with fallback, local parsing, browser rendering, and Jina-only. Descriptions clearly differentiate when to use each, minimizing confusion.

Naming Consistency5/5

All tools follow a consistent 'fetch_url' prefix with modifiers for specific strategies (local, browser, jina, multiple). Naming pattern is predictable and uniform.

Tool Count5/5

Five tools cover the core functionality of a web reader without redundancy. The count is well-scoped for the domain.

Completeness5/5

The tool surface covers all common fetching scenarios: single URL with fallback, forced local, forced browser (for restricted sites), forced Jina (for complex pages), and batch fetching. No obvious gaps for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zacfire/mcp-web-reader'

If you have feedback or need assistance with the MCP directory API, please join our Discord server