「このページ、AIに読ませておいて」。そう頼んで返ってきたのが、中身の薄い断片だけだった。AIエージェントにWebを読ませ始めると、たいてい一度はここでつまずきます。
つまずきの原因は、AI側の読解力ではありません。どの経路でページを取りに行ったかです。同じURLでも、通る経路が違えば手元に届く中身が変わります。ログインの先にあるページや社内のイントラは、経路の側が最初から届かない設計になっていることもあります。
この記事は、MCPの公式リファレンス実装であるFetch MCPを題材に、AIにWebを読ませる経路の選び分けを整理します。運営元WEBMARKSは、Fetch MCPを自社の本番業務へ接続していません。ここから先は公式リポジトリとドキュメントの記述確認(2026-08-03確認)に基づく設計論で、実際に使ってどうだったかという体感は書きません。
こんなふうに調べていませんか
- AIに読ませたいページがある。標準の機能とMCPのどちらを使うか決めきれない
- Fetch MCPを入れてみたい。ただ、社内のURLまで届いてしまわないかが気になる
- 取得した中身が空で返る。ページ側の問題なのか、経路側の問題なのか切り分けたい
この記事を読み終えたときに手に入るもの
- Fetch MCPに任せられるページと、任せても読めないページを線引きできるようになります
- 標準のWebFetchとFetch MCPを、届く中身の違いから選び分けられるようになります
- robots.txtと権限設定の扱いを、接続する前に決めきれるようになります
結論30秒でわかる、この記事の結論
- Fetch MCPが引き受けるのは、取ってきてMarkdownに直すところまでです。ブラウザは動かしません。
- 標準のWebFetchとの分かれ目は、届く中身・ページの状態・絞り込みの単位の3つにあります。
- 読めない場面は事前に分かります。ログイン・後から描かれる画面・社内限定のURLが境界です。
進行役は3人です。若葉さんが言葉の側から聞き、高梨課長が動かす側から聞き、鈴木さん(本誌監修)が答えます。
01Fetch MCPって、AIエージェントに何をさせる部品なんですか?
若葉さんMCPのサーバーはたくさんありますよね。Fetch MCPは、その中でどういう役回りなんでしょうか。
鈴木さん出前を受け取る係に近いと思っています。玄関まで取りに行って、袋から出して皿へ移すところまで。味見はしませんし、食べるかどうかも決めません。
Fetch MCPは、指定したURLの内容を取得し、HTMLをMarkdownへ変換して返すMCPの公式リファレンス実装です。
公式リポジトリのREADMEは、役割を「Web content fetching and conversion for efficient LLM usage」と一言で書いています(出典: 公式リポジトリREADME)。ブラウザは起動しません。HTTPリクエストでページを取り、その場でMarkdownへ直すだけです。
リポジトリ全体の位置づけにも明記があります。収録サーバーは教育用のリファレンス実装であり、本番運用を前提にしたソリューションではないとされています(出典: 同リポジトリREADME)。Filesystem MCPやGitHub MCPなど、同居する他のサーバーも同じ扱いです。
たとえの右側に並ぶのは、どれも運ぶことに関わる言葉だけです。選ぶ・確かめる・入口を開けるにあたる言葉が1つも出てきません。守備範囲は、そこで切れています。
02Fetch MCPがAIエージェントから受け取る引数は、何を決めるものなんですか?
公開されているツールはfetchだけです。受け取る引数は4つあります(出典: 同README、2026-08-03確認)。
| 引数 | 型 | 既定値 | 内容 |
|---|---|---|---|
url | 文字列・必須 | なし | 取得対象のURL |
max_length | 整数・任意 | 5000 | 返却する文字数の上限 |
start_index | 整数・任意 | 0 | 取得を開始する文字位置。続きを読むときに使う |
raw | 真偽値・任意 | false | trueにするとMarkdown変換なしの生データを返す |
決めているのは、どこから・どれだけ・どんな形での3つだけです。urlが場所、max_lengthとstart_indexが範囲、rawが形にあたります。読み方や使い道を指示する引数は用意されていません。
入り口も軽く作られています。uvx mcp-server-fetchなら追加インストールなしで直接実行できます。pip install mcp-server-fetchのあとpython -m mcp_server_fetchで起動する経路もあります(出典: 同README)。どちらも同じサーバーが立ち上がります。
MCPがAIエージェントの到達範囲を広げる仕組みそのものは、MCPの選び方|AIエージェントに任せる範囲から見る5軸で整理した判断軸と地続きです。Fetch MCPは、その中でもHTTPで取れる静的な内容だけを担当するサーバーだと考えてください。
03Fetch MCPをAIエージェントにつなぐには、どんな手順が要るんですか?
Claude Codeへつなぐ場合は、公式ドキュメントが示すstdio型MCPサーバーの追加構文に沿います(出典: Claude Code公式MCPドキュメント)。
# 1. Fetch MCPをstdio型サーバーとして登録する(自分専用のlocalスコープが既定)
claude mcp add --transport stdio fetch -- uvx mcp-server-fetch
# 2. 接続状態を確認する
claude mcp listチームで共有するなら--scope projectを付け、.mcp.jsonへ書き出します。local・project・userというスコープの考え方は、他のMCPサーバーを足すときと変わりません。project scopeで追加したサーバーは、承認されるまでclaude mcp listに「⏸ Pending approval」と表示されます。承認するにはclaudeを対話的に起動します(出典: Claude Code公式MCPドキュメント)。
| ステップ | 実行する操作 | 確認方法 |
|---|---|---|
| ①登録 | claude mcp addでFetch MCPをstdio型として追加する | Added ...という完了行が出る |
| ②承認 | project scopeの場合はclaudeを対話的に起動して承認する | claude mcp listが✔ Connectedと表示する |
| ③挙動確認 | fetchツールを一度呼び、max_lengthとstart_indexの効き方を見る | 想定した範囲の本文が返るか確認する |
並びは同じでも、③だけ性格が違います。①と②が見ているのは「つながったか」です。③が見ているのは「どう返るか」です。つながった状態と、使える状態は別に数えます。
robots.txtの制限を外したい場合は、起動コマンドに引数を足します。
# robots.txtの制限を無視して取得する場合(取得先の利用規約を確認したうえで判断する)
claude mcp add --transport stdio fetch -- uvx mcp-server-fetch --ignore-robots-txt起動時に渡せる引数は3つあります(出典: 公式リポジトリREADME)。
| 引数 | 効果 | 指定例 |
|---|---|---|
--user-agent=文字列 | User-Agentを独自の文字列に置き換える | --user-agent=MyCompanyBot/1.0 |
--ignore-robots-txt | robots.txtの制限を無視する | 値を取らず、付けるだけで有効になる |
--proxy-url=URL | 社内プロキシ等を経由して取得する | --proxy-url=http://proxy.internal:8080 |
この章のまとめ
登録・承認・挙動確認までをひと続きにします。返り方を見ないまま先へ進むと、後半が切れていることに気づけません。
04WebFetchは、AIエージェントに返す前に何をしているんですか?
高梨課長Claude Codeには、もともとWebを読む機能がありますよね。わざわざMCPを足す意味はあるんでしょうか。
鈴木さん届くものが違います。標準のほうは、間に小さなモデルがもう1つ入って、そのモデルの答えが返ってきます。ページそのものではありません。
高梨課長要約が返ってくる、という理解でいいですか。
鈴木さん大きくは外していないと思います。要約で足りるなら標準のほうが手軽です。原文を並べて突き合わせたいときに、この差が効いてきます。
Claude Codeには、MCPを足さなくても使える組み込みのWebFetchがあります。公式ツールリファレンスは、その挙動を具体的に説明しています(出典: Claude Code公式ツールリファレンス、2026-08-03確認)。
WebFetchはURLとプロンプトを受け取り、ページを取得してHTMLならMarkdownへ変換し、小さく速いモデルにそのプロンプトを実行させます。Claudeが受け取るのは、多くの場合そのモデルの回答であり、ページそのものではありません(出典: 同ツールリファレンス)。この変換ステップは設定で変更できません。
応答は15分間キャッシュされます。大きなページは処理前に一定の文字数で切り詰められます。別ホストへリダイレクトする場合は追わずに、元のURLとリダイレクト先を伝える結果を返します(出典: 同ツールリファレンス)。
Claudeが読むのは、最後のひと箱だけです。手前の段は、Claudeの目には触れません。 どこまでが自分で読んだ内容なのかを見失わないために、この境目は覚えておく価値があります。
05標準のWeb取得とFetch MCPでは、AIエージェントに届く中身が違うんですか?
中の段取りが分かったところで、両者を並べます。同じ「URLを読む」でも、揃わない項目が並びます。
| 比較軸 | 標準のWebFetch(Claude Code組み込み) | Fetch MCP |
|---|---|---|
| Claudeに届く内容 | 小さく速いモデルがプロンプトに沿って要約した結果 | max_lengthの範囲でMarkdown化された本文そのもの |
| 長いページの扱い | 一定の文字数で切り詰めてから処理する | start_indexを進めて複数回fetchを呼び、続きを取得できる |
| キャッシュ | 15分間の自己クリア型キャッシュがある | 標準の仕組みは無く、呼ぶたびに再取得する |
| 絞り込みの単位 | WebFetch(domain:example.com)でドメイン単位に絞れる | mcp__fetchというサーバー単位までしか絞れない |
| 追加設定 | 組み込み済みで追加インストール不要 | claude mcp addでの登録とサーバー起動が必要 |
表の各行は、どれも同じ1つの違いから枝分かれしています。読む前に、別の頭をもう1つ通すかどうかです。通せば軽くなり、通さなければ原文が残ります。優劣の話ではなく、手元に何を残したいかで決まります。
06長いページの続きは、Fetch MCPとAIエージェントのどちらが面倒を見るんですか?
見落としやすい接続点があります。Claude Codeは、MCPサーバーからの出力が10,000トークンを超えると警告を出します。既定では25,000トークンで打ち切ります(出典: Claude Code公式MCPドキュメント)。
max_lengthを大きく設定しても、この上限に当たれば出力は途中で切り詰められます。長いページを分けて読みたいときは、max_lengthを既定値の付近に留め、start_indexで区切って複数回呼ぶほうが安定します。
続きを取りに行くのは、Fetch MCP側ではありません。位置を進めてもう一度呼ぶのは、呼び出す側の仕事です。 Fetch MCPは、渡された位置から渡された長さぶんを切って返すだけで、前回どこまで返したかを覚えていません。
だからこの分割は、AIエージェント側の段取りとして設計します。一度で全部取ろうとして上限に当たるより、控えめに刻んで複数回呼ぶほうが、結果として最後まで読み切れます。
07Fetch MCPでは、ログインの先にあるページは、AI社員に任せても読めないんですか?
Fetch MCPには、認証やログイン状態を扱う仕組みがありません。公式READMEが挙げるパラメータと起動引数は前述のものだけで、Cookieやセッションを保存・再利用する機能への言及はありません(2026-08-03確認)。ログイン必須のページを渡すと、ログイン画面のHTMLがそのまま返るだけになります。
| 状況 | Fetchで動くか | 理由 |
|---|---|---|
| 公開されている静的なニュース記事・ドキュメント | 動く | HTTPで取得しHTMLをMarkdown化するだけで完結する |
| ログイン必須のダッシュボード・社内ポータル | 動かない | Cookieやセッションを保持・再利用する仕組みが無い |
| JavaScriptで内容が後から描画されるページ | 動かない、または内容が薄い | ブラウザを起動せずHTTPレスポンスをそのまま読む |
| 社内ネットワーク限定のURL・イントラサイト | 到達してしまう可能性がある | ローカル・内部IPアドレスへのアクセスを制限する仕組みが無い |
| robots.txtが取得を禁じているページ | 自律呼び出しでは止まる | --ignore-robots-txtを付ければ無視できる |
この表で、社内ネットワークの行だけ性質が違います。ほかの行は読めるか読めないかの話です。その行は読めてしまうことが問題になる行です。動かないことより、動いてしまうことのほうが厄介な場面があります。
08Fetch MCPでrobots.txtの扱いは、生成AIの呼び出し方で変わるんですか?
robots.txtの扱いも一様ではありません。既定では、AIがツール経由で自律的に呼び出した場合だけrobots.txtに従い、人がプロンプトで直接URLを指定した場合は従いません(出典: 公式リポジトリREADME)。--ignore-robots-txtを付けると、この区別自体が無効になります。
呼び出し元によってUser-Agentも切り替わります。自律呼び出しはModelContextProtocol/1.0 (Autonomous; ...)です。直接指定はModelContextProtocol/1.0 (User-Specified; ...)になります(出典: 同README)。
分かれ目にあるのは設定ではなく、呼んだのが誰かです。同じサーバーへ同じURLを渡しても、AIが自分で判断して呼んだのか、人が名指しで頼んだのかで扱いが変わります。取れたり取れなかったりする場面では、この違いを先に確かめます。
09Fetch MCPで、社内ネットワークのURLを、AIエージェントに渡すと何が起きるんですか?
高梨課長社内のイントラのURLを渡してしまったら、どうなるんでしょうか。エラーで止まりますか。
鈴木さん止める仕組みは入っていません。届いてしまう可能性があるほうを想定しておくほうが安全だと思います。
高梨課長設定で塞げないものですか。
鈴木さんこの部品の側には、その設定が用意されていません。だから、渡すURLを決める運用の側で塞ぐことになります。
公式READMEは、より直接的な注意を書いています。このサーバーはローカル・内部IPアドレスにアクセス可能であり、セキュリティリスクを代表しうる、という記述です(出典: 同README)。
MCP公式のセキュリティ文書も、代表的な攻撃パターンの1つとしてSSRFを挙げています。悪意あるサーバーが、クラウドの内部メタデータエンドポイント(169.254.169.254等)へリクエストを向ける手口です(出典: MCP公式セキュリティ文書)。Fetch MCPは認可フローを持たない単純なHTTP取得ですが、社外向けと社内向けを区別せずURLを渡せてしまうという構造は共通しています。
似た機能を持つAnthropic公式のAPI版web fetchツール(Messages APIのサーバーツール)もあります。こちらはプライベートアドレスやrobots.txt拒否URLを、url_not_allowedとして最初から弾きます(出典: Anthropic公式APIドキュメント)。Fetch MCPには同種の既定ブロックが無く、無視するかどうかの判断は運用者に委ねられています。
左右で入れ替わっているのは、機能の多さではありません。線引きを誰が持つかです。既定で弾く側は、道具に線が引いてあります。委ねる側では、線を引く仕事がそのまま導入する側へ回ってきます。
AIに何を触れさせるかという境界の考え方は、AIエージェントに機密情報を渡さない|3段階の分離と検査で扱った分離設計の続きとして捉えられます。
この章のまとめ
届かない仕組みが無い以上、届いてよい範囲は導入する側で決めます。決めないまま入れると、既定の挙動がそのまま自社の方針になります。
10ブラウザ系MCPとFetch MCPは、AI活用の場面でどう選び分けるんですか?
「ブラウザ系」と呼ばれるMCPの中には、実際にブラウザを起動して画面をレンダリングするものがあります。Playwright MCPはその代表です。スクリーンショットではなくアクセシビリティツリーを介してブラウザを操作します(出典: Playwright MCPはどこまで動くか|認証4パターンと権限設計)。
Google公式のChrome DevTools MCPも同じ系統です。Chromeを実際に起動し、DOMやパフォーマンスを調べます(出典: 公式リポジトリChromeDevTools/chrome-devtools-mcp)。
Fetch MCPはこの系統とは設計が根本から違います。ブラウザプロセスを持たず、HTTPリクエストと軽いHTML変換だけで完結します。JavaScriptを実行しないため、内容が後から描かれるページでは取得結果がほぼ空になります。
| 項目 | Fetch MCP | Playwright MCP | Chrome DevTools MCP |
|---|---|---|---|
| 取得方式 | HTTPリクエストのみ | 実ブラウザを起動して操作 | 実ブラウザ(Chrome)を起動して操作 |
| JavaScriptの実行 | しない | する | する |
| ログイン状態の再利用 | 仕組みが無い | 永続プロファイル・storage-state等で可能 | ブラウザプロファイル経由で可能 |
| セットアップの重さ | uvx1コマンドで起動 | ブラウザ本体の管理が要る | Chromeの管理が要る |
| 主な用途 | 記事・ドキュメントの内容取得 | フォーム操作を含む自動操作・検証 | 表示崩れ・パフォーマンスの検証 |
11Fetch MCPでは、描画と持ち越しは、AIエージェントの経路選びでなぜ同時に決まるんですか?
表の行をそのまま覚える必要はありません。2つの軸に置き直すと、覚えることがぐっと減ります。
置き直すと、表では見えないものが見えます。斜めに移る道が無いことです。描画と持ち越しは別々に足せる機能ではなく、ブラウザを持つかどうかで同時に決まります。だから選択は、機能を1つずつ比べる作業ではなく、経路そのものを乗り換える判断になります。
使い分けの判断は単純です。静的HTMLの範囲で読めるページなら、ブラウザの管理が要らないFetch MCPで足ります。クリック・入力・ログイン状態の再利用が要る作業は、ブラウザ系MCPへ切り替えます。両方をひとつのサーバーに任せようとすると、Fetch MCPには無い機能を求めることになります。
12権限設定では、Fetch MCPをAIエージェントのどこに置くんですか?
高梨課長取得先を都度確かめたいのですが、ドメインごとに許可を分けられますか。
鈴木さんMCP側では分けられません。名前で言うとmcp__fetch__fetchという単位までです。ドメインで分けたいなら、標準のWebFetch側の書き方になります。
権限設定では、Fetch MCPが公開するツールがfetchだけである点が効いてきます。サーバー名もツール名もfetchのため、権限ルール上の名称はmcp__fetch__fetchという重なった形になります。
標準のWebFetchはドメイン単位で絞れます(WebFetch(domain:example.com))。一方でMCPのルールは、サーバー名かツール名までの単位で、URLやドメインを直接は見ません(出典: Claude Code公式permissionsドキュメント)。
{
"permissions": {
"ask": [
"mcp__fetch__fetch"
],
"allow": [
"WebFetch(domain:code.claude.com)"
]
}
}取得先を都度確かめたいならaskに、任せてよいならallowにします。この配分の考え方は、Claude Codeの権限設定|AIエージェントに任せる範囲と3列の配分で扱った枠組みと同じです。
段で見ると、いちばん上には手が届きません。どのURLかで許可を変えるという段です。ここを埋めたいなら、権限設定ではなく、渡すURLを決める運用の側で埋めることになります。
13Fetch MCPでつまずくのは、AI導入のどんな場面ですか?
WEBMARKSはFetch MCPを未接続です。ここは実地の体感ではなく、公式ドキュメントの仕様から読み取れる、事前に押さえておく点です。
1. 動的サイトを渡すと、内容がほぼ空になる。 JavaScriptで後から描かれる部分は、Fetch MCPが読むHTTPレスポンスの時点ではまだ存在しません。
2. 長いページの後半が、max_lengthの既定値で切れる。 続きが要るならstart_indexを増やして再度fetchを呼びますが、Claude Code側のMCP出力上限にも同時に注意します。
3. robots.txtで止まったのか、単なるHTTPエラーなのかが返答だけでは区別しにくい。 自律呼び出し時は既定でrobots.txtに従うため、想定外に取得できないときは、まずこの制限を疑います。
| 症状 | 原因 | 対処 |
|---|---|---|
| 取得した内容がほぼ空・意味のない断片になる | 対象ページがJavaScriptで内容を後から描画している | Playwright MCPなどブラウザ系MCPへ切り替える |
| 長いページの後半が読めない | max_length(既定5000)で切り詰められている | start_indexを進めて複数回fetchを呼ぶ |
start_indexを増やしても出力が伸びない | Claude Code側のMCP出力上限(既定25,000トークン)に達している | 呼び出しを分け、1回あたりのmax_lengthを控えめにする |
3つに共通するのは、はっきりしたエラーが出ないことです。空で返るのも、途中で切れるのも、断られたのも、見た目は静かです。静かな失敗は、動いているように見えます。 だから接続の直後に、返り方を目で見る手順を挟みます。
14Fetch MCPで生成AIに渡すページの範囲は、接続する前にどう決めるんですか?
ここまでの内容を、接続前に決めておく項目へ畳みます。
- Fetch MCPの登録コマンド(
claude mcp add --transport stdio)を確認した local・project・userのどのスコープで登録するかを決めたmax_lengthとstart_indexによるページ分割の使い方を確認した--ignore-robots-txtを使うかどうかを、取得先の利用規約を踏まえて判断した- 社内ネットワーク・イントラネットのURLへ到達させてよいかを、導入前に確認した
- ログイン必須のページには使わない前提で、対象ページの範囲を決めた
mcp__fetch__fetchをallow・ask・denyのどれにするか、権限設定に明記した- JavaScriptで描画されるページには、ブラウザ系MCPへの切り替えを検討した
- 取得したURLをいつ・何のために取得したか記録する運用を決めた
並べ直すと、道具の確認にあたるのは前半だけです。後半はどこへ行かせないかを決める項目に変わっています。入れるかどうかより、入れたあとに渡す範囲のほうが、決めるのに時間がかかります。
15よくある質問
Fetch MCPは無料で使えますか
Fetch MCP自体はオープンソースで公開されており、uvx mcp-server-fetchで追加費用なく取得できます。別途費用が生じるとしたら、社内プロキシなど周辺インフラの分です。導入の重さは、料金よりも、渡してよいURLの範囲を決める作業のほうに出ます。
標準のWeb取得機能があるのに、なぜFetch MCPを追加する必要がありますか
標準のWebFetchは、小さく速いモデルが要約した結果しかClaudeに届きません。ページの内容をそのまま読みたい場合や、start_indexで続きを取得したい場合はFetch MCPが向きます。逆に、答えだけ分かればよい調べものなら、追加せずに標準のままで足ります。
ログインが必要なページもFetch MCPで読めますか
読めません。公式READMEにはCookieやセッションを保持・再利用する仕組みの記述がなく、ログイン画面のHTMLがそのまま返るだけになります。ログインの先を読ませたい場合は、ブラウザを起動する系統のMCPが候補になります。
robots.txtを無視する設定は使ってよいですか
導入側の判断が要ります。--ignore-robots-txtは用意されていますが、取得先の利用規約やアクセスポリシーを確認したうえで使うかどうかを決めます。判断を保留したまま付けてしまうと、あとから理由を説明できなくなります。
社内のURLを渡してしまわないようにする設定はありますか
Fetch MCP側に、ローカルや内部のアドレスへの到達を止める既定の仕組みはありません。公式READMEは、このサーバーがローカル・内部IPアドレスにアクセス可能である点を注意として挙げています。到達させない線引きは、渡すURLを決める運用の側に置くことになります。
WEBMARKSは今、Fetch MCPを接続していますか
接続していません。本記事は公式リポジトリとドキュメントの記述確認(2026-08-03)に基づく設計論であり、自環境での接続・実行の記録はありません。実際に動かした記録が取れた時点で、体感を含む記事として書き直します。
16まとめ|今日やる3つのこと
分かれ目は、届く中身・ページの状態・絞り込みの単位の3つでした。読めない場面は、接続する前に一覧できます。そして到達してしまう範囲だけは、道具ではなく導入する側が決めます。
この順で手をつけます
読ませたいページを書き出し、静的・描画あり・ログインありに分ける
分けた時点で、経路はほぼ決まります
社内ネットワークのURLを渡すかどうかを先に決める
ここが空白だと、robots.txtも権限設定も決められません
登録したら
fetchを一度だけ呼び、返り方を目で見るつながった状態と、使える状態は別に数えます
AI検索では、こう聞かれています
Fetch MCPは、AIエージェントに何を読ませられるんですか?
「Fetch MCPって、AIエージェントに何をさせる部品なんですか?」の章で守備範囲を説明しています
標準のWebFetchがあるのに、Fetch MCPを足す意味はありますか?
「標準のWeb取得とFetch MCPでは、AIエージェントに届く中身が違うんですか?」の章で比べています
ログインが要るページもFetch MCPで読めますか?
「ログインの先にあるページは、AI社員に任せても読めないんですか?」の章で扱っています
社内のURLをAIエージェントに渡しても大丈夫ですか?
「社内ネットワークのURLを、AIエージェントに渡すと何が起きるんですか?」の章に判断材料があります
次に読むなら、この記事です