Skip to main content
Glama
Smartoire

Paxaver MCP Server

Official

Paxaver MCP Server

AI-facing adapter over the Paxaver school community platform. Implements the Model Context Protocol (MCP) on Cloudflare Workers with RS256 JWT validation, capability-first authorization, and Streamable HTTP transport.

npm version License: Apache-2.0 MCP Badge Paxaver MCP Server MCP server – quality and maintenance score on Glama Listed on mcpservers.org Wellknown


What this is

The Paxaver MCP server lets AI assistants (ChatGPT, Claude, Perplexity, and any MCP-compatible client) act on behalf of a Paxaver user: check a lunch menu, order lunch, register for fundraising events, volunteer, and — for school administrators — manage restaurants, menu items, events, and daily orders.

It is a thin adapter. It contains no business logic and never touches the database, Stripe, or email directly. Every action is delegated to the private Paxaver backend API over a Cloudflare service binding (same region, no public network hop). The MCP server's only responsibilities are:

  • MCP protocol handling (JSON-RPC 2.0, Streamable HTTP)

  • RS256 JWT validation via JWKS from the centralized Paxaver auth worker

  • Per-tool capability policy and role gating

  • Sanitized, user-safe error mapping

Authentication is handled by the Paxaver auth worker (auth.paxaver.com), which serves as the OAuth 2.0 / OIDC authorization server. The MCP server validates the resulting RS256 JWTs and forwards them to the backend. The MCP server itself is not an authorization server.


Related MCP server: IIITH Mess MCP

Architecture

┌───────────────┐     MCP (Streamable HTTP)      ┌──────────────────────┐
│   AI Client   │ ─────────────────────────────▶ │   Paxaver MCP Worker │
│ ChatGPT/Claude│ ◀───────────────────────────── │  (this repo)         │
│  /Perplexity  │     RS256 JWT + JSON-RPC 2.0   │  Hono + jose         │
└───────────────┘                                └──────────┬───────────┘
                                                            │
                                          Cloudflare service binding
                                          (PAXAVER_API, same region)
                                                            │
                                                            ▼
                                                 ┌──────────────────────┐
                                                 │  Paxaver API Worker  │
                                                 │  (private backend)   │
                                                 │  D1 · Stripe · SES   │
                                                 └──────────────────────┘

The MCP worker never binds D1, Stripe, or SES. The service binding carries a short-lived JWT (120s TTL, audience paxaver-internal) that the backend trusts as an internal call while still attributing the action to the authenticated Paxaver user. See docs/architecture.md for the full picture.


Quick start

Install

npm install @paxaver/mcp

Develop locally

# 1. Install dependencies (Node >= 26.8.2)
npm install

# 2. Run the worker locally (Miniflare)
npm run dev

# 3. Typecheck, lint, and test
npm run typecheck
npm run lint
npm test

The local dev server starts on http://localhost:8787. Discovery endpoints live under /.well-known/; the MCP endpoint is POST /mcp.

