Extralingo
What this MCP does
Searches language schools abroad, compares courses and accommodations, calculates trip prices and submits booking or quote requests.
Tools
Input schema
{'type': 'object', 'required': ['school_id', 'message'], 'properties': {'contact': {'type': 'object', 'description': 'Optional first_name, last_name. Email always comes from the verified account.', 'additionalProperties': True}, 'message': {'type': 'string', 'description': 'Student message to the school.'}, 'trip_id': {'type': 'string', 'description': 'Optional trip_id from save_trip.'}, 'currency': {'type': 'string', 'default': 'EUR', 'examples': ['EUR'], 'description': 'ISO 4217 currency for prices in this call. Usually EUR.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}, 'configuration': {'type': 'object', 'properties': {'mealType': {'type': 'string', 'description': 'Meal plan key when accommodation is selected.'}, 'students': {'type': 'array', 'items': {'type': 'object', 'properties': {'weeks': {'type': 'integer', 'minimum': 1, 'description': 'Course duration in weeks.'}, 'courseId': {'type': 'string', 'description': 'Course product id from list_courses for this school.'}}, 'additionalProperties': True}, 'description': 'One object per traveller. courseId comes from list_courses.'}, 'startDate': {'type': 'string', 'examples': ['2026-09-07'], 'description': 'Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates.'}, 'accommodationGroupId': {'type': 'string', 'description': 'Accommodation group id from list_accommodations (optional).'}}, 'description': 'Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras.', 'additionalProperties': True}, 'idempotencyKey': {'type': 'string', 'description': 'Optional alias of idempotency_key.'}, 'idempotency_key': {'type': 'string', 'description': 'Optional. Same semantics as create_booking (24 hour replay window).'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'kind': {'enum': ['question'], 'type': 'string', 'description': 'Lead type on success.'}, 'message': {'type': 'string', 'description': 'Human-readable confirmation (not a booking confirmation).'}, 'success': {'const': True}, 'redirectUrl': {'type': ['string', 'null'], 'description': 'Extralingo /my URL for the student to follow the request, when available.'}, 'newBookingId': {'type': ['integer', 'null'], 'description': 'Craft newBookings entry id when created.'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'trip_id': {'type': 'string', 'description': 'Optional saved trip id; when set, the quote may be stored on that trip.'}, 'currency': {'type': 'string', 'default': 'EUR', 'examples': ['EUR'], 'description': 'ISO 4217 currency for prices in this call. Usually EUR.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}, 'country_code': {'type': 'string', 'examples': ['NL', 'DE'], 'description': 'Visitor country ISO 3166-1 alpha-2 (e.g. NL). Affects fee display where applicable.'}, 'discountCode': {'type': 'string', 'description': 'Optional promotion or discount code.'}, 'configuration': {'type': 'object', 'properties': {'mealType': {'type': 'string', 'description': 'Meal plan key when accommodation is selected.'}, 'students': {'type': 'array', 'items': {'type': 'object', 'properties': {'weeks': {'type': 'integer', 'minimum': 1, 'description': 'Course duration in weeks.'}, 'courseId': {'type': 'string', 'description': 'Course product id from list_courses for this school.'}}, 'additionalProperties': True}, 'description': 'One object per traveller. courseId comes from list_courses.'}, 'startDate': {'type': 'string', 'examples': ['2026-09-07'], 'description': 'Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates.'}, 'accommodationGroupId': {'type': 'string', 'description': 'Accommodation group id from list_accommodations (optional).'}}, 'description': 'Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras.', 'additionalProperties': True}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'data': {'type': 'object', 'description': 'Full pricing breakdown from the booking engine.', 'additionalProperties': True}, 'quote': {'type': 'object', 'description': 'Human-oriented price summary.', 'additionalProperties': True}, 'success': {'const': True}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'phone': {'type': 'string', 'description': 'Student phone number (required).'}, 'contact': {'type': 'object', 'description': 'Optional first_name, last_name, phone. Email always comes from the verified account; contact.email must match or be omitted.', 'additionalProperties': True}, 'trip_id': {'type': 'string', 'description': 'Optional trip_id from save_trip linking this booking to a draft.'}, 'currency': {'type': 'string', 'default': 'EUR', 'examples': ['EUR'], 'description': 'ISO 4217 currency for prices in this call. Usually EUR.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}, 'phoneCountry': {'type': 'string', 'description': 'ISO 3166-1 alpha-2 country for the phone (e.g. NL).'}, 'configuration': {'type': 'object', 'properties': {'mealType': {'type': 'string', 'description': 'Meal plan key when accommodation is selected.'}, 'students': {'type': 'array', 'items': {'type': 'object', 'properties': {'weeks': {'type': 'integer', 'minimum': 1, 'description': 'Course duration in weeks.'}, 'courseId': {'type': 'string', 'description': 'Course product id from list_courses for this school.'}}, 'additionalProperties': True}, 'description': 'One object per traveller. courseId comes from list_courses.'}, 'startDate': {'type': 'string', 'examples': ['2026-09-07'], 'description': 'Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates.'}, 'accommodationGroupId': {'type': 'string', 'description': 'Accommodation group id from list_accommodations (optional).'}}, 'description': 'Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras.', 'additionalProperties': True}, 'termsAccepted': {'type': 'boolean', 'description': 'Must be true when not using OAuth (OAuth grants record acceptance).'}, 'idempotencyKey': {'type': 'string', 'description': 'Optional alias of idempotency_key.'}, 'studentDetails': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Per-student details aligned with configuration.students (names, dates of birth, etc.).'}, 'idempotency_key': {'type': 'string', 'description': 'Optional. Same key + same payload within 24 hours replays the original response; conflicting payload returns validation_failed.'}, 'privacyAccepted': {'type': 'boolean', 'description': 'Must be true when not using OAuth.'}, 'specialRequests': {'type': 'string', 'description': 'Free-text notes for the school.'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'status': {'type': 'string', 'description': 'e.g. awaiting_school_confirmation.'}, 'success': {'const': True}, 'bookingId': {'type': ['integer', 'null'], 'description': 'Craft booking id when returned by the booking engine.'}, 'redirectUrl': {'type': ['string', 'null']}, 'studentMessage': {'type': 'string'}, 'bookingReference': {'type': ['string', 'null']}, 'agent_must_tell_the_user': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['trip_id'], 'properties': {'email': {'type': 'string', 'description': 'Optional. Must match the verified OAuth account email if sent. The link is always sent to that account.'}, 'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'trip_id': {'type': 'string', 'description': 'trip_id from save_trip.'}, 'lastName': {'type': 'string', 'description': 'Optional salutation for the email body.'}, 'firstName': {'type': 'string', 'description': 'Optional salutation for the email body.'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'url': {'type': 'string', 'description': 'Legacy alias of continue_url.'}, 'message': {'type': 'string'}, 'success': {'const': True}, 'trip_id': {'type': 'string'}, 'trip_url': {'type': 'string'}, 'emailed_to': {'type': 'string', 'description': 'Verified account inbox that received the email.'}, 'continue_url': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['group_id'], 'properties': {'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'currency': {'type': 'string', 'default': 'EUR', 'examples': ['EUR'], 'description': 'ISO 4217 currency for prices in this call. Usually EUR.'}, 'group_id': {'type': 'string', 'description': 'Accommodation group id from list_accommodations.'}, 'startDate': {'type': 'string', 'examples': ['2026-09-07'], 'description': 'Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates.'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'group': {'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Group id (matches group_id).'}, 'name': {'type': 'string', 'description': 'Display name of the accommodation group.'}, 'distance': {'type': ['string', 'object', 'null'], 'description': 'Distance-to-school summary (string or structured object from the API).', 'additionalProperties': True}, 'location': {'type': 'object', 'description': 'Address, distance_to_school, and travel-time hints.', 'additionalProperties': True}, 'amenities': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Facilities and highlighted amenities.'}, 'occupancy': {'type': 'object', 'description': 'Minimum/maximum age and occupancy limits.', 'additionalProperties': True}, 'group_name': {'type': 'string', 'description': 'Grouped title when room-type grouping is enabled.'}, 'room_types': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Room variants, each with meal_options, stay_length, and week pricing.'}, 'stay_length': {'type': 'object', 'description': 'Minimum and maximum stay in weeks.', 'additionalProperties': True}, 'meal_options': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Board/meal plans with pricing_for_requested_weeks when not split by room_types.'}, 'classification': {'type': 'object', 'description': 'Accommodation type, class, and room metadata.', 'additionalProperties': True}}, 'description': 'Accommodation group from GET /v3/accommodations/{id} (v2 grouping): labels, classification, room and meal options, facilities, rules, and pricing hints for the requested start date.', 'additionalProperties': True}, 'success': {'const': True}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['course_id', 'school_id'], 'properties': {'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'currency': {'type': 'string', 'default': 'EUR', 'examples': ['EUR'], 'description': 'ISO 4217 currency for prices in this call. Usually EUR.'}, 'course_id': {'type': 'string', 'description': 'Course product id from list_courses.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}, 'startDate': {'type': 'string', 'examples': ['2026-09-07'], 'description': 'Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates.'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'course': {'type': ['object', 'null'], 'description': 'Single course product with pricing rows and supplements for the requested start date.', 'additionalProperties': True}, 'success': {'const': True}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['school_id'], 'properties': {'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}, 'include_hero_image': {'type': 'boolean', 'default': True, 'description': 'When true, structuredContent may include a compressed JPEG in MCP image content; hero_image is stripped from structuredContent after attach.'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'data': {'type': 'object', 'description': 'School profile (title, url, city, country, bookings_live, reviews, images[]).', 'additionalProperties': True}, 'success': {'const': True}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'data': {'type': 'object', 'description': 'Facet lists keyed by filter name.', 'additionalProperties': True}, 'success': {'const': True}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['trip_id'], 'properties': {'trip_id': {'type': 'string', 'description': 'trip_id returned by save_trip.'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'url': {'type': 'string', 'description': 'Legacy alias of continue_url.'}, 'note': {'type': 'string'}, 'success': {'const': True}, 'summary': {'type': 'string', 'description': 'Human-readable configuration summary for agents.'}, 'trip_id': {'type': 'string', 'description': 'Shareable trip id (/s/{id}).'}, 'trip_url': {'type': 'string'}, 'school_id': {'type': 'integer', 'description': 'Craft school entry id.'}, 'school_url': {'type': 'string'}, 'school_name': {'type': 'string'}, 'continue_url': {'type': 'string', 'description': 'Shareable Extralingo URL that restores configuration.'}, 'configuration': {'type': 'object', 'additionalProperties': True}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['school_id'], 'properties': {'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'currency': {'type': 'string', 'default': 'EUR', 'examples': ['EUR'], 'description': 'ISO 4217 currency for prices in this call. Usually EUR.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}, 'startDate': {'type': 'string', 'examples': ['2026-09-07'], 'description': 'Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates.'}, 'country_code': {'type': 'string', 'examples': ['NL', 'DE'], 'description': 'Visitor country ISO 3166-1 alpha-2 (e.g. NL). Affects fee display where applicable.'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'school': {'type': ['object', 'null'], 'additionalProperties': True}, 'success': {'const': True}, 'currency': {'type': 'string'}, 'start_date': {'type': 'string'}, 'location_discount': {'type': ['object', 'null'], 'additionalProperties': True}, 'busy_school_months': {'type': ['object', 'null'], 'additionalProperties': True}, 'accommodation_groups': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Flat list of accommodation groups (id for get_accommodation_details / configuration).'}, 'has_location_discounts': {'type': 'boolean'}, 'accommodation_categories': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Same groups nested by category for display.'}, 'allows_double_room_individual_bookings': {'type': 'boolean'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['school_id'], 'properties': {'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'currency': {'type': 'string', 'default': 'EUR', 'examples': ['EUR'], 'description': 'ISO 4217 currency for prices in this call. Usually EUR.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}, 'startDate': {'type': 'string', 'examples': ['2026-09-07'], 'description': 'Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates.'}, 'country_code': {'type': 'string', 'examples': ['NL', 'DE'], 'description': 'Visitor country ISO 3166-1 alpha-2 (e.g. NL). Affects fee display where applicable.'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'school': {'type': ['object', 'null'], 'description': 'School metadata from the booking API.', 'additionalProperties': True}, 'success': {'const': True}, 'currency': {'type': 'string'}, 'start_date': {'type': 'string', 'description': 'Effective start date used for pricing (YYYY-MM-DD).'}, 'course_types': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Course types with nested courses[] (course ids, weeks, week prices).'}, 'pricing_rule': {'type': ['object', 'null'], 'additionalProperties': True}, 'location_discount': {'type': ['object', 'null'], 'additionalProperties': True}, 'busy_school_months': {'type': ['object', 'null'], 'additionalProperties': True}, 'has_location_discounts': {'type': 'boolean'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['school_id'], 'properties': {'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'dates': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Bookable course start dates (typically Mondays, YYYY-MM-DD strings).'}, 'success': {'const': True}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'contact': {'type': 'object', 'description': 'Optional first_name, last_name. Email always comes from the verified account.', 'additionalProperties': True}, 'message': {'type': 'string', 'description': 'Student message to the school.'}, 'trip_id': {'type': 'string', 'description': 'Optional trip_id from save_trip.'}, 'currency': {'type': 'string', 'default': 'EUR', 'examples': ['EUR'], 'description': 'ISO 4217 currency for prices in this call. Usually EUR.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}, 'configuration': {'type': 'object', 'properties': {'mealType': {'type': 'string', 'description': 'Meal plan key when accommodation is selected.'}, 'students': {'type': 'array', 'items': {'type': 'object', 'properties': {'weeks': {'type': 'integer', 'minimum': 1, 'description': 'Course duration in weeks.'}, 'courseId': {'type': 'string', 'description': 'Course product id from list_courses for this school.'}}, 'additionalProperties': True}, 'description': 'One object per traveller. courseId comes from list_courses.'}, 'startDate': {'type': 'string', 'examples': ['2026-09-07'], 'description': 'Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates.'}, 'accommodationGroupId': {'type': 'string', 'description': 'Accommodation group id from list_accommodations (optional).'}}, 'description': 'Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras.', 'additionalProperties': True}, 'idempotencyKey': {'type': 'string', 'description': 'Optional alias of idempotency_key.'}, 'idempotency_key': {'type': 'string', 'description': 'Optional. Same semantics as create_booking (24 hour replay window).'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'kind': {'enum': ['discussion'], 'type': 'string', 'description': 'Lead type on success.'}, 'message': {'type': 'string', 'description': 'Human-readable confirmation (not a booking confirmation).'}, 'success': {'const': True}, 'redirectUrl': {'type': ['string', 'null'], 'description': 'Extralingo /my URL for the student to follow the request, when available.'}, 'newBookingId': {'type': ['integer', 'null'], 'description': 'Craft newBookings entry id when created.'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'contact': {'type': 'object', 'description': 'Optional first_name, last_name. Email always comes from the verified account.', 'additionalProperties': True}, 'trip_id': {'type': 'string', 'description': 'Optional trip_id from save_trip.'}, 'comments': {'type': 'string', 'description': 'Student message to the school.'}, 'currency': {'type': 'string', 'default': 'EUR', 'examples': ['EUR'], 'description': 'ISO 4217 currency for prices in this call. Usually EUR.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}, 'configuration': {'type': 'object', 'properties': {'mealType': {'type': 'string', 'description': 'Meal plan key when accommodation is selected.'}, 'students': {'type': 'array', 'items': {'type': 'object', 'properties': {'weeks': {'type': 'integer', 'minimum': 1, 'description': 'Course duration in weeks.'}, 'courseId': {'type': 'string', 'description': 'Course product id from list_courses for this school.'}}, 'additionalProperties': True}, 'description': 'One object per traveller. courseId comes from list_courses.'}, 'startDate': {'type': 'string', 'examples': ['2026-09-07'], 'description': 'Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates.'}, 'accommodationGroupId': {'type': 'string', 'description': 'Accommodation group id from list_accommodations (optional).'}}, 'description': 'Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras.', 'additionalProperties': True}, 'idempotencyKey': {'type': 'string', 'description': 'Optional alias of idempotency_key.'}, 'idempotency_key': {'type': 'string', 'description': 'Optional. Same semantics as create_booking (24 hour replay window).'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'kind': {'enum': ['quote'], 'type': 'string', 'description': 'Lead type on success.'}, 'message': {'type': 'string', 'description': 'Human-readable confirmation (not a booking confirmation).'}, 'success': {'const': True}, 'redirectUrl': {'type': ['string', 'null'], 'description': 'Extralingo /my URL for the student to follow the request, when available.'}, 'newBookingId': {'type': ['integer', 'null'], 'description': 'Craft newBookings entry id when created.'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'email': {'type': 'string', 'description': 'Optional student email for anonymous drafts. With OAuth, the verified account email is used.'}, 'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'trip_id': {'type': 'string', 'description': 'Omit to create a new trip. Pass an existing trip_id from save_trip to update the same continue_url.'}, 'school_id': {'type': 'integer', 'examples': [12345], 'description': 'Craft CMS school entry id from search_language_schools hits (field school_id). Not the CRM UUID.'}, 'configuration': {'type': 'object', 'properties': {'mealType': {'type': 'string', 'description': 'Meal plan key when accommodation is selected.'}, 'students': {'type': 'array', 'items': {'type': 'object', 'properties': {'weeks': {'type': 'integer', 'minimum': 1, 'description': 'Course duration in weeks.'}, 'courseId': {'type': 'string', 'description': 'Course product id from list_courses for this school.'}}, 'additionalProperties': True}, 'description': 'One object per traveller. courseId comes from list_courses.'}, 'startDate': {'type': 'string', 'examples': ['2026-09-07'], 'description': 'Course start calendar date (YYYY-MM-DD). Typically a Monday from list_starting_dates.'}, 'accommodationGroupId': {'type': 'string', 'description': 'Accommodation group id from list_accommodations (optional).'}}, 'description': 'Same shape as the Extralingo school-page configurator: startDate (YYYY-MM-DD), students[] with courseId, weeks, optional accommodationGroupId, mealType, extras.', 'additionalProperties': True}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'url': {'type': 'string', 'description': 'Legacy alias of continue_url.'}, 'note': {'type': 'string'}, 'success': {'const': True}, 'summary': {'type': 'string', 'description': 'Human-readable configuration summary for agents.'}, 'trip_id': {'type': 'string', 'description': 'Shareable trip id (/s/{id}).'}, 'trip_url': {'type': 'string'}, 'school_id': {'type': 'integer', 'description': 'Craft school entry id.'}, 'school_url': {'type': 'string'}, 'school_name': {'type': 'string'}, 'continue_url': {'type': 'string', 'description': 'Shareable Extralingo URL that restores configuration.'}, 'configuration': {'type': 'object', 'additionalProperties': True}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 8, 'maximum': 20, 'minimum': 1, 'description': 'Maximum results (1–20).'}, 'query': {'type': 'string', 'description': 'Destination or school name prefix. Empty returns popular destinations.'}, 'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'language': {'type': 'string', 'description': 'Optional language slug to restrict destinations (e.g. spanish).'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'hits': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Destination matches.'}, 'query': {'type': 'string'}, 'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string'}, 'schools': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'Optional school name fallback hits.'}, 'success': {'const': True}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'properties': {'city': {'type': 'string', 'description': 'Single city slug filter. Prefer cities[] for multiple.'}, 'limit': {'type': 'integer', 'default': 5, 'maximum': 20, 'minimum': 1, 'description': 'Maximum schools to return (1–20).'}, 'query': {'type': 'string', 'examples': ['Barcelona intensive Spanish'], 'description': 'Free-text search (school name, city, or keyword). Empty returns popular matches for the other filters.'}, 'cities': {'type': 'array', 'items': {'type': 'string', 'description': 'City slug.'}, 'description': 'City slug filters from get_school_filters.'}, 'locale': {'enum': ['en', 'nl', 'da', 'sv'], 'type': 'string', 'examples': ['en', 'nl', 'da', 'sv'], 'description': 'Response language and site context. One of en, nl, da, sv.'}, 'country': {'type': 'string', 'description': 'Country slug or name filter from get_school_filters.'}, 'language': {'type': 'string', 'examples': ['spanish'], 'description': 'Language slug filter from get_school_filters (e.g. spanish, english).'}, 'course_type': {'type': 'string', 'description': 'Course type slug from get_school_filters (e.g. intensive, private).'}}, 'additionalProperties': True}
Output schema
{'type': 'object', 'required': ['success'], 'properties': {'data': {'type': 'object', 'description': 'Meilisearch-style payload with hits[] (school_id, title, url, city, country, pricing hints).', 'additionalProperties': True}, 'success': {'const': True}}, 'additionalProperties': True}
Recent tool changes
Similar MCP servers
Award Travel Finder
Searches award flights and hotels, tracks bookings and loyalty balances, evaluates points and credit cards, and monitors travel r…
Good Turn Studio (all tools)
Offers consumer utilities for insurance claim appeals, subscription cancellation, flight fare research, financial recovery resour…
AI 代理人任務中樞
Aggregates Taiwan-focused tools for AI service comparisons, cryptocurrency data, game information, health guidance, and other con…
Gover MCP
Searches and manages corporate travel requests, flights, hotels, rental vehicles, passengers, carts, approvals, reservations, and…
DC Member API
Provides access to Dynamite Circle membership data, community profiles, chapters, events, trips, calendars, alerts, follows, agen…
Nomad Stays
Searches and books remote-work accommodations while supporting host listing management, rooms, packages, availability, and hospit…
lilo Vacation Rentals
Supports vacation-rental discovery, availability and direct booking, property operations, short-term-rental compliance, guest and…
mcp-server
Provides immigration, citizenship and residency programme research alongside tax, wealth structuring, banking, visa, treaty and c…