Paxaver MCP Server
OfficialYou can use this MCP server to act as an authenticated Paxaver user or school admin for lunch ordering, wallet checks, events, volunteering, and restaurant/menu administration.
View your own Paxaver context: name, active school, guardian students, and role codes.
Check your spendable lunch wallet balance.
Browse lunch menus and list your lunch orders.
Create, update, discard, and pay lunch order drafts; cancel eligible finalized orders with refunds.
Browse school events, register for event tickets, list your registrations, and cancel tickets.
Sign up for volunteer shifts, list your signups, and cancel signups.
As an authorized admin, create, update, or cancel school events.
As an admin, list and create school restaurants.
Administer restaurant menu items: list, create, update, archive, and schedule them onto daily lunch menus.
All actions run as the authenticated user, with role checks, entitlement checks, and confirmation requirements for writes and financial/destructive operations.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Paxaver MCP Server What's the lunch menu at my school today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Paxaver MCP Server
AI-facing adapter over the Paxaver school community platform. Implements the Model Context Protocol (MCP) on Cloudflare Workers with RS256 JWT validation, capability-first authorization, and Streamable HTTP transport.
What this is
The Paxaver MCP server lets AI assistants (ChatGPT, Claude, Perplexity, and any MCP-compatible client) act on behalf of a Paxaver user: check a lunch menu, order lunch, review wallet balance and transaction history, register for fundraising events, enroll students in school programs, volunteer, and — for school administrators — manage restaurants, menu items, events, attendee check-in, volunteer shifts, program waitlists, and daily orders.
It is a thin adapter. It contains no business logic and holds no database, payment, or email credentials. Every action runs against the Paxaver backend API as the authenticated user, and errors are sanitized before they reach the client.
Related MCP server: IIITH Mess MCP
Connect
Point an MCP-compatible client at the hosted endpoint and sign in with a Paxaver account when prompted (OAuth 2.1 Authorization Code + PKCE):
https://mcp.paxaver.com/mcpThe server speaks MCP protocol 2025-06-18 over Streamable HTTP (POST /mcp).
One endpoint serves all regions; the user's region is resolved from their
account at sign-in.
Install
npm install @paxaver/mcpThe package ships the Worker source for self-hosting and development. Most users only need the hosted endpoint above.
Run locally
pnpm install # Node >= 26.8.2, pnpm >= 10
pnpm dev # Miniflare on http://localhost:8787 — MCP endpoint: POST /mcpDocker
docker build -t paxaver-mcp .
docker run -p 8787:8787 paxaver-mcp
# MCP endpoint: http://localhost:8787/mcpSelf-hosted and local instances perform no token-revocation check: a revoked token stays valid until it expires. Tokens are still verified by signature, expiry, and a live user-context load.
See CONTRIBUTING.md for the full development setup.
Tools
The server exposes 37 tools grouped into six categories. Visibility in
tools/list is filtered by the caller's roles; every call is re-authorized
before dispatch, and the backend re-checks data-level access (defense-in-depth).
Category | Tools |
User / wallet |
|
Lunch ordering |
|
Events & volunteering |
|
Event administration |
|
Programs |
|
Restaurant / menu admin |
|
Prompts
The server registers four prompts: daily_lunch_menu, wallet_balance,
upcoming_events, and lunch_order_helper (optional student_name argument).
Availability and content are returned by prompts/list and prompts/get.
Ordering is draft → review → payment: create_lunch_order_draft, adjust
with update_lunch_order_draft, then pay_lunch_order_draft.
sign_out ends the caller's sign-in for this MCP connection: the next request
gets the usual sign-in challenge. An app that holds its own Paxaver credentials
cannot be signed out this way — the result directs the user to disconnect
Paxaver in that app or in their Paxaver account settings instead.
Pre-2.5 tool names still resolve to the canonical tools but are no longer
advertised; the retired order_lunch tool is removed. Financial and destructive
tools are labeled and require user confirmation.
Privacy
The only contact information returned through MCP tools is the caller's own
sign-in email — get_my_context includes it so a client can answer "which login
am I on?", and sign_out names the account it signs out. Phone, address, and
other contact fields are never returned. Student data is limited to IDs, names,
and school slugs; allergies, notes, birthday, and other PII are not exposed in
read responses. The MCP server does not log user data.
Documentation
Document | Topic |
Release history | |
Vulnerability reporting policy | |
Development setup and contribution process |
Internal documentation (architecture, authentication, authorization, full tool
reference, deployment, security model, test scenarios) lives in the private
Paxaver monorepo under docs/paxaver-mcp/ and is intentionally not published.
Tech stack
Runtime: Cloudflare Workers
Framework: Hono v4
JWT: jose v6 (RS256 via JWKS)
Protocol: MCP
2025-06-18, Streamable HTTPBuild/deploy: Wrangler v4
Test: Vitest v5 (Workers pool + Node pool)
Support
Bug reports and feature requests: GitHub issues
Security reports: see SECURITY.md
License
Apache-2.0. Copyright (c) 2026 Smartoire. See LICENSE.
Available Tools
26 toolscancel_my_event_registrationCancel My Event RegistrationADestructiveIdempotentInspect
Cancels one of the authenticated user's own event tickets (ticket_id from list_my_event_registrations). Releases the reserved seats; for paid tickets the full amount is refunded to the user's wallet at that school. Only the ticket owner or a coordinator can cancel. DESTRUCTIVE - confirm with the user before cancelling.
Inputs: ticket_id (required). Returns: id, status
cancel_my_lunch_orderCancel My Lunch OrderADestructiveIdempotentInspect
Cancels a finalized order and refunds the charge to the wallet. Only works before order labels have been sent; after that the request is rejected and the order stands. DESTRUCTIVE - confirm with the user before cancelling.
Inputs: order_id (required). Returns: id, status, refundCents, balanceCents
cancel_my_volunteer_signupCancel My Volunteer SignupADestructiveIdempotentInspect
Cancels one of the authenticated user's own volunteer signups (signup_id from list_my_volunteer_signups) and frees the shift slot for others. No payment is involved. Only the volunteer themselves or an admin can cancel. DESTRUCTIVE - confirm with the user before cancelling.
Inputs: signup_id (required). Returns: id, status
cancel_school_eventCancel School Event (Admin)ADestructiveIdempotentInspect
ADMIN: Cancels a school event outright; cancelled events cannot be reactivated. For schedule, capacity, or price changes use update_school_event instead. Requires pac_cordinator or event_cordinator role. DESTRUCTIVE - confirm with the user. Get event_id from list_school_events.
Inputs: event_id (required). Returns: id, status
create_lunch_order_draftCreate Lunch Order DraftAIdempotentInspect
Creates an unpaid draft lunch order with one or more items - nothing is charged until pay_lunch_order_draft commits it. Use for multi-item orders or when the user should review the total first; each items entry pairs a menu_item_id with a quantity. The draft total is the sum of item prices times quantities plus nothing else until pay_lunch_order_draft. To change or abandon the draft, use update_lunch_order_draft or discard_lunch_order_draft. FINANCIAL - confirm student, items, and date before calling.
Inputs: items (required), menu_date (required), student_id, school_slug. Returns: id, items, status, menuDate, +3 more
create_school_eventCreate School Event (Admin)AIdempotentInspect
ADMIN: Creates a school event, optionally ticketed, at the active school. To change an existing event use update_school_event; to register a parent for an event use register_for_event. Requires pac_cordinator or event_cordinator role. WRITE - only create on explicit user request.
Inputs: name (required), event_date (required), ends_at, location, +5 more. Returns: id, name, status, eventDate
create_school_restaurantCreate School Restaurant (Admin)AIdempotentInspect
ADMIN: Adds a restaurant to the active school so it can offer menu items via create_restaurant_menu_item. To change an existing restaurant there is no update tool - recreate or manage it in the Paxaver admin. Requires pac_cordinator role. WRITE - confirm with the user.
Inputs: name (required), description, school_slug, tax_percent. Returns: id, name, isActive
discard_lunch_order_draftDiscard Lunch Order DraftADestructiveIdempotentInspect
Permanently discards an unpaid draft order - the caller must own it and it must still be in draft status (order_id from create_lunch_order_draft). Nothing was ever charged, so there is no refund; the draft is simply deleted. For a finalized order use cancel_my_lunch_order instead. DESTRUCTIVE - confirm with the user before discarding.
Inputs: order_id (required). Returns: status, orderId
get_my_contextGet My ContextARead-onlyInspect
Read-only lookup with no side effects - safe to call repeatedly. Requires authentication: returns only the caller's own context (never another user's data): first name, active school, the students they are a guardian for, and their role codes at that school. This is the context-discovery call - most other tools need a student_id or school_slug from here, and admin-role checks come from roles. Returns live account state, so call again if the user may have switched schools or had roles changed.
Inputs: no named parameters. Returns: roles, students, firstName, schoolName, +1 more
get_my_wallet_balanceGet My Wallet BalanceARead-onlyInspect
Read-only lookup - never moves funds or has side effects. Requires authentication: returns only the caller's spendable wallet balance at their active school (wallets are scoped per school, so a balance at one school does not apply elsewhere), in cents and formatted. Live value reflecting orders and refunds up to the current moment - recheck before assuming funds are still available. Call before pay_lunch_order_draft or register_for_event to confirm the user can cover the charge; not needed for read-only lookups.
Inputs: no named parameters. Returns: currency, balanceCents, balanceFormatted
list_my_event_registrationsList My Event RegistrationsARead-onlyIdempotentInspect
Read-only, no side effects. Returns the authenticated user's own event tickets at their active school - ticket id, event name/date/location, quantity, total paid, and status (paid or checked_in). Cancelled tickets are excluded. The id values returned are required by cancel_my_event_registration. Pair with list_school_events for events the user has not registered for.
Inputs: no named parameters. Returns: tickets
list_my_lunch_ordersList My Lunch OrdersARead-onlyInspect
Returns lunch orders already placed - items, menu date, status, and total - for the authenticated user's students, newest first (up to ~100 most recent). Filters combine with AND: student_id narrows to one student; menu_date and month narrow the date range, and if both are given menu_date wins. With no filters returns recent orders across all of the user's students. Admins (pac_cordinator, lunch_cordinator) see school-wide orders; parents only their own students. For what can be ordered (menu and prices), use get_lunch_menu.
Inputs: month, menu_date, student_id. Returns: orders
list_my_volunteer_signupsList My Volunteer SignupsARead-onlyIdempotentInspect
Read-only, no side effects. Returns the authenticated user's active volunteer signups at their school - signup id, shift title/date/times, and the parent event. Cancelled signups are excluded. The id values returned are required by cancel_my_volunteer_signup.
Inputs: no named parameters. Returns: signups
list_school_eventsList School EventsARead-onlyInspect
Returns upcoming events for the user's active school: date, times, location, volunteer shifts, and whether registration is closed. The event IDs returned feed register_for_event; shift IDs feed sign_up_for_volunteer_shift. To review or undo your own registrations and signups, use list_my_event_registrations / cancel_my_event_registration and list_my_volunteer_signups / cancel_my_volunteer_signup. Optionally filter by date range.
Inputs: end_date, start_date. Returns: events
list_school_restaurantsList School Restaurants (Admin)ARead-onlyInspect
ADMIN: Lists the active restaurants attached to a school (defaults to the active school). Inactive restaurants are not returned. The restaurant_id values returned are required by list_restaurant_menu_items, create_restaurant_menu_item, update_restaurant_menu_item, archive_restaurant_menu_item, and schedule_lunch_menu_item. Requires pac_cordinator, pac_member, or lunch_cordinator role.
Inputs: school_slug. Returns: restaurants
pay_lunch_order_draftPay Lunch Order DraftAIdempotentInspect
Commits a draft order from create_lunch_order_draft and charges the wallet for the item total plus optional tip_cents (donated to the school's PAC). Wallet-only: if the balance cannot cover the full total, the call fails with an error directing the user to open the Paxaver panel and top up the wallet balance, then retry - no card payment is offered through this tool. Not for new orders - use create_lunch_order_draft first. FINANCIAL - confirm the total before calling.
Inputs: order_id (required), tip_cents. Returns: status, orderId, tipCents, itemTotalCents
register_for_eventRegister for EventAIdempotentInspect
Registers the authenticated user for a school event and issues tickets to the caller (quantity is the number of tickets bought for the caller, minimum 1 - there is no per-student split). For paid events quantity times the ticket price is charged to the user's wallet - the call fails on insufficient balance or when the event is sold out or registration is closed. To volunteer at an event rather than attend, use sign_up_for_volunteer_shift. FINANCIAL for paid events - confirm before registering.
Inputs: event_id (required), quantity. Returns: id, status, eventId, quantity
sign_up_for_volunteer_shiftSign Up for Volunteer ShiftAIdempotentInspect
Signs the authenticated user up for a specific volunteer shift - no payment involved. shift_id identifies one shift within an event, not the event itself: get it from the event's volunteer shifts in list_school_events. The call fails when the shift is full or cancelled. To attend an event as a guest instead, use register_for_event. WRITE - confirm with the user before signing up.
Inputs: shift_id (required). Returns: id, status, shiftId
update_lunch_order_draftUpdate Lunch Order DraftAIdempotentInspect
Replaces the items and/or menu_date of an unpaid draft order before it is finalized - the caller must own the draft and it must still be in draft status (order_id from create_lunch_order_draft). Pass the complete items list: it replaces the draft's items wholesale and the total is recomputed from price times quantity. Only draft orders can be updated; once finalized, use cancel_my_lunch_order. WRITE - confirm the new contents with the user.
Inputs: order_id (required), items, menu_date. Returns: status, orderId
update_school_eventUpdate School Event (Admin)AIdempotentInspect
ADMIN: Partially updates an existing school event - only the provided fields change; omitted fields keep their current values. Use for reschedules, capacity or price changes, and status transitions (cancelled/completed). Prefer cancel_school_event to cancel outright. Requires pac_cordinator or event_cordinator role. WRITE operation - confirm changes with the user. Get event_id from list_school_events.
Inputs: event_id (required), name, status, ends_at, +6 more. Returns: id, name, status, eventDate
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 26 tools
Each tool targets a distinct resource and action: context, wallet, lunch orders (draft/finalized), events, registrations, volunteer signups, restaurants, and menu items. No two tools overlap in purpose; even similar cancellation tools are clearly differentiated by entity type.
Tool names consistently follow a verb_noun pattern (get_my_context, list_school_events, cancel_my_lunch_order, create_restaurant_menu_item). The 'my' prefix for user-scoped operations and 'school'/'restaurant' prefixes for admin operations are applied uniformly.
At 26 tools, the surface is heavy and exceeds the typical 15-tool sweet spot. The count is justified by the broad domain (lunch, events, volunteering, restaurants, wallet), but it borders on overwhelming and would benefit from consolidation or sub-grouping.
The lifecycle coverage is strong for lunch orders, events, and volunteer signups (create/read/update/cancel). However, restaurants lack update and delete/archive tools (only create and list exist), and there is no tool to manage wallet top-ups or transaction history, leaving minor gaps agents must work around.
Maintenance
Related MCP Connectors
Enables AI assistants to retrieve event data and execute event management operations in Nunify.
Persistent food journal for AI assistants. Log meals, save recipes, plan meals and track nutrition.
Run your restaurant from an AI client: orders, menu, reports, refunds, payouts and staff.
Pickup orders at Japanese restaurants for AI agents: find stores, read menus, place orders. No auth.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with the IIIT Hyderabad Mess Management System through natural language, allowing students to view menus, manage meal registrations, check bills, submit feedback, and configure preferences.2911MIT
- AlicenseAqualityCmaintenanceEnables LLMs to interact with the IIIT Hyderabad Mess System to manage meal registrations, view menus, and track billing. It supports conversational commands for tasks like cancelling meals, estimating nutrition, and checking account balances.455AGPL 3.0
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with the IIIT-H mess dining and marketplace systems through resources, tools, and prompts for meal planning, billing analysis, and registration modifications.27GPL 3.0
- AlicenseAqualityCmaintenanceMCP server for the Löwen Menü IBS5 school-lunch ordering system, enabling an LLM to browse weekly menus, manage a shopping cart, and place meal orders.7MIT