Paxaver
Adaptador MCP para la plataforma comunitaria escolar Paxaver: pedidos de almuerzo para estudiantes con verificación de alergias y preferencias dietéticas, billeteras, calendarios escolares, voluntariado, membresías y pagos. Más de 25 herramientas sobre Streamable HTTP con OAuth 2.1 + PKCE.
Documentación
Servidor MCP de Paxaver
Adaptador orientado a IA sobre la plataforma comunitaria escolar Paxaver. Implementa el Protocolo de Contexto de Modelos (MCP) en Cloudflare Workers con validación de JWT RS256, autorización basada en capacidades y transporte HTTP Streamable.
Qué es esto
El servidor MCP de Paxaver permite que los asistentes de IA (ChatGPT, Claude, Perplexity y cualquier cliente compatible con MCP) actúen en nombre de un usuario de Paxaver: consultar un menú de almuerzo, pedir almuerzo, inscribirse en eventos de recaudación de fondos, ser voluntario y — para administradores escolares — gestionar restaurantes, elementos de menú, eventos y pedidos diarios.
Es un adaptador ligero. No contiene lógica de negocio y nunca toca la base de datos, Stripe o el correo electrónico directamente. Cada acción se delega a la API privada del backend de Paxaver a través de un service binding de Cloudflare (misma región, sin salto de red pública). Las únicas responsabilidades del servidor MCP son:
- Manejo del protocolo MCP (JSON-RPC 2.0, HTTP Streamable)
- Validación de JWT RS256 mediante JWKS del worker de autenticación centralizado de Paxaver
- Política de capacidades por herramienta y control de roles
- Mapeo de errores saneado y seguro para el usuario
La autenticación la gestiona el worker de autenticación de Paxaver (auth.paxaver.com), que
actúa como servidor de autorización OAuth 2.0 / OIDC. El servidor MCP valida
los JWT RS256 resultantes y los reenvía al backend. El servidor MCP en sí mismo
no es un servidor de autorización.
Arquitectura
┌───────────────┐ 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 │
└──────────────────────┘
El worker MCP nunca enlaza D1, Stripe o SES. El service binding transporta un
JWT de corta duración (TTL de 120 s, audiencia paxaver-internal) que el backend confía como
una llamada interna mientras sigue atribuyendo la acción al usuario autenticado de Paxaver.
Consulta docs/architecture.md para ver el panorama completo.
Inicio rápido
Instalación
npm install @paxaver/mcp
Desarrollo 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
El servidor de desarrollo local se inicia en http://localhost:8787. Los endpoints de descubrimiento se encuentran
bajo /.well-known/; el endpoint MCP es POST /mcp.
Nota: El desarrollo local sin el service binding
PAXAVER_APIrecurre a HTTPS autenticado contraAPI_BASE_URL(por defectohttp://localhost:8787). Para pruebas de integración completas, ejecuta el worker del backend de Paxaver localmente y apuntaAPI_BASE_URLhacia él.
Despliegue
Dos entornos, cada uno un Worker separado con su propio dominio personalizado:
| Entorno | Nombre del Worker | Dominio |
|---|---|---|
staging | paxaver-mcp-staging | mcp.paxaver.dev |
production | paxaver-mcp | mcp.paxaver.com |
El worker de producción atiende tanto a usuarios de CA como de EE. UU. a través de un único endpoint
(mcp.paxaver.com). La región del usuario se resuelve a partir del claim tenant_id del JWT,
y el worker enruta al backend regional correcto mediante service bindings
(PAXAVER_API_CA, PAXAVER_API_US). La moneda la determina la
escuela del usuario, no el endpoint MCP.
npm run deploy:staging # wrangler deploy --env staging
npm run deploy:prod # wrangler deploy --env production
El worker no requiere secretos. Consulta
docs/deployment.md.
Herramientas
El servidor expone 26 herramientas agrupadas en seis categorías. La visibilidad en
tools/list se filtra según los roles del llamador; cada llamada se vuelve a autorizar
antes del envío, y el backend vuelve a comprobar el acceso a nivel de datos (defensa en profundidad).
| Categoría | Herramientas |
|---|---|
| Usuario / cuenta | get_user_info |
| Billetera | get_wallet_balance, get_wallet_status |
| Pedidos y menú | order_lunch, get_orders, get_daily_menu, get_daily_orders, get_monthly_orders, create_draft_order, finalize_order, cancel_order |
| Eventos | get_upcoming_events, create_event, update_event, cancel_event, register_event, sign_up_to_volunteer |
| Admin / restaurante | list_school_restaurants, create_restaurant, list_menu_items, create_menu_item, update_menu_item, set_menu_item_price, delete_menu_item, set_daily_menu |
Las herramientas financieras y destructivas están etiquetadas y requieren confirmación del usuario. Referencia
completa: docs/tools.md. Política de autorización:
docs/authorization.md.
Privacidad
No se recopila ni se devuelve información de contacto personal (correo electrónico, teléfono, dirección) a través
de las herramientas MCP. La herramienta get_user_info devuelve únicamente el
nombre del usuario, la escuela, los estudiantes y los roles. Los datos de los estudiantes se limitan a IDs, nombres y
slugs de escuela. Las alergias, notas, cumpleaños y otros datos personales no se exponen en
las respuestas de lectura. El servidor MCP no registra datos de usuario.
Documentación
| Documento | Tema |
|---|---|
| docs/architecture.md | Arquitectura del sistema, límite del service binding, aislamiento regional |
| docs/authentication.md | Validación de JWT, JWKS, delegación del worker de autenticación, formato de token |
| docs/authorization.md | Tabla de política de capacidades, control de roles, defensa en profundidad |
| docs/tools.md | Referencia completa de herramientas con esquemas de entrada y clasificaciones |
| docs/deployment.md | Configuración de Wrangler, entornos, secretos, dominios personalizados |
| docs/security.md | Modelo de seguridad, CORS, CSRF, saneamiento de errores, cabeceras |
| docs/compatibility.md | Versión del protocolo MCP, transportes, clientes de IA compatibles |
| docs/migration.md | Migración desde el mcp-server/ heredado en el monorepo privado |
| CHANGELOG.md | Historial de versiones |
| SECURITY.md | Política de notificación de vulnerabilidades |
| CONTRIBUTING.md | Configuración de desarrollo y proceso de contribución |
Pila tecnológica
- Runtime: Cloudflare Workers (
compatibility_date: 2026-08-01,nodejs_compat) - Framework: Hono v4
- JWT: jose v6 (RS256 mediante JWKS)
- Protocolo: MCP
2025-06-18, HTTP Streamable - Autenticación: Validación de JWT RS256 mediante el worker de autenticación centralizado (
auth.paxaver.com) - Compilación/despliegue: Wrangler v4
- Pruebas: Vitest v2 (pool de Workers + pool de Node)
Licencia
Apache-2.0. Copyright (c) 2026 Smartoire. Consulta LICENSE.