# 面向 Claude、Cursor 及其他 MCP 客户端的网页读取 MCP server

> 面向 Claude Desktop、Cursor 及其他 MCP 客户端的网页读取 MCP server：一个 40 行的 Python read_url 工具，返回干净的 Markdown。无需 KYC，使用加密货币支付。

- URL: https://webreaderapi.com/zh/docs/mcp/
- 最后更新: 2026-10-22
- 发布者: WebReaderAPI (https://webreaderapi.com)

为任意 MCP 客户端提供一个 `read_url` 工具，把链接转成干净的 Markdown。该 server 是一个简短的 Python 文件，在你自己的机器上运行；你的 API 密钥保存在它的环境中。

**快速回答 — 如何通过 MCP 为 Claude Desktop 或 Cursor 添加网页读取工具？**

运行一个小型 MCP server，暴露一个调用 **WebReaderAPI** 的 `read_url` 工具，然后在客户端的 MCP 设置中注册它，并把密钥放在 `env` 中。之后模型就能把任意公开网页读取为干净的 Markdown。每次网页读取消耗 1 积分，使用浏览器时为 2 积分，截至 2026 年 10 月，起步价为 US$0.07/千页。无需 KYC；使用加密货币支付。

## MCP server 概览

| 属性 | 值 |
| --- | --- |
| 语言 | Python 3.10+，使用 `mcp` 和 `httpx` 包 |
| 传输方式 | stdio：客户端以本地进程方式启动该 server |
| 工具 | `read_url(url, max_chars)` → 标题、来源 URL，然后是页面的 Markdown |
| 为什么不用 web_fetch | Claude Code 和 OpenClaw 已内置一个同名工具 |
| 密钥 | 在 server 的环境变量中从 `WEBREADER_API_KEY` 读取 |
| 计费 | 1 积分 = 读取 1 个页面且无需浏览器；当页面需要浏览器渲染 JavaScript 时为 2 积分。失败的请求，或被网站 robots.txt 拒绝的请求，不扣费 |

## 为什么用 read_url 工具而不是 web_fetch？

因为两个同名工具会让客户端和模型都混淆。Claude Code 和 OpenClaw 已内置一个名为 `web_fetch` 的工具。一个不同的名字 `read_url` 和清晰的描述，能让模型在需要网页正文（包括 JavaScript 页面和 PDF）时选择我们的工具。

该工具返回文本，而不是 JSON。模型处理简短的头部和 Markdown 比处理嵌套字段更好，而且头部会让来源 URL 始终可见，以便答案引用。

*webreader_mcp.py*

```python
import os

import httpx
from mcp.server.fastmcp import FastMCP

API = "https://webreaderapi.com/api/v1/read"
KEY = os.environ["WEBREADER_API_KEY"]
mcp = FastMCP("webreaderapi")


@mcp.tool()
def read_url(url: str, max_chars: int = 20000) -> str:
    """Read a public web page and return its main content as Markdown.

    Use it when the user gives a link or when a page must be read to answer.
    max_chars caps the length of the returned text (1,000 to 500,000).
    """
    params = {"url": url, "max_chars": max(1000, min(int(max_chars), 500000))}
    try:
        resp = httpx.get(API, params=params, headers={"Authorization": "Bearer " + KEY}, timeout=75)
    except httpx.HTTPError as exc:
        return "Network error while reading the page: " + str(exc)
    body = resp.json()
    if resp.status_code != 200:
        err = body.get("error", {})
        return "Could not read the page: " + err.get("code", str(resp.status_code)) + ". " + err.get("message", "")
    title = body.get("title") or url
    return "# " + title + "\nSource: " + body.get("final_url", url) + "\n\n" + body.get("markdown", "")


if __name__ == "__main__":
    mcp.run()

```

## 如何安装和测试该 server？

创建一个虚拟环境，安装 `mcp` 和 `httpx`，并保存上面的文件。`mcp` 包是 Model Context Protocol 的官方 Python SDK；`FastMCP` 会把带类型标注的 Python 函数转成工具，并以 docstring 作为其描述。

在接入客户端之前，先在终端中设置好密钥并运行一次该文件。它会静默地在 stdin 上等待客户端，这意味着它已正确启动；按 Ctrl+C 停止它。

*安装*

```bash
python -m venv .venv
. .venv/bin/activate
pip install "mcp[cli]" httpx
WEBREADER_API_KEY="your-key" python webreader_mcp.py
```

## 如何在 Claude Desktop 中注册？

打开 Claude Desktop 的开发者设置，编辑 `claude_desktop_config.json`，并在 `mcpServers` 下添加一个条目。使用绝对路径：虚拟环境中的 Python 和 server 文件。把密钥放在 `env` 中，这样它永远不会出现在工具参数或对话里。重启 Claude Desktop，`read_url` 就会出现在工具列表中。

Cursor 从它自己的 MCP 配置文件中读取相同的 `mcpServers` 结构，Claude Code 可以用它的 `claude mcp add` 命令注册同一条命令。关于 OpenClaw，请参阅 [OpenClaw 页面](https://webreaderapi.com/zh/docs/openclaw/)。

*claude_desktop_config.json*

```json
{
  "mcpServers": {
    "webreaderapi": {
      "command": "/home/you/webreader/.venv/bin/python",
      "args": ["/home/you/webreader/webreader_mcp.py"],
      "env": { "WEBREADER_API_KEY": "your-key" }
    }
  }
}
```

## 如何让页面保持在模型的上下文中？

降低 `max_chars`。默认的 20,000 字符对大多数文章来说足够了，并能防止长页面占满上下文。模型在一个回答中读取多个页面时，每页 8,000 到 12,000 字符效果更好。

让模型只读取它需要的页面，而不是它看到的每一个链接。在项目说明中加入一句简短的话，例如“每个问题最多读取三个页面”，就能同时控制成本和上下文。

## 当站点拒绝读取时会发生什么？

工具会返回一条带有错误代码的简短消息，例如 `blocked_by_robots` 或 `target_refused`，并且不会计费。我们遵守 robots.txt：我们的爬虫以 WebReaderAPI 标识自身，遵循专为其或为所有爬虫编写的规则，不读取网站禁止的页面。被拒绝的页面不扣费。如果网站拒绝我们的请求，我们会返回其答复：我们从不破解 CAPTCHA、不登录账户，也不试图绕过封锁或付费墙。然后模型可以说该页面无法供自动化读取器使用，并改用其他来源。

## MCP server：常见问题

### WebReaderAPI 有官方 MCP 包吗？

没有。本页面上的文件就是集成：40 行代码，你可以自己阅读、修改和运行。无需从我们这里安装任何东西，你的密钥除了在调用我们的 API 时，永远不会离开你的机器。

### 模型能用这个 server 搜索网页吗？

不能。`read_url` 读取的是你或模型已经拥有地址的页面。将其与你客户端提供的任意搜索工具配合使用；模型先搜索，然后读取重要的页面。

### 用这个运行一个助手需要多少费用？

每次网页读取消耗 1 积分，需要浏览器时为 2 积分。一个每天读取 50 个页面的助手每月大约消耗 1,500 积分，而 10,000 个网页（US$3.75）大约能覆盖六个月。

### 该 server 能离线工作吗？

不能。它每次读取页面都会调用 `https://webreaderapi.com/api/v1/read`，因此需要互联网访问和有效的密钥。

---

WebReaderAPI: WebReaderAPI 是一款面向 AI agents 的网页读取 API，可将任何公开网页转换为干净的 Markdown，用加密货币支付，无需上传身份证件。预付费积分低至 US$0.07/千页，永不过期，且遵守 robots.txt。无需 KYC — 无身份证、无自拍、无证件。加密货币支付。
