paxaver-mcp

MCP adapter for the Paxaver school community platform. Streamable HTTP, OAuth 2.1, capability auth.

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
100%
Vollständigkeit des Schemas
88%
Qualität der Benennung
95%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~7,409Tokens (Tool-Definitionen)
~2.1 KBTypische Antwortgröße
Erhebliche Auswirkung auf die Aufmerksamkeit (5.79% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "paxaver-mcp": {
      "url": "https://mcp.paxaver.com/mcp"
    }
  }
}

Remote-Endpunkte

https://mcp.paxaver.com/mcpstreamable-http

Was es kann

Tool-Inventar

Tools (26)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢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.

Eingabe-Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "firstName": {
      "type": [
        "string",
        "null"
      ],
      "description": "User first name"
    },
    "schoolSlug": {
      "type": [
        "string",
        "null"
      ],
      "description": "Active school slug"
    },
    "schoolName": {
      "type": [
        "string",
        "null"
      ],
      "description": "Active school display name"
    },
    "students": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Students the user is guardian for (id, firstName, schoolSlug)"
    },
    "roles": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Role codes the user holds at the active school"
    }
  }
}
🟢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.

Eingabe-Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "balanceCents": {
      "type": [
        "number",
        "null"
      ],
      "description": "Spendable balance in cents"
    },
    "balanceFormatted": {
      "type": [
        "string",
        "null"
      ],
      "description": "Balance formatted with the currency symbol"
    },
    "currency": {
      "type": [
        "string",
        "null"
      ],
      "description": "ISO currency code (CAD, USD, or MXN)"
    }
  }
}
🟢list_my_lunch_orders(student_id, menu_date, month)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "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)"
    },
    "menu_date": {
      "type": "string",
      "description": "Single day to query, YYYY-MM-DD; omit when using month"
    },
    "month": {
      "type": "string",
      "description": "Calendar month to query, YYYY-MM; omit when using menu_date"
    }
  },
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "orders": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Order ID"
          },
          "studentId": {
            "type": "string",
            "description": "Student the order is for"
          },
          "menuDate": {
            "type": "string",
            "description": "Date the lunch is served, YYYY-MM-DD"
          },
          "status": {
            "type": "string",
            "description": "Order status"
          },
          "itemTotalCents": {
            "type": "integer",
            "description": "Item total in cents"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Ordered line items"
          },
          "createdAt": {
            "type": "string",
            "description": "ISO timestamp the order was placed"
          }
        }
      },
      "description": "Orders matching the filters"
    }
  }
}
🟢get_lunch_menu(date, month)

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.

Eingabe-Schema

{
  "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
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "description": "Date this menu applies to, YYYY-MM-DD"
    },
    "menuItems": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "dailyMenuId": {
            "type": "string",
            "description": "Daily-menu entry ID"
          },
          "menuItemId": {
            "type": "string",
            "description": "Menu item ID for ordering tools"
          },
          "menuItemName": {
            "type": "string",
            "description": "Item display name"
          },
          "restaurantName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Restaurant offering the item"
          },
          "priceCents": {
            "type": "integer",
            "description": "Sale price in cents"
          },
          "availableQty": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Remaining portions; null means unlimited"
          },
          "dietaryTags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Dietary labels (e.g. vegetarian, halal)"
          }
        }
      },
      "description": "Items orderable on that date"
    }
  }
}
🟡create_lunch_order_draft(student_id, school_slug, menu_date, items)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "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"
    },
    "menu_date": {
      "type": "string",
      "description": "Date the lunch is served, YYYY-MM-DD"
    },
    "items": {
      "type": "array",
      "description": "Line items to order; get IDs and prices from get_lunch_menu",
      "items": {
        "type": "object",
        "properties": {
          "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"
          },
          "price_cents": {
            "type": "integer",
            "description": "Unit price in cents from get_lunch_menu"
          },
          "quantity": {
            "type": "integer",
            "description": "Number of servings",
            "minimum": 1
          }
        },
        "required": [
          "menu_item_id",
          "menu_item_name",
          "price_cents",
          "quantity"
        ]
      }
    }
  },
  "required": [
    "menu_date",
    "items"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Draft order ID - pass to pay_lunch_order_draft"
    },
    "studentId": {
      "type": "string",
      "description": "Student the order is for"
    },
    "schoolSlug": {
      "type": "string",
      "description": "School the order was placed at"
    },
    "menuDate": {
      "type": "string",
      "description": "Date the lunch is served, YYYY-MM-DD"
    },
    "status": {
      "type": "string",
      "description": "Order status (draft)"
    },
    "itemTotalCents": {
      "type": "integer",
      "description": "Item total in cents - charged on finalize"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Draft line items"
    }
  }
}
🟡pay_lunch_order_draft(order_id, tip_cents)

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.

