MCP server for uPace ERJCC (My J) — JCC class scheduling, reservations, equipment booking, and facility management
The server provides 24 tools with consistent naming conventions (verb_noun pattern) and visible tool registration via @mcp.tool() decorators in src/myj_mcp/server.py. However, critical gaps emerge in parameter descriptions, output schema documentation, and error handling. Tool descriptions are present but generic (100-150 chars on average), meeting minimum thresholds but lacking the specificity required for LLM planning. Most tools have parameters with types but NO descriptions, e.g., reserve_equipment has parameters like 'slot_id', 'time', 'duration' that lack per-parameter guidance on format, valid ranges, or constraints. Output schemas are completely undocumented: tools return json.dumps() of model objects, but the actual field structure, cardinality, pagination behavior, and error response formats are invisible. Parameters with 'date' fields lack format validation hints (are partial dates accepted? timezone handling?). No error guidance is provided, a failed authentication or API call will surface a raw exception, not a structured recovery hint. The server relies heavily on _ensure_auth() for state management but does not document retry behavior, timeout handling, or what happens when credentials are invalid. Per-tool scoring reveals consistent weaknesses: naming is solid (average 75), but description and schema scores lag (average 45 each).
Get JCC alerts and notifications.
Book a personal training / appointment session.
Cancel a class/event reservation or leave a waitlist.
Remove myself from a waitlist.
Get JCC facility information (hours, location, etc.).
Get reservations for family members.
Get available time slots for a PT/appointment session.
Output schemas completely undocumented. Tools return JSON via json.dumps() but field structure, cardinality, pagination, and error formats are invisible. LLMs cannot plan downstream calls without knowing what fields to extract.
Parameter descriptions missing for 18 of 24 tools. Parameters like 'slot_id', 'time', 'duration', 'trainer_id', 'date' lack per-parameter guidance on format, valid ranges, timezone handling, or constraints. LLMs must guess at correct input format.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 42 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Get classes/events I'm on the waitlist for.
List available classes or events at the JCC.
List available equipment for booking.
List available events at the JCC.
List available personal training / appointment sessions (basketball, swimming, etc.).
Authenticate with the uPace ERJCC (My J) API.
Mark an alert/notification as read.
List my current reservations (classes, events, equipment).
Get other programs and custom links available at the JCC.
Reserve/book a class or event.
Reserve equipment at the JCC (babysitting, offices, etc.). Use list_equipment first to get available time slots and durations.
Search for classes, equipment, and other offerings.
Submit feedback/rating for a class, equipment, or event.
Add or remove a class from favorites.
Get user profile information.
Get available video content categories.
Get video listings, optionally filtered by category.
No error handling guidance. Tools fail silently or surface raw exceptions (e.g., authentication failure, API errors) without recovery hints. LLMs receive bare 'error' with no actionable next steps.
Destructive operations lack confirmation pattern. cancel_reservation and delete_waitlist accept destructive parameters but provide no dry-run or confirmation mechanism to prevent accidental data loss.
Date/time format constraints not explicit. Tools accept 'date' as 'YYYY-MM-DD' and 'time' as e.g. '9:00 AM' but lack validation guidance. Parameter descriptions should specify exact format, timezone, and whether partial dates are accepted.
Credentials exposed to environment variables (UPACE_EMAIL, UPACE_PASSWORD) without documented rotation, revocation, or secret management strategy. Stored plaintext in shell history or .env files.
No pagination guidance. Tools like list_classes, list_events, list_equipment, list_pt_sessions return unbounded lists but lack page/offset parameters or limit documentation. Large result sets could exhaust context windows.
Generic tool descriptions lacking decision context. Many descriptions (alerts, facility_info, user_info, other_programs) are under 100 chars and do not explain WHEN to call vs similar tools or what dependencies exist.