mcpField
S
Searchfetch - Mcp Server For Web Search And Fetching

Searchfetch - Mcp Server For Web Search And Fetching

ローカル
github.com/maxylev検索42 週間前に更新

Searchfetch - Mcp Server For Web Search And Fetching について

SearchFetchは、AIエージェントにウェブ検索とページ取得を提供するMCPサーバーです。ステルスブラウザーでページを描画して簡潔なMarkdownに変換し、PythonとNode.jsのランタイム、テンプレート抽出、検索エンジンのフォールバックに対応します。

主な機能

  1. 01ブラウザーでページを描画
  2. 02ページ内容を簡潔なMarkdownに変換
  3. 03検索エンジン障害時のフォールバック
  4. 04サイト別テンプレートによる抽出
  5. 05カスタムJSONテンプレートに対応
  6. 06PythonとNode.jsで実行

活用シーン

  1. 01エージェント向けのウェブ検索と結果取得
  2. 02JavaScript描画ページの読み取り
  3. 03GitHub、npm、ドキュメントページからの構造化抽出

MCP 対応

MCPサーバーとして、検索用の読み取り専用`websearch`とページ取得用の`webfetch`ツールをクライアントに提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"searchfetch": {
"command": "uvx",
"args": [
"searchfetch"
]
}
}
}
起動コマンドuvx searchfetch

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypisearchfetch

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

SearchFetch

AI エージェントに、ステルスブラウザーを通じたウェブ検索とページ取得を提供する MCP サーバーです。ページは JavaScript を実行してレンダリングされ、ノイズを除去したうえで、簡潔な Markdown として返されます。

  • ブラウザーによるレンダリング: CloakBrowser は、人間らしい入力を使って Chromium を実行します。取得のたびに、分離されたブラウザーコンテキストを使用します。サイトによっては、引き続きログインやチャレンジが求められることがあります。
  • 障害耐性: 接続が切れたブラウザーを再起動し、タイムアウト、ネットワーク障害、HTTP 429 が発生した場合は、Retry-After を尊重し、最大 30 秒で一度だけ再試行します。組み込みの検索エンジンは、DuckDuckGo HTML、さらに DuckDuckGo Lite にフォールバックします。
  • トークン効率の高い出力: 変換前に、スクリプト、スタイル、SVG、インラインスタイル、埋め込み data: 画像を削除します。画像、メディア、フォントはネットワーク層でブロックされます。
  • テンプレート駆動の抽出: GitHub、GitLab、npm、PyPI、crates.io、docs.rs、Docker Hub、Wikipedia、MDN、Reddit、YouTube、DEV、pkg.go.dev、Javadoc、一般的なドキュメントサイト向けの JSON テンプレートがあります。カスタムテンプレートをインラインで渡すこともできます。
  • 2 つのランタイム: Python(uvx、Python 3.11.5 以降)または Node.js(npx、Node 24 以降)を使用でき、ツール、テンプレート、出力は共通です。初回実行時にブラウザーバイナリがダウンロードされます。

セットアップ

手動でインストールする必要はありません。MCP クライアントで uvx または npx を指定してください。

{
  "mcpServers": {
    "searchfetch": {
      "command": "uvx",
      "args": ["searchfetch"]
    }
  }
}

Node.js の場合は、"command": "npx", "args": ["-y", "searchfetch"] を使用してください。Cursor では、uvx searchfetch または npx -y searchfetch を指定した command サーバーを追加します。

ツール

どちらのツールも読み取り専用です。エラーは MCP ツールエラーとして返されます。

websearch
パラメーター型デフォルト説明
querystring必須検索クエリ(空白のみは不可)。
enginestring"duckduckgo""duckduckgo"、"google"、検索テンプレート名、またはインライン JSON テンプレート。
regionstring/nullnull"us-en" のような地域と言語のコード。DuckDuckGo:kl、Google:gl と hl。
safe_searchboolean/nullnulltrue または false はエンジンのセーフサーチを設定し、null はエンジンのデフォルトを使用します。
max_resultsinteger10結果の最大数(正の値)。
block_mediabooleantrue画像、メディア、フォントをネットワーク層でブロックします。

結果は、タイトル、URL、スニペットを番号付きリストで表示します。エンジンが失敗した場合、または結果がない場合は、fallback チェーンの次のテンプレート(google → duckduckgo-search → duckduckgo-lite-search)が試され、出力の先頭に表示される [websearch: …] の注記で理由が説明されます。

webfetch
パラメーター型デフォルト説明
urlstring必須絶対 http/https URL。
templatestring"auto""auto"(URL から検出)、テンプレート名、またはインライン JSON テンプレート。
start_indexinteger0Unicode コードポイント単位の開始オフセット(0 以上)。
max_lengthinteger10000返すコードポイントの最大数(正の値)。
block_mediabooleantrueネットワーク層で画像、メディア、フォントをブロックします。

出力の末尾には、テンプレート名と文字範囲を示すフッターが付きます。残りのコンテンツがある場合は、次の start_index も示されます。どのテンプレートにも一致しないページは、ナビゲーション、ヘッダー、フッター、サイドバー、ダイアログ、メディアを削除してから、ページ全体を変換します(template="auto (fallback)")。 raw テンプレートでは、削除を行わずに <body> 全体を変換します。

