Install
$ agentstack add mcp-lispking-ferris-search Open-source listing — not yet scanned by AgentStack. Follow the source repository for install instructions.
Security review
⚠ Flagged1 finding(s); flagged for manual review. · v0.1.0 How review works →
- • Prompt-injection patterns
- • Secret / credential exfiltration
- • Dangerous shell & filesystem operations
- • Untrusted network calls
- • Known-malicious package signatures
- high Pipes remote content directly into a shell (remote code execution).
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
ferris-search 🦀
> A blazing-fast MCP server for multi-engine web search, written in Rust.
Why ferris-search?
Claude Code's built-in web search works great in ideal network conditions — but in practice, many developers run into environments where it's unreliable or unavailable: corporate networks, restricted regions, air-gapped setups, or simply spotty connectivity.
While looking for a workaround, I came across open-webSearch, a Node.js MCP server that routes search queries through multiple engines. It solved the problem well. But I have a thing for Rust — and spinning up a Node.js runtime just to proxy a few HTTP requests felt heavier than it needed to be.
So I rewrote the same idea in Rust:
- No Node.js runtime — single self-contained binary, ~8 MB
- Lower latency — Rust async I/O, concurrent fan-out across engines
- Smaller footprint — negligible memory usage
- Proxy support — HTTP/SOCKS5 proxy via env var, for networks that need it
If Claude Code's search isn't working in your environment, this is for you.
Enterprise & Internal Use
ferris-search is also a good foundation for enterprise internal search scenarios. Since it's a standard MCP server written in Rust, you can fork it and add custom search engines that connect to your internal knowledge bases — Confluence, Notion, internal wikis, code repositories, or proprietary document stores.
Some ideas:
- Add an engine that searches your internal Elasticsearch or OpenSearch cluster
- Integrate with your company's Confluence or GitLab search API
- Connect to a private RAG (Retrieval-Augmented Generation) service
- Route queries to different backends based on query language or topic
With Claude Code as the AI layer and ferris-search as the search backbone, your team gets a local AI coding assistant that can actually find and reference internal documentation — without sending anything to external search engines.
Features
- Multi-engine fan-out — search across multiple engines simultaneously with a single call
- 14 search engines — Bing, DuckDuckGo, Brave, Baidu, CSDN, Juejin, Exa, Firecrawl, Zhihu, LinuxDo, Jina, Tavily, GitHub (repo search), GitHub Code (code search)
- 7 MCP tools —
web_search+ 6 article/content fetchers - No API keys required for most engines (Brave, Exa, Firecrawl, Jina, and Tavily require API keys)
- Single binary — ~8 MB, no runtime dependencies
- Proxy support — HTTP/SOCKS5 proxy via env var
Quick Install
Linux / macOS (one-liner)
curl -fsSL https://raw.githubusercontent.com/lispking/ferris-search/main/install.sh | bash
Or from a local clone:
bash install.sh
The script will:
- Build and install the binary via
cargo install - Register the MCP server with Claude Code (
claude mcp add -s user) if the CLI is found - Install Claude Code skills for ferris-search
Windows (PowerShell)
irm https://raw.githubusercontent.com/lispking/ferris-search/main/install.ps1 | iex
Or from a local clone:
.\install.ps1
> Prerequisite: Rust must be installed before running either script.
Quick Start
Install from source
cargo install --path .
This installs the ferris-search binary to ~/.cargo/bin/ferris-search. Make sure ~/.cargo/bin is in your PATH.
To find the installed binary path:
which ferris-search
# or
echo "$(cargo home 2>/dev/null || echo $HOME/.cargo)/bin/ferris-search"
Claude Desktop / Cursor configuration
{
"mcpServers": {
"ferris-search": {
"command": "/Users//.cargo/bin/ferris-search",
"env": {
"DEFAULT_SEARCH_ENGINE": "bing"
}
}
}
}
Replace the path with the output of which ferris-search.
Claude Code (claude mcp add)
Add for the current project only:
claude mcp add ferris-search $(which ferris-search)
Add globally for all projects (-s user):
claude mcp add -s user ferris-search $(which ferris-search)
With environment variables:
claude mcp add -s user ferris-search $(which ferris-search) \
-e DEFAULT_SEARCH_ENGINE=bing \
-e ALLOWED_SEARCH_ENGINES=bing,duckduckgo,brave
> -s user registers the server in your user-level config (~/.claude.json) so it is available across all projects, not just the current one.
Behind the GFW (proxy setup)
claude mcp add -s user ferris-search $(which ferris-search) \
-e USE_PROXY=true \
-e PROXY_URL=http://127.0.0.1:7890 \
-e DEFAULT_SEARCH_ENGINE=bing
MCP Tools
web_search
Search the web using one or more engines simultaneously.
{
"query": "rust async runtime",
"engines": ["bing", "duckduckgo"],
"limit": 10
}
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | query | string | required | Search query | | engines | string[] | server default | Engines to search (fan-out if multiple) | | limit | number | 10 | Max results per engine (1–50) |
Supported engines: bing, duckduckgo, brave, baidu, csdn, juejin, exa, firecrawl, zhihu, linuxdo, jina, tavily, github, github_code
fetch_web_content
Fetch and extract text content from any public URL.
| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | url | string | required | Public HTTP/HTTPS URL | | max_chars | number | 30000 | Max characters to return |
fetch_github_readme
Fetch the README from a GitHub repository.
| Parameter | Type | Description | |-----------|------|-------------| | url | string | GitHub repository URL |
fetch_csdn_article / fetch_juejin_article / fetch_zhihu_article / fetch_linuxdo_article
Domain-specific fetchers with better content extraction than the generic fetch_web_content.
| Tool | URL Constraint | |------|----------------| | fetch_csdn_article | must contain csdn.net | | fetch_juejin_article | must contain juejin.cn and /post/ | | fetch_zhihu_article | must contain zhihu.com | | fetch_linuxdo_article | must contain linux.do and /topic/ |
Configuration
All configuration is done via environment variables.
| Env Var | Default | Description | |---------|---------|-------------| | DEFAULT_SEARCH_ENGINE | bing | Engine used when engines param is omitted | | ALLOWED_SEARCH_ENGINES | all engines | Comma-separated allow-list | | BRAVE_API_KEY | — | Required for brave engine | | EXA_API_KEY | — | Required for exa engine | | FIRECRAWL_API_KEY | — | Required for firecrawl engine | | JINA_API_KEY | — | Required for jina engine | | TAVILY_API_KEY | — | Required for tavily engine | | GITHUB_TOKEN | — | Optional for github / github_code engines (raises rate limit from 60 to 5000 req/hr) | | USE_PROXY | false | Enable HTTP/SOCKS5 proxy | | PROXY_URL | http://127.0.0.1:7890 | Proxy address | | ENABLE_HTTP_SERVER | false | Enable HTTP/SSE transport alongside stdio | | MODE | stdio | Transport mode: stdio, http, or both | | RUST_LOG | info | Log level: debug, info, warn, error |
Common configurations
Privacy-focused:
claude mcp add -s user ferris-search $(which ferris-search) \
-e DEFAULT_SEARCH_ENGINE=duckduckgo \
-e ALLOWED_SEARCH_ENGINES=duckduckgo,brave
Chinese developer workflow:
claude mcp add -s user ferris-search $(which ferris-search) \
-e DEFAULT_SEARCH_ENGINE=bing \
-e ALLOWED_SEARCH_ENGINES=bing,baidu,csdn,juejin,zhihu
With Exa AI search:
claude mcp add -s user ferris-search $(which ferris-search) \
-e DEFAULT_SEARCH_ENGINE=exa \
-e EXA_API_KEY=exa-xxxx \
-e ALLOWED_SEARCH_ENGINES=exa,bing,duckduckgo
Acknowledgements
Inspired by open-webSearch — this project reimplements the same idea in Rust for performance and portability.
License
Apache-2.0
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: lispking
- Source: lispking/ferris-search
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.