MCP App Store
by KeenEthics
Travel
Otto Travel icon

Otto Travel

by Otto Trip, Inc.

Overview

Otto brings business travel bookings into Claude. Search flights and hotels, compare options, then book your choice. Your preferences filter search results (cabin class, seat, hotel brand, airline), and your loyalty numbers attach to reservations. When plans change, exchange or cancel a flight or hotel. It retrieves trip details on request: flight times, hotel addresses, confirmation numbers.

Tools

book_car

ChatGPT
Reserve a rental car (pay-at-pickup — nothing is charged at booking). Confirm vendor, class, dates, locations, and total price with the user before calling. Search ids expire in ~15 minutes; book promptly after search_cars.

book_flight

ChatGPT
Book the selected flight using the user's saved payment method and returns a PNR confirmation. For round-trip, book the return flight_id — it books both legs.

book_hotel

ChatGPT
Book the selected hotel room using the user's saved payment method and returns a reservation confirmation. Confirm price and cancellation policy with the user before calling.

cancel_account_deletion_request

ChatGPT
Cancel your pending account deletion request, leaving your account active.

cancel_booking

ChatGPT
Cancel a flight, hotel, or car rental booking. Two-step flow: first call with confirmed=false to see cancellation details (refund, fees, policy), then confirmed=true to execute. Irreversible — always confirm with user before executing. Requires booking_management skill key.

forget

ChatGPT
Forget a stored preference or memory (a #id from read_memory) when the traveler asks you to drop it or says it is no longer true. A correction ("window now, not aisle") is remember(replaces=…), not forget.

get_booking_detail

ChatGPT
Get full detail on a specific booking — enriched content (all PNRs, manage-booking link, ticket info, seats, baggage, hotel amenities, car specs). Pass diagnose=true to also run a live supplier cross-check that tells you whether a booking is really confirmed/ticketed, in a security review, awaiting company approval, or already confirmed. Without diagnose, returns enriched detail only (no supplier round-trip).

get_bookings

ChatGPT
Retrieve the user's confirmed flight and hotel bookings with live status and confirmation codes.

get_hotel_rooms

ChatGPT
Load the bookable room options for one or more hotels with prices, bed types, and cancellation policies. These rates ARE bookable quotes (unlike search_hotels which only previews a 'from' anchor). ALWAYS call this tool to surface room options once the user has picked a hotel (or a small shortlist) — the search_hotels brief alone is not enough to book. Present the top 3 rooms as a numbered list and wait for the user to pick — typically the cheapest refundable, the cheapest overall, and one notable upgrade. Do NOT call book_hotel on a room you chose yourself, even if the user said 'book the cheapest' or 'book the best'. See the hotel_search skill for the full presentation rule.

list_managed_travelers

ChatGPT
List the people you're authorized to book and search for on their behalf — travelers who granted you delegate access in Otto. Returns each traveler's id, name, and email. To act for one of them, pass their id as the on_behalf_of argument on a search or book tool. Returns an empty list if no one has granted you access.

query_flights

ChatGPT
Filter the previously returned flight search results with SQL to find specific options by price, time, airline, stops, or seat availability. ALWAYS call this tool to present or refine flight options — search_flights alone returns only a summary brief and a queryable handle; this tool is the only path to the actual flight rows. Call it immediately after search_flights completes to present the first set of options, and again whenever the user refines criteria (e.g. switches airline, narrows times, asks for cheaper fares). Do NOT keep polling task_status after search completes — once the task_status response carries a result with a handle, your next step is this tool. Present results conversationally; keep summaries concise (top 2–4 options with price, route, and a single distinguishing detail each).

read_loyalty_programs

ChatGPT
Read your stored frequent flyer and hotel loyalty program numbers.

read_memory

ChatGPT
Read what Otto knows about the traveler: stored travel preferences and remembered facts, each with a #id that remember(replaces=…) and forget take. Read it at conversation start; it informs every decision.

read_notification_settings

ChatGPT
How you get Otto's notifications: channels on per category (email, push, …) and which recommended channel is off. Read-only — changes happen on the Otto settings page.

read_preferences

ChatGPT
Read your stored travel preferences as a human-readable summary.

read_skill

ChatGPT
Read a skill guide before using tools. ALL other tools require skill keys from this tool. Call this ONCE per flow. The response bundles every key needed for the tools the skill unlocks (including universal prerequisites). MANDATORY: every subsequent tool call must include `skill_keys` set to the exact `keys` list from this response. Pass the whole list — do NOT pick a single string, do NOT omit the param, do NOT regenerate the keys. The same keys list works for every tool the skill unlocks during this conversation. Do NOT call read_skill again to fetch a missing prerequisite key; the bundle already includes it. After reading, immediately proceed with the user's request using the unlocked tools — do NOT re-confirm with the user before running a read-only search. Available skills: booking_management, car_booking, car_search, flight_booking, flight_exchange, flight_search, getting_started, hotel_booking, hotel_exchange, hotel_search, preferences, seat_selection

render_cars

ChatGPT
Draw rental-car options as an interactive card. Pass the search_cars rows to show, in the order to show them (pass each row back as you received it). Rendering only: the card lists exactly those cars in that order — no ranking, no server-written recommendation; reasons are yours to add. At most 6 cars. A Select click reaches you as a Card selection note naming the car_id; see the car_rendering skill.

render_flights

ChatGPT
Draw flight options from a search handle as an interactive card. Pass either the offer_ids to show, in the order to show them, or a SQL SELECT over the handle (same views as query_flights). Rendering only: the card lists exactly the rows you name, in your order, with each departure's other fares under it — no ranking, no server-written recommendation; reasons (required, 1-3 per departure) say why you picked each. At most 6 departures. A Select click reaches you as a Card selection note; see the flight_rendering skill.

render_hotel_rooms

ChatGPT
Draw one hotel's rooms as an interactive card. Pass the get_hotel_rooms rooms to show, in the order to show them (pass each room back as you received it). One property per card. Rendering only: no ranking, no server-written recommendation; reasons are yours to add. At most 6 rooms. A Select click reaches you as a Card selection note naming the room_id; see the hotel_room_rendering skill.

render_hotels

ChatGPT
Draw hotel options as an interactive card. Pass the search_hotels rows to show, in the order to show them (pass each row back as you received it). Rendering only: the card lists exactly those properties in that order — no ranking, no server-written recommendation; reasons are yours to add. At most 6 properties. A Select click reaches you as a Card selection note naming the hotel_id; see the hotel_rendering skill.

request_account_deletion

ChatGPT
File a request to delete your Otto account, after two exact typed confirmations. This never deletes anything: it creates a request a company admin must approve. Relay the returned message verbatim and pass back exactly what the user types next.

search_cars

ChatGPT
Search rental cars at a location. Returns pay-at-pickup options, cheapest first. Driver age comes from the user's saved profile (date of birth) — there is no age parameter. If the profile has no DOB the search returns PROFILE_INCOMPLETE; ask the user to complete their profile rather than guessing an age. All rates are paid at the counter — booking only guarantees the reservation.

search_flights

ChatGPT
Search live, bookable flight inventory between two airports for given dates and cabin. Returns a queryable handle plus a brief — use query_flights next to filter results.

search_hotels

ChatGPT
Search live, bookable hotel inventory by location and dates. Returns up to 50 hotels sorted by price. Each hotel's nightly_rate / total_rate is the lowest available rate Spotnana found at the property — a 'from' preview for sorting and shortlisting, NOT the rate the user books. The actual bookable rate ladder is only available via get_hotel_rooms. Render search-hotels prices as 'from $X/night' in prose so the user understands the anchor. ALWAYS call this tool to present hotel options the moment the user asks for hotels, and again whenever they refine criteria (e.g. switches brand, narrows location, asks within budget). Present results conversationally; keep summaries concise (top 4 options with name, 'from' price, and a single distinguishing detail each).

task_status

ChatGPT
Poll an async task with long-polling. Blocks up to timeout_ms waiting for progress. Returns current step, progress, and final result when complete.

write_loyalty_program

ChatGPT
Add or remove a frequent flyer or hotel loyalty program number.

write_preference

ChatGPT
Add, remove, or update travel preferences using plain language.

book_flight

Claude

book_hotel

Claude

cancel_booking

Claude

get_bookings

Claude

get_hotel_rooms

Claude

query_flights

Claude

read_loyalty_programs

Claude

read_preferences

Claude

read_skill

Claude

search_flights

Claude

search_hotels

Claude

task_status

Claude

write_loyalty_program

Claude

write_preference

Claude

Capabilities

WritesInteractive

App Stats

41

Tools

ChatGPT, Claude

Platforms

Works with

ChatGPT
Claude

Data refreshed daily