テンプレート

組み込みテンプレートは templates/ にあり、両方のランタイムで共有されます。ページ テンプレート:github-repo、github-issue、npm-package、pypi-package、crates-package、 docs-rs、javadoc、docs-page、docker-hub、wikipedia、gitlab、reddit、 mdn-web-docs、devto、go-pkg、youtube、raw。検索テンプレート:google-search、 duckduckgo-search、duckduckgo-lite-search。

テンプレートは、読み込み時またはインラインで渡されたときに検証されます。

フィールド説明
name必須の一意な名前(インラインテンプレートのデフォルトは "custom" です)。
sections必須のセクションリスト(下記を参照)。
orderauto 検出での優先順位。値が小さいほど優先されます。
url_patternsauto 用のテンプレートを選択する正規表現(JavaScript および Python と互換性があります)。
remove抽出前に削除する CSS セレクター。デフォルトでは、スクリプト、スタイル、SVG、ナビゲーション、フッター、iframe が対象です。
source_url最初に試す生の Markdown ソース(例:"{url}.md")。HTML のレスポンスは無視されます。
cookiesブラウザーコンテキストに追加する Playwright Cookie。
block_resourcesblock_media が有効な場合にブロックするリソースタイプ。デフォルト:image、media、font。
url_template{placeholders} を含む検索 URL。これにより、テンプレートを websearch で使用できます。
url_paramsプレースホルダーごとの設定:required、default、encode: "url"。
engine"duckduckgo" または "google":region と safe_search を URL パラメーターにどう対応させるかを指定します。
fallbackこのテンプレートが失敗した場合に試す検索テンプレート名。

各セクションには、name、selector(空の場合は <body> を選択)、および任意で format(text、markdown、 attribute と attribute、または html)、transform(strip、 decode_google_url、decode_ddg_url、json_parse、resolve_href のいずれか、またはリスト)、required、multiple、 max_items、children(一致した各要素の内部から抽出するフィールド)を指定します。

トップレベルのカンマで区切られたセレクターは、優先順位付きのフォールバックです。最初に一致したセレクターが使われ、空のフォールバックは現在の要素を選択します。子要素は親要素とその祖先の内部を検索し、隣接する結果は検索しないため、見つからないフィールドは欠落したままになります。必須のセクションまたはフィールドが見つからない場合は、エラーとして報告されます。

最初の項目に Author/User と Comment/Body フィールドがあるレコードセクションはコメントスレッドとしてレンダリングされます。それ以外のレコードは、インデントされた Key: value ブロックとしてレンダリングされます。

開発

npm ci && uv sync --locked --extra dev
git config core.hooksPath .githooks   # optional: format, lint and unit tests before commits

npm test               # Node (node:test) and Python (pytest) unit tests
npm run lint           # ESLint and Ruff
npm run format         # Prettier and Ruff format (format:check to verify)
npm run e2e            # real browser against local fixtures, plus the packed npm and wheel builds
npm run check          # everything CI runs
npm run inspect:node   # MCP Inspector (inspect:py for Python)
レイアウト
パス内容
src/Node.js ランタイム(index.js は searchfetch 実行ファイルです)。
searchfetch/Python パッケージ(python -m searchfetch または searchfetch スクリプト)。
templates/共有テンプレート。npm パッケージと Python wheel に同梱されます。
tests/fixtures/両ランタイムの抽出結果と出力を同一に保つ共有フィクスチャです。
tests/node, tests/python単体テスト。
tests/e2e/ローカル HTTP サーバーに対して stdio 経由で実行する MCP エンドツーエンドテストです。

両ランタイムはモジュールごとに(templates、extract、markdown、compose、 browser、server)対応しています。一方に変更を加える場合は、動作が外部から確認できる ものであれば、共有フィクスチャも用意したうえで、もう一方にも変更を加えてください。

リリース

package.json と pyproject.toml の両方で version を更新し(その後、npm install と uv lock を実行します)、コミットして対応するタグをプッシュします。

git tag -a v4.0.1 -m "v4.0.1" && git push origin main v4.0.1

Publish ワークフローは、タグが両方のバージョンと一致することを確認し、lint と単体テストを実行した後、npm と PyPI に公開し、生成されたリリースノートとともに GitHub Release を作成します。タグの処理を再試行するには、Actions タブからそのタグを指定してワークフローを手動で実行してください。

制限事項
  • HTML から Markdown への変換には turndown(Node)と markdownify(Python)を使用します。一般的なコンテンツでは結果は一致しますが、テーブルなどの特殊なケースでは異なります。
  • DOM の準備が整った後、各 fetch はネットワークの動きが落ち着くまで最大 5 秒待機します。その後もレンダリングが続くページでは、コンテンツが一部しか返されないことがあります。
  • E2E テストではローカルのフィクスチャを使用します。検索エンジンの稼働状況やサードパーティのページレイアウトは時間とともに変化するため、別途ライブチェックが必要です。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。