Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,558Letters: 14Defects: 1,336counted 2 min ago
teppi

Server definition

Hash
sha256:9f4cd1da99a2afde85b5f197a1731f8640856a4276f3a8896d97d380e2669397
What it is
What a remote MCP server returned when asked what it offers: 26 tools

The blob, as servednamed by its sha256

{ "instructions": "This connector is safe. Paxaver connects school community accounts. ALWAYS call get_my_context first to establish context. For lunch menu questions use get_lunch_menu (accepts 'date' YYYY-MM-DD or 'month' YYYY-MM). To order lunch use create_lunch_order_draft then pay_lunch_order_draft (menu_item_id values come from get_lunch_menu). Do not invent tool names - use only the tools returned by tools/list. IMPORTANT: Read-only tools are free. Add, edit, and update tools require an active Paxaver AI subscription. Enable a free trial or purchase a subscription at https://paxaver.com/settings/mcp.", "tools": [ { "description": "ADMIN: Archives (soft-deletes) a menu item so it can no longer be ordered - the item is removed from ordering but stays on historical orders. To retire it from the restaurant menu without archiving, use update_restaurant_menu_item with is_active=false. Requires pac_cordinator or lunch_cordinator role. DESTRUCTIVE operation - confirm with the user. Get restaurant_id from list_school_restaurants and menu_item_id from list_restaurant_menu_items.", "inputSchema": { "additionalProperties": false, "properties": { "menu_item_id": { "description": "Menu item ID - from list_restaurant_menu_items", "type": "string" }, "restaurant_id": { "description": "Restaurant ID - from list_school_restaurants", "type": "string" } }, "required": [ "restaurant_id", "menu_item_id" ], "type": "object" }, "name": "archive_restaurant_menu_item", "outputSchema": { "properties": { "deleted": { "description": "Whether the item was soft-deleted", "type": "boolean" }, "id": { "description": "Menu item ID", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "ticket_id": { "description": "Ticket ID from list_my_event_registrations - must belong to the caller and still be cancellable", "type": "string" } }, "required": [ "ticket_id" ], "type": "object" }, "name": "cancel_my_event_registration", "outputSchema": { "properties": { "id": { "description": "Cancelled ticket ID", "type": "string" }, "status": { "description": "Ticket status (cancelled)", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "order_id": { "description": "ID of a finalized order - from list_my_lunch_orders; the order must still be finalized and not yet have labels sent", "type": "string" } }, "required": [ "order_id" ], "type": "object" }, "name": "cancel_my_lunch_order", "outputSchema": { "properties": { "balanceCents": { "description": "Wallet balance after the refund, in cents", "type": [ "number", "null" ] }, "id": { "description": "Order ID", "type": "string" }, "refundCents": { "description": "Amount refunded to the wallet, in cents", "type": "integer" }, "status": { "description": "Order status (cancelled)", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "signup_id": { "description": "Signup ID from list_my_volunteer_signups - must belong to the caller and still be active", "type": "string" } }, "required": [ "signup_id" ], "type": "object" }, "name": "cancel_my_volunteer_signup", "outputSchema": { "properties": { "id": { "description": "Cancelled signup ID", "type": "string" }, "status": { "description": "Signup status (cancelled)", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "event_id": { "description": "Event ID - from list_school_events; cancelling is permanent and cannot be undone", "type": "string" } }, "required": [ "event_id" ], "type": "object" }, "name": "cancel_school_event", "outputSchema": { "properties": { "id": { "description": "Event ID", "type": "string" }, "status": { "description": "Event status (cancelled)", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "items": { "description": "Line items to order; get IDs and prices from get_lunch_menu", "items": { "properties": { "menu_item_id": { "description": "Menu item ID from get_lunch_menu", "type": "string" }, "menu_item_name": { "description": "Item display name from get_lunch_menu", "type": "string" }, "price_cents": { "description": "Unit price in cents from get_lunch_menu", "type": "integer" }, "quantity": { "description": "Number of servings", "minimum": 1, "type": "integer" } }, "required": [ "menu_item_id", "menu_item_name", "price_cents", "quantity" ], "type": "object" }, "type": "array" }, "menu_date": { "description": "Date the lunch is served, YYYY-MM-DD", "type": "string" }, "school_slug": { "description": "School slug (from get_my_context); defaults to the active school", "type": "string" }, "student_id": { "description": "Student ID (must be your own student; from get_my_context); required when the user has more than one student, defaults to their only student", "type": "string" } }, "required": [ "menu_date", "items" ], "type": "object" }, "name": "create_lunch_order_draft", "outputSchema": { "properties": { "id": { "description": "Draft order ID - pass to pay_lunch_order_draft", "type": "string" }, "itemTotalCents": { "description": "Item total in cents - charged on finalize", "type": "integer" }, "items": { "description": "Draft line items", "items": { "type": "object" }, "type": "array" }, "menuDate": { "description": "Date the lunch is served, YYYY-MM-DD", "type": "string" }, "schoolSlug": { "description": "School the order was placed at", "type": "string" }, "status": { "description": "Order status (draft)", "type": "string" }, "studentId": { "description": "Student the order is for", "type": "string" } }, "type": "object" } }, { "description": "ADMIN: Creates a new menu item on a restaurant. Only restaurant_id and name are required - set price_cents before the item can be meaningfully ordered. New items start active and available; use update_restaurant_menu_item to change them later. Requires pac_cordinator or lunch_cordinator role. WRITE operation - confirm with the user. Get restaurant_id from list_school_restaurants.", "inputSchema": { "additionalProperties": false, "properties": { "calories": { "description": "Calorie count", "type": "integer" }, "cost_cents": { "description": "Kitchen cost in cents (internal margin tracking)", "type": "integer" }, "description": { "description": "Optional item description", "type": "string" }, "ingredients": { "description": "Ingredient list", "items": { "type": "string" }, "type": "array" }, "name": { "description": "Item display name shown to parents", "type": "string" }, "price_cents": { "description": "Sale price in cents (e.g. 550 = $5.50)", "type": "integer" }, "restaurant_id": { "description": "Restaurant ID - from list_school_restaurants", "type": "string" } }, "required": [ "restaurant_id", "name" ], "type": "object" }, "name": "create_restaurant_menu_item", "outputSchema": { "properties": { "id": { "description": "Menu item ID", "type": "string" }, "isActive": { "description": "Whether the item is on the restaurant menu", "type": "boolean" }, "name": { "description": "Item name", "type": "string" }, "priceCents": { "description": "Sale price in cents", "type": "integer" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "description": { "description": "Optional event description", "type": "string" }, "ends_at": { "description": "End time (e.g. 20:00)", "type": "string" }, "event_date": { "description": "Event date, YYYY-MM-DD", "type": "string" }, "location": { "description": "Event location (e.g. Gymnasium)", "type": "string" }, "max_capacity": { "description": "Maximum attendees/tickets; omit for unlimited", "type": "integer" }, "name": { "description": "Event name shown to parents", "type": "string" }, "school_slug": { "description": "School slug (defaults to active school)", "type": "string" }, "starts_at": { "description": "Start time (e.g. 18:30)", "type": "string" }, "ticket_price_cents": { "description": "Ticket price in cents (0 = free)", "type": "integer" } }, "required": [ "name", "event_date" ], "type": "object" }, "name": "create_school_event", "outputSchema": { "properties": { "eventDate": { "description": "Event date, YYYY-MM-DD", "type": "string" }, "id": { "description": "Event ID", "type": "string" }, "name": { "description": "Event name", "type": "string" }, "status": { "description": "Event status (e.g. active)", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "description": { "description": "Optional restaurant description", "type": "string" }, "name": { "description": "Restaurant display name", "type": "string" }, "school_slug": { "description": "School slug - defaults to the active school", "type": "string" }, "tax_percent": { "description": "Sales tax percentage applied to orders (e.g. 5 for 5%)", "type": "number" } }, "required": [ "name" ], "type": "object" }, "name": "create_school_restaurant", "outputSchema": { "properties": { "id": { "description": "Restaurant ID", "type": "string" }, "isActive": { "description": "Whether the restaurant is active", "type": "boolean" }, "name": { "description": "Restaurant name", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "order_id": { "description": "Draft order ID from create_lunch_order_draft - must still be in draft status", "type": "string" } }, "required": [ "order_id" ], "type": "object" }, "name": "discard_lunch_order_draft", "outputSchema": { "properties": { "orderId": { "description": "Discarded draft order ID", "type": "string" }, "status": { "description": "Order status (discarded)", "type": "string" } }, "type": "object" } }, { "description": "Returns the orderable lunch menu for the user's active school - item names, prices, dietary tags, and remaining quantity. Pass date for a single day or month for a per-day listing across the whole month (today if neither is given); if both are passed, date wins. The menu_item_id values returned are required by create_lunch_order_draft. For orders already placed, use list_my_lunch_orders.", "inputSchema": { "additionalProperties": false, "properties": { "date": { "description": "Single day to show, YYYY-MM-DD; omit when using month", "type": "string" }, "month": { "description": "Calendar month to show, YYYY-MM; omit when using date. Today is used when neither is given", "type": "string" } }, "type": "object" }, "name": "get_lunch_menu", "outputSchema": { "properties": { "date": { "description": "Date this menu applies to, YYYY-MM-DD", "type": "string" }, "menuItems": { "description": "Items orderable on that date", "items": { "properties": { "availableQty": { "description": "Remaining portions; null means unlimited", "type": [ "integer", "null" ] }, "dailyMenuId": { "description": "Daily-menu entry ID", "type": "string" }, "dietaryTags": { "description": "Dietary labels (e.g. vegetarian, halal)", "items": { "type": "string" }, "type": "array" }, "menuItemId": { "description": "Menu item ID for ordering tools", "type": "string" }, "menuItemName": { "description": "Item display name", "type": "string" }, "priceCents": { "description": "Sale price in cents", "type": "integer" }, "restaurantName": { "description": "Restaurant offering the item", "type": [ "string", "null" ] } }, "type": "object" }, "type": "array" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "get_my_context", "outputSchema": { "properties": { "firstName": { "description": "User first name", "type": [ "string", "null" ] }, "roles": { "description": "Role codes the user holds at the active school", "items": { "type": "string" }, "type": "array" }, "schoolName": { "description": "Active school display name", "type": [ "string", "null" ] }, "schoolSlug": { "description": "Active school slug", "type": [ "string", "null" ] }, "students": { "description": "Students the user is guardian for (id, firstName, schoolSlug)", "items": { "type": "object" }, "type": "array" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "get_my_wallet_balance", "outputSchema": { "properties": { "balanceCents": { "description": "Spendable balance in cents", "type": [ "number", "null" ] }, "balanceFormatted": { "description": "Balance formatted with the currency symbol", "type": [ "string", "null" ] }, "currency": { "description": "ISO currency code (CAD, USD, or MXN)", "type": [ "string", "null" ] } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "list_my_event_registrations", "outputSchema": { "properties": { "tickets": { "description": "Caller's event tickets at the active school", "type": "array" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "menu_date": { "description": "Single day to query, YYYY-MM-DD; omit when using month", "type": "string" }, "month": { "description": "Calendar month to query, YYYY-MM; omit when using menu_date", "type": "string" }, "student_id": { "description": "Filter to a specific student (must be your own student, from get_my_context; admins may filter any student in the school)", "type": "string" } }, "type": "object" }, "name": "list_my_lunch_orders", "outputSchema": { "properties": { "orders": { "description": "Orders matching the filters", "items": { "properties": { "createdAt": { "description": "ISO timestamp the order was placed", "type": "string" }, "id": { "description": "Order ID", "type": "string" }, "itemTotalCents": { "description": "Item total in cents", "type": "integer" }, "items": { "description": "Ordered line items", "items": { "type": "object" }, "type": "array" }, "menuDate": { "description": "Date the lunch is served, YYYY-MM-DD", "type": "string" }, "status": { "description": "Order status", "type": "string" }, "studentId": { "description": "Student the order is for", "type": "string" } }, "type": "object" }, "type": "array" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": {}, "type": "object" }, "name": "list_my_volunteer_signups", "outputSchema": { "properties": { "signups": { "description": "Caller's active volunteer signups", "type": "array" } }, "type": "object" } }, { "description": "ADMIN: Lists the full menu-item catalog for a restaurant, including inactive and unavailable items - this is the catalog, not what parents can order on a date (use get_lunch_menu for that). Provides menu_item_id values for update_restaurant_menu_item, archive_restaurant_menu_item, and schedule_lunch_menu_item. Requires pac_cordinator or lunch_cordinator role. Get restaurant_id from list_school_restaurants.", "inputSchema": { "additionalProperties": false, "properties": { "restaurant_id": { "description": "Restaurant ID - from list_school_restaurants", "type": "string" } }, "required": [ "restaurant_id" ], "type": "object" }, "name": "list_restaurant_menu_items", "outputSchema": { "properties": { "items": { "description": "Full catalog items, including inactive and unavailable", "items": { "properties": { "calories": { "description": "Calorie count", "type": [ "integer", "null" ] }, "costCents": { "description": "Kitchen cost in cents", "type": [ "integer", "null" ] }, "description": { "description": "Item description", "type": [ "string", "null" ] }, "id": { "description": "Menu item ID", "type": "string" }, "ingredients": { "description": "Ingredient list text", "type": [ "string", "null" ] }, "isActive": { "description": "Whether the item is on the restaurant menu", "type": "boolean" }, "isAvailable": { "description": "Whether the item can currently be ordered", "type": "boolean" }, "name": { "description": "Item name", "type": "string" }, "priceCents": { "description": "Sale price in cents", "type": "integer" } }, "type": "object" }, "type": "array" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "end_date": { "description": "Last day of the range, YYYY-MM-DD (inclusive); omit for all upcoming events", "type": "string" }, "start_date": { "description": "First day of the range, YYYY-MM-DD (inclusive); omit for all upcoming events", "type": "string" } }, "type": "object" }, "name": "list_school_events", "outputSchema": { "properties": { "events": { "description": "Upcoming events matching the date range", "items": { "properties": { "endsAt": { "description": "End time", "type": [ "string", "null" ] }, "eventDate": { "description": "Event date, YYYY-MM-DD", "type": "string" }, "id": { "description": "Event ID - input to register_for_event, update_school_event, cancel_school_event", "type": "string" }, "isClosed": { "description": "Whether registration is closed", "type": "boolean" }, "location": { "description": "Event location", "type": [ "string", "null" ] }, "name": { "description": "Event name", "type": "string" }, "startsAt": { "description": "Start time", "type": [ "string", "null" ] } }, "type": "object" }, "type": "array" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "school_slug": { "description": "School slug (defaults to active school)", "type": "string" } }, "type": "object" }, "name": "list_school_restaurants", "outputSchema": { "properties": { "restaurants": { "description": "Active restaurants attached to the school (inactive ones are excluded)", "items": { "properties": { "description": { "description": "Restaurant description", "type": [ "string", "null" ] }, "id": { "description": "Restaurant ID - input to menu-item and daily-menu tools", "type": "string" }, "isActive": { "description": "Whether the restaurant is active", "type": "boolean" }, "logoUrl": { "description": "Restaurant logo URL", "type": [ "string", "null" ] }, "name": { "description": "Restaurant name", "type": "string" } }, "type": "object" }, "type": "array" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "order_id": { "description": "Draft order ID from create_lunch_order_draft - must still be in draft status; already-finalized orders are rejected", "type": "string" }, "tip_cents": { "default": 0, "description": "Tip in cents (donated to school PAC)", "type": "integer" } }, "required": [ "order_id" ], "type": "object" }, "name": "pay_lunch_order_draft", "outputSchema": { "properties": { "itemTotalCents": { "description": "Item total in cents", "type": "integer" }, "orderId": { "description": "Order ID", "type": "string" }, "status": { "description": "'finalized' when the wallet covered the full total", "type": "string" }, "tipCents": { "description": "PAC donation added, in cents", "type": "integer" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "event_id": { "description": "Event ID from list_school_events - registration must still be open (check the closed flag)", "type": "string" }, "quantity": { "default": 1, "description": "Number of tickets", "minimum": 1, "type": "integer" } }, "required": [ "event_id" ], "type": "object" }, "name": "register_for_event", "outputSchema": { "properties": { "eventId": { "description": "Event the user registered for", "type": "string" }, "id": { "description": "Registration ID", "type": "string" }, "quantity": { "description": "Tickets issued", "type": "integer" }, "status": { "description": "Registration status", "type": "string" } }, "type": "object" } }, { "description": "ADMIN: Puts a restaurant menu item on the orderable menu for a given date, optionally capping portions. This only schedules the item - to retire it entirely use update_restaurant_menu_item (is_active) or archive_restaurant_menu_item. Requires pac_cordinator or lunch_cordinator role. WRITE - confirm with the user. Get IDs from list_school_restaurants and list_restaurant_menu_items.", "inputSchema": { "additionalProperties": false, "properties": { "available_qty": { "description": "Maximum portions for the day; omit for unlimited", "type": "integer" }, "menu_date": { "description": "Date the item is orderable, YYYY-MM-DD", "type": "string" }, "menu_item_id": { "description": "Menu item ID - from list_restaurant_menu_items", "type": "string" }, "restaurant_id": { "description": "Restaurant ID - from list_school_restaurants", "type": "string" } }, "required": [ "restaurant_id", "menu_item_id", "menu_date" ], "type": "object" }, "name": "schedule_lunch_menu_item", "outputSchema": { "properties": { "availableQty": { "description": "Portion cap for the day; null means unlimited", "type": [ "integer", "null" ] }, "id": { "description": "Daily-menu entry ID", "type": "string" }, "menuDate": { "description": "Date the item is orderable, YYYY-MM-DD", "type": "string" }, "menuItemId": { "description": "Menu item scheduled", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "shift_id": { "description": "Volunteer shift ID - from the event's volunteer shifts (list_school_events)", "type": "string" } }, "required": [ "shift_id" ], "type": "object" }, "name": "sign_up_for_volunteer_shift", "outputSchema": { "properties": { "id": { "description": "Signup ID", "type": "string" }, "shiftId": { "description": "Volunteer shift signed up for", "type": "string" }, "status": { "description": "Signup status", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "items": { "description": "Replacement line items (menu_item_id from get_lunch_menu + quantity); replaces all existing items when provided", "type": "array" }, "menu_date": { "description": "New date the lunch is served, YYYY-MM-DD", "type": "string" }, "order_id": { "description": "Draft order ID from create_lunch_order_draft - must still be in draft status", "type": "string" } }, "required": [ "order_id" ], "type": "object" }, "name": "update_lunch_order_draft", "outputSchema": { "properties": { "orderId": { "description": "Updated draft order ID", "type": "string" }, "status": { "description": "Order status (draft)", "type": "string" } }, "type": "object" } }, { "description": "ADMIN: Partially updates an existing menu item - only the provided fields change; omitted fields keep their current values. Use for renames, description edits, price changes (price_cents - FINANCIAL, confirm the new price), nutrition updates, or retiring an item (is_active=false). Day-level orderability is controlled by schedule_lunch_menu_item, not this tool. Use archive_restaurant_menu_item to remove the item permanently. Requires pac_cordinator or lunch_cordinator role. WRITE operation - confirm changes with the user. Get restaurant_id from list_school_restaurants and menu_item_id from list_restaurant_menu_items.", "inputSchema": { "additionalProperties": false, "properties": { "calories": { "description": "Calorie count", "type": "integer" }, "cost_cents": { "description": "Kitchen cost in cents (internal margin tracking)", "type": "integer" }, "description": { "description": "New item description shown to parents", "type": "string" }, "ingredients": { "description": "Ingredient list", "items": { "type": "string" }, "type": "array" }, "is_active": { "description": "Whether the item stays on the restaurant menu - set false to retire it", "type": "boolean" }, "menu_item_id": { "description": "Menu item ID - from list_restaurant_menu_items", "type": "string" }, "name": { "description": "New display name for the item", "type": "string" }, "price_cents": { "description": "Sale price in cents (e.g. 550 = $5.50)", "type": "integer" }, "restaurant_id": { "description": "Restaurant ID - from list_school_restaurants", "type": "string" } }, "required": [ "restaurant_id", "menu_item_id" ], "type": "object" }, "name": "update_restaurant_menu_item", "outputSchema": { "properties": { "id": { "description": "Menu item ID", "type": "string" }, "isActive": { "description": "Whether the item is on the restaurant menu", "type": "boolean" }, "isAvailable": { "description": "Whether the item can currently be ordered", "type": "boolean" }, "name": { "description": "Item name", "type": "string" }, "priceCents": { "description": "Sale price in cents", "type": "integer" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "additionalProperties": false, "properties": { "description": { "description": "New event description shown to parents", "type": "string" }, "ends_at": { "description": "End time (e.g. 20:00)", "type": "string" }, "event_date": { "description": "Event date, YYYY-MM-DD", "type": "string" }, "event_id": { "description": "Event ID - from list_school_events", "type": "string" }, "location": { "description": "Event location (e.g. Gymnasium)", "type": "string" }, "max_capacity": { "description": "Maximum number of attendees/tickets", "type": "integer" }, "name": { "description": "New event name", "type": "string" }, "starts_at": { "description": "Start time (e.g. 18:30)", "type": "string" }, "status": { "description": "Event status - cancelled stops sales, completed closes the event", "enum": [ "active", "cancelled", "completed" ], "type": "string" }, "ticket_price_cents": { "description": "Ticket price in cents; 0 for free events", "type": "integer" } }, "required": [ "event_id" ], "type": "object" }, "name": "update_school_event", "outputSchema": { "properties": { "eventDate": { "description": "Event date, YYYY-MM-DD", "type": "string" }, "id": { "description": "Event ID", "type": "string" }, "name": { "description": "Event name", "type": "string" }, "status": { "description": "Event status after the update", "type": "string" } }, "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:9f4cd1da99a2afde85b5f197a1731f8640856a4276f3a8896d97d380e2669397 | sha256sum