概要
MCPでClaude DesktopやCursorにWebページリーダーを追加するには?
WebReaderAPIを呼び出すread_urlツールを公開する小さなMCPサーバーを実行し、クライアントのMCP設定でenvにキーを設定して登録します。これでモデルは任意の公開ページをクリーンなMarkdownとして読めるようになります。ページ読み取り1回につき1クレジット、ブラウザ使用時は2クレジットで、2026年10月時点では$0.07/1Kページから。KYC不要、暗号資産で支払い。
MCPサーバーの概要
| 言語 | Python 3.10+、mcpおよびhttpxパッケージを使用 |
|---|---|
| トランスポート | stdio:クライアントがサーバーをローカルプロセスとして起動 |
| ツール | read_url(url, max_chars) → タイトル、ソースURL、続いてページのMarkdown |
| web_fetchを使わない理由 | Claude CodeとOpenClawには、すでにその名前の組み込みツールが搭載されています |
| キー | サーバーの環境変数WEBREADER_API_KEYから読み取り |
| 課金 | 1クレジット = ブラウザなしでページを1回読み取り。ページのJavaScriptレンダリングにブラウザが必要な場合は2クレジット。失敗したリクエスト、またはサイトのrobots.txtが拒否したリクエストは課金されません |
read_urlツールを使い、web_fetchを使わないのはなぜ?
同じ名前のツールが2つあると、クライアントとモデルの両方が混乱するからです。Claude CodeとOpenClawには、すでにweb_fetchという名前のツールが含まれています。別の名前read_urlと明確な説明があれば、ページの本文(JavaScriptページやPDFを含む)が必要なときにモデルがこちらを選べます。
このツールはJSONではなくテキストを返します。モデルはネストされたフィールドよりも短いヘッダーとMarkdownをうまく扱え、ヘッダーにソースURLが残るため回答で引用できます。
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()
サーバーのインストールとテスト方法は?
仮想環境を作成し、mcpとhttpxをインストールして、上記のファイルを保存します。mcpパッケージはModel Context Protocolの公式Python SDKで、FastMCPは型付きPython関数をツールに変換し、docstringをその説明として使います。
クライアントに組み込む前に、キーを設定した状態でターミナルからファイルを一度実行してください。stdinでクライアントを静かに待機していれば、正しく起動しています。Ctrl+Cで停止できます。
python -m venv .venv
. .venv/bin/activate
pip install "mcp[cli]" httpx
WEBREADER_API_KEY="your-key" python webreader_mcp.pyClaude Desktopに登録するには?
Claude Desktopの開発者設定を開き、claude_desktop_config.jsonを編集して、mcpServersの下にエントリを追加します。仮想環境のPythonとサーバーファイルの絶対パスを使用してください。キーはenvに入れると、ツールの引数や会話に表示されることはありません。Claude Desktopを再起動すると、read_urlがツール一覧に表示されます。
Cursorは独自のMCP設定ファイルから同じmcpServers構造を読み取り、Claude Codeはclaude mcp addコマンドで同じコマンドを登録できます。OpenClawについてはOpenClawページをご覧ください。
{
"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文字はほとんどの記事に十分で、長いページがコンテキストを埋めるのを防ぎます。1つの回答で複数ページを読むモデルには、1ページあたり8,000〜12,000文字が適しています。
モデルには、目にするすべてのリンクではなく、必要なページだけを読むよう指示してください。プロジェクトの指示に「1つの質問につき最大3ページまで読む」といった短い一文を入れておくと、コストとコンテキストの両方を抑えられます。
サイトが読み取りを拒否した場合はどうなりますか?
ツールはblocked_by_robotsやtarget_refusedなどのエラーコードを含む短いメッセージを返し、課金は発生しません。当社はrobots.txtを尊重します。クローラーはWebReaderAPIとして名乗り、自身向けまたはすべてのロボット向けに書かれたルールに従い、サイトが禁止したページは読み取りません。拒否されたページは課金されません。サイトが当社のリクエストを拒否した場合、その回答をそのまま返します。CAPTCHAを解いたり、アカウントにログインしたり、ブロックやペイウォールを回避しようとしたりすることは決してありません。モデルはその後、そのページは自動リーダーには利用できないと伝え、別のソースを使えます。
MCPサーバー:よくある質問
WebReaderAPIの公式MCPパッケージはありますか?
いいえ。このページのファイルが統合そのものです。読んで、変更して、自分で実行できる40行です。当社からインストールするものはなく、キーは当社APIへの呼び出し以外ではお客様のマシンから出ることはありません。
このサーバーでモデルはWeb検索できますか?
いいえ。read_urlは、お客様またはモデルがすでにアドレスを持っているページを読み取ります。クライアントが提供する任意の検索ツールと組み合わせてください。モデルが検索し、その後重要なページを読み取ります。
これを使ってアシスタントを運用するコストは?
ページ読み取り1回につき1クレジット、ブラウザが必要な場合は2クレジットです。1日に50ページを読むアシスタントは月に約1,500クレジットを使用し、10,000ページ($3.75)で約6か月分をカバーできます。
サーバーはオフラインで動作しますか?
いいえ。ページごとにhttps://webreaderapi.com/api/v1/readを呼び出すため、インターネット接続と有効なキーが必要です。