Detailed parameter reference and usage patterns for travel butler MCP tools — record_booking, update_itinerary, list_trips, trip_summary, upcoming_travel, and add_document.
Install
npx skillscat add tzeusy/butlers/roster-travel-agents-skills-tool-reference Install via the SkillsCat registry.
Travel Butler Tool Reference
Detailed parameter documentation for the travel butler's domain tools. Consult this reference when you need full parameter signatures, field semantics, or deduplication rules.
record_booking
Parse and persist a booking confirmation or update email payload into the trip container. Links the leg, accommodation, or reservation to the correct trip with full structured field extraction.
Parameters:
payload(dict, required): Structured booking data extracted from the email or message:provider(str): Carrier or provider name (e.g.,"United Airlines","Marriott")type(str): Entity type —"leg"(flight),"accommodation","reservation","car_rental"departure(str): IATA code for origin airport (legs only)arrival(str): IATA code for destination airport (legs only)departure_at(str): ISO 8601 datetime with timezone (TIMESTAMPTZ) for departurearrival_at(str): ISO 8601 datetime with timezone for arrivalpnr(str): Airline record locator / booking referenceconfirmation_number(str): Provider-specific confirmation numberseat(str): Assigned seat (e.g.,"22A")terminal(str): Departure terminalgate(str): Departure gate (if known at booking time)source_message_id(str): Email or message ID — used for deduplication; always pass thismetadata(dict): Any additional fields that don't fit the schema
trip_id(UUID, optional): If known, link directly. If omitted, the tool attempts to match by date/destination and creates a new trip if no match is found.
Key rules:
- Always pass
source_message_id— the tool layer uses this for deduplication. Do not manually check for duplicates. - PNRs are correlation hints, not global unique keys. Always pair with
providercontext. - Never create floating bookings. If no matching trip exists, create one first with
trip_create, then callrecord_booking. - For rebookings, delays, and gate/seat changes, use
update_itinerary— notrecord_booking.
update_itinerary
Apply itinerary changes to an existing trip — time changes, cancellations, seat/gate reassignments, and rebookings. Always preserves prior values in metadata.prior_values.
Parameters:
trip_id(UUID, required): The trip container to updatepatch(dict, required): Fields to update on the target entity:leg_id(UUID): If updating a specific flight legaccommodation_id(UUID): If updating an accommodation- Any mutable field:
departure_at,arrival_at,seat,gate,terminal,status
reason(str, required): Human-readable reason for the change (e.g.,"UA email: flight delay notification")source_message_id(str, optional): Source email ID for audit trail
Key rules:
- Always use
update_itineraryfor mutations (not re-callingrecord_booking). - Prior values are automatically written to
metadata.prior_values— do not overwrite manually. - When processing rebooking emails (subject signals: "gate change", "trip update", "delay notification", "rebooking"), default to
update_itinerary.
list_trips
Query trip containers by lifecycle status and/or date window.
Parameters:
status(str, optional): One of"planned","active","completed","cancelled". Omit to return all statuses.departure_after(str, optional): ISO date — filter trips departing after this datedeparture_before(str, optional): ISO date — filter trips departing before this datelimit(int, optional): Maximum results (default: 50)
Status transitions:planned → active → completed. Direct cancellation (→ cancelled) is allowed from planned or active. Never transition backward (e.g., completed → active).
trip_summary
Return a normalized trip timeline with all linked legs, accommodations, reservations, and document pointers. The single source of truth for a trip's current state.
Parameters:
trip_id(UUID, required): Trip to summarizeinclude_documents(bool, optional): Include attached documents (default:False)include_timeline(bool, optional): Return legs and accommodations sorted by date (default:False)
Returns: Structured dict with:
trip: Core trip metadata (id, destination, status, dates)legs: Flight legs sorted by departure timeaccommodations: Hotel/lodging sorted by check-inreservations: Other reservations (car, restaurant, etc.)documents: Attached documents (ifinclude_documents=True)alerts: Outstanding pre-trip actions (missing documents, pending check-ins)
upcoming_travel
Surface upcoming departures and check-ins within a configurable window, with urgency-ranked pre-trip actions.
Parameters:
within_days(int, required): Look-ahead window in days (e.g.,2for 48-hour scan)include_pretrip_actions(bool, optional): Include urgency-ranked pre-trip action items (default:False)
Pre-trip action types:
boarding_pass_missing: Boarding pass not attachedcheckin_pending: Online check-in window open but not completedseat_unassigned: No seat selectedtight_layover: Connection time < 60 minuteshotel_missing: No accommodation for an upcoming night
add_document
Attach a travel document reference to an existing trip.
Parameters:
trip_id(UUID, required): Trip to attach the document totype(str, required): Document type —"boarding_pass","visa","travel_insurance","passport","booking_confirmation","receipt","other"blob_ref(str, required): Reference to the stored file/attachmentexpiry_date(str, optional): ISO date — document expiry (for passports, visas, insurance)metadata(dict, optional): Additional context:flight(str): Flight number (for boarding passes)seat(str): Seat assignmentgate(str): Gate (for boarding passes)policy_number(str): Insurance policy numberholder(str): Document holder name
Key rules:
- Boarding passes, visas, and insurance should always include
expiry_datewhen known. - Pass
source_message_idin metadata when ingesting from email for provenance tracking.
Memory Classification — Travel Domain
Subject
- User preferences and identity:
"user"or the user's name - Airlines: airline name (e.g.,
"United Airlines","Delta","ANA") - Hotel chains: chain name (e.g.,
"Marriott","Hilton") - Destinations: city or country (e.g.,
"Tokyo","Japan") - Airports: IATA code (e.g.,
"SFO","NRT")
Predicates
preferred_airline: Preferred carrier for domestic or international travelpreferred_seat: Seat type preference (window,aisle,bulkhead)passport_nationality: Country of passport (ISO alpha-2 code)passport_expiry: Passport expiry date (for document expiry alerts)frequent_flyer: Loyalty program name and membership numberhotel_preference: Preferred chain or room typetravel_style: Budget, business, or luxuryknown_airport: Home airport IATA codedietary_preference: In-flight meal preferencetsa_precheck: TSA PreCheck or Global Entry known traveler number
Permanence
stable: Passport info, frequent flyer numbers, home airport, TSA/Global Entry numbers, long-standing preferencesstandard(default): Current trip context, active booking patterns, recent destination preferencesvolatile: Real-time flight status, gate changes, delay notifications, live check-in reminders
Tags
travel-preference, loyalty, passport, flight, hotel, document, reminder, delay
Example Facts
# From: "I always fly United when I can"
memory_store_fact(
subject="user",
predicate="preferred_airline",
content="United Airlines for both domestic and international travel",
permanence="stable",
importance=7.0,
tags=["travel-preference", "flight"]
)
# From: "My passport expires June 2028"
memory_store_fact(
subject="user",
predicate="passport_expiry",
content="US passport expires 2028-06-14",
permanence="stable",
importance=9.0,
tags=["passport", "document"]
)
# From: "I'm a United MileagePlus member, number UA-7382910"
memory_store_fact(
subject="United Airlines",
predicate="frequent_flyer",
content="MileagePlus member number UA-7382910",
permanence="stable",
importance=8.0,
tags=["loyalty", "flight"]
)
# From: "I always book window seats"
memory_store_fact(
subject="user",
predicate="preferred_seat",
content="window seat",
permanence="stable",
importance=6.0,
tags=["travel-preference", "flight"]
)
# From: "I'm flying out of SFO most of the time"
memory_store_fact(
subject="user",
predicate="known_airport",
content="SFO — San Francisco International (home airport)",
permanence="stable",
importance=8.0,
tags=["travel-preference", "flight"]
)