free-search-mcp
π License
π Python
π MCP
Ein Local-First-MCP-Server ohne API-Key (Model Context Protocol), der jedem LLM (Claude, GPT, lokales Ollama, β¦) die FΓ€higkeit verleiht, das Web zu durchsuchen, Seiten abzurufen und zu bereinigen sowie Dokumente zu lesen β ohne dass Sie sich fΓΌr eine einzige Such-API registrieren mΓΌssen.
Er bΓΌndelt die besten Ideen einer Handvoll Open-Source-MCPs in einem Python-Paket und ergΓ€nzt die LLM-Ergonomie und ZuverlΓ€ssigkeit, die bei den jeweiligen Projekten fehlten.
research("how does reciprocal rank fusion work", depth=3)
β
# Research brief: how does reciprocal rank fusion work
_engines: duckduckgo, mojeek, startpage Β· sources: 3 Β· ~3,400 tokens_
## Sources
- [1] Reciprocal rank fusion | Elasticsearch Reference β <https://β¦>
- [2] Hybrid Search Scoring (RRF) | Microsoft Learn β <https://β¦>
- [3] RRF explained in 4 mins β Medium β <https://β¦>
## Documents
β¦full Markdown bodies of each page, ready for the LLM to readβ¦Ein Tool-Aufruf. Drei Quellen. Kein API-Key. Keine OPENAI_API_KEY-fΓΌr-Suche-Abzocke.
Warum gibt es dieses Projekt?
Bestehende Such-MCPs erledigen jeweils eine Sache gut, aber meistens mΓΆchte man alles davon:
Multi-Engine | Kein API-Key | Intelligenter Fallback | PDF/DOCX | FTS5-Cache | Filter | Trafilatura | LLM-optimiert | |
| β | β | β | β | β | β | β | ~ |
| β | β | β | β | β | β | β | ~ |
| β | β | ~ | β | β | β | β | ~ |
| β | β | β | β | β | β | β | ~ |
free-search-mcp | β | β | β | β | β | β | β | β |
"LLM-optimiert" bedeutet hier: Markdown-fokussierte Ausgabe, Token-SchΓ€tzungen, intelligentes KΓΌrzen an Absatzgrenzen, Docstrings fΓΌr "Best for / Not for / Returns / Common mistakes", die das Modell nutzt, um das richtige Tool auszuwΓ€hlen, hilfreiche Fehlermeldungen, MCP-Prompts und Ressourcenvorlagen sowie ein One-Shot-research(), das SucheβAbrufβAbrufβAbruf in einem einzigen Durchgang zusammenfasst.
"Trafilatura" bedeutet, dass wir Hauptinhalte mit trafilatura extrahieren β dem Gewinner des Bevendorff 2023 ROUGE-Benchmarks (~0,85 gegenΓΌber ~0,55 bei naivem Entfernen von Boilerplate). Jede abgerufene Seite liefert zudem kostenlos author, published_date und sitename.
"Filter" bedeutet, dass Suche/Recherche freshness, include_domains, exclude_domains, category (news/pdf/github/paper/forum/blog), include_text und exclude_text akzeptieren.
Related MCP server: TOOL4LM
Tools
Tool | Beschreibung |
| Parallele Multi-Engine-Suche, zusammengefΓΌhrt via Reciprocal Rank Fusion |
| One-Shot: Suche + Abruf der Top N + RΓΌckgabe einer Markdown-Zusammenfassung |
| Seite abrufen, RΓΌckgabe im Reader-Modus als Markdown (trafilatura-extrahiert, mit Autor/Datum/Sitename) |
| Gleichzeitiger Abruf mehrerer URLs |
| PDF / DOCX / HTML / TXT / MD mit Paginierung parsen |
| FTS5-Suche ΓΌber zuvor abgerufene Seiten |
| Liste der fΓΌr |
ZusΓ€tzlich 2 MCP-Prompts (Research thoroughly, Fact-check claim) und eine Ressourcenvorlage (cache://page/{url}), um zwischengespeicherte Seiten ohne erneuten Abruf wieder in den Kontext zu ziehen.
Filter (Suche / Recherche)
Parameter | Werte | Effekt |
|
| Nur Ergebnisse der letzten N |
|
| Auf diese Domains beschrΓ€nken |
|
| Diese ausschlieΓen |
|
| Content-Type-AbkΓΌrzung (paper = arxiv/acm/ieee/β¦, forum = reddit/HN/SE, etc.) |
|
| Teilstring in Titel/Snippet erforderlich |
|
| Teilstring verboten |
|
| Γberschreibt den standardmΓ€Γigen 7-Tage-Cache-TTL fΓΌr diesen Aufruf |
Alle Tools verwenden standardmΓ€Γig format="markdown" β lesbar, ca. 40 % weniger Token als JSON, mit Herkunftsnachweis und einem Token-Budget-Header. Verwenden Sie format="json" fΓΌr strukturierten Zugriff.
Tool-Annotationen
Jedes Tool enthΓ€lt korrekte readOnlyHint-, idempotentHint- und openWorldHint-Annotationen, damit MCP-Clients diese kennzeichnen und erweiterte Aktionen einschrΓ€nken kΓΆnnen.
Engines
Standard-Set (alle zuverlΓ€ssig, keine Captchas bei wiederholten Aufrufen):
duckduckgo, mojeek, startpage.
Optional (gelegentliche Herausforderungen fΓΌr Headless-Clients):
brave, bing, baidu.
Brave/Bing/Baidu blockieren Headless-Browser nach einigen Aufrufen (PoW-CAPTCHAs, "Etwas ist schiefgelaufen"-Seiten, Redirect-Wrapper). Verwenden Sie
engines=["brave"]usw. nur, wenn die Standardeinstellungen nicht finden, was Sie benΓΆtigen.
Installation
git clone https://github.com/ymylive/free-search-mcp.git
cd free-search-mcp
uv sync
uv run playwright install chromiumAusfΓΌhrung als eigenstΓ€ndiger Server (stdio-Transport):
uv run search-mcpLive-Tests ausfΓΌhren (greift auf das echte Web zu β Umgebungsvariable setzen):
SEARCH_MCP_TEST_NETWORK=1 uv run pytest -vOffline-Tests laufen standardmΓ€Γig und greifen nicht auf das Netzwerk zu.
Einbindung in Claude Desktop
FΓΌgen Sie dies zu ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) oder dem entsprechenden Pfad auf Ihrer Plattform hinzu:
{
"mcpServers": {
"search": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/free-search-mcp", "run", "search-mcp"]
}
}
}Starten Sie Claude Desktop neu. Die sieben oben genannten Tools erscheinen in der Tool-Leiste.
Einbindung in andere Clients
Der Server spricht einfaches MCP ΓΌber stdio. Alles, was MCP unterstΓΌtzt, funktioniert:
Claude Code (
claude mcp add search uv --directory /β¦/free-search-mcp run search-mcp)Cursor / Continue / Cline (verwenden Sie den JSON-Schnipsel oben)
Eigene Python / TypeScript-Clients ΓΌber das offizielle MCP-SDK
Konfiguration
Alle Einstellungen kΓΆnnen durch Umgebungsvariablen mit dem PrΓ€fix SEARCH_MCP_ ΓΌberschrieben werden:
Variable | Standard | Bedeutung |
|
| JSON-Liste |
|
| |
|
| pro Engine |
|
| geteilter |
|
| |
|
| 7 Tage |
|
|
|
|
| |
|
| gleichzeitige Seiten |
|
| KΓΌrzung pro Ergebnis |
Architektur
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FastMCP server (stdio) β
β tools: search / research / fetch / fetch_batch / β
β read_doc / cache_search / engines β
ββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββΌβββββββββββββ ββββββββββββββββββββββββββ
β aggregator β β fetcher β
β - parallel engines β β - httpx fast path β
β - reciprocal rank β β - playwright fallback β
β fusion β β - markdownify β
β - search cache (FTS5) β β - page cache (FTS5) β
ββββββ¬βββββββββββββββββββββ ββββββββββββββ¬ββββββββββββ
β β
ββββββΌββββββββββββββββββ ββββββββββββββββΌββββββββββββββ
β engines/ β β browser pool β
β duckduckgo.py β β - persistent context β
β mojeek.py β β - stealth init script β
β startpage.py β β - shared cookies β
β brave.py (opt) β β - semaphore-bounded pagesβ
β bing.py (opt) β ββββββββββββββββββββββββββββββ
β baidu.py (opt) β
ββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββ ββββββββββββββββββββ
β documents/ β β ratelimit β
β pypdf, python-docx, β β token bucket β
β markdownify β β per engine β
ββββββββββββββββββββββββββββββ ββββββββββββββββββββ
ββββββββββββββββββββββββββββββ ββββββββββββββββββββ
β formatting β β research β
β token estimate β β composed β
β smart truncation β β workflow β
β markdown renderers β β β
ββββββββββββββββββββββββββββββ ββββββββββββββββββββEngine-Adapter-Muster
Jede Engine in src/search_mcp/engines/ implementiert:
class Engine:
name: str
needs_browser: bool # Force Playwright?
wait_selector: str | None # CSS to wait for in browser mode
def build_url(self, query: str, max_results: int) -> str: ...
def parse(self, html: str) -> list[SearchResult]: ...Die Basisklasse ΓΌbernimmt den Transport (httpx β Playwright-Fallback), das Rate-Limiting und den Fall, dass HTTP statt Ergebnissen eine Captcha-Seite zurΓΌckgibt (automatische Wiederholung ΓΌber den Browser).
Credits
Dieses Projekt basiert auf der Arbeit von:
mrkrsl/web-search-mcpβ intelligente httpx-dann-Playwright-Abrufstrategie, Multi-Engine-Fallback-KetteAas-ee/open-webSearchβ Multi-Engine-Breite (Bing/DDG/Baidu/Brave/Startpage)VincentKaufmann/noapi-google-search-mcpβ Anti-Erkennungs-Muster (navigator.webdriver, UA, Cookies), SQLite-FTS5-Cache-Idee, Multi-Formatread_documentnickclyde/duckduckgo-mcp-serverβ Rate-Limiting pro Engine, LLM-freundliche InhaltsbereinigungMojeek β unabhΓ€ngiger Suchindex, der nicht nach User-Agent blockiert
Lizenz
MIT β siehe LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Appeared in Searches
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sweetcornna/free-search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
