Local Web Search MCP Server
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 buildpostinstallスクリプトは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レジストリから利用可能になれば、コマンドはnpxでargsを["-y", "local-websearch-mcp"]に設定できます。
ツール
Tool | Description |
| ウェブを検索し、ランク付けされた結果を返します。 |
| URLを取得し、コンテンツキャッシュ、文字セット処理、GitHub Raw高速パス、RSSフィード抽出、Playwrightフォールバックを備えたクリーンなMarkdownを返します。 |
| プロバイダーの可用性、キャッシュ統計、ブラウザ状態、ルーティングプロファイルメタデータ、機能フラグ、稼働時間を返します。 |
検索戦略
Strategy | Behavior | Semantic query cache |
| 設定済みプロバイダーを順番に試し、最初に利用可能な結果セットで停止します。 | 有効 |
| 現在利用可能な設定済み全プロバイダーに並列でクエリし、URLを重複排除し、RRFでランキングを融合します。 | バイパス |
| インテントを検出し、プロファイル | バイパス |
autoは意図的にオプトインです。strategyを省略しても後方互換性のためにfallbackが使用されます。aggregateとautoではセマンティッククエリキャッシュがバイパスされるのは、クエリキャッシュキーがまだ実行戦略/プロバイダー計画によって名前空間化されていないためです。ディープサーチのページコンテンツは引き続き通常のコンテンツキャッシュを使用します。
SEARCH_PROVIDERSは設定済みプロバイダーセットであると同時に許可リストです。自動ルーティングはSEARCH_PROVIDERSから省略されたプロバイダーを決して有効化しません。ルーティングプロファイルは、順序と、プライマリ候補として選択される設定済みプロバイダーの数のみを変更します。
アグリゲートautoプロファイルでは、選択されたプライマリプロバイダーすべてが利用可能な結果を返さない場合のみ、セカンダリの設定済みプロバイダーに問い合わせます。プライマリで部分的な成功があれば、結果数を増やすためだけにリクエストを広げるのではなく、その結果を受け入れます。これによりスクレイピング負荷が制限され、不要なブロック/CAPTCHA露出が減ります。
現在のルーティングプロファイル: v1。
インテント | 実行 | 優先順位 | プライマリターゲット |
| aggregate | brave, google, bing, duckduckgo | 2 |
| aggregate | brave, google, bing, duckduckgo | 3 |
| aggregate | google, bing, brave, duckduckgo | 3 |
| aggregate | brave, google, bing, duckduckgo | 3 |
| aggregate | google, bing, duckduckgo, brave | 2 |
| aggregate | google, bing, duckduckgo, brave | 2 |
| fallback | google, bing, duckduckgo, brave | すべての設定済み |
| fallback | 既存の設定順 | すべての設定済み |
これらのプロバイダー優先順位は初期の仮説であり、恒久的な品質主張ではありません。バージョン管理されているため、今後のリリースで、サーバー全体にルーティング条件をばらまくことなく、決定論的および実地評価のエビデンスからこれらを調整できます。
インテント認識検索の引数例:
{
"query": "PostgreSQL connection pooling best practices",
"strategy": "auto",
"max_results": 5
}react.devやgithub.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フォールバックを使用します。
設定
変数 | デフォルト | 説明 |
|
| 1分あたりの |
|
| 1分あたりの |
|
| カンマ区切りのプロバイダー許可リスト/順序。サポート値: |
|
| 言語検出と多言語横断検索サポートを有効にします。これにより初回のローカルモデルダウンロードが発生する可能性があります。無効の場合でも、クエリのヒューリスティックはトルコ語などのサポートされるロケールを推測します。 |
|
| Playwrightの待機戦略。高速なレンダリングページフォールバックには |
| 未設定 |
|
|
| SQLiteキャッシュデータベースのパス。 |
|
| 期限切れコンテンツキャッシュのクリーンアップ間隔。 |
Docker
npm run docker:build
npm run docker:upDocker 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 --jsonnpm run smoke:mcpはコンパイル済みサーバーをstdioで起動し、web_searchの3つの戦略値(fallback、aggregate、auto)を検証し、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.md、LICENSE、SECURITY.md のみが含まれます。npm pack は prepack を通じて 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.
This server cannot be installed
Maintenance
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
MCP server for Google search results via SERP API
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
MCP server for searching Airweave collections with natural language queries.
Related MCP Servers
- AlicenseAqualityAmaintenanceA local-first, no-API-key MCP server that enables LLMs to search the web, fetch pages, and read documents using multiple engines and smart fallbacks.1060MIT
- AlicenseAqualityAmaintenanceMCP 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.711621MIT
- AlicenseNot gradedqualityCmaintenanceA 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
- AlicenseNot gradedqualityBmaintenanceMCP server enabling local-first web search, fetch, extract, and caching with citeable excerpts, no API key required. Supports research workflows for agents and apps.18MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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