Skip to main content
Glama
kefyusuf

Local Web Search MCP Server

by kefyusuf

Local Web Search MCP Server

オフラインファーストのMCPサーバーで、ウェブ検索とコンテンツ取得を提供します。外部APIキーは不要で、インテント分類、オプションの多言語横断検索、セマンティック再ランキング、抽出的なディープサーチ回答にローカルモデルを使用します。

特徴

  • 永続的なPlaywrightブラウザインスタンスによるブラウザコンテキストのプール管理。

  • ヘルス追跡と順序付きフォールバックを備えた設定可能なプロバイダーによるウェブ検索。

  • URL正規化、プロバイダー間の重複排除、Reciprocal Rank Fusion (RRF)を備えた、設定済み全プロバイダーにわたるオプションのフェデレーション検索。

  • 控えめなヒューリスティック、ローカル分類器フォールバック、バージョン管理されたプロバイダープロファイルを備えた、オプトインのインテント認識検索ルーティング。

  • 特定サイトのクエリのためのドメインフィルタリング付きウェブ検索。

  • GitHub RawおよびRSSの高速パスと、レンダリングページ向けPlaywrightフォールバックを備えたHTTPファーストのページ取得。

  • fetch_content に対するSSRF保護(localhostおよびプライベートネットワークターゲットをブロック)。

  • 検索・取得ツール向けのトークンバケット方式レート制限。

  • SQLiteとsqlite-vecを利用したセマンティックキャッシュ。

  • ローカルTransformers.jsモデルによるオプションの多言語横断クエリ拡張。

  • Readability、JSDOM、TurndownによるクリーンなMarkdown抽出。

Related MCP server: searxng-mcp

要件

  • Node.js 20.9.0以降。

  • npm。

  • インストール時のnpmパッケージ、Playwright Chromium、初回モデルダウンロードのためのネットワークアクセス。

インストール

npm install
npm run build

postinstallスクリプトはPlaywright Chromiumをダウンロードします。モデルベースの機能を初めて使用するとき、Transformers.jsは必要なモデルファイルをローカルのHugging Faceキャッシュにダウンロードします。モデルを読み込む最初のリクエストは遅くなる可能性がありますが、以降のリクエストはローカルキャッシュを再利用します。初回実行を最も軽くするには、ENABLE_CROSSLINGUAL=falseのままにしてください。明らかなstrategy=autoインテントはインテント分類器を読み込まずにヒューリスティックで解決されますが、あいまいなautoクエリは初回の分類器ダウンロードを引き起こす可能性があります。

MCPクライアントの設定

ビルド済みサーバーをMCPクライアント設定に追加します:

{
  "mcpServers": {
    "websearch": {
      "command": "node",
      "args": ["path/to/local-websearch-mcp/build/index.js"],
      "env": {
        "RATE_LIMIT_SEARCH_PER_MIN": "10",
        "RATE_LIMIT_FETCH_PER_MIN": "20",
        "SEARCH_PROVIDERS": "duckduckgo,bing",
        "ENABLE_CROSSLINGUAL": "false",
        "CACHE_DB_PATH": "websearch_cache.db"
      }
    }
  }
}

パッケージがグローバルまたはパッケージランナー経由でインストールされている場合、バイナリエントリポイントを使用します:

{
  "mcpServers": {
    "websearch": {
      "command": "local-websearch-mcp",
      "args": [],
      "env": {
        "SEARCH_PROVIDERS": "duckduckgo,bing",
        "ENABLE_CROSSLINGUAL": "false"
      }
    }
  }
}

パッケージランナーベースのクライアントの場合、パッケージが設定済みのnpmレジストリから利用可能になれば、コマンドはnpxargs["-y", "local-websearch-mcp"]に設定できます。

ツール

Tool

Description

web_search

ウェブを検索し、ランク付けされた結果を返します。strategy=autoでインテント認識のプロバイダー計画、strategy=aggregateで全プロバイダーのフェデレーション検索、domainでサイトへの結果制限、deep=trueで上位の結果ページを取得してソースに基づくテキスト回答を抽出します。

fetch_content

URLを取得し、コンテンツキャッシュ、文字セット処理、GitHub Raw高速パス、RSSフィード抽出、Playwrightフォールバックを備えたクリーンなMarkdownを返します。

server_status

