FetchGate について
FetchGateは、ページを実際に読み取れたと確認した場合だけ内容を渡す、エージェント向けの決定論的な取得ゲートです。取得失敗や空のページを根拠に回答する代わりに、拒否を返したい開発者に適しています。
主な機能
- 01取得済み、失敗、不明の判定
- 02ステータス、リダイレクト、抽出テキストの確認
- 03ブロックページやエラーページの検出
- 04Playwrightによる任意のJavaScript描画
- 05コア機能はモデルやAPIキー不要
活用シーン
- 01空の取得結果に基づく回答の防止
- 02ページが実際に読めたかの確認
- 03テキストが少ないJavaScriptページをブラウザー描画で再取得
MCP 対応
FetchGateはMCPクライアントに `fetch_url` ツールを提供します。読み取りが確認できた場合のみ内容を返し、それ以外は拒否します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
FetchGate
HTTP 200 は読み取れたことを意味しません。
AI エージェントがページを取得しても、JavaScript アプリ、403、Cloudflare の壁などによって、気づかれないまま内容が空で返ってくることがあります。それでもエージェントは処理を止めず、ページを実際には読んでいないことを伝えないまま、記憶に基づいて回答することがよくあります。FetchGate は取得の境界に置く小さなゲートで、こうした事態を防ぎます。ページを実際に読み取れた場合にだけ内容をエージェントに渡し、それ以外の場合は正直に拒否します。
決定論的(モデルも API キーも不要)で、コアは標準ライブラリのみで動作し、無料です。
クイックスタート
git clone https://github.com/MoAz06/FetchGate
cd FetchGate
python demo.py https://example.com https://httpbin.org/status/403
https://example.com
verdict : RETRIEVED (clean)
answerable : ALLOW
bytes : raw 559 / extracted 127
tiers : static
gate-confirmed content (127 chars): Example Domain This domain is for use ...
https://httpbin.org/status/403
verdict : FAILED (transport.http_403)
answerable : STOP
refused: the model gets no content and cannot answer as if it read this page.
テストを実行します(ネットワークもモデルも不要です)。
pip install -e .
python -m unittest discover -s tests
最も簡単な方法:ダブルクリック 1 回(Claude Desktop)
Releases
ページから fetchgate.mcpb をダウンロードし、ダブルクリックします。Claude Desktop にインストールボタンが表示されるため、JSON を編集する必要はありません。バンドルのソースは bundle/ にあります。npx @anthropic-ai/mcpb pack bundle fetchgate.mcpb で再ビルドできます。
バイブコーダー向け:エディター内から追加する
Cursor ならワンクリック(uv が必要です。多くの環境にはインストール済みです)。
または、AI に頼むだけです。 次の内容を Cursor、Claude Code、Windsurf に貼り付けてください。
この環境に fetchgate MCP サーバーを追加してください。
pip install "fetchgate[mcp]"を実行し、コマンドfetchgate-mcpを使う、fetchgateという名前の MCP サーバーとして登録してください。実際には取得できなかったページを読んだかのようにエージェントが回答するのを防ぎます。
アシスタントがインストールを実行し、設定も行います。
Claude Desktop または Cursor で使う(手動)
pip install ".[mcp,http,extract]" # the fetch tool, real redirect chain, better extraction
pip install ".[browser]" # optional: render JavaScript pages
python -m playwright install chromium
MCP 設定に追加します(詳細は docs/mcp.md を参照してください)。
{ "mcpServers": { "fetchgate": { "command": "fetchgate-mcp" } } }
エージェントに fetch_url ツールが追加されます。読み取りが確認できた場合にのみ内容を返し、それ以外の場合は拒否します。
このリポジトリは Claude Code プラグインとしても使えます。pip install "fetchgate[mcp]" の実行後:
/plugin marketplace add MoAz06/FetchGate
/plugin install fetchgate@fetchgate
docs/claude-code-plugin.md を参照してください。
独自のエージェントで使う
from fetchgate import default_gate
gate = default_gate() # renders JS pages if the [browser] extra is installed
def read_url(url: str) -> str:
out = gate.guarded_fetch(url)
content = gate.content_for(out.handle)
if content is None:
return f"NOT READ: {url} ({out.result.reason}). Do not answer as if you read it."
return content
判定方法
すべての取得に対して、次のいずれかの判定を返します。
- RETRIEVED:実際に読み取れました。エージェントは回答し、出典を示せます。
- FAILED:読み取れなかったことが確定しています(4xx または 5xx、タイムアウト、https から http へのダウングレード、空の本文)。処理を止めます。
- UNKNOWN:取得はしましたが、読み取れたと確認するには、読める内容が不十分です(JavaScript ページでよく発生します)。処理を止めるか、レンダリングして再試行します。
3 つのレイヤーが判定に使われ、結果には最も厳しい判定が採用されます。
- transport:ステータスとリダイレクトの連鎖。
- extraction:読み取り可能なテキストを生のバイト列と分離して保持します。17 バイトの価格 JSON も読み取りとして扱い、テキストが 2 パーセント含まれる 400 KB の記事も読み取りとして扱いますが、テキストのない JS の外殻は読み取りとして扱いません。
- content-validity:Cloudflare、同意画面、ペイウォール、ソフト 404 の壁を判定するベストエフォートのフィンガープリントです。判定を UNKNOWN に引き下げることしかできず、読み取れたと偽ることはありません。
ページの内容が薄い、または空に見え、レンダリング層が有効な場合、FetchGate は実際のヘッドレスブラウザーに処理を引き継ぎ、再確認します。レンダリングは行いますが、回避はしません。正直にレンダリングした後も壁が残っているページは、読み取れていないままです。
明示されている制限事項
content_sha256は受領確認用のアンカーであり、改ざんの証拠にはなりません。隠蔽されたページも問題なくハッシュ化されます。- 来歴は真正性を意味しません。このゲートが防ぐのは、空の内容を取得したときに黙って処理を続けることであり、誤った内容でも取得に成功させることではありません。
- 読み取れたことは、回答できることを意味しません。RETRIEVED は十分な内容が届いたことを示すだけで、必要な事実が含まれているとは限りません。主張の裏付けは後続処理の役割です。
- フェイルクローズには可用性上の代償があります。取得を失敗させられる者がいれば、拒否を強制できます。これは正確性と引き換えにするものです。
実装内容
決定論的なコア、署名済みマニフェストを使ったオフライン評価、ビルドを失敗させる不正検出テスト、MCP サーバー、Playwright レンダリング層を備えています。任意の追加機能は [mcp]、[http](httpx のリダイレクト連鎖)、[extract](trafilatura)、[browser](Playwright)、[sign](Ed25519)です。インストールされていれば自動的に使用されます。コアは標準ライブラリのみで動作します。
MIT ライセンスです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。