Skip to main content
Glama
Departi

Departi MCP Server

Official

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/v3

Protocol: 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

departi_check_visa

Returns entry/visa options for a traveller — visa type, max stay, remote-work eligibility, cost, processing time, and application notes.

departi_check_tax

Tax-residency risk and double-tax-treaty analysis — threshold, day-counting method, treaty provisions, DN regimes, FEIE context. Advisory only.

departi_track_schengen

Schengen 90/180 calculator — days used/remaining, status, projected limit date. Permit-aware: excludes permit-issuing country from count.

Trip Planning

Tool

Description

departi_search_accommodation

Ranked accommodation with name, price, rating, facilities, persona-fit score, and booking deep-link.

departi_search_transport

Flight search across Duffel + Travelpayouts — carrier, price, cabin class, duration, stops, and booking deep-link.

departi_search_experiences

Tours, activities, local experiences — category, duration, price, persona-fit score, and booking deep-link.

Profile

Tool

Description

departi_get_profile

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)

  1. Go to Settings → Connectors → Add custom connector

  2. Enter URL: https://mcp.departi.eu/v3/oauth

  3. Approve the OAuth consent screen

  4. 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

/v3

Anonymous + optional Bearer

General queries, registry introspection

/v3/oauth

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-server

Use 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

Support

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 tools
departi_check_taxA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoDefault en.en
purposeNotourism | remote_work | business … Default tourism.tourism
currencyNoDefault EUR.EUR
durationYesStay in days.
destinationYesCountry being visited, ISO alpha-2.
nationalityYesCitizenship / passport, ISO alpha-2. Drives citizenship-based obligations (e.g. US — taxed worldwide regardless of residence). May differ from tax residence.
taxResidenceYesThe traveller's current country of tax residence, ISO alpha-2. This selects the treaty "resident state" and can differ from nationality.
employmentTypeNoemployed | self_employed | company_director | retired. Affects PE / treaty analysis.
yearToDateDaysNoDays already spent in the destination this tax year. Default 0.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_visaA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoOutput language. Default en.en
purposeNoOne of tourism | remote_work | business | study | retirement. Default tourism.tourism
currencyNoCurrency for costs. Default EUR.EUR
durationYesIntended stay in days, integer > 0.
destinationYesDestination country, ISO alpha-2, e.g. "PT".
nationalityYesTraveller's citizenship / passport, ISO alpha-2, e.g. "BE". This is the passport country, not tax residence.

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_profileA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_accommodationA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
roomsNoDefault 1.
guestsNoDefault 1.
localeNoDefault en.en
checkinYesISO date, checkout must be strictly after checkin.
personaNoe.g. 'culture_explorer', 'foodie', 'adventure' — biases scoring.
checkoutYesISO date, strictly after checkin.
currencyNoDefault EUR.EUR
maxPriceNoMax per-night price in currency.
destinationYesDestination as ISO-2 country or city/slug, e.g. "PT" or "lisbon".
traveler_typeNoe.g. 'digital_nomad', 'slow_traveler', 'weekend_breaker' — biases inventory (long-stay vs short).

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_experiencesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results. Default 10.
personaNoe.g. 'culture_explorer', 'foodie', 'adventure'.
categoriesNoOptional array from cultural | culinary | adventure | wellness | nature.
destinationYesISO-2 country or city/slug, e.g. "lisbon".
traveler_typeNoe.g. 'digital_nomad', 'slow_traveler'.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_transportA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
originYesDeparture IATA code or city, e.g. "BRU" or "Brussels".
passengersNoDefault 1.
cabin_classNoCabin class for the search. Default economy.economy
destinationYesArrival IATA code or city, e.g. "LIS" or "Lisbon".
return_dateNoOptional ISO date after departure_date for a round trip.
traveler_typeNoOptional persona hint.
departure_dateYesISO date, today or future.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_schengenA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoDefault en.en
entriesYesArray of Schengen zone stays.
currencyNoDefault EUR.EUR
nationalityNoCitizenship, ISO alpha-2. EU/EEA nationals are exempt from counting.
referenceDateNoISO date to evaluate the window at. Default: today.
residencePermitNoResidence 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

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 6 tool updatesv3.2.0
    • Changeddeparti_check_tax9 fields changed
      • addedInput schema / properties / currency / description
        Added value: +"Default EUR."
      • addedInput schema / properties / destination / description
        Added value: +"Country being visited, ISO alpha-2."
      • addedInput schema / properties / duration / description
        Added value: +"Stay in days."
      • changedInput schema / properties / employmentType / description
        Previous value: -"e.g. 'employed', 'self_employed', 'company_director', 'retired'"New value: +"employed | self_employed | company_director | retired. Affects PE / treaty analysis."
      • addedInput schema / properties / locale / description
        Added value: +"Default en."
      • addedInput schema / properties / nationality / description
        Added value: +"Citizenship / passport, ISO alpha-2. Drives citizenship-based obligations (e.g. US — taxed worldwide regardless of residence). May differ from tax residence."
      • changedInput schema / properties / purpose / description
        Previous value: -"e.g. 'tourism', 'remote_work', 'business'"New value: +"tourism | remote_work | business … Default tourism."
      • changedInput schema / properties / taxResidence / description
        Previous 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."
      • addedInput schema / properties / yearToDateDays / description
        Added value: +"Days already spent in the destination this tax year. Default 0."
    • Changeddeparti_check_visa6 fields changed
      • addedInput schema / properties / currency / description
        Added value: +"Currency for costs. Default EUR."
      • changedInput schema / properties / destination / description
        Previous value: -"ISO alpha-2, e.g. 'PT'"New value: +"Destination country, ISO alpha-2, e.g. \"PT\"."
      • changedInput schema / properties / duration / description
        Previous value: -"Stay in days"New value: +"Intended stay in days, integer > 0."
      • addedInput schema / properties / locale / description
        Added value: +"Output language. Default en."
      • changedInput schema / properties / nationality / description
        Previous 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."
      • changedInput schema / properties / purpose / description
        Previous value: -"e.g. 'tourism', 'remote_work', 'business', 'study', 'retirement'"New value: +"One of tourism | remote_work | business | study | retirement. Default tourism."
    • Changeddeparti_search_accommodation10 fields changed
      • addedInput schema / properties / checkin / description
        Added value: +"ISO date, checkout must be strictly after checkin."
      • addedInput schema / properties / checkout / description
        Added value: +"ISO date, strictly after checkin."
      • addedInput schema / properties / currency / description
        Added value: +"Default EUR."
      • addedInput schema / properties / destination / description
        Added value: +"Destination as ISO-2 country or city/slug, e.g. \"PT\" or \"lisbon\"."
      • addedInput schema / properties / guests / description
        Added value: +"Default 1."
      • addedInput schema / properties / locale / description
        Added value: +"Default en."
      • changedInput schema / properties / maxPrice / description
        Previous value: -"Per night in EUR"New value: +"Max per-night price in currency."
      • changedInput schema / properties / persona / description
        Previous value: -"e.g. 'culture_explorer', 'foodie', 'adventure'"New value: +"e.g. 'culture_explorer', 'foodie', 'adventure' — biases scoring."
      • addedInput schema / properties / rooms / description
        Added value: +"Default 1."
      • changedInput schema / properties / traveler_type / description
        Previous 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)."
    • Changeddeparti_search_experiences5 fields changed
      • changedInput schema / properties / categories / description
        Previous value: -"e.g. 'cultural', 'culinary', 'adventure', 'wellness', 'nature'"New value: +"Optional array from cultural | culinary | adventure | wellness | nature."
      • addedInput schema / properties / destination / description
        Added value: +"ISO-2 country or city/slug, e.g. \"lisbon\"."
      • addedInput schema / properties / limit / description
        Added value: +"Max results. Default 10."
      • changedInput schema / properties / persona / description
        Previous value: -"e.g. 'culture_explorer', 'foodie', 'adventure'"New value: +"e.g. 'culture_explorer', 'foodie', 'adventure'."
      • changedInput schema / properties / traveler_type / description
        Previous value: -"e.g. 'digital_nomad', 'slow_traveler'"New value: +"e.g. 'digital_nomad', 'slow_traveler'."
    • Changeddeparti_search_transport8 fields changed
      • addedInput schema / properties / cabin_class
        Added value: +{
        +  "default": "economy",
        +  "description": "Cabin class for the search. Default economy.",
        +  "enum": [
        +    "economy",
        +    "premium_economy",
        +    "business",
        +    "first"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / departure_date / description
        Added value: +"ISO date, today or future."
      • changedInput schema / properties / destination / description
        Previous value: -"IATA or city, e.g. 'LIS'"New value: +"Arrival IATA code or city, e.g. \"LIS\" or \"Lisbon\"."
      • removedInput schema / properties / mode
        Removed value: -{
        -  "default": "all",
        -  "description": "'all', 'flights', or 'ground'",
        -  "type": "string"
        -}
      • changedInput schema / properties / origin / description
        Previous value: -"IATA or city, e.g. 'BRU'"New value: +"Departure IATA code or city, e.g. \"BRU\" or \"Brussels\"."
      • addedInput schema / properties / passengers / description
        Added value: +"Default 1."
      • addedInput schema / properties / return_date / description
        Added value: +"Optional ISO date after departure_date for a round trip."
      • changedInput schema / properties / traveler_type / description
        Previous value: -"e.g. 'digital_nomad', 'weekend_breaker'"New value: +"Optional persona hint."
    • Changeddeparti_track_schengen9 fields changed
      • addedInput schema / properties / currency / description
        Added value: +"Default EUR."
      • addedInput schema / properties / entries / description
        Added value: +"Array of Schengen zone stays."
      • addedInput schema / properties / entries / items / properties / country / description
        Added value: +"ISO alpha-2 country code."
      • addedInput schema / properties / entries / items / properties / entryDate / description
        Added value: +"YYYY-MM-DD."
      • addedInput schema / properties / entries / items / properties / exitDate / description
        Added value: +"YYYY-MM-DD."
      • addedInput schema / properties / locale / description
        Added value: +"Default en."
      • addedInput schema / properties / nationality / description
        Added value: +"Citizenship, ISO alpha-2. EU/EEA nationals are exempt from counting."
      • addedInput schema / properties / referenceDate / description
        Added value: +"ISO date to evaluate the window at. Default: today."
      • addedInput schema / properties / residencePermit
        Added 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"
        +}
  2. 7 tool updatesv0.1.0
    • First observeddeparti_check_tax
    • First observeddeparti_check_visa
    • First observeddeparti_get_profile
    • First observeddeparti_search_accommodation
    • First observeddeparti_search_experiences
    • First observeddeparti_search_transport
    • First observeddeparti_track_schengen

TDQS

A4.4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    European 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
    -

Latest Blog Posts

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