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
| 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.
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.
python -m venv .venv
. .venv/bin/activate
pip install "mcp[cli]" httpx
WEBREADER_API_KEY="your-key" python webreader_mcp.pyLà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.
{
"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ệ.