Keenable Web Search

Búsqueda web en vivo y obtención de páginas en markdown limpio a través del índice web de Keenable, sin clave por defecto.

Documentación

MCP

Conecta las APIs de Keenable como herramientas a clientes que soporten MCP

Las herramientas de Keenable también están disponibles como un servidor del Protocolo de Contexto de Modelo, por lo que agentes como Claude Code, Claude Desktop, Cursor y Windsurf pueden llamarlas directamente. Pasa tu clave de API en el encabezado X-API-Key para eliminar el límite de solicitudes por hora y aumentar los límites de tasa — consulta Autenticación y Límites de tasa. Omite el encabezado y el servidor igualmente responde, en el nivel público compartido.

Instalación

Instalación con un clic

Añade Keenable a Cursor o VS Code con un solo clic:

Instalación mediante CLI

La forma más sencilla de configurar el servidor MCP de Keenable para agentes de codificación locales es a través de la CLI de Keenable. Una vez que hayas instalado la CLI, ejecuta lo siguiente para recibir orientación durante la configuración del servidor MCP.

keenable configure-mcp

Claude Code

Añade el servidor MCP de Keenable con la CLI de Claude Code:

claude mcp add keenable \
  --transport http https://api.keenable.ai/mcp \
  --scope user \
  --header "X-API-Key: keen_<your_key>"

Omite la bandera --header para ejecutar en el nivel público.

Codex

Añade lo siguiente a ~/.codex/config.toml

[mcp_servers.keenable]
url = "https://api.keenable.ai/mcp"
http_headers = { "X-API-Key" = "keen_<your_key>" }

Omite la línea http_headers para ejecutar en el nivel público.

Nota

Codex necesita una línea más. Incluye su propia búsqueda web, habilitada por defecto, y sigue recurriendo a ella — por lo que las herramientas aparecen en /mcp pero nunca se llaman a menos que las solicites por nombre. Añade web_search = "disabled" al mismo archivo, encima de la línea [mcp_servers.keenable] — es una clave de nivel superior, y una clave simple escrita bajo un encabezado de tabla pertenece a esa tabla, donde Codex nunca la lee. Consulta Codex para ver el archivo terminado, los otros modos y un fragmento de AGENTS.md.

Otros clientes MCP

Para Cursor y otros clientes que aceptan una URL MCP remota en su archivo de configuración:

{
  "mcpServers": {
    "keenable": {
      "url": "https://api.keenable.ai/mcp",
      "headers": {
        "X-API-Key": "keen_<your_key>"
      }
    }
  }
}

Omite el bloque headers para ejecutar en el nivel público.

Advertencia

Claude Desktop no es uno de estos clientes. Su archivo de configuración solo acepta servidores command locales, por lo que una entrada "url" se ignora sin error y las herramientas nunca aparecen. Usa un conector en su lugar, o el puente local si quieres que se aplique tu clave.

API de OpenAI (API de Respuestas)

Esto es para llamar al servidor MCP desde tu propio código contra la API de OpenAI — diferente de añadir Keenable dentro de la propia aplicación de ChatGPT, que es el listado del Directorio de Plugins. Pásalo como una herramienta mcp remota:

from openai import OpenAI

client = OpenAI()
response = client.responses.create(
    model="gpt-5",
    input="What's new in retrieval-augmented generation this week?",
    tools=[
        {
            "type": "mcp",
            "server_label": "keenable",
            "server_url": "https://api.keenable.ai/mcp",
            "headers": {"X-API-Key": "keen_<your_key>"},
            "require_approval": "never",
        }
    ],
)
print(response.output_text)

Omite la entrada headers para ejecutar en el nivel público.

Nota

La búsqueda y recuperación de Keenable cubren el mismo terreno que las herramientas integradas de un cliente (WebSearch, WebFetch, brave_search, tavily_search). Con ambos conjuntos activos, un agente elige entre ellos de manera inconsistente de una llamada a otra, por lo que la mayoría de las personas desactivan las integradas en la configuración del cliente una vez que Keenable está en su lugar.

Claude (conector remoto)

Claude (Desktop, claude.ai, móvil) se conecta al servidor MCP remoto a través de su interfaz de conector personalizado — no se necesita archivo de configuración. La conexión se realiza desde la nube de Anthropic, por lo que tu servidor solo necesita ser accesible en su URL pública.

Nota

ChatGPT se instala desde el Directorio de Plugins — Keenable está publicado allí, por lo que viene del catálogo y te inicia sesión en tu cuenta de Keenable. Codex puede instalarse desde el mismo listado, pero tiene una ruta config.toml propia.

