paxaver-mcp

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

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
88%
이름 품질
95%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~7,409토큰 (도구 정의)
~2.1 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 5.79%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

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

원격 엔드포인트

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

할 수 있는 일

도구 목록

도구 (26)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢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": {
    "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.

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

{
  "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": {
          "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.

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

{
  "type": "object",
  "properties": {
    "restaurant_id": {
      "type": "string",
      "description": "Restaurant ID - from list_school_restaurants"
    }
  },
  "required": [
    "restaurant_id"
  ],
  "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"
          },
          "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.

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

입력 스키마

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

출력 스키마

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

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 26개
검증됨버전이 기록되지 않음도구 21개