VOOZH about

URL: https://glama.ai/mcp/servers/sweetcornna/free-search-mcp?locale=es-ES

⇱ free-search-mcp by sweetcornna | Glama


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

nickclyde/duckduckgo-mcp-server

βœ—

βœ“

βœ—

βœ—

βœ—

βœ—

βœ—

~

mrkrsl/web-search-mcp

βœ“

βœ“

βœ“

βœ—

βœ—

βœ—

βœ—

~

Aas-ee/open-webSearch

βœ“

βœ“

~

βœ—

βœ—

βœ—

βœ—

~

VincentKaufmann/noapi-google-search-mcp

βœ—

βœ“

βœ“

βœ“

βœ“

βœ—

βœ—

~

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

search(query, engines?, max_results?, use_cache?, max_age_hours?, freshness?, include_domains?, exclude_domains?, category?, include_text?, exclude_text?, format?)

BΓΊsqueda paralela en mΓΊltiples motores fusionada mediante Reciprocal Rank Fusion

research(question, depth?, engines?, fetch?, use_cache?, max_age_hours?, freshness?, include_domains?, exclude_domains?, category?, include_text?, exclude_text?, format?)

Un solo paso: buscar + obtener los N mejores + devolver resumen en Markdown

fetch(url, render?, force_refresh?, max_age_hours?, format?)

Obtener una pΓ‘gina, devolver Markdown en modo lectura (extraΓ­do con trafilatura, con autor/fecha/nombre del sitio)

fetch_batch(urls, render?, format?)

ObtenciΓ³n concurrente de mΓΊltiples URL

read_doc(source, start?, length?, format?)

Analizar PDF / DOCX / HTML / TXT / MD con paginaciΓ³n

cache_search(query, limit?, format?)

BΓΊsqueda FTS5 en pΓ‘ginas obtenidas previamente

engines()

Listar nombres de motores disponibles para search

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

freshness

day / week / month / year

Solo resultados de los ΓΊltimos N

include_domains

["python.org", "djangoproject.com"]

Restringir a estos dominios

exclude_domains

["pinterest.com"]

Eliminar estos

category

news / pdf / github / paper / forum / blog

Atajo de tipo de contenido (paper = arxiv/acm/ieee/…, forum = reddit/HN/SE, etc.)

include_text

"async"

Subcadena requerida en tΓ­tulo/fragmento

exclude_text

"beginner"

Subcadena prohibida

max_age_hours

24

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 chromium

Ejecutar como servidor independiente (transporte stdio):

uv run search-mcp

Ejecutar pruebas en vivo (accede a la web real; configura la variable de entorno):

SEARCH_MCP_TEST_NETWORK=1 uv run pytest -v

Las 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

SEARCH_MCP_DEFAULT_ENGINES

["duckduckgo","mojeek","startpage"]

Lista JSON

SEARCH_MCP_MAX_RESULTS_PER_ENGINE

10

SEARCH_MCP_RATE_LIMIT_PER_MINUTE

30

por motor

SEARCH_MCP_FETCH_RATE_LIMIT_PER_MINUTE

20

bucket compartido de fetch

SEARCH_MCP_CACHE_DIR

~/.cache/search-mcp

SEARCH_MCP_CACHE_TTL_SECONDS

604800

7 dΓ­as

SEARCH_MCP_FETCH_STRATEGY

auto

auto / http / browser

SEARCH_MCP_BROWSER_HEADLESS

true

SEARCH_MCP_BROWSER_POOL_SIZE

2

pΓ‘ginas concurrentes

SEARCH_MCP_MAX_CONTENT_CHARS

50000

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:


Licencia

MIT β€” ver LICENSE.

A
license - permissive license
A
quality
A
maintenance

Maintenance

–Maintainers
–Response time
2wRelease cycle
2Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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