Note: Local development without the PAXAVER_API_* service bindings falls back to authenticated HTTPS against API_BASE_URL_CA, API_BASE_URL_US, and API_BASE_URL_MX (default http://localhost:8787). For full integration testing, run the Paxaver backend worker locally; the defaults already point at it.


Deployment

Two environments, each a separate Worker with its own custom domain:

Environment

Worker name

Domain

staging

paxaver-mcp-staging

mcp.paxaver.dev

production

paxaver-mcp

mcp.paxaver.com

The production worker serves both CA and US users through a single endpoint (mcp.paxaver.com). User region is resolved from the JWT tenant_id claim, and the worker routes to the correct regional backend via service bindings (PAXAVER_API_CA, PAXAVER_API_US). Currency is determined by the user's school, not by the MCP endpoint.

Docker

The Dockerfile runs the worker locally via wrangler dev, proxying the production backends over HTTPS:

docker build -t paxaver-mcp .
docker run -p 8787:8787 paxaver-mcp
# MCP endpoint: http://localhost:8787/mcp
npm run deploy:staging   # wrangler deploy --env staging
npm run deploy:prod      # wrangler deploy --env production

The worker requires no secrets. See docs/deployment.md.


Tools

The server exposes 26 tools grouped into five categories. Visibility in tools/list is filtered by the caller's roles; every call is re-authorized before dispatch, and the backend re-checks data-level access (defense-in-depth).

Category

Tools

User / account

get_my_context, get_my_wallet_balance

Lunch ordering

get_lunch_menu, list_my_lunch_orders, create_lunch_order_draft, update_lunch_order_draft, discard_lunch_order_draft, pay_lunch_order_draft, cancel_my_lunch_order

Events & volunteering

list_school_events, register_for_event, list_my_event_registrations, cancel_my_event_registration, list_my_volunteer_signups, sign_up_for_volunteer_shift, cancel_my_volunteer_signup

Event administration

create_school_event, update_school_event, cancel_school_event

Restaurant / menu admin

list_school_restaurants, create_school_restaurant, list_restaurant_menu_items, create_restaurant_menu_item, update_restaurant_menu_item, archive_restaurant_menu_item, schedule_lunch_menu_item

Ordering is draft → review → payment: create_lunch_order_draft, adjust with update_lunch_order_draft, then pay_lunch_order_draft.

Compatibility: pre-2.5 tool names (get_menu, register_event, create_menu_item, …) still work — they resolve to the canonical tools — but are no longer advertised. order_lunch also remains callable for existing integrations. See docs/tools.md for the full legacy-name mapping.

Financial and destructive tools are labeled and require user confirmation. Full reference: docs/tools.md. Authorization policy: docs/authorization.md.

Privacy

No personal contact information (email, phone, address) is collected or returned through MCP tools. The get_my_context tool returns only the user's name, school, students, and roles. Student data is limited to IDs, names, and school slugs. Allergies, notes, birthday, and other PII are not exposed in read responses. The MCP server does not log user data.


Documentation

Document

Topic

docs/architecture.md

System architecture, service binding boundary, regional isolation

docs/authentication.md

JWT validation, JWKS, auth worker delegation, token format

docs/authorization.md

Capability policy table, role gating, defense-in-depth

docs/tools.md

Full tool reference with input schemas and classifications

docs/deployment.md

Wrangler config, environments, secrets, custom domains

docs/security.md

Security model, CORS, CSRF, error sanitization, headers

docs/compatibility.md

MCP protocol version, transports, supported AI clients

docs/migration.md

Migration from the legacy mcp-server/ in the private monorepo

CHANGELOG.md

Release history

SECURITY.md

Vulnerability reporting policy

CONTRIBUTING.md

Development setup and contribution process


Tech stack

  • Runtime: Cloudflare Workers (compatibility_date: 2026-09-15)

  • Framework: Hono v4

  • JWT: jose v6 (RS256 via JWKS)

  • Protocol: MCP 2025-06-18, Streamable HTTP

  • Auth: RS256 JWT validation via centralized auth worker (auth.paxaver.com)

  • Build/deploy: Wrangler v4

  • Test: Vitest v2 (Workers pool + Node pool)


License

Apache-2.0. Copyright (c) 2026 Smartoire. See LICENSE.

Available Tools

26 tools
archive_restaurant_menu_itemArchive Restaurant Menu Item (Admin)A
DestructiveIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
menu_item_idYesMenu item ID - from list_restaurant_menu_items
restaurant_idYesRestaurant ID - from list_school_restaurants

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoMenu item ID
deletedNoWhether the item was soft-deleted

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description reveals the soft-delete behavior (`removed from ordering but stays on historical orders`), role requirements, and the explicit instruction to confirm with the user. It also warns `DESTRUCTIVE operation`, adding meaningful safety context that annotations alone do not fully convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact but information-dense, front-loading the core action and soft-delete semantics before moving to the alternative and warnings. Every sentence earns its place: consequences, alternative, role, danger, and ID sourcing are all covered without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an admin-only destructive mutation, the description covers when to use it, when not to, required role, confirm-before-invoking warning, ID provenance, and the post-archive behavior. With an output schema present, return-value documentation is not needed. The description is fully adequate for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage for both parameters, including where to source their values. The description reinforces this by telling the agent to get `restaurant_id` from `list_school_restaurants` and `menu_item_id` from `list_restaurant_menu_items`, but it does not add meaning beyond the schema's own descriptions. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: `Archives (soft-deletes) a menu item`, clearly distinguishing it from the sibling `update_restaurant_menu_item` path. It also states the operational scope (`Admin`) and the exact consequence (`can no longer be ordered`).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains when to use archive vs. update: `To retire it from the restaurant menu without archiving, use update_restaurant_menu_item with is_active=false.` It also names the required role and tells the agent how to obtain the necessary IDs from sibling list tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_my_event_registrationCancel My Event RegistrationA
DestructiveIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ticket_idYesTicket ID from list_my_event_registrations - must belong to the caller and still be cancellable

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoCancelled ticket ID
statusNoTicket status (cancelled)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (destructiveHint=true), the description discloses concrete effects: reserved seats are released, full refund is credited to the user's wallet at that school, access is restricted to owner/coordinator, and the user must confirm before cancellation. This adds real behavioral context that the annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with no filler. The core operation is front-loaded, followed by consequences, permission constraint, and a clear safety warning. Every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with an output schema and strong annotations, the description covers the identity of the affected ticket, the post-cancellation effects (seats and refund), the authorization constraint, and the required user confirmation. No significant calling context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is already fully documented by the schema (100% coverage), including the constraint that the ticket must belong to the caller and be cancellable. The description repeats the source of ticket_id but does not add new parameter-level semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Cancels'), specifies the resource ('one of the authenticated user's own event tickets'), names the required input source ('ticket_id from list_my_event_registrations'), and distinguishes itself from sibling cancel tools by targeting ticket registrations rather than lunch orders, volunteer signups, or the event itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly frames when to use the tool: for a user's own event ticket cancellation, and it sets the condition that only the ticket owner or a coordinator may cancel. It also includes a confirmation requirement. However, it does not explicitly contrast with sibling tools like cancel_school_event or cancel_my_volunteer_signup, so some routing is left to context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_my_lunch_orderCancel My Lunch OrderA
DestructiveIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYesID of a finalized order - from list_my_lunch_orders; the order must still be finalized and not yet have labels sent

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoOrder ID
statusNoOrder status (cancelled)
refundCentsNoAmount refunded to the wallet, in cents
balanceCentsNoWallet balance after the refund, in cents

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds meaningful behavior beyond that: the wallet refund, the rejection condition after labels are sent, and the user-confirmation requirement. There is no contradiction with the annotations, including idempotentHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler: the core action, the timing limitation, and the destructive-action warning. It is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutating tool with an output schema and complete annotations, this covers the preconditions, the failure mode, the postcondition (refund), and the required user confirmation. Nothing essential for selecting or invoking the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents order_id, including the source (list_my_lunch_orders) and the preconditions (finalized, labels not sent). With 100% schema description coverage, the description does not need to add parameter-level detail and does not meaningfully exceed what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Cancels'), a resource ('finalized order'), and the resulting effect ('refunds the charge to the wallet'). The phrase 'finalized order' clearly distinguishes this from draft-focused siblings like discard_lunch_order_draft and create_lunch_order_draft.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the acceptable timing ('before order labels have been sent') and the when-not case ('after that the request is rejected and the order stands'). It also instructs the agent to confirm with the user before cancelling. It does not name a sibling alternative for drafts, but the finalized-order phrasing covers the primary routing decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_my_volunteer_signupCancel My Volunteer SignupA
DestructiveIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
signup_idYesSignup ID from list_my_volunteer_signups - must belong to the caller and still be active

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoCancelled signup ID
statusNoSignup status (cancelled)

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it destructive and non-read-only, but the description adds meaningful behavioral detail: it frees the shift slot for others, clarifies that no payment is involved, specifies authorization (volunteer/admin only), and explicitly instructs the agent to confirm with the user before proceeding. This goes far beyond the annotations and provides the agent with critical safety context. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with each sentence serving a distinct purpose: the first states the action and effect, the second removes financial ambiguity, the third specifies authorization, and the fourth delivers the safety warning. There is no filler or redundancy, and the most critical destructive note is placed at the end for emphasis while still being quickly scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with annotations covering read-only/destructive/idempotent hints, the description provides ample context: effect on the shift, payment clarity, authorization, and confirmation requirement. It does not explicitly describe the return value, but an output schema exists, so that is not required. It also does not mention idempotency (e.g., behavior on double-cancel), but that is already covered by idempotentHint. Overall, it is almost complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the signup_id parameter already has a clear description stating it must come from list_my_volunteer_signups and belong to the caller. The tool description repeats this source but does not add new meaning or details (e.g., format, validation). Per the baseline rule for high schema coverage, a score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('cancels'), resource ('volunteer signups'), and scope ('own'), and even references the source of the ID (list_my_volunteer_signups). It clearly distinguishes from sibling tools like cancel_my_event_registration or cancel_my_lunch_order by naming the unique resource. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it cancels only the authenticated user's own signups, from a specific list, and notes that only the volunteer or an admin can cancel. However, it does not explicitly contrast with related tools (e.g., cancel_my_event_registration) or state when not to use it beyond the ownership scope. There is implied usage guidance, but no explicit exclusions or alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancel_school_eventCancel School Event (Admin)A
DestructiveIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent ID - from list_school_events; cancelling is permanent and cannot be undone

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoEvent ID
statusNoEvent status (cancelled)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, so the description is not required to restate that this is a destructive operation. It adds meaningful context beyond the annotations: the cancellation is permanent and cannot be reactivated, specific roles are required, and user confirmation is mandatory. This is strong behavioral disclosure, though it does not detail post-cancellation effects such as attendee notifications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the action and permanence appear first, followed by sibling routing, role requirements, and the destructive confirmation. Every sentence carries necessary operational information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive admin operation, the description covers the core facts: what happens, what cannot happen afterward, which alternative tool to use, who may call it, what to confirm, and where the input comes from. Combined with the annotations and output schema, an agent has everything needed to select and invoke the tool safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already has 100% coverage, describing event_id as coming from list_school_events and noting the cancellation is permanent. The description repeats the 'get event_id from list_school_events' guidance but adds no fundamentally new parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ('Cancels a school event outright'), and immediately distinguishes it from siblings like update_school_event (for changes) and cancel_my_event_registration (for personal registrations). The 'ADMIN' prefix and emphasis on permanence make the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when NOT to use this tool ('For schedule, capacity, or price changes use update_school_event instead'), which is the key routing decision. It also gives a prerequisite ('Requires pac_cordinator or event_cordinator role'), a mandatory confirmation step ('DESTRUCTIVE - confirm with the user'), and the exact source for the input ('Get event_id from list_school_events').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_lunch_order_draftCreate Lunch Order DraftA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesLine items to order; get IDs and prices from get_lunch_menu
menu_dateYesDate the lunch is served, YYYY-MM-DD
student_idNoStudent 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_slugNoSchool slug (from get_my_context); defaults to the active school

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoDraft order ID - pass to pay_lunch_order_draft
itemsNoDraft line items
statusNoOrder status (draft)
menuDateNoDate the lunch is served, YYYY-MM-DD
studentIdNoStudent the order is for
schoolSlugNoSchool the order was placed at
itemTotalCentsNoItem total in cents - charged on finalize

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly=false, idempotent=true, destructive=false, so the bar is lower. The description adds genuine context beyond those: 'nothing is charged until pay_lunch_order_draft commits it' discloses deferred financial impact, and 'plus nothing else' rules out hidden fees. No contradiction with the annotations exists — the description never claims read-only or destructive behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and each sentence earns its place: purpose, usage criterion, pricing/behavioral detail, lifecycle alternatives, and a FINANCIAL confirmation warning. Minor redundancy exists between sentence one ('nothing is charged until pay commits it') and sentence three ('plus nothing else until pay_lunch_order_draft'), which could be merged without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists (covering return values), the schema documents parameter provenance via get_lunch_menu and get_my_context defaults, and the description covers financial impact, lifecycle routing, and a confirmation warning, this is nearly complete for a financial write tool. The one small gap is that the description doesn't state what happens on repeat calls with identical arguments — though idempotentHint=true partially covers this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema documents all four parameters, justifying a baseline of 3. The description adds meaning on top: it explains the items structure as pairing a menu_item_id with a quantity and spells out the pricing computation ('sum of item prices times quantities plus nothing else'), which clarifies that price_cents is the unit price multiplied by quantity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — 'Creates an unpaid draft lunch order with one or more items' — and immediately distinguishes it from its lifecycle siblings: pay_lunch_order_draft commits it, update/discard change or abandon it. An agent can tell this tool apart from pay, update, and discard without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use criteria ('Use for multi-item orders or when the user should review the total first') and names the alternative tools for the next action (pay_lunch_order_draft) and for alterations (update_lunch_order_draft, discard_lunch_order_draft). It lacks an explicit when-not-to-use statement for the direct single-item/pay-now case, but the guidance is otherwise clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_restaurant_menu_itemCreate Restaurant Menu Item (Admin)A
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesItem display name shown to parents
caloriesNoCalorie count
cost_centsNoKitchen cost in cents (internal margin tracking)
descriptionNoOptional item description
ingredientsNoIngredient list
price_centsNoSale price in cents (e.g. 550 = $5.50)
restaurant_idYesRestaurant ID - from list_school_restaurants

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoMenu item ID
nameNoItem name
isActiveNoWhether the item is on the restaurant menu
priceCentsNoSale price in cents

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description goes beyond annotations by clarifying the new item starts active and available, and that only restaurant_id and name are required, with price_cents needed for ordering. It also warns it's a WRITE operation requiring user confirmation, adding behavioral context not captured in annotations. It doesn't contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loading the essential purpose and critical requirements (admin, WRITE, required fields) in the first two sentences. It includes necessary operational details like role requirements and where to get restaurant_id without fluff. Slightly verbose with the role and confirmation details, but each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 params, admin role, WRITE operation) and that an output schema exists (so return format is covered there), the description covers the key operational aspects: required fields, role permissions, initial state, and reference to update tool. It doesn't mention potential validation or side effects, but these are minor given the annotations and output schema. Adequate for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for all 7 parameters (100% coverage), including examples like '550 = $5.50' for price_cents. The description adds minimal new semantic information, but does emphasize that only restaurant_id and name are required and that price_cents is important for ordering, which slightly enhances understanding of the parameter's role. Given the high schema coverage, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a new menu item on a restaurant, a specific verb and resource, and mentions the requirement for restaurant_id and name. It also differentiates from the sibling update_restaurant_menu_item by noting that changes are made via that tool, and mentions the WRITE nature, which distinguishes it from read-only siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it (to create a new menu item) and when to use the alternative (update_restaurant_menu_item for changes later). It also provides a prerequisite: obtaining restaurant_id from list_school_restaurants, and clarifies the need for admin roles, which prevents misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_school_eventCreate School Event (Admin)A
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesEvent name shown to parents
ends_atNoEnd time (e.g. 20:00)
locationNoEvent location (e.g. Gymnasium)
starts_atNoStart time (e.g. 18:30)
event_dateYesEvent date, YYYY-MM-DD
descriptionNoOptional event description
school_slugNoSchool slug (defaults to active school)
max_capacityNoMaximum attendees/tickets; omit for unlimited
ticket_price_centsNoTicket price in cents (0 = free)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoEvent ID
nameNoEvent name
statusNoEvent status (e.g. active)
eventDateNoEvent date, YYYY-MM-DD

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the write nature (readOnlyHint=false) and non-destructiveness (destructiveHint=false). The description adds value by requiring a coordinator role and mandating that creation happen only on explicit user request, which are important behavioral guardrails not present in annotations. It does not over-explain side effects, but for a create operation this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: role, action, scope, sibling routing, and explicit-request guardrail are all front-loaded and actionable. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter create tool with a 100%-documented input schema and an output schema, the description covers the remaining non-schema essentials: auth requirements, sibling-tool disambiguation, and invocation policy. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 9 parameters. The description adds useful context that ticketing is optional and that the event is created at the active school, tying to ticket_price_cents/max_capacity and school_slug, but it does not substantially deepen parameter-level meaning beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Creates') and resource ('school event'), and clarifies scope ('at the active school') and optional ticketing. It also names the two sibling tools that handle modifications and registrations, so an agent can distinguish this from update_school_event and register_for_event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit role prerequisites, a WRITE / explicit-user-request condition, and direct routing to sibling tools for change (update_school_event) and registration (register_for_event). This leaves little ambiguity about when to invoke this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_school_restaurantCreate School Restaurant (Admin)A
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRestaurant display name
descriptionNoOptional restaurant description
school_slugNoSchool slug - defaults to the active school
tax_percentNoSales tax percentage applied to orders (e.g. 5 for 5%)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoRestaurant ID
nameNoRestaurant name
isActiveNoWhether the restaurant is active

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description adds the role requirement, the need to confirm with the user, and the lack of an update path. These are meaningful behavioral details. It does not elaborate on the idempotent behavior hinted by annotations, but it does not contradict them either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the most important signal ('ADMIN'), followed by the core action, sibling relationship, update limitation, role, and confirmation requirement. Every sentence adds value and there is no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the schema fully documents parameters and an output schema exists, the description covers all essential operational context: admin scope, target school, purpose, role, confirmation, and update limitations. An agent has enough information to decide when and how to invoke this tool safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents every parameter clearly. The description adds only indirect context about the 'active school' default for school_slug. This meets the baseline for full schema coverage without adding much parameter-specific value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Adds a restaurant to the active school') and explains the downstream purpose via create_restaurant_menu_item. It also clearly distinguishes itself from the sibling tool create_restaurant_menu_item by targeting restaurants rather than menu items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context: it is ADMIN-only, requires the pac_cordinator role, is a WRITE operation requiring user confirmation, and notes that no update tool exists so changes mean recreating or managing in the Paxaver admin. It also implicitly routes the agent to create_restaurant_menu_item for the next step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discard_lunch_order_draftDiscard Lunch Order DraftA
DestructiveIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYesDraft order ID from create_lunch_order_draft - must still be in draft status

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoOrder status (discarded)
orderIdNoDiscarded draft order ID

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description provides substantial behavioral context beyond the annotations: the operation is permanent, no refund exists because nothing was charged, the draft is simply deleted, and it explicitly warns to confirm with the user. It also emphasizes destructive behavior, matching the destructiveHint annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with every sentence contributing necessary operational or safety information. The critical DESTRUCTIVE warning is included without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive tool, the description fully covers purpose, preconditions, side effects, alternatives, and user confirmation. Since an output schema exists, return-value details are not required here, and nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully describes order_id as the draft order ID from create_lunch_order_draft and requires draft status. The description reinforces this but adds no new parameter meaning beyond what the schema already covers, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb and resource: 'Permanently discards an unpaid draft order.' It also differentiates from the sibling tool by specifying that it applies only to drafts and directing finalized orders to cancel_my_lunch_order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: the caller must own the draft, it must still be in draft status, and it must be unpaid. It also names the alternative for finalized orders and includes a clear confirmation requirement, leaving no ambiguity about usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_lunch_menuGet Lunch MenuA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoSingle day to show, YYYY-MM-DD; omit when using month
monthNoCalendar month to show, YYYY-MM; omit when using date. Today is used when neither is given

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateNoDate this menu applies to, YYYY-MM-DD
menuItemsNoItems orderable on that date

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only and non-destructive. The description adds value by specifying the precedence rule (date wins over month) and the default behavior (today when neither is provided), which are behavioral traits not captured by annotations. It does not mention pagination or response structure, but output schema is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, front-loading the primary purpose and key details. It covers parameter usage, defaults, and alternative tools in three sentences without redundant phrasing. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 2 optional parameters, a comprehensive schema with 100% coverage, an output schema, and full annotations, the description is complete. It covers usage rules, parameter precedence, defaults, and cross-references to related tools. No critical information is missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters. The description adds a small clarification about the precedence rule (date wins if both are passed), but otherwise does not introduce new semantic meaning beyond what the schema provides. This aligns with the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the orderable lunch menu for the active school, including specific details (item names, prices, dietary tags, remaining quantity). It distinguishes itself from related tools like list_restaurant_menu_items and list_my_lunch_orders, so the agent can easily identify its unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use this tool versus alternatives: it is for the orderable lunch menu, while list_my_lunch_orders is for already placed orders. It also provides clear usage logic for date vs. month parameters, including default behavior when neither is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_contextGet My ContextA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
rolesNoRole codes the user holds at the active school
studentsNoStudents the user is guardian for (id, firstName, schoolSlug)
firstNameNoUser first name
schoolNameNoActive school display name
schoolSlugNoActive school slug

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: it is safe to call repeatedly, requires authentication, returns only the caller's own data, and returns live account state. It does not contradict annotations. A small gap is that it doesn't describe the output schema shape, but the output schema exists and the description covers the key behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the most important fact (read-only, safe to call repeatedly), and every sentence adds value: what it returns, why it matters, and when to call again. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only tool with an output schema and annotations covering safety, the description is complete. It explains the return contents, the authentication requirement, the privacy boundary, and the live-state caveat. An agent has everything needed to call it correctly and interpret its role in the broader toolset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema is trivially complete. The description adds value by explaining what the returned data contains and how it should be used, which is more relevant than parameter semantics for a no-parameter tool. Baseline 4 for zero params is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('lookup'), a clear resource (the caller's own context), and enumerates exactly what is returned (first name, active school, guardian students, role codes). It also distinguishes itself from siblings by framing it as the context-discovery call that other tools depend on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: as the context-discovery call, before other tools that need student_id or school_slug, and for admin-role checks. It also tells the agent to call again if the user may have switched schools or roles changed. This is strong usage guidance with no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_wallet_balanceGet My Wallet BalanceA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
currencyNoISO currency code (CAD, USD, or MXN)
balanceCentsNoSpendable balance in cents
balanceFormattedNoBalance formatted with the currency symbol

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral context beyond that: requires authentication, school-scoped data, live values reflecting orders/refunds, and the caution to recheck before assuming funds. It also emphasizes no side effects, which reinforces the read-only annotation without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the most important fact ('Read-only lookup - never moves funds or has side effects') and every subsequent sentence earns its place: auth, scope, units, freshness, and usage guidance. It is detailed but not bloated, each clause adds distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description covers everything needed to call it correctly: authentication requirement, per-school scoping, return format (cents and formatted), live-value semantics, and when to invoke it. An agent has all necessary context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the baseline is 4. The description doesn't need to explain parameters because there are none; it instead explains what data the tool operates on (caller's balance, active school), which is the relevant semantic content.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it 'returns only the caller's spendable wallet balance.' It also scopes the operation precisely to the caller's active school, in cents and formatted, which separates it from any other balance-related query. This clearly distinguishes it from the mutation-heavy sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use instructions: 'Call before pay_lunch_order_draft or register_for_event to confirm the user can cover the charge.' It also provides a when-not exclusion ('not needed for read-only lookups') and contextual scoping guidance about per-school balances.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_event_registrationsList My Event RegistrationsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
ticketsNoCaller's event tickets at the active school

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description reinforces this with 'Read-only, no side effects.' It adds valuable behavioral context beyond annotations: results are scoped to the active school, cancelled tickets are excluded, and the return payload includes ticket status values like paid and checked_in.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences with no fluff; the key behavioral claim is front-loaded and every sentence adds useful information. The only minor issue is that 'Read-only, no side effects' partly duplicates the annotations, but it is brief and harmless.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema and strong annotations, this description is complete: it defines scope, exclusions, returned fields, and links to the two most relevant sibling tools. An agent has everything needed to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and schema description coverage is 100%, so the baseline of 4 applies. The description correctly focuses on output and scope rather than parameter syntax, and no parameter-level explanation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Returns') and a precise resource: the authenticated user's own event tickets at their active school, including the exact fields returned. It clearly differentiates itself from sibling list tools like list_school_events, list_my_lunch_orders, and list_my_volunteer_signups by scope and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the sibling tool list_school_events for events the user has not registered for, giving a clear when-to-use/when-not-to-use distinction. It also states that the returned ids are required by cancel_my_event_registration, which helps an agent decide to call this tool before attempting a cancellation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_lunch_ordersList My Lunch OrdersA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoCalendar month to query, YYYY-MM; omit when using menu_date
menu_dateNoSingle day to query, YYYY-MM-DD; omit when using month
student_idNoFilter to a specific student (must be your own student, from get_my_context; admins may filter any student in the school)

