Serveur MCP

Departi – Travel Compliance & Curated Booking

eu.departi/travel-compliance
Juridique et conformité Voyage et hôtellerie Public et accessible MCP 2026-07-28

Ce que fait ce MCP

Provides visa, tax-residency, treaty, and Schengen guidance alongside searches for flights, accommodation, and travel experiences.

departi_check_tax
Assesses tax-residency risk and double-tax-treaty position for a traveller in a destination. Returns: whether the stay risks triggering destination tax residency (the day threshold and the country's day-counting method), the relevant treaty provisions between the traveller's tax-residence country and the destination (employment income, tie-breaker, social security, withholding), any special or digital-nomad tax regime, and — for US citizens — FEIE / Physical-Presence-Test context. Advisory only, not tax advice. Use for "will staying here make me tax resident / what does the treaty say / how are my days counted". Note: any US citizenship triggers worldwide/citizenship-based obligations regardless of residence or other passports.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['nationality', 'taxResidence', 'destination', 'duration'], 'properties': {'locale': {'type': 'string', 'default': 'en', 'description': 'Default en.'}, 'purpose': {'type': 'string', 'default': 'tourism', 'description': 'tourism | remote_work | business … Default tourism.'}, 'currency': {'type': 'string', 'default': 'EUR', 'description': 'Default EUR.'}, 'duration': {'type': 'integer', 'description': 'Stay in days.'}, 'destination': {'type': 'string', 'description': 'Country being visited, ISO alpha-2.'}, 'nationality': {'type': 'string', 'description': 'Citizenship / passport, ISO alpha-2. Drives citizenship-based obligations (e.g. US — taxed worldwide regardless of residence). May differ from tax residence.'}, 'taxResidence': {'type': 'string', 'description': 'The traveller\'s current country of tax residence, ISO alpha-2. This selects the treaty "resident state" and can differ from nationality.'}, 'employmentType': {'type': 'string', 'description': 'employed | self_employed | company_director | retired. Affects PE / treaty analysis.'}, 'yearToDateDays': {'type': 'integer', 'default': 0, 'description': 'Days already spent in the destination this tax year. Default 0.'}}}
departi_check_visa
Returns the entry/visa options for a traveller of a given nationality (passport) going to a destination for a stated purpose and length of stay. Each option includes: visa/permit type, whether a visa is required, maximum stay, whether remote/on-site work is allowed, cost, processing time, and application/renewal notes — sourced from official immigration authorities. Use this for "what visa do I need / can I stay N days / can I work remotely here". To count days already spent against the 90/180 limit use departi_track_schengen; for the tax consequences of staying use departi_check_tax. Tip: nationality should be the traveller's most favorable passport — multi-nationals may have better entry on one passport.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['nationality', 'destination', 'duration'], 'properties': {'locale': {'type': 'string', 'default': 'en', 'description': 'Output language. Default en.'}, 'purpose': {'type': 'string', 'default': 'tourism', 'description': 'One of tourism | remote_work | business | study | retirement. Default tourism.'}, 'currency': {'type': 'string', 'default': 'EUR', 'description': 'Currency for costs. Default EUR.'}, 'duration': {'type': 'integer', 'description': 'Intended stay in days, integer > 0.'}, 'destination': {'type': 'string', 'description': 'Destination country, ISO alpha-2, e.g. "PT".'}, 'nationality': {'type': 'string', 'description': 'Traveller\'s citizenship / passport, ISO alpha-2, e.g. "BE". This is the passport country, not tax residence.'}}}
departi_get_profile
Returns the authenticated user's Departi profile: nationality, tax residence, subscription tier, traveller persona, and preferences. No PII (name, email, date of birth) is returned — only the fields the other tools need for personalisation. Requires authentication (OAuth). Use to personalise the other tools' answers, or to answer "where do I stand right now". Read-only; takes no parameters.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': [], 'properties': {}}
departi_search_accommodation
Searches bookable accommodation in a destination for given dates and returns a ranked list of stays, each with: name, property type, nightly price (in the requested currency), star rating, guest rating, key facilities (e.g. wifi, kitchen), a persona/traveler-type fit score, and a booking deep-link. Curated and scored for the traveller's persona and trip type — e.g. long-stay nomad apartments with kitchen + fast wifi vs weekend hotels. Use when the user needs a place to stay; for getting there use departi_search_transport, for things to do use departi_search_experiences. Returns an empty list if no inventory matches.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['destination', 'checkin', 'checkout'], 'properties': {'rooms': {'type': 'integer', 'default': 1, 'description': 'Default 1.'}, 'guests': {'type': 'integer', 'default': 1, 'description': 'Default 1.'}, 'locale': {'type': 'string', 'default': 'en', 'description': 'Default en.'}, 'checkin': {'type': 'string', 'format': 'date', 'description': 'ISO date, checkout must be strictly after checkin.'}, 'persona': {'type': 'string', 'description': "e.g. 'culture_explorer', 'foodie', 'adventure' — biases scoring."}, 'checkout': {'type': 'string', 'format': 'date', 'description': 'ISO date, strictly after checkin.'}, 'currency': {'type': 'string', 'default': 'EUR', 'description': 'Default EUR.'}, 'maxPrice': {'type': 'number', 'description': 'Max per-night price in currency.'}, 'destination': {'type': 'string', 'description': 'Destination as ISO-2 country or city/slug, e.g. "PT" or "lisbon".'}, 'traveler_type': {'type': 'string', 'description': "e.g. 'digital_nomad', 'slow_traveler', 'weekend_breaker' — biases inventory (long-stay vs short)."}}}
departi_search_experiences
Searches bookable tours, activities and local experiences in a destination and returns a ranked list, each with: title, category (cultural / culinary / adventure / wellness / nature), duration, price (in requested currency), a persona-fit score, and a booking deep-link. Matched to the traveller's persona/personality. Use for "what can I do in X". For a place to stay use departi_search_accommodation; to get there use departi_search_transport. Returns an empty list if nothing matches the filters.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['destination'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'description': 'Max results. Default 10.'}, 'persona': {'type': 'string', 'description': "e.g. 'culture_explorer', 'foodie', 'adventure'."}, 'categories': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional array from cultural | culinary | adventure | wellness | nature.'}, 'destination': {'type': 'string', 'description': 'ISO-2 country or city/slug, e.g. "lisbon".'}, 'traveler_type': {'type': 'string', 'description': "e.g. 'digital_nomad', 'slow_traveler'."}}}
departi_search_transport
Searches flights between two places and returns a ranked list of options, each with: carrier, price (in requested currency), cabin class, total duration, number of stops, departure & arrival times, and a booking deep-link. Flights are sourced across providers (Duffel + Travelpayouts) for broad full-service and low-cost coverage. Use for "how do I get from A to B by air". For where to stay use departi_search_accommodation; for things to do use departi_search_experiences. Prices are indicative — book via the returned link. Returns an empty list if no route is found. Ground/rail/bus is not offered through this tool.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['origin', 'destination', 'departure_date'], 'properties': {'origin': {'type': 'string', 'description': 'Departure IATA code or city, e.g. "BRU" or "Brussels".'}, 'passengers': {'type': 'integer', 'default': 1, 'description': 'Default 1.'}, 'cabin_class': {'enum': ['economy', 'premium_economy', 'business', 'first'], 'type': 'string', 'default': 'economy', 'description': 'Cabin class for the search. Default economy.'}, 'destination': {'type': 'string', 'description': 'Arrival IATA code or city, e.g. "LIS" or "Lisbon".'}, 'return_date': {'type': 'string', 'format': 'date', 'description': 'Optional ISO date after departure_date for a round trip.'}, 'traveler_type': {'type': 'string', 'description': 'Optional persona hint.'}, 'departure_date': {'type': 'string', 'format': 'date', 'description': 'ISO date, today or future.'}}}
departi_track_schengen
Calculates Schengen 90/180 short-stay status from a list of stays. Returns: days used and days remaining in the rolling 180-day window, a status (safe | warning | critical | exceeded), the projected date the limit would be reached at the current pace, and — for residence/digital-nomad-permit holders — a count that excludes days in the permit-issuing country while still counting every other Schengen state (with a note of which country is excluded). Use for non-EU travellers tracking the 90-days-in-180 limit. Note: EU/EEA nationals have free movement (not counted); a residence permit exempts only its issuing country, not the rest of Schengen.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['entries'], 'properties': {'locale': {'type': 'string', 'default': 'en', 'description': 'Default en.'}, 'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['country', 'entryDate', 'exitDate'], 'properties': {'country': {'type': 'string', 'description': 'ISO alpha-2 country code.'}, 'exitDate': {'type': 'string', 'format': 'date', 'description': 'YYYY-MM-DD.'}, 'entryDate': {'type': 'string', 'format': 'date', 'description': 'YYYY-MM-DD.'}}}, 'description': 'Array of Schengen zone stays.'}, 'currency': {'type': 'string', 'default': 'EUR', 'description': 'Default EUR.'}, 'nationality': {'type': 'string', 'description': 'Citizenship, ISO alpha-2. EU/EEA nationals are exempt from counting.'}, 'referenceDate': {'type': 'string', 'format': 'date', 'description': 'ISO date to evaluate the window at. Default: today.'}, 'residencePermit': {'type': 'object', 'required': ['issuingCountry', 'validFrom', 'validUntil'], 'properties': {'validFrom': {'type': 'string', 'format': 'date', 'description': 'YYYY-MM-DD.'}, 'validUntil': {'type': 'string', 'format': 'date', 'description': 'YYYY-MM-DD.'}, 'issuingCountry': {'type': 'string', 'description': 'ISO alpha-2 country that issued the permit.'}}, 'description': 'Residence or digital-nomad permit. When present and active on the reference date, days in the issuing country are excluded from the 90/180 count; all other Schengen days still count.'}}}
Ajouté
departi_get_profile
17 September 2026 12:39
Ajouté
departi_search_experiences
17 September 2026 12:39
Ajouté
departi_search_transport
17 September 2026 12:39
Ajouté
departi_search_accommodation
17 September 2026 12:39
Ajouté
departi_check_tax
17 September 2026 12:39
Ajouté
departi_track_schengen
17 September 2026 12:39
Ajouté
departi_check_visa
17 September 2026 12:39