Departi – Travel Compliance & Curated Booking
Travel-compliance intelligence and curated booking for digital nomads and long-stay travellers.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"travel-compliance": {
"url": "https://mcp.departi.eu/v3"
}
}
}远程端点
https://mcp.departi.eu/v3streamable-http它能做什么
工具清单
工具(7)
🟢departi_check_visa(nationality, destination, purpose, duration, locale, ...)
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.
输入模式
{
"type": "object",
"properties": {
"nationality": {
"type": "string",
"description": "Traveller's citizenship / passport, ISO alpha-2, e.g. \"BE\". This is the passport country, not tax residence."
},
"destination": {
"type": "string",
"description": "Destination country, ISO alpha-2, e.g. \"PT\"."
},
"purpose": {
"type": "string",
"description": "One of tourism | remote_work | business | study | retirement. Default tourism.",
"default": "tourism"
},
"duration": {
"type": "integer",
"description": "Intended stay in days, integer > 0."
},
"locale": {
"type": "string",
"description": "Output language. Default en.",
"default": "en"
},
"currency": {
"type": "string",
"description": "Currency for costs. Default EUR.",
"default": "EUR"
}
},
"required": [
"nationality",
"destination",
"duration"
]
}🟢departi_track_schengen(entries, referenceDate, nationality, residencePermit, locale, ...)
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.
输入模式
{
"type": "object",
"properties": {
"entries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "ISO alpha-2 country code."
},
"entryDate": {
"type": "string",
"format": "date",
"description": "YYYY-MM-DD."
},
"exitDate": {
"type": "string",
"format": "date",
"description": "YYYY-MM-DD."
}
},
"required": [
"country",
"entryDate",
"exitDate"
]
},
"description": "Array of Schengen zone stays."
},
"referenceDate": {
"type": "string",
"format": "date",
"description": "ISO date to evaluate the window at. Default: today."
},
"nationality": {
"type": "string",
"description": "Citizenship, ISO alpha-2. EU/EEA nationals are exempt from counting."
},
"residencePermit": {
"type": "object",
"properties": {
"issuingCountry": {
"type": "string",
"description": "ISO alpha-2 country that issued the permit."
},
"validFrom": {
"type": "string",
"format": "date",
"description": "YYYY-MM-DD."
},
"validUntil": {
"type": "string",
"format": "date",
"description": "YYYY-MM-DD."
}
},
"required": [
"issuingCountry",
"validFrom",
"validUntil"
],
"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."
},
"locale": {
"type": "string",
"description": "Default en.",
"default": "en"
},
"currency": {
"type": "string",
"description": "Default EUR.",
"default": "EUR"
}
},
"required": [
"entries"
]
}🟢departi_check_tax(nationality, taxResidence, destination, duration, purpose, ...)
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.
输入模式
{
"type": "object",
"properties": {
"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."
},
"destination": {
"type": "string",
"description": "Country being visited, ISO alpha-2."
},
"duration": {
"type": "integer",
"description": "Stay in days."
},
"purpose": {
"type": "string",
"description": "tourism | remote_work | business … Default tourism.",
"default": "tourism"
},
"employmentType": {
"type": "string",
"description": "employed | self_employed | company_director | retired. Affects PE / treaty analysis."
},
"yearToDateDays": {
"type": "integer",
"description": "Days already spent in the destination this tax year. Default 0.",
"default": 0
},
"locale": {
"type": "string",
"description": "Default en.",
"default": "en"
},
"currency": {
"type": "string",
"description": "Default EUR.",
"default": "EUR"
}
},
"required": [
"nationality",
"taxResidence",
"destination",
"duration"
]
}🟢departi_search_accommodation(destination, checkin, checkout, guests, rooms, ...)
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.
输入模式
{
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "Destination as ISO-2 country or city/slug, e.g. \"PT\" or \"lisbon\"."
},
"checkin": {
"type": "string",
"format": "date",
"description": "ISO date, checkout must be strictly after checkin."
},
"checkout": {
"type": "string",
"format": "date",
"description": "ISO date, strictly after checkin."
},
"guests": {
"type": "integer",
"description": "Default 1.",
"default": 1
},
"rooms": {
"type": "integer",
"description": "Default 1.",
"default": 1
},
"maxPrice": {
"type": "number",
"description": "Max per-night price in currency."
},
"currency": {
"type": "string",
"description": "Default EUR.",
"default": "EUR"
},
"locale": {
"type": "string",
"description": "Default en.",
"default": "en"
},
"persona": {
"type": "string",
"description": "e.g. 'culture_explorer', 'foodie', 'adventure' — biases scoring."
},
"traveler_type": {
"type": "string",
"description": "e.g. 'digital_nomad', 'slow_traveler', 'weekend_breaker' — biases inventory (long-stay vs short)."
}
},
"required": [
"destination",
"checkin",
"checkout"
]
}🟢departi_search_transport(origin, destination, departure_date, return_date, passengers, ...)
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.
输入模式
{
"type": "object",
"properties": {
"origin": {
"type": "string",
"description": "Departure IATA code or city, e.g. \"BRU\" or \"Brussels\"."
},
"destination": {
"type": "string",
"description": "Arrival IATA code or city, e.g. \"LIS\" or \"Lisbon\"."
},
"departure_date": {
"type": "string",
"format": "date",
"description": "ISO date, today or future."
},
"return_date": {
"type": "string",
"format": "date",
"description": "Optional ISO date after departure_date for a round trip."
},
"passengers": {
"type": "integer",
"description": "Default 1.",
"default": 1
},
"cabin_class": {
"type": "string",
"enum": [
"economy",
"premium_economy",
"business",
"first"
],
"default": "economy",
"description": "Cabin class for the search. Default economy."
},
"traveler_type": {
"type": "string",
"description": "Optional persona hint."
}
},
"required": [
"origin",
"destination",
"departure_date"
]
}🟢departi_search_experiences(destination, categories, persona, traveler_type, limit)
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.
输入模式
{
"type": "object",
"properties": {
"destination": {
"type": "string",
"description": "ISO-2 country or city/slug, e.g. \"lisbon\"."
},
"categories": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional array from cultural | culinary | adventure | wellness | nature."
},
"persona": {
"type": "string",
"description": "e.g. 'culture_explorer', 'foodie', 'adventure'."
},
"traveler_type": {
"type": "string",
"description": "e.g. 'digital_nomad', 'slow_traveler'."
},
"limit": {
"type": "integer",
"description": "Max results. Default 10.",
"default": 10
}
},
"required": [
"destination"
]
}🟢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.
输入模式
{
"type": "object",
"properties": {},
"required": []
}社区
证据