fetchmcp について
fetchmcpは、ウェブページをMarkdownとして取得するMCPサーバーです。JavaScriptが必要なページはブラウザーで描画し、取得できない場合は明示的なエラー状態を返します。ドキュメント向けの読み取り機能と、長い結果のページ分割にも対応します。
主な機能
- 01ウェブページをMarkdownに変換
- 02必要に応じてJavaScriptページを描画
- 03ナビゲーション要素を除いて文書を読み取り
- 04長い結果をページ分割
- 05ブロックや取得失敗を状態付きで報告
活用シーン
- 01JavaScript依存のページから内容を取得
- 02APIドキュメントを読みやすいテキストで抽出
- 03初回結果に収まらないページの続きを読む
MCP 対応
ウェブページやドキュメントを取得するread_urlおよびread_docsツールをMCPクライアントに公開します。描画、整形、ページ分割に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| raw | boolean | いいえ | true の場合、抽出した Markdown ではなく、ページの生 HTML を返します。デフォルト:false。 |
| url | string | はい | 取得する URL(http または https)。 |
| render | boolean | いいえ | 実際のブラウザーでの JS レンダリング:true = 常にレンダリング、false = レンダリングしない。デフォルト:自動 — 静的 HTML が空の SPA シェルの場合にのみレンダリングします。 |
| headers | object | いいえ | 送信する追加の HTTP ヘッダー。ログインが必要なページ用の Authorization bearer token や Cookie など。例:{"Authorization": "Bearer ...", "Cookie": "session=..."}。 |
| max_length | integer | いいえ | 返す最大文字数。デフォルト:0 = 無制限(ページ全体)。出力が切り詰められた場合、レスポンスでその旨と続行方法を知らせます。 |
| start_index | integer | いいえ | 長いページをページ分割して読む際の開始文字オフセット。デフォルト:0。 |
詳細
fetchmcp
現代のウェブページでも実際に動作する、公式 fetch MCP のドロップイン置き換えです。
公式の fetch MCP は JavaScript を多用するページで動作せず、出力は 5,000 文字で切り詰められ、未修正の SSRF 脆弱性も含まれています。fetchmcp は、JavaScript が必要な場合はレンダリングし、有料プロキシなしで基本的なボット対策を通過して、ページがブロックされた場合はコンテンツを捏造せず正直に伝えながら、あらゆる URL から LLM で使いやすいクリーンな Markdown を返します。npx で実行するだけです。

// Replace the official fetch server with this — one line in your MCP config:
"fetchmcp": { "command": "npx", "args": ["-y", "@labtoolsstudio/fetchmcp"] }
切り替える理由
公式 fetch | fetchmcp | |
|---|---|---|
| JavaScript ページ | ❌ 空または動作しない | ✅ 実際のブラウザーで自動レンダリング |
| 出力の長さ | ✂️ 5,000 文字で切り詰め | ✅ ページ分割に対応したページ全体 |
| ボット対策(403/Cloudflare) | ❌ 何も通知せず失敗 | ✅ 中程度の対策を通過、有料プロキシ不要 |
| ブロックされたページ | ❌ CAPTCHA を「コンテンツ」として返す | ✅ 型付きエラーで正直に通知し、決して偽装しない |
| SSRF 対策 | ❌ CVE-2025-65513(CVSS 9.3) | ✅ プライベート IP/メタデータ IP をデフォルトで拒否 |
| コスト | 無料 | 無料、セルフホスト可能、$0 |
インストール
MCP クライアントの設定(claude_desktop_config.json、Cursor の mcp.json、Cline など)に追加します。
{
"mcpServers": {
"fetchmcp": {
"command": "npx",
"args": ["-y", "@labtoolsstudio/fetchmcp"]
}
}
}
インストールは軽量です — ブラウザーは事前にダウンロードされず、静的な読み取り(fetch → Readability → Markdown)はすぐに動作します。ページで初めて JavaScript が必要になると、fetchmcp はステルス Chromium を一度だけ自動的にダウンロード(約 150 MB)してレンダリングします。設定は引き続き不要です。インストール時に事前ダウンロードするには、FETCHMCP_PREINSTALL_BROWSER=1 を設定してください。静的読み取り専用にしてダウンロードを完全に避けるには、FETCHMCP_SKIP_BROWSER_DOWNLOAD=1 を設定してください(その場合、JS ページには正直に needs_js が返されます)。
ツール
read_url
あらゆるウェブページをクリーンな Markdown として取得します。
| 引数 | 型 | 説明 |
|---|---|---|
url | string | 取得する URL(http/https) |
render | boolean | JS レンダリング:true = 常に実行、false = 実行しない、省略時 = 自動(空の SPA シェルの場合のみ) |
raw | boolean | Markdown ではなく生の HTML を返す |
headers | object | 追加のリクエストヘッダー。例:{"Authorization": "Bearer …", "Cookie": "…"} |
max_length | integer | 返す文字数の上限(0 = 無制限、デフォルト) |
start_index | integer | 長いページをページ分割して読む際の開始位置 |
read_docs
同じエンジンをドキュメント向けに調整したものです。ナビゲーションサイドバー、ヘッダー、フッターを取り除き、API ドキュメントやガイドをクリーンな参照テキストとして返します。url、render、headers、max_length、start_index を受け取ります。
正直なステータス
fetchmcp は、ボット対策画面、エラーページ、実際のコンテンツを装った途中で切れたシェルを返すことはありません。ページを読み取れない場合は、型付きステータスとともに理由を伝えます。ステータスには、blocked(ベンダー名を含むボット対策)、blocked_ssrf、needs_js、http_error、timeout、network_error、unsupported_content、empty があります。
設定(環境変数)
| 変数 | デフォルト | 意味 |
|---|---|---|
FETCHMCP_TIMEOUT_MS | 30000 | リクエストごとのタイムアウト |
FETCHMCP_MAX_RETRIES | 2 | ネットワークエラー/429/503 発生時の再試行(バックオフと Retry-After を使用) |
FETCHMCP_ALLOW_PRIVATE_IP | 未設定 | 1 に設定すると、プライベート IP/localhost の IP を許可します(信頼できるイントラネットのドキュメント向け) |
FETCHMCP_FLARESOLVERR_URL | 未設定 | より難しいチャレンジに対応する、セルフホスト可能な FlareSolverr のエンドポイント |
FETCHMCP_SKIP_BROWSER_DOWNLOAD | 未設定 | 静的コンテンツのみの場合は 1 に設定します。Chromium をダウンロードせず、JS ページは needs_js を返します |
FETCHMCP_PREINSTALL_BROWSER | 未設定 | 初回の JS 利用時ではなく、インストール時に Chromium をダウンロードするには 1 に設定します |
開発とテスト
npm install # installs deps (Chromium downloads on first JS use)
npm run build # compile TypeScript to dist/
npm test # unit tests (block detection, SSRF) — no network
npm run test:e2e # live end-to-end suite against real sites
# Poke at any tool/URL by hand — no need to write a script:
node test/probe.mjs read_url https://example.com
node test/probe.mjs read_url https://some-spa.example.com --render
node test/probe.mjs read_docs https://docs.python.org/3/library/json.html
node test/probe.mjs read_url https://api.example.com --header "Authorization=Bearer x" --max-length 500
node test/probe.mjs read_url https://example.com --full # print the whole response
test/probe.mjs --help の動作については、ファイルの先頭に記載されています。
動作の仕組み
必要に応じて段階的に処理する、3 つのティアがあります。
- 静的 — 通常の fetch → Readability → Markdown。ほとんどのページで最速の経路です。
- ブラウザー — 静的 HTML が空の SPA シェル、ボット対策ページ、または
403/429/503の場合に、遅延読み込みで patchright(ステルス Chromium)を使用します。 - FlareSolverr(オプション)— エンドポイントを設定している場合に限り、ブラウザーでは突破できないチャレンジに使用します。
スター履歴
fetchmcp が「fetch しても何も返らない」という場面をまた一つ解決できたなら、スターを付けると、ほかの人にも見つけてもらいやすくなります。
ライセンス
MIT — LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。