Open Websearch について
Open Websearch は、MCP サーバー、コマンドライン、ローカルデーモンとして動作し、API キーなしで複数の検索エンジンの結果を取得します。記事や Web ページの内容も取得できます。リアルタイムの Web 検索を必要とするエージェントや開発者に向いています。
主な機能
- 01API キー不要の複数エンジン検索
- 02Bing、Baidu、DuckDuckGo、Brave などに対応
- 03タイトル、URL、説明を含む構造化された結果
- 04記事と Web ページの Markdown 内容の取得
- 05プロキシと既定の検索エンジンの設定
活用シーン
- 01MCP クライアントへのリアルタイム Web 検索の提供
- 02コマンドラインやスクリプトからの単発検索
- 03ローカルデーモン経由での繰り返し検索
MCP 対応
MCP サーバーとして動作し、検索とコンテンツ取得のツールを MCP クライアントに公開します。ツール名は環境変数で変更または無効化できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e ENABLE_CORS -e CORS_ORIGIN ghcr.io/aas-ee/open-web-search:latestENABLE_CORSCORS_ORIGINローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/aas-ee/open-web-search:lateststdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
open-websearch は、MCP サーバー、CLI、ローカルデーモンを提供します。また、スキルに基づくエージェントのワークフローと組み合わせて、API キーなしでリアルタイムのウェブ検索やコンテンツ取得を行えます。
スポンサー
Swiftproxy は、マルチアカウント管理、自動化、ウェブスクレイピング、安全なオンライン操作向けに、安定した IP を備えた高品質な静的レジデンシャルプロキシを提供します。クリーンな IP と信頼性の高いプロキシインフラストラクチャでアカウントを保護できます。静的プロキシの通信量は、使用量無制限で30日間有効です。コード
PROXY90を使用すると 10% 割引になります。
機能
- 複数の検索エンジンによるウェブ検索
- bing
- baidu
linux.do一時的に未対応- csdn
- duckduckgo
- exa
- brave
- juejin
- startpage
- sogou
- hackernews
- 制限されたリソースにアクセスするための HTTP プロキシ設定に対応
- API キーや認証は不要
- タイトル、URL、説明を含む構造化された結果を返します
- 検索ごとの結果数を設定可能
- デフォルトの検索エンジンをカスタマイズ可能
- 個別の記事コンテンツの取得に対応
- csdn
- github(README ファイル)
- 一般的な HTTP(S) ページ/Markdown コンテンツ
適切な方法を選ぶ
MCPopen-websearchを Claude Desktop、Cherry Studio、Cursor、またはその他の MCP クライアントに接続する場合に最適です。
CLI- 一度限りのローカルコマンド、シェルスクリプト、ターミナルからの直接利用に最適です。
Local daemonstatus、GET /health、POST /search、POST /fetch-*を提供する、再利用可能な長時間稼働のローカル HTTP サービスが必要な場合に最適です。open-websearch serveで明示的に起動し、open-websearch statusで確認します。
Skill- セットアップと使い方を案内する、エージェント向けのガイダンス層として最適です。スキルは MCP、CLI、ローカルデーモンの代わりになるものではありません。通常は CLI やローカルデーモンと連携し、エージェントが最小限の動作経路を見つけ、有効化して利用できるようにします。
スキルを使う
まず、エージェントに open-websearch スキルをインストールしてください。
npx skills add https://github.com/Aas-ee/open-webSearch --skill open-websearch
初回の使用では通常、次の手順に沿って進みます。利用可能な open-websearch のパスがすでにあるかを確認し、ない場合はセットアップと有効化を案内し、機能が有効になっていることを検証してから、最小限の動作する手順で検索または取得を行います。
現在の環境でセットアップや有効化を自動で完了できない場合は、エージェントにローカルデーモンを先に起動するよう明示的に指示できます。
open-websearch serve
open-websearch status
インストール時のプロキシ設定と実行時のプロキシ設定は分けてください。
- インストール用プロキシ/ミラー
- スキルまたはエージェントが
open-websearch、playwright、その他の npm パッケージをインストールする際に使用します。 - ネットワークが制限されている場合は、一般的なシェルのプロキシ環境変数よりも、npm 固有のフラグや npm の設定がうまく機能することがあります。例:
- スキルまたはエージェントが
npm --proxy http://127.0.0.1:7890 --https-proxy http://127.0.0.1:7890 install -g open-websearch
- 実行時プロキシ
- デーモンがすでにインストールされており、ライブの
search/fetchを実行する際に使用します。 - これは
serveの起動後に発生するopen-websearchのネットワーク通信に影響します。例:
- デーモンがすでにインストールされており、ライブの
USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 open-websearch serve
パッケージのインストールには npm のプロキシ設定が必要で、起動後のライブ検索/取得にもプロキシが必要な場合、この2つは別々の設定手順として個別に扱ってください。
CLI とローカルデーモン
CLI は単発の実行に使用します。ローカルデーモンは、起動時の手間を抑えて繰り返し呼び出すための、長時間稼働するローカル HTTP サービスです。デーモンの明示的な起動コマンドには open-websearch serve を、状態の明示的な確認コマンドには open-websearch status を使用してください。
search や fetch-web などのアクションコマンドは、利用可能な場合、まずデフォルトのローカルデーモンを試します。--daemon-url を指定すると、そのデーモンの使用が明示され、直接実行へのサイレントフォールバックは無効になります。
まずビルドします。
npm run build
ローカルデーモンを起動します。
npm run serve
# globally installed: open-websearch serve
状態を確認します。
npm run status -- --json
# globally installed: open-websearch status --json
ローカル CLI で単発の検索を実行します。
npm run search:cli -- "open web search" --json
注意:
- 裸の
open-websearchは MCP サーバーとの互換性を保つためのエントリーポイントであり、エージェントの自動化で推奨されるデーモンの起動コマンドではありません。 - コンテンツを抽出する場合は、まず検索してから、より具体的な結果ページを取得してください。ホームページや JavaScript を多用するランディングページでは、
fetch-webで読み取り可能な記事本文を取得できない場合があります。
ローカルデーモンの HTTP API(serve、status、GET /health、POST /search、POST /fetch-*)については、docs/http-api.md を参照してください。
TODO
Bing(対応済み)、DuckDuckGo(対応済み)、Exa(対応済み)、Brave(対応済み)、Sogou(対応済み)、Hacker News(対応済み)、Google などの検索エンジンへの対応- より多くのブログ、フォーラム、ソーシャルプラットフォームへの対応
- 記事コンテンツ抽出の最適化、およびより多くのサイトへの対応
GitHub README の取得への対応(対応済み)
インストールガイド
open-websearch を MCP サーバーとして使用する場合は、以下の MCP 向けセットアップに進んでください。
NPX クイックスタート(推奨)
最も手早く始める方法:
# Basic usage
npx open-websearch@latest
# With environment variables (Linux/macOS)
DEFAULT_SEARCH_ENGINE=duckduckgo ENABLE_CORS=true npx open-websearch@latest
# Windows PowerShell
$env:DEFAULT_SEARCH_ENGINE="duckduckgo"; $env:ENABLE_CORS="true"; npx open-websearch@latest
# Windows CMD
set MODE=stdio && set DEFAULT_SEARCH_ENGINE=duckduckgo && npx open-websearch@latest
# Cross-platform (requires cross-env, Used for local development)
npm install -g open-websearch
npx cross-env DEFAULT_SEARCH_ENGINE=duckduckgo ENABLE_CORS=true open-websearch
環境変数:
| 変数 | デフォルト値 | 選択肢 | 説明 |
|---|---|---|---|
ENABLE_CORS | false | true、false | CORS を有効にします |
CORS_ORIGIN | * | 有効なオリジン | CORS のオリジン設定 |
DEFAULT_SEARCH_ENGINE | bing | bing、duckduckgo、exa、brave、baidu、csdn、linuxdo、juejin、startpage、sogou、hackernews | デフォルトの検索エンジン |
USE_PROXY | false | true、false | HTTP プロキシを有効にします |
PROXY_URL | http://127.0.0.1:7890 | 有効な URL | プロキシサーバーの URL |
FAKE_IP_CIDRS | empty | カンマ区切りの CIDR リスト | これらの CIDR 内の DNS 応答を合成された fake-IP の結果として扱い、プライベートネットワークの DNS 応答としてブロックしません。リテラルのプライベート/ローカル宛先と、その他のプライベートネットワークの DNS 応答は引き続きブロックされます |
FETCH_WEB_INSECURE_TLS | false | true、false | fetchWebContent のリクエスト部分に限り、TLS 検証を無効にします。Playwright のブラウザナビゲーションには影響しません。証明書チェーンに問題がある場合にのみ使用してください |
MODE | both | both、http、stdio | サーバーモード:HTTP と STDIO の両方、HTTP のみ、または STDIO のみ |
PORT | 3000 | 1~65535 | サーバーのポート |
ALLOWED_SEARCH_ENGINES | empty (all available) | カンマ区切りのエンジン名 | 使用可能な検索エンジンを制限します。デフォルトのエンジンがこのリストに含まれていない場合、最初の許可されたエンジンがデフォルトになります |
SEARCH_MODE | auto | request、auto、playwright | 検索方法です。現在は Bing のみに影響します。HTTP リクエストモード(request)または Playwright モード(playwright)を強制するか、エージェントに選択させます(デフォルトの auto)。強制モードでは、エージェントに searchMode の上書き設定を公開しません。auto モードでは、サーバーは Playwright が実際に使用可能かどうかを確認します(クライアントモジュールを実際に読み込めること、ローカル起動の場合は実際のブラウザバイナリが存在すること:明示的に指定された PLAYWRIGHT_EXECUTABLE_PATH、バンドルされたブラウザ、またはシステムの Chrome/Edge)。使用可能な場合、検索ツールは searchMode パラメーターを公開し、エージェントにデフォルトの auto を維持し、リクエストの結果が失敗する、空になる、またはブロックされているように見える場合に限り playwright で再試行するよう指示します。使用できない場合は、強制されたリクエストモードと同様に動作します。playwright が強制されているものの使用できない場合、検索は browser_unavailable エラーで失敗します |
PLAYWRIGHT_PACKAGE | auto | auto、playwright、playwright-core | ブラウザモードが有効な場合に解決する Playwright クライアントパッケージ |
PLAYWRIGHT_MODULE_PATH | empty | 絶対パスまたはプロジェクト相対パス | このプロジェクト外にある既存の Playwright クライアントパッケージを再利用します |
PLAYWRIGHT_EXECUTABLE_PATH | empty | 有効なブラウザバイナリのパス | バンドルされたブラウザをインストールせずに、既存の Chromium/Chrome 実行ファイルを起動します |
PLAYWRIGHT_WS_ENDPOINT | empty | 有効な Playwright ws:// / wss:// エンドポイント | 既存のリモート Playwright ブラウザサーバーに接続します |
PLAYWRIGHT_CDP_ENDPOINT | empty | 有効な Chromium CDP エンドポイント | CDP 経由で既存の Chromium インスタンスに接続します |
PLAYWRIGHT_HEADLESS | true | true、false | Playwright Chromium をヘッドレスモードで実行するかどうか |
PLAYWRIGHT_NAVIGATION_TIMEOUT_MS | 20000 | 正の整数 | Playwright のナビゲーションと Bing の検索結果待機のタイムアウト |
OPEN_WEBSEARCH_PROFILE_DIR | <tmpdir>/open-websearch-browser-profiles | 書き込み可能な任意のディレクトリ | 永続的なローカルブラウザープロファイルのベースディレクトリ(下記のブラウザー状態に関する注記を参照) |
MCP_TOOL_SEARCH_NAME | search | 有効な MCP ツール名 | 検索ツールのカスタム名です。ツールを無効にするには <disabled> を設定します(bash/zsh では '<disabled>'、Windows cmd では "<disabled>" と引用符で囲みます)。無効な名前の場合、警告を表示してデフォルトにフォールバックします |
MCP_TOOL_FETCH_LINUXDO_NAME | fetchLinuxDoArticle | 有効な MCP ツール名 | Linux.do 記事取得ツールのカスタム名です。ツールを無効にするには <disabled> を設定します(bash/zsh では '<disabled>'、Windows cmd では "<disabled>" と引用符で囲みます)。無効な名前の場合、警告を表示してデフォルトにフォールバックします |
MCP_TOOL_FETCH_CSDN_NAME | fetchCsdnArticle | 有効な MCP ツール名 | CSDN 記事取得ツールのカスタム名です。ツールを無効にするには <disabled> を設定します(bash/zsh では '<disabled>'、Windows cmd では "<disabled>" と引用符で囲みます)。無効な名前の場合、警告を表示してデフォルトにフォールバックします |
MCP_TOOL_FETCH_GITHUB_NAME | fetchGithubReadme | 有効な MCP ツール名 | GitHub README 取得ツールのカスタム名です。ツールを無効にするには <disabled> を設定します(bash/zsh では '<disabled>'、Windows cmd では "<disabled>" と引用符で囲みます)。無効な名前の場合、警告を表示してデフォルトにフォールバックします |
MCP_TOOL_FETCH_JUEJIN_NAME | fetchJuejinArticle | 有効な MCP ツール名 | Juejin 記事取得ツールのカスタム名です。ツールを無効にするには <disabled> を設定します(bash/zsh では '<disabled>'、Windows cmd では "<disabled>" と引用符で囲みます)。無効な名前の場合、警告を表示してデフォルトにフォールバックします |
MCP_TOOL_FETCH_WEB_NAME | fetchWebContent | 有効な MCP ツール名 | 汎用ウェブ/Markdown 取得ツールのカスタム名です。ツールを無効にするには <disabled> を設定します(bash/zsh では '<disabled>'、Windows cmd では "<disabled>" と引用符で囲みます)。無効な名前の場合、警告を表示してデフォルトにフォールバックします |
| 一般的な設定: |
# Enable proxy for restricted regions
USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 npx open-websearch@latest
# Only if a target website has a broken certificate chain
FETCH_WEB_INSECURE_TLS=true npx open-websearch@latest
# Request first, then fallback to Playwright if available
SEARCH_MODE=auto npx open-websearch@latest
# Force request-only Bing search
SEARCH_MODE=request npx open-websearch@latest
# Rename search tool to webSearch
MCP_TOOL_SEARCH_NAME=webSearch npx open-websearch@latest
# Disable search tool
MCP_TOOL_SEARCH_NAME='<disabled>' npx open-websearch@latest
# Full configuration
DEFAULT_SEARCH_ENGINE=duckduckgo ENABLE_CORS=true USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 PORT=8080 npx open-websearch@latest
注:
<disabled>センチネルにはシェルで特別な意味を持つ文字が含まれています。bash/zsh では'<disabled>'のように引用符で囲み、Windows cmd では二重引用符"<disabled>"を使用してください。
ブラウザーを活用した Bing フォールバックはオプトインです。公開パッケージには Playwright がバンドルされなくなりました。次のいずれかの構成で手動で有効にしてください。
- Playwright を完全にローカルインストールする:
npm install playwright
npx playwright install chromium
SEARCH_MODE=auto npx open-websearch@latest
- 既存のブラウザーバイナリをスリムクライアントで再利用する:
npm install playwright-core
PLAYWRIGHT_PACKAGE=playwright-core PLAYWRIGHT_EXECUTABLE_PATH=/path/to/chromium SEARCH_MODE=auto npx open-websearch@latest
- マシン上の別の場所にすでにある Playwright パッケージを再利用する:
PLAYWRIGHT_MODULE_PATH=/absolute/path/to/node_modules/playwright SEARCH_MODE=playwright npx open-websearch@latest
- 既存のリモートブラウザーに接続する:
npm install playwright-core
PLAYWRIGHT_PACKAGE=playwright-core PLAYWRIGHT_WS_ENDPOINT=ws://127.0.0.1:3000/ SEARCH_MODE=auto npx open-websearch@latest
- CDP 経由でローカルの Chrome/Chromium セッションを再利用する:
npm install playwright-core
# Start Chrome/Chromium with a debugging port first
chrome --remote-debugging-port=9222 --user-data-dir=/tmp/open-websearch-chrome
# Then connect through CDP
PLAYWRIGHT_PACKAGE=playwright-core PLAYWRIGHT_CDP_ENDPOINT=http://127.0.0.1:9222 SEARCH_MODE=auto npx open-websearch@latest
ログイン済み、または事前に認証を済ませた自分のブラウザーセッションを再利用したい場合は、これが最も実用的な構成です。
Windows PowerShell の例:
npm install playwright-core
& "$env:LOCALAPPDATA\Google\Chrome\Application\chrome.exe" `
--remote-debugging-port=9222 `
--user-data-dir="$env:TEMP\open-websearch-chrome"
$env:PLAYWRIGHT_PACKAGE="playwright-core"
$env:PLAYWRIGHT_CDP_ENDPOINT="http://127.0.0.1:9222"
$env:SEARCH_MODE="auto"
npx open-websearch@latest
モードの動作:
request:リクエストベースの Bing スクレイピングのみを使用します。検索ツールにはsearchModeパラメーターもモードに関するガイダンスもありませんplaywright:Playwright を強制的に使用します。検索ツールにはsearchModeパラメーターもモードに関するガイダンスもありません。起動時に Playwright が利用可能か確認し、設定が無効な場合は警告をログに記録します。その後の検索は、明確なbrowser_unavailableエラーで失敗しますauto:Playwright が実際に使用可能か確認します(クライアントモジュールが実際に読み込まれること。ローカルで起動する場合は実際のブラウザーバイナリが存在すること)。使用可能な場合、検索ツールにはsearchModeパラメーター(request / auto / playwright)が公開され、エージェントにはデフォルトのautoを維持し、リクエストの結果が失敗する、空になる、またはブロックされているように見える場合に限りplaywrightで再試行するよう指示します。それ以外の場合、サーバーは request モードとして動作します
注:
PLAYWRIGHT_MODULE_PATHはPLAYWRIGHT_PACKAGEより優先されますPLAYWRIGHT_WS_ENDPOINTはPLAYWRIGHT_CDP_ENDPOINTより優先されます- リモートエンドポイントでは
PLAYWRIGHT_EXECUTABLE_PATHとローカルプロキシの起動フラグは無視されます - Playwright が使用可能な場合、ブロックされた CSDN/Zhihu の記事取得や一般的なウェブページの取得も、ブラウザーから取得した Cookie を使って再試行できます
- Playwright がない場合、
fetchWebContentはリクエストのみの経路を使用します。公開ページは引き続き利用できる場合がありますが、ブラウザー Cookie またはブラウザーでレンダリングされた HTML を必要とするページは失敗することがあります。
ブラウザー状態に関する注記(ローカルの共有プロファイル):
- ローカルブラウザーモードでは、取得処理間およびプロセスの再起動後も、永続コンテキスト/ページが再利用されます。そのため、同じオリジンの Cookie、ストレージ、キャッシュ、Service Worker の状態は、ブラウザーモードでの取得間に保持されます。
- これは、単一ユーザーによる状態を維持するスクレイピングを意図した動作です(ボット対策の状態を維持し、ブラウザーの起動を繰り返さないようにします)。相互に信頼していない呼び出し元でデーモンを共有する場合は、ローカルの共有プロファイルに頼らず、
PLAYWRIGHT_WS_ENDPOINT/PLAYWRIGHT_CDP_ENDPOINTを介して各呼び出し元を分離されたブラウザーに接続するか、それぞれの呼び出し元に独自のOPEN_WEBSEARCH_PROFILE_DIRを指定してください。 - この共有状態はサービスレベルのものであり、公開ウェブページへの匿名アクセスのみを想定しています。サービス自体がサイトにログインすることはないため、個人の認証情報が保持されることはありません。ログイン済みまたはパーソナライズされたセッションの保存を前提にしないでください。リモートエンドポイント(
PLAYWRIGHT_WS_ENDPOINT/PLAYWRIGHT_CDP_ENDPOINT)は接続先ブラウザーの状態を引き継ぐため、個人のログイン済みブラウザーを指定すると、そのブラウザーのログイン状態やパーソナライズ状態もこのサービスと共有されます。 - プロファイルの状態を消去するには、ローカルブラウザーが起動していない状態で、
OPEN_WEBSEARCH_PROFILE_DIR(デフォルト:<tmpdir>/open-websearch-browser-profiles)配下のブラウザープロファイルディレクトリを削除してください。
ローカルインストール
- このリポジトリをクローンまたはダウンロードします
- 依存関係をインストールします:
npm install
これにより、コア MCP サーバーのみがインストールされます。Playwright クライアントを自分でインストールまたは接続するまでは、ブラウザーのフォールバックは任意です。 3. サーバーをビルドします:
npm run build
- MCP 設定にサーバーを追加します:
Cherry Studio:
{
"mcpServers": {
"web-search": {
"name": "Web Search MCP",
"type": "streamableHttp",
"description": "Multi-engine web search with article fetching",
"isActive": true,
"baseUrl": "http://localhost:3000/mcp"
}
}
}
VSCode(Claude Dev Extension):
{
"mcpServers": {
"web-search": {
"transport": {
"type": "streamableHttp",
"url": "http://localhost:3000/mcp"
}
},
"web-search-sse": {
"transport": {
"type": "sse",
"url": "http://localhost:3000/sse"
}
}
}
}
Claude Desktop:
{
"mcpServers": {
"web-search": {
"type": "http",
"url": "http://localhost:3000/mcp"
},
"web-search-sse": {
"type": "sse",
"url": "http://localhost:3000/sse"
}
}
}
NPX コマンドライン設定:
{
"mcpServers": {
"web-search": {
"args": [
"open-websearch@latest"
],
"command": "npx",
"env": {
"MODE": "stdio",
"DEFAULT_SEARCH_ENGINE": "duckduckgo",
"ALLOWED_SEARCH_ENGINES": "duckduckgo,bing,exa"
}
}
}
}
Windows の NPX 設定:
{
"mcpServers": {
"web-search": {
"command": "cmd",
"args": [
"/c",
"npx",
"-y",
"open-websearch@latest"
],
"env": {
"MODE": "stdio",
"DEFAULT_SEARCH_ENGINE": "duckduckgo",
"SYSTEMROOT": "C:/Windows"
}
}
}
}
プロキシと TLS に関する注意事項:
- open-websearch は、Axios の環境プロキシの自動検出を内部的に無効にし、明示的な
USE_PROXY+PROXY_URLの経路のみを使用するようになりました。 USE_PROXY=trueの場合、Axios ベースのすべてのネットワークリクエストは、直接リクエストと環境プロキシの動作を混在させず、設定されたPROXY_URLの経路に従います。PROXY_URLがローカルのルールベースのプロキシクライアントを指している場合、接続先をDIRECTにするかプロキシ経由にするかは、そのクライアントが引き続き判断できます。PROXY_URLが固定の上流プロキシまたは海外へのエグレスを指している場合、Baidu、CSDN、Juejin、Linux.do、GitHub など、地域によって動作が異なるサイトの挙動が以前と変わることがあります。- ホストマシンに
HTTP_PROXYまたはHTTPS_PROXYが設定されていても、サーバー内部のリクエストの動作を上書きしなくなります。 - サイトで中間 CA が不足している場合は、Windows で
NODE_EXTRA_CA_CERTSを設定することをおすすめします。 FETCH_WEB_INSECURE_TLS=trueは、fetchWebContentのリクエスト処理に対する最終手段としてのみ使用してください。TLS 検証が弱まり、Playwright のブラウザーナビゲーションには影響しません。
Cherry Studio のローカル STDIO 設定(Windows):
{
"mcpServers": {
"open-websearch-local": {
"command": "node",
"args": ["C:/path/to/your/project/build/index.js"],
"env": {
"MODE": "stdio",
"DEFAULT_SEARCH_ENGINE": "duckduckgo",
"ALLOWED_SEARCH_ENGINES": "duckduckgo,bing,exa"
}
}
}
}
Docker でのデプロイ
Docker Compose を使ったクイックデプロイ:
docker-compose up -d
または Docker を直接使用します:
docker run -d --name web-search -p 3000:3000 -e ENABLE_CORS=true -e CORS_ORIGIN=* ghcr.io/aas-ee/open-web-search:latest
環境変数の設定:
| 変数 | デフォルト値 | オプション | 説明 |
|---|---|---|---|
ENABLE_CORS | false | true、false | CORS を有効にします |
CORS_ORIGIN | * | 任意の有効なオリジン | CORS オリジンの設定 |
DEFAULT_SEARCH_ENGINE | bing | bing、duckduckgo、exa、brave、baidu、csdn、linuxdo、juejin、startpage、sogou、hackernews | デフォルトの検索エンジン |
USE_PROXY | false | true、false | HTTP プロキシを有効にします |
PROXY_URL | http://127.0.0.1:7890 | 任意の有効な URL | プロキシサーバーの URL |
FAKE_IP_CIDRS | empty | カンマ区切りの CIDR リスト | これらの CIDR 内の DNS 応答を合成された fake-IP の結果として扱い、プライベートネットワークの DNS 応答としてブロックしません。リテラルのプライベート/ローカル宛先や、その他のプライベートネットワークの DNS 応答は引き続きブロックされます |
PORT | 3000 | 1-65535 | サーバーのポート |
次に、MCP クライアントで設定します:
{
"mcpServers": {
"web-search": {
"name": "Web Search MCP",
"type": "streamableHttp",
"description": "Multi-engine web search with article fetching",
"isActive": true,
"baseUrl": "http://localhost:3000/mcp"
},
"web-search-sse": {
"transport": {
"name": "Web Search MCP",
"type": "sse",
"description": "Multi-engine web search with article fetching",
"isActive": true,
"url": "http://localhost:3000/sse"
}
}
}
}
使用ガイド
このサーバーは、search、fetchLinuxDoArticle、fetchCsdnArticle、fetchGithubReadme、fetchJuejinArticle、fetchWebContent の 6 つのツールを提供します。
ローカルデーモンの HTTP API(serve、status、GET /health、POST /search、POST /fetch-*)については、docs/http-api.md を参照してください。
search ツールの使用方法
{
"query": string, // Search query
"limit": number, // Optional: Number of results to return (default: 10)
"engines": string[], // Optional: Engines to use (bing,baidu,linuxdo,csdn,duckduckgo,exa,brave,juejin,startpage,sogou,hackernews) default runtime-configured engine
"searchMode": string // Optional: request, auto, or playwright (currently only affects Bing)
}
使用例:
use_mcp_tool({
server_name: "web-search",
tool_name: "search",
arguments: {
query: "search content",
limit: 3, // Optional parameter
engines: ["bing", "csdn", "duckduckgo", "exa", "brave", "juejin", "sogou"] // Optional parameter, supports multi-engine combined search
}
})
応答例:
[
{
"title": "Example Search Result",
"url": "https://example.com",
"description": "Description text of the search result...",
"source": "Source",
"engine": "Engine used"
}
]
fetchCsdnArticle ツールの使用方法
CSDN ブログ記事の全コンテンツを取得するために使用します。
{
"url": string // URL from CSDN search results using the search tool
}
使用例:
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchCsdnArticle",
arguments: {
url: "https://blog.csdn.net/xxx/article/details/xxx"
}
})
応答例:
[
{
"content": "Example search result"
}
]
fetchLinuxDoArticle ツールの使用方法
Linux.do フォーラム記事の全コンテンツを取得するために使用します。
{
"url": string // URL from linuxdo search results using the search tool
}
使用例:
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchLinuxDoArticle",
arguments: {
url: "https://xxxx.json"
}
})
応答例:
[
{
"content": "Example search result"
}
]
fetchGithubReadme ツールの使用方法
GitHub リポジトリから README のコンテンツを取得するために使用します。
{
"url": string // GitHub repository URL (supports HTTPS, SSH formats)
}
使用例:
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchGithubReadme",
arguments: {
url: "https://github.com/Aas-ee/open-webSearch"
}
})
対応する URL 形式:
- HTTPS:
https://github.com/owner/repo - .git 付き HTTPS:
https://github.com/owner/repo.git - SSH:
[email protected]:owner/repo.git - パラメーター付き URL:
https://github.com/owner/repo?tab=readme
応答例:
[
{
"content": "<div align=\"center\">\n\n# Open-WebSearch MCP Server..."
}
]
fetchWebContent ツールの使用方法
Markdown ファイル(.md)、通常のページ、Playwright が設定されている場合の JavaScript でレンダリングされたページなど、公開 HTTP(S) リンクからコンテンツを直接取得します。
{
"url": string, // Public HTTP(S) URL
"maxChars": number, // Optional: max returned content length (1000-200000, default 30000)
"renderMode": string, // Optional: request, auto (default), or browser
"readability": boolean, // Optional: use Mozilla Readability for HTML
"includeLinks": boolean // Optional: preserve links from Readability output
}
request はブラウザーを起動せず、ブラウザーの Cookie も使用しません。auto は既存のリクエスト優先の動作を維持し、必要な場合にのみブラウザーによる補助を使用します。browser はページを直接レンダリングし、Playwright またはそのブラウザーターゲットを利用できない場合は、明確なエラーを返します。初期 URL と最終 URL は、いずれも公開ネットワークの安全性チェックの対象です。
ブラウザーリクエストは処理を続行する前に再検証されますが、このプロセスでは、Chromium が最終的に使用するソケットに DNS の応答を固定しません。そのため、リモートの Playwright/CDP エンドポイントでは、信頼できる DNS と送信トラフィックのポリシーを独自に適用する必要があります。
使用例:
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchWebContent",
arguments: {
url: "https://raw.githubusercontent.com/Aas-ee/open-webSearch/main/README.md",
maxChars: 12000,
renderMode: "auto"
}
})
レスポンス例:
{
"url": "https://raw.githubusercontent.com/Aas-ee/open-webSearch/main/README.md",
"finalUrl": "https://raw.githubusercontent.com/Aas-ee/open-webSearch/main/README.md",
"contentType": "text/plain; charset=utf-8",
"title": "",
"retrievalMethod": "request",
"truncated": false,
"content": "# Open-WebSearch MCP Server ..."
}
fetchJuejinArticle ツールの使用方法
Juejin の記事のコンテンツ全体を取得します。
{
"url": string // Juejin article URL from search results
}
使用例:
use_mcp_tool({
server_name: "web-search",
tool_name: "fetchJuejinArticle",
arguments: {
url: "https://juejin.cn/post/7520959840199360563"
}
})
対応する URL 形式:
https://juejin.cn/post/{article_id}
レスポンス例:
[
{
"content": "🚀 开源 AI 联网搜索工具:Open-WebSearch MCP 全新升级,支持多引擎 + 流式响应..."
}
]
使用上の制限事項
このツールは複数の検索エンジンの検索結果をスクレイピングする仕組みのため、以下の重要な制限事項にご注意ください。
-
レート制限:
- 短時間に検索しすぎると、使用中の検索エンジンから一時的にリクエストをブロックされることがあります
- 推奨事項:
- 適切な検索頻度を保ってください
limitパラメーターを適切に使用してください- 必要に応じて、検索の間隔を空けてください
-
結果の正確性:
- 対応する検索エンジンの HTML 構造に依存するため、検索エンジンの更新後に失敗することがあります
- 一部の結果には、説明などのメタデータが含まれない場合があります
- 複雑な検索演算子は、想定どおりに機能しない場合があります
-
法的条件:
- このツールは個人利用のみを目的としています
- 対応する検索エンジンの利用規約を遵守してください
- 実際の使用状況に応じて、適切なレート制限を設定してください
-
検索エンジンの設定:
- デフォルトの検索エンジンは、
DEFAULT_SEARCH_ENGINE環境変数で設定できます - 対応する検索エンジン:bing、duckduckgo、exa、brave、baidu、csdn、linuxdo、juejin、startpage、sogou、hackernews
- 特定のウェブサイトを検索する場合は、デフォルトの検索エンジンが使用されます
- デフォルトの検索エンジンは、
-
プロキシの設定:
- 特定の地域で一部の検索エンジンを利用できない場合は、HTTP プロキシを設定できます
- 環境変数
USE_PROXY=trueでプロキシを有効にしてください PROXY_URLでプロキシサーバーのアドレスを設定してください- Clash の fake-ip/TUN 設定を使用する場合は、
FAKE_IP_CIDRSで合成 DNS 範囲を設定してください(例:198.18.0.0/15)
コントリビューション
イシューの報告や機能改善の提案をお待ちしています!
コントリビューターガイド
このリポジトリをフォークして独自の Docker イメージを公開する場合は、以下の設定が必要です。
GitHub Secrets の設定
Docker イメージのビルドと公開を自動化するには、GitHub リポジトリの設定(Settings → Secrets and variables → Actions)で以下のシークレットを追加してください。
必須のシークレット:
GITHUB_TOKEN:GitHub によって自動的に提供されます(設定は不要です)
任意のシークレット(Alibaba Cloud ACR 用):
ACR_REGISTRY:Alibaba Cloud Container Registry の URL(例:registry.cn-hangzhou.aliyuncs.com)ACR_USERNAME:Alibaba Cloud ACR のユーザー名ACR_PASSWORD:Alibaba Cloud ACR のパスワードACR_IMAGE_NAME:ACR 内のイメージ名(例:your-namespace/open-web-search)
CI/CD ワークフロー
このリポジトリには、以下を自動的に実行する GitHub Actions ワークフロー(.github/workflows/docker.yml)が含まれています。
-
トリガー条件:
mainブランチへのプッシュ- バージョンタグ(
v*)のプッシュ - ワークフローの手動実行
-
ビルドとプッシュ先:
- GitHub Container Registry(ghcr.io):常に有効
- Alibaba Cloud Container Registry:ACR のシークレットが設定されている場合のみ有効
-
イメージタグ:
ghcr.io/your-username/open-web-search:latestyour-acr-address/your-image-name:latest(ACR が設定されている場合)
フォークして公開する手順:
- リポジトリをフォークして、ご自身の GitHub アカウントに追加します
- シークレットを設定します(ACR への公開が必要な場合):
- フォークしたリポジトリで Settings → Secrets and variables → Actions に移動します
- 上記の ACR 関連シークレットを追加します
mainブランチに変更をプッシュするか、バージョンタグを作成します- GitHub Actions が自動的にビルドしてプッシュします
- イメージを使用し、Docker コマンドを更新します:
docker run -d --name web-search -p 3000:3000 -e ENABLE_CORS=true -e CORS_ORIGIN=* ghcr.io/your-username/open-web-search:latest
注意事項:
- ACR シークレットを設定しない場合、ワークフローは GitHub Container Registry にのみ公開します
- GitHub リポジトリで Actions が有効になっていることを確認してください
- ワークフローでは、GitHub のユーザー名(小文字に変換したもの)が GHCR のイメージ名として使用されます
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。