MCP 서버

paxaver-mcp

io.github.Smartoire/paxaver-mcp
커머스 및 리테일 교육 공개 · 연결 가능 MCP 2026-07-28

이 MCP로 할 수 있는 일

Manages school events, volunteer shifts, lunch menus and orders, restaurant catalogs, student-family contexts, and school wallet payments.

archive_restaurant_menu_item
Archive Restaurant Menu Item (Admin)
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.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', 'required': ['restaurant_id', 'menu_item_id'], 'properties': {'menu_item_id': {'type': 'string', 'description': 'Menu item ID - from list_restaurant_menu_items'}, 'restaurant_id': {'type': 'string', 'description': 'Restaurant ID - from list_school_restaurants'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Menu item ID'}, 'deleted': {'type': 'boolean', 'description': 'Whether the item was soft-deleted'}}}
cancel_my_event_registration
Cancel My Event Registration
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.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', 'required': ['ticket_id'], 'properties': {'ticket_id': {'type': 'string', 'description': 'Ticket ID from list_my_event_registrations - must belong to the caller and still be cancellable'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Cancelled ticket ID'}, 'status': {'type': 'string', 'description': 'Ticket status (cancelled)'}}}
cancel_my_lunch_order
Cancel My Lunch Order
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.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', 'required': ['order_id'], 'properties': {'order_id': {'type': 'string', 'description': 'ID of a finalized order - from list_my_lunch_orders; the order must still be finalized and not yet have labels sent'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Order ID'}, 'status': {'type': 'string', 'description': 'Order status (cancelled)'}, 'refundCents': {'type': 'integer', 'description': 'Amount refunded to the wallet, in cents'}, 'balanceCents': {'type': ['number', 'null'], 'description': 'Wallet balance after the refund, in cents'}}}
cancel_my_volunteer_signup
Cancel My Volunteer Signup
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.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', 'required': ['signup_id'], 'properties': {'signup_id': {'type': 'string', 'description': 'Signup ID from list_my_volunteer_signups - must belong to the caller and still be active'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Cancelled signup ID'}, 'status': {'type': 'string', 'description': 'Signup status (cancelled)'}}}
cancel_school_event
Cancel School Event (Admin)
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.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'string', 'description': 'Event ID - from list_school_events; cancelling is permanent and cannot be undone'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Event ID'}, 'status': {'type': 'string', 'description': 'Event status (cancelled)'}}}
create_lunch_order_draft
Create Lunch Order Draft
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['menu_date', 'items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['menu_item_id', 'menu_item_name', 'price_cents', 'quantity'], 'properties': {'quantity': {'type': 'integer', 'minimum': 1, 'description': 'Number of servings'}, 'price_cents': {'type': 'integer', 'description': 'Unit price in cents from get_lunch_menu'}, 'menu_item_id': {'type': 'string', 'description': 'Menu item ID from get_lunch_menu'}, 'menu_item_name': {'type': 'string', 'description': 'Item display name from get_lunch_menu'}}}, 'description': 'Line items to order; get IDs and prices from get_lunch_menu'}, 'menu_date': {'type': 'string', 'description': 'Date the lunch is served, YYYY-MM-DD'}, 'student_id': {'type': 'string', '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'}, 'school_slug': {'type': 'string', 'description': 'School slug (from get_my_context); defaults to the active school'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Draft order ID - pass to pay_lunch_order_draft'}, 'items': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Draft line items'}, 'status': {'type': 'string', 'description': 'Order status (draft)'}, 'menuDate': {'type': 'string', 'description': 'Date the lunch is served, YYYY-MM-DD'}, 'studentId': {'type': 'string', 'description': 'Student the order is for'}, 'schoolSlug': {'type': 'string', 'description': 'School the order was placed at'}, 'itemTotalCents': {'type': 'integer', 'description': 'Item total in cents - charged on finalize'}}}
create_restaurant_menu_item
Create Restaurant Menu Item (Admin)
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['restaurant_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'Item display name shown to parents'}, 'calories': {'type': 'integer', 'description': 'Calorie count'}, 'cost_cents': {'type': 'integer', 'description': 'Kitchen cost in cents (internal margin tracking)'}, 'description': {'type': 'string', 'description': 'Optional item description'}, 'ingredients': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Ingredient list'}, 'price_cents': {'type': 'integer', 'description': 'Sale price in cents (e.g. 550 = $5.50)'}, 'restaurant_id': {'type': 'string', 'description': 'Restaurant ID - from list_school_restaurants'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Menu item ID'}, 'name': {'type': 'string', 'description': 'Item name'}, 'isActive': {'type': 'boolean', 'description': 'Whether the item is on the restaurant menu'}, 'priceCents': {'type': 'integer', 'description': 'Sale price in cents'}}}
create_school_event
Create School Event (Admin)
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['name', 'event_date'], 'properties': {'name': {'type': 'string', 'description': 'Event name shown to parents'}, 'ends_at': {'type': 'string', 'description': 'End time (e.g. 20:00)'}, 'location': {'type': 'string', 'description': 'Event location (e.g. Gymnasium)'}, 'starts_at': {'type': 'string', 'description': 'Start time (e.g. 18:30)'}, 'event_date': {'type': 'string', 'description': 'Event date, YYYY-MM-DD'}, 'description': {'type': 'string', 'description': 'Optional event description'}, 'school_slug': {'type': 'string', 'description': 'School slug (defaults to active school)'}, 'max_capacity': {'type': 'integer', 'description': 'Maximum attendees/tickets; omit for unlimited'}, 'ticket_price_cents': {'type': 'integer', 'description': 'Ticket price in cents (0 = free)'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Event ID'}, 'name': {'type': 'string', 'description': 'Event name'}, 'status': {'type': 'string', 'description': 'Event status (e.g. active)'}, 'eventDate': {'type': 'string', 'description': 'Event date, YYYY-MM-DD'}}}
create_school_restaurant
Create School Restaurant (Admin)
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Restaurant display name'}, 'description': {'type': 'string', 'description': 'Optional restaurant description'}, 'school_slug': {'type': 'string', 'description': 'School slug - defaults to the active school'}, 'tax_percent': {'type': 'number', 'description': 'Sales tax percentage applied to orders (e.g. 5 for 5%)'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Restaurant ID'}, 'name': {'type': 'string', 'description': 'Restaurant name'}, 'isActive': {'type': 'boolean', 'description': 'Whether the restaurant is active'}}}
discard_lunch_order_draft
Discard Lunch Order Draft
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.
파괴적 작업 멱등성
입력 스키마
{'type': 'object', 'required': ['order_id'], 'properties': {'order_id': {'type': 'string', 'description': 'Draft order ID from create_lunch_order_draft - must still be in draft status'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'status': {'type': 'string', 'description': 'Order status (discarded)'}, 'orderId': {'type': 'string', 'description': 'Discarded draft order ID'}}}
get_lunch_menu
Get Lunch Menu
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'date': {'type': 'string', 'description': 'Single day to show, YYYY-MM-DD; omit when using month'}, 'month': {'type': 'string', 'description': 'Calendar month to show, YYYY-MM; omit when using date. Today is used when neither is given'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'date': {'type': 'string', 'description': 'Date this menu applies to, YYYY-MM-DD'}, 'menuItems': {'type': 'array', 'items': {'type': 'object', 'properties': {'menuItemId': {'type': 'string', 'description': 'Menu item ID for ordering tools'}, 'priceCents': {'type': 'integer', 'description': 'Sale price in cents'}, 'dailyMenuId': {'type': 'string', 'description': 'Daily-menu entry ID'}, 'dietaryTags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Dietary labels (e.g. vegetarian, halal)'}, 'availableQty': {'type': ['integer', 'null'], 'description': 'Remaining portions; null means unlimited'}, 'menuItemName': {'type': 'string', 'description': 'Item display name'}, 'restaurantName': {'type': ['string', 'null'], 'description': 'Restaurant offering the item'}}}, 'description': 'Items orderable on that date'}}}
get_my_context
Get My Context
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'roles': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Role codes the user holds at the active school'}, 'students': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Students the user is guardian for (id, firstName, schoolSlug)'}, 'firstName': {'type': ['string', 'null'], 'description': 'User first name'}, 'schoolName': {'type': ['string', 'null'], 'description': 'Active school display name'}, 'schoolSlug': {'type': ['string', 'null'], 'description': 'Active school slug'}}}
get_my_wallet_balance
Get My Wallet Balance
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'currency': {'type': ['string', 'null'], 'description': 'ISO currency code (CAD, USD, or MXN)'}, 'balanceCents': {'type': ['number', 'null'], 'description': 'Spendable balance in cents'}, 'balanceFormatted': {'type': ['string', 'null'], 'description': 'Balance formatted with the currency symbol'}}}
list_my_event_registrations
List My Event Registrations
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.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'tickets': {'type': 'array', 'description': "Caller's event tickets at the active school"}}}
list_my_lunch_orders
List My Lunch Orders
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'month': {'type': 'string', 'description': 'Calendar month to query, YYYY-MM; omit when using menu_date'}, 'menu_date': {'type': 'string', 'description': 'Single day to query, YYYY-MM-DD; omit when using month'}, 'student_id': {'type': 'string', 'description': 'Filter to a specific student (must be your own student, from get_my_context; admins may filter any student in the school)'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'orders': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Order ID'}, 'items': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Ordered line items'}, 'status': {'type': 'string', 'description': 'Order status'}, 'menuDate': {'type': 'string', 'description': 'Date the lunch is served, YYYY-MM-DD'}, 'createdAt': {'type': 'string', 'description': 'ISO timestamp the order was placed'}, 'studentId': {'type': 'string', 'description': 'Student the order is for'}, 'itemTotalCents': {'type': 'integer', 'description': 'Item total in cents'}}}, 'description': 'Orders matching the filters'}}}
list_my_volunteer_signups
List My Volunteer Signups
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.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'signups': {'type': 'array', 'description': "Caller's active volunteer signups"}}}
list_restaurant_menu_items
List Restaurant Menu Items (Admin)
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.
읽기 전용
입력 스키마
{'type': 'object', 'required': ['restaurant_id'], 'properties': {'restaurant_id': {'type': 'string', 'description': 'Restaurant ID - from list_school_restaurants'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Menu item ID'}, 'name': {'type': 'string', 'description': 'Item name'}, 'calories': {'type': ['integer', 'null'], 'description': 'Calorie count'}, 'isActive': {'type': 'boolean', 'description': 'Whether the item is on the restaurant menu'}, 'costCents': {'type': ['integer', 'null'], 'description': 'Kitchen cost in cents'}, 'priceCents': {'type': 'integer', 'description': 'Sale price in cents'}, 'description': {'type': ['string', 'null'], 'description': 'Item description'}, 'ingredients': {'type': ['string', 'null'], 'description': 'Ingredient list text'}, 'isAvailable': {'type': 'boolean', 'description': 'Whether the item can currently be ordered'}}}, 'description': 'Full catalog items, including inactive and unavailable'}}}
list_school_events
List School Events
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'end_date': {'type': 'string', 'description': 'Last day of the range, YYYY-MM-DD (inclusive); omit for all upcoming events'}, 'start_date': {'type': 'string', 'description': 'First day of the range, YYYY-MM-DD (inclusive); omit for all upcoming events'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'events': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Event ID - input to register_for_event, update_school_event, cancel_school_event'}, 'name': {'type': 'string', 'description': 'Event name'}, 'endsAt': {'type': ['string', 'null'], 'description': 'End time'}, 'isClosed': {'type': 'boolean', 'description': 'Whether registration is closed'}, 'location': {'type': ['string', 'null'], 'description': 'Event location'}, 'startsAt': {'type': ['string', 'null'], 'description': 'Start time'}, 'eventDate': {'type': 'string', 'description': 'Event date, YYYY-MM-DD'}}}, 'description': 'Upcoming events matching the date range'}}}
list_school_restaurants
List School Restaurants (Admin)
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.
읽기 전용
입력 스키마
{'type': 'object', 'properties': {'school_slug': {'type': 'string', 'description': 'School slug (defaults to active school)'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'restaurants': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Restaurant ID - input to menu-item and daily-menu tools'}, 'name': {'type': 'string', 'description': 'Restaurant name'}, 'logoUrl': {'type': ['string', 'null'], 'description': 'Restaurant logo URL'}, 'isActive': {'type': 'boolean', 'description': 'Whether the restaurant is active'}, 'description': {'type': ['string', 'null'], 'description': 'Restaurant description'}}}, 'description': 'Active restaurants attached to the school (inactive ones are excluded)'}}}
pay_lunch_order_draft
Pay Lunch Order Draft
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['order_id'], 'properties': {'order_id': {'type': 'string', 'description': 'Draft order ID from create_lunch_order_draft - must still be in draft status; already-finalized orders are rejected'}, 'tip_cents': {'type': 'integer', 'default': 0, 'description': 'Tip in cents (donated to school PAC)'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'status': {'type': 'string', 'description': "'finalized' when the wallet covered the full total"}, 'orderId': {'type': 'string', 'description': 'Order ID'}, 'tipCents': {'type': 'integer', 'description': 'PAC donation added, in cents'}, 'itemTotalCents': {'type': 'integer', 'description': 'Item total in cents'}}}
register_for_event
Register for Event
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['event_id'], 'properties': {'event_id': {'type': 'string', 'description': 'Event ID from list_school_events - registration must still be open (check the closed flag)'}, 'quantity': {'type': 'integer', 'default': 1, 'minimum': 1, 'description': 'Number of tickets'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Registration ID'}, 'status': {'type': 'string', 'description': 'Registration status'}, 'eventId': {'type': 'string', 'description': 'Event the user registered for'}, 'quantity': {'type': 'integer', 'description': 'Tickets issued'}}}
schedule_lunch_menu_item
Schedule Lunch Menu Item (Admin)
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['restaurant_id', 'menu_item_id', 'menu_date'], 'properties': {'menu_date': {'type': 'string', 'description': 'Date the item is orderable, YYYY-MM-DD'}, 'menu_item_id': {'type': 'string', 'description': 'Menu item ID - from list_restaurant_menu_items'}, 'available_qty': {'type': 'integer', 'description': 'Maximum portions for the day; omit for unlimited'}, 'restaurant_id': {'type': 'string', 'description': 'Restaurant ID - from list_school_restaurants'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Daily-menu entry ID'}, 'menuDate': {'type': 'string', 'description': 'Date the item is orderable, YYYY-MM-DD'}, 'menuItemId': {'type': 'string', 'description': 'Menu item scheduled'}, 'availableQty': {'type': ['integer', 'null'], 'description': 'Portion cap for the day; null means unlimited'}}}
sign_up_for_volunteer_shift
Sign Up for Volunteer Shift
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['shift_id'], 'properties': {'shift_id': {'type': 'string', 'description': "Volunteer shift ID - from the event's volunteer shifts (list_school_events)"}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Signup ID'}, 'status': {'type': 'string', 'description': 'Signup status'}, 'shiftId': {'type': 'string', 'description': 'Volunteer shift signed up for'}}}
update_lunch_order_draft
Update Lunch Order Draft
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['order_id'], 'properties': {'items': {'type': 'array', 'description': 'Replacement line items (menu_item_id from get_lunch_menu + quantity); replaces all existing items when provided'}, 'order_id': {'type': 'string', 'description': 'Draft order ID from create_lunch_order_draft - must still be in draft status'}, 'menu_date': {'type': 'string', 'description': 'New date the lunch is served, YYYY-MM-DD'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'status': {'type': 'string', 'description': 'Order status (draft)'}, 'orderId': {'type': 'string', 'description': 'Updated draft order ID'}}}
update_restaurant_menu_item
Update Restaurant Menu Item (Admin)
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['restaurant_id', 'menu_item_id'], 'properties': {'name': {'type': 'string', 'description': 'New display name for the item'}, 'calories': {'type': 'integer', 'description': 'Calorie count'}, 'is_active': {'type': 'boolean', 'description': 'Whether the item stays on the restaurant menu - set false to retire it'}, 'cost_cents': {'type': 'integer', 'description': 'Kitchen cost in cents (internal margin tracking)'}, 'description': {'type': 'string', 'description': 'New item description shown to parents'}, 'ingredients': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Ingredient list'}, 'price_cents': {'type': 'integer', 'description': 'Sale price in cents (e.g. 550 = $5.50)'}, 'menu_item_id': {'type': 'string', 'description': 'Menu item ID - from list_restaurant_menu_items'}, 'restaurant_id': {'type': 'string', 'description': 'Restaurant ID - from list_school_restaurants'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Menu item ID'}, 'name': {'type': 'string', 'description': 'Item name'}, 'isActive': {'type': 'boolean', 'description': 'Whether the item is on the restaurant menu'}, 'priceCents': {'type': 'integer', 'description': 'Sale price in cents'}, 'isAvailable': {'type': 'boolean', 'description': 'Whether the item can currently be ordered'}}}
update_school_event
Update School Event (Admin)
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.
멱등성
입력 스키마
{'type': 'object', 'required': ['event_id'], 'properties': {'name': {'type': 'string', 'description': 'New event name'}, 'status': {'enum': ['active', 'cancelled', 'completed'], 'type': 'string', 'description': 'Event status - cancelled stops sales, completed closes the event'}, 'ends_at': {'type': 'string', 'description': 'End time (e.g. 20:00)'}, 'event_id': {'type': 'string', 'description': 'Event ID - from list_school_events'}, 'location': {'type': 'string', 'description': 'Event location (e.g. Gymnasium)'}, 'starts_at': {'type': 'string', 'description': 'Start time (e.g. 18:30)'}, 'event_date': {'type': 'string', 'description': 'Event date, YYYY-MM-DD'}, 'description': {'type': 'string', 'description': 'New event description shown to parents'}, 'max_capacity': {'type': 'integer', 'description': 'Maximum number of attendees/tickets'}, 'ticket_price_cents': {'type': 'integer', 'description': 'Ticket price in cents; 0 for free events'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Event ID'}, 'name': {'type': 'string', 'description': 'Event name'}, 'status': {'type': 'string', 'description': 'Event status after the update'}, 'eventDate': {'type': 'string', 'description': 'Event date, YYYY-MM-DD'}}}
변경됨
pay_lunch_order_draft
2026년 9월 23일 2:49 AM
변경됨
list_my_lunch_orders
2026년 9월 23일 2:49 AM
삭제됨
update_menu_item
2026년 9월 21일 2:56 AM
삭제됨
update_event
2026년 9월 21일 2:56 AM
삭제됨
sign_up_to_volunteer
2026년 9월 21일 2:56 AM
삭제됨
set_daily_menu
2026년 9월 21일 2:56 AM
삭제됨
register_event
2026년 9월 21일 2:56 AM
삭제됨
order_lunch
2026년 9월 21일 2:56 AM
삭제됨
list_menu_items
2026년 9월 21일 2:56 AM
삭제됨
get_wallet_balance
2026년 9월 21일 2:56 AM
삭제됨
get_user_info
2026년 9월 21일 2:56 AM
삭제됨
get_upcoming_events
2026년 9월 21일 2:56 AM
삭제됨
get_orders
2026년 9월 21일 2:56 AM
삭제됨
get_menu
2026년 9월 21일 2:56 AM
삭제됨
finalize_order
2026년 9월 21일 2:56 AM
삭제됨
delete_menu_item
2026년 9월 21일 2:56 AM
삭제됨
create_restaurant
2026년 9월 21일 2:56 AM
삭제됨
create_menu_item
2026년 9월 21일 2:56 AM
삭제됨
create_event
2026년 9월 21일 2:56 AM
삭제됨
create_draft_order
2026년 9월 21일 2:56 AM
삭제됨
cancel_order
2026년 9월 21일 2:56 AM
삭제됨
cancel_event
2026년 9월 21일 2:56 AM
추가됨
schedule_lunch_menu_item
2026년 9월 21일 2:56 AM
추가됨
archive_restaurant_menu_item
2026년 9월 21일 2:56 AM
추가됨
update_restaurant_menu_item
2026년 9월 21일 2:56 AM
추가됨
create_restaurant_menu_item
2026년 9월 21일 2:56 AM
추가됨
list_restaurant_menu_items
2026년 9월 21일 2:56 AM
추가됨
create_school_restaurant
2026년 9월 21일 2:56 AM
변경됨
list_school_restaurants
2026년 9월 21일 2:56 AM
추가됨
sign_up_for_volunteer_shift
2026년 9월 21일 2:56 AM