free-search-mcp
π License
π Python
π MCP
Un servidor del Protocolo de Contexto de Modelo (MCP) local y sin necesidad de clave API que ofrece a cualquier LLM (Claude, GPT, Ollama local, β¦) la capacidad de buscar en la web, obtener y limpiar pΓ‘ginas, y leer documentos, sin que tengas que registrarte en ninguna API de bΓΊsqueda.
ReΓΊne las mejores ideas de varios MCP de cΓ³digo abierto en un ΓΊnico paquete de Python y aΓ±ade la ergonomΓa para LLM y la fiabilidad que a cada uno de ellos les faltaba.
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β¦Una llamada de herramienta. Tres fuentes. Sin clave API. Sin el chantaje de OPENAI_API_KEY-pero-para-bΓΊsqueda.
Por quΓ© existe esto
Los MCP de bΓΊsqueda existentes hacen bien una cosa, pero normalmente quieres todo esto:
Multi-motor | Sin clave API | Alternativa inteligente | PDF/DOCX | CachΓ© FTS5 | Filtros | Trafilatura | Optimizado para LLM | |
| β | β | β | β | β | β | β | ~ |
| β | β | β | β | β | β | β | ~ |
| β | β | ~ | β | β | β | β | ~ |
| β | β | β | β | β | β | β | ~ |
free-search-mcp | β | β | β | β | β | β | β | β |
"Optimizado para LLM" significa aquΓ: salida centrada en Markdown, estimaciones de tokens, truncamiento inteligente en los lΓmites de los pΓ‘rrafos, docstrings de "Mejor para / No es para / Devuelve / Errores comunes" que el modelo utiliza para elegir la herramienta correcta, sugerencias de error accionables, prompts de MCP y plantillas de recursos, y una funciΓ³n research() de un solo paso que colapsa bΓΊsquedaβobtenciΓ³nβobtenciΓ³nβobtenciΓ³n en un solo turno.
"Trafilatura" significa que extraemos el contenido principal usando trafilatura, ganador del benchmark ROUGE de Bevendorff 2023 (~0.85 frente a ~0.55 para la eliminaciΓ³n ingenua de cΓ³digo repetitivo). Cada pΓ‘gina obtenida tambiΓ©n devuelve author, published_date y sitename de forma gratuita.
"Filtros" significa que la bΓΊsqueda/investigaciΓ³n acepta freshness, include_domains, exclude_domains, category (news/pdf/github/paper/forum/blog), include_text, exclude_text.
Related MCP server: TOOL4LM
Herramientas
Herramienta | DescripciΓ³n |
| BΓΊsqueda paralela en mΓΊltiples motores fusionada mediante Reciprocal Rank Fusion |
| Un solo paso: buscar + obtener los N mejores + devolver resumen en Markdown |
| Obtener una pΓ‘gina, devolver Markdown en modo lectura (extraΓdo con trafilatura, con autor/fecha/nombre del sitio) |
| ObtenciΓ³n concurrente de mΓΊltiples URL |
| Analizar PDF / DOCX / HTML / TXT / MD con paginaciΓ³n |
| BΓΊsqueda FTS5 en pΓ‘ginas obtenidas previamente |
| Listar nombres de motores disponibles para |
AdemΓ‘s de 2 prompts de MCP (Research thoroughly, Fact-check claim) y una plantilla de recurso (cache://page/{url}) para arrastrar pΓ‘ginas cacheadas de vuelta al contexto sin volver a obtenerlas.
Filtros (search / research)
ParΓ‘metro | Valores | Efecto |
|
| Solo resultados de los ΓΊltimos N |
|
| Restringir a estos dominios |
|
| Eliminar estos |
|
| Atajo de tipo de contenido (paper = arxiv/acm/ieee/β¦, forum = reddit/HN/SE, etc.) |
|
| Subcadena requerida en tΓtulo/fragmento |
|
| Subcadena prohibida |
|
| Sobrescribir el TTL de cachΓ© predeterminado de 7 dΓas en esta llamada |
Todas las herramientas usan por defecto format="markdown": legible, ~40% menos tokens que JSON, con procedencia y un encabezado de presupuesto de tokens. Pasa format="json" para acceso estructurado.
Anotaciones de herramientas
Cada herramienta incluye las anotaciones correctas readOnlyHint, idempotentHint y openWorldHint para que los clientes MCP puedan etiquetarlas y controlar acciones elevadas.
Motores
Conjunto predeterminado (todos fiables, sin captchas durante llamadas repetidas):
duckduckgo, mojeek, startpage.
Opcionales (desafΓos intermitentes para clientes headless):
brave, bing, baidu.
Brave/Bing/Baidu bloquean navegadores headless despuΓ©s de un puΓ±ado de llamadas (CAPTCHAs PoW, pΓ‘ginas de "algo saliΓ³ mal", envoltorios de redirecciΓ³n). Pasa
engines=["brave"]etc. solo cuando los predeterminados no encuentren lo que necesitas.
InstalaciΓ³n
git clone https://github.com/ymylive/free-search-mcp.git
cd free-search-mcp
uv sync
uv run playwright install chromiumEjecutar como servidor independiente (transporte stdio):
uv run search-mcpEjecutar pruebas en vivo (accede a la web real; configura la variable de entorno):
SEARCH_MCP_TEST_NETWORK=1 uv run pytest -vLas pruebas offline se ejecutan por defecto y no tocan la red.
Conectar a Claude Desktop
AΓ±ade esto a ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o el equivalente en tu plataforma:
{
"mcpServers": {
"search": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/free-search-mcp", "run", "search-mcp"]
}
}
}Reinicia Claude Desktop. Las siete herramientas anteriores aparecerΓ‘n en el cajΓ³n de herramientas.
Conectar a otros clientes
El servidor habla MCP estΓ‘ndar a travΓ©s de stdio. Todo lo que soporte MCP funciona:
Claude Code (
claude mcp add search uv --directory /β¦/free-search-mcp run search-mcp)Cursor / Continue / Cline (usa el fragmento JSON anterior)
Clientes personalizados de Python / TypeScript a travΓ©s del SDK oficial de MCP
ConfiguraciΓ³n
Todos los ajustes pueden ser sobrescritos por variables de entorno con el prefijo SEARCH_MCP_:
Var | Predeterminado | Significado |
|
| Lista JSON |
|
| |
|
| por motor |
|
| bucket compartido de |
|
| |
|
| 7 dΓas |
|
|
|
|
| |
|
| pΓ‘ginas concurrentes |
|
| truncamiento por resultado |
Arquitectura
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 β β β
ββββββββββββββββββββββββββββββ ββββββββββββββββββββPatrΓ³n de adaptador de motor
Cada motor en src/search_mcp/engines/ implementa:
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]: ...La clase base maneja el transporte (httpx β alternativa Playwright), la limitaciΓ³n de tasa y el caso en que HTTP devuelve un shell de captcha en lugar de resultados (reintentos automΓ‘ticos a travΓ©s del navegador).
CrΓ©ditos
Este proyecto se apoya en los hombros de:
mrkrsl/web-search-mcpβ estrategia de obtenciΓ³n inteligente httpx-luego-Playwright, cadena de respaldo multi-motorAas-ee/open-webSearchβ amplitud multi-motor (Bing/DDG/Baidu/Brave/Startpage)VincentKaufmann/noapi-google-search-mcpβ patrones anti-detecciΓ³n (navigator.webdriver, UA, cookies), idea de cachΓ© SQLite FTS5,read_documentmultiformatonickclyde/duckduckgo-mcp-serverβ limitaciΓ³n de tasa por motor, limpieza de contenido amigable para LLMMojeek β Γndice de bΓΊsqueda independiente que no bloquea por User-Agent
Licencia
MIT β ver 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