プロバイダーの可用性、キャッシュ統計、ブラウザ状態、ルーティングプロファイルメタデータ、機能フラグ、稼働時間を返します。

検索戦略

Strategy

Behavior

Semantic query cache

fallback (default)

設定済みプロバイダーを順番に試し、最初に利用可能な結果セットで停止します。

有効

aggregate

現在利用可能な設定済み全プロバイダーに並列でクエリし、URLを重複排除し、RRFでランキングを融合します。

バイパス

auto

インテントを検出し、プロファイルv1からルーティング計画を構築して、既存のfallback/aggregate実行部に委譲します。

バイパス

autoは意図的にオプトインです。strategyを省略しても後方互換性のためにfallbackが使用されます。aggregateautoではセマンティッククエリキャッシュがバイパスされるのは、クエリキャッシュキーがまだ実行戦略/プロバイダー計画によって名前空間化されていないためです。ディープサーチのページコンテンツは引き続き通常のコンテンツキャッシュを使用します。

SEARCH_PROVIDERSは設定済みプロバイダーセットであると同時に許可リストです。自動ルーティングはSEARCH_PROVIDERSから省略されたプロバイダーを決して有効化しません。ルーティングプロファイルは、順序と、プライマリ候補として選択される設定済みプロバイダーの数のみを変更します。

アグリゲートautoプロファイルでは、選択されたプライマリプロバイダーすべてが利用可能な結果を返さない場合のみ、セカンダリの設定済みプロバイダーに問い合わせます。プライマリで部分的な成功があれば、結果数を増やすためだけにリクエストを広げるのではなく、その結果を受け入れます。これによりスクレイピング負荷が制限され、不要なブロック/CAPTCHA露出が減ります。

現在のルーティングプロファイル: v1

インテント

実行

優先順位

プライマリターゲット

technical

aggregate

brave, google, bing, duckduckgo

2

research

aggregate

brave, google, bing, duckduckgo

3

news

aggregate

google, bing, brave, duckduckgo

3

commercial

aggregate

brave, google, bing, duckduckgo

3

shopping

aggregate

google, bing, duckduckgo, brave

2

local

aggregate

google, bing, duckduckgo, brave

2

navigational

fallback

google, bing, duckduckgo, brave

すべての設定済み

general

fallback

既存の設定順

すべての設定済み

これらのプロバイダー優先順位は初期の仮説であり、恒久的な品質主張ではありません。バージョン管理されているため、今後のリリースで、サーバー全体にルーティング条件をばらまくことなく、決定論的および実地評価のエビデンスからこれらを調整できます。

インテント認識検索の引数例:

{
  "query": "PostgreSQL connection pooling best practices",
  "strategy": "auto",
  "max_results": 5
}

react.devgithub.comのようなターゲット検索にはdomainを使用します。インテント検出は常に元のクエリを受け取り、site:<domain>はプロバイダー実行のため後に追加されるだけです。

{
  "query": "server components reference",
  "domain": "react.dev",
  "strategy": "auto",
  "max_results": 5
}

deep=trueは、クライアントがサーバーに上位ページの取得とページテキストからの可能性の高い回答の抽出を必要とする場合のみ使用します。最終的な推論と要約の責任はMCPクライアントLLMに残ります。

古い検出日付を含む検索スニペットには短い鮮度警告が含まれ、クライアントが古いソースを慎重に扱えるようにします。

フェデレーション検索の引数例:

{
  "query": "postgres connection pooling strategies",
  "strategy": "aggregate",
  "max_results": 5
}

fetch_contentはブラウザを開く前に、ソース固有の高速パスを使用します:

  • GitHubリポジトリ、blob、tree、rawのURLは、可能な場合raw.githubusercontent.comから読み取られます。

  • RSSまたはAtomフィードのURLと、一般的なブログ/ニュースのフィードパスは、最近のアイテムのMarkdownリストに変換されます。

  • 通常のHTMLページは、引き続きHTTPファーストのReadability解析とPlaywrightフォールバックを使用します。

設定

変数

デフォルト

説明

RATE_LIMIT_SEARCH_PER_MIN

10

1分あたりのweb_searchリクエスト最大数。無効または非正の値はリミッターを無効にします。

RATE_LIMIT_FETCH_PER_MIN

20

