MCP-Server

airport-transfers

rs.rides/airport-transfers
Reisen & Hospitality Öffentlich und erreichbar MCP 2026-07-28

Was dieses MCP kann

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.
Externer Zugriff
Eingabeschema
{'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}
Ausgabeschema
{'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?'.
Nur Lesen
Eingabeschema
{'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}
Ausgabeschema
{'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'.
Nur Lesen
Eingabeschema
{'type': 'object', 'required': ['requestId'], 'properties': {'requestId': {'type': 'string', 'description': 'The requestId returned by create_booking_request.'}}, 'additionalProperties': False}
Ausgabeschema
{'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.
Nur Lesen
Eingabeschema
{'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}
Ausgabeschema
{'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).
Nur Lesen
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Ausgabeschema
{'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.
Nur Lesen
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
Ausgabeschema
{'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'}}}}}}
Hinzugefügt
get_booking_request_status
17. September 2026 12:54
Hinzugefügt
create_booking_request
17. September 2026 12:54
Hinzugefügt
get_service_info
17. September 2026 12:54
Hinzugefügt
estimate_price
17. September 2026 12:54
Hinzugefügt
get_pricing
17. September 2026 12:54
Hinzugefügt
list_routes
17. September 2026 12:54