Fetch について
Fetch は、LLM 向けにウェブページを取得し、HTML を処理しやすい Markdown に変換する MCP サーバーです。長い内容を分割して読み取れ、既定では非公開アドレスへのアクセスを拒否します。
主な機能
- 01URL からページ内容を取得
- 02HTML を Markdown に変換
- 03長いページを分割して抽出
- 04原文のまま返す設定
- 05robots.txt の規則に準拠
活用シーン
- 01LLM 用のウェブ資料を取得
- 02長いページを分割して読む
- 03後続処理向けにページ内容を抽出
MCP 対応
クライアントに、ウェブ内容を取得・抽出する fetch ツールと対応するプロンプトを提供します。既定ではプライベート、ループバックなどの非公開アドレスへのアクセスを拒否します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | string | はい | 取得する URL |
| max_length | integer | いいえ | 返される最大文字数。 |
| start_index | integer | いいえ | 返却する出力をこの文字インデックスから開始します。前回の取得結果が切り詰められ、さらにコンテキストが必要な場合に便利です。 |
| raw | boolean | いいえ | リクエストしたページの実際の HTML コンテンツを、簡略化せずに取得します。 |
詳細
Fetch MCP サーバー
Web コンテンツの取得機能を提供する Model Context Protocol サーバーです。このサーバーを使うと、LLM は Web ページからコンテンツを取得して処理し、HTML をより扱いやすい Markdown に変換できます。
ソース:https://github.com/modelcontextprotocol/servers/tree/main/src/fetch
MCP Python SDK 2.x(mcp>=2.3,<3)が必要です。
注意
このサーバーはローカル/内部 IP アドレスにアクセスできるため、セキュリティリスクとなる可能性があります。機密データが漏えいしないよう、この MCP サーバーを使用する際は十分に注意してください。
デフォルトでは、
169.254.169.254などのクラウドメタデータエンドポイントを含む、プライベート、ループバック、リンクローカルなどの非パブリックアドレスへの取得を拒否し、リダイレクトの各段階でも同様に確認します。--allow-private-ips引数を指定すると、この保護が無効になります。詳しくはカスタマイズ - プライベートアドレスを参照してください。この保護では、リクエストごとにホスト名が解決するアドレスを確認します。そのため、確認後から接続までの間に発生する DNS リバインディングは防げません。また、サーバー自身では解決できず、プロキシだけが解決できるホスト名も確認されません。
fetch ツールはレスポンスを切り詰めますが、start_index 引数を使うと、コンテンツの抽出を開始する位置を指定できます。これにより、モデルは必要な情報が見つかるまで Web ページを分割して読み取れます。
利用可能なツール
fetch- インターネット上の URL を取得し、コンテンツを Markdown として抽出します。url(文字列、必須):取得する URLmax_length(整数、任意):返す最大文字数(デフォルト:5000)start_index(整数、任意):この文字インデックスからコンテンツを開始します(デフォルト:0)raw(ブール値、任意):Markdown に変換せず、生のコンテンツを取得します(デフォルト:false)- アノテーション:
readOnlyHint: true、destructiveHint: false、idempotentHint: true、openWorldHint: true(読み取りのみを行い、インターネット上の任意のホストにアクセスします)
プロンプト
- fetch
- URL を取得し、コンテンツを Markdown として抽出します
- 引数:
url(文字列、必須):取得する URL
エラー
- 取得の失敗(robots.txt による拒否、ページに到達できない、HTTP エラーステータス、プライベートアドレスへのアクセス拒否、使用できないプロキシ設定)や、ツールのスキーマに合わない引数は、
isError: trueを含むツール結果として返されます。そのテキストはError executing tool fetch:で始まり、問題の内容を示すため、モデルはそれを読み取って対応を判断できます。 - サーバーにないツールを呼び出すと、仕様で定められているとおり、
-32602(Unknown tool: <name>)という JSON-RPC プロトコルエラーになります。サーバーにないプロンプトを取得した場合(Unknown prompt: <name>)や、urlを指定せずにfetchプロンプトを取得した場合(URL is required)も同様です。 fetchプロンプトの取得に失敗した場合も、プロンプトは返されます。そのメッセージには取得に失敗した理由が含まれます。
このサーバーは MCP Python SDK の高水準 MCPServer を基盤としています。ツールとプロンプトはデコレータを付けた関数であり、それらの型ヒントとフィールドの説明が入力スキーマおよびプロンプトの引数になります。
プロトコルバージョン
このサーバーは、設定不要で、stdio 経由で Model Context Protocol の両世代に対応します。2026-07-28 のクライアント(server/discover で検出し、セッションなし)と、2025-11-25 のクライアント(initialize ハンドシェイク)を利用できます。最初のリクエストによって、使用するクライアントが決まります。ツールとプロンプトはどちらでも同じように動作します。ping など、2026-07-28 仕様で削除されたメソッドに応答するのは、2025-11-25 の接続だけです。
インストール
任意:node.js をインストールすると、fetch サーバーはより堅牢な別の HTML 簡略化ツールを使用するようになります。
uv を使用する(推奨)
uv を使用する場合、特別なインストールは不要です。uvx を使って mcp-server-fetch を直接実行します。
PIP の使用
別の方法として、mcp-server-fetch を pip でインストールできます。
pip install mcp-server-fetch
インストール後、次のコマンドでスクリプトとして実行できます。
python -m mcp_server_fetch
設定
Claude.app の設定
Claude の設定に追加します。
uvx を使用する場合
{
"mcpServers": {
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
}
docker を使用する場合
{
"mcpServers": {
"fetch": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/fetch"]
}
}
}
pip でインストールする場合
{
"mcpServers": {
"fetch": {
"command": "python",
"args": ["-m", "mcp_server_fetch"]
}
}
}
VS Code の設定
すばやくインストールするには、以下のワンクリックインストールボタンのいずれかを使用します…
手動でインストールするには、以下の JSON ブロックを VS Code のユーザー設定(JSON)ファイルに追加します。Ctrl + Shift + P を押して Preferences: Open User Settings (JSON) と入力すると実行できます。
必要に応じて、ワークスペース内の .vscode/mcp.json というファイルに追加することもできます。これにより、設定を他のユーザーと共有できます。
mcp.jsonファイルを使用する場合は、mcpキーが必要です。
uvx を使用する場合
{
"mcp": {
"servers": {
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
}
}
}
}
Docker を使用する場合
{
"mcp": {
"servers": {
"fetch": {
"command": "docker",
"args": ["run", "-i", "--rm", "mcp/fetch"]
}
}
}
}
カスタマイズ - robots.txt
デフォルトでは、モデルからのリクエスト(ツール経由)の場合、サーバーはウェブサイトの robots.txt に従いますが、ユーザーが開始したリクエスト(プロンプト経由)の場合は従いません。ツールによるフェッチでリダイレクトが発生するたびに、リクエストされた URL と同様に、遷移先ホストの robots.txt を確認します。設定の args リストに --ignore-robots-txt 引数を追加すると、この動作を無効にできます。
カスタマイズ - プライベートアドレス
デフォルトでは、サーバーは、リダイレクト先や robots.txt の取得先も含め、ホストがグローバルにルーティングできないアドレス(ループバック(127.0.0.0/8、::1)、プライベート(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、fc00::/7)、リンクローカル(169.254.0.0/16、fe80::/10)、共有アドレス空間(100.64.0.0/10)、マルチキャスト、未指定、ドキュメント用、およびその他の IANA 特別用途アドレス範囲)に解決されるリクエストを拒否します。IPv4 マップアドレス(::ffff:0:0/96)または既知の NAT64 アドレス(64:ff9b::/96)は、内包する IPv4 アドレスに基づいて判定されます。ホスト名にこれらの範囲内のアドレスが1つでも含まれる場合、そのホスト名は拒否されます。
拒否されたアドレスを示すエラーがクライアントに返されます。
ローカルホストや内部ホスト(開発サーバーやイントラネットページ)から取得するには、設定の args リストに --allow-private-ips 引数を追加します。
カスタマイズ - User-agent
デフォルトでは、リクエストがモデルからのもの(ツール経由)か、ユーザーが開始したもの(プロンプト経由)かに応じて、サーバーは次のいずれかの user-agent を使用します。
ModelContextProtocol/1.0 (Autonomous; +https://github.com/modelcontextprotocol/servers)
または
ModelContextProtocol/1.0 (User-Specified; +https://github.com/modelcontextprotocol/servers)
設定の args リストに --user-agent=YourUserAgent 引数を追加すると、これをカスタマイズできます。
カスタマイズ - プロキシ
--proxy-url 引数を使用して、サーバーがプロキシを使用するように設定できます。
--proxy-url を指定しない場合、サーバーは標準の HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 環境変数で設定されたプロキシを使用します(NO_PROXY を尊重します)。http(s):// と SOCKS5 のプロキシに対応しています(SOCKS のサポートはサーバーとともにインストールされます)。多くのデスクトッププロキシ設定でエクスポートされる socks:// プロキシ URL は、socks5:// として扱われます。サーバーが使用できないプロキシ設定の場合、フェッチのたびにその旨を示すツールエラーが発生します。
Windows の設定
Windows でタイムアウトが発生する場合、適切な文字エンコーディングを確保するために、PYTHONIOENCODING 環境変数を設定する必要があります。
Windows の設定(uvx)
{
"mcpServers": {
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"],
"env": {
"PYTHONIOENCODING": "utf-8"
}
}
}
}
Windows の設定(pip)
{
"mcpServers": {
"fetch": {
"command": "python",
"args": ["-m", "mcp_server_fetch"],
"env": {
"PYTHONIOENCODING": "utf-8"
}
}
}
}
これにより、Windows システムでサーバーのタイムアウトを引き起こす可能性がある文字エンコーディングの問題に対処できます。
デバッグ
MCP インスペクターを使用してサーバーをデバッグできます。uvx でインストールした場合:
npx @modelcontextprotocol/inspector uvx mcp-server-fetch
または、パッケージを特定のディレクトリにインストールした場合や、開発中の場合:
cd path/to/servers/src/fetch
npx @modelcontextprotocol/inspector uv run mcp-server-fetch
開発
src/fetch から実行します。
uv sync --frozen --all-extras --dev
uv run --frozen pytest
テストでは、インプロセスの MCP ClientSession を通じて serve() を実行し(また、tests/test_eras.py では、2026-07-28 クライアントおよび 2025-11-25 クライアントとして Client を通じて実行します)、HTTP はモック化されているため、ネットワークは不要です。HTML 抽出テストでは、PATH 上に Node.js が必要です(Node が存在する場合、readabilipy は Readability.js を使用し、存在しない場合は純粋な Python のフォールバックを使用します)。
ファイルごとにブランチカバレッジを測定するカバレッジ:
uv run --frozen pytest --cov --cov-report=term-missing --cov-report=json
このコマンドは coverage.json(Git で無視されます)を書き込みます。カバレッジは報告されますが、しきい値は適用されません。目標は、src/mcp_server_fetch 以下のすべてのファイルで、行カバレッジとブランチカバレッジをそれぞれ少なくとも 90% にすることです。
貢献
mcp-server-fetch の改善に役立つ貢献を歓迎します。バグ報告、新しいツールのアイデア、既存機能の強化、ドキュメントの改善はいずれも大歓迎です。
ほかの MCP サーバーや実装パターンの例については、次を参照してください。 https://github.com/modelcontextprotocol/servers
貢献は プルリクエストではなく、イシューとして受け付けます。リポジトリのメンテナーが実装を行います。バグ報告または機能リクエストのフォームからイシューを作成してください。変更をすでに試作している場合は、差分ではなく、使用したプロンプトを共有してください。ポリシーの詳細については、CONTRIBUTING.md を参照してください。
ライセンス
mcp-server-fetch は MIT ライセンスの下でライセンスされています。MIT ライセンスの利用規約に従うことを条件として、このソフトウェアを自由に使用、変更、配布できます。詳細については、プロジェクトリポジトリの LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。