MCP Ferris Search
A blazing-fast MCP (Model Context Protocol) server for multi-engine web search, written in Python.
This is a Python implementation inspired by the original ferris-search Rust project.
Features
- Multi-engine fan-out — search across multiple engines simultaneously with a single call
- 9 search engines — Bing, DuckDuckGo, Brave, Baidu, CSDN, Juejin, Zhihu, GitHub, GitHub Code
- 7 MCP tools —
web_search+ 6 content fetchers - No API keys required for most engines (Brave requires API key)
- Proxy support — HTTP/SOCKS5 proxy via environment variables
Installation
From PyPI (recommended)
pip install mcp-ferris-search
Using uvx
uvx mcp-ferris-search
From source
git clone https://github.com/your-username/mcp-ferris-search.git
cd mcp-ferris-search
pip install -e .
Configuration
Claude Desktop / Cursor
Add to your MCP settings:
{
"mcpServers": {
"ferris-search": {
"command": "uvx",
"args": ["mcp-ferris-search"],
"env": {
"DEFAULT_SEARCH_ENGINE": "bing"
}
}
}
}
Environment Variables
| Variable | Default | Description |
|---|---|---|
DEFAULT_SEARCH_ENGINE |
bing |
Default engine when engines param is omitted |
ALLOWED_SEARCH_ENGINES |
all engines | Comma-separated allow-list |
BRAVE_API_KEY |
— | Required for Brave search |
GITHUB_TOKEN |
— | Optional, raises GitHub API rate limit |
USE_PROXY |
false |
Enable HTTP/SOCKS5 proxy |
PROXY_URL |
http://127.0.0.1:7890 |
Proxy address |
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 |
limit |
number | 10 | Max results per engine (1–50) |
Supported engines: bing, duckduckgo, brave, baidu, csdn, juejin, zhihu, 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
Domain-specific fetchers with better content extraction.
| 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 |
Development
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run with MCP Inspector for debugging
mcp dev src/mcp_ferris_search/server.py
Publishing to PyPI
# Build
python -m build
# Upload
python -m twine upload dist/*
Deploying to ModelScope MCP Hub
- Publish to PyPI first
- Go to https://modelscope.cn/mcp/servers/create?template=customize
- Fill in the form:
- Name: Ferris Search
- Source: PyPI package
mcp-ferris-search - Hosting Type: 可托管部署 (Hosted)
- Command:
uvx mcp-ferris-search
License
Apache-2.0
Acknowledgements
- Inspired by ferris-search (Rust version)
- Built with FastMCP and Model Context Protocol
Metadata
Release files for mcp-ferris-search 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_ferris_search-0.1.0.tar.gz | 6.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_ferris_search-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.3 kB
Release files / mcp_ferris_search-0.1.0.tar.gz
| Download URL | mcp_ferris_search-0.1.0.tar.gz |
|---|---|
| Size | 6.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
08dd98058aaa03e1ffb0d100d6aa298ed5dd823899c172078db8262b6d3ffa39
|
|
BLAKE2b-256 checksum How to use checksums |
772bf1282119857244f1fb1c27c994bd64003e61eba3d83aa50763568b98a15a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.2
|
Release files / mcp_ferris_search-0.1.0-py3-none-any.whl
| Download URL | mcp_ferris_search-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c87934c71699fa6da72e906c79bd255661af15bceefa987793cb78525927dc6b
|
|
BLAKE2b-256 checksum How to use checksums |
3d19257533effd57067a09feee5fbde314b8a519e330f663f5a60da2e8616145
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.2
|