MCP tool registry for Kamra hotel property management system. Exposes governed API endpoints for front desk, operations, housekeeping, billing, revenue, and other hotel management functions. Tools are filtered by user roles and property-enabled modules.
Kamra exposes 24 well-organized hotel PMS tools with consistent naming (verb_noun pattern: create_booking, check_in, cancel_booking) and clear, domain-specific descriptions (avg ~120 chars). All tools have input schemas with typed parameters. However, parameter descriptions are entirely absent, the schema shows only type and name, no guidance on valid values, ranges, or dependencies. Output schemas are not documented. Error handling and recovery guidance are missing. Tool composition is strong (each does one thing; IDs chain well), but LLM-facing descriptions lack actionable constraints (enums, formats, ranges). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, REVERSIBLE, WRITE).
Park a stay on the waitlist (no room) — for dates that are sold out or restricted. Promote it later with promote_waitlist when a room frees.
Move a service ticket along: In Progress, Resolved, Closed, or Cancelled. Pass a resolution_note when resolving.
Change a stay's dates (extend/shorten). Re-prices when auto_price is on and re-checks room overlaps. Confirm the new dates with staff before calling.
Room availability and nightly rates per room type for the next N days. start_date YYYY-MM-DD (default today).
Room types, meal plans, rate plans and corporate accounts available for booking at this property.
Cancel a confirmed booking. The property's cancellation policy applies automatically — free outside the window, else the configured fee posts to the folio. Returns a cancellation number — always give it to the guest. Reasons: Guest request, Change of plans, Duplicate booking, Payment failed, Weather / travel disruption, Booked elsewhere, Other. Only waive the fee when a manager authorizes it; the waiver is logged.
Parameter descriptions entirely absent. Schema shows only type and name; no guidance on valid values, ranges, enums, formats, or dependencies. E.g., 'meal_plan' (string) lacks enum values; 'days' (integer) lacks min/max bounds; 'status' in find_reservations lacks allowed values (Confirmed, Checked In, etc.).
Output schemas not documented. Tools return data but LLMs cannot plan downstream calls or extract fields. E.g., availability returns room types and rates, but structure is opaque. quote returns a price, but does it include taxes, fees, breakdown? stay_detail returns 'folio balance', is it a single number or {paid, due}?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
What cancelling would cost right now (policy window, fee basis, estimated fee). ALWAYS read this to the guest before cancelling.
Check a guest in (opens their folio, marks the room occupied).
Check a guest out (posts remaining nights to the folio, frees the room, queues housekeeping). Confirm with the user first.
Create a reservation. Dedupes the guest by phone, auto-assigns a free room, applies the voucher, prices via the engine.
Log a guest request / issue as a tracked ticket. Categories: Housekeeping, Room Service, Maintenance, Front Desk, Concierge, Complaint, Other. Priority sets the SLA.
Find reservations by guest name, room number, or reference — optionally filtered by status (Confirmed, Checked In, Checked Out, Cancelled, No Show, Waitlisted). Resolve a room or name to a reservation before acting.
Today's snapshot: arrivals, departures, in-house guests, room board and the hours-saved counter.
A guest's full history: profile, stats, chronological timeline. Load this before talking to a returning guest.
Find guests by name or phone, with stay stats and lifetime value.
Supervisor hands a task to a specific housekeeper (awaits accept).
Housekeeping phone view: prioritized task queue and room board. Checkout cleans for rooms with an arrival today jump the queue.
Start or complete a housekeeping task. Status: In Progress, Done, or Verified.
Open service tickets with SLA/overdue status.
Move a stay to a different room (pre-arrival or mid-stay). Overlap guard re-runs; on a checked-in move the old room goes Dirty.
Promote a waitlisted stay into a free room (Confirmed). Fails if no room is free for its dates.
Price a stay (deterministic: occupancy pricing, seasons, meal plan, voucher, GST). Use before every booking.
Full detail for one reservation: dates, room, guest + stay history, folio balance (paid/due), booker, and which actions are available.
Waitlisted stays that can NOW be booked — a room has freed up for their dates. Each item includes the guest name and phone, so you can proactively reach out. Poll this to catch openings the moment they appear — the wedge for turning a sold-out 'no' into a booking.
No tool annotations despite clear risk levels. Tools marked READ_ONLY, WRITE, REVERSIBLE, WRITE in metadata but not exposed as readOnlyHint, destructiveHint, idempotentHint in MCP schema. Agents cannot infer safety/retry semantics.
No error handling or recovery guidance. Tools fail silently or return opaque errors. E.g., promote_waitlist 'Fails if no room is free', but what error code/message? How should the agent retry or recover? cancel_booking mentions 'waive_fee' but no guidance on when/why to use it.
Naming inconsistency in housekeeping tools. 'hk_queue' and 'hk_update_task' use abbreviation 'hk' while all other tools spell out full names (check_in, check_out, create_ticket). Abbreviations reduce discoverability and clarity for LLMs.