Eingabe-Schema

{
  "type": "object",
  "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",
      "description": "Tip in cents (donated to school PAC)",
      "default": 0
    }
  },
  "required": [
    "order_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "orderId": {
      "type": "string",
      "description": "Order ID"
    },
    "status": {
      "type": "string",
      "description": "'finalized' when the wallet covered the full total"
    },
    "itemTotalCents": {
      "type": "integer",
      "description": "Item total in cents"
    },
    "tipCents": {
      "type": "integer",
      "description": "PAC donation added, in cents"
    }
  }
}
🔴update_lunch_order_draft(order_id, items, menu_date)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "description": "Draft order ID from create_lunch_order_draft - must still be in draft status"
    },
    "items": {
      "type": "array",
      "description": "Replacement line items (menu_item_id from get_lunch_menu + quantity); replaces all existing items when provided"
    },
    "menu_date": {
      "type": "string",
      "description": "New date the lunch is served, YYYY-MM-DD"
    }
  },
  "required": [
    "order_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "orderId": {
      "type": "string",
      "description": "Updated draft order ID"
    },
    "status": {
      "type": "string",
      "description": "Order status (draft)"
    }
  }
}
🔴discard_lunch_order_draft(order_id)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "description": "Draft order ID from create_lunch_order_draft - must still be in draft status"
    }
  },
  "required": [
    "order_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "orderId": {
      "type": "string",
      "description": "Discarded draft order ID"
    },
    "status": {
      "type": "string",
      "description": "Order status (discarded)"
    }
  }
}
🔴cancel_my_lunch_order(order_id)

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.

Eingabe-Schema

{
  "type": "object",
  "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"
    }
  },
  "required": [
    "order_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "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"
    }
  }
}
🟢list_school_events(start_date, end_date)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "start_date": {
      "type": "string",
      "description": "First day of the range, YYYY-MM-DD (inclusive); omit for all upcoming events"
    },
    "end_date": {
      "type": "string",
      "description": "Last day of the range, YYYY-MM-DD (inclusive); omit for all upcoming events"
    }
  },
  "additionalProperties": false
}

Ausgabe-Schema

{
  "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"
          },
          "eventDate": {
            "type": "string",
            "description": "Event date, YYYY-MM-DD"
          },
          "startsAt": {
            "type": [
              "string",
              "null"
            ],
            "description": "Start time"
          },
          "endsAt": {
            "type": [
              "string",
              "null"
            ],
            "description": "End time"
          },
          "location": {
            "type": [
              "string",
              "null"
            ],
            "description": "Event location"
          },
          "isClosed": {
            "type": "boolean",
            "description": "Whether registration is closed"
          }
        }
      },
      "description": "Upcoming events matching the date range"
    }
  }
}
🟡create_school_event(school_slug, name, description, event_date, starts_at, ...)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "school_slug": {
      "type": "string",
      "description": "School slug (defaults to active school)"
    },
    "name": {
      "type": "string",
      "description": "Event name shown to parents"
    },
    "description": {
      "type": "string",
      "description": "Optional event description"
    },
    "event_date": {
      "type": "string",
      "description": "Event date, YYYY-MM-DD"
    },
    "starts_at": {
      "type": "string",
      "description": "Start time (e.g. 18:30)"
    },
    "ends_at": {
      "type": "string",
      "description": "End time (e.g. 20:00)"
    },
    "location": {
      "type": "string",
      "description": "Event location (e.g. Gymnasium)"
    },
    "max_capacity": {
      "type": "integer",
      "description": "Maximum attendees/tickets; omit for unlimited"
    },
    "ticket_price_cents": {
      "type": "integer",
      "description": "Ticket price in cents (0 = free)"
    }
  },
  "required": [
    "name",
    "event_date"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Event ID"
    },
    "name": {
      "type": "string",
      "description": "Event name"
    },
    "eventDate": {
      "type": "string",
      "description": "Event date, YYYY-MM-DD"
    },
    "status": {
      "type": "string",
      "description": "Event status (e.g. active)"
    }
  }
}
🔴update_school_event(event_id, name, description, event_date, starts_at, ...)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string",
      "description": "Event ID - from list_school_events"
    },
    "name": {
      "type": "string",
      "description": "New event name"
    },
    "description": {
      "type": "string",
      "description": "New event description shown to parents"
    },
    "event_date": {
      "type": "string",
      "description": "Event date, YYYY-MM-DD"
    },
    "starts_at": {
      "type": "string",
      "description": "Start time (e.g. 18:30)"
    },
    "ends_at": {
      "type": "string",
      "description": "End time (e.g. 20:00)"
    },
    "location": {
      "type": "string",
      "description": "Event location (e.g. Gymnasium)"
    },
    "max_capacity": {
      "type": "integer",
      "description": "Maximum number of attendees/tickets"
    },
    "ticket_price_cents": {
      "type": "integer",
      "description": "Ticket price in cents; 0 for free events"
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "cancelled",
        "completed"
      ],
      "description": "Event status - cancelled stops sales, completed closes the event"
    }
  },
  "required": [
    "event_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Event ID"
    },
    "name": {
      "type": "string",
      "description": "Event name"
    },
    "eventDate": {
      "type": "string",
      "description": "Event date, YYYY-MM-DD"
    },
    "status": {
      "type": "string",
      "description": "Event status after the update"
    }
  }
}
🔴cancel_school_event(event_id)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string",
      "description": "Event ID - from list_school_events; cancelling is permanent and cannot be undone"
    }
  },
  "required": [
    "event_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Event ID"
    },
    "status": {
      "type": "string",
      "description": "Event status (cancelled)"
    }
  }
}
⚪register_for_event(event_id, quantity)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "event_id": {
      "type": "string",
      "description": "Event ID from list_school_events - registration must still be open (check the closed flag)"
    },
    "quantity": {
      "type": "integer",
      "description": "Number of tickets",
      "minimum": 1,
      "default": 1
    }
  },
  "required": [
    "event_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Registration ID"
    },
    "eventId": {
      "type": "string",
      "description": "Event the user registered for"
    },
    "quantity": {
      "type": "integer",
      "description": "Tickets issued"
    },
    "status": {
      "type": "string",
      "description": "Registration status"
    }
  }
}
🟢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.

