Paxaver

Adaptador MCP para a plataforma comunitária escolar Paxaver — pedido de almoço dos alunos com verificação de alergias e preferências alimentares, carteiras, calendários escolares, voluntariado, associações e pagamentos. Mais de 25 ferramentas via Streamable HTTP com OAuth 2.1 + PKCE.

Documentação

Servidor MCP Paxaver

Adaptador voltado para IA sobre a plataforma comunitária escolar Paxaver. Implementa o Model Context Protocol (MCP) no Cloudflare Workers com validação de JWT RS256, autorização baseada em capacidades e transporte HTTP Streamable.

npm version License: Apache-2.0 MCP Badge Paxaver MCP connector – tool definition quality and endpoint health on Glama


O que é isto

O servidor MCP Paxaver permite que assistentes de IA (ChatGPT, Claude, Perplexity e qualquer cliente compatível com MCP) ajam em nome de um usuário Paxaver: consultar um cardápio de almoço, fazer pedido de almoço, inscrever-se em eventos de arrecadação, ser voluntário e — para administradores escolares — gerenciar restaurantes, itens de cardápio, eventos e pedidos diários.

É um adaptador leve. Não contém lógica de negócio e nunca acessa diretamente o banco de dados, Stripe ou e-mail. Cada ação é delegada à API privada do backend Paxaver por meio de um service binding do Cloudflare (mesma região, sem salto de rede pública). As únicas responsabilidades do servidor MCP são:

  • Tratamento do protocolo MCP (JSON-RPC 2.0, Streamable HTTP)
  • Validação de JWT RS256 via JWKS do worker central de autenticação Paxaver
  • Política de capacidades por ferramenta e controle de papéis
  • Mapeamento de erros sanitizado e seguro para o usuário

A autenticação é tratada pelo worker de autenticação Paxaver (auth.paxaver.com), que atua como servidor de autorização OAuth 2.0 / OIDC. O servidor MCP valida os JWTs RS256 resultantes e os encaminha ao backend. O próprio servidor MCP não é um servidor de autorização.


Arquitetura

┌───────────────┐     MCP (Streamable HTTP)      ┌──────────────────────┐
│   AI Client   │ ─────────────────────────────▶ │   Paxaver MCP Worker │
│ ChatGPT/Claude│ ◀───────────────────────────── │  (this repo)         │
│  /Perplexity  │     RS256 JWT + JSON-RPC 2.0   │  Hono + jose         │
└───────────────┘                                └──────────┬───────────┘
                                                            │
                                          Cloudflare service binding
                                          (PAXAVER_API, same region)
                                                            │
                                                            ▼
                                                 ┌──────────────────────┐
                                                 │  Paxaver API Worker  │
                                                 │  (private backend)   │
                                                 │  D1 · Stripe · SES   │
                                                 └──────────────────────┘

O worker MCP nunca vincula D1, Stripe ou SES. O service binding carrega um JWT de curta duração (TTL de 120s, audiência paxaver-internal) que o backend confia como uma chamada interna, ainda assim atribuindo a ação ao usuário Paxaver autenticado. Consulte docs/architecture.md para o panorama completo.


Início rápido

Instalação

npm install @paxaver/mcp

Desenvolvimento local

# 1. Install dependencies (Node >= 22)
npm install

# 2. Run the worker locally (Miniflare)
npm run dev

# 3. Typecheck, lint, and test
npm run typecheck
npm run lint
npm test

O servidor de desenvolvimento local inicia em http://localhost:8787. Os endpoints de descoberta ficam em /.well-known/; o endpoint MCP é POST /mcp.

Observação: O desenvolvimento local sem o service binding PAXAVER_API usa como fallback HTTPS autenticado contra API_BASE_URL (padrão http://localhost:8787). Para testes de integração completos, execute o worker do backend Paxaver localmente e aponte API_BASE_URL para ele.


Implantação

Dois ambientes, cada um com um Worker separado e domínio personalizado próprio:

AmbienteNome do WorkerDomínio
stagingpaxaver-mcp-stagingmcp.paxaver.dev
productionpaxaver-mcpmcp.paxaver.com

O worker de produção atende usuários do CA e dos EUA por meio de um único endpoint (mcp.paxaver.com). A região do usuário é resolvida pela claim tenant_id do JWT, e o worker roteia para o backend regional correto via service bindings (PAXAVER_API_CA, PAXAVER_API_US). A moeda é determinada pela escola do usuário, não pelo endpoint MCP.

npm run deploy:staging   # wrangler deploy --env staging
npm run deploy:prod      # wrangler deploy --env production

O worker não requer segredos. Consulte docs/deployment.md.


Ferramentas

O servidor expõe 26 ferramentas agrupadas em seis categorias. A visibilidade em tools/list é filtrada pelos papéis do chamador; cada chamada é reautorizada antes do envio, e o backend revalida o acesso em nível de dados (defesa em profundidade).

CategoriaFerramentas
Usuário / contaget_user_info
Carteiraget_wallet_balance, get_wallet_status
Pedidos e cardápioorder_lunch, get_orders, get_daily_menu, get_daily_orders, get_monthly_orders, create_draft_order, finalize_order, cancel_order
Eventosget_upcoming_events, create_event, update_event, cancel_event, register_event, sign_up_to_volunteer
Admin / restaurantelist_school_restaurants, create_restaurant, list_menu_items, create_menu_item, update_menu_item, set_menu_item_price, delete_menu_item, set_daily_menu

Ferramentas financeiras e destrutivas são sinalizadas e exigem confirmação do usuário. Referência completa: docs/tools.md. Política de autorização: docs/authorization.md.

Privacidade

Nenhuma informação de contato pessoal (e-mail, telefone, endereço) é coletada ou retornada pelas ferramentas MCP. A ferramenta get_user_info retorna apenas o nome do usuário, escola, alunos e papéis. Os dados dos alunos são limitados a IDs, nomes e slugs de escola. Alergias, anotações, data de nascimento e outros dados pessoais não são expostos nas respostas de leitura. O servidor MCP não registra dados do usuário.


Documentação

DocumentoTópico
docs/architecture.mdArquitetura do sistema, limite do service binding, isolamento regional
docs/authentication.mdValidação de JWT, JWKS, delegação do worker de autenticação, formato do token
docs/authorization.mdTabela de política de capacidades, controle de papéis, defesa em profundidade
docs/tools.mdReferência completa de ferramentas com esquemas de entrada e classificações
docs/deployment.mdConfiguração do Wrangler, ambientes, segredos, domínios personalizados
docs/security.mdModelo de segurança, CORS, CSRF, sanitização de erros, cabeçalhos
docs/compatibility.mdVersão do protocolo MCP, transportes, clientes de IA compatíveis
docs/migration.mdMigração do mcp-server/ legado no monorepo privado
CHANGELOG.mdHistórico de versões
SECURITY.mdPolítica de relato de vulnerabilidades
CONTRIBUTING.mdConfiguração de desenvolvimento e processo de contribuição

Pilha tecnológica

  • Runtime: Cloudflare Workers (compatibility_date: 2026-08-01, nodejs_compat)
  • Framework: Hono v4
  • JWT: jose v6 (RS256 via JWKS)
  • Protocolo: MCP 2025-06-18, Streamable HTTP
  • Autenticação: Validação de JWT RS256 via worker central de autenticação (auth.paxaver.com)
  • Build/implantação: Wrangler v4
  • Testes: Vitest v2 (pool de Workers + pool de Node)

Licença

Apache-2.0. Copyright (c) 2026 Smartoire. Consulte LICENSE.