Output Schema

ParametersJSON Schema
NameRequiredDescription
ordersNoOrders matching the filters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds non-obvious behavior beyond that: newest-first ordering, a ~100 record cap, filter precedence, and role-based visibility. Nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense with no filler. Each clause earns its place: return fields, ordering, limit, filter semantics, fallback behavior, role scoping, and the pointer to a sibling tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with an output schema, the description covers all needed invocation context: what is returned, ordering, limits, filter combination and precedence, default behavior, role-based access, and which sibling to use for menus.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description adds meaning beyond the schema: filters combine with AND, menu_date wins if both menu_date and month are provided, and student_id has ownership/role constraints. These behaviors are not inferable from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Returns lunch orders already placed - items, menu date, status, and total - for the authenticated user's students.' It clearly distinguishes this read tool from sibling create/cancel/update/order tools and from get_lunch_menu.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains filter combination behavior (AND), menu_date vs month precedence, the no-filter default, and admin vs parent scoping. It also points to get_lunch_menu when the goal is ordering-eligible items, giving a clear alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_volunteer_signupsList My Volunteer SignupsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
signupsNoCaller's active volunteer signups

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds value beyond annotations by specifying that cancelled signups are excluded, the data scope (active signups at the user's school), and the dependency on cancellation. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information: safety, return content, exclusion filter, and downstream usage. No filler, and the most critical information (read-only, what it returns) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter tool with an output schema present, the description covers all necessary operational details: return fields, scope, exclusions, and the relationship to cancellation. Nothing critical is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the input schema is empty and coverage is effectively 100%. The description appropriately doesn't dwell on parameters; the baseline for 0-param tools is 4, and no additional parameter explanation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Returns') and resource ('volunteer signups'), with explicit fields returned. It distinguishes from siblings like list_my_event_registrations (different resource) and cancel_my_volunteer_signup (different action). The scope is clear: authenticated user's active signups at their school.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that returned IDs are required by cancel_my_volunteer_signup, which gives a concrete use case and implies this tool is the precursor for cancellation. However, it doesn't explicitly contrast with other list tools (e.g., list_my_event_registrations) or state when not to use it, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_restaurant_menu_itemsList Restaurant Menu Items (Admin)A
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
restaurant_idYesRestaurant ID - from list_school_restaurants

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsNoFull catalog items, including inactive and unavailable

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: it returns inactive and unavailable items, requires pac_cordinator or lunch_cordinator role, and serves as a source of menu_item_id values for subsequent operations. These details go beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense and well-structured: it opens with the admin catalog scope, immediately handles the key sibling distinction, then covers downstream use, authorization, and parameter sourcing. Every sentence contributes unique value and none is redundant with the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with an output schema, the description covers everything needed: purpose, scope, alternative tool, role requirement, and parameter provenance. The presence of an output schema means return-value documentation is already handled elsewhere, so no critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents restaurant_id as coming from list_school_restaurants. The description repeats this provenance, reinforcing it, but does not add new semantic detail about the parameter itself. Baseline 3 is appropriate because the schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: it 'lists the full menu-item catalog for a restaurant, including inactive and unavailable items.' It clearly distinguishes itself from get_lunch_menu by explicitly stating this is the catalog, not the orderable menu for a date. This provides strong sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when to use this tool versus get_lunch_menu, names downstream tools that consume its output (update_restaurant_menu_item, archive_restaurant_menu_item, schedule_lunch_menu_item), and gives the prerequisite source for the restaurant_id parameter (list_school_restaurants). It also states the required role, leaving no ambiguity about eligibility.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_school_eventsList School EventsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoLast day of the range, YYYY-MM-DD (inclusive); omit for all upcoming events
start_dateNoFirst day of the range, YYYY-MM-DD (inclusive); omit for all upcoming events

Output Schema

ParametersJSON Schema
NameRequiredDescription
eventsNoUpcoming events matching the date range

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only and non-destructive, so the bar is lower. The description adds useful behavioral context beyond annotations: it returns upcoming events only, includes volunteer shifts and registration closure status, and is scoped to the active school. It does not contradict annotations and provides enough behavioral framing for a list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long and each sentence earns its place: the first states what is returned, the second explains how the returned IDs connect to downstream tools, and the third provides alternative-tool routing and the optional filter. It is front-loaded and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with an existing output schema, two optional parameters fully documented, and clear annotations, the description covers everything an agent needs: return contents, relationship to dependent tools, alternatives for own registrations, and optional filtering. Nothing important is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents both optional parameters (start_date and end_date) adequately. The description only says 'Optionally filter by date range,' which adds no new semantic detail beyond the schema's own descriptions. Baseline 3 is appropriate given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists upcoming events for the user's active school and enumerates the included data (date, times, location, volunteer shifts, registration status). It distinguishes itself from related registration/signup tools by explicitly noting that event IDs feed register_for_event and shift IDs feed sign_up_for_volunteer_shift.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit routing guidance: it says to use list_my_event_registrations / cancel_my_event_registration and list_my_volunteer_signups / cancel_my_volunteer_signup to review or undo the user's own registrations and signups. This tells the agent exactly when this tool is appropriate and when alternatives should be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_school_restaurantsList School Restaurants (Admin)A
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
school_slugNoSchool slug (defaults to active school)

Output Schema

ParametersJSON Schema
NameRequiredDescription
restaurantsNoActive restaurants attached to the school (inactive ones are excluded)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations that already declare readOnlyHint=true and destructiveHint=false, the description adds meaningful behavioral context: inactive restaurants are filtered out, the active school is the default, and role requirements are specified. The description is consistent with the annotations and provides extra filtering and authorization detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense: scope, filtering behavior, downstream integration, and role requirements are each covered in exactly the space they need. Despite listing multiple dependent tool names, every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single optional parameter, an existing output schema, and read-only annotations, this description covers all necessary aspects: what is returned, what is excluded, default behavior, authorization, and how the results are consumed elsewhere. Nothing critical is missing for an agent to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single parameter school_slug at 100% coverage, including its default-to-active-school behavior. The description reinforces that default but adds no new parameter-level information, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Lists') and resource ('active restaurants attached to a school'), with a clear default scope ('defaults to the active school'). This distinguishes it cleanly from siblings like list_restaurant_menu_items and create_school_restaurant by focusing on school-level restaurant retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly notes that the returned restaurant_id values are required by several downstream tools, giving the agent a clear reason to call this tool first. It also states the required roles for accessing it. It does not explicitly compare against alternatives or state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pay_lunch_order_draftPay Lunch Order DraftA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYesDraft order ID from create_lunch_order_draft - must still be in draft status; already-finalized orders are rejected
tip_centsNoTip in cents (donated to school PAC)

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo'finalized' when the wallet covered the full total
orderIdNoOrder ID
tipCentsNoPAC donation added, in cents
itemTotalCentsNoItem total in cents

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal readOnly=false, destructive=false, and idempotent=true, and the description adds valuable behavior: charging the wallet, optional tip donation, the rejection of already-finalized orders (supporting idempotency), and the no-card-payment limitation. The FINANCIAL warning further clarifies the risk profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core action is stated first, followed by payment constraints, failure behavior, and the key exclusion. Every sentence carries operational weight, with no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a 2-parameter schema, an output schema, and rich annotations, the description covers the essential workflow: commit a draft, charge wallet, handle insufficient funds, and avoid misuse for new orders. No critical operational detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning by clarifying that tip_cents is added on top of the item total and that the combined amount is charged to the wallet, reinforcing the schema's note that tips go to the PAC.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('commits a draft order') and clearly distinguishes this tool from siblings like create_lunch_order_draft, discard_lunch_order_draft, and cancel_my_lunch_order. It also names the source of the draft order and the financial action performed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says this is not for new orders and directs the agent to use create_lunch_order_draft first. It also defines the payment constraint (wallet-only, no card) and gives a concrete failure-handling path: if balance is insufficient, tell the user to top up and retry.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_for_eventRegister for EventA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesEvent ID from list_school_events - registration must still be open (check the closed flag)
quantityNoNumber of tickets

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoRegistration ID
statusNoRegistration status
eventIdNoEvent the user registered for
quantityNoTickets issued

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses that all tickets go to the caller with no per-student split, that paid events debit the wallet, and that the call fails on insufficient balance, sold out, or closed registration. This significantly clarifies side effects; no statement contradicts the annotations, though the idempotentHint tradeoff is left to the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is compact and front-loaded: purpose first, then financial consequence, failure conditions, and sibling routing. The second sentence is dense but each clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter registration tool, the description covers purpose, ticket allocation, costs, failure modes, and alternative tool, while an output schema exists for return values. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters and already defines event_id and quantity; the description adds real semantic value by stating that quantity is tickets for the caller, enforces minimum 1, and explicitly rules out per-student splitting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Registers the authenticated user for a school event and issues tickets to the caller.' It also differentiates itself from the volunteer sibling by explicitly directing volunteer use to sign_up_for_volunteer_shift.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the key alternative ('To volunteer at an event rather than attend, use sign_up_for_volunteer_shift') and gives conditional guidance for paid events with 'confirm before registering.' Failure conditions (sold out, registration closed, insufficient balance) further clarify when a call would not be appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

schedule_lunch_menu_itemSchedule Lunch Menu Item (Admin)A
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
menu_dateYesDate the item is orderable, YYYY-MM-DD
menu_item_idYesMenu item ID - from list_restaurant_menu_items
available_qtyNoMaximum portions for the day; omit for unlimited
restaurant_idYesRestaurant ID - from list_school_restaurants

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoDaily-menu entry ID
menuDateNoDate the item is orderable, YYYY-MM-DD
menuItemIdNoMenu item scheduled
availableQtyNoPortion cap for the day; null means unlimited

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey write/non-read, non-destructive, and idempotent behavior. The description adds value by specifying the role requirement, the 'WRITE - confirm with the user' confirmation protocol, and the scope limitation ('This only schedules the item'). No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact but information-dense: admin marker, action, scope limitation, sibling alternative, role requirement, confirmation prompt, and ID sources all appear in a few sentences. Key operational facts are front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering idempotency/safety, the description supplies the remaining necessary context: role, confirmation, retirement alternatives, and ID source guidance. Nothing critical for selecting and invoking this tool is missing, though it could explicitly mention date format, but that is already in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds useful context by pointing to the source list tools for restaurant_id and menu_item_id, and by explaining available_qty as 'optionally capping portions' / 'omit for unlimited', which reinforces the schema semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Puts a restaurant menu item on the orderable menu for a given date'. It explicitly distinguishes this action from retiring an item via update_restaurant_menu_item or archive_restaurant_menu_item, which clearly separates it from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides when-not guidance by naming alternatives for retirement, states the required roles ('Requires pac_cordinator or lunch_cordinator role'), and instructs the agent to get IDs from list_school_restaurants and list_restaurant_menu_items. This leaves no ambiguity about when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sign_up_for_volunteer_shiftSign Up for Volunteer ShiftA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
shift_idYesVolunteer shift ID - from the event's volunteer shifts (list_school_events)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoSignup ID
statusNoSignup status
shiftIdNoVolunteer shift signed up for

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations: no payment is involved, the call fails when the shift is full or cancelled, and it explicitly labels itself as a WRITE operation requiring user confirmation before executing. These details complement the idempotentHint and destructiveHint annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Each sentence earns its place: the core action, the no-payment clarification, the shift_id disambiguation with sourcing instructions, the failure triggers, the guest alternative, and the confirmation guardrail. The description is compact but information-dense, with the main purpose front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema and complete annotations, the description covers everything an agent needs to invoke it correctly: parameter semantics, source of the ID, failure conditions, alternative usage, and user confirmation. There are no notable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description goes further by clarifying that shift_id refers to a shift within an event, not the event itself, and directs the agent to list_school_events for retrieval—value that the schema description alone does not fully convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Signs up'), names the resource ('volunteer shift'), and adds critical distinctions: it is for the authenticated user, involves no payment, and shift_id is a shift within an event, not the event itself. This clearly separates it from sibling tools like register_for_event and the event-level operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when the tool is appropriate (signing up for a volunteer shift) and directly names the alternative for guests: 'To attend an event as a guest instead, use register_for_event.' It also instructs where to obtain shift_id via list_school_events, leaving no ambiguity about the prerequisite data source.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_lunch_order_draftUpdate Lunch Order DraftA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNoReplacement line items (menu_item_id from get_lunch_menu + quantity); replaces all existing items when provided
order_idYesDraft order ID from create_lunch_order_draft - must still be in draft status
menu_dateNoNew date the lunch is served, YYYY-MM-DD

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoOrder status (draft)
orderIdNoUpdated draft order ID

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral detail beyond the annotations: items are replaced wholesale, the total is recomputed from price times quantity, and only unpaid draft orders can be updated. It correctly complements readOnlyHint=false and destructiveHint=false by framing the operation as a controlled, reversible-enough edit with ownership requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense and front-loaded with the core behavior, but it contains minor redundancy about draft status ('must still be in draft status' and 'Only draft orders can be updated'). Still, it earns its length by covering ownership, replacement semantics, and post-finalization routing in a compact form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, an output schema, and no nested objects, the description covers all essential context: what changes, what is required, what the preconditions are, how totals behave, and how to handle finalized orders. An agent has enough information to invoke the tool correctly and to avoid destructive mistakes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds crucial semantics beyond the schema: items must be the complete replacement list, the update replaces existing items entirely, and the total is recomputed from price times quantity. It also clarifies that order_id comes from create_lunch_order_draft, reinforcing the schema's provenance note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Replaces the items and/or menu_date') on a specific resource ('unpaid draft order'), and clearly scopes it to drafts not yet finalized. It also implicitly distinguishes this tool from siblings like discard_lunch_order_draft, pay_lunch_order_draft, and cancel_my_lunch_order by emphasizing draft-state editing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use the tool: the order must be owned by the caller and still in draft status. It also provides the alternative for finalized orders ('use cancel_my_lunch_order'), and instructs the caller to pass the complete items list and confirm with the user, giving clear operational guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_restaurant_menu_itemUpdate Restaurant Menu Item (Admin)A
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew display name for the item
caloriesNoCalorie count
is_activeNoWhether the item stays on the restaurant menu - set false to retire it
cost_centsNoKitchen cost in cents (internal margin tracking)
descriptionNoNew item description shown to parents
ingredientsNoIngredient list
price_centsNoSale price in cents (e.g. 550 = $5.50)
menu_item_idYesMenu item ID - from list_restaurant_menu_items
restaurant_idYesRestaurant ID - from list_school_restaurants

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoMenu item ID
nameNoItem name
isActiveNoWhether the item is on the restaurant menu
priceCentsNoSale price in cents
isAvailableNoWhether the item can currently be ordered

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, destructiveHint=false, idempotentHint=true. The description adds critical behavioral context: partial update semantics (only provided fields change), the need to confirm changes with the user, role requirements, and the distinction from related tools. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and partial-update semantics, then flows through use cases, exclusions, role, and source IDs. Every sentence carries necessary information—no filler. It is compact given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter write operation with an output schema, the description covers purpose, usage, exclusions, role, and ID sourcing. Nothing essential for correct invocation is missing. The output schema handles return values, so description doesn't need to.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage with descriptive parameter comments, so baseline is 3. The description adds value beyond schema by highlighting price_cents as FINANCIAL (requiring confirmation) and is_active=false for retiring, and explains the partial-update behavior that affects all parameters. This pushes it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('partially updates'), a resource ('existing menu item'), and clearly distinguishes from siblings by naming schedule_lunch_menu_item and archive_restaurant_menu_item as alternatives for different operations. The use cases (renames, price changes, retiring) further clarify the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains when to use this tool (partial updates for menu items) and when not to: day-level orderability goes to schedule_lunch_menu_item, permanent removal goes to archive_restaurant_menu_item. Also requires specific roles and confirms it's a WRITE operation, giving clear guidance on invocation context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_school_eventUpdate School Event (Admin)A
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew event name
statusNoEvent status - cancelled stops sales, completed closes the event
ends_atNoEnd time (e.g. 20:00)
event_idYesEvent ID - from list_school_events
locationNoEvent location (e.g. Gymnasium)
starts_atNoStart time (e.g. 18:30)
event_dateNoEvent date, YYYY-MM-DD
descriptionNoNew event description shown to parents
max_capacityNoMaximum number of attendees/tickets
ticket_price_centsNoTicket price in cents; 0 for free events

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoEvent ID
nameNoEvent name
statusNoEvent status after the update
eventDateNoEvent date, YYYY-MM-DD

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set readOnlyHint=false and idempotentHint=true, but the description adds crucial behavioral context: partial update semantics (omitted fields keep current values), role authorization, and a mandatory user confirmation step. It also notes that event_id comes from list_school_events, which is an operational behavior. No contradiction with annotations; the description enhances transparency significantly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core semantic (partial update) in the first sentence, and each subsequent sentence delivers a distinct piece of action-guiding information: usage scenarios, alternative routing, role requirement, confirmation note, and ID source. No filler or redundant text; it earns every word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 10 parameters, a single required field, an enum for status, and an output schema, the description is remarkably complete. It covers the operation's semantics, usage boundaries, authorization, safety confirmation, and data sourcing. The output schema handles return value details, so no further return explanation is needed. Nothing an agent needs to correctly invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value by explaining the global partial-update semantic (provided fields change, omitted fields retain values), which is not explicit in the schema. It also specifies the source of event_id. However, it does not elaborate on each parameter individually, relying on the schema for that, so a 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Partially updates an existing school event'. It immediately differentiates from alternatives by explaining the partial update semantics and explicitly routing to cancel_school_event for outright cancellation. The usage examples (reschedules, capacity/price changes, status transitions) further clarify the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'Use for reschedules, capacity or price changes, and status transitions'. It also gives an explicit exclusion: 'Prefer cancel_school_event to cancel outright'. Additionally, it mentions role requirements (pac_cordinator or event_cordinator) and that it is a write operation requiring user confirmation, covering prerequisites and safety.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 50 tool updatesv2.5.1
    • Addedarchive_restaurant_menu_item
    • Removedcancel_event
    • Addedcancel_my_event_registration
    • Addedcancel_my_lunch_order
    • Addedcancel_my_volunteer_signup
    • Removedcancel_order
    • Addedcancel_school_event
    • Removedcreate_draft_order
    • Removedcreate_event
    • Addedcreate_lunch_order_draft
    • Removedcreate_menu_item
    • Removedcreate_restaurant
    • Addedcreate_restaurant_menu_item
    • Addedcreate_school_event
    • Addedcreate_school_restaurant
    • Removeddelete_menu_item
    • Addeddiscard_lunch_order_draft
    • Removedfinalize_order
    • Removedget_daily_menu
    • Removedget_daily_orders
    • Addedget_lunch_menu
    • Removedget_monthly_orders
    • Addedget_my_context
    • Addedget_my_wallet_balance
    • Removedget_orders
    • Removedget_upcoming_events
    • Removedget_user_info
    • Removedget_wallet_balance
    • Removedget_wallet_status
    • Removedlist_menu_items
    • Addedlist_my_event_registrations
    • Addedlist_my_lunch_orders
    • Addedlist_my_volunteer_signups
    • Addedlist_restaurant_menu_items
    • Addedlist_school_events
    • Changedlist_school_restaurants6 fields changed
      • addedOutput schema / properties / restaurants / description
        Added value: +"Active restaurants attached to the school (inactive ones are excluded)"
      • addedOutput schema / properties / restaurants / items / properties / description / description
        Added value: +"Restaurant description"
      • addedOutput schema / properties / restaurants / items / properties / id / description
        Added value: +"Restaurant ID - input to menu-item and daily-menu tools"
      • addedOutput schema / properties / restaurants / items / properties / isActive / description
        Added value: +"Whether the restaurant is active"
      • addedOutput schema / properties / restaurants / items / properties / logoUrl / description
        Added value: +"Restaurant logo URL"
      • addedOutput schema / properties / restaurants / items / properties / name / description
        Added value: +"Restaurant name"
    • Removedorder_lunch
    • Addedpay_lunch_order_draft
    • Removedregister_event
    • Addedregister_for_event
    • Addedschedule_lunch_menu_item
    • Removedset_daily_menu
    • Removedset_menu_item_price
    • Addedsign_up_for_volunteer_shift
    • Removedsign_up_to_volunteer
    • Removedupdate_event
    • Addedupdate_lunch_order_draft
    • Removedupdate_menu_item
    • Addedupdate_restaurant_menu_item
    • Addedupdate_school_event
  2. 25 tool updatesv2.4.3
    • First observedcancel_event
    • First observedcancel_order
    • First observedcreate_draft_order
    • First observedcreate_event
    • First observedcreate_menu_item
    • First observedcreate_restaurant
    • First observeddelete_menu_item
    • First observedfinalize_order
    • First observedget_daily_menu
    • First observedget_daily_orders
    • First observedget_monthly_orders
    • First observedget_orders
    • First observedget_upcoming_events
    • First observedget_user_info
    • First observedget_wallet_balance
    • First observedget_wallet_status
    • First observedlist_menu_items
    • First observedlist_school_restaurants
    • First observedorder_lunch
    • First observedregister_event
    • First observedset_daily_menu
    • First observedset_menu_item_price
    • First observedsign_up_to_volunteer
    • First observedupdate_event
    • First observedupdate_menu_item

