Skip to main content
Glama

🔍 Servidor MCP de SearXNG

Búsqueda web que respeta la privacidad para asistentes de IA: usa una instancia de SearXNG controlada por el operador o de confianza con Claude, Cursor y más.

GitHub Stars npm version npm downloads Docker Pulls License: MIT OpenSSF Scorecard OpenSSF Best Practices mcp-searxng MCP server GitHub MCP Registry

Un servidor MCP que integra la API de SearXNG, brindando capacidades de búsqueda web a los asistentes de IA.

✨ Destacado en el Registro MCP de GitHub.

Inicio rápido

Añade a la configuración de tu cliente MCP (por ejemplo, claude_desktop_config.json):

{
  "mcpServers": {
    "searxng": {
      "command": "npx",
      "args": ["-y", "mcp-searxng"],
      "env": {
        "SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
      }
    }
  }
}

Reemplaza YOUR_SEARXNG_INSTANCE_URL con la URL de tu instancia de SearXNG (por ejemplo, https://searxng.example.com). También puedes proporcionar réplicas intercambiables como una lista separada por punto y coma, por ejemplo, https://one.example.com;https://two.example.com.

Para recetas verificadas de Claude Desktop, Claude Code, Codex CLI, Cursor, VS Code, Windsurf, Cline y OpenCode, consulta el libro de cocina de configuraciones de cliente MCP.

Para un método acotado y neutral al cliente de buscar, inspeccionar fuentes, verificar afirmaciones y citar evidencia, consulta el flujo de trabajo de investigación centrado en evidencia.

Para puntos de partida medidos de CPU y memoria del proceso MCP, consulta perfiles de despliegue medidos.

Related MCP server: SearXNG MCP Server

Características

  • Búsqueda web: Consultas generales, de noticias y de artículos con paginación, filtros de rango de tiempo/idioma/búsqueda segura, filtrado por relevancia (min_score) y salida en texto formateado o JSON sin procesar seleccionada por llamada (response_format) o con el valor predeterminado del operador (SEARXNG_DEFAULT_RESPONSE_FORMAT).

  • Conmutación por error y fan-out de instancias: Configura réplicas intercambiables de SearXNG en SEARXNG_URL; las búsquedas fallan en orden por defecto, o consulta todas las réplicas saludables en paralelo y combina los resultados con SEARXNG_FANOUT.

  • Respuestas directas y metadatos: Los resultados de texto muestran respuestas, correcciones, sugerencias e infoboxes de SearXNG antes de la lista de resultados.

  • Sugerencias de búsqueda: Autocompletado de consultas mediante el endpoint /autocompleter de SearXNG.

  • Descubrimiento de capacidades de la instancia: Inspecciona categorías, motores, valores predeterminados, locales y complementos configurados desde /config.

  • Lectura de contenido de URL: Conversión a Markdown consciente del tipo de contenido, incluida la extracción de texto PDF acotada, con paginación, filtrado de secciones, rangos de párrafos y extracción de encabezados.

  • Soporte de solucionador de navegador: Para cada URL no almacenada en caché que pase la validación estática de URL y la verificación previa de tamaño HEAD, opcionalmente adquiere una sesión de navegador de FlareSolverr, Byparr o ambos, y luego reproduce el user-agent devuelto y las cookies con alcance a través del lector de URL acotado. En el modo de doble proveedor, FlareSolverr siempre es el principal y Byparr solo se intenta después de un principal ocupado o no disponible temporalmente. FlareSolverr 3.5.0 y Byparr 2.1.0 fueron verificados el 2026-07-30.

  • Caché inteligente: Tanto los resultados de búsqueda como el contenido de URL se almacenan en caché en memoria con TTL configurable y expulsión de menos utilizados recientemente (LFU), lo que reduce solicitudes redundantes.

  • Protección SSRF: web_url_read bloquea URLs privadas/internas y redirecciones por defecto en todos los modos de transporte.

  • Transporte HTTP: Modo HTTP Streamable opcional del SDK MCP v2 con endurecimiento opcional, limitación de velocidad y compatibilidad sin estado acotada para despliegues sin servidor o escalados horizontalmente. Las solicitudes modernas del 2026-07-28 y los clientes heredados retenidos comparten la misma superficie de herramientas y recursos.

  • Respaldo HTML: Opcionalmente analiza resultados de la página HTML para instancias públicas que rechazan format=json.

  • Modo de herramientas ligeras: Esquemas de herramientas mínimos para modelos locales con ventanas de contexto pequeñas.

  • Soporte de proxy: Proxies HTTP/HTTPS globales o por herramienta para el tráfico de búsqueda y lectura de URL.

Las imágenes verificadas linux/amd64 provienen de manifiestos multiarquitectura ghcr.io/flaresolverr/flaresolverr:v3.5.0@sha256:139dfee1c6f89249c8d665d1333a42e8ec74ec0a86bc6bb1c8461e10d3a66a47 y ghcr.io/thephaseless/byparr:2.1.0@sha256:01a46a2865d9a6db5eb8ead04ec0dd33b8fbe233e8565ae70b50d4cc0af4cfb0. La cancelación del cliente detiene el trabajo local rápidamente, pero un navegador remoto puede continuar hasta su tiempo de espera de proveedor configurado después de que el cliente HTTP se desconecte. Consulta verificación del solucionador de navegador.

¿Por qué mcp-searxng?

A partir del 2026-07-29, la comparación de capacidades a continuación refleja los proyectos oficiales Brave MCP, Exa MCP y Firecrawl MCP. "Paginación" significa un control de página o desplazamiento expuesto. "Autoalojado" significa que el servicio de búsqueda puede ejecutarse bajo tu control. "Gratis / Sin clave API" significa que este servidor MCP no requiere una clave API de un proveedor de búsqueda de pago; aún así operas o seleccionas la instancia de SearXNG subyacente.

Brave MCP

Exa MCP

Firecrawl MCP

mcp-searxng

Búsqueda web

✓

✓

✓

✓

Leer URL

✗

✓

✓

✓

Paginación

✓

✗

✓

✓

Autoalojado

✗

✗

Parcial

✓

Gratis / Sin clave API

✗

✗

✗

✓

La privacidad depende del despliegue de SearXNG. Una instancia controlada por el operador puede evitar confiar en un operador de búsqueda de terceros, mientras que una instancia pública recibe la consulta y puede registrarla. SearXNG y esta integración MCP no proporcionan anonimato por sí mismos.

Cómo funciona

mcp-searxng es un servidor MCP independiente: un proceso Node.js separado al que tu asistente de IA se conecta para la búsqueda web. Consulta una instancia de SearXNG, o una lista separada por punto y coma de réplicas intercambiables de SearXNG, a través de la API JSON HTTP.

No es un complemento de SearXNG: Este proyecto no se puede instalar como un complemento nativo de SearXNG. Apúntalo a cualquier instancia existente de SearXNG, o a una lista de réplicas intercambiables, configurando SEARXNG_URL.

AI Assistant (e.g. Claude)
        │  MCP protocol
        ▼
  mcp-searxng  (this project — Node.js process)
        │  HTTP JSON API  (SEARXNG_URL)
        ▼
  SearXNG instance(s)

Para el despliegue, configuración y solución de problemas de SearXNG, consulta Operación de SearXNG autoalojado con mcp-searxng.

Herramientas

  • searxng_web_search

    • Ejecuta búsquedas web con paginación

    • Entradas:

      • query (cadena): La consulta de búsqueda. Esta cadena se pasa a los servicios de búsqueda externos.

      • pageno (número, opcional): Número de página de búsqueda, comienza en 1 (por defecto 1)

      • time_range (cadena, opcional): Filtra los resultados por rango de tiempo: uno de: "day", "week", "month", "year" (por defecto: ninguno)

      • language (cadena, opcional): Código de idioma para los resultados (p. ej., "en", "fr", "de") o "all" (por defecto: "all")

      • safesearch (enumeración de cadena, opcional): Nivel del filtro de búsqueda segura, uno de "0" (Ninguno), "1" (Moderado) o "2" (Estricto). Los valores numéricos heredados 0, 1 y 2 todavía se aceptan por compatibilidad con versiones anteriores. (por defecto: configuración de la instancia)

      • min_score (número, opcional): Puntuación de relevancia mínima de 0.0 a 1.0. Los resultados por debajo de esta puntuación se filtran.

      • num_results (número, opcional): Número máximo de resultados a devolver, de 1 a 20. SEARXNG_MAX_RESULTS se aplica como límite máximo del operador.

      • categories (cadena, opcional): Categorías de SearXNG separadas por comas (p. ej., "news", "it,science"). Las capacidades en vivo de /config se agregan entre las instancias alcanzables; prefiere searxng_instance_info categories.common para obtener resultados coherentes en múltiples instancias. Los valores conocidos se recortan y normalizan sin distinguir mayúsculas de minúsculas; los valores desconocidos se reenvían recortados para que SearXNG pueda ignorarlos u honrarlos. Si /config no está disponible, los valores se reenvían tal cual con una advertencia. Si se omite, cada instancia usa su valor predeterminado del lado del servidor.

      • engines (cadena, opcional): Nombres de motores de SearXNG separados por comas (p. ej., "google,bing,ddg", "semantic scholar"). Las capacidades en vivo de /config se agregan entre las instancias alcanzables; prefiere searxng_instance_info engines.common.enabled para obtener resultados coherentes en múltiples instancias. Los valores conocidos se recortan y normalizan sin distinguir mayúsculas de minúsculas, incluidos los motores deshabilitados por defecto; los valores desconocidos se reenvían recortados para que SearXNG pueda ignorarlos u honrarlos. Si /config no está disponible, los valores se reenvían tal cual con una advertencia. Si se omite, cada instancia usa su valor predeterminado del lado del servidor.

      • response_format (cadena, opcional): Formato de respuesta, ya sea "text" para una salida formateada legible por el agente o "json" para el JSON crudo de SearXNG con results filtrados/rebanados. Si se omite, se aplica SEARXNG_DEFAULT_RESPONSE_FORMAT; si no está configurado o es inválido, se usa text. Un response_format explícito siempre tiene prioridad.

      • result_detail (cadena, opcional): "full" (el valor predeterminado) conserva los metadatos de SearXNG, advertencias, procedencia, respuestas, infoboxes, correcciones y sugerencias. "compact" devuelve solo el título, la URL y la descripción/fragmento de contenido de cada resultado; el JSON compacto usa exactamente las claves title, url y content. Usa full cuando esas señales de investigación importen.

      • Los clientes que envían explícitamente o autoinyectan response_format=text continúan anulando el valor predeterminado del operador. Si las llamadas omitidas aún devuelven texto después de configurar JSON, inspecciona los argumentos emitidos por el cliente MCP.

    Migración: el texto compacto tiene exactamente tres líneas por resultado y sin anotación de caché ni preámbulo. Actualiza los analizadores de líneas que esperan puntuaciones de relevancia o metadatos de búsqueda para solicitar result_detail="full" (o acepta los registros de tres líneas del formato compacto).

    El formato compacto suprime deliberadamente advertencias, procedencia y cualquier otra señal de búsqueda. El texto completo puede añadir líneas opcionales válidas en orden fijo: puntuación, motores, categoría, fecha de publicación, miniatura, fuente de imagen; los metadatos opcionales inválidos se omiten. Los campos de texto se normalizan a líneas individuales. SEARXNG_MAX_RESULT_CHARS trunca el contenido de los resultados en las respuestas de texto y JSON compactas y completas, incluido el JSON completo para los usuarios existentes que ya configuraron la variable; el texto compacto normaliza los separadores de línea antes de aplicar el límite, mientras que el JSON limita el valor de cadena original.

    Con SEARXNG_LITE_TOOLS=true, el esquema Lite sigue siendo solo de consulta, pero las anulaciones opcionales proporcionadas explícitamente, como response_format y result_detail, todavía se validan y se respetan.

  • searxng_search_suggestions

    • Obtiene sugerencias de autocompletado para refinar las consultas de búsqueda

    • Entradas:

      • query (cadena): Consulta parcial o completa para autocompletar.

      • language (cadena, opcional): Código de idioma para las sugerencias (p. ej., "en", "fr", "de") o "all" (por defecto: "all")

  • searxng_instance_info

    • Descubre categorías agregadas de las instancias de SearXNG configuradas y alcanzables, opcionalmente incluye nombres de motores, e inspecciona valores predeterminados, configuraciones regionales y complementos de la instancia principal alcanzable. Las categorías—y los motores cuando se solicitan—informan los valores common presentes en cada instancia alcanzable y los valores available presentes en al menos una instancia alcanzable.

    • Entradas:

      • includeEngines (booleano, opcional): Incluye los nombres de los motores habilitados en la respuesta. (por defecto: false)

      • includeDisabled (booleano, opcional): Incluye los nombres de los motores deshabilitados cuando includeEngines es true. (por defecto: false)

      • category (cadena, opcional): Filtra categorías y motores a un solo nombre de categoría.

      • refresh (booleano, opcional): Omite la caché del proceso y obtiene datos frescos de /config. (por defecto: false)

  • web_url_read

    • Lee el contenido de una URL como markdown con manejo consciente del tipo de contenido y opciones avanzadas de extracción

    • Contenido legible compatible:

      • HTML (text/html, application/xhtml+xml) se convierte a markdown

      • JSON (application/json, *+json) se imprime de forma legible en un bloque delimitado

      • Texto plano, YAML, TOML, XML y otras respuestas seguras explícitas de text/* se devuelven como texto delimitado legible

      • El texto de PDF (application/pdf) se extrae en un trabajador con límite de recursos para documentos de hasta 500 páginas

      • Los tipos de contenido faltantes o genéricos se leen bajo el límite de tamaño existente; los cuerpos no binarios continúan a través de la ruta de conversión de HTML a markdown por compatibilidad

    • La entrada de PDF y el texto extraído están limitados cada uno al menor de URL_READ_MAX_CONTENT_LENGTH_BYTES y 16 MiB. No se admite OCR, y los PDF escaneados/solo imagen o protegidos con contraseña devuelven una breve explicación.

    • Una respuesta declarada como PDF debe comenzar con la firma %PDF-; un desajuste generalmente indica una página intersticial o de error servida con el tipo de contenido incorrecto.

    • El análisis de PDF tiene un presupuesto de trabajador separado de 30 segundos después de que se descarga el cuerpo de la respuesta. En la ruta directa, la obtención de red y el análisis toman como máximo el presupuesto de obtención configurado más 30 segundos; el tiempo de pre-vuelo y adquisición del solucionador de navegador configurado es adicional.

    • Como máximo dos extracciones de PDF se ejecutan simultáneamente por proceso MCP. No hay cola; las lecturas concurrentes adicionales devuelven un mensaje de ocupado y pueden reintentarse.

    • Otras descargas binarias, multimedia, de archivo y de flujo de octetos se rechazan intencionalmente con una breve pista en lugar de devolver bytes crudos

    • Cuando FLARESOLVERR_URL o BYPARR_URL está configurado, una URL no almacenada en caché se valida y se verifica mediante el pre-vuelo de tamaño HEAD antes de que mcp-searxng intente la adquisición de sesión del navegador. Con ambos configurados, se intenta FlareSolverr primero y Byparr solo se intenta después de una ranura ocupada, fallo de red/tiempo de espera, HTTP 408/429/5xx, o respuesta malformada/sobredimensionada. Los 4xx persistentes del proveedor, la cancelación, el fallo de validación del host de solución y el estado objetivo no-2xx resuelto detienen la cadena. Si cada proveedor configurado está ocupado o no disponible, se ejecuta una obtención directa no almacenada en caché. Cada proveedor intentado recibe la URL objetivo original; el éxito del desafío no está garantizado.

    • En los límites predeterminados, el modo de doble proveedor tiene un máximo aditivo de 150 segundos a través del pre-vuelo HEAD inicial, ambos intentos del solucionador (incluido el período de gracia de respuesta) y la obtención directa final.

    • Entradas:

      • url (cadena): La URL a obtener y procesar

      • startChar (número, opcional): Posición de carácter inicial para la extracción de contenido (por defecto: 0)

      • maxLength (número, opcional): Número máximo de caracteres a devolver

      • section (cadena, opcional): Extrae contenido bajo un encabezado específico (busca texto de encabezado)

      • paragraphRange (cadena, opcional): Devuelve rangos de párrafos específicos (p. ej., '1-5', '3', '10-')

      • readHeadings (booleano, opcional): Devuelve solo una lista de encabezados en lugar del contenido completo

Instalación

Se requiere Node.js 22 o posterior.

npm install -g mcp-searxng
{
  "mcpServers": {
    "searxng": {
      "command": "mcp-searxng",
      "env": {
        "SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
      }
    }
  }
}

Imagen precompilada:

docker pull isokoliuk/mcp-searxng:latest

Las firmas de imagen se pueden verificar con Cosign — consulta SECURITY.md para obtener instrucciones.

{
  "mcpServers": {
    "searxng": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "SEARXNG_URL",
        "isokoliuk/mcp-searxng:latest"
      ],
      "env": {
        "SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
      }
    }
  }
}

Para pasar variables de entorno adicionales, añade -e VAR_NAME a args y la variable a env. Para la integración con el solucionador de navegador, pasa FLARESOLVERR_URL, BYPARR_URL o ambos y haz que los servicios configurados sean alcanzables desde este contenedor. El modo dual tiene un orden fijo de FlareSolverr primero y sin conmutación por error inversa automática. Consulta Controles del lector de URL para conocer el comportamiento completo y el ejemplo de Docker Compose.

Compilar localmente:

docker build -t mcp-searxng:latest -f Dockerfile .

Usa la misma configuración anterior, reemplazando isokoliuk/mcp-searxng:latest con mcp-searxng:latest.

docker-compose.yml:

services:
  mcp-searxng:
    image: isokoliuk/mcp-searxng:latest
    stdin_open: true
    environment:
      - SEARXNG_URL=${SEARXNG_URL:?Set SEARXNG_URL in the environment}
      # Add optional variables as needed — see CONFIGURATION.md

El archivo Compose rastreado es intencionalmente solo STDIO y no publica puertos de red; los clientes MCP lo lanzan con una ruta absoluta al archivo Compose y docker compose run --rm -T, no docker compose up. La bandera -T evita la asignación de pseudo-TTY para que el JSON-RPC de MCP permanezca en la entrada y salida estándar crudas. Compose falla antes del lanzamiento a menos que el cliente MCP proporcione SEARXNG_URL.

Configuración del cliente MCP:

{
  "mcpServers": {
    "searxng": {
      "command": "docker",
      "args": [
        "compose",
        "-f", "/absolute/path/to/docker-compose.yml",
        "run", "--rm", "-T", "mcp-searxng"
      ],
      "env": {
        "SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
      }
    }
  }
}

Si anteriormente usaste el archivo rastreado como un servicio HTTP en el puerto 8080, coloca la configuración HTTP en un docker-compose.override.yml no rastreado:

services:
  mcp-searxng:
    ports:
      - "127.0.0.1:8080:8080"
    environment:
      - MCP_HTTP_PORT=8080
      - MCP_HTTP_HOST=0.0.0.0

Aquí 0.0.0.0 es la dirección de enlace del lado del contenedor; el puerto del lado del host permanece solo de bucle local. Esta anulación no tiene autenticación y es solo una ruta de migración temporal de un solo host. Antes de añadir contenedores co-ubicados o exponer el servicio más allá de la máquina local, sigue la guía de implementación reforzada.

Por defecto, el servidor usa STDIO, lanzado por tu cliente MCP. Para usar HTTP en su lugar, ejecuta mcp-searxng como un proceso independiente con MCP_HTTP_PORT configurado. En este modo sirve el protocolo MCP sobre HTTP y no habla STDIO, por lo que tu cliente se conecta a él por URL en lugar de generarlo.

Iniciar el servidor:

MCP_HTTP_PORT=3000 SEARXNG_URL=http://localhost:8080 mcp-searxng

O con Docker (enlaza a todas las interfaces para que el puerto sea alcanzable desde el host):

docker run --rm -p 3000:3000 \
  --add-host=host.docker.internal:host-gateway \
  -e MCP_HTTP_PORT=3000 -e MCP_HTTP_HOST=0.0.0.0 \
  -e SEARXNG_URL=http://host.docker.internal:8080 \
  isokoliuk/mcp-searxng:latest

El mapeo --add-host permite que el contenedor alcance una instancia de SearXNG en el host a través de host.docker.internal; se resuelve automáticamente en Docker Desktop pero necesita esta bandera en Linux nativo. Apunta SEARXNG_URL a tu instancia real si se ejecuta en otro lugar.

Conecta un cliente MCP compatible con HTTP al endpoint /mcp por URL:

{
  "mcpServers": {
    "searxng-http": {
      "type": "streamable-http",
      "url": "http://localhost:3000/mcp"
    }
  }
}

Soporte de protocolo: HTTP y STDIO sirven el MCP moderno 2026-07-28 y las revisiones heredadas retenidas 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 y 2024-10-07. El HTTP moderno es sin sesión POST /mcp; el HTTP heredado permanece con estado por defecto (POST/GET/DELETE /mcp) o usa el modo sin estado existente solo POST.

Endpoints: POST /mcp moderno; POST/GET/DELETE /mcp heredado en el valor predeterminado con estado, o POST /mcp heredado solo con el modo sin estado; GET /health.

Para clientes HTTP heredados, las sesiones con estado siguen siendo el valor predeterminado. Configura MCP_HTTP_STATELESS=true cuando una implementación no pueda preservar sesiones heredadas en memoria entre solicitudes. El HTTP moderno permanece sin sesión independientemente de esa configuración. Cada POST sin estado crea un servidor y transporte MCP nuevos, ignora cualquier ID de sesión entrante y devuelve JSON negociado o un flujo SSE dentro de ese mismo POST. El modo sin estado es solo POST: GET /mcp y DELETE /mcp devuelven HTTP 405 con Allow: POST, y no se preservan suscripciones entre solicitudes, reanudabilidad ni notificaciones de servidor a cliente.

Las solicitudes sin estado están limitadas por límites de solicitudes en curso globales y por cliente-IP, además de un tiempo de vida de solicitud. Consulta CONFIGURATION.md para conocer los valores predeterminados, las respuestas de sobrecarga y tiempo de espera, la equidad consciente del proxy y el contrato de compatibilidad completo.

Aviso de validación de origen y actualización: Cada Origin presente en /mcp se valida en todos los modos; un Origin ausente sigue siendo válido para clientes que no son navegadores. En modo no endurecido, un MCP_HTTP_ALLOWED_ORIGINS sin establecer tiene como valor predeterminado los orígenes de bucle local HTTP/HTTPS exactos http://127.0.0.1, https://127.0.0.1, http://localhost, https://localhost, http://[::1] y https://[::1], tanto sin puerto como con el MCP_HTTP_PORT configurado. Un MCP_HTTP_ALLOWED_ORIGINS no vacío reemplaza esos valores predeterminados. Las entradas se recortan pero por lo demás son literales; la coincidencia es exacta, con distinción entre mayúsculas y minúsculas, incluidos el esquema y el puerto. Los valores mal formados, sin esquema, con ruta, con barra final o con mayúsculas/minúsculas diferentes no coinciden silenciosamente y deben corregirse. El modo endurecido aún requiere una lista de permitidos explícita y añade autenticación además de la aplicación del encabezado Host. Un Origin presente no válido en /mcp recibe un 403 fijo que no se refleja antes del analizador, la autenticación, la limitación de velocidad o la construcción del transporte. /health está fuera del límite 403 de MCP pero utiliza la lista de permitidos CORS global restringida. Antes de actualizar, las implementaciones existentes de navegador no endurecidas que usan orígenes que no son de bucle local deben establecer MCP_HTTP_ALLOWED_ORIGINS o recibirán un 403 fijo.

Pruébalo:

curl http://localhost:3000/health

El servidor se vincula a 127.0.0.1 de forma predeterminada; establece MCP_HTTP_HOST=0.0.0.0 para implementaciones remotas o en contenedores. Antes de exponerlo en una red, activa el modo endurecido (MCP_HTTP_HARDEN) y consulta CONFIGURATION.md para MCP_HTTP_TRUST_PROXY de modo que la limitación de velocidad y los registros usen la IP de cliente correcta.

Configuración

SEARXNG_URL es la única variable obligatoria: establécelo en la URL de tu instancia de SearXNG (o una lista separada por punto y coma de réplicas intercambiables). Todo lo demás es opcional.

Usa SEARXNG_DEFAULT_RESPONSE_FORMAT para seleccionar text o json cuando las llamadas de búsqueda omitan response_format; los valores explícitos por llamada siguen teniendo prioridad.

Consulta CONFIGURATION.md para obtener la referencia completa de variables de entorno, incluidos autenticación, conmutación por error/difusión, almacenamiento en caché, tiempos de espera, proxies, TLS, transporte HTTP y endurecimiento.

Solución de problemas

Para la configuración de SearXNG autohospedado, la verificación directa y la solución de problemas, consulta Operación de SearXNG autohospedado con mcp-searxng. Si no controlas la instancia, usa la guía separada guía de instancias públicas de SearXNG.

Si las solicitudes HTTPS fallan detrás de un proxy corporativo con inspección TLS y errores de certificado, consulta TLS / CA corporativa.

403 Prohibido desde SearXNG

Es probable que tu instancia de SearXNG tenga deshabilitado el formato JSON. Edita settings.yml (normalmente /etc/searxng/settings.yml):

search:
  formats:
    - html
    - json

Reinicia SearXNG (docker restart searxng) y luego verifica:

curl 'http://localhost:8080/search?q=test&format=json'

Deberías recibir una respuesta JSON. Si no es así, confirma que el archivo está montado correctamente y que la sangría YAML es válida.

Consulta también: documentación de ajustes de SearXNG · discusión

¿No puedes activar JSON? (respaldo HTML)

Si debes usar una instancia pública que no controlas y rechaza format=json (el 403 anterior), establece la marca de aceptación explícita en lugar de editar el servidor:

Antes de activarla, revisa la política del operador público y la guía de uso de instancias públicas.

{
  "SEARXNG_HTML_FALLBACK": "true"
}

Una búsqueda que recibe un 403/404 o una respuesta que no es JSON se reintenta automáticamente sin format=json y se analiza desde la página de resultados HTML normal.

  • En caso de éxito: obtienes resultados normales (título, URL, fragmento). Se marcan como sourceFormat: "html" en modo JSON, y el modo texto añade la línea "Nota: Resultados analizados desde el respaldo HTML de SearXNG; los metadatos son limitados." Las puntuaciones de relevancia y los nombres de motores no están disponibles desde HTML.

  • En caso de fallo: el análisis es de máximo esfuerzo y varía según el tema/versión de la instancia, por lo que algunos resultados pueden omitirse o ser escasos. Si la propia página HTML también falla (aún bloqueada, limitada por velocidad (429), autenticación (401) o 5xx), se muestra el error del intento de respaldo, de modo que la búsqueda nunca devuelve resultados vacíos silenciosamente. El respaldo solo se activa con 403/404/no JSON, nunca con errores de autenticación o red.

Activar JSON en una instancia que controlas (arriba) sigue siendo la configuración recomendada: el respaldo es una ayuda de compatibilidad, no un reemplazo.

Contribuciones

Consulta CONTRIBUTING.md

Licencia

MIT — consulta LICENSE para más detalles.

Available Tools

2 tools
web_url_readA
Read-only

Fetches a URL and returns its text content converted to markdown. Three modes: (1) Full content — omit filtering params; use startChar/maxLength to paginate large pages. (2) Section extraction — set section to return content under a specific heading. (3) Headings only — set readHeadings: true to list all headings (mutually exclusive with other filtering params). Returns an error string if the URL is unreachable or content cannot be extracted. Use after searxng_web_search to read the full content of individual result URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL
startCharNoStarting character position for content extraction (default: 0)
maxLengthNoMaximum number of characters to return
sectionNoExtract content under a specific heading (searches for heading text)
paragraphRangeNoReturn specific paragraph ranges (e.g., '1-5', '3', '10-')
readHeadingsNoReturn only a list of headings instead of full content

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint and openWorldHint. Description adds behavioral details: three modes, error handling (returns error string if unreachable), and mutual exclusion. It's transparent about what the tool does but doesn't cover all edge cases (e.g., combining multiple filtering params other than readHeadings).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single but well-structured paragraph that enumerates modes clearly. Every sentence adds value with no redundancy. Front-loaded with main purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers main functionality, modes, error handling, and relation to sibling tool. No output schema, but return type (text/markdown) is implied. Minor gap: doesn't specify behavior when multiple filtering params are combined beyond readHeadings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are documented. The description adds significant meaning by grouping parameters into modes and explaining relationships (e.g., omit filtering for full content, set section for extraction, readHeadings for headings). It clarifies mutex conditions beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a URL and converts content to markdown, with three distinct modes. It distinguishes from sibling tools (search tools) by specifying it's for reading individual URLs after a search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use after searxng_web_search to read full content of result URLs. Describes three modes and their parameter usage, including mutual exclusivity of readHeadings. Provides guidance on pagination with startChar/maxLength.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.4
    • Changedsearxng_web_search1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"The search query. This is the main input for the web search"New value: +"The search query string. This is the required parameter name — use exactly `query`, not `prompt` or `q`."

TDQS

A4.2/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have completely distinct purposes: searxng_web_search performs web searches, while web_url_read fetches and extracts content from URLs. There is no overlap or ambiguity between them.

Naming Consistency4/5

Both tools use snake_case and are descriptive, but the naming pattern differs: searxng_web_search includes the service prefix, while web_url_read does not. The verb-noun order is also inconsistent (verb-noun vs noun-verb). Overall, still clear and predictable.

Tool Count3/5

With only 2 tools, the set feels minimal but adequate for a basic web search and content retrieval use case. It does not overcomplicate, though it may leave room for additional utility tools.

Completeness4/5

The tools cover the core workflow: search the web and read full content of results. Minor gaps include advanced search filters (e.g., site, filetype) or management features, but the essential functionality is present.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that integrates with the SearXNG API to provide comprehensive web search capabilities with features like time filtering, language selection, and safe search. It also enables users to fetch and convert web content from specific URLs into markdown format.
    2
    16 npm
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that integrates the SearXNG API for web search and URL content extraction with advanced features like pagination, caching, and proxy support.
    4
    13,388 npm
    2
    MIT