SkyAccess
Busca tramos vacíos de jets privados en vivo, obtén estimaciones de chárter y enlaces de reserva. Gratis, sin clave de API.
Servidor MCP alojado
npx add-mcp 'https://mcp.skyaccess.com/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
Servidor MCP de SkyAccess
SkyAccess es el mercado de vuelos vacíos más grande del mundo por volumen de anuncios. Este servidor MCP gratuito y público permite a cualquier asistente de IA buscar más de 5,000 vuelos vacíos en vivo de más de 900 operadores de chárter certificados por la FAA Parte 135 (y equivalentes internacionales), a menudo entre un 25% y un 75% por debajo de un chárter completo comparable. También devuelve estimaciones indicativas de precios de chárter y un enlace de reserva que el viajero puede abrir.
Usa el endpoint alojado. No es necesario instalar nada.
https://mcp.skyaccess.com/mcp
Detalles de conexión
| Endpoint | https://mcp.skyaccess.com/mcp |
| Autenticación | Ninguna. El servidor es gratuito y anónimo: sin cuenta, registro, clave API ni OAuth. |
| Transporte | HTTP transmisible, solo POST, sin estado. No se emite Mcp-Session-Id, por lo que cada solicitud es independiente. GET devuelve 405 por diseño. |
| Encabezados requeridos | Content-Type: application/json. Accept puede ser el valor de especificación MCP application/json, text/event-stream, application/json solo, */*, u omitirse. Un valor de Accept que no incluya application/json y no sea solo */* (por ejemplo, text/html o text/event-stream solo) devuelve 406. |
| Formato de respuesta | Con Accept: application/json, text/event-stream, cada respuesta es un mensaje de Server-Sent Events: event: message, luego data: seguido de la respuesta JSON-RPC. Con application/json solo, */* o sin encabezado Accept, cada respuesta es JSON plano (Content-Type: application/json). |
| Versión del protocolo | 2025-06-18. También se negocian 2025-11-25, 2025-03-26 y 2024-11-05. |
| Límites de velocidad | Llamadas a herramientas: 30 solicitudes por 60 segundos por IP de cliente. La configuración de conexión no se cuenta. request_booking: 10 consultas de chárter por hora por IP de cliente. Consulta Límites de velocidad. |
| Cobertura | Inventario global, la mayor parte en Estados Unidos. Los precios y estimaciones están en USD. |
| Pagos | Ninguno. Ninguna herramienta acepta pagos ni tiene un campo de pago. |
| Soporte | contact@skyaccess.com |
| Política de privacidad | https://skyaccess.com/privacy#connector |
| Términos de servicio | https://skyaccess.com/terms |
Conectarse desde un cliente MCP
Cualquier cliente que admita servidores MCP remotos sobre HTTP transmisible puede usar el endpoint directamente. Deja la autenticación vacía.
-
Claude (claude.ai y Claude Desktop): Configuración, Conectores, Agregar conector personalizado, luego pega
https://mcp.skyaccess.com/mcp. -
Claude Code:
claude mcp add --transport http skyaccess https://mcp.skyaccess.com/mcp -
Cursor: agrega esto a
~/.cursor/mcp.json:{ "mcpServers": { "skyaccess": { "url": "https://mcp.skyaccess.com/mcp" } } } -
Clientes que solo hablan stdio (por ejemplo, el archivo
claude_desktop_config.jsonde Claude Desktop): usa el puente en este repositorio. Consulta Instalador local y puente stdio.
Pruébalo con curl
Lista las herramientas:
curl -sS https://mcp.skyaccess.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Busca vuelos vacíos (solo lectura):
curl -sS https://mcp.skyaccess.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_empty_legs","arguments":{"origin":"Los Angeles","destination":"Las Vegas","passengers":4}}}'
El servidor no tiene estado, por lo que ambos comandos funcionan sin un protocolo de enlace initialize. Los clientes MCP aún envían uno, y el servidor lo responde normalmente.
Herramientas
| Herramienta | Tipo | Qué hace |
|---|---|---|
search_empty_legs | Solo lectura | Busca vuelos vacíos en vivo por origin, destination, departureDateFrom, departureDateTo, passengers y max_price (USD), todos opcionales. Devuelve hasta 5 vuelos con ruta, hora de salida, precio total, aeronave, asientos, comodidades, flightId y un enlace de reserva. |
get_flight | Solo lectura | Vuelve a leer un vuelo por flightId, o indica que ya no está disponible. |
booking_handoff | Solo lectura | Devuelve el enlace de la página de reserva de SkyAccess para un flightId. No crea, retiene ni cambia nada; el viajero revisa y reserva en la página. |
get_charter_estimate | Solo lectura | Devuelve un rango de precios indicativo en USD por categoría de aeronave, con tiempo de vuelo, para un chárter desde origin hasta destination (passengers y aircraftCategory opcionales). |
request_booking | Escritura | Envía el nombre, correo electrónico y detalles del viaje del viajero (origin, destination, departureDate, passengers, notes opcional) a SkyAccess. Un especialista de SkyAccess hace seguimiento por correo electrónico poco después para confirmar disponibilidad y precio. No acepta pagos ni crea reservas. |
Un vuelo con price: null no tiene precio publicado (SkyAccess lo muestra como "Contactar para precio"). Estos vuelos pueden aparecer incluso cuando max_price está configurado, porque su precio es desconocido.
Cada herramienta lleva anotaciones MCP: las cuatro herramientas de solo lectura establecen readOnlyHint: true, y request_booking establece readOnlyHint: false.
Ejemplos de indicaciones
- "Encuéntrame un jet privado de Los Ángeles a Las Vegas esta semana para 4 personas." (
search_empty_legs) - "¿Hay vuelos de jet privado baratos de Miami a las Bahamas?" (
search_empty_legs) - "Muéstrame vuelos vacíos de Teterboro a Palm Beach y dame el enlace de reserva para el más barato." (
search_empty_legs, luegobooking_handoff) - "¿Cuánto costaría alquilar un jet privado de Teterboro a Aspen para 6 personas?" (
get_charter_estimate) - "¿Qué ofertas de jet privado salen de Dallas este fin de semana?" (
search_empty_legs) - "¿Cuánto cuesta aproximadamente un jet privado de Nueva York a Londres para 8 pasajeros?" (
get_charter_estimate)
El inventario cambia constantemente, por lo que los vuelos devueltos difieren de una ejecución a otra.
Datos y privacidad
Las cuatro herramientas de solo lectura no necesitan datos personales. request_booking es la única herramienta que envía datos personales: el nombre y correo electrónico que el viajero proporciona, junto con los detalles del viaje y cualquier nota, van a SkyAccess para que un especialista pueda responder. Llámala solo cuando el viajero pida que SkyAccess se comunique con ellos.
Cómo maneja SkyAccess estos datos: https://skyaccess.com/privacy#connector
Límites de velocidad
Límites actuales, por IP de cliente:
- Llamadas a herramientas: 30 solicitudes por 60 segundos. Cada solicitud que lleva un
tools/callcuenta una vez. La configuración de conexión no se cuenta:initialize,notifications/initialized,notifications/cancelled,tools/list,pingy elGETque un cliente MCP envía para abrir el flujo SSE opcional (respondido405). Un turno típico de cliente (conectar, listar herramientas, llamar a una herramienta) gasta 1 solicitud. Cualquier otro método cuenta, y también cuenta una solicitud de configuración de más de 8 KB, fragmentada o comprimida, o un lote que repita un método de configuración. Las respuestas de llamadas a herramientas contadas llevan encabezadosRateLimit-Policy: 30;w=60,RateLimit-Limit,RateLimit-RemainingyRateLimit-Reset(una respuestarequest_bookinglleva los valores del límite por hora en su lugar); las respuestas de configuración no llevan ninguno. - 10 consultas de chárter por hora. Solo las solicitudes que llaman a
request_bookingcuentan para este límite. - Por solicitud: un lote JSON-RPC puede llevar como máximo 4 llamadas a herramientas y como máximo 1 llamada a
request_booking. Los lotes más grandes devuelven400.
Al superar un límite, el servidor responde HTTP 429 con código de error JSON-RPC -32029. El encabezado RateLimit-Reset indica los segundos hasta que se restablezca la ventana; reintenta después de eso.
Solución de problemas
| Síntoma | Causa y solución |
|---|---|
406 Not Acceptable | El encabezado Accept no incluye application/json y no es solo */* (por ejemplo, text/html o text/event-stream solo). Envía Accept: application/json, text/event-stream, application/json o */*, u omite Accept. |
429, error JSON-RPC -32029 | Se alcanzó un límite de velocidad. "Máximo 30 solicitudes por minuto" es el límite de llamadas a herramientas (la configuración de conexión no cuenta); "Máximo 10 envíos de reserva por hora" es el límite de request_booking. Espera RateLimit-Reset segundos y reintenta. |
405 | La solicitud fue un GET. Envía JSON-RPC sobre POST. Los clientes MCP envían un GET para abrir un flujo SSE opcional y leen el 405 como "no se ofreció flujo"; eso es esperado y no cuenta para el límite de velocidad. |
400 "Solo se permite una llamada request_booking por solicitud" o "Se permiten como máximo 4 llamadas a herramientas por solicitud" | Divide el lote JSON-RPC en solicitudes más pequeñas. |
| "Ningún vuelo vacío publicado coincide con ese id." | El vuelo ya no está publicado (reservado, retirado o salido), o el id es incorrecto. Ejecuta search_empty_legs nuevamente. |
get_charter_estimate responde "Estimación temporalmente no disponible. Inténtalo de nuevo." | El mismo mensaje se devuelve cuando un nombre de lugar no se reconoce. Reintenta con el nombre de una ciudad importante o un código de aeropuerto como KTEB. |
Instalador local y puente stdio (paquete npm próximamente)
El paquete npm skyaccess-mcp aún no está publicado, por lo que npx skyaccess-mcp no funciona hoy. Usa el endpoint alojado anterior. Una vez publicado, el paquete:
- Escribirá la entrada de SkyAccess en la configuración de los clientes MCP compatibles encontrados en la máquina (Cursor y el archivo de configuración de Claude Desktop), para que nadie tenga que editar JSON manualmente.
- Proporcionará un puente de stdio a HTTP para clientes que no pueden aceptar una URL.
Ejecútalo desde un clon hoy
La verificación de conectividad y el puente ya funcionan desde un clon de este repositorio. Necesitan Node 20 o posterior y no tienen dependencias:
git clone https://github.com/sky-access/skyaccess-mcp.git
cd skyaccess-mcp
node bin/skyaccess-mcp.mjs doctor
doctor verifica el endpoint y lista sus herramientas. Sale con código distinto de cero si el endpoint es inalcanzable o no devuelve herramientas.
Para usar el puente con un cliente solo stdio como el claude_desktop_config.json de Claude Desktop, apúntalo a la ruta absoluta de tu clon:
{
"mcpServers": {
"skyaccess": {
"command": "node",
"args": ["/absolute/path/to/skyaccess-mcp/bin/skyaccess-mcp.mjs", "bridge"]
}
}
}
No ejecutes el instalador en sí (node bin/skyaccess-mcp.mjs sin comando) desde un clon todavía. La entrada de Claude Desktop que escribe inicia el puente a través de npx -y skyaccess-mcp, que falla hasta que el paquete esté publicado.
Comandos una vez que el paquete esté publicado
Estos aún no están disponibles:
npx skyaccess-mcp # register with every supported client found on this machine
npx skyaccess-mcp --dry-run # show what would be written, write nothing
npx skyaccess-mcp doctor # check the endpoint and list its tools
npx skyaccess-mcp bridge # the stdio to HTTP bridge (clients spawn this)
Opciones: --url <url>, --client <cursor|claude-desktop>, --dry-run, --help.
Cómo trata el instalador tus archivos de configuración
- Solo escribe en un cliente cuyo propio directorio ya exista, por lo que nunca crea
~/.cursoren una máquina sin Cursor. - Conserva todas las demás claves en el archivo, por lo que tus otros servidores MCP permanecen como están.
- Deja intacta una configuración que no se analice como JSON y la reporta; nunca la sobrescribe.
- Hace una copia de seguridad de una entrada existente de SkyAccess en
<config>.skyaccess-backupantes de reemplazarla.
Notas de diseño
- Sin dependencias en tiempo de ejecución, por lo que no hay cadena de suministro transitiva que auditar. ESM plano sin paso de compilación: lo que se envía es lo que está en
src/. - El puente escribe solo JSON-RPC en stdout, un mensaje por línea, y envía cada diagnóstico a stderr. Una escritura accidental en stdout corrompería el protocolo.
- Una notificación respondida con
202no produce una línea en stdout, porque una respuesta que el cliente nunca pidió es una violación del protocolo. - Un salto HTTP fallido para una solicitud se convierte en un error JSON-RPC con el mismo
id, para que el cliente falle rápidamente en lugar de esperar para siempre.
Desarrollo
npm install # installs vitest, the only dev dependency
npm test # offline suite against a real local HTTP server, no network
npm run test:live # opt-in live suite against https://mcp.skyaccess.com/mcp
La suite en vivo solo envía initialize y tools/list. Se mantiene fuera de npm test porque depende de DNS e internet público, ninguno de los cuales dice nada sobre si el código es correcto.
Licencia
MIT. Consulta LICENCIA.