1分あたりのfetch_contentリクエスト最大数。無効または非正の値はリミッターを無効にします。

SEARCH_PROVIDERS

duckduckgo,bing

カンマ区切りのプロバイダー許可リスト/順序。サポート値: duckduckgobingbravegooglefallbackはこの順序を維持し、aggregateは設定済み全プロバイダーを使用し、autoはプロファイルの優先順位とこのセットの積集合を取ります。

ENABLE_CROSSLINGUAL

false

言語検出と多言語横断検索サポートを有効にします。これにより初回のローカルモデルダウンロードが発生する可能性があります。無効の場合でも、クエリのヒューリスティックはトルコ語などのサポートされるロケールを推測します。

FETCH_WAIT_UNTIL

networkidle

Playwrightの待機戦略。高速なレンダリングページフォールバックにはdomcontentloadedを使用します。

FORCE_PLAYWRIGHT

未設定

trueに設定するとHTTPファースト取得をスキップし、常にPlaywrightを使用します。

CACHE_DB_PATH

websearch_cache.db

SQLiteキャッシュデータベースのパス。

CACHE_CLEANUP_INTERVAL_HOURS

24

期限切れコンテンツキャッシュのクリーンアップ間隔。

Docker

npm run docker:build
npm run docker:up

Docker ComposeはSQLiteキャッシュを/app/dataにマウントされた名前付きボリュームに保存し、Hugging Faceモデルを別の名前付きボリュームに保存します。コンテナはCACHE_DB_PATH=/app/data/websearch_cache.dbを設定します。

開発

npm run build
npm run typecheck
npm test
npm run smoke:mcp
npm audit --audit-level=moderate
npm pack --dry-run --json

npm run smoke:mcpはコンパイル済みサーバーをstdioで起動し、web_searchの3つの戦略値(fallbackaggregateauto)を検証し、server_statusからルーティング診断を確認し、fetch_contentがlocalhostをブロックすることを確認します。ライブのプロバイダー検索は実行しないため、CIは検索エンジンのHTML/ネットワーク可用性に依存しません。

決定的なTR/ENルーティングフィクスチャはevals/search-routing/queries.jsonlにあり、通常のVitestスイートで実行されます。これらは、実際の分類器を読み込んだりプロバイダーに問い合わせたりせずに、インテントカバレッジ、控えめなヒューリスティック動作、あいまいさの保留ケース、プロバイダー許可リストの強制を検証します。

トラブルシューティング

  • インストール後に起動が失敗する場合は、npx playwright install chromium を実行してください。

  • 最初のモデルベースのリクエストが遅い場合は、Transformers.js モデルのダウンロードが完了するのを待って再試行してください。

  • 検索結果が返らない場合は、SEARCH_PROVIDERS の順序/セットを変更するか、fetch_content の URL を直接試してください。

  • 集約モードが遅すぎる場合やプロバイダーのブロックを引き起こす場合は、デフォルトの fallback ストラテジーを使用してください。

  • auto がユースケースに対して広すぎる検索プランを選択する場合は、明示的な fallback または aggregate を使用してください。明示的なストラテジーは auto プランナーをバイパスします。

  • Docker が Chromium を見つけられない場合は、npm run docker:build でイメージを再ビルドしてください。

  • キャッシュファイルがプロジェクトルートに現れる場合は、CACHE_DB_PATH を専用のデータディレクトリに設定してください。

npm パッケージング

npm パッケージには build/README.mdLICENSESECURITY.md のみが含まれます。npm packprepack を通じて npm run build を実行するため、パッケージにはローカルのプランニングファイル、テスト、キャッシュ、ソースのみのアーティファクトではなく、コンパイル済み JavaScript が含まれます。

セキュリティ

報告手順と現在の依存関係の監査メモについては、SECURITY.md を参照してください。

ライセンス

ISC

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for private web search via self-hosted SearXNG with local reranking, full-page content fetching via Firecrawl, and optional Ollama-powered query expansion and summaries.
    7
    116
    21
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A fully local MCP server that provides web search via self-hosted SearXNG and page-to-markdown conversion (static and JS-rendered), all aggregated behind a single endpoint for use with AI assistants.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server enabling local-first web search, fetch, extract, and caching with citeable excerpts, no API key required. Supports research workflows for agents and apps.
    18
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kefyusuf/local-websearch-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server