Añade búsqueda web a Claude Code, Cursor y Codex con un solo servidor MCP

Un servidor MCP remoto le da a un agente de programación 15 tools: búsqueda web, páginas convertidas a markdown, mapas, Amazon, transcripciones de YouTube. Configuración para tres clientes, probada.

Un agente de programación que no puede leer la web adivina versiones de librerías e inventa flags de las APIs. La solución no es una tool a medida para cada proyecto: es un único servidor MCP remoto, añadido una vez por cliente, al que el agente puede llamar para buscar y para leer páginas.

FastAF tiene uno en https://api.fastaf.co/mcp (Streamable HTTP, stateless, spec 2026-07-28), autenticado con la misma clave Bearer que la API REST. Abajo tienes la configuración para tres clientes, el protocolo en crudo y lo que cuesta una sesión. Todas las llamadas se hicieron el 19 de octubre de 2026.

¿Qué obtiene el agente del servidor?

tools/list devuelve 15 tools: scrape_page, search_web, search_places, search_amazon, search_news, search_shopping, get_trends, search_scholar, search_jobs, ask_google_ai, search_walmart, search_x, search_youtube, youtube_transcript, get_linkedin_profile. Todas están marcadas con readOnlyHint: true y tienen un esquema de entrada estricto con una descripción en cada parámetro, así que el modelo sabe qué puede pasar.

Los costes son los mismos que en REST: search_web cuesta 5 créditos, scrape_page 1 (5 con render_js: true), search_amazon y youtube_transcript 1, get_linkedin_profile 60. La lista completa está en las páginas de las APIs y en la documentación de MCP.

Primero pon la clave en una variable de entorno, para que nunca acabe en un archivo de configuración que podrías commitear:

export FASTAF_API_KEY="..."   # en ~/.zshrc o ~/.bashrc

¿Cómo se añade a Claude Code?

Según la documentación de MCP de Claude Code (code.claude.com/docs/en/mcp, consultada el 19 de octubre de 2026), los servidores remotos usan --transport http y una cabecera:

claude mcp add --transport http fastaf https://api.fastaf.co/mcp \
  --header "Authorization: Bearer $FASTAF_API_KEY"

Tu shell expande la variable, así que la clave acaba guardada en ~/.claude.json. Para compartir el servidor con un equipo, usa un .mcp.json de proyecto: Claude Code expande ${VAR} dentro de headers, de modo que el archivo no contiene ningún secreto.

{
  "mcpServers": {
    "fastaf": {
      "type": "http",
      "url": "https://api.fastaf.co/mcp",
      "headers": { "Authorization": "Bearer ${FASTAF_API_KEY}" }
    }
  }
}

claude mcp list muestra si se ha conectado. Ejecutamos exactamente este archivo con Claude Code 2.1.197 en modo headless; el modelo recibió el JSON de la tool (text, truncated, total_chars, credits_used, credits_remaining).

¿Cómo se añade a Cursor?

La documentación de Cursor (cursor.com/docs/context/mcp, consultada el 19 de octubre de 2026) lee ~/.cursor/mcp.json a nivel global o .cursor/mcp.json por proyecto, y resuelve ${env:NAME} en url y headers:

{
  "mcpServers": {
    "fastaf": {
      "url": "https://api.fastaf.co/mcp",
      "headers": { "Authorization": "Bearer ${env:FASTAF_API_KEY}" }
    }
  }
}

Para este post no ejecutamos Cursor; la configuración sigue su documentación.

¿Cómo se añade a Codex CLI?

La documentación de MCP de Codex (developers.openai.com/codex/mcp, consultada el 19 de octubre de 2026) usa bearer_token_env_var, que nombra la variable en lugar de contener el token. En ~/.codex/config.toml:

[mcp_servers.fastaf]
url = "https://api.fastaf.co/mcp"
bearer_token_env_var = "FASTAF_API_KEY"

O bien codex mcp add fastaf --url https://api.fastaf.co/mcp --bearer-token-env-var FASTAF_API_KEY (flag presente en codex-cli 0.159.2). codex mcp list, o /mcp en la TUI, lo muestra. Una ejecución de codex exec con esta configuración llamó a search_web y devolvió tres resultados por 5 créditos.

¿Cómo es una llamada MCP en crudo?

La spec 2026-07-28 es stateless: no hay handshake, e initialize devuelve -32601 Method not found. Cada solicitud lleva la versión en una cabecera y en _meta, más una cabecera Mcp-Method (sin ella el servidor responde -32020, cabeceras y cuerpo no coinciden):

curl -s https://api.fastaf.co/mcp \
  -H "Authorization: Bearer $FASTAF_API_KEY" \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2026-07-28" \
  -H "Mcp-Method: tools/call" -H "Mcp-Name: search_web" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{
       "name":"search_web","arguments":{"query":"python 3.14 free-threaded","results":3},
       "_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28",
                "io.modelcontextprotocol/clientCapabilities":{}}}}'

Salida real, recortada:

{"results":[
  {"title":"Python support for free threading ...",
   "url":"https://docs.python.org/3/howto/free-threading-python.html","position":1},
  {"title":"Python Free-Threading Guide","url":"https://py-free-threading.github.io/","position":3}],
 "credits_used":5,"credits_remaining":937}

La misma llamada con scrape_page sobre esa URL y max_chars: 4000 devolvió "truncated":true,"total_chars":20229,"credits_used":1.

¿Por qué markdown con un tope y no HTML en bruto?

El contexto es el presupuesto de verdad. La página “What’s new” de Python 3.14 son 554.786 bytes de HTML descargados con curl. scrape_page la convirtió en 266.828 caracteres de markdown y devolvió los primeros 12.000 (el max_chars por defecto, ajustable de 1.000 a 30.000), en 1,3 segundos por 1 crédito. La guía de free-threading, más pequeña, pasó de 41.838 bytes de HTML a 20.229 caracteres.

A unos cuatro caracteres por token, 12.000 caracteres son unos 3.000 tokens. La documentación de Claude Code dice que avisa por encima de 10.000 tokens de salida de una tool y que por defecto corta en 25.000, así que el HTML en bruto se recortaría o se guardaría en un archivo antes de que el modelo viera nada útil. truncated y total_chars le dicen al agente que hay más, para que pueda volver a pedirlo con un tope mayor.

Los resultados de búsqueda son igual de compactos: título, url, snippet y posición, nada más.

¿Cuánto cuesta una sesión de programación?

Una sesión de investigación intensa con 10 búsquedas y 10 lecturas de página cuesta 10 x 5 + 10 x 1 = 60 créditos. Los 500 créditos gratuitos cubren ocho de esas sesiones; el pack Starter de 10 $ (20.000 créditos) cubre 333, unos 3 céntimos cada una. Consulta los precios.

El tope duro es el saldo de la cuenta. Cada resultado informa de credits_remaining, y a cero las tools dejan de cobrar y devuelven un error. Usa una clave por máquina para poder revocar solo la de un portátil perdido, pero ten en cuenta que todas las claves de la cuenta comparten el saldo: no hay presupuestos por clave. El post sobre el límite de gasto trata los límites por ejecución.

¿Qué puede fallar y cómo se arregla?

  • HTTP 401, -32001 Authentication required: falta la cabecera o la variable está vacía en el entorno del cliente. Las apps con interfaz gráfica a menudo no leen tu perfil de shell.
  • Sin créditos (402 en REST): la tool devuelve INSUFFICIENT_CREDITS con credits_used: 0. Recarga; no se ha cobrado nada.
  • Demasiadas a la vez (429 en REST): los resultados de la tool vuelven como RATE_LIMITED cuando el agente lanza más llamadas en paralelo que la concurrencia de tu pack (1 en Free, 5 en Starter). Nuestra ejecución con Codex se topó con ello dos veces antes de salir bien. Una ráfaga contra el propio endpoint devuelve HTTP 429 con Retry-After: 10.

En resumen

Exporta FASTAF_API_KEY, añade https://api.fastaf.co/mcp con una cabecera Bearer en Claude Code, Cursor o Codex, y el agente obtiene búsqueda, lectura de páginas como markdown con tope y 13 tools más, con el saldo como techo. Consigue una clave con 500 créditos gratis.