Servidor MCP

airport-transfers

rs.rides/airport-transfers
Viajes y hospitalidad Público y accesible MCP 2026-07-28

Qué hace este MCP

Provides pricing, route information, and provisional booking requests for airport transfers between Novi Sad and Belgrade Airport.

create_booking_request
Start a booking (email confirmation)
Start a provisional airport-transfer booking. This does NOT finalize a booking — it emails the passenger a one-tap confirmation link, and the ride is only booked once they click it. Payment is to the driver (cash or card); no online payment is needed. Call estimate_price first to confirm the vehicle + price with the user, then call this. Always tell the user to check their email to confirm.
Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['routeSlug', 'direction', 'pickupDate', 'pickupTime', 'passengerName', 'passengerEmail', 'passengerPhone', 'passengers'], 'properties': {'locale': {'enum': ['en', 'sr', 'ru'], 'type': 'string', 'description': 'Language for the confirmation email. Default en.'}, 'luggage': {'type': 'integer', 'minimum': 0, 'description': 'Number of large bags (optional).'}, 'vehicle': {'type': 'string', 'description': "Optional vehicle tier name (e.g. 'Group XL'). Defaults to the cheapest vehicle that fits the group."}, 'direction': {'enum': ['to_airport', 'from_airport'], 'type': 'string', 'description': 'to_airport = going to the airport; from_airport = pickup at the airport.'}, 'routeSlug': {'type': 'string', 'description': 'Route slug from list_routes.'}, 'passengers': {'type': 'integer', 'minimum': 1, 'description': 'Number of passengers.'}, 'pickupDate': {'type': 'string', 'description': 'Pickup date, YYYY-MM-DD, Belgrade local time.'}, 'pickupTime': {'type': 'string', 'description': 'Pickup time, HH:MM (24h), Belgrade local time.'}, 'flightNumber': {'type': 'string', 'description': 'Flight number (recommended for airport pickups).'}, 'passengerName': {'type': 'string', 'description': 'Full name of the passenger.'}, 'pickupAddress': {'type': 'string', 'description': 'Pickup or drop-off address. REQUIRED when the ride departs to the airport (direction to_airport) or runs city-to-city — the driver has nowhere to collect the passenger otherwise, and the booking is refused. Optional for an airport arrival, where the driver waits in arrivals.'}, 'passengerEmail': {'type': 'string', 'description': 'Passenger email — the confirmation link is sent here.'}, 'passengerPhone': {'type': 'string', 'description': 'Passenger phone in international format.'}, 'specialRequests': {'type': 'string', 'description': 'Notes, e.g. child seat needed (optional).'}}, 'additionalProperties': False}
Esquema de salida
{'oneOf': [{'type': 'object', 'required': ['ok', 'status', 'booked', 'confirmationEmailSent', 'message'], 'properties': {'ok': {'const': True}, 'route': {'type': 'string'}, 'booked': {'const': False}, 'pickup': {'type': 'string'}, 'status': {'const': 'pending_confirmation'}, 'message': {'type': 'string'}, 'vehicle': {'type': 'string'}, 'priceEur': {'type': 'number'}, 'expiresAt': {'type': 'string', 'format': 'date-time'}, 'requestId': {'type': 'string'}, 'confirmationEmailSent': {'type': 'boolean'}}}, {'type': 'object', 'required': ['ok', 'error'], 'properties': {'ok': {'const': False}, 'error': {'type': 'string'}}}]}
estimate_price
Estimate price
Estimate the price for a trip. Given a route and passenger count (and optional luggage count), returns the cheapest vehicle that fits the group, plus all fitting options. Use this to answer 'how much for N people from X to the airport?'.
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['routeSlug', 'passengers'], 'properties': {'luggage': {'type': 'integer', 'minimum': 0, 'description': 'Number of large bags (optional).'}, 'routeSlug': {'type': 'string', 'description': 'Route slug from list_routes.'}, 'passengers': {'type': 'integer', 'minimum': 1, 'description': 'Number of passengers.'}}, 'additionalProperties': False}
Esquema de salida
{'oneOf': [{'type': 'object', 'required': ['fits', 'route', 'recommended'], 'properties': {'fits': {'const': True}, 'note': {'type': 'string'}, 'route': {'type': 'string'}, 'luggage': {'type': ['integer', 'null']}, 'passengers': {'type': 'integer'}, 'recommended': {'type': 'object', 'required': ['vehicle', 'priceEur'], 'properties': {'vehicle': {'type': 'string'}, 'priceEur': {'type': 'number'}, 'priceRsd': {'type': ['number', 'null']}, 'maxLuggage': {'type': 'integer'}, 'maxPassengers': {'type': 'integer'}}}, 'allFittingOptions': {'type': 'array', 'items': {'type': 'object'}}}}, {'type': 'object', 'required': ['fits', 'message'], 'properties': {'fits': {'const': False}, 'message': {'type': 'string'}}}, {'type': 'object', 'required': ['error'], 'properties': {'error': {'type': 'string'}}}]}
get_booking_request_status
Check booking request status
Check whether a booking request (from create_booking_request) has been confirmed by the passenger yet. Returns 'pending', 'confirmed' (with the booking number), or 'expired'.
Solo lectura
Esquema de entrada
{'type': 'object', 'required': ['requestId'], 'properties': {'requestId': {'type': 'string', 'description': 'The requestId returned by create_booking_request.'}}, 'additionalProperties': False}
Esquema de salida
{'oneOf': [{'type': 'object', 'required': ['ok', 'status', 'booked', 'message'], 'properties': {'ok': {'const': True}, 'booked': {'type': 'boolean'}, 'status': {'enum': ['pending', 'confirmed', 'expired']}, 'message': {'type': 'string'}, 'bookingNumber': {'type': ['string', 'null']}}}, {'type': 'object', 'required': ['ok', 'error'], 'properties': {'ok': {'const': False}, 'error': {'type': 'string'}}}]}
get_pricing
Get pricing
Get fixed per-vehicle prices for a route, or for all routes if no routeSlug is given. Prices are fixed (no surge, no metered fares), in EUR and RSD. Each vehicle tier lists max passengers and luggage.
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {'routeSlug': {'type': 'string', 'description': "Optional route slug from list_routes (e.g. 'novi-sad-belgrade-airport'). Omit to get pricing for every route."}}, 'additionalProperties': False}
Esquema de salida
{'oneOf': [{'type': 'object', 'required': ['currency', 'routes'], 'properties': {'routes': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'pricing'], 'properties': {'slug': {'type': 'string'}, 'route': {'type': 'string'}, 'pricing': {'type': 'array', 'items': {'type': 'object', 'required': ['vehicle', 'priceEur'], 'properties': {'vehicle': {'type': 'string'}, 'priceEur': {'type': 'number'}, 'priceRsd': {'type': ['number', 'null']}, 'maxLuggage': {'type': ['integer', 'null']}, 'maxPassengers': {'type': ['integer', 'null']}}}}}}}, 'currency': {'type': 'string'}}}, {'type': 'object', 'required': ['error'], 'properties': {'error': {'type': 'string'}}}]}
get_service_info
Get service info
Get business info: service area, accepted payment methods, supported languages, minimum booking lead time, contact details, and how to book (including the booking URL template).
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['howToBook'], 'properties': {'url': {'type': 'string'}, 'meta': {'type': 'object'}, 'name': {'type': 'string'}, 'email': {'type': 'string'}, 'howToBook': {'type': 'string'}, 'languages': {'type': 'array', 'items': {'type': 'string'}}, 'telephone': {'type': 'string'}, 'paymentMethods': {'type': 'array', 'items': {'type': 'string'}}, 'bookingUrlTemplate': {'type': 'string'}}}
list_routes
List routes
List all active airport-transfer routes with their slug, endpoints, distance, travel time, available directions, and starting price. Use this first to discover what routes exist.
Solo lectura
Esquema de entrada
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'required': ['routes', 'count'], 'properties': {'count': {'type': 'integer'}, 'routes': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'origin', 'destination'], 'properties': {'slug': {'type': 'string'}, 'origin': {'type': 'string'}, 'directions': {'type': 'array', 'items': {'type': 'string'}}, 'distanceKm': {'type': 'number'}, 'destination': {'type': 'string'}, 'fromPriceEur': {'type': 'number'}, 'durationMinutes': {'type': 'number'}}}}}}
Añadido
get_booking_request_status
17 de September de 2026 a las 12:54
Añadido
create_booking_request
17 de September de 2026 a las 12:54
Añadido
get_service_info
17 de September de 2026 a las 12:54
Añadido
estimate_price
17 de September de 2026 a las 12:54
Añadido
get_pricing
17 de September de 2026 a las 12:54
Añadido
list_routes
17 de September de 2026 a las 12:54