MCP SearXNG拡張サーバー
カテゴリ認識型ウェブ検索、ウェブサイトスクレイピング、日時ツールのためのモデルコンテキストプロトコル(MCP)サーバー。SearXNGおよび最新のMCPクライアントとのシームレスな統合を実現するように設計されています。
特徴
🔍 カテゴリサポート付きの SearXNG 搭載ウェブ検索 (一般、画像、動画、ファイル、地図、ソーシャルメディア)
📄 引用メタデータと自動 Reddit URL 変換によるウェブサイトコンテンツのスクレイピング
💾 自動鮮度検証機能を備えたメモリ内キャッシュ
🚦 サービスの不正使用を防ぐためのドメインベースのレート制限
🕒 タイムゾーンを考慮した日付/時刻ツール
⚠️ カスタム例外タイプによる堅牢なエラー処理
🐳 Docker化されており、環境変数で設定可能
⚙️ コンテナの再起動間での構成の永続化
Related MCP server: OneSearch MCP Server
クイックスタート
前提条件
システムにDockerがインストールされている
実行中の SearXNG インスタンス (セルフホストまたはアクセス可能なエンドポイント)
インストールと使用方法
Docker イメージをビルドします。
SearXNG インスタンスで実行します (手動 Docker 実行):
この例では、 SEARXNG_ENGINE_API_BASE_URLが明示的に設定されています。DESIRED_TIMEZONE もAmerica/New_Yorkに明示的に設定されており、これはデフォルト値と一致します。docker docker runコマンド中に-eフラグを使用DESIRED_TIMEZONEて環境変数が指定されていない場合、サーバーはDockerfileで定義されたデフォルト値を自動的に使用します(以下の環境変数の表を参照)。したがって、 DESIRED_TIMEZONEにデフォルト値を使用する場合は、 -e DESIRED_TIMEZONE="America/New_York"フラグを省略できます。ただし、 SEARXNG_ENGINE_API_BASE_URL重要であり、Dockerfileのデフォルト( http://host.docker.internal:8080/search )が適切でない場合は、通常、特定のSearXNGインスタンスのアドレスと一致するように設定する必要があります。
手動Docker実行に関する注意:(下記参照)。
MCP クライアント (例: VS Code の Cline) を構成します。
MCPクライアントがこのサーバーを正しく管理・実行するには、クライアント側のovertlids/mcp-searxng-enhancedサーバー設定内で必要な環境変数をすべて定義する必要があります。MCPクライアントはこれらの設定を使用してdocker runコマンドを構築します。
以下は、MCPクライアントのJSON設定(例: cline_mcp_settings.json )内でこのサーバーに推奨されるデフォルト設定です。この例では、 Dockerfileで定義されているデフォルト値に設定されているすべての環境変数が明示的にリストされています。これを直接コピー&ペーストし、必要に応じて値をカスタマイズできます。
MCP クライアント構成の重要なポイント:
上記の例では、すべての環境変数をデフォルト値に設定して Docker コンテナを実行するための完全な引数セットが提供されています。
設定をカスタマイズするには、MCPクライアントの設定にある
args配列内の対応する-e "VARIABLE_NAME=value"行の値を変更するだけです。例えば、SEARXNG_ENGINE_API_BASE_URLとDESIRED_TIMEZONE変更するには、それぞれの行を調整します。各変数とそのデフォルトの詳細な説明については、以下の「環境変数」表を参照してください。
サーバーの動作は主にこれらの環境変数によって制御されます。ods_config.json ファイル
ods_config.json設定に影響を与える可能性があります(構成管理を参照)が、MCP クライアントから渡される環境変数が優先されます。
ネイティブ実行(Dockerなし)
Docker を使用せずに Python を使用してサーバーを直接実行する場合は、次の手順に従ってください。
1. Pythonのインストール:
このサーバーにはPython 3.9 以降が必要です。Python 3.11 (Docker イメージで使用されているもの) が推奨されます。
Pythonはpython.orgからダウンロードできます。
2. リポジトリのクローンを作成します。
GitHub からコードを取得します:
git clone https://github.com/OvertliDS/mcp-searxng-enhanced.git cd mcp-searxng-enhanced
3. 仮想環境を作成してアクティブ化する(推奨)
仮想環境を使用すると、依存関係を管理し、他の Python プロジェクトとの競合を回避するのに役立ちます。
# For Linux/macOS python3 -m venv .venv source .venv/bin/activate # For Windows (Command Prompt) python -m venv .venv .\.venv\Scripts\activate.bat # For Windows (PowerShell) python -m venv .venv .\.venv\Scripts\Activate.ps1
4. 依存関係をインストールします。
必要な Python パッケージをインストールします。
pip install -r requirements.txt主な依存関係には、
httpx、BeautifulSoup4、pydantic、trafilatura、python-dateutil、cachetools、zoneinfoなどがあります。
5. SearXNG がアクセス可能であることを確認する:
SearXNGインスタンスが稼働している必要があります。APIベースURL(例:
http://127.0.0.1:8080/search://127.0.0.1:8080/search)を確認してください。
6. 環境変数を設定する:
サーバーは環境変数で設定されます。少なくとも、
SEARXNG_ENGINE_API_BASE_URLを設定する必要があるでしょう。Linux/macOS (bash/zsh):
export SEARXNG_ENGINE_API_BASE_URL="http://your-searxng-instance:port/search" export DESIRED_TIMEZONE="America/Los_Angeles"Windows (コマンドプロンプト):
set SEARXNG_ENGINE_API_BASE_URL="http://your-searxng-instance:port/search" set DESIRED_TIMEZONE="America/Los_Angeles"Windows (PowerShell):
$env:SEARXNG_ENGINE_API_BASE_URL="http://your-searxng-instance:port/search" $env:DESIRED_TIMEZONE="America/Los_Angeles"利用可能なすべてのオプションについては、以下の「環境変数」表を参照してください。設定されていない場合は、スクリプトまたは
ods_config.jsonファイル(ルートディレクトリまたはODS_CONFIG_PATHに存在する場合)のデフォルト値が使用されます。
7. サーバーを実行します。
Python スクリプトを実行します。
python mcp_server.pyサーバーが起動し、stdin/stdout 経由で MCP クライアント接続をリッスンします。
8. 構成ファイル (
代わりに、または環境変数と組み合わせて、プロジェクトのルートディレクトリ(または環境変数
ODS_CONFIG_PATHで指定されたパス)にods_config.jsonファイルを作成することもできます。環境変数は常にこのファイルの値よりも優先されます。例:json { "searxng_engine_api_base_url": "http://127.0.0.1:8080/search", "desired_timezone": "America/New_York" }
環境変数
以下の環境変数はサーバーの動作を制御します。MCPクライアントの設定(クライアント管理サーバーの場合は推奨)またはDockerを手動で実行する際に設定できます。
変数 | 説明 | デフォルト(Dockerfileから) | 注記 |
| SearXNG検索エンドポイント |
| サーバー運用に不可欠 |
| 日付/時刻ツールのタイムゾーン |
| 例:
データベースのタイムゾーン一覧: https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones |
| 永続的な設定ファイルへのパス |
| 通常、コンテナ内ではデフォルトのままになります。 |
| 検索ごとに返される最大ページ数 |
| |
| スクレイピングを試みる最大ページ数 |
| |
| スクレイピングしたページあたりの最大単語数 |
| |
| 引用イベントを有効/無効にする |
|
か
|
| 返される画像結果の最大数 |
| |
| 返されるビデオ結果の最大数 |
| |
| 返されるファイルの最大結果数 |
| |
| 返されるマップ結果の最大数 |
| |
| 返されるソーシャルメディア結果の最大数 |
| |
| コンテンツ抽出タイムアウト(秒) |
| |
| HTTPリクエストのタイムアウト(秒) |
| |
| キャッシュされたウェブサイトの最大数 |
| |
| キャッシュの有効期間(分) |
| |
| キャッシュされたコンテンツの最大保存期間(分) |
| |
| 1分あたりのドメインあたりの最大リクエスト数 |
| |
| レート制限追跡ウィンドウ(秒) |
| |
| 無視するサイトのコンマ区切りリスト |
(空の) | 例:
|
構成管理
サーバーは 3 層構成アプローチを使用します。
スクリプトのデフォルト(Python でハードコード)
設定ファイル(
ODS_CONFIG_PATHから読み込まれ、デフォルトは/config/ods_config.json)環境変数(最優先)
設定ファイルは、次の場合にのみ更新されます。
ファイルはまだ存在しません(初回初期化)
環境変数は現在の実行に対して明示的に提供されています
これにより、新しい環境変数が設定されていない場合でも、コンテナの再起動間でユーザー構成が保持されます。
ツールとエイリアス
ツール名 | 目的 | エイリアス |
| SearXNG経由のウェブ検索 |
、
、
、
、
、
、
* |
| ウェブサイトのコンテンツをスクレイピングする |
、
、
、
、
* |
| 現在の日付/時刻 |
、
、
|
* lookupはコンテキストに依存します:
url引数で呼び出された場合は、get_websiteにマップされます。それ以外の場合は
search_webにマッピングされます
例: 呼び出しツール
ウェブ検索
またはエイリアスを使用する:
カテゴリー別検索
ウェブサイトスクレイピング
またはエイリアスを使用する:
現在の日付/時刻
または:
高度な機能
カテゴリー別検索
search_webツールは、カスタマイズされた出力でさまざまなカテゴリをサポートします。
images : 画像のURL、タイトル、およびオプションのMarkdown埋め込みを含むソースページを返します。
videos : タイトル、ソース、埋め込み URL などのビデオ情報を返します。
ファイル: フォーマットやサイズなどのダウンロード可能なファイル情報を返します
map : 座標や住所を含む位置データを返します
ソーシャル メディア: ソーシャル プラットフォームから投稿とプロフィールを返します
一般: ウェブページの全コンテンツをスクレイピングして返すデフォルトのカテゴリ
Reddit URL変換
Reddit コンテンツをスクレイピングする場合、URL は自動的に old.reddit.com ドメインを使用するように変換され、コンテンツ抽出が向上します。
レート制限
ドメインベースのレート制限により、一定時間内に同じドメインへの過剰なリクエストを防止します。これにより、対象ウェブサイトへの過負荷やIPブロックの可能性を回避できます。
キャッシュ検証
キャッシュされたウェブサイトのコンテンツは、保存期間に基づいて自動的に最新性が検証されます。古いコンテンツは自動的に更新され、有効なキャッシュコンテンツは迅速に提供されます。
エラー処理
サーバーは、次の例外タイプを備えた堅牢なエラー処理システムを実装しています。
MCPServerError: すべてのサーバーエラーの基本例外クラスConfigurationError: 設定値が無効な場合に発生しますSearXNGConnectionError: SearXNGへの接続が失敗したときに発生しますWebScrapingError: Webスクレイピングが失敗したときに発生しますRateLimitExceededError: ドメインのレート制限を超えたときに発生します
エラーは情報メッセージとともにクライアントに適切に伝播されます。
トラブルシューティング
SearXNG に接続できません: SearXNG インスタンスが実行されており、
SEARXNG_ENGINE_API_BASE_URL環境変数が正しいエンドポイントを指していることを確認してください。レート制限エラー: レート制限エラーが多すぎる場合は、
RATE_LIMIT_REQUESTS_PER_MINUTEを調整します。コンテンツの抽出が遅い: 複雑なページでのコンテンツ処理に時間をかけられるように、
TRAFILATURA_TIMEOUT増やします。Dockerネットワークの問題:Windows/MacでDocker Desktopを使用する場合、
host.docker.internalホストマシンに解決されるはずです。Linuxでは、代わりにホストのIPアドレスを使用する必要がある場合があります。
謝辞
に触発された:
SearXNG - プライバシーを尊重するメタ検索エンジン
Trafilatura - テキスト抽出のためのWebスクレイピングツール
ihor-sokoliuk/mcp-searxng - SearXNG のオリジナル MCP サーバー
ライセンス
MITライセンス © 2025 OvertliDS