open-websearch provides an MCP server, CLI, and local daemon, and can also be paired with skill-guided agent workflows for live web search and content retrieval without API keys.
$ npx -y skills add aas-ee/open-websearch --agent claude-code
Repo: aas-ee/open-websearch
What's inside
π¨π³ δΈζ | πΊπΈ English
open-websearch provides an MCP server, CLI, and local daemon, and can also be paired with skill-guided agent workflows for live web search and content retrieval without API keys.
Swiftproxy provides high-quality static residential proxies with stable IPs for multi-account management, automation, web scraping, and secure online operations. Protect your accounts with clean IPs and reliable proxy infrastructure. Static proxy traffic is valid for 30 days with unlimited usage. Get 10% off with code
PROXY90.
MCP
open-websearch to Claude Desktop, Cherry Studio, Cursor, or another MCP client.CLI
Local daemon
status, GET /health, and POST /search / POST /fetch-*. Start it explicitly with open-websearch serve and check it with open-websearch status.Skill
Install the open-websearch skill for your agent first:
npx skills add https://github.com/Aas-ee/open-webSearch --skill open-websearch
On first use, the skill typically follows this path: detect whether a usable open-websearch path already exists, guide setup/enablement if it does not, validate that the capability is active, and only then continue with search or fetch through the smallest working path.
If the current environment cannot complete setup or activation automatically, you can explicitly have the agent start the local daemon first:
open-websearch serve
open-websearch status
Keep installation proxy settings separate from runtime proxy settings:
open-websearch, playwright, or other npm packages.npm --proxy http://127.0.0.1:7890 --https-proxy http://127.0.0.1:7890 install -g open-websearch
search / fetch work.open-websearch network traffic after serve starts, for example:USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 open-websearch serve
If the agent can only get through the package-install step with npm proxy settings, but live search/fetch also needs a proxy after startup, those are two separate configuration steps and should be handled separately.
CLI is for one-shot execution. The local daemon is a long-lived local HTTP service for repeated calls with lower startup friction. Use open-websearch serve as the explicit daemon start command and open-websearch status as the explicit daemon status command.
Action commands such as search and fetch-web try the default local daemon first when it is available. If you pass --daemon-url, that daemon path becomes explicit and silent fallback to direct execution is disabled.
Build first:
npm run build
Start the local daemon:
npm run serve
# globally installed: open-websearch serve
Check status:
npm run status -- --json
# globally installed: open-websearch status --json
Run a one-shot local CLI search:
npm run search:cli -- "open web search" --json
Notes:
open-websearch is the MCP server compatibility entrypoint, not the recommended daemon start command for agent automation.fetch-web.For the local daemon HTTP API (serve, status, GET /health, POST /search, POST /fetch-*), see docs/http-api.md.
If you are using open-websearch as an MCP server, continue with the MCP-oriented setup below.
The fastest way to get started:
# 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
Environment Variables:
| Variable | Default | Options | Description |
|---|---|---|---|
ENABLE_CORS | false | true, false | Enable CORS |
CORS_ORIGIN | * | Any valid origin | CORS origin configuration |
DEFAULT_SEARCH_ENGINE | bing | bing, duckduckgo, exa, brave, baidu, csdn, linuxdo, juejin, startpage, sogou, hackernews | Default search engine |
USE_PROXY | false | true, false | Enable HTTP proxy |
PROXY_URL | http://127.0.0.1:7890 | Any valid URL | Proxy server URL |
FAKE_IP_CIDRS | empty | Comma-separated CIDR list | Treat DNS answers in these CIDRs as synthetic fake-IP results and do not block them as private-network DNS answers. Literal private/local targets and other private-network DNS answers remain blocked |
FETCH_WEB_INSECURE_TLS | false | true, false | Disable TLS verification only for the request leg of fetchWebContent; it does not affect Playwright browser navigation. Use only for broken certificate chains |
MODE | both | both, http, stdio | Server mode: both HTTP+STDIO, HTTP only, or STDIO only |
PORT | 3000 | 1-65535 | Server port |
ALLOWED_SEARCH_ENGINES | empty (all available) | Comma-separated engine names | Limit which search engines can be used; if the default engine is not in this list, the first allowed engine becomes the default |
SEARCH_MODE | auto | request, auto, playwright | Search strategy. Currently only affects Bing: force HTTP request mode (request), force Playwright mode (playwright), or let the agent choose (auto, default). Forced modes never expose a searchMode override to the agent. In auto mode the server checks whether Playwright is really usable (the client module can actually be loaded, and for local launches a real browser binary exists: explicit PLAYWRIGHT_EXECUTABLE_PATH, bundled browser, or system Chrome/Edge); if available, the search tool exposes a searchMode parameter and directs the agent to stay on the default auto and only retry with playwright when request results fail, return empty, or look blocked; otherwise it behaves as forced request mode. If playwright is forced but not usable, searches fail with a browser_unavailable error |
PLAYWRIGHT_PACKAGE | auto | auto, playwright, playwright-core | Which Playwright client package to resolve when browser mode is enabled |
PLAYWRIGHT_MODULE_PATH | empty | Absolute path or project-relative path | Reuse an existing Playwright client package outside this project |
PLAYWRIGHT_EXECUTABLE_PATH | empty | Any valid browser binary path | Launch an existing Chromium/Chrome executable without installing bundled browsers |
PLAYWRIGHT_WS_ENDPOINT | empty | Valid Playwright ws:// / wss:// endpoint | Connect to an existing remote Playwright browser server |
PLAYWRIGHT_CDP_ENDPOINT | empty | Valid Chromium CDP endpoint | Connect to an existing Chromium instance over CDP |
PLAYWRIGHT_HEADLESS | true | true, false | Whether Playwright Chromium runs in headless mode |
PLAYWRIGHT_NAVIGATION_TIMEOUT_MS | 20000 | Positive integer | Timeout for Playwright navigation and Bing result waits |
OPEN_WEBSEARCH_PROFILE_DIR | <tmpdir>/open-websearch-browser-profiles | Any writable directory | Base directory for persistent local browser profiles (see browser state note below) |
MCP_TOOL_SEARCH_NAME | search | Valid MCP tool name | Custom name for the search tool; set to <disabled> (quote as '<disabled>' in bash/zsh, "<disabled>" in Windows cmd) to disable the tool. Invalid names fallback to default with a warning |
MCP_TOOL_FETCH_LINUXDO_NAME | fetchLinuxDoArticle | Valid MCP tool name | Custom name for the Linux.do article fetch tool; set to <disabled> (quote as '<disabled>' in bash/zsh, "<disabled>" in Windows cmd) to disable the tool. Invalid names fallback to default with a warning |
MCP_TOOL_FETCH_CSDN_NAME | fetchCsdnArticle | Valid MCP tool name | Custom name for the CSDN article fetch tool; set to <disabled> (quote as '<disabled>' in bash/zsh, "<disabled>" in Windows cmd) to disable the tool. Invalid names fallback to default with a warning |
MCP_TOOL_FETCH_GITHUB_NAME | fetchGithubReadme | Valid MCP tool name | Custom name for the GitHub README fetch tool; set to <disabled> (quote as '<disabled>' in bash/zsh, "<disabled>" in Windows cmd) to disable the tool. Invalid names fallback to default with a warning |
MCP_TOOL_FETCH_JUEJIN_NAME | fetchJuejinArticle | Valid MCP tool name | Custom name for the Juejin article fetch tool; set to <disabled> (quote as '<disabled>' in bash/zsh, "<disabled>" in Windows cmd) to disable the tool. Invalid names fallback to default with a warning |
FAQ
open-websearch is a Claude Code plugin with 2 hand-picked skills for mcp servers work, indexed on Flowy. Install it with the command on its page. It includes open-websearch-maintainer, open-websearch. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it