Rewards Flights Public MCP
Implementar un servidor MCP remoto y sin autenticación en Cloudflare Workers para buscar vuelos de recompensa.
Documentación
Rewards Flight MCP Server
Un servidor experimental del Protocolo de Contexto de Modelo que expone herramientas de búsqueda de vuelos de premio de solo lectura respaldadas por la API de socios de Seats.aero. Se ejecuta en Cloudflare Workers y utiliza el transporte HTTP Streamable en /mcp.
Estado del proyecto
Este repositorio es un prototipo endurecido en seguridad, no una plataforma multiinquilino terminada. Tiene un límite de token portador compartido, una lista de permitidos de origen y limitación de velocidad de Cloudflare Worker. Un despliegue de producción debería reemplazar el token compartido con MCP OAuth/Cloudflare Access, emitir ámbitos por usuario, añadir eventos de auditoría y alertas, y completar un modelo de amenazas y una prueba de carga.
Modelo de seguridad
- Cada solicitud
/mcprequiereAuthorization: Bearer <token>. - Las credenciales se comparan mediante resúmenes SHA-256 y la API de comparación segura en tiempo de Cloudflare.
- Las solicitudes del navegador se aceptan solo desde
MCP_ALLOWED_ORIGINS; los clientes MCP nativos pueden omitirOrigin. - Las solicitudes autenticadas y no autenticadas tienen limitación de velocidad sin almacenar credenciales sin procesar en la clave de limitación de velocidad.
- La clave de Seats.aero y el token portador de MCP son secretos de Wrangler. Ninguna credencial debe estar en el código fuente,
.dev.vars, registros, confirmaciones, problemas o solicitudes de extracción. - Las rutas antiguas HTTP+SSE no se exponen intencionalmente.
Reporte una vulnerabilidad de forma privada utilizando el flujo Seguridad → Reportar una vulnerabilidad de GitHub. No abra un problema público que contenga secretos.
Configuración local
npm ci
cp .dev.vars.example .dev.vars
npm run dev
Cree .dev.vars localmente con valores nuevos, no de producción:
SEATS_AERO_API_KEY=replace-with-a-rotated-key
MCP_AUTH_TOKEN=replace-with-a-long-random-token
MCP_ALLOWED_ORIGINS=https://your-client.example
.dev.vars es ignorado por Git. Nunca reutilice la credencial eliminada del historial anterior del repositorio.
Despliegue en Cloudflare
Autentique Wrangler, configure secretos recién rotados y luego despliegue:
npx wrangler login
npx wrangler secret put SEATS_AERO_API_KEY
npx wrangler secret put MCP_AUTH_TOKEN
npx wrangler secret put MCP_ALLOWED_ORIGINS
npm run deploy
El Worker mantiene el nombre de servicio heredado de Cloudflare en wrangler.jsonc para que el despliegue actualice el endpoint existente en lugar de dejar un servicio sin autenticación. Conecte los clientes a https://<worker>.<account>.workers.dev/mcp y proporcione el token portador a través del mecanismo seguro de credenciales del cliente.
Controles de calidad
npm run type-check
npm run lint
npm test
GitHub Actions ejecuta estos controles en pushes y solicitudes de extracción.