Skip to main content
Glama

MCP SearXNG拡張サーバー

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

特徴

  • 🔍 カテゴリサポート付きの SearXNG 搭載ウェブ検索 (一般、画像、動画、ファイル、地図、ソーシャルメディア)

  • 📄 引用メタデータと自動 Reddit URL 変換によるウェブサイトコンテンツのスクレイピング

  • 💾 自動鮮度検証機能を備えたメモリ内キャッシュ

  • 🚦 サービスの不正使用を防ぐためのドメインベースのレート制限

  • 🕒 タイムゾーンを考慮した日付/時刻ツール

  • ⚠️ カスタム例外タイプによる堅牢なエラー処理

  • 🐳 Docker化されており、環境変数で設定可能

  • ⚙️ コンテナの再起動間での構成の永続化

Related MCP server: OneSearch MCP Server

クイックスタート

前提条件

  • システムに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実行に関する注意:(下記参照)。

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_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_URL

SearXNG検索エンドポイント

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

引用イベントを有効/無効にする

True

True

False

MAX_IMAGE_RESULTS

返される画像結果の最大数

10

MAX_VIDEO_RESULTS

返されるビデオ結果の最大数

10

MAX_FILE_RESULTS

返されるファイルの最大結果数

5

MAX_MAP_RESULTS

返されるマップ結果の最大数

5

MAX_SOCIAL_RESULTS

返されるソーシャルメディア結果の最大数

5

TRAFILATURA_TIMEOUT

コンテンツ抽出タイムアウト(秒)

15

SCRAPING_TIMEOUT

HTTPリクエストのタイムアウト(秒)

20

CACHE_MAXSIZE

キャッシュされたウェブサイトの最大数

100

CACHE_TTL_MINUTES

キャッシュの有効期間(分)

5

CACHE_MAX_AGE_MINUTES

キャッシュされたコンテンツの最大保存期間(分)

30

RATE_LIMIT_REQUESTS_PER_MINUTE

1分あたりのドメインあたりの最大リクエスト数

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_web

SearXNG経由のウェブ検索

search

web_search

find

lookup_web

search_online

access_internet

lookup

*

get_website

ウェブサイトのコンテンツをスクレイピングする

fetch_url

scrape_page

get

load_website

lookup

*

get_current_datetime

現在の日付/時刻

current_time

get_time

current_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

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/OvertliDS/mcp-searxng-enhanced'

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