Eingabe-Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "tickets": {
      "type": "array",
      "description": "Caller's event tickets at the active school"
    }
  }
}
🔴cancel_my_event_registration(ticket_id)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "ticket_id": {
      "type": "string",
      "description": "Ticket ID from list_my_event_registrations - must belong to the caller and still be cancellable"
    }
  },
  "required": [
    "ticket_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Cancelled ticket ID"
    },
    "status": {
      "type": "string",
      "description": "Ticket status (cancelled)"
    }
  }
}
🟢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.

Eingabe-Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "signups": {
      "type": "array",
      "description": "Caller's active volunteer signups"
    }
  }
}
🔴cancel_my_volunteer_signup(signup_id)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "signup_id": {
      "type": "string",
      "description": "Signup ID from list_my_volunteer_signups - must belong to the caller and still be active"
    }
  },
  "required": [
    "signup_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Cancelled signup ID"
    },
    "status": {
      "type": "string",
      "description": "Signup status (cancelled)"
    }
  }
}
🟡sign_up_for_volunteer_shift(shift_id)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "shift_id": {
      "type": "string",
      "description": "Volunteer shift ID - from the event's volunteer shifts (list_school_events)"
    }
  },
  "required": [
    "shift_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Signup ID"
    },
    "shiftId": {
      "type": "string",
      "description": "Volunteer shift signed up for"
    },
    "status": {
      "type": "string",
      "description": "Signup status"
    }
  }
}
🟢list_school_restaurants(school_slug)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "school_slug": {
      "type": "string",
      "description": "School slug (defaults to active school)"
    }
  },
  "additionalProperties": false
}

Ausgabe-Schema

