Local-first MCP server for hut-reservation.org search, availability, and safe booking workflows.
Strong foundation with clear naming, comprehensive schemas, and good descriptions. All 10 tools have explicit registrations with Zod schemas and descriptions. Tool names follow verb_noun pattern (search_huts, prepare_booking, confirm_cancellation). Descriptions average ~150 chars, within the 10-1024 baseline. Schemas include proper constraints (min/max, enums, regex patterns). Tool annotations present (readOnlyHint, destructiveHint, idempotentHint). Key gaps: parameter descriptions are missing entirely (Zod schemas lack descriptions for individual params), output schemas are not documented, and error handling lacks recovery guidance. The server instructions provide context but do not substitute for per-parameter documentation.
Report whether hut-reservation.org credentials and an upstream session are available.
Confirm a prepared booking draft. Headless submit only runs when experimental writes are enabled and the draft contains a raw upstream payload.
Confirm a cancellation draft. This currently returns a browser handoff because confirmed-reservation cancellation semantics are not verified.
List authenticated user's reservations through hut-reservation.org myReservations.
Check availability and create a short-lived booking draft. By default this returns a browser handoff URL rather than writing upstream.
Fetch reservation summary/fee context and create a short-lived cancellation draft. Confirmed cancellation remains browser-handoff only.
Parameter descriptions missing in Zod schemas. Zod objects define constraints (min, max, positive) but lack descriptions for individual parameters (country, limit, force, lat, lon, radiusKm, etc.). LLMs cannot infer parameter meaning from names alone, 'limit' could mean result count, timeout, or API quota.
Output schemas not documented. Tools return structured results (via okResult/errorResult) but the response schema is not declared in tool definitions. LLMs cannot plan downstream calls or extract required fields without knowing what fields to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2025-06-18+ | v2 |
Reverse-geocode cached hut coordinates through the configured Nominatim-compatible provider. Requires explicit geocoder configuration.
Fetch hut-reservation.org hut list and hut details into the local cache. This performs read-only upstream calls and mutates only the local cache.
Search huts with enough free places for every night in an exact arrival/departure period. Tool dates are ISO YYYY-MM-DD. By default all matched cached huts are checked; maxCandidates intentionally returns a partial result.
Search cached huts by country, canton cache, text, and/or distance around coordinates. Does not call a geocoder during search.
Error handling lacks recovery guidance. errorResult() returns only {error: message} with no actionable next steps. When a booking fails, the LLM does not know whether to retry, call a different tool, or ask the user. No error categorization (retryable vs user-fixable vs fatal).
Destructive operations (confirm_booking, confirm_cancellation) lack confirmation/dry-run pattern. These tools mutate state irreversibly. No mechanism to preview changes or require explicit user approval before execution. Agents can accidentally book or cancel without safeguards.
Complex parameter relationships undocumented. prepare_booking accepts optional guestData and rawReservationPayload; prepare_cancellation accepts optional newArrivalDate/newDepartureDate/newPeopleNumber. Dependencies between these fields and behavior are not explained in parameter descriptions.