Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,539Letters: 14Defects: 1,323counted just now
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:abaae33cffc96a664734891fc7d6f5a4c5856000599fac9d67a298e88d07f4a7 | sha256sum