Server definition
- Hash
- sha256:abaae33cffc96a664734891fc7d6f5a4c5856000599fac9d67a298e88d07f4a7
- What it is
- What a remote MCP server returned when asked what it offers: 7 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "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.",
"inputSchema": {
"properties": {
"currency": {
"default": "EUR",
"description": "Default EUR.",
"type": "string"
},
"destination": {
"description": "Country being visited, ISO alpha-2.",
"type": "string"
},
"duration": {
"description": "Stay in days.",
"type": "integer"
},
"employmentType": {
"description": "employed | self_employed | company_director | retired. Affects PE / treaty analysis.",
"type": "string"
},
"locale": {
"default": "en",
"description": "Default en.",
"type": "string"
},
"nationality": {
"description": "Citizenship / passport, ISO alpha-2. Drives citizenship-based obligations (e.g. US — taxed worldwide regardless of residence). May differ from tax residence.",
"type": "string"
},
"purpose": {
"default": "tourism",
"description": "tourism | remote_work | business … Default tourism.",
"type": "string"
},
"taxResidence": {
"description": "The traveller's current country of tax residence, ISO alpha-2. This selects the treaty \"resident state\" and can differ from nationality.",
"type": "string"
},
"yearToDateDays": {
"default": 0,
"description": "Days already spent in the destination this tax year. Default 0.",
"type": "integer"
}
},
"required": [
"nationality",
"taxResidence",
"destination",
"duration"
],
"type": "object"
},
"name": "departi_check_tax",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"currency": {
"default": "EUR",
"description": "Currency for costs. Default EUR.",
"type": "string"
},
"destination": {
"description": "Destination country, ISO alpha-2, e.g. \"PT\".",
"type": "string"
},
"duration": {
"description": "Intended stay in days, integer > 0.",
"type": "integer"
},
"locale": {
"default": "en",
"description": "Output language. Default en.",
"type": "string"
},
"nationality": {
"description": "Traveller's citizenship / passport, ISO alpha-2, e.g. \"BE\". This is the passport country, not tax residence.",
"type": "string"
},
"purpose": {
"default": "tourism",
"description": "One of tourism | remote_work | business | study | retirement. Default tourism.",
"type": "string"
}
},
"required": [
"nationality",
"destination",
"duration"
],
"type": "object"
},
"name": "departi_check_visa",
"outputSchema": null
},
{
"description": "Returns the authenticated user's Departi profile: nationality, tax residence, subscription tier, traveller persona, and preferences. No PII (name, email, date of birth) is returned — only the fields the other tools need for personalisation. Requires authentication (OAuth). Use to personalise the other tools' answers, or to answer \"where do I stand right now\". Read-only; takes no parameters.",
"inputSchema": {
"properties": {},
"required": [],
"type": "object"
},
"name": "departi_get_profile",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"checkin": {
"description": "ISO date, checkout must be strictly after checkin.",
"format": "date",
"type": "string"
},
"checkout": {
"description": "ISO date, strictly after checkin.",
"format": "date",
"type": "string"
},
"currency": {
"default": "EUR",
"description": "Default EUR.",
"type": "string"
},
"destination": {
"description": "Destination as ISO-2 country or city/slug, e.g. \"PT\" or \"lisbon\".",
"type": "string"
},
"guests": {
"default": 1,
"description": "Default 1.",
"type": "integer"
},
"locale": {
"default": "en",
"description": "Default en.",
"type": "string"
},
"maxPrice": {
"description": "Max per-night price in currency.",
"type": "number"
},
"persona": {
"description": "e.g. 'culture_explorer', 'foodie', 'adventure' — biases scoring.",
"type": "string"
},
"rooms": {
"default": 1,
"description": "Default 1.",
"type": "integer"
},
"traveler_type": {
"description": "e.g. 'digital_nomad', 'slow_traveler', 'weekend_breaker' — biases inventory (long-stay vs short).",
"type": "string"
}
},
"required": [
"destination",
"checkin",
"checkout"
],
"type": "object"
},
"name": "departi_search_accommodation",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"categories": {
"description": "Optional array from cultural | culinary | adventure | wellness | nature.",
"items": {
"type": "string"
},
"type": "array"
},
"destination": {
"description": "ISO-2 country or city/slug, e.g. \"lisbon\".",
"type": "string"
},
"limit": {
"default": 10,
"description": "Max results. Default 10.",
"type": "integer"
},
"persona": {
"description": "e.g. 'culture_explorer', 'foodie', 'adventure'.",
"type": "string"
},
"traveler_type": {
"description": "e.g. 'digital_nomad', 'slow_traveler'.",
"type": "string"
}
},
"required": [
"destination"
],
"type": "object"
},
"name": "departi_search_experiences",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"cabin_class": {
"default": "economy",
"description": "Cabin class for the search. Default economy.",
"enum": [
"economy",
"premium_economy",
"business",
"first"
],
"type": "string"
},
"departure_date": {
"description": "ISO date, today or future.",
"format": "date",
"type": "string"
},
"destination": {
"description": "Arrival IATA code or city, e.g. \"LIS\" or \"Lisbon\".",
"type": "string"
},
"origin": {
"description": "Departure IATA code or city, e.g. \"BRU\" or \"Brussels\".",
"type": "string"
},
"passengers": {
"default": 1,
"description": "Default 1.",
"type": "integer"
},
"return_date": {
"description": "Optional ISO date after departure_date for a round trip.",
"format": "date",
"type": "string"
},
"traveler_type": {
"description": "Optional persona hint.",
"type": "string"
}
},
"required": [
"origin",
"destination",
"departure_date"
],
"type": "object"
},
"name": "departi_search_transport",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"properties": {
"currency": {
"default": "EUR",
"description": "Default EUR.",
"type": "string"
},
"entries": {
"description": "Array of Schengen zone stays.",
"items": {
"properties": {
"country": {
"description": "ISO alpha-2 country code.",
"type": "string"
},
"entryDate": {
"description": "YYYY-MM-DD.",
"format": "date",
"type": "string"
},
"exitDate": {
"description": "YYYY-MM-DD.",
"format": "date",
"type": "string"
}
},
"required": [
"country",
"entryDate",
"exitDate"
],
"type": "object"
},
"type": "array"
},
"locale": {
"default": "en",
"description": "Default en.",
"type": "string"
},
"nationality": {
"description": "Citizenship, ISO alpha-2. EU/EEA nationals are exempt from counting.",
"type": "string"
},
"referenceDate": {
"description": "ISO date to evaluate the window at. Default: today.",
"format": "date",
"type": "string"
},
"residencePermit": {
"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"
}
},
"required": [
"entries"
],
"type": "object"
},
"name": "departi_track_schengen",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:abaae33cffc96a664734891fc7d6f5a4c5856000599fac9d67a298e88d07f4a7 | sha256sum