Skip to main content

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

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

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

  1. Publish to PyPI first
  2. Go to https://modelscope.cn/mcp/servers/create?template=customize
  3. 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

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)

Source distribution for mcp-ferris-search 0.1.0
File Size Uploaded
mcp_ferris_search-0.1.0.tar.gz 6.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-ferris-search 0.1.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page