# MCP server đọc trang web cho Claude, Cursor và các MCP client khác

> MCP server đọc trang web cho Claude Desktop và Cursor: tool read_url bằng Python dài 40 dòng trả về Markdown sạch. Không cần KYC, thanh toán bằng crypto.

- URL: https://webreaderapi.com/vi/docs/mcp/
- Cập nhật lần cuối: 2026-10-22
- Đơn vị phát hành: WebReaderAPI (https://webreaderapi.com)

Cấp cho bất kỳ MCP client nào một tool `read_url` biến đường link thành Markdown sạch. Server chỉ là một file Python ngắn bạn chạy trên máy của mình; khóa API nằm trong biến môi trường của nó.

**Câu trả lời nhanh — Làm sao để thêm trình đọc trang web vào Claude Desktop hoặc Cursor bằng MCP?**

Chạy một MCP server nhỏ cung cấp tool `read_url` gọi **WebReaderAPI**, rồi đăng ký nó trong phần cài đặt MCP của client với khóa đặt trong `env`. Sau đó model có thể đọc bất kỳ trang công khai nào dưới dạng Markdown sạch. Mỗi lần đọc trang tốn 1 credit, 2 credit khi cần trình duyệt, từ 0,07 US$/1K trang tính đến tháng 10 năm 2026. Không cần KYC; thanh toán bằng crypto.

## MCP server trong nháy mắt

| Thuộc tính | Giá trị |
| --- | --- |
| Ngôn ngữ | Python 3.10+, với các package `mcp` và `httpx` |
| Transport | stdio: client khởi chạy server như một tiến trình cục bộ |
| Công cụ | `read_url(url, max_chars)` → title, URL nguồn, rồi Markdown của trang |
| Vì sao không dùng web_fetch | Claude Code và OpenClaw đã có sẵn một tool tích hợp trùng tên đó |
| Khóa | Đọc từ `WEBREADER_API_KEY` trong môi trường của server |
| Tính phí | 1 credit = đọc 1 trang không cần trình duyệt; 2 credit khi trang cần trình duyệt để render JavaScript. Yêu cầu thất bại, hoặc bị robots.txt của trang web từ chối, không bị tính phí |

## Vì sao dùng tool read_url mà không dùng web_fetch?

Vì hai tool cùng tên sẽ gây nhầm lẫn cho cả client lẫn model. Claude Code và OpenClaw đã có sẵn một tool tên là `web_fetch`. Một tên khác, `read_url`, cùng mô tả rõ ràng giúp model chọn tool của chúng ta khi cần nội dung chính của trang, kể cả trang JavaScript và PDF.

Tool trả về văn bản, không phải JSON. Model xử lý một header ngắn và Markdown tốt hơn các field lồng nhau, và header giữ URL nguồn trong tầm mắt để câu trả lời có thể trích dẫn.

*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()

```

## Làm sao để cài đặt và kiểm tra server?

Tạo một virtual environment, cài `mcp` và `httpx`, rồi lưu file ở trên. Package `mcp` là SDK Python chính thức của Model Context Protocol; `FastMCP` biến một hàm Python có type thành tool, dùng docstring làm mô tả.

Trước khi nối vào client, hãy chạy file một lần từ terminal với khóa đã đặt. Nó chờ im lặng một client trên stdin, nghĩa là đã khởi động đúng; dừng bằng Ctrl+C.

*Cài đặt*

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

## Làm sao để đăng ký nó trong Claude Desktop?

Mở phần cài đặt developer của Claude Desktop, sửa `claude_desktop_config.json`, rồi thêm một mục dưới `mcpServers`. Dùng đường dẫn tuyệt đối: Python của virtual environment và file server. Đặt khóa trong `env` để nó không bao giờ xuất hiện trong tham số của tool hay trong cuộc trò chuyện. Khởi động lại Claude Desktop, và `read_url` xuất hiện trong danh sách tools.

Cursor đọc cùng cấu trúc `mcpServers` từ file cấu hình MCP riêng, và Claude Code có thể đăng ký cùng lệnh đó bằng lệnh `claude mcp add`. Với OpenClaw, xem [trang OpenClaw](https://webreaderapi.com/vi/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" }
    }
  }
}
```

## Làm sao để giữ các trang trong context của model?

Giảm `max_chars`. Mặc định 20.000 ký tự đủ cho hầu hết bài viết và giữ cho một trang dài không lấp đầy context. Model đọc nhiều trang trong một câu trả lời sẽ làm tốt hơn với 8.000 đến 12.000 ký tự mỗi trang.

Yêu cầu model chỉ đọc những trang nó cần, không phải mọi link nó thấy. Một câu ngắn trong hướng dẫn dự án, như "chỉ đọc tối đa ba trang mỗi câu hỏi", giúp kiểm soát cả chi phí lẫn context.

## Điều gì xảy ra khi một trang từ chối việc đọc?

Tool trả về một thông báo ngắn kèm mã lỗi, như `blocked_by_robots` hoặc `target_refused`, và không bị tính phí. Chúng tôi tôn trọng robots.txt: crawler của chúng tôi tự nhận là WebReaderAPI, tuân theo các quy tắc dành cho nó hoặc cho tất cả robot, và không đọc trang mà website không cho phép. Trang bị từ chối không bị tính phí. Nếu một website từ chối yêu cầu của chúng tôi, chúng tôi trả lại câu trả lời của trang đó: chúng tôi không bao giờ giải CAPTCHA, đăng nhập vào tài khoản, hay tìm cách vượt qua chặn hoặc paywall. Sau đó model có thể nói rằng trang không khả dụng cho trình đọc tự động và dùng nguồn khác.

## MCP server: câu hỏi thường gặp

### Có package MCP chính thức của WebReaderAPI không?

Không. File trên trang này chính là tích hợp: 40 dòng bạn có thể đọc, sửa và tự chạy. Không cần cài gì từ chúng tôi, và khóa của bạn không bao giờ rời khỏi máy bạn ngoài các lần gọi tới API của chúng tôi.

### Model có thể tìm kiếm web bằng server này không?

Không. `read_url` chỉ đọc một trang mà bạn hoặc model đã có địa chỉ. Kết hợp nó với bất kỳ tool tìm kiếm nào client của bạn cung cấp; model tìm kiếm, rồi đọc những trang quan trọng.

### Chi phí chạy một trợ lý với nó là bao nhiêu?

1 credit mỗi lần đọc trang, 2 credit khi cần trình duyệt. Một trợ lý đọc 50 trang mỗi ngày dùng khoảng 1.500 credit mỗi tháng, và 10.000 trang (3,75 US$) đủ cho khoảng sáu tháng.

### Server có hoạt động offline không?

Không. Nó gọi `https://webreaderapi.com/api/v1/read` cho mỗi trang, nên cần kết nối internet và một khóa hợp lệ.

---

WebReaderAPI: WebReaderAPI là web reader API cho AI agent, chuyển mọi trang web công khai thành Markdown sạch, thanh toán bằng crypto không cần tải lên giấy tờ. Credit trả trước từ 0,07 US$/1K trang không bao giờ hết hạn, và robots.txt được tôn trọng. Không cần KYC — không ID, không selfie, không giấy tờ. Thanh toán bằng crypto.
