Departi MCP Server
OfficialThe Departi MCP Server provides travel compliance and curated trip planning tools for digital nomads, long-term travelers, and AI agents, focusing on 43 European countries and 105 destinations. It offers a read-only MCP interface.
Compliance Tools:
departi_check_visa: Check visa requirements (tourist, remote work, study, etc.) based on nationality, destination, and duration. Personalized for authenticated users.departi_check_tax: Analyze tax residency implications including treaties, digital nomad regimes, and social security for 43 countries.departi_track_schengen: Calculate 90/180-day Schengen stay with tax residency warnings. Supports persistent tracking when authenticated.
Trip Planning Tools:
departi_search_accommodation: Search 6,400+ accommodations across 105 destinations, filtered by price, traveler type, persona, with booking links.departi_search_transport: Search flights (budget/full-service) and ground transport with pricing, stops, and booking links.departi_search_experiences: Find tours and activities matched to traveler personality (cultural, culinary, etc.), with booking links.
Profile:
departi_get_profile: Retrieve user preferences, travel history, subscription tier, and compliance summary (requires OAuth).
Basic queries work without authentication; personalized results require OAuth.
Departi MCP Server
Travel-compliance intelligence and curated booking for digital nomads and long-stay travellers.
Departi helps you navigate the legal complexity of living abroad — visa requirements for any nationality/destination pair, permit-aware Schengen 90/180-day tracking, tax residency analysis with double-tax-treaty coverage across 55 countries, and persona-curated accommodation, transport, and experience search across 189 European destinations.
Endpoint
https://mcp.departi.eu/v3Protocol: Streamable HTTP (JSON-RPC 2.0) Authentication: OAuth 2.1 with PKCE (S256) or anonymous access
Related MCP server: trip-planner-mcp
Tools
All 7 tools are read-only with full MCP tool annotations.
Compliance
Tool | Description |
| Returns entry/visa options for a traveller — visa type, max stay, remote-work eligibility, cost, processing time, and application notes. |
| Tax-residency risk and double-tax-treaty analysis — threshold, day-counting method, treaty provisions, DN regimes, FEIE context. Advisory only. |
| Schengen 90/180 calculator — days used/remaining, status, projected limit date. Permit-aware: excludes permit-issuing country from count. |
Trip Planning
Tool | Description |
| Ranked accommodation with name, price, rating, facilities, persona-fit score, and booking deep-link. |
| Flight search across Duffel + Travelpayouts — carrier, price, cabin class, duration, stops, and booking deep-link. |
| Tours, activities, local experiences — category, duration, price, persona-fit score, and booking deep-link. |
Profile
Tool | Description |
| Authenticated user's profile: nationalities, tax residence, tier, travel history, and live compliance snapshot. |
Quick Start
Claude Desktop / Cursor / Windsurf
Add to your MCP configuration:
{
"mcpServers": {
"departi": {
"type": "streamable-http",
"url": "https://mcp.departi.eu/v3"
}
}
}For personalized results (visa checks based on your nationality, Schengen tracking with your travel history), use the OAuth endpoint:
{
"mcpServers": {
"departi": {
"type": "streamable-http",
"url": "https://mcp.departi.eu/v3/oauth"
}
}
}Claude.ai (Custom Connector)
Go to Settings → Connectors → Add custom connector
Enter URL:
https://mcp.departi.eu/v3/oauthApprove the OAuth consent screen
Connected — try the example prompts below
Example Prompts
Visa + Tax (multi-tool):
I'm American and planning to work remotely from Lisbon for 3 months starting in September. What visa do I need, and what are the tax implications for my US taxes?
Schengen tracking with permit:
How many Schengen days do I have left? I have a Portuguese D7 visa valid until 2027 and I've visited Spain and France this year.
Trip planning (multi-tool):
I want to spend October in Split, Croatia. Find me a place to stay under €1,200/month, flights from Brussels, some local experiences, and check if I need a visa.
Tax residency comparison:
Compare the tax implications of establishing tax residency in Portugal vs Bulgaria as a US freelancer earning $120K/year.
Authentication
Path | Auth | Use Case |
| Anonymous + optional Bearer | General queries, registry introspection |
| OAuth 2.1 required | Personalized results, Schengen tracking, profile access |
OAuth 2.1 Details
PKCE: S256 (required)
Dynamic Client Registration: RFC 7591
Protected Resource Metadata: RFC 9728
Authorization Server Metadata: RFC 8414
Issuer Identification: RFC 9207
Resource Indicators: RFC 8707
Token lifetimes: Access 1h, refresh 30d with rotation
Discovery endpoints:
https://mcp.departi.eu/.well-known/oauth-protected-resource/v3/oauth
https://departi.eu/.well-known/oauth-authorization-serverUse Cases
Digital nomads checking visa and tax obligations before relocating
Remote workers understanding FEIE eligibility and tax home rules
Long-term travelers tracking Schengen days to avoid overstays
Travel planners finding accommodation, transport, and experiences in one query
Tax advisors comparing residency regimes across European countries
AI agents building travel compliance into automated itinerary planning
Data Coverage
Visa data: 406 origin countries × 42 European destinations
Tax profiles: 49 countries with income tax, social security, treaty, and filing data
Accommodation: 189 European destinations with curated properties
Transport: Flights across Europe via Duffel + Travelpayouts
Experiences: Activities and tours in all covered destinations
Links
Support
Email: support@departi.eu
Issues: GitHub Issues
License
This repository contains documentation and configuration for the Departi MCP server. The server itself is a hosted service at mcp.departi.eu. See Terms of Service for usage terms.
Available Tools
7 toolsdeparti_check_taxARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Default en. | en |
| purpose | No | tourism | remote_work | business … Default tourism. | tourism |
| currency | No | Default EUR. | EUR |
| duration | Yes | Stay in days. | |
| destination | Yes | Country being visited, ISO alpha-2. | |
| nationality | Yes | Citizenship / passport, ISO alpha-2. Drives citizenship-based obligations (e.g. US — taxed worldwide regardless of residence). May differ from tax residence. | |
| taxResidence | Yes | The traveller's current country of tax residence, ISO alpha-2. This selects the treaty "resident state" and can differ from nationality. | |
| employmentType | No | employed | self_employed | company_director | retired. Affects PE / treaty analysis. | |
| yearToDateDays | No | Days already spent in the destination this tax year. Default 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the bar is lower. The description adds behavioral context: it states the tool is 'Advisory only, not tax advice,' and discloses a specific edge case—'any US citizenship triggers worldwide/citizenship-based obligations regardless of residence or other passports.' This goes beyond what annotations provide and is useful for an AI agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, followed by a bullet-style list of returns, then advisory and special notes. It is concise: five sentences covering all necessary aspects without fluff. Slightly longer than minimal due to the detailed return list and US note, but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (tax treaties, day counting, citizenship-based rules), the description covers the main outputs and sets expectations (advisory only). Schema and annotations handle input details and safety. The only minor gap is lack of mention of data sources or update frequency, but these are not critical for a read-only advisory tool. Overall complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not directly explain parameters but implicitly links them via the return description (e.g., duration affects day threshold). The US note adds meaning to the nationality parameter. Overall, the description adds marginal value beyond the already-complete schema, hence a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Assesses tax-residency risk and double-tax-treaty position for a traveller in a destination.' It lists concrete return items (risk, treaty provisions, special regimes, FEIE context) and clearly distinguishes itself from siblings like departi_check_visa and departi_track_schengen by focusing on tax residency and treaty analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context with example queries: 'Use for "will staying here make me tax resident / what does the treaty say / how are my days counted".' This tells the agent when to invoke the tool. It does not list alternative tools by name, but the sibling list and tool name make the scope clear. No exclusions or when-not guidance are given, but the use cases are well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
departi_check_visaARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Output language. Default en. | en |
| purpose | No | One of tourism | remote_work | business | study | retirement. Default tourism. | tourism |
| currency | No | Currency for costs. Default EUR. | EUR |
| duration | Yes | Intended stay in days, integer > 0. | |
| destination | Yes | Destination country, ISO alpha-2, e.g. "PT". | |
| nationality | Yes | Traveller's citizenship / passport, ISO alpha-2, e.g. "BE". This is the passport country, not tax residence. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clearly read-only. The description adds value by confirming the data source ('sourced from official immigration authorities') and by specifying that the tool returns details like cost and processing time, which goes beyond the schema. However, it does not elaborate on rate limits, caching, or what happens if the data is unavailable (e.g., unsupported passports). With good annotations, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense single paragraph that front-loads the core purpose and then provides structured output details, usage phrases, sibling references, and a practical tip. Every sentence adds value, and there is no repetition or fluff. It could be slightly more terse (e.g., reducing the exhaustive list of output fields), but overall it is well-organized and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description does a good job of listing what fields are returned (visa/permit type, requirement, max stay, work allowance, cost, processing time, notes). The three required parameters (nationality, destination, duration) are clearly explained, and optional parameters (purpose, locale, currency) are also covered. The only gap is that there is no mention of error handling, rate limits, or data freshness, but for a read-only lookup tool with strong annotations, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter and its format (ISO alpha-2, integer > 0, etc.). The description adds significant extra context: it clarifies that nationality should be the traveller's passport country (not tax residence), it gives examples ("PT", "BE"), it explains that multi-nationals may benefit from choosing the best passport, and it lists the valid purposes (tourism, remote_work, etc.). These additions justify a 4 rather than a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb ('Returns') and a clear resource ('entry/visa options'), and goes on to specify the exact inputs (nationality, destination, purpose, length of stay) and the full set of outputs (visa type, requirement, max stay, work allowance, cost, processing time, etc.). It also explicitly distinguishes this tool from sibling tools like departi_track_schengen and departi_check_tax, which helps an AI agent know exactly when to use this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('what visa do I need / can I stay N days / can I work remotely here') and directly names two alternatives with their distinct use cases: departi_track_schengen for counting days against the 90/180 limit, departi_check_tax for tax consequences. It also gives a practical tip about handling multi-nationals, which further guides selection. This is exceptional guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
departi_get_profileARead-onlyIdempotentInspect
Returns the authenticated user's Departi profile: nationalities, current tax residence, subscription tier, a travel-history summary, and a live compliance snapshot (current Schengen / tax-residency / US-clock status). Requires authentication (OAuth). Use to personalise the other tools' answers, or to answer "where do I stand right now". Read-only; takes no parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: it specifies OAuth authentication is required, confirms it is read-only and takes no parameters, and lists exactly what data is returned (including compliance snapshot details). This is more informative than annotations alone, which only provide hints. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose and immediately followed by use-case guidance. Every sentence adds value: first sentence enumerates return fields, second sentence provides usage context and emphasizes no parameters and auth. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no input parameters and no output schema, the description covers the main output fields and authentication requirements. While it could elaborate on the 'live compliance snapshot' structure, the description is already quite complete for a profile retrieval tool. The usage guidance ties well into sibling tool context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the description confirms 'takes no parameters', which matches the empty input schema. The description adds no further syntax or format details, but baseline is 4 for 0-param tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the authenticated user's Departi profile with specific fields (nationalities, tax residence, subscription tier, travel-history, compliance snapshot). This immediately distinguishes it from sibling tools like departi_check_visa or departi_search_accommodation, which handle specific checks or searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use to personalise the other tools' answers, or to answer "where do I stand right now".' This helps the agent know when to invoke it (before other tools for context). However, it does not explicitly state when not to use it or mention alternatives, so it's not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
departi_search_accommodationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rooms | No | Default 1. | |
| guests | No | Default 1. | |
| locale | No | Default en. | en |
| checkin | Yes | ISO date, checkout must be strictly after checkin. | |
| persona | No | e.g. 'culture_explorer', 'foodie', 'adventure' — biases scoring. | |
| checkout | Yes | ISO date, strictly after checkin. | |
| currency | No | Default EUR. | EUR |
| maxPrice | No | Max per-night price in currency. | |
| destination | Yes | Destination as ISO-2 country or city/slug, e.g. "PT" or "lisbon". | |
| traveler_type | No | e.g. 'digital_nomad', 'slow_traveler', 'weekend_breaker' — biases inventory (long-stay vs short). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable behavioral context: results are curated and scored based on persona/trip type, it returns specific fields including a booking deep-link, and it returns an empty list if no inventory matches. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is 4-5 sentences, front-loaded with the core purpose, and efficiently covers output, customization, usage guidance, and edge case (empty list). Every sentence contributes value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description adequately describes the return fields. It covers the main scenarios and edge cases. However, it does not mention pagination, maximum results, or error conditions, which are minor gaps for a search tool with 10 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining how persona and traveler_type influence scoring and inventory, and provides example values. It does not elaborate on every parameter, but the key ones that affect behavior are well explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Searches") and resource ("bookable accommodation"), and clearly states the output (a ranked list with name, price, rating, etc.). It also distinguishes the tool from siblings by naming departi_search_transport and departi_search_experiences, which handle other travel needs. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says "Use when the user needs a place to stay" and points to alternative tools for transportation and experiences. It also provides context on how persona and traveler_type parameters bias results, giving the agent clear guidance on when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
departi_search_experiencesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results. Default 10. | |
| persona | No | e.g. 'culture_explorer', 'foodie', 'adventure'. | |
| categories | No | Optional array from cultural | culinary | adventure | wellness | nature. | |
| destination | Yes | ISO-2 country or city/slug, e.g. "lisbon". | |
| traveler_type | No | e.g. 'digital_nomad', 'slow_traveler'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds value beyond annotations by explaining that results are ranked, personalized to persona, and that an empty list is returned if nothing matches. The only minor gap is not explaining how results are ordered (e.g., ranking criteria) but the annotation coverage is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph with three clear sentences. The first sentence states purpose and output, the second adds the personalization detail, and the third provides usage context with sibling differentiation. Every sentence delivers distinct value with zero redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (5 params, 1 required, no output schema), the description covers the tool's purpose, output fields, personalization aspect, and search behavior (empty list on no match). It lacks detail on sorting/ranking criteria or how persona/traveler_type affect results, but the annotations (openWorldHint) suggest the search is open-ended rather than deterministic. The description is largely complete for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description does not add any new parameter-level semantics beyond what the schema already provides (e.g., it doesn't explain how 'persona' or 'traveler_type' interact, or how 'categories' filtering works in practice). It meets the minimum but doesn't enhance the schema's documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb ('Searches') and clearly defines the resource ('bookable tours, activities and local experiences in a destination'). It explicitly lists the return fields (title, category, duration, price, persona-fit score, booking deep-link) and states the personalization aspect ('Matched to the traveller's persona/personality'). This distinguishes it well from sibling tools like departi_search_accommodation and departi_search_transport.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context for when to use this tool: 'Use for "what can I do in X".' It also provides clear when-not-to-use guidance by naming two siblings: 'For a place to stay use departi_search_accommodation; to get there use departi_search_transport.' This completely removes ambiguity about which travel search tool to select.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
departi_search_transportARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | Departure IATA code or city, e.g. "BRU" or "Brussels". | |
| passengers | No | Default 1. | |
| cabin_class | No | Cabin class for the search. Default economy. | economy |
| destination | Yes | Arrival IATA code or city, e.g. "LIS" or "Lisbon". | |
| return_date | No | Optional ISO date after departure_date for a round trip. | |
| traveler_type | No | Optional persona hint. | |
| departure_date | Yes | ISO date, today or future. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it sources flights across multiple providers (Duffel + Travelpayouts), states prices are indicative requiring booking via the link, and clarifies empty list behavior. This complements the readOnlyHint and idempotentHint annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of moderate length (roughly 100 words). It covers all essential points without excessive verbosity. While front-loading could be slightly improved by placing the core action sentence first, it is already clear. Minor structural improvement possible, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, and moderate complexity, the description adequately explains the tool's behavior, return format, data sources, and edge cases (empty list). It doesn't mention pagination or result limits, but these are not critical for a simple search tool. Fairly complete for the use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add new parameter-level semantics beyond what the schema already provides (e.g., origin/destination formats, cabin class enum, date formats). The return format list is helpful but relates to output, not parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Searches flights between two places and returns a ranked list of options' with specific details (carrier, price, etc.). It also distinguishes itself from sibling tools departi_search_accommodation and departi_search_experiences, which cover different travel needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use for "how do I get from A to B by air"' and provides negative guidance: 'Ground/rail/bus is not offered through this tool.' It also names specific alternative tools for accommodation and experiences, giving clear when-to-use and when-not-to-use boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
departi_track_schengenARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Default en. | en |
| entries | Yes | Array of Schengen zone stays. | |
| currency | No | Default EUR. | EUR |
| nationality | No | Citizenship, ISO alpha-2. EU/EEA nationals are exempt from counting. | |
| referenceDate | No | ISO date to evaluate the window at. Default: today. | |
| residencePermit | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds substantial behavioral detail: return fields (days used, days remaining, status with four enumerated levels, projected date), the special handling for residence/digital-nomad permits (excludes issuing country days but counts all others), and the note that EU/EEA nationals are not counted. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that front-loads the core function and outputs. Every sentence serves a purpose: initial summary, what it returns, target usage, and critical edge cases. No wasted words or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description sufficiently explains the return structure (days used, days remaining, status, projected date). It also covers the residence permit and nationality exceptions. However, it does not mention error cases (invalid input, missing countries) or the exact format of the returned data (e.g., JSON object), leaving minor gaps for a tool with nested objects and no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by explaining the semantic logic of the residencePermit parameter ('When present and active... days in the issuing country are excluded') and clarifies that 'nationality' determines exemption. This extra context elevates the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Calculates Schengen 90/180 short-stay status from a list of stays.' It also lists the exact outputs and the target audience (non-EU travellers). The sibling tools (visa, tax, accommodation, etc.) are clearly distinct, so this tool is uniquely positioned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Use for non-EU travellers tracking the 90-days-in-180 limit' and clarifies that EU/EEA nationals are exempt and residence permits only exempt the issuing country. It does not explicitly name when NOT to use (e.g., use departi_check_visa for visa status), but the sibling context combined with this directive provides sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v3.2.0- Changed
departi_check_tax9 fields changed- added
Input schema / properties / currency / descriptionAdded value: +"Default EUR." - added
Input schema / properties / destination / descriptionAdded value: +"Country being visited, ISO alpha-2." - added
Input schema / properties / duration / descriptionAdded value: +"Stay in days." - changed
Input schema / properties / employmentType / descriptionPrevious value: -"e.g. 'employed', 'self_employed', 'company_director', 'retired'"New value: +"employed | self_employed | company_director | retired. Affects PE / treaty analysis." - added
Input schema / properties / locale / descriptionAdded value: +"Default en." - added
Input schema / properties / nationality / descriptionAdded value: +"Citizenship / passport, ISO alpha-2. Drives citizenship-based obligations (e.g. US — taxed worldwide regardless of residence). May differ from tax residence." - changed
Input schema / properties / purpose / descriptionPrevious value: -"e.g. 'tourism', 'remote_work', 'business'"New value: +"tourism | remote_work | business … Default tourism." - changed
Input schema / properties / taxResidence / descriptionPrevious value: -"Current tax home country"New value: +"The traveller's current country of tax residence, ISO alpha-2. This selects the treaty \"resident state\" and can differ from nationality." - added
Input schema / properties / yearToDateDays / descriptionAdded value: +"Days already spent in the destination this tax year. Default 0."
- Changed
departi_check_visa6 fields changed- added
Input schema / properties / currency / descriptionAdded value: +"Currency for costs. Default EUR." - changed
Input schema / properties / destination / descriptionPrevious value: -"ISO alpha-2, e.g. 'PT'"New value: +"Destination country, ISO alpha-2, e.g. \"PT\"." - changed
Input schema / properties / duration / descriptionPrevious value: -"Stay in days"New value: +"Intended stay in days, integer > 0." - added
Input schema / properties / locale / descriptionAdded value: +"Output language. Default en." - changed
Input schema / properties / nationality / descriptionPrevious value: -"ISO alpha-2, e.g. 'BE'"New value: +"Traveller's citizenship / passport, ISO alpha-2, e.g. \"BE\". This is the passport country, not tax residence." - changed
Input schema / properties / purpose / descriptionPrevious value: -"e.g. 'tourism', 'remote_work', 'business', 'study', 'retirement'"New value: +"One of tourism | remote_work | business | study | retirement. Default tourism."
- Changed
departi_search_accommodation10 fields changed- added
Input schema / properties / checkin / descriptionAdded value: +"ISO date, checkout must be strictly after checkin." - added
Input schema / properties / checkout / descriptionAdded value: +"ISO date, strictly after checkin." - added
Input schema / properties / currency / descriptionAdded value: +"Default EUR." - added
Input schema / properties / destination / descriptionAdded value: +"Destination as ISO-2 country or city/slug, e.g. \"PT\" or \"lisbon\"." - added
Input schema / properties / guests / descriptionAdded value: +"Default 1." - added
Input schema / properties / locale / descriptionAdded value: +"Default en." - changed
Input schema / properties / maxPrice / descriptionPrevious value: -"Per night in EUR"New value: +"Max per-night price in currency." - changed
Input schema / properties / persona / descriptionPrevious value: -"e.g. 'culture_explorer', 'foodie', 'adventure'"New value: +"e.g. 'culture_explorer', 'foodie', 'adventure' — biases scoring." - added
Input schema / properties / rooms / descriptionAdded value: +"Default 1." - changed
Input schema / properties / traveler_type / descriptionPrevious value: -"e.g. 'digital_nomad', 'slow_traveler', 'weekend_breaker'"New value: +"e.g. 'digital_nomad', 'slow_traveler', 'weekend_breaker' — biases inventory (long-stay vs short)."
- Changed
departi_search_experiences5 fields changed- changed
Input schema / properties / categories / descriptionPrevious value: -"e.g. 'cultural', 'culinary', 'adventure', 'wellness', 'nature'"New value: +"Optional array from cultural | culinary | adventure | wellness | nature." - added
Input schema / properties / destination / descriptionAdded value: +"ISO-2 country or city/slug, e.g. \"lisbon\"." - added
Input schema / properties / limit / descriptionAdded value: +"Max results. Default 10." - changed
Input schema / properties / persona / descriptionPrevious value: -"e.g. 'culture_explorer', 'foodie', 'adventure'"New value: +"e.g. 'culture_explorer', 'foodie', 'adventure'." - changed
Input schema / properties / traveler_type / descriptionPrevious value: -"e.g. 'digital_nomad', 'slow_traveler'"New value: +"e.g. 'digital_nomad', 'slow_traveler'."
- Changed
departi_search_transport8 fields changed- added
Input schema / properties / cabin_classAdded value: +{ + "default": "economy", + "description": "Cabin class for the search. Default economy.", + "enum": [ + "economy", + "premium_economy", + "business", + "first" + ], + "type": "string" +} - added
Input schema / properties / departure_date / descriptionAdded value: +"ISO date, today or future." - changed
Input schema / properties / destination / descriptionPrevious value: -"IATA or city, e.g. 'LIS'"New value: +"Arrival IATA code or city, e.g. \"LIS\" or \"Lisbon\"." - removed
Input schema / properties / modeRemoved value: -{ - "default": "all", - "description": "'all', 'flights', or 'ground'", - "type": "string" -} - changed
Input schema / properties / origin / descriptionPrevious value: -"IATA or city, e.g. 'BRU'"New value: +"Departure IATA code or city, e.g. \"BRU\" or \"Brussels\"." - added
Input schema / properties / passengers / descriptionAdded value: +"Default 1." - added
Input schema / properties / return_date / descriptionAdded value: +"Optional ISO date after departure_date for a round trip." - changed
Input schema / properties / traveler_type / descriptionPrevious value: -"e.g. 'digital_nomad', 'weekend_breaker'"New value: +"Optional persona hint."
- Changed
departi_track_schengen9 fields changed- added
Input schema / properties / currency / descriptionAdded value: +"Default EUR." - added
Input schema / properties / entries / descriptionAdded value: +"Array of Schengen zone stays." - added
Input schema / properties / entries / items / properties / country / descriptionAdded value: +"ISO alpha-2 country code." - added
Input schema / properties / entries / items / properties / entryDate / descriptionAdded value: +"YYYY-MM-DD." - added
Input schema / properties / entries / items / properties / exitDate / descriptionAdded value: +"YYYY-MM-DD." - added
Input schema / properties / locale / descriptionAdded value: +"Default en." - added
Input schema / properties / nationality / descriptionAdded value: +"Citizenship, ISO alpha-2. EU/EEA nationals are exempt from counting." - added
Input schema / properties / referenceDate / descriptionAdded value: +"ISO date to evaluate the window at. Default: today." - added
Input schema / properties / residencePermitAdded value: +{ + "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.", + "properties": { + "issuingCountry": { + "description": "ISO alpha-2 country that issued the permit.", + "type": "string" + }, + "validFrom": { + "description": "YYYY-MM-DD.", + "format": "date", + "type": "string" + }, + "validUntil": { + "description": "YYYY-MM-DD.", + "format": "date", + "type": "string" + } + }, + "required": [ + "issuingCountry", + "validFrom", + "validUntil" + ], + "type": "object" +}
7 tool updates
v0.1.0- First observed
departi_check_tax - First observed
departi_check_visa - First observed
departi_get_profile - First observed
departi_search_accommodation - First observed
departi_search_experiences - First observed
departi_search_transport - First observed
departi_track_schengen
TDQS
Each tool has a clearly distinct purpose: visas, Schengen tracking, tax assessment, accommodation, transport, experiences, and user profile. There is no overlap or ambiguity between them.
All tools follow a consistent 'departi_' prefix with a clear verb_noun pattern (check_visa, track_schengen, check_tax, search_accommodation, search_transport, search_experiences, get_profile). Naming is predictable and well-structured.
Seven tools cover the core travel workflow (visa/tax/logistics/accommodation/activities) without being excessive. Each tool earns its place, and the count is well-scoped for the server's purpose.
The tool set covers the major lifecycle of travel planning: check requirements (visa, tax, Schengen), book transport, accommodation, and experiences, and retrieve user profile. Minor gaps like ground transport or travel insurance are absent, but the core is well-covered.
Maintenance
Related MCP Connectors
Plan trips and track visa days per traveller across 39,601 entry rules
Aggregated travel MCP — flights, tours, activities, price checks, visas, and more.
Your personal AI travel concierge — flights, hotels, 116M+ POIs, visas, weather & more
Trip planning for nomadic families: multi-stop trips, Schengen/visa, climate, destinations.
Related MCP Servers
- FlicenseAqualityDmaintenanceEuropean business compliance suite for AI agents — 28 tools covering tax ID validation (PT, ES, FR, DE, IT, UK, NL), IBAN verification, EU VAT rates, invoice requirements, e-invoicing rules, payment terms, labor calendar helpers, VAT breakdown calculations and invoice schema validation for 18+ European countries.28-
- AlicenseAqualityBmaintenanceEnables AI agents to plan trips by searching flights, accommodations, and activities, and managing itineraries collaboratively with role-based permissions.2061MIT
- FlicenseNot gradedqualityDmaintenanceProvides personalized travel recommendations by analyzing climate, currency exchange rates, safety, and budget constraints through AI agents and multiple public APIs.-
- FlicenseNot gradedqualityBmaintenanceConverts natural language travel requests into customizable multi-city itineraries, with tools for planning, editing, and exporting trips across 69 global destinations.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Departi/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server