{
  "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"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Restaurant description"
          },
          "isActive": {
            "type": "boolean",
            "description": "Whether the restaurant is active"
          },
          "logoUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "Restaurant logo URL"
          }
        }
      },
      "description": "Active restaurants attached to the school (inactive ones are excluded)"
    }
  }
}
🟡create_school_restaurant(school_slug, name, description, tax_percent)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "school_slug": {
      "type": "string",
      "description": "School slug - defaults to the active school"
    },
    "name": {
      "type": "string",
      "description": "Restaurant display name"
    },
    "description": {
      "type": "string",
      "description": "Optional restaurant description"
    },
    "tax_percent": {
      "type": "number",
      "description": "Sales tax percentage applied to orders (e.g. 5 for 5%)"
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Restaurant ID"
    },
    "name": {
      "type": "string",
      "description": "Restaurant name"
    },
    "isActive": {
      "type": "boolean",
      "description": "Whether the restaurant is active"
    }
  }
}
🟢list_restaurant_menu_items(restaurant_id)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "restaurant_id": {
      "type": "string",
      "description": "Restaurant ID - from list_school_restaurants"
    }
  },
  "required": [
    "restaurant_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Menu item ID"
          },
          "name": {
            "type": "string",
            "description": "Item name"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Item description"
          },
          "priceCents": {
            "type": "integer",
            "description": "Sale price in cents"
          },
          "costCents": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Kitchen cost in cents"
          },
          "isActive": {
            "type": "boolean",
            "description": "Whether the item is on the restaurant menu"
          },
          "isAvailable": {
            "type": "boolean",
            "description": "Whether the item can currently be ordered"
          },
          "calories": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Calorie count"
          },
          "ingredients": {
            "type": [
              "string",
              "null"
            ],
            "description": "Ingredient list text"
          }
        }
      },
      "description": "Full catalog items, including inactive and unavailable"
    }
  }
}
🟡create_restaurant_menu_item(restaurant_id, name, description, cost_cents, price_cents, ...)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "restaurant_id": {
      "type": "string",
      "description": "Restaurant ID - from list_school_restaurants"
    },
    "name": {
      "type": "string",
      "description": "Item display name shown to parents"
    },
    "description": {
      "type": "string",
      "description": "Optional item description"
    },
    "cost_cents": {
      "type": "integer",
      "description": "Kitchen cost in cents (internal margin tracking)"
    },
    "price_cents": {
      "type": "integer",
      "description": "Sale price in cents (e.g. 550 = $5.50)"
    },
    "ingredients": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Ingredient list"
    },
    "calories": {
      "type": "integer",
      "description": "Calorie count"
    }
  },
  "required": [
    "restaurant_id",
    "name"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Menu item ID"
    },
    "name": {
      "type": "string",
      "description": "Item name"
    },
    "priceCents": {
      "type": "integer",
      "description": "Sale price in cents"
    },
    "isActive": {
      "type": "boolean",
      "description": "Whether the item is on the restaurant menu"
    }
  }
}
🔴update_restaurant_menu_item(restaurant_id, menu_item_id, name, description, cost_cents, ...)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "restaurant_id": {
      "type": "string",
      "description": "Restaurant ID - from list_school_restaurants"
    },
    "menu_item_id": {
      "type": "string",
      "description": "Menu item ID - from list_restaurant_menu_items"
    },
    "name": {
      "type": "string",
      "description": "New display name for the item"
    },
    "description": {
      "type": "string",
      "description": "New item description shown to parents"
    },
    "cost_cents": {
      "type": "integer",
      "description": "Kitchen cost in cents (internal margin tracking)"
    },
    "ingredients": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Ingredient list"
    },
    "calories": {
      "type": "integer",
      "description": "Calorie count"
    },
    "is_active": {
      "type": "boolean",
      "description": "Whether the item stays on the restaurant menu - set false to retire it"
    },
    "price_cents": {
      "type": "integer",
      "description": "Sale price in cents (e.g. 550 = $5.50)"
    }
  },
  "required": [
    "restaurant_id",
    "menu_item_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Menu item ID"
    },
    "name": {
      "type": "string",
      "description": "Item name"
    },
    "priceCents": {
      "type": "integer",
      "description": "Sale price in cents"
    },
    "isActive": {
      "type": "boolean",
      "description": "Whether the item is on the restaurant menu"
    },
    "isAvailable": {
      "type": "boolean",
      "description": "Whether the item can currently be ordered"
    }
  }
}
🔴archive_restaurant_menu_item(restaurant_id, menu_item_id)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "restaurant_id": {
      "type": "string",
      "description": "Restaurant ID - from list_school_restaurants"
    },
    "menu_item_id": {
      "type": "string",
      "description": "Menu item ID - from list_restaurant_menu_items"
    }
  },
  "required": [
    "restaurant_id",
    "menu_item_id"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Menu item ID"
    },
    "deleted": {
      "type": "boolean",
      "description": "Whether the item was soft-deleted"
    }
  }
}
🟡schedule_lunch_menu_item(restaurant_id, menu_item_id, menu_date, available_qty)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "restaurant_id": {
      "type": "string",
      "description": "Restaurant ID - from list_school_restaurants"
    },
    "menu_item_id": {
      "type": "string",
      "description": "Menu item ID - from list_restaurant_menu_items"
    },
    "menu_date": {
      "type": "string",
      "description": "Date the item is orderable, YYYY-MM-DD"
    },
    "available_qty": {
      "type": "integer",
      "description": "Maximum portions for the day; omit for unlimited"
    }
  },
  "required": [
    "restaurant_id",
    "menu_item_id",
    "menu_date"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Daily-menu entry ID"
    },
    "menuItemId": {
      "type": "string",
      "description": "Menu item scheduled"
    },
    "menuDate": {
      "type": "string",
      "description": "Date the item is orderable, YYYY-MM-DD"
    },
    "availableQty": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Portion cap for the day; null means unlimited"
    }
  }
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet26 Tools
verifiziertVersion nicht aufgezeichnet21 Tools