TDQS

A4.4/5.0

Scored across 26 tools

Disambiguation5/5

Each tool targets a distinct resource and action: context, wallet, lunch orders (draft/finalized), events, registrations, volunteer signups, restaurants, and menu items. No two tools overlap in purpose; even similar cancellation tools are clearly differentiated by entity type.

Naming Consistency5/5

Tool names consistently follow a verb_noun pattern (get_my_context, list_school_events, cancel_my_lunch_order, create_restaurant_menu_item). The 'my' prefix for user-scoped operations and 'school'/'restaurant' prefixes for admin operations are applied uniformly.

Tool Count3/5

At 26 tools, the surface is heavy and exceeds the typical 15-tool sweet spot. The count is justified by the broad domain (lunch, events, volunteering, restaurants, wallet), but it borders on overwhelming and would benefit from consolidation or sub-grouping.

Completeness3/5

The lifecycle coverage is strong for lunch orders, events, and volunteer signups (create/read/update/cancel). However, restaurants lack update and delete/archive tools (only create and list exist), and there is no tool to manage wallet top-ups or transaction history, leaving minor gaps agents must work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to interact with the IIIT Hyderabad Mess Management System through natural language, allowing students to view menus, manage meal registrations, check bills, submit feedback, and configure preferences.
    29
    11
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables LLMs to interact with the IIIT Hyderabad Mess System to manage meal registrations, view menus, and track billing. It supports conversational commands for tasks like cancelling meals, estimating nutrition, and checking account balances.
    45
    5
    AGPL 3.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with the IIIT-H mess dining and marketplace systems through resources, tools, and prompts for meal planning, billing analysis, and registration modifications.
    27
    GPL 3.0
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for the Löwen Menü IBS5 school-lunch ordering system, enabling an LLM to browse weekly menus, manage a shopping cart, and place meal orders.
    7
    MIT