Keenable es un conector listado en Claude, así que abre **Configuración → Conectores**, encuentra **Keenable**, y no hay nada que pegar.
De lo contrario, añádelo por URL — **Configuración → Conectores → Añadir conector personalizado** — dejando vacíos el ID de Cliente OAuth / Secreto:

```
https://api.keenable.ai/mcp
```
Un conector recién añadido no está activo hasta que lo conectes. Abre **Gestionar conectores**, encuentra **Keenable**, y haz clic en **Conectar** — las herramientas aparecen inmediatamente. La interfaz del conector no tiene campo para un encabezado de solicitud, por lo que se ejecuta en el nivel público; usa el [puente local](#local-bridge-with-an-api-key) si quieres que se aplique tu propia clave. En el compositor, haz clic en **+ → Conectores** y activa **Keenable** para la conversación.

Puente local (con una clave de API)

Cualquier cliente que solo hable stdio local — el archivo de configuración de Claude Desktop es el caso común, ya que su interfaz de conector no tiene campo para un encabezado — necesita un puente para aplicar tu propia clave. @keenable/mcp-server se ejecuta como un subproceso y reenvía al mismo endpoint:

{
  "mcpServers": {
    "keenable": {
      "command": "npx",
      "args": ["-y", "@keenable/mcp-server"],
      "env": {
        "KEENABLE_API_KEY": "keen_<your_key>"
      }
    }
  }
}

Requiere Node.js en la máquina, y el cliente debe reiniciarse después de editar su archivo de configuración (para Claude Desktop, claude_desktop_config.json). Omite el bloque env para ejecutarlo sin clave. El mismo bloque funciona tal cual en el archivo de configuración de cualquier otro cliente solo-stdio, no solo en el de Claude Desktop.

Herramientas disponibles

El servidor MCP expone dos herramientas.

search_web_pages

Busca en la web y devuelve resultados clasificados con URLs, títulos y descripciones.

La consulta de búsqueda. Restringe los resultados a un sitio específico (p. ej. `"techcrunch.com"`). Filtra a páginas adquiridas/indexadas en o después de este punto en el tiempo. Filtra a páginas adquiridas/indexadas en o antes de este punto en el tiempo. Filtra a páginas publicadas en o después de este punto en el tiempo. Filtra a páginas publicadas en o antes de este punto en el tiempo. Busca en el índice tal como estaba en este punto en el tiempo: las páginas adquiridas después quedan excluidas. Acepta una marca de tiempo o una fecha (una fecha se resuelve a `00:00:00` UTC, no al final del día). Consulta [Búsqueda en punto en el tiempo](#point-in-time-search). Longitud máxima, en caracteres, del fragmento devuelto por resultado. Debe estar entre 180 y 10000. Cuando se omite, se usa una longitud de fragmento predeterminada. Número máximo de resultados a devolver. Debe estar entre 1 y 50. Cuando se omite, se devuelven hasta 10 resultados.

Filtros de fecha y hora

acquired_after, acquired_before, published_after y published_before aceptan cada uno una de los siguientes formatos:

  • Fecha en forma RFC 3339 full-date (YYYY-MM-DD) — cubre todo ese día en UTC. En un límite _after se resuelve a 00:00:00 en esa fecha; en un límite _before se resuelve a 23:59:59.999 en esa fecha, por lo que las páginas del día nombrado se conservan en cualquier extremo. Pasa una marca de tiempo en su lugar para cortar en un instante exacto.
  • Marca de tiempo en forma ISO 8601 (YYYY-MM-DDTHH:MM:SS[.sss][±HH:MM]). Cuando no se proporciona un desplazamiento de zona horaria, la zona horaria se interpreta como UTC.
  • Delta relativo (<number><unit>, p. ej. 7d, 30min) — se resuelve al tiempo de solicitud menos el delta, truncado a precisión de minuto, o a query_time menos el delta cuando eso está establecido. Unidades admitidas: min (minutos), h (horas), d (días), mo (meses), y (años).

Valores de ejemplo:

ValorSe resuelve a
2026-01-15 en acquired_after / published_after2026-01-15T00:00:00Z
2026-01-15 en acquired_before / published_before2026-01-15T23:59:59.999Z
2026-01-15T10:30:002026-01-15T10:30:00Z (sin desplazamiento → UTC)
2026-01-15T10:30:00Z2026-01-15T10:30:00Z
2026-01-15T10:30:00.500-05:002026-01-15T15:30:00.500Z
7d7 días antes del tiempo de solicitud, truncado al minuto
30min30 minutos antes del tiempo de solicitud, truncado al minuto

Los deltas relativos pueden combinarse con valores absolutos en los dos límites de una ventana:

{
  "query": "...",
  "published_after": "1y",
  "published_before": "6mo"
}
{
  "query": "...",
  "acquired_after": "2024-01-01",
  "acquired_before": "30d"
}

Por ejemplo, en el tiempo de solicitud 2026-05-18T14:23:45Z, acquired_after: "2h" se resuelve a 2026-05-18T12:23:00Z — un documento adquirido en 12:22:59Z se descarta, uno adquirido en 12:23:00Z se conserva.

Ten en cuenta la diferencia entre una fecha y una marca de tiempo en un límite _before: acquired_before: "2026-05-01" conserva una página adquirida en 2026-05-01T14:31:13Z, mientras que acquired_before: "2026-05-01T00:00:00Z" la descarta. Usa la forma de fecha para significar "hasta ese día inclusive", y la forma de marca de tiempo para cortar a medianoche.

Búsqueda en punto en el tiempo

query_time mueve toda la búsqueda hacia atrás a un instante: una página adquirida después no es un candidato en absoluto, por lo que la respuesta es la que el índice habría dado entonces en lugar de la respuesta de hoy filtrada. Úsala para reproducir una ejecución de agente, para construir un conjunto de evaluación que no se desvíe a medida que el índice crece, o para preguntar qué era conocible antes de un evento.

También re-basa cada delta relativo en esta solicitud. Un delta se resuelve contra el tiempo de solicitud solo cuando query_time está ausente; con él, published_after: "30d" significa treinta días antes de query_time:

{
  "query": "...",
  "query_time": "2026-06-13T00:00:00Z",
  "published_after": "30d"
}

se resuelve a páginas publicadas entre 2026-05-14 y 2026-06-13 — no a los últimos treinta días. Los límites absolutos no se ven afectados.

Un query_time solo de fecha se resuelve a 00:00:00 UTC, que es el extremo opuesto del día en comparación con un límite _before solo de fecha: query_time: "2026-06-13" corta al inicio del 13 de junio, mientras que acquired_before: "2026-06-13" conserva todo el día.

fetch_page_content

Recupera una URL y extrae el contenido como markdown limpio. Por defecto solo se admiten URLs del índice; esto no es un raspador web general. Pasa live=true para recuperar directamente de la fuente, incluyendo URLs que no están indexadas.

La URL a recuperar. Número máximo de caracteres de contenido a devolver. El contenido más largo se trunca. Recupera la página en vivo desde la fuente en lugar de devolver la copia indexada de Keenable. Habilita la recuperación de URLs que no están indexadas. Instrucción de extracción opcional, de máximo 2000 caracteres. Cuando se establece, un LLM lee la página recuperada y el contenido devuelto es solo la salida para esta instrucción en lugar de la página completa. Ejemplo: `List all pricing tiers with their monthly prices`.

Devuelve url, title y content (markdown). Consulta la Referencia de Fetch para la forma de la respuesta.

Metadatos para integradores

Las plataformas que integran las herramientas MCP de Keenable pueden leer el uso de facturación y controlar el comportamiento de las herramientas a través del canal lateral _meta de MCP. _meta viaja junto con el resultado o la solicitud de la herramienta y no es parte del content de la herramienta visible para el modelo, por lo que nada de ello entra en el contexto del agente.

Metadatos de uso (_meta de respuesta)

Cada llamada de herramienta facturada (autenticada) devuelve uso bajo _meta["keenable/usage"], para que puedas atribuir el costo por llamada sin analizar la salida de texto de la herramienta. Las llamadas no autenticadas no se facturan y lo omiten. SKU de facturación para la operación: search.realtime, search.pro, fetch o fetch.live.

Número de operaciones facturadas: siempre `1` para una única llamada de herramienta. Créditos medidos para esta llamada (el precio específico de la organización para la operación). `true` cuando se extrae de créditos comprados; `false` mientras aún se está en la asignación mensual gratuita. Consulta [créditos](/credits).

Ejemplo de resultado de herramienta:

{
  "content": [{ "type": "text", "text": "..." }],
  "_meta": {
    "keenable/usage": { "sku": "search.realtime", "amount": 1, "credits": 1, "paid": true }
  }
}

Anulaciones del operador (solicitud _meta)

Para controlar el comportamiento de la herramienta tú mismo en lugar de dejar que el modelo decida, envía anulaciones bajo _meta["keenable/overrides"] en una solicitud tools/call. Tienen prioridad sobre los argumentos que generó el modelo.

Forzar el modo de búsqueda: `realtime` o `pro`. Anula cualquier `mode` que el modelo haya elegido. Omitir resultados en caché para esta llamada.

Ejemplo de solicitud:

{
  "method": "tools/call",
  "params": {
    "name": "search_web_pages",
    "arguments": { "query": "..." },
    "_meta": { "keenable/overrides": { "mode": "realtime", "skip_cache": true } }
  }
}

Los valores de anulación no válidos o desconocidos se ignoran en lugar de generar un error en la llamada.