MCP SearXNG Enhanced

by OvertliDS

Integrations

  • Allows containerized deployment with configurable environment variables and persistent configuration between container restarts.

  • Provides optional Markdown embedding for image results when using the images search category.

  • Uses Pydantic for data validation and settings management in the server implementation.

MCP SearXNG拡張サーバー

カテゴリ認識型ウェブ検索、ウェブサイトスクレイピング、日時ツールのためのモデルコンテキストプロトコル(MCP)サーバー。SearXNGおよび最新のMCPクライアントとのシームレスな統合を実現するように設計されています。

特徴

  • 🔍 カテゴリサポート付きの SearXNG 搭載ウェブ検索 (一般、画像、動画、ファイル、地図、ソーシャルメディア)
  • 📄 引用メタデータと自動 Reddit URL 変換によるウェブサイトコンテンツのスクレイピング
  • 💾 自動鮮度検証機能を備えたメモリ内キャッシュ
  • 🚦 サービスの不正使用を防ぐためのドメインベースのレート制限
  • 🕒 タイムゾーンを考慮した日付/時刻ツール
  • ⚠️ カスタム例外タイプによる堅牢なエラー処理
  • 🐳 Docker化されており、環境変数で設定可能
  • ⚙️ コンテナの再起動間での構成の永続化

クイックスタート

前提条件

  • システムにDockerがインストールされている
  • 実行中の SearXNG インスタンス (セルフホストまたはアクセス可能なエンドポイント)

インストールと使用方法

Docker イメージをビルドします。

docker build -t overtlids/mcp-searxng-enhanced:latest .

SearXNG インスタンスで実行します (手動 Docker 実行):

docker run -i --rm --network=host \ -e SEARXNG_ENGINE_API_BASE_URL="http://127.0.0.1:8080/search" \ -e DESIRED_TIMEZONE="America/New_York" \ overtlids/mcp-searxng-enhanced:latest

この例では、 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実行に関する注意:このコマンドはDockerコンテナを独立して実行します。このサーバーを管理するためにMCPクライアント(VS CodeのClineなど)を使用している場合、クライアントは自身の設定で定義された設定を使用して、コンテナのインスタンスを独自に起動します。MCPクライアントが特定の環境変数を使用するには、このサーバーのクライアント設定内でそれらの環境変数を設定する必要があります(下記参照)。

MCP クライアント (例: VS Code の Cline) を構成します

MCPクライアントがこのサーバーを正しく管理・実行するには、クライアント側のovertlids/mcp-searxng-enhancedサーバー設定内で必要な環境変数をすべて定義する必要があります。MCPクライアントはこれらの設定を使用してdocker runコマンドを構築します。

以下は、MCPクライアントのJSON設定(例: cline_mcp_settings.json )内でこのサーバーに推奨されるデフォルト設定です。この例では、 Dockerfileで定義されているデフォルト値に設定されているすべての環境変数が明示的にリストされています。これを直接コピー&ペーストし、必要に応じて値をカスタマイズできます。

{ "mcpServers": { "overtlids/mcp-searxng-enhanced": { "command": "docker", "args": [ "run", "-i", "--rm", "--network=host", "-e", "SEARXNG_ENGINE_API_BASE_URL=http://host.docker.internal:8080/search", "-e", "DESIRED_TIMEZONE=America/New_York", "-e", "ODS_CONFIG_PATH=/config/ods_config.json", "-e", "RETURNED_SCRAPPED_PAGES_NO=3", "-e", "SCRAPPED_PAGES_NO=5", "-e", "PAGE_CONTENT_WORDS_LIMIT=5000", "-e", "CITATION_LINKS=True", "-e", "MAX_IMAGE_RESULTS=10", "-e", "MAX_VIDEO_RESULTS=10", "-e", "MAX_FILE_RESULTS=5", "-e", "MAX_MAP_RESULTS=5", "-e", "MAX_SOCIAL_RESULTS=5", "-e", "TRAFILATURA_TIMEOUT=15", "-e", "SCRAPING_TIMEOUT=20", "-e", "CACHE_MAXSIZE=100", "-e", "CACHE_TTL_MINUTES=5", "-e", "CACHE_MAX_AGE_MINUTES=30", "-e", "RATE_LIMIT_REQUESTS_PER_MINUTE=10", "-e", "RATE_LIMIT_TIMEOUT_SECONDS=60", "-e", "IGNORED_WEBSITES=", "overtlids/mcp-searxng-enhanced:latest" ], "timeout": 60 } } }

MCP クライアント構成の重要なポイント:

  • 上記の例では、すべての環境変数をデフォルト値に設定して Docker コンテナを実行するための完全な引数セットが提供されています。
  • 設定をカスタマイズするには、MCPクライアントの設定にあるargs配列内の対応する-e "VARIABLE_NAME=value"行の値を変更するだけです。例えば、 SEARXNG_ENGINE_API_BASE_URLDESIRED_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
    主な依存関係には、 httpxBeautifulSoup4pydantictrafilaturapython-dateutilcachetoolszoneinfoなどがあります。

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.json ):

  • 代わりに、または環境変数と組み合わせて、プロジェクトのルートディレクトリ(または環境変数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_ENGINE_API_BASE_URLSearXNG検索エンドポイントhttp://host.docker.internal:8080/searchサーバー運用に不可欠
DESIRED_TIMEZONE日付/時刻ツールのタイムゾーンAmerica/New_York例: America/Los_Angelesデータベースのタイムゾーン一覧: https://en.wikipedia.org/wiki/List\_of\_tz\_database\_time\_zones
ODS_CONFIG_PATH永続的な設定ファイルへのパス/config/ods_config.json通常、コンテナ内ではデフォルトのままになります。
RETURNED_SCRAPPED_PAGES_NO検索ごとに返される最大ページ数3
SCRAPPED_PAGES_NOスクレイピングを試みる最大ページ数5
PAGE_CONTENT_WORDS_LIMITスクレイピングしたページあたりの最大単語数5000
CITATION_LINKS引用イベントを有効/無効にするTrueTrueFalse
MAX_IMAGE_RESULTS返される画像結果の最大数10
MAX_VIDEO_RESULTS返されるビデオ結果の最大数10
MAX_FILE_RESULTS返されるファイルの最大結果数5
MAX_MAP_RESULTS返されるマップ結果の最大数5
MAX_SOCIAL_RESULTS返されるソーシャルメディア結果の最大数5
TRAFILATURA_TIMEOUTコンテンツ抽出タイムアウト(秒)15
SCRAPING_TIMEOUTHTTPリクエストのタイムアウト(秒)20
CACHE_MAXSIZEキャッシュされたウェブサイトの最大数100
CACHE_TTL_MINUTESキャッシュの有効期間(分)5
CACHE_MAX_AGE_MINUTESキャッシュされたコンテンツの最大保存期間(分)30
RATE_LIMIT_REQUESTS_PER_MINUTE1分あたりのドメインあたりの最大リクエスト数10
RATE_LIMIT_TIMEOUT_SECONDSレート制限追跡ウィンドウ(秒)60
IGNORED_WEBSITES無視するサイトのコンマ区切りリスト"" (空の)例: "example.com,another.org"

構成管理

サーバーは 3 層構成アプローチを使用します。

  1. スクリプトのデフォルト(Python でハードコード)
  2. 設定ファイルODS_CONFIG_PATHから読み込まれ、デフォルトは/config/ods_config.json
  3. 環境変数(最優先)

設定ファイルは、次の場合にのみ更新されます。

  • ファイルはまだ存在しません(初回初期化)
  • 環境変数は現在の実行に対して明示的に提供されています

これにより、新しい環境変数が設定されていない場合でも、コンテナの再起動間でユーザー構成が保持されます。

ツールとエイリアス

ツール名目的エイリアス
search_webSearXNG経由のウェブ検索searchweb_searchfindlookup_websearch_onlineaccess_internetlookup *
get_websiteウェブサイトのコンテンツをスクレイピングするfetch_urlscrape_pagegetload_websitelookup *
get_current_datetime現在の日付/時刻current_timeget_timecurrent_date

* lookupはコンテキストに依存します:

  • url引数で呼び出された場合は、 get_websiteにマップされます。
  • それ以外の場合はsearch_webにマッピングされます

例: 呼び出しツール

ウェブ検索

{ "name": "search_web", "arguments": { "query": "open source ai" } }

またはエイリアスを使用する:

{ "name": "search", "arguments": { "query": "open source ai" } }

カテゴリー別検索

{ "name": "search_web", "arguments": { "query": "landscapes", "category": "images" } }

ウェブサイトスクレイピング

{ "name": "get_website", "arguments": { "url": "example.com" } }

またはエイリアスを使用する:

{ "name": "lookup", "arguments": { "url": "example.com" } }

現在の日付/時刻

{ "name": "get_current_datetime", "arguments": {} }

または:

{ "name": "current_time", "arguments": {} }

高度な機能

カテゴリー別検索

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アドレスを使用する必要がある場合があります。

謝辞

に触発された:

ライセンス

MITライセンス © 2025 OvertliDS

-
security - not tested
A
license - permissive license
-
quality - not tested

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

カテゴリ サポートによる Web 検索、引用メタデータによる Web サイト コンテンツのスクレイピング、およびタイムゾーンを考慮した日付/時刻ツールを可能にするモデル コンテキスト プロトコル サーバー。

  1. 特徴
    1. クイックスタート
      1. 前提条件
      2. インストールと使用方法
    2. ネイティブ実行(Dockerなし)
      1. 環境変数
        1. 構成管理
          1. ツールとエイリアス
            1. 例: 呼び出しツール
          2. 高度な機能
            1. カテゴリー別検索
            2. Reddit URL変換
            3. レート制限
            4. キャッシュ検証
          3. エラー処理
            1. トラブルシューティング
              1. 謝辞
                1. ライセンス

                  Related MCP Servers

                  • A
                    security
                    A
                    license
                    A
                    quality
                    A Model Context Protocol (MCP) server implementation that integrates with FireCrawl for advanced web scraping capabilities.
                    Last updated -
                    9
                    15,275
                    2,745
                    JavaScript
                    MIT License
                    • Apple
                    • Linux
                  • A
                    security
                    F
                    license
                    A
                    quality
                    Built as a Model Context Protocol (MCP) server that provides advanced web search, content extraction, web crawling, and scraping capabilities using the Firecrawl API.
                    Last updated -
                    4
                    1
                    Python
                    • Apple
                    • Linux
                  • -
                    security
                    A
                    license
                    -
                    quality
                    A Model Context Protocol server that allows LLMs to interact with web content through standardized tools, currently supporting web scraping functionality.
                    Last updated -
                    Python
                    MIT License
                    • Linux
                    • Apple
                  • -
                    security
                    A
                    license
                    -
                    quality
                    A Model Context Protocol server that enables web search, scraping, crawling, and content extraction through multiple engines including SearXNG, Firecrawl, and Tavily.
                    Last updated -
                    35
                    11
                    TypeScript
                    MIT License

                  View all related MCP servers

                  ID: 517w3plzdq