Rewards Flights Public MCP

Implante um servidor MCP remoto e sem autenticação no Cloudflare Workers para pesquisar voos de recompensa.

Documentação

Rewards Flight MCP Server

Um servidor experimental do Model Context Protocol que expõe ferramentas de busca de voos com milhas somente leitura, apoiadas pela Seats.aero Partner API. Ele roda em Cloudflare Workers e usa o transporte HTTP Streamable em /mcp.

Status do projeto

Este repositório é um protótipo endurecido para segurança, não uma plataforma multi-tenant finalizada. Ele possui um limite de token bearer compartilhado, uma lista de permissões de origem e limitação de taxa do Cloudflare Worker. Uma implantação em produção deve substituir o token compartilhado por MCP OAuth/Cloudflare Access, emitir escopos por usuário, adicionar eventos de auditoria e alertas, e completar um modelo de ameaças e teste de carga.

Modelo de segurança

  • Cada requisição /mcp exige Authorization: Bearer <token>.
  • As credenciais são comparadas usando digests SHA-256 e a API de comparação segura contra timing da Cloudflare.
  • Requisições de navegador são aceitas apenas de MCP_ALLOWED_ORIGINS; clientes MCP nativos podem omitir Origin.
  • Requisições autenticadas e não autenticadas são limitadas por taxa sem armazenar credenciais brutas na chave de limitação de taxa.
  • A chave Seats.aero e o token bearer MCP são segredos do Wrangler. Nenhuma credencial deve estar no código-fonte, .dev.vars, logs, commits, issues ou pull requests.
  • As rotas antigas HTTP+SSE não são expostas intencionalmente.

Relate uma vulnerabilidade em particular usando o fluxo Security → Report a vulnerability do GitHub. Não abra uma issue pública contendo segredos.

Configuração local

npm ci
cp .dev.vars.example .dev.vars
npm run dev

Crie .dev.vars localmente com valores novos, não relacionados à produção:

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 é ignorado pelo Git. Nunca reutilize a credencial removida do histórico anterior do repositório.

Implantação no Cloudflare

Autentique o Wrangler, configure segredos recém-rotacionados e implante:

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

O Worker mantém o nome de serviço legado do Cloudflare em wrangler.jsonc para que a implantação atualize o endpoint existente em vez de deixar um serviço sem autenticação para trás. Conecte os clientes a https://<worker>.<account>.workers.dev/mcp e forneça o token bearer por meio do mecanismo seguro de credenciais do cliente.

Verificações de qualidade

npm run type-check
npm run lint
npm test

O GitHub Actions executa essas verificações em pushes e pull requests.