mcpField
M
MCP Web Search Tool

MCP Web Search Tool

ローカル
medium.com検索162 週間前に更新

MCP Web Search Tool について

MCP Web Search Toolは、AIアシスタントにウェブ・ニュース検索、画像検索、ページ本文の抽出を提供するMCPサーバーです。Brave Searchを設定して利用でき、キー不要のウェブ検索にはDuckDuckGoを使います。

主な機能

  1. 01フィルター付きのリアルタイムウェブ検索
  2. 02新着ニュースと画像の検索
  3. 03URLから読みやすい本文を抽出
  4. 04検索プロバイダーの追加に対応
  5. 05DuckDuckGoによるウェブ検索の代替
  6. 06安定したID付きの構造化結果

活用シーン

  1. 01アシスタントの回答用に最新情報を検索
  2. 02新着ニュースを検索して出典を確認
  3. 03画像を探して出典ページを読む
  4. 04URLから読みやすいコンテンツを取得

MCP 対応

MCPサーバーはstdioトランスポートを使い、web_search、news_search、image_search、fetch_url、list_providersの5つのツールをMCPクライアントに公開します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"web-search-tool": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
起動コマンドdocker run -i --rm build

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

パッケージ
ocibuild

ツール

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

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

詳細

MCP Web Search Tool

アシスタントにライブウェブ検索、ページ全体の読み取り、出典の引用機能を提供する MCP サーバーです。Stdio トランスポート、プロバイダーの差し替えに対応し、スクレイパーへの依存はありません。

Claude Desktop の例

CI ライセンス:MIT Node

クイックスタート · ツール · 設定 · クライアント · セキュリティ · 変更履歴


概要

5 つのツールを提供します:web_search、news_search、image_search、fetch_url、list_providers。検索結果は、安定した ID 付きの、順位付けされた概要を返します。fetch_url は、任意の ID に対応するページを読み取ります。主なプロバイダーは Brave Search で、キーなしで使えるフォールバックとして DuckDuckGo が動作します。

要件

Node.js>= 20.18(ネイティブの fetch を使用)
npm>= 10
Brave Search API キー任意です。キーがない場合、web_search は DuckDuckGo を使用します。news_search と image_search にはキーが必要です。

クイックスタート

npm から:

npx -y mcp-web-search-tool

MCP クライアントで、引数 ["-y", "mcp-web-search-tool"] を指定した npx を参照し、クライアントの env ブロックを通じて BRAVE_API_KEY を渡します。

ソースから:

git clone https://github.com/gabrimatic/mcp-web-search-tool.git
cd mcp-web-search-tool
npm install
cp .env.example .env   # edit BRAVE_API_KEY if you have one
npm run build
npm start

Docker で実行:

docker build -t mcp-web-search .
docker run --rm -i -e BRAVE_API_KEY mcp-web-search

Claude Desktop、Claude Code、Codex、VS Code、Cursor、Windsurf との連携については、MCP_CLIENTS.md を参照してください。


ツール

検索ツールは、信頼できないコンテンツを示すバナー、モデル向けの Markdown 形式の表示、構造化ペイロードを含むフェンス付き JSON ブロックを返します。fetch_url は、読みやすいページ本文とリンクブロックを返します。エラーは、対応方法を示すメッセージを含む isError: true のコンテンツとして返されます。不明なツールの呼び出しのみ、プロトコルエラーがスローされます。

web_search

ライブウェブ検索です。最新の情報を出典に基づいて回答する際に、最初に使用してください。

パラメーター型説明
search_termstring、必須クエリ文字列です。
providerenum"brave search" または "duckduckgo" です。キーが設定されている場合は Brave が、それ以外の場合は DuckDuckGo がデフォルトで使用されます。
countint(1~20)結果の件数です。デフォルトは 10 です。
offsetintページネーションのオフセットです(ウェブ検索のみ)。
cursorstring前回のレスポンスから取得した不透明なカーソルです。
freshnessstringpd(24 時間)、pw(1 週間)、pm(1 か月)、py(1 年)、または YYYY-MM-DDtoYYYY-MM-DD です。
countrystringISO 国コードです。
search_langstringUI 言語です。例:en。
safesearchenumoff、moderate、strict です。
include_domainsstring[]結果をこれらのホストに限定します。
exclude_domainsstring[]これらのホストからの結果を除外します(ホスト名のサフィックスで照合)。
news_search

ソース名と公開日を含む、最近のニュースを検索します。Brave のみで利用できます。

image_search

サムネイル付きの画像検索結果を返します。Brave のみで利用できます。

fetch_url

検索結果または任意の http(s) URL を読み取ります。前回の検索結果の ID(推奨)または完全な URL を渡してください。

パラメーター型説明
id_or_urlstring結果 ID(例:r_a1b2c3d4e5f6)または完全な http(s) URL です。
urlstringid_or_url の非推奨エイリアスです。
max_charsint(200~200 000)返される文字数のソフト上限です。デフォルトは 8000 です。
cursorstring前回のレスポンスから取得したカーソルで、読み取りを続けます。

ページタイトル、読みやすいテキスト(スクリプト、スタイル、ナビゲーション、フッター、サイドバーは除去)、最初の 25 件の外部リンク、HTTP ステータス、コンテンツタイプ、バイト長、切り捨てが発生した場合は nextCursor を返します。

http(s) 以外のスキームと、プライベート、ループバック、リンクローカル、マルチキャスト、または IPv4 マップ IPv6 のプライベートアドレスに解決されるホストは拒否されます。詳細については、SECURITY.md を参照してください。

list_providers

登録済みのプロバイダーと現在のデフォルトを返します。このセッションで news_search または image_search が利用可能かどうかわからない場合は、一度呼び出してください。


設定

すべての設定は環境変数で行います。参考:.env.example。

変数デフォルト用途
BRAVE_API_KEY空Brave Search API キー。設定されていない場合は DuckDuckGo が使用されます。
MAX_RESULTS10デフォルトの結果数(1~50 に制限)。
REQUEST_TIMEOUT10000リクエストごとのタイムアウト(ミリ秒、1 000~60 000)。
DEFAULT_PROVIDERauto特定のプロバイダーを強制的に指定します(例:duckduckgo)。
ALLOW_KEYLESStruefalse の場合、BRAVE_API_KEY がないとサーバーは起動しません。
CACHE_MAX_ENTRIES / CACHE_TTL_MS256 / 300000検索キャッシュ。
FETCH_CACHE_MAX / FETCH_CACHE_TTL_MS128 / 600000URL 取得キャッシュ。
FETCH_TIMEOUT_MS / FETCH_MAX_BYTES15000 / 2000000fetch_url のリクエストごとの予算。
RESULT_ID_CACHE_MAX / RESULT_ID_TTL_MS2000 / 3600000fetch_url が解決できる結果 ID の数と有効期間。

プロジェクトの構成

src/
├── index.ts                    MCP server: tool registry, dispatch, rendering
├── config.ts                   env loader, validation, defaults
├── providers/
│   ├── SearchProvider.ts       abstract contract and shared types
│   ├── SearchProviderFactory   registry and default selection
│   ├── BraveSearchProvider     web/news/images via Brave API
│   └── DuckDuckGoProvider      keyless HTML-lite fallback
├── services/
│   ├── SearchService.ts        provider dispatch, LRU+TTL cache
│   └── FetchService.ts         safe URL fetch, readable extraction
└── utils/
    ├── http.ts                 native fetch, retry/backoff/timeout
    ├── html.ts                 zero-dep HTML to text + links
    ├── cache.ts                LRU+TTL cache
    └── ids.ts                  stable result-id minting and resolution
tests/                          vitest suite
プロバイダーの追加
import { SearchProvider, SearchResponse, SearchOptions } from './SearchProvider.js';

export class MyProvider extends SearchProvider {
  getName() { return 'My Provider'; }
  override requiresApiKey() { return true; }
  async search(query: string, _opts: SearchOptions = {}): Promise<SearchResponse> {
    const out = this.emptyResponse(query, 'web');
    out.results = mapped; // shape: SearchResult[]
    return out;
  }
}

SearchProviderFactory.setupDefaults に登録します。各エントリーで mintResultId(url) を呼び出すと、結果 ID が自動的に生成されます。


開発

npm run dev          # tsx watch mode
npm test             # vitest suite
npm run lint         # eslint + prettier
npm run typecheck    # tsc --noEmit
npm run format
npm run build

CI では Node 22 と 24 で lint、format check、type check、build、tests を実行します。イメージの入力に変更があった場合は、Docker イメージをビルドします。テストでは、LRU+TTL キャッシュ、HTML 抽出器、DuckDuckGo パーサー、検索サービスのキャッシュ、HTTP のリトライ/バックオフ、SSRF ガード、ドメイン照合、結果 ID リゾルバーを対象としています。


プロンプトの例

  • 「今夜の NBA の試合を受けて、MVP レースについてアナリストは何と言っていますか?」
  • 「RAG benchmarks 2025 の上位 3 件の結果を要約し、最初の論文の要旨を取得してください。」
  • 「Webb 望遠鏡の最新のディープフィールドの画像を探し、NASA のページを開いてキャプションを引用してください。」
  • 「現在のベルリンの天気はどうですか?」

ライセンス

MIT ライセンス

開発者

Soroush Yousefpour による開発

© All rights reserved.

YouTube 動画

Claude を使った MCP Web Search Tool の短いデモ:

Claude + MCP Web Search – ライブデモ

Medium の記事

プロジェクトの背景と仕組みについて:

MCP Web Search Tool を詳しく解説

サポート

本を買って応援する

コメント

MCP は初めてですか?

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

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