SearXNG Server
🔍 SearXNG MCP Server
AIアシスタント向けのプライバシー重視ウェブ検索 — オペレーター管理または信頼できるSearXNGインスタンスをClaude、Cursorなどで利用できます。
SearXNG APIを統合し、AIアシスタントにウェブ検索機能を提供するMCPサーバーです。
✨ GitHub MCP Registryに掲載されています。
クイックスタート
MCPクライアント設定(例: claude_desktop_config.json)に追加します:
{
"mcpServers": {
"searxng": {
"command": "npx",
"args": ["-y", "mcp-searxng"],
"env": {
"SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
}
}
}
}YOUR_SEARXNG_INSTANCE_URLをSearXNGインスタンスのURL(例: https://searxng.example.com)に置き換えてください。セミコロン区切りのリストとして交換可能なレプリカを指定することもできます(例: https://one.example.com;https://two.example.com)。
検証済みのClaude Desktop、Claude Code、Codex CLI、Cursor、VS Code、Windsurf、Cline、OpenCodeのレシピについては、MCPクライアント設定クックブックを参照してください。
制御されたクライアント非依存の方法で検索、ソースの検査、主張のクロスチェック、証拠の引用を行うには、エビデンス重視のリサーチワークフローを参照してください。
測定されたMCPプロセスのCPUとメモリの開始点については、測定済みデプロイメントプロファイルを参照してください。
Related MCP server: SearXNG MCP Server
特徴
ウェブ検索: 一般・ニュース・記事クエリ、ページネーション、期間/言語/セーフサーチフィルター、関連性フィルタリング(
min_score)、呼び出しごとに選択する整形テキストまたは生JSON出力(response_format)、またはオペレーターデフォルト(SEARXNG_DEFAULT_RESPONSE_FORMAT)に対応。インスタンスのフェイルオーバーとファンアウト:
SEARXNG_URLに交換可能なSearXNGレプリカを設定します。検索はデフォルトで順にフェイルオーバーするか、SEARXNG_FANOUTを使用して健全なレプリカすべてに並列クエリを実行し、結果をマージします。直接回答とメタデータ: テキスト結果は、結果リストの前にSearXNGの回答、修正、提案、インフォボックスを表示します。
検索候補: SearXNGの
/autocompleterエンドポイントによるクエリのオートコンプリート。インスタンス機能の検出:
/configから設定済みのカテゴリ、エンジン、デフォルト、ロケール、プラグインを検査します。URLコンテンツの読み取り: コンテンツタイプを認識したMarkdown変換。制限付きPDFテキスト抽出を含み、ページネーション、セクションフィルタリング、段落範囲、見出し抽出に対応します。
ブラウザソルバー対応: 静的URL検証とHEADサイズの事前チェックを通過したキャッシュされていないURLごとに、オプションでFlareSolverr、Byparr、またはその両方からブラウザセッションを取得し、返されたユーザーエージェントとスコープ付きCookieを制限付きURLリーダーで再生します。デュアルプロバイダーモードでは、FlareSolverrが常にプライマリで、Byparrはプライマリがビジーまたは一時的に利用できない場合にのみ試行されます。FlareSolverr 3.5.0とByparr 2.1.0は2026-07-30に検証済みです。
インテリジェントキャッシュ: 検索結果とURLコンテンツの両方をメモリ内にキャッシュし、設定可能なTTLとLFU(最も利用頻度が低い)方式の追い出しにより、冗長なリクエストを削減します。
SSRF保護:
web_url_readは、すべてのトランスポートモードでデフォルトによりプライベート/内部URLとリダイレクトをブロックします。HTTPトランスポート: オプトイン式のセキュリティ強化、レート制限、サーバーレスまたは水平スケーリング展開向けの制限付きステートレス互換性を備えた、オプションのMCP SDK v2 Streamable HTTPモード。2026-07-28時点の最新リクエストと、維持されているレガシークライアントは、同じツールとリソースの面を共有します。
HTMLフォールバック:
format=jsonを拒否する公開インスタンス向けに、HTMLページから結果をオプションで解析します。Liteツールモード: コンテキストウィンドウが小さいローカルモデル向けの最小限のツールスキーマ。
プロキシ対応: 検索およびURLリーダーのトラフィックに対するグローバルまたはツールごとのHTTP/HTTPSプロキシ。
検証済みのlinux/amd64イメージは、マルチアーキテクチャマニフェストghcr.io/flaresolverr/flaresolverr:v3.5.0@sha256:139dfee1c6f89249c8d665d1333a42e8ec74ec0a86bc6bb1c8461e10d3a66a47およびghcr.io/thephaseless/byparr:2.1.0@sha256:01a46a2865d9a6db5eb8ead04ec0dd33b8fbe233e8565ae70b50d4cc0af4cfb0から取得したものです。クライアントのキャンセルによりローカルの処理は速やかに停止しますが、リモートブラウザはHTTPクライアントの切断後も、設定されたプロバイダータイムアウトまで継続する場合があります。ブラウザソルバーの検証を参照してください。
mcp-searxngを選ぶ理由
2026-07-29時点で、以下の機能比較は公式のBrave MCP、Exa MCP、Firecrawl MCPプロジェクトに基づいています。「ページネーション」は、公開されたページまたはオフセット制御を意味します。「セルフホスト」は、検索サービスを自分の管理下で実行できることを意味します。「無料 / APIキー不要」は、このMCPサーバーが有料の検索ベンダーAPIキーを必要としないことを意味します。基盤となるSearXNGインスタンスは、引き続きあなた自身が運用または選択します。
Brave MCP | Exa MCP | Firecrawl MCP | mcp-searxng | |
ウェブ検索 | ✓ | ✓ | ✓ | ✓ |
URL読み取り | ✗ | ✓ | ✓ | ✓ |
ページネーション | ✓ | ✗ | ✓ | ✓ |
セルフホスト | ✗ | ✗ | 一部 | ✓ |
無料 / APIキー不要 | ✗ | ✗ | ✗ | ✓ |
プライバシーはSearXNGのデプロイメントに依存します。オペレーター管理のインスタンスは、第三者検索オペレーターを信頼する必要を回避できますが、公開インスタンスはクエリを受け取り、それをログに記録する可能性があります。SearXNGとこのMCPインテグレーションは、それ自体では匿名性を提供しません。
仕組み
mcp-searxngはスタンドアロンのMCPサーバーです — AIアシスタントがウェブ検索のために接続する、独立したNode.jsプロセスです。HTTP JSON APIを介して、1つのSearXNGインスタンス、またはセミコロン区切りの交換可能なSearXNGレプリカのリストにクエリを実行します。
SearXNGプラグインではありません: このプロジェクトは、ネイティブのSearXNGプラグインとしてインストールすることはできません。
SEARXNG_URLを設定して、既存のSearXNGインスタンスまたは交換可能なレプリカリストを指定してください。
AI Assistant (e.g. Claude)
│ MCP protocol
▼
mcp-searxng (this project — Node.js process)
│ HTTP JSON API (SEARXNG_URL)
▼
SearXNG instance(s)SearXNGのデプロイ、設定、トラブルシューティングについては、mcp-searxngでセルフホストSearXNGを運用するを参照してください。
ツール
searxng_web_search
ページネーション対応のウェブ検索を実行します
入力:
query(文字列): 検索クエリです。この文字列は外部の検索サービスに渡されます。pageno(数値、オプション): 検索ページ番号。1から始まります(デフォルト: 1)time_range(文字列、オプション): 時間範囲で結果をフィルタリングします - "day"、"week"、"month"、"year"のいずれか(デフォルト: なし)language(文字列、オプション): 結果の言語コード(例: "en"、"fr"、"de")または"all"(デフォルト: "all")safesearch(文字列列挙型、オプション): セーフサーチのフィルターレベル。"0"(なし)、"1"(中程度)、"2"(厳格)のいずれかです。後方互換性のため、従来の数値0、1、2も引き続き受け付けられます。(デフォルト: インスタンス設定)min_score(数値、オプション): 0.0〜1.0の最小関連性スコアです。このスコア未満の結果は除外されます。num_results(数値、オプション): 返す結果の最大数。1〜20です。SEARXNG_MAX_RESULTSはオペレーター上限として適用されます。categories(文字列、オプション): カンマ区切りのSearXNGカテゴリー(例:"news"、"it,science")。ライブの/config機能は到達可能なインスタンス間で集約されます。一貫したマルチインスタンス結果を得るには、searxng_instance_infoのcategories.commonを優先してください。既知の値はトリミングされ、大文字小文字を区別せず正規化されます。未知の値はトリミングされた状態で転送され、SearXNGが無視または尊重できます。/configが利用できない場合、値は警告付きでそのまま転送されます。省略した場合、各インスタンスはサーバー側のデフォルトを使用します。engines(文字列、オプション): カンマ区切りのSearXNGエンジン名(例:"google,bing,ddg"、"semantic scholar")。ライブの/config機能は到達可能なインスタンス間で集約されます。一貫したマルチインスタンス結果を得るには、searxng_instance_infoのengines.common.enabledを優先してください。既知の値は、デフォルトで無効なエンジンも含め、トリミングされ、大文字小文字を区別せず正規化されます。未知の値はトリミングされた状態で転送され、SearXNGが無視または尊重できます。/configが利用できない場合、値は警告付きでそのまま転送されます。省略した場合、各インスタンスはサーバー側のデフォルトを使用します。response_format(文字列、オプション): レスポンス形式です。エージェントが読み取り可能な整形済み出力用の"text"、またはフィルタリング/スライスされたresultsを含む生のSearXNG JSON用の"json"のいずれかです。省略した場合、SEARXNG_DEFAULT_RESPONSE_FORMATが適用されます。未設定または無効な場合はtextが使用されます。明示的なresponse_formatは常に優先されます。result_detail(文字列、オプション):"full"(デフォルト)はSearXNGのメタデータ、警告、出典、回答、インフォボックス、修正、提案を保持します。"compact"は各結果のタイトル、URL、説明/コンテンツスニペットのみを返します。コンパクトJSONは正確にtitle、url、contentキーを使用します。こうした調査シグナルが重要な場合はfullを使用してください。response_format=textを明示的に送信または自動注入するクライアントは、引き続きオペレーターのデフォルトを上書きします。JSONを設定しても省略された呼び出しがテキストを返す場合は、MCPクライアントが発行する引数を確認してください。
Migration: コンパクトテキストは結果ごとに正確に3行で、キャッシュ注記やプリアンブルはありません。関連性スコアや検索メタデータを期待する行パーサーは、
result_detail="full"を要求するように更新してください(またはコンパクトの3行レコードを受け入れてください)。コンパクトは、警告、出典、その他すべての検索シグナルを意図的に抑制します。フルテキストは、スコア、エンジン、カテゴリー、公開日、サムネイル、画像ソースという固定順序で有効なオプション行を追加できます。無効なオプションメタデータは省略されます。テキストフィールドは単一行に正規化されます。
SEARXNG_MAX_RESULT_CHARSは、コンパクトおよびフルのテキスト/JSONレスポンスの結果コンテンツを切り詰めます。すでにこの変数を設定している既存ユーザーのフルJSONも含みます。コンパクトテキストは上限を適用する前に改行区切りを正規化し、JSONは元の文字列値に上限を適用します。SEARXNG_LITE_TOOLS=trueの場合、Liteスキーマはクエリのみのままですが、response_formatやresult_detailなどの明示的に指定されたオプションのオーバーライドは引き続き検証され、尊重されます。searxng_search_suggestions
検索クエリを絞り込むためのオートコンプリート候補を取得します
入力:
query(文字列): オートコンプリートする部分的なクエリまたは完全なクエリ。language(文字列、オプション): 候補の言語コード(例: "en"、"fr"、"de")または"all"(デフォルト: "all")
searxng_instance_info
到達可能な設定済みSearXNGインスタンスから集約されたカテゴリーを検出し、オプションでエンジン名を含め、プライマリの到達可能なインスタンスからデフォルト、ロケール、プラグインを検査します。カテゴリー(および要求された場合はエンジン)は、すべての到達可能なインスタンスに存在する
common値と、少なくとも1つの到達可能なインスタンスに存在するavailable値を報告します。入力:
includeEngines(ブール値、オプション): レスポンスに有効なエンジン名を含めます。(デフォルト: false)includeDisabled(ブール値、オプション):includeEnginesがtrueの場合、無効なエンジン名を含めます。(デフォルト: false)category(文字列、オプション): カテゴリーとエンジンを単一のカテゴリー名にフィルタリングします。refresh(ブール値、オプション): プロセスキャッシュをバイパスして、新しい/configデータを取得します。(デフォルト: false)
web_url_read
コンテンツタイプを考慮した処理と高度な抽出オプションを備え、URLコンテンツをマークダウンとして読み取ります
サポートされている読み取り可能なコンテンツ:
HTML(
text/html、application/xhtml+xml)はマークダウンに変換されますJSON(
application/json、*+json)はフェンス付きブロックでプリティプリントされますプレーンテキスト、YAML、TOML、XML、その他の安全な明示的な
text/*レスポンスは、読み取り可能なフェンス付きテキストとして返されますPDF(
application/pdf)のテキストは、最大500ページのドキュメントに対してリソース制限付きワーカーで抽出されます欠落または汎用のコンテンツタイプは、既存のサイズ上限の下で読み取られます。非バイナリの本文は、互換性のためにHTMLからマークダウンへのパスを引き続き通過します
PDF入力と抽出されたテキストは、それぞれ
URL_READ_MAX_CONTENT_LENGTH_BYTESと16 MiBのうち低い方に上限が設定されます。OCRはサポートされておらず、スキャン/画像のみのPDFまたはパスワード保護されたPDFは短い説明を返します。PDFとして宣言されたレスポンスは
%PDF-シグネチャで始まる必要があります。不一致は通常、誤ったコンテンツタイプで配信された中間ページまたはエラーページを示します。PDF解析には、レスポンス本文のダウンロード後に別途30秒のワーカー予算があります。ダイレクトパスでは、ネットワークフェッチと解析は設定されたフェッチ予算プラス30秒を最大とします。設定されたブラウザソルバーの事前チェックと取得時間は追加されます。
MCPプロセスごとに最大2つのPDF抽出が同時に実行されます。キューはなく、追加の同時読み取りはビジーメッセージを返し、再試行できます。
その他のバイナリ、メディア、アーカイブ、オクテットストリームのダウンロードは、生のバイトを返す代わりに短いヒント付きで意図的に拒否されます
FLARESOLVERR_URLまたはBYPARR_URLが設定されている場合、mcp-searxngがブラウザセッションの取得を試みる前に、キャッシュされていないURLが検証され、HEADサイズの事前チェックで確認されます。両方が設定されている場合、最初にFlareSolverrが試行され、Byparrはビジースロット、ネットワーク/タイムアウト障害、HTTP 408/429/5xx、または不正/過大なレスポンスの後にのみ試行されます。永続的なプロバイダー4xx、キャンセル、ソリューションホストの検証失敗、解決された非2xxターゲットステータスはチェーンを停止します。設定されたすべてのプロバイダーがビジーまたは利用不能な場合、キャッシュされていないダイレクトフェッチが1回実行されます。試行された各プロバイダーは元のターゲットURLを受け取ります。チャレンジの成功は保証されません。デフォルトの制限では、デュアルプロバイダーモードは、初期HEAD事前チェック、両方のソルバー試行(レスポンスの猶予期間を含む)、最終ダイレクトフェッチを合わせて最大150秒の加算上限があります。
入力:
url(文字列): フェッチして処理するURLstartChar(数値、オプション): コンテンツ抽出の開始文字位置(デフォルト: 0)maxLength(数値、オプション): 返す最大文字数section(文字列、オプション): 特定の見出しの下のコンテンツを抽出します(見出しテキストを検索)paragraphRange(文字列、オプション): 特定の段落範囲を返します(例: '1-5'、'3'、'10-')readHeadings(ブール値、オプション): 全文の代わりに見出しのリストのみを返します
Installation
Node.js 22以降が必要です。
npm install -g mcp-searxng{
"mcpServers": {
"searxng": {
"command": "mcp-searxng",
"env": {
"SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
}
}
}
}ビルド済みイメージ:
docker pull isokoliuk/mcp-searxng:latestイメージ署名はCosignで検証できます。手順についてはSECURITY.mdを参照してください。
{
"mcpServers": {
"searxng": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "SEARXNG_URL",
"isokoliuk/mcp-searxng:latest"
],
"env": {
"SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
}
}
}
}追加の環境変数を渡すには、-e VAR_NAMEをargsに追加し、変数をenvに追加します。
ブラウザソルバー統合の場合は、FLARESOLVERR_URL、BYPARR_URL、またはその両方を渡し、
設定されたサービスがこのコンテナから到達可能にしてください。デュアルモードは
FlareSolverr優先の固定順序で、自動リバースフェイルオーバーはありません。完全な
動作とDocker Composeの例については、URL Reader Controlsを
参照してください。
ローカルでのビルド:
docker build -t mcp-searxng:latest -f Dockerfile .上記と同じ設定を使用し、isokoliuk/mcp-searxng:latestをmcp-searxng:latestに置き換えてください。
docker-compose.yml:
services:
mcp-searxng:
image: isokoliuk/mcp-searxng:latest
stdin_open: true
environment:
- SEARXNG_URL=${SEARXNG_URL:?Set SEARXNG_URL in the environment}
# Add optional variables as needed — see CONFIGURATION.md追跡対象のComposeファイルは意図的にSTDIOのみで、ネットワークポートを公開しません。MCPクライアントはdocker compose upではなく、絶対パスのComposeファイルとdocker compose run --rm -Tでこれを起動します。-Tフラグは疑似TTYの割り当てを防ぎ、MCP JSON-RPCが生の標準入力と標準出力に留まるようにします。MCPクライアントがSEARXNG_URLを提供しない限り、Composeは起動前に失敗します。
MCPクライアント設定:
{
"mcpServers": {
"searxng": {
"command": "docker",
"args": [
"compose",
"-f", "/absolute/path/to/docker-compose.yml",
"run", "--rm", "-T", "mcp-searxng"
],
"env": {
"SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
}
}
}
}以前、追跡対象ファイルをポート8080のHTTPサービスとして使用していた場合は、HTTP設定を追跡対象外のdocker-compose.override.ymlに配置してください:
services:
mcp-searxng:
ports:
- "127.0.0.1:8080:8080"
environment:
- MCP_HTTP_PORT=8080
- MCP_HTTP_HOST=0.0.0.0ここで0.0.0.0はコンテナ側のバインドアドレスで、ホスト側のポートはループバックのみのままです。このオーバーライドには認証がなく、一時的なシングルホスト移行パスのみです。同じ場所に配置されたコンテナを追加したり、サービスをローカルマシン以外に公開したりする前に、強化されたdeployment guidanceに従ってください。
デフォルトでは、サーバーはMCPクライアントによって起動されるSTDIOを使用します。代わりにHTTPを使用するには、MCP_HTTP_PORTを設定してmcp-searxngをスタンドアロンプロセスとして実行してください。このモードではMCPプロトコルをHTTP経由で提供し、STDIOを使用しないため、クライアントはスパウンではなくURLで接続します。
サーバーの起動:
MCP_HTTP_PORT=3000 SEARXNG_URL=http://localhost:8080 mcp-searxngまたはDockerを使用します(ホストからポートに到達できるようにすべてのインターフェースにバインド):
docker run --rm -p 3000:3000 \
--add-host=host.docker.internal:host-gateway \
-e MCP_HTTP_PORT=3000 -e MCP_HTTP_HOST=0.0.0.0 \
-e SEARXNG_URL=http://host.docker.internal:8080 \
isokoliuk/mcp-searxng:latest--add-hostマッピングにより、コンテナはhost.docker.internalを介してホスト上のSearXNGインスタンスに到達できます。Docker Desktopでは自動的に解決されますが、ネイティブLinuxではこのフラグが必要です。実際のインスタンスが別の場所で実行されている場合は、SEARXNG_URLをそのインスタンスに指定してください。
HTTP対応のMCPクライアントをURLで/mcpエンドポイントに接続します:
{
"mcpServers": {
"searxng-http": {
"type": "streamable-http",
"url": "http://localhost:3000/mcp"
}
}
}プロトコルサポート: HTTPとSTDIOは、最新のMCP 2026-07-28と、保持されているレガシーリビジョン2025-11-25、2025-06-18、2025-03-26、2024-11-05、2024-10-07を提供します。最新のHTTPはセッションレスのPOST /mcpです。レガシーHTTPはデフォルトでステートフルのまま(POST/GET/DELETE /mcp)、または既存のPOSTのみのステートレスモードを使用します。
エンドポイント: 最新はPOST /mcp。レガシーはステートフルデフォルトのPOST/GET/DELETE /mcp、またはステートレスモードではレガシーPOST /mcpのみ。GET /health。
レガシーHTTPクライアントの場合、ステートフルセッションがデフォルトのままです。デプロイメントがリクエスト間でインメモリのレガシーセッションを保持できない場合は、MCP_HTTP_STATELESS=trueを設定してください。最新のHTTPは、この設定に関係なくセッションレスのままです。ステートレスのPOSTは毎回新しいMCPサーバーとトランスポートを作成し、受信したセッションIDを無視し、同じPOST内でネゴシエートされたJSONまたはSSEストリームを返します。ステートレスモードはPOSTのみです:GET /mcpとDELETE /mcpはAllow: POST付きのHTTP 405を返し、リクエスト間のサブスクリプション、再開可能性、サーバーからクライアントへの通知は保持されません。
ステートレスリクエストは、グローバルおよびクライアントIPごとの処理中リクエスト数の上限と、リクエストのライフタイムによって制限されます。デフォルト値、過負荷時およびタイムアウト時の応答、プロキシを考慮した公平性、完全な互換性契約については、CONFIGURATION.md を参照してください。
Originの検証とアップグレードに関する注意: /mcp に存在するすべての Origin はすべてのモードで検証されます。存在しない Origin は非ブラウザクライアントでは引き続き有効です。非ハードニングモードでは、MCP_HTTP_ALLOWED_ORIGINS が未設定の場合、HTTP/HTTPSループバックオリジン http://127.0.0.1、https://127.0.0.1、http://localhost、https://localhost、http://[::1]、https://[::1] の正確なリストがデフォルトになります。これにはポートなしと、設定された MCP_HTTP_PORT 付きの両方が含まれます。空でない MCP_HTTP_ALLOWED_ORIGINS はこれらのデフォルトを置き換えます。エントリはトリムされますが、それ以外はリテラルです。照合は、スキームとポートを含む、完全一致の大文字小文字を区別するリテラル照合です。不正な形式、スキームなし、パスを含む、末尾スラッシュ付き、または大文字小文字が異なる値は、静かに一致しないため、修正する必要があります。ハードニングモードでは引き続き明示的な許可リストが必要であり、認証とHostの強制が追加されます。/mcp に存在する無効な Origin は、パーサー、認証、レート制限、またはトランスポートの構築の前に、固定の非反映型403を受け取ります。/health はMCPの403境界の外側にありますが、絞り込まれたグローバルCORS許可リストを使用します。アップグレード前に、ループバック以外のOriginを使用している既存の非ハードニングブラウザデプロイメントは、MCP_HTTP_ALLOWED_ORIGINS を設定するか、固定の403を受け取る必要があります。
テスト:
curl http://localhost:3000/healthサーバーはデフォルトで 127.0.0.1 にバインドします。リモートまたはコンテナ化されたデプロイメントでは MCP_HTTP_HOST=0.0.0.0 を設定してください。ネットワークに公開する前に、ハードニングモード(MCP_HTTP_HARDEN)を有効にし、レート制限とログが正しいクライアントIPを使用するよう、CONFIGURATION.md の MCP_HTTP_TRUST_PROXY を参照してください。
設定
SEARXNG_URL は唯一の必須変数です。SearXNGインスタンスのURL(または交換可能なレプリカのセミコロン区切りリスト)に設定してください。その他はすべてオプションです。
検索呼び出しで response_format が省略された場合に text または json を選択するには、SEARXNG_DEFAULT_RESPONSE_FORMAT を使用します。呼び出しごとの明示的な値が引き続き優先されます。
認証、フェイルオーバー/ファンアウト、キャッシング、タイムアウト、プロキシ、TLS、HTTPトランスポート、ハードニングを含む完全な環境変数リファレンスについては、CONFIGURATION.md を参照してください。
トラブルシューティング
セルフホストのSearXNG設定、直接検証、トラブルシューティングについては、 mcp-searxngでセルフホストのSearXNGを運用する を参照してください。 インスタンスを管理していない場合は、代わりに別の パブリックSearXNGインスタンスガイド を使用してください。
TLSを検査する企業プロキシの背後でHTTPSリクエストが証明書エラーで失敗する場合は、TLS / 企業CA を参照してください。
SearXNGからの403 Forbidden
SearXNGインスタンスでJSON形式が無効になっている可能性があります。settings.yml(通常は /etc/searxng/settings.yml)を編集してください:
search:
formats:
- html
- jsonSearXNGを再起動し(docker restart searxng)、次に検証してください:
curl 'http://localhost:8080/search?q=test&format=json'JSON応答が返されるはずです。返されない場合は、ファイルが正しくマウントされ、YAMLインデントが有効であることを確認してください。
関連情報: SearXNG設定ドキュメント · ディスカッション
JSONを有効にできない場合(HTMLフォールバック)
管理していないパブリックインスタンスを使用する必要があり、それが format=json を拒否する場合(上記の403)、サーバーを編集する代わりにオプトインフラグを設定してください:
有効にする前に、パブリック運用者のポリシーと パブリックインスタンス利用ガイド を確認してください。
{
"SEARXNG_HTML_FALLBACK": "true"
}403/404 または非JSON応答を受け取った検索は、format=json を付けずに自動的に再試行され、通常のHTML結果ページから解析されます。
成功した場合: 通常の結果(タイトル、URL、スニペット)が得られます。JSONモードでは
sourceFormat: "html"としてマークされ、テキストモードでは "注: 結果はSearXNG HTMLフォールバックから解析されました。メタデータは制限されています。" という行が追加されます。関連性スコアとエンジン名はHTMLからは利用できません。失敗した場合: 解析はベストエフォートであり、インスタンスのテーマ/バージョンによって異なるため、一部の結果が欠落したり、まばらだったりする場合があります。HTMLページ自体も失敗した場合 — ブロックされたまま、レート制限(
429)、認証(401)、または5xx— フォールバック試行のエラーが表面化されるため、検索が静かに空の結果を返すことはありません。フォールバックは403/404/非JSONの場合にのみトリガーされ、認証エラーやネットワークエラーではトリガーされません。
管理しているインスタンスでJSONを有効にすること(上記)が引き続き推奨される構成です。フォールバックは互換性の補助手段であり、置き換えではありません。
コントリビューション
CONTRIBUTING.md を参照してください。
ライセンス
MIT — 詳細は LICENSE を参照してください。
Available Tools
2 toolssearxng_web_searchARead-only
Searches the web using SearXNG and returns a list of results, each with a title, URL, and content snippet. CRITICAL: The required parameter name is exactly query (not prompt, q, or any other name). Calls an external SearXNG instance; availability depends on the SEARXNG_URL configuration. Use pageno to paginate results; combine time_range and language to narrow scope. To read the full text of a result URL, follow up with web_url_read.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query string. This is the required parameter name — use exactly `query`, not `prompt` or `q`. | |
| pageno | No | Search page number (starts at 1) | |
| time_range | No | Time range of search (day, month, year) | |
| language | No | Language code for search results (e.g., 'en', 'fr', 'de'). Default is instance-dependent. | all |
| safesearch | No | Safe search filter level (0: None, 1: Moderate, 2: Strict) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint and openWorldHint. The description adds behavioral context: 'Calls an external SearXNG instance; availability depends on the SEARXNG_URL configuration.' It also warns about the exact parameter name. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with 4 sentences, each adding value. It starts with the main purpose, then includes a critical note, behavior, usage tips, and follow-up suggestion. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return value (list of results with title, URL, snippet), external dependency, pagination, and narrowing options. It does not mention error handling or empty results, but given the simple output, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for all parameters. The description reinforces the required parameter name and gives usage context for pageno, time_range, and language, but does not add significant new semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Searches the web using SearXNG and returns a list of results...' It specifies the return structure (title, URL, content snippet) and distinguishes from the sibling tool 'web_url_read' by suggesting follow-up for full text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use this tool (for web search) and suggests using the sibling 'web_url_read' for full text retrieval. It also gives tips on pagination and narrowing scope with time_range and language, but does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_url_readARead-only
Fetches a URL and returns its text content converted to markdown. Three modes: (1) Full content — omit filtering params; use startChar/maxLength to paginate large pages. (2) Section extraction — set section to return content under a specific heading. (3) Headings only — set readHeadings: true to list all headings (mutually exclusive with other filtering params). Returns an error string if the URL is unreachable or content cannot be extracted. Use after searxng_web_search to read the full content of individual result URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL | |
| startChar | No | Starting character position for content extraction (default: 0) | |
| maxLength | No | Maximum number of characters to return | |
| section | No | Extract content under a specific heading (searches for heading text) | |
| paragraphRange | No | Return specific paragraph ranges (e.g., '1-5', '3', '10-') | |
| readHeadings | No | Return only a list of headings instead of full content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. Description adds behavioral details: three modes, error handling (returns error string if unreachable), and mutual exclusion. It's transparent about what the tool does but doesn't cover all edge cases (e.g., combining multiple filtering params other than readHeadings).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single but well-structured paragraph that enumerates modes clearly. Every sentence adds value with no redundancy. Front-loaded with main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers main functionality, modes, error handling, and relation to sibling tool. No output schema, but return type (text/markdown) is implied. Minor gap: doesn't specify behavior when multiple filtering params are combined beyond readHeadings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are documented. The description adds significant meaning by grouping parameters into modes and explaining relationships (e.g., omit filtering for full content, set section for extraction, readHeadings for headings). It clarifies mutex conditions beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a URL and converts content to markdown, with three distinct modes. It distinguishes from sibling tools (search tools) by specifying it's for reading individual URLs after a search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use after searxng_web_search to read full content of result URLs. Describes three modes and their parameter usage, including mutual exclusivity of readHeadings. Provides guidance on pagination with startChar/maxLength.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.4- Changed
searxng_web_search1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"The search query. This is the main input for the web search"New value: +"The search query string. This is the required parameter name — use exactly `query`, not `prompt` or `q`."
TDQS
Scored across 2 tools
The two tools have completely distinct purposes: searxng_web_search performs web searches, while web_url_read fetches and extracts content from URLs. There is no overlap or ambiguity between them.
Both tools use snake_case and are descriptive, but the naming pattern differs: searxng_web_search includes the service prefix, while web_url_read does not. The verb-noun order is also inconsistent (verb-noun vs noun-verb). Overall, still clear and predictable.
With only 2 tools, the set feels minimal but adequate for a basic web search and content retrieval use case. It does not overcomplicate, though it may leave room for additional utility tools.
The tools cover the core workflow: search the web and read full content of results. Minor gaps include advanced search filters (e.g., site, filetype) or management features, but the essential functionality is present.
Maintenance
Related MCP Connectors
Serper MCP — wraps the Serper Google Search API (serper.dev)
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server implementation that integrates the SearXNG API for powerful web search capabilities and uses @missionsquad/puppeteer-scraper to read and process live web content.227 npm1MIT
- AlicenseBqualityDmaintenanceAn MCP server that integrates with the SearXNG API to provide comprehensive web search capabilities with features like time filtering, language selection, and safe search. It also enables users to fetch and convert web content from specific URLs into markdown format.216 npm4MIT
- AlicenseAqualityDmaintenanceAn MCP server that integrates the SearXNG API for web search and URL content extraction with advanced features like pagination, caching, and proxy support.413,388 npm2MIT
- AlicenseNot gradedqualityFmaintenanceAn MCP server that integrates the SearXNG API to provide web search with pagination, filtering, and URL content extraction.9 npmMIT