webx-mcp
WebX — コーディングエージェント向けローカル・オンデマンドWeb検索
コーディングエージェントに必要なときだけWebアクセスを提供する、小さくUnix的なローカルツール。リサーチエージェントではなく、2つのプリミティブとライフサイクル管理だけを提供します:
search(query) -> ranked URLs/snippets (local SearXNG, Docker, 127.0.0.1:8888, normally stopped)
read(url) -> cleaned Markdown (controlled fetch + Trafilatura, SSRF-protected)最小エージェントモード: エージェントは、一時的なプロンプトで許可された場合にのみ
webx search / webx read / webx stopをシェルアウトします。システムプロンプトに恒久的なWebツールはありません。探索/MCPモード: ホストが
webx-mcp(stdio) を起動します。サーバーは正確にweb_search+web_readを公開します。起動時にSearXNGは開始されず、最初のweb_searchが遅延起動し、シャットダウンを管理します。
インストール
Python 3.12+ と、検索用のDocker + Composeが必要です。webx read はDockerなしで動作します。
# with uv (recommended)
uv sync
uv sync --extra mcp # for MCP server
uv sync --extra dev # for tests
# or pip
pip install -e .
pip install -e ".[mcp]"
# global tool (so `webx` works in `pi`'s bash and any shell)
uv tool install . # installs to ~/.local/bin/webx — ensure ~/.local/bin is on PATH
# or pipx
pipx install .
# per-project (no global install)
uv sync && uv run webx --help
# or add .venv/bin to PATH for this shell/session (useful for pi coding agent)
export PATH="$PWD/.venv/bin:$PATH"
which webx && webx --helppiコーディングエージェントの注意:
pi内のbashツールはホストからPATHを継承します。webx: command not foundの場合は、uv tool install .を一度実行するか、piを起動するセッションでexport PATH="$PWD/.venv/bin:$PATH"を実行してください。
Related MCP server: mcp-searxng
クイックスタート
webx init # materialize ~/.local/share/webx/{compose.yml,settings.yml,.env,cache}
webx doctor # check docker, templates, SearXNG reachability (does NOT start SearXNG)
webx status # {initialized, docker_available, searxng_running, url, runtime_dir}
webx status --json
webx search "SearXNG documentation" --limit 5 --pretty
webx status # now running
webx read "https://docs.searxng.org/" --max-chars 12000
webx read "https://docs.searxng.org/" --json | jq
# denials are exit 5
webx read "http://127.0.0.1:8888/" # -> exit 5 unsafe URL
webx read "http://192.168.1.1/" # -> exit 5
webx read "file:///etc/passwd" # -> exit 5
webx stop # docker compose stop (retains container)
webx status # stopped一時的なWebアクセスプロンプト (最小エージェント)
For this task you are allowed to use the local WebX utility when external/current
information materially helps.
Available commands:
- webx search "<query>" to discover relevant public-web sources.
- webx read "<url>" to read a relevant public page as cleaned text/Markdown.
...
When the web-research portion is finished, run webx stop.MCPホスト設定
stdioのみ。例 (Claude Code / MCP Inspector):
{
"mcpServers": {
"webx": {
"command": "webx-mcp",
"env": { "WEBX_DATA_DIR": "/home/you/.local/share/webx" }
}
}
}ツールリストは正確に web_search + web_read でなければなりません。ライフサイクルは内部管理です — webx up/stop をエージェントツールとして公開しないでください。
CLIリファレンス
webx --help
webx --version
webx init [--force-templates] [--show-path] # idempotent, never rotates secret
webx doctor # inspection only
webx up # ensure SearXNG running
webx stop # compose stop (normal shutdown)
webx status [--json]
webx logs [--tail 100]
webx search QUERY [--limit 8] [--category general] [--language en] [--page 1]
[--time {day,month,year}] [--safe-search {0,1,2}] [--engine NAME] [--pretty]
webx read URL [--max-chars N] [--json] [--links] [--no-tables] [--precision] [--recall]stdout= データ (検索はJSON、読み取りはMarkdown/テキストまたはJSON)。stderr= 診断情報。終了コード:
0正常、2使用法/検証エラー、3ランタイム/Docker利用不可、4SearXNG障害、5安全でないURL、6フェッチ/抽出失敗、7サポートされていないコンテンツタイプ (2xxでimage/*、application/pdfなど)。公開URLからの4xx/5xx/タイムアウトは6であり、7ではありません (例:wikimedia PNG -> HTTP 400->6)。
--verbose (グローバル) はデバッグトレースを stderr に出力します (例: read ok: https://example.com/ text/html 114 chars engine=trafilatura 1.23s)。シークレットは決して出力されません。
エンジン/カテゴリの例 (SearXNGは269のサービスを集約; アップストリームのレート制限に達した場合はクエリごとにフィルタ):
webx search "python httpx" --engine wikipedia --engine github --pretty
webx search "SearXNG" --category it --pretty
webx search "SearXNG documentation" --time month --prettyリーダー抽出の例 (--links は [text](url) マークダウンを保持; --precision/--recall はtrafilaturaを調整):
webx read "https://en.wikipedia.org/wiki/Python_(programming_language)" --max-chars 2000 --links | head -n 40
webx read "https://en.wikipedia.org/wiki/Python_(programming_language)" --max-chars 2000 | head -n 40
webx read "https://api.github.com/zen" --json | jq # application/json is returned raw (engine=raw), not trafilaturaランタイムと設定
ランタイムディレクトリは platformdirs 経由 (WEBX_DATA_DIR で上書き可能):
Linux:
~/.local/share/webx/(XDG)macOS:
~/Library/Application Support/webx/Windows:
%LOCALAPPDATA%\webx\
compose.yml、settings.yml、.env (SEARXNG_SECRET 0600)、cache/ を含みます。
settings.yml は小さなオーバーライドです (use_default_settings: true、formats: [html, json]、limiter: false、public_instance: false、image_proxy: false)。SearXNGのデフォルト設定全体をコピーしないでください。
compose.yml:
services:
searxng:
image: ${SEARXNG_IMAGE:-docker.io/searxng/searxng:latest}
container_name: webx-searxng
ports: ["127.0.0.1:8888:8080"]
env_file: [.env]
volumes: ["./settings.yml:/etc/searxng/settings.yml:ro", "./cache:/var/cache/searxng"]
restart: "no"ループバックバインドのみ、単一コンテナ、Valkey/Redisなし、プロキシなし、TLSなし。読み取り専用の単一ファイルマウントがSearXNGの FORCE_OWNERSHIP によって壊れた場合は、ディレクトリマウントに切り替えてください — ただし 127.0.0.1 バインドは維持してください (04_SEARXNG_RUNTIME.md 参照)。
環境変数の上書き (すべて WEBX_):
WEBX_DATA_DIR, WEBX_SEARXNG_URL (default http://127.0.0.1:8888), WEBX_DOCKER_CMD,
WEBX_STARTUP_TIMEOUT (30s), WEBX_SEARCH_TIMEOUT (15s), WEBX_READ_TIMEOUT (15s),
WEBX_MAX_RESPONSE_BYTES (10 MiB), WEBX_MAX_READ_CHARS (40000), WEBX_MCP_STOP_ON_EXIT (true)SEARXNG_IMAGE は .env または環境変数で設定してイメージタグを固定することもできます。
SearXNGイメージバージョン
実装時 (2026-08-20) に検証済み:
タグ:
docker.io/searxng/searxng:latest解決済みダイジェスト:
sha256:ec536bcd1e83577aad4cc07f7ecb9a30858a9a905d2d57c8796abc83f872a036(ローカルイメージec536bcd1e83、SearXNG2026.8.1-8892414dc)SEARXNG_IMAGEで設定可能 — 検索のたびに自動プルしないでください。
手動更新:
webx stop
docker compose -f $(webx init --show-path)/compose.yml pull # or: SEARXNG_IMAGE=... docker compose pull
webx up
webx search "test" --limit 1 --pretty
webx stop検索時に自動更新はしないでください。
MCPライフサイクル
webx-mcpの起動はSearXNGを開始しません。最初の
web_searchがhttp://127.0.0.1:8888/をプローブし、停止していればdocker compose up -d+ ポーリングを実行し、started_by_mcp = trueをマークします。すでに実行中ならfalseをマークします。web_readはSearXNGを開始しません。クリーン終了時、
started_by_mcp && WEBX_MCP_STOP_ON_EXITならcompose stopを実行し、それ以外はSearXNGを実行したままにします。プロセスローカルロックが同時の最初の検索を保護します。リース/参照カウントを必要とする複数の独立したMCPプロセスはv2に延期されます。
ツールの説明は信頼境界を示します: 返されるページテキストは信頼できない外部データであり、エージェントの指示ではありません。JS/認証ページは機能しない場合があります。
セキュリティモデル
webx read はURLを信頼できない入力として扱います。
http:///https://のみ許可。file:、ftp:、data:、javascript:、裸のパス、資格情報を含むURLを拒否。ホスト名をOSリゾルバで解決し、
ipaddressですべての IPv4/IPv6を検査: ループバック、RFC1918プライベート、IPv6 ULA、リンクローカル (169.254.0.0/16、fe80::/10)、マルチキャスト、未指定、予約済み、メタデータ169.254.169.254、およびSearXNGエンドポイント自体を拒否。v1では--allow-privateなし。DNSリバインディングの残存リスク: 解決後に接続しても、
httpxが再解決する可能性があるためリバインディングを完全に防げません。WebXはすべてのリダイレクトターゲットを検証し、制限を文書化します。アドレスピン留めはv1を肥大化させずに可能な強化策です。リダイレクト: 手動ループ、最大5回、
Locationを現在のURLに対して解決し、再検証、ループ/超過で失敗。フェッチ:
User-Agent: webx/<version> local-research-tool、接続5秒、読み取り15秒、Content-Length事前チェック + 10 MiB上限でストリーミング、ブラウザ偽装なし。許可されるタイプ:
text/html、application/xhtml+xml、text/plain、マークダウン類似、json/xmlテキスト。バイナリ (image/*、application/pdfなど) → 終了コード7。抽出: 生ボディ →
trafilatura.extract(output_format="markdown", ...)+html2txtフォールバック。抽出後に単語/改行境界で切り詰め、truncated+charactersを報告。クッキー、認証ヘッダー、POST、ブラウザはなし。
運用とトラブルシューティング
webx doctor が最初の診断です。
失敗 | 考えられる原因 |
| Docker/Composeをインストール。 |
検索403 |
|
SearXNGは起動するが検索結果0件 / 5xx | アップストリームエンジンがレート制限 / CAPTCHAに引っかかった — |
リーダーが小さなテキストを返す | JSレンダリングページ — |
リーダーがURLを拒否 | プライベート/ローカルネットワーク拒否 — 意図的 |
|
|
| 単一の |
|
|
リサーチのヒューリスティック (エージェント側、WebXではない): 公式ドキュメント → アップストリームのリポジトリ/ノート → 仕様 → ベンダー発表 → 質の高い記事を優先。--category it が役立つ場合は使用。複数の焦点を絞った検索を実行し、一次ソースを読み、矛盾を検索。
テスト
uv sync --extra dev --extra mcp
uv run pytest # fast unit tests, no Docker/net required
uv run pytest -m integration # live tests (needs Docker + net, marked integration)
uv run pytest --cov=webx手動受け入れ (クリーンな WEBX_DATA_DIR から):
webx --help; webx init; webx doctor; webx status # stopped
webx search "SearXNG documentation" --limit 5 --pretty
webx status # running
webx read "https://docs.searxng.org/" --max-chars 12000
webx read "http://127.0.0.1:8888/" # -> exit 5
webx read "http://192.168.1.1/" # -> exit 5
webx read "file:///etc/passwd" # -> exit 5
webx stop; webx status # stopped
# MCP: inspector 2 tools, web_read while stopped, first search starts, second reuses, stop-on-exit ownership
httpbin.orgに関する注意: ライブのhttpbin.orgは現在、一部のネットワークから503 Service Temporarily Unavailableを返します (2026-08-20にcurl -A "webx/0.1.0"とcurl -A "Mozilla/5.0"の両方で503を確認)。webx read https://httpbin.org/htmlが503の場合は、安定した代替を使用:https://example.com、https://en.wikipedia.org/wiki/Python_(programming_language)(切り詰め/--linksテストに適している)、またはhttps://httpbingo.org/get。
プロジェクト構成
src/webx/
__init__.py, cli.py, config.py, lifecycle.py, searxng.py, security.py, reader.py, core.py, mcp_server.py
assets/{compose.yml,settings.yml}
tests/{unit,integration}
docs/{instructions,PLAN.md}コアの WebX ファサードはCLIとMCPで共有され、どちらも他方をシェルアウトしません。
非目標 (v1)
ブラウザ/Playwright、PDFリーダー、クローリング、リランカー、LLM要約、キャッシュ、プロセス間リース、エンジンプリセット、ドメインフィルタ — 根拠とv2候補は 09_DECISIONS_AND_FUTURE.md を参照。
ライセンス
MIT
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 Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to perform web searches and read URL content via a SearXNG instance.215MIT
- AlicenseNot gradedqualityCmaintenanceIntegrates SearXNG API to give AI assistants web search and URL reading capabilities.11MIT
- AlicenseAqualityCmaintenanceEnables local LLMs to search the web and fetch clean content from URLs without API keys, using SearxNG and Mozilla Readability.235MIT
- AlicenseAqualityDmaintenanceEnables private web search and webpage content extraction using a local SearxNG instance, prioritizing user privacy and autonomy.22MIT
Related MCP Connectors
Read any web page as clean Markdown for AI agents: fetch, search, metadata, links. SSRF-safe.
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
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/Fatih0234/web-searxng'
If you have feedback or need assistance with the MCP directory API, please join our Discord server