Anuju for developers

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.

Overview

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.

Connect to Anuju

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.

Supported platforms

Client setup

  1. 1Open your profile menu, then go to Settings → Connectors.
  2. 2Choose Add custom connector and name it Anuju.
  3. 3Paste the endpoint URL into the URL field and click Add.
  4. 4When the consent screen opens, sign in with your Anuju account and approve access.
Reference

MCP tools

Flights

invoke_search_flights
OAuth

Search 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.

ArgumentTypeNotes
origin*stringDeparture airport IATA code, e.g. LOS.
destination*stringArrival airport IATA code, e.g. LHR.
date_from*stringDeparture date, YYYY-MM-DD.
return_fromstringReturn date, YYYY-MM-DD. Omit for one-way.
adultsnumber1–9. Defaults to 1.
childrennumber0–8. Defaults to 0.
infantsnumber0–4. Defaults to 0.
cabin_classstringM economy, W premium, C business, F first.
limitnumber1–100 offers. Defaults to 100.
sortstringprice 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_locations
OAuth

Look up airports and cities

Resolve a city or airport name into the IATA codes that search_flights needs.

ArgumentTypeNotes
query*stringCity or airport name, at least 2 characters.

Returns: Matching airports and cities with their IATA codes and countries.

invoke_get_flight_booking_status
OAuth

Get 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.

ArgumentTypeNotes
booking_idstringAirline booking id from the booking record.
bookingRefstringOr the Anuju booking id / Anuju reference.

Returns: Booking state, ticketing status and any airline confirmation reference.

Hotels

invoke_search_hotels
OAuth

Search 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.

ArgumentTypeNotes
city_id*stringDestination city id from search_hotel_destinations.
city_namestringDestination city name, e.g. Paris.
check_in*stringCheck-in date, YYYY-MM-DD, in the future.
check_out*stringCheck-out date, YYYY-MM-DD.
limitnumberMaximum hotels to return.

Returns: Hotels with rooms, board basis, cancellation policy, total stay price and a signed quote per rate.

invoke_search_hotel_destinations
OAuth

Look up hotel destinations

Resolve a place name into the hotel destination (city id and name) that search_hotels needs.

ArgumentTypeNotes
text*stringPlace name, at least 2 characters.

Returns: Matching hotel destinations with their city ids.

invoke_get_hotel_booking_status
OAuth

Get 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.

ArgumentTypeNotes
booking_job_idstringHotel booking job id from the booking record.
bookingRefstringOr the Anuju booking id / Anuju reference.

Returns: Booking state and whether the supplier has confirmed the reservation.

Checkout

invoke_create_flight_checkout
OAuth

Start 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.

ArgumentTypeNotes
search*objectThe original search: origin, destination, date_from, and return_from when round-trip.
offerId*stringOffer identifier from the flight search.
passengers*arrayOne object per traveller: first_name, last_name and traveller type.
contact*objectemail, phone, firstName, lastName.
displayCurrencystringCurrency 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_checkout
OAuth

Start 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.

ArgumentTypeNotes
hotelCode*stringHotel code from the search result.
combinationIdV2*stringRoom and rate identifier from the search result.
cityId*stringDestination city id used for the search.
checkIn*stringCheck-in date, matching the searched dates.
checkOut*stringCheck-out date, matching the searched dates.
quote*objectThe signed quote returned with the chosen rate, unchanged.
guests*arrayOne object per guest: first_name and last_name.
contact*objectemail, phone, firstName, lastName.
hotelNamestringHotel name, for the booking record.
roomNamestringRoom name, for the booking record.
boardstringBoard basis of the chosen rate.
displayCurrencystringCurrency 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_bookings
OAuth

List 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_status
OAuth

Get 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.

ArgumentTypeNotes
bookingId*stringAnuju 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_cancellation
OAuth

Request 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.

ArgumentTypeNotes
bookingId*stringAnuju booking id to request against.
request_type*stringcancellation or refund.
customer_notesstringThe 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_booking

Read bookings

Read booking records the signed-in user is allowed to see — their own bookings, or all bookings for an admin.

query_booking_request

Read booking requests

Read cancellation and change requests the signed-in user is allowed to see.

query_saved_itinerary

Read saved itineraries

Read the signed-in user's own saved trip itineraries.

Authentication

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. 1. The client registers the endpoint and attempts a request.
  2. 2. The server replies 401 with protected-resource metadata.
  3. 3. The client discovers the authorization server and opens Anuju's consent screen.
  4. 4. The customer signs in and approves, and the client receives a token scoped to that customer.
  5. 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.

Booking and payments

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. 1. The assistant searches and shows real options.
  2. 2. The customer chooses, and the assistant creates the booking with the exact offer and traveller details.
  3. 3. Anuju returns a secure hosted checkout URL. This is a booking in progress, not a confirmed reservation.
  4. 4. The customer pays in Anuju's checkout. Payment is verified server-side against the amount and reference Anuju recorded.
  5. 5. Anuju fulfils the reservation with the supplier and records the confirmation.
  6. 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.

Developer support

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.txt

Contact

Integration questions, supplier errors and access problems all go to the same place.

Contact the Anuju team

See also Connect an assistant, Terms of Service and Privacy Policy.