Build travel into your AI assistant
Anuju exposes live flight and hotel search, real pricing and secure booking over the Model Context Protocol. Connect any MCP-compatible client and it can find options, quote them, and hand your customer into an Anuju checkout. Version 1.0.0.
What the Anuju server does
Search and compare
Resolve a city to an airport code, search one-way or round-trip flights, look up a hotel destination and search stays. Results carry real airline, schedule, baggage, room and rate detail, with the price the customer would actually pay.
Book securely
Once an option is chosen, the assistant creates the booking and returns a hosted checkout link. The customer pays in Anuju's own checkout; the assistant never sees card details and never handles a payment credential.
Follow up
After payment the assistant can read the booking and its payment status, and follow the airline-side or supplier-side confirmation through to ticketing or a confirmed reservation.
Act for the customer only
Every tool runs as the signed-in customer. An assistant can only ever reach that customer's own bookings, and permissions are enforced on the server rather than trusted from the model.
Point your client at the endpoint
MCP endpoint
https://anuju.com/api/mcp- Transport
- Streamable HTTP
- Authentication
- OAuth 2.0 (sign-in required)
The server is public and discoverable: an unauthenticated request is answered with 401 and a WWW-Authenticate header naming its protected-resource metadata, so a compliant client can discover the authorization server on its own.
Client setup
- 1Open your profile menu, then go to Settings → Connectors.
- 2Choose Add custom connector and name it Anuju.
- 3Paste the endpoint URL into the URL field and click Add.
- 4When the consent screen opens, sign in with your Anuju account and approve access.
MCP tools
Flights
invoke_search_flightsSearch flights
Search live flight inventory and real prices for a one-way or round-trip journey. Returns offers with airline, flight numbers, times, stops, duration, cabin, baggage and total price.
| Argument | Type | Notes |
|---|---|---|
origin* | string | Departure airport IATA code, e.g. LOS. |
destination* | string | Arrival airport IATA code, e.g. LHR. |
date_from* | string | Departure date, YYYY-MM-DD. |
return_from | string | Return date, YYYY-MM-DD. Omit for one-way. |
adults | number | 1–9. Defaults to 1. |
children | number | 0–8. Defaults to 0. |
infants | number | 0–4. Defaults to 0. |
cabin_class | string | M economy, W premium, C business, F first. |
limit | number | 1–100 offers. Defaults to 100. |
sort | string | price or duration. Defaults to price. |
Returns: Offers with airline, flight numbers, departure and arrival times, stops, duration, cabin, baggage allowance and total price.
invoke_search_flight_locationsLook up airports and cities
Resolve a city or airport name into the IATA codes that search_flights needs.
| Argument | Type | Notes |
|---|---|---|
query* | string | City or airport name, at least 2 characters. |
Returns: Matching airports and cities with their IATA codes and countries.
invoke_get_flight_booking_statusGet airline booking status
Check the airline-side status of one of the signed-in customer's own flight bookings: whether ticketing is complete and any airline reference.
| Argument | Type | Notes |
|---|---|---|
booking_id | string | Airline booking id from the booking record. |
bookingRef | string | Or the Anuju booking id / Anuju reference. |
Returns: Booking state, ticketing status and any airline confirmation reference.
Hotels
invoke_search_hotelsSearch hotels
Search live hotel inventory and real prices for a destination and stay dates. Returns hotels with location, description, images, star rating, room types, board basis, cancellation policy and total stay price.
| Argument | Type | Notes |
|---|---|---|
city_id* | string | Destination city id from search_hotel_destinations. |
city_name | string | Destination city name, e.g. Paris. |
check_in* | string | Check-in date, YYYY-MM-DD, in the future. |
check_out* | string | Check-out date, YYYY-MM-DD. |
limit | number | Maximum hotels to return. |
Returns: Hotels with rooms, board basis, cancellation policy, total stay price and a signed quote per rate.
invoke_search_hotel_destinationsLook up hotel destinations
Resolve a place name into the hotel destination (city id and name) that search_hotels needs.
| Argument | Type | Notes |
|---|---|---|
text* | string | Place name, at least 2 characters. |
Returns: Matching hotel destinations with their city ids.
invoke_get_hotel_booking_statusGet hotel booking status
Check the supplier-side status of one of the signed-in customer's own hotel bookings, including whether the reservation is confirmed.
| Argument | Type | Notes |
|---|---|---|
booking_job_id | string | Hotel booking job id from the booking record. |
bookingRef | string | Or the Anuju booking id / Anuju reference. |
Returns: Booking state and whether the supplier has confirmed the reservation.
Checkout
invoke_create_flight_checkoutStart a flight checkout
Creates the flight booking from a chosen offer and returns a secure Anuju checkout URL for the customer to pay. A link is not a confirmed reservation.
| Argument | Type | Notes |
|---|---|---|
search* | object | The original search: origin, destination, date_from, and return_from when round-trip. |
offerId* | string | Offer identifier from the flight search. |
passengers* | array | One object per traveller: first_name, last_name and traveller type. |
contact* | object | email, phone, firstName, lastName. |
displayCurrency | string | Currency to charge in, e.g. NGN or USD. |
Returns: An Anuju booking reference and a secure checkout URL to hand to the customer.
invoke_create_hotel_checkoutStart a hotel checkout
Creates the hotel booking from a chosen room rate and returns a secure Anuju checkout URL. Pass the signed quote from search_hotels unchanged — it is what fixes the price.
| Argument | Type | Notes |
|---|---|---|
hotelCode* | string | Hotel code from the search result. |
combinationIdV2* | string | Room and rate identifier from the search result. |
cityId* | string | Destination city id used for the search. |
checkIn* | string | Check-in date, matching the searched dates. |
checkOut* | string | Check-out date, matching the searched dates. |
quote* | object | The signed quote returned with the chosen rate, unchanged. |
guests* | array | One object per guest: first_name and last_name. |
contact* | object | email, phone, firstName, lastName. |
hotelName | string | Hotel name, for the booking record. |
roomName | string | Room name, for the booking record. |
board | string | Board basis of the chosen rate. |
displayCurrency | string | Currency to charge in, e.g. NGN or USD. |
Returns: An Anuju booking reference and a secure checkout URL to hand to the customer.
Bookings
invoke_list_my_bookingsList my bookings
List the signed-in customer's own bookings, most recent first. Never returns anyone else's bookings.
Returns: The customer's bookings with reference, status, payment status and trip summary.
invoke_get_booking_statusGet booking and payment status
Get one of the signed-in customer's own bookings in full: booking status, payment status, supplier confirmation number, documents and open requests.
| Argument | Type | Notes |
|---|---|---|
bookingId* | string | Anuju booking id from list_my_bookings. |
Returns: The booking record, its documents, its cancellation policy and any requests already open against it.
invoke_request_booking_cancellationRequest a cancellation or refund
Submits a cancellation or refund request against one of the signed-in customer's own bookings. Every request is reviewed manually, so this cancels nothing by itself and guarantees no refund.
| Argument | Type | Notes |
|---|---|---|
bookingId* | string | Anuju booking id to request against. |
request_type* | string | cancellation or refund. |
customer_notes | string | The customer's own reason, in their words. |
Returns: The created request with its ANJ-REQ reference and its review status.
Records
Anuju also publishes read tools for the records the signed-in user is allowed to see. Every one of them is scoped by the customer's own permissions, so a customer can only ever reach their own data.
query_bookingRead bookings
Read booking records the signed-in user is allowed to see — their own bookings, or all bookings for an admin.
query_booking_requestRead booking requests
Read cancellation and change requests the signed-in user is allowed to see.
query_saved_itineraryRead saved itineraries
Read the signed-in user's own saved trip itineraries.
Sign-in, consent and scopes
Every tool requires sign-in
Anuju runs a single authenticated MCP server. There is no anonymous tier: an assistant always connects on behalf of a real Anuju customer, who signs in and approves the connection on the consent screen. The customer can revoke that access at any time from their client.
How the flow works
- 1. The client registers the endpoint and attempts a request.
- 2. The server replies
401with protected-resource metadata. - 3. The client discovers the authorization server and opens Anuju's consent screen.
- 4. The customer signs in and approves, and the client receives a token scoped to that customer.
- 5. Tool calls run as that customer, and are refused the moment the token expires or is revoked.
What is never exposed
Supplier credentials, payment credentials, other customers' records and internal administration tools are not reachable through the MCP server under any token. Administrative actions are not published as tools at all.
How a booking completes
Inventory and pricing
Flight and hotel inventory, availability and pricing all come from Anuju's live supplier integration. Nothing is cached sample data and nothing is invented: if the supplier does not return it, the tool does not report it.
From quote to checkout
- 1. The assistant searches and shows real options.
- 2. The customer chooses, and the assistant creates the booking with the exact offer and traveller details.
- 3. Anuju returns a secure hosted checkout URL. This is a booking in progress, not a confirmed reservation.
- 4. The customer pays in Anuju's checkout. Payment is verified server-side against the amount and reference Anuju recorded.
- 5. Anuju fulfils the reservation with the supplier and records the confirmation.
- 6. The assistant reads the booking back and reports the true status.
Payment is not confirmation
A successful payment and a confirmed reservation are two different states, and Anuju reports them separately. If supplier fulfilment fails after payment, Anuju reconciles and refunds through the same payment rail. Cancellations are requests: they are reviewed by the Anuju team, and no tool promises an automatic refund.
Help, limits and status
Rate limits
Search tools are rate limited per caller to protect the shared supplier allowance. Limits sit far above human use, so they only ever affect automation that loops. A limited call returns a clear message rather than an empty result.
Tools changed?
Assistants cache the tool list. When Anuju ships changes, refresh or reconnect the server in your client — and note that a change to the published tool set asks connected clients to authorize again.
Machine-readable docs
A plain-text summary of this server is published for documentation tooling.
/llms.txtContact
Integration questions, supplier errors and access problems all go to the same place.
Contact the Anuju teamSee also Connect an assistant, Terms of Service and Privacy Policy.
