Skip to main content
Glama
NikkeTryHard

fast-webfetch-mcp

by NikkeTryHard

fast-webfetch-mcp

Webページを実際のブラウザでレンダリングし、モデルに2MBのJavaScriptのトークン請求書ではなく、クリーンなMarkdownを渡す、WebフェッチMCPサーバーです。

ここでのフェッチは無料です。APIキーも、ページごとの課金もありません。また、サイトがブロックしているように見えても、それは多くの場合、実際のChromiumがそのまま通り抜けるヘッドレス検出スクリプトに過ぎません。

How it works

2つの小さなプログラム、1つの仕事:

MCP client (agent)
   │  JSON-RPC over stdio
   ▼
src/index.ts          Bun + MCP SDK — tool schemas, budgets, rendering
   │  spawns per request
   ▼
crawl4ai_worker.py    Python + Crawl4AI — headless Chromium, markdown extraction
   │
   ▼
The actual internet

TypeScriptサーバーはポリシーを担当します:タイムアウト、並行性の許可、出力の切り詰め、オプションのGeminiによる要約。Pythonワーカーはメカニクスを担当します:ブラウザのライフサイクル、レンダリング、リトライ。どちらも相手の仕事を知らず、両者間の契約はstdout上の1つのJSONドキュメントです。

Related MCP server: crawler-mcp

Install

要件:Bun、Python 3.12+、そして最初のブラウザダウンロードに対するGPUに依存しない忍耐力。

git clone <this repo> ~/.local/share/mcp/fast-webfetch-mcp   # or anywhere
cd ~/.local/share/mcp/fast-webfetch-mcp
bun install
uv venv .venv --python 3.12 && uv pip install --python .venv/bin/python crawl4ai

ブラウザ側が動作することを確認します:

FAST_WEBFETCH_SMOKE_URL=https://example.com bun run src/index.ts

サンプルドメインのMarkdownが表示されるはずです。代わりにPlaywrightブラウザに関するスタックトレースが表示された場合は、venvからcrawl4ai-setupを実行して再試行してください。適切なChromiumビルドがインストールされます。

Wire it into your agent

{
  "mcpServers": {
    "fast-webfetch": {
      "type": "stdio",
      "command": "/usr/bin/mullvad-exclude",
      "args": ["/home/you/.bun/bin/bun", "run", "/path/to/fast-webfetch-mcp/src/index.ts"],
      "env": { "PATH": "/home/you/.bun/bin:/usr/bin:/bin" }
    }
  }
}

mullvad-excludeラッパーはオプションです。フェッチトラフィックがVPNをバイパスして、サイトが実際のIPを確認できるようにするだけです。通常の"command": "bun"も同じように機能します。

Tools

fast_fetch — 1つのURLをMarkdownに変換

引数

デフォルト

備考

url

string

必須

prompt

string

設定すると、ページ全体の代わりに根拠のある回答

max_length

number

40,000

中央切り詰めで先頭と末尾を保持

full_content

boolean

false

上限を100,000文字に引き上げ

timeout_ms

number

25,000

ハード上限、ブラウザレンダリングを含む

options

object

呼び出しごとのレンダリング調整、下記参照

fast_fetch_raw — 1つのURLを生のHTMLに変換

promptを除く同じ引数。Markdownが失うもの(テーブル、data-属性、メタタグ、正確なマークアップ)が必要な場合に使用します。

options オブジェクト

3つのツールすべてが、単純なロード&取得以上のものを必要とするサイト向けに、オプションのoptionsオブジェクトを受け入れます:

{
  "url": "https://example.com/feed",
  "options": { "full_page": true, "wait_seconds": 1.5, "drop_overlays": true }
}

キー

効果

full_page

boolean

抽出前にページ全体をスクロール — 遅延読み込みや無限スクロールのコンテンツを取得。遅い。無限フィードではタイムアウトまでスクロール

wait_seconds

number

キャプチャ前の待機時間。例:遅延ハイドレーションのページには1.5

iframes

boolean

iframeコンテンツを結果に取り込む

drop_overlays

boolean

抽出前にクッキーバナーやモーダルを削除

誤って入力されたキーは渡されずに静かに破棄されます — optionsペイロードはPython側でCrawlerRunConfigフラグになります。

fast_fetch_multiple — 1バッチで最大15のURL

引数

デフォルト

備考

urls

string[]

必須

1〜15の絶対http(s)URL

max_length

number

40,000

URLごと

full_content

boolean

false

URLごと

timeout_ms

number

25,000

バッチ全体で共有

options

object

同じ調整、すべてのURLに適用

各URLは、メタデータヘッダー(urlstatuselapsed_mstruncated)を持つ独自のセクションとして返されます。1つの遅いサイトが他のサイトを飢えさせることはありません — バッチの仲間が成功する間、そのアイテムだけがアイテムごとのタイムアウトエラーを受け取ります。

Configuration

すべてオプション、すべて環境変数。

Server knobs

変数

デフォルト

目的

FAST_WEBFETCH_MAX_LENGTH

40000

デフォルトのページごとの文字数上限

FAST_WEBFETCH_HARD_MAX_LENGTH

100000

full_contentの上限

FAST_WEBFETCH_TIMEOUT_MS

25000

デフォルトのフェッチタイムアウト

FAST_WEBFETCH_MULTIPLE_CONCURRENCY

12

並列ブラウザスロット(最大32)

FAST_WEBFETCH_DISABLE_SUMMARY

unset

1promptサポートを完全に削除

FAST_WEBFETCH_PYTHON

<repo>/.venv/bin/python

ワーカーインタープリター

FAST_WEBFETCH_WORKER

<repo>/crawl4ai_worker.py

ワーカーパス

GEMINI_API_KEY / GEMINI_API_KEY_FILE

prompt要約にのみ必要

Browser knobs

変数

デフォルト

目的

CRAWL4AI_STEALTH

on (1)

検出防止パッチ:webdriverフラグ、プラグイン、WebGLベンダー、Chrome API。無効にするには0を設定

CRAWL4AI_PROXY_URL

off

外部接続用プロキシ

CRAWL4AI_WAIT_UNTIL

domcontentloaded

Playwrightの待機戦略

CRAWL4AI_SCAN_FULL_PAGE

off

抽出前にスクロール — 呼び出しごとにoptions.full_pageとしても利用可能

CRAWL4AI_DELAY_SECONDS

0

HTMLキャプチャ前の待機時間 — 呼び出しごとにoptions.wait_secondsとしても利用可能

Behavior worth knowing

JSを多用するサイトは、デフォルトの待機戦略では空のシェルを返すことがよくあります。200がコンテンツなしで返された場合、ワーカーは同じタイムアウト予算内でnetworkidleを使用して1回再試行します — 最悪の場合、2回ではなく1回待つことになります。一方、接続失敗とHTTPエラーは単一試行のままです:死んだホストを再試行するのは、失敗するまでの時間が長くなるだけです。

fast_fetchfast_fetch_multipleは同じ12のブラウザスロットのプールから取得するため、大きなバッチが同時の単一フェッチを飢えさせることはありません。プールを超える需要はキューに入ります。存在するスロットよりも多くのスロットを要求するバッチは、空いているものを取得します。

最後に、max_lengthが存在するのは、エージェントのコンテキストウィンドウが予算であり、埋め立て地ではないからです。

When things break, you get a log path

失敗は2つの山に分類されます:インターネットが不安定な場合(タイムアウト、遅いサイト、アイテムごとのバッチ期限エラー)と、ツールが実際に壊れている場合(ワーカーが起動しない、ワーカーがクラッシュした、stdoutオーバーフロー、解析不能な出力)。ログを書き込むのは2番目の山だけです — 1番目は正直なエラータグを受け取るだけです。

ツール側の失敗は次のように終わります:

log: /path/to/fast-webfetch-mcp/logs/2026-08-22T09-02-06-780Z-fast_fetch.json

内部には:ツール、正確な引数、ワーカー入力、完全な失敗記録(ステージ、終了コード、シグナル、stderrの末尾)— リクエストをそのまま再現するのに十分です:

FAST_WEBFETCH_INPUT='{"url":"https://example.com","max_length":40000}' \
  .venv/bin/python crawl4ai_worker.py

FAST_WEBFETCH_LOGS_DIRでリダイレクトします。

Staying under 30 seconds

エージェントハーネスは通常、30秒前後でMCP呼び出しを強制終了するため、このサーバーは28秒をハードリミットとして扱います。すべてのツールはその前に応答します:フェッチが成功した場合は完了した結果、そうでない場合はどのステージが時間を消費したかを示す構造化されたアイテムごとのエラー。予算を使い切ったバッチでも、完了したアイテムは返されます。

Troubleshooting

症状

考えられる原因と修正

Crawl4AI worker missing

リポジトリが移動しました。FAST_WEBFETCH_WORKERcrawl4ai_worker.pyを指しているか確認してください

Crawl4AI python missing

.venvがないか、インタープリターが間違っています。FAST_WEBFETCH_PYTHONを設定してください

Everything times out on one site

サイトが本当に遅いか敵対的です。CRAWL4AI_STEALTH=1を試してください

Batch deadline exceeded on some items

予想通り:共有25秒の予算で、遅延アイテムはアイテムごとのエラーを受け取ります

Empty markdown on SPAs

リトライで自己修復されるはずです。されない場合はCRAWL4AI_DELAY_SECONDSを上げてください

Development

bun install
bun test            # 18 tests, no network needed
bun run typecheck   # tsc --noEmit, strict + noUncheckedIndexedAccess

Pythonワーカーは直接駆動できます。MCPレイヤーなしでフェッチ動作をデバッグする最速の方法です:

FAST_WEBFETCH_INPUT='{"url":"https://example.com","max_length":500}' \
  .venv/bin/python crawl4ai_worker.py

See also

  • ddg-search — 自然なフロントエンド:検索して、結果のURLをこのサーバーに渡します

  • Crawl4AI — 基盤となるクローリングエンジン

  • Model Context Protocol — ワイヤープロトコル

License

MIT.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server that lets Claude Code fetch web content using real Chrome browsers. Renders JavaScript-heavy pages, handles bot mitigation, and runs up to 14 parallel browsers locally with zero API keys. Makes outbound HTTP requests only to URLs the user explicitly asks Claude to fetch.
    2
    14
    91
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Web-crawler MCP server that fetches web pages with static parsing or headless browser fallback, enabling Claude to fetch, extract links, crawl sites, and select content via CSS selectors.
    4
  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that enables AI assistants to fetch web content in multiple formats (HTML, JSON, text, Markdown) with intelligent content extraction, chunk management, and browser automation support.
    5
    52
    15
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An open-source web retrieval MCP server that fetches, crawls, and searches the web, returning clean markdown for AI agents. It integrates with Claude MCP, LangChain, and other frameworks for agentic web access.
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • Zenrows MCP server — Fetch, Extract, Batch, and Browser Sessions for AI coding assistants

  • Firecrawl MCP — wraps the Firecrawl API (firecrawl.dev) for web

  • SEO MCP server: crawl your site, find AI-visibility gaps, and ship the fix from your coding agent.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/NikkeTryHard/fast-webfetch-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server