Server definition
- Hash
- sha256:3cb1449c26855cd1b1be7e4f9621c7f12dbf294d32d355da0aee24b2760ddb3d
- What it is
- What a remote MCP server returned when asked what it offers: 43 tools
The blob, as servednamed by its sha256
{
"instructions": "NomadPoint holds the user's trips: journeys, flights, accommodations, activities, passports/visas, and journey members.\n\nCall list_journeys/get_journey/get_me FIRST for any task involving a trip, flight, booking, or travel document — before searching Gmail or driving a browser. It is usually faster and more accurate than reconstructing the same facts from an email or a booking site.\n\nWhat it does NOT do: it does not talk to airlines/hotels/providers, place bookings, or hold payment info — it is a record of what the user has booked or plans to, not a way to book. Use its data (dates, confirmation codes, passenger names, get_me's contact email) to drive the provider's own site/API, then write the result back here with update_flight/create_accommodation/etc. so it stays the source of truth.",
"tools": [
{
"description": "Record a passport from its details alone (no scan needed). Also adds the country to the user's nationalities, which is what visa answers are computed from.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"country_code": {
"type": "string"
},
"expiry_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"is_primary": {
"type": "boolean"
},
"issue_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"passport_number": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"country_code"
],
"type": "object"
},
"name": "add_passport",
"outputSchema": null
},
{
"description": "Add a booked place to stay (hotel/hostel/apartment) to a trip.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"address": {
"type": "string"
},
"booking_url": {
"type": "string"
},
"check_in": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"check_out": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"confirmation_code": {
"type": "string"
},
"country_code": {
"type": "string"
},
"currency": {
"type": "string"
},
"journey_id": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"name": {
"description": "The property's own name, e.g. 'Memmo Alfama'",
"type": "string"
},
"notes": {
"type": "string"
},
"place_name": {
"description": "The CITY the property is in, e.g. 'Lisbon' — not the property's name",
"type": "string"
},
"price_per_night": {
"type": "number"
},
"provider": {
"description": "Who it was booked with, e.g. 'Booking.com'",
"type": "string"
},
"travelers": {
"description": "Member user ids this is for (from list_journey_members). Omit for everyone — that's the norm.",
"items": {
"type": "string"
},
"type": "array"
},
"type": {
"description": "hotel, hostel, airbnb, apartment, other",
"type": "string"
}
},
"required": [
"journey_id",
"type"
],
"type": "object"
},
"name": "create_accommodation",
"outputSchema": null
},
{
"description": "Add a thing to do — or a travel leg between places — to a trip, optionally attached to a stop.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"address": {
"type": "string"
},
"booking_url": {
"type": "string"
},
"category": {
"type": "string"
},
"country_code": {
"type": "string"
},
"currency": {
"type": "string"
},
"emoji": {
"type": "string"
},
"end_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"is_booked": {
"description": "False = planned but not yet purchased/reserved. Set true only once payment actually went through.",
"type": "boolean"
},
"journey_id": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"notes": {
"type": "string"
},
"place_name": {
"type": "string"
},
"price": {
"type": "number"
},
"start_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"stay_id": {
"description": "UUID of the stop this belongs to — attaches it to that city's days",
"type": "string"
},
"title": {
"type": "string"
},
"transport_mode": {
"description": "For a travel leg: walk, taxi, train, bus, ferry, drive",
"type": "string"
},
"travelers": {
"description": "Member user ids this is for (from list_journey_members). Omit for everyone — that's the norm.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"journey_id",
"title"
],
"type": "object"
},
"name": "create_activity",
"outputSchema": null
},
{
"description": "Record a travel document (ticket, boarding pass, hotel confirmation, insurance…) and, when a file_name/mime_type is given, return a signed upload_url to PUT the file to. Use related_id to attach it to the flight, accommodation or activity it belongs to.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"country_code": {
"type": "string"
},
"document_type": {
"description": "passport, visa, boarding_pass, hotel_confirmation, travel_insurance, vaccination, national_id, drivers_license, onward_ticket, other",
"type": "string"
},
"file_name": {
"description": "e.g. ticket-14147653.pdf — only needed when a file will be uploaded",
"type": "string"
},
"mime_type": {
"description": "e.g. application/pdf, image/jpeg",
"type": "string"
},
"related_id": {
"description": "UUID of the flight/accommodation/activity this document belongs to",
"type": "string"
},
"title": {
"type": "string"
},
"valid_from": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"valid_until": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
}
},
"required": [
"title",
"document_type"
],
"type": "object"
},
"name": "create_document",
"outputSchema": null
},
{
"description": "Record one thing the user spent money on. Use for spend with no itinerary item of its own — meals, transport, visa fees, a booking that isn't on the trip. If the purchase IS already on the itinerary, set its price with update_flight/update_accommodation/update_activity instead; doing both counts it twice. Pass source_ref when importing so a re-run can't duplicate it.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"amount": {
"description": "The total actually paid. Never a deposit, a per-night rate or a single fee.",
"type": "number"
},
"amount_usd": {
"description": "The same amount in USD, frozen at entry. Set it ONLY when the source states a USD (or already-converted home-currency) figure. Omit otherwise — the app converts at the live rate, which is honest, whereas a guessed historical rate is frozen forever.",
"type": "number"
},
"category": {
"description": "One of the app's expense categories. Food is 'restaurant'.",
"enum": [
"restaurant",
"transport",
"lodging",
"sight",
"groceries",
"shopping",
"coworking",
"activity"
],
"type": "string"
},
"currency": {
"description": "ISO 4217 code, e.g. USD, EUR, THB",
"type": "string"
},
"journey_id": {
"type": "string"
},
"related_event_id": {
"description": "The flight/booking/activity this relates to, if any.",
"type": "string"
},
"source_ref": {
"description": "Where this came from, e.g. 'gmail:<messageId>'. Unique per user — a repeat import is refused.",
"type": "string"
},
"spent_on": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"stay_id": {
"description": "The stop this belongs to. Omit unless certain — an expense with a date is attributed to the stop whose dates contain it automatically.",
"type": "string"
},
"title": {
"description": "What it was, as the user would recognise it",
"type": "string"
}
},
"required": [
"journey_id",
"title",
"amount",
"currency",
"category",
"spent_on"
],
"type": "object"
},
"name": "create_expense",
"outputSchema": null
},
{
"description": "Add a flight to a trip.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"airline_code": {
"description": "IATA airline code, e.g. 'TP' — find it with search_airlines",
"type": "string"
},
"airline_name": {
"type": "string"
},
"arrival_airport_code": {
"description": "IATA code, e.g. 'NRT' — find it with search_airports",
"type": "string"
},
"arrival_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"arrival_terminal": {
"type": "string"
},
"booking_url": {
"type": "string"
},
"cabin_class": {
"type": "string"
},
"confirmation_code": {
"type": "string"
},
"currency": {
"type": "string"
},
"departure_airport_code": {
"description": "IATA code, e.g. 'JFK' — find it with search_airports",
"type": "string"
},
"departure_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"departure_terminal": {
"type": "string"
},
"flight_number": {
"type": "string"
},
"is_onward_ticket": {
"description": "Mark it as the proof-of-onward-travel ticket for an entry requirement",
"type": "boolean"
},
"journey_id": {
"type": "string"
},
"notes": {
"type": "string"
},
"price": {
"type": "number"
},
"seat": {
"type": "string"
},
"travelers": {
"description": "Member user ids this is for (from list_journey_members). Omit for everyone — that's the norm.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"journey_id",
"departure_airport_code",
"arrival_airport_code",
"departure_datetime"
],
"type": "object"
},
"name": "create_flight",
"outputSchema": null
},
{
"description": "Start a new trip. Use when the user wants a separate trip rather than adding to an existing one.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"description": {
"type": "string"
},
"end_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"name": {
"type": "string"
},
"start_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "create_journey",
"outputSchema": null
},
{
"description": "Add a stay — a stop in a city — to a trip. This is how a destination gets onto the itinerary; book lodging for it with create_accommodation on the same dates.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"checkin_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"checkout_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"checkout_flexible": {
"type": "boolean"
},
"city": {
"description": "City name, e.g. 'Lisbon' — the city itself, not a neighbourhood, street or hotel",
"type": "string"
},
"city_code": {
"description": "Optional alternative to `city` when you already know the code, e.g. 'LIS'",
"type": "string"
},
"country_code": {
"description": "ISO country code, e.g. 'JP'",
"type": "string"
},
"journey_id": {
"type": "string"
},
"notes": {
"type": "string"
},
"travelers": {
"description": "Member user ids this is for (from list_journey_members). Omit for everyone — that's the norm.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"journey_id",
"country_code",
"city"
],
"type": "object"
},
"name": "create_stay",
"outputSchema": null
},
{
"description": "Record a visa the user holds or has applied for.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"application_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"cost_currency": {
"type": "string"
},
"cost_paid": {
"type": "number"
},
"country_code": {
"type": "string"
},
"embassy_consulate": {
"type": "string"
},
"entries_allowed": {
"description": "single, double, multiple",
"type": "string"
},
"expiry_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"issue_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"max_entries": {
"type": "number"
},
"notes": {
"type": "string"
},
"passport_country_code": {
"type": "string"
},
"visa_name": {
"type": "string"
},
"visa_number": {
"type": "string"
},
"visa_type": {
"description": "e.g. tourist, business, student, work, digital_nomad, transit",
"type": "string"
}
},
"required": [
"country_code",
"visa_type"
],
"type": "object"
},
"name": "create_visa",
"outputSchema": null
},
{
"description": "Remove a booking from the trip.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accommodation_id": {
"type": "string"
}
},
"required": [
"accommodation_id"
],
"type": "object"
},
"name": "delete_accommodation",
"outputSchema": null
},
{
"description": "Remove an activity from the trip.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_id": {
"type": "string"
}
},
"required": [
"activity_id"
],
"type": "object"
},
"name": "delete_activity",
"outputSchema": null
},
{
"description": "Delete one of the user's travel documents.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"document_id": {
"type": "string"
}
},
"required": [
"document_id"
],
"type": "object"
},
"name": "delete_document",
"outputSchema": null
},
{
"description": "Remove a recorded expense. Irreversible.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"expense_id": {
"type": "string"
}
},
"required": [
"expense_id"
],
"type": "object"
},
"name": "delete_expense",
"outputSchema": null
},
{
"description": "Remove a flight from the trip.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"flight_id": {
"type": "string"
}
},
"required": [
"flight_id"
],
"type": "object"
},
"name": "delete_flight",
"outputSchema": null
},
{
"description": "Permanently delete a trip and everything on it — stops, flights, bookings, activities — for every member. Owner only. Irreversible; confirm with the user first.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"journey_id": {
"type": "string"
}
},
"required": [
"journey_id"
],
"type": "object"
},
"name": "delete_journey",
"outputSchema": null
},
{
"description": "Remove a stop from the trip. Refuses when the stop carries a booking — delete the booking instead.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"stay_id": {
"type": "string"
}
},
"required": [
"stay_id"
],
"type": "object"
},
"name": "delete_stay",
"outputSchema": null
},
{
"description": "Delete a recorded visa.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"visa_id": {
"type": "string"
}
},
"required": [
"visa_id"
],
"type": "object"
},
"name": "delete_visa",
"outputSchema": null
},
{
"description": "The user's own spending target for a trip, if they set one. Personal, not shared: each member of a trip has their own, and no one else's is readable.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"journey_id": {
"type": "string"
}
},
"required": [
"journey_id"
],
"type": "object"
},
"name": "get_budget",
"outputSchema": null
},
{
"description": "Country reference info and the user's visa requirement for it, based on their primary passport.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"country_code": {
"description": "ISO country code, e.g. 'TH'",
"type": "string"
}
},
"required": [
"country_code"
],
"type": "object"
},
"name": "get_country_info",
"outputSchema": null
},
{
"description": "Get one journey's itinerary: stays (the stops), flights, booked accommodations, and activities. A booked stay is ONE row that appears in both lists under the SAME id — the stop it is, and the booking it carries. Pass from_date/to_date to read one window of a long trip instead of all of it.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"from_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"journey_id": {
"type": "string"
},
"to_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
}
},
"required": [
"journey_id"
],
"type": "object"
},
"name": "get_journey",
"outputSchema": null
},
{
"description": "The link that invites someone onto a trip as a co-editor. Anyone who opens it joins immediately, so it is the whole invite — there is no separate accept step.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"journey_id": {
"type": "string"
}
},
"required": [
"journey_id"
],
"type": "object"
},
"name": "get_journey_share_link",
"outputSchema": null
},
{
"description": "Who the user is: profile, the passports/nationalities they hold (which decide every visa answer), and their recorded passport documents. Worth reading before planning anything.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "get_me",
"outputSchema": null
},
{
"description": "How many days of the user's allowance in a country are used and how many remain this year — the answer to \"how much longer can I stay\".",
"inputSchema": {
"additionalProperties": false,
"properties": {
"country_code": {
"type": "string"
},
"year": {
"type": "number"
}
},
"required": [
"country_code"
],
"type": "object"
},
"name": "get_visa_status",
"outputSchema": null
},
{
"description": "Leave a trip someone else shared with the user. Owners can't leave their own trip — they delete it.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"journey_id": {
"type": "string"
}
},
"required": [
"journey_id"
],
"type": "object"
},
"name": "leave_journey",
"outputSchema": null
},
{
"description": "The user's travel documents (passports, visas, insurance, tickets) — metadata only, not the files.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"document_type": {
"description": "Filter: passport, national_id, drivers_license, boarding_pass, hotel_confirmation, travel_insurance, vaccination, visa, onward_ticket, other",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "list_documents",
"outputSchema": null
},
{
"description": "Recorded spending on a trip — the money entered by hand or imported, NOT the booked prices on flights and hotels (those come back from get_journey). Includes each row's source_ref, so an importer can see what it already brought in.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"from_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"journey_id": {
"type": "string"
},
"to_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
}
},
"required": [
"journey_id"
],
"type": "object"
},
"name": "list_expenses",
"outputSchema": null
},
{
"description": "Who is on a trip: user ids, roles, and profiles. Use it to get the ids that set_item_travellers takes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"journey_id": {
"type": "string"
}
},
"required": [
"journey_id"
],
"type": "object"
},
"name": "list_journey_members",
"outputSchema": null
},
{
"description": "List the user's trips (journeys) they own or have joined, with dates and whether they own it.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "list_journeys",
"outputSchema": null
},
{
"description": "Visas the user holds — type, number, validity, entries used.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"required": [],
"type": "object"
},
"name": "list_visas",
"outputSchema": null
},
{
"description": "Remove someone from a shared trip. Owner only.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"journey_id": {
"type": "string"
},
"user_id": {
"type": "string"
}
},
"required": [
"journey_id",
"user_id"
],
"type": "object"
},
"name": "remove_journey_member",
"outputSchema": null
},
{
"description": "Find airlines by name or IATA code.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"type": "number"
},
"query": {
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_airlines",
"outputSchema": null
},
{
"description": "Find airports by city, name or IATA code. Use this to get the codes create_flight requires — never guess them.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"limit": {
"type": "number"
},
"query": {
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_airports",
"outputSchema": null
},
{
"description": "Find cities by name. Use it to confirm the exact city name create_stay expects.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"country_code": {
"type": "string"
},
"limit": {
"type": "number"
},
"query": {
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_cities",
"outputSchema": null
},
{
"description": "Set or replace the user's own spending target for a trip. 'month' means per month of the trip; 'journey' means the whole trip. Replaces any existing target.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"amount": {
"type": "number"
},
"currency": {
"description": "ISO 4217 code, e.g. USD, EUR, THB",
"type": "string"
},
"journey_id": {
"type": "string"
},
"period": {
"description": "Defaults to 'month'.",
"enum": [
"month",
"journey"
],
"type": "string"
}
},
"required": [
"journey_id",
"amount",
"currency"
],
"type": "object"
},
"name": "set_budget",
"outputSchema": null
},
{
"description": "Say which people on a shared trip an item is for — one person's separate flight, one person's room. Omitting travelers (or passing an empty list) means everyone, which is the default and right for most items.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"item_id": {
"type": "string"
},
"item_type": {
"enum": [
"stay",
"accommodation",
"flight",
"activity"
],
"type": "string"
},
"travelers": {
"description": "Member user ids this is for (from list_journey_members). Omit for everyone — that's the norm.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"item_type",
"item_id"
],
"type": "object"
},
"name": "set_item_travellers",
"outputSchema": null
},
{
"description": "Change a booking's property, dates, price, confirmation or notes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"accommodation_id": {
"type": "string"
},
"address": {
"type": "string"
},
"booking_url": {
"type": "string"
},
"check_in": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"check_out": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"confirmation_code": {
"type": "string"
},
"country_code": {
"type": "string"
},
"currency": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"name": {
"description": "The property's own name, e.g. 'Memmo Alfama'",
"type": "string"
},
"notes": {
"type": "string"
},
"place_name": {
"description": "The CITY the property is in, e.g. 'Lisbon' — not the property's name",
"type": "string"
},
"price_per_night": {
"type": "number"
},
"provider": {
"description": "Who it was booked with, e.g. 'Booking.com'",
"type": "string"
},
"type": {
"description": "hotel, hostel, airbnb, apartment, other",
"type": "string"
}
},
"required": [
"accommodation_id"
],
"type": "object"
},
"name": "update_accommodation",
"outputSchema": null
},
{
"description": "Change an activity's title, timing, place or notes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"activity_id": {
"type": "string"
},
"address": {
"type": "string"
},
"booking_url": {
"type": "string"
},
"category": {
"type": "string"
},
"country_code": {
"type": "string"
},
"currency": {
"type": "string"
},
"emoji": {
"type": "string"
},
"end_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"is_booked": {
"description": "False = planned but not yet purchased/reserved. Set true only once payment actually went through.",
"type": "boolean"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"notes": {
"type": "string"
},
"place_name": {
"type": "string"
},
"price": {
"type": "number"
},
"start_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"stay_id": {
"description": "UUID of the stop this belongs to — attaches it to that city's days",
"type": "string"
},
"title": {
"type": "string"
},
"transport_mode": {
"description": "For a travel leg: walk, taxi, train, bus, ferry, drive",
"type": "string"
}
},
"required": [
"activity_id"
],
"type": "object"
},
"name": "update_activity",
"outputSchema": null
},
{
"description": "Correct a recorded expense — its amount, currency, date, title, category or which stop it belongs to.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"amount": {
"type": "number"
},
"amount_usd": {
"description": "The same amount in USD, frozen at entry. Set it ONLY when the source states a USD (or already-converted home-currency) figure. Omit otherwise — the app converts at the live rate, which is honest, whereas a guessed historical rate is frozen forever.",
"type": "number"
},
"category": {
"description": "One of the app's expense categories. Food is 'restaurant'.",
"enum": [
"restaurant",
"transport",
"lodging",
"sight",
"groceries",
"shopping",
"coworking",
"activity"
],
"type": "string"
},
"currency": {
"description": "ISO 4217 code, e.g. USD, EUR, THB",
"type": "string"
},
"expense_id": {
"type": "string"
},
"related_event_id": {
"type": "string"
},
"spent_on": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"stay_id": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"expense_id"
],
"type": "object"
},
"name": "update_expense",
"outputSchema": null
},
{
"description": "Change a flight's route, times, seat, confirmation or notes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"airline_code": {
"description": "IATA airline code, e.g. 'TP' — find it with search_airlines",
"type": "string"
},
"airline_name": {
"type": "string"
},
"arrival_airport_code": {
"description": "IATA code, e.g. 'NRT' — find it with search_airports",
"type": "string"
},
"arrival_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"arrival_terminal": {
"type": "string"
},
"booking_url": {
"type": "string"
},
"cabin_class": {
"type": "string"
},
"confirmation_code": {
"type": "string"
},
"currency": {
"type": "string"
},
"departure_airport_code": {
"description": "IATA code, e.g. 'JFK' — find it with search_airports",
"type": "string"
},
"departure_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"departure_terminal": {
"type": "string"
},
"flight_id": {
"type": "string"
},
"flight_number": {
"type": "string"
},
"is_onward_ticket": {
"description": "Mark it as the proof-of-onward-travel ticket for an entry requirement",
"type": "boolean"
},
"notes": {
"type": "string"
},
"price": {
"type": "number"
},
"seat": {
"type": "string"
}
},
"required": [
"flight_id"
],
"type": "object"
},
"name": "update_flight",
"outputSchema": null
},
{
"description": "Rename a trip, change its dates or description, archive it, or set its home-base countries (countries where the user has their own place — no missing-stay warnings there). Owner only.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"description": {
"type": "string"
},
"end_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"home_base_country_codes": {
"description": "ISO country codes",
"items": {
"type": "string"
},
"type": "array"
},
"is_archived": {
"type": "boolean"
},
"journey_id": {
"type": "string"
},
"name": {
"type": "string"
},
"start_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
}
},
"required": [
"journey_id"
],
"type": "object"
},
"name": "update_journey",
"outputSchema": null
},
{
"description": "Set the standing facts every trip should respect: where home is, the home airport, the currency to quote in, nightly budget, travel pace, and preferred working hours.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"budget_max": {
"type": "number"
},
"budget_min": {
"type": "number"
},
"currency": {
"type": "string"
},
"home_airport_code": {
"type": "string"
},
"home_city": {
"type": "string"
},
"home_country_code": {
"type": "string"
},
"temperature_preference": {
"type": "string"
},
"travel_pace": {
"description": "e.g. slow, moderate, fast",
"type": "string"
},
"work_end_hour": {
"type": "number"
},
"work_start_hour": {
"type": "number"
},
"work_timezone": {
"description": "IANA zone, e.g. Europe/Lisbon",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "update_preferences",
"outputSchema": null
},
{
"description": "Change a stop's city, country, dates or notes.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"checkin_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"checkout_datetime": {
"description": "ISO-8601 datetime, e.g. 2026-08-01T14:30:00Z",
"type": "string"
},
"checkout_flexible": {
"type": "boolean"
},
"city": {
"description": "City name, e.g. 'Lisbon' — the city itself, not a neighbourhood, street or hotel",
"type": "string"
},
"city_code": {
"description": "Optional alternative to `city` when you already know the code, e.g. 'LIS'",
"type": "string"
},
"country_code": {
"description": "ISO country code, e.g. 'JP'",
"type": "string"
},
"notes": {
"type": "string"
},
"stay_id": {
"type": "string"
}
},
"required": [
"stay_id"
],
"type": "object"
},
"name": "update_stay",
"outputSchema": null
},
{
"description": "Change a recorded visa, or archive it by setting is_active to false.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"application_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"cost_currency": {
"type": "string"
},
"cost_paid": {
"type": "number"
},
"embassy_consulate": {
"type": "string"
},
"entries_allowed": {
"type": "string"
},
"expiry_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"is_active": {
"type": "boolean"
},
"issue_date": {
"description": "ISO date, e.g. 2026-08-01",
"type": "string"
},
"max_entries": {
"type": "number"
},
"notes": {
"type": "string"
},
"visa_id": {
"type": "string"
},
"visa_name": {
"type": "string"
},
"visa_number": {
"type": "string"
},
"visa_type": {
"type": "string"
}
},
"required": [
"visa_id"
],
"type": "object"
},
"name": "update_visa",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:3cb1449c26855cd1b1be7e4f9621c7f12dbf294d32d355da0aee24b2760ddb3d | sha256sum