_ registry / mcp streamable-http · checked 2h ago

Tineo Travel

https://api.tineo.ai

Registry code: c13c30187d55571a

api record

SAFETY RULES:

- Confirm with the user before any delete, restore, or other irreversible change.

endpoint
https://api.tineo.ai/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is Tineo Travel live?
Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
Is Tineo Travel free to use?
Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
What tools does Tineo Travel have?
109 tools: checklist_items_remove, get_travel_stats, trip_city_remove, flight_booking_link, trip_restore, trip_expense_create, trip_city_update, library_lists_search, ….
Is Tineo Travel safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.6%

90 days 99.7%· all time 99.7%

latency
225ms

last good check

priced tools
0

of 109 tools

_ answered our checks, 90 days 386 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • down → live
_ what it is for
used for
  • plan trip itineraries
  • search flight prices
  • add flights to a trip
  • find places and routes
takes → gives
text → data
tools
15 reads9 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 109 tools
109 auth-required 109 of 109 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • checklist_items_remove auth-required never probed

    Permanently remove one or more tasks from a trip checklist. Get checklist_id and the item IDs from trip_checklists. Confirm with the user before removing. To delete a whole checklist use segment_delete. Never show IDs to users.

    mcp-tool

    {
      "type": "object",
      "required": [
        "checklist_id",
        "item_ids"
      ],
      "properties": {
        "item_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 100,
          "minItems": 1,
          "description": "IDs of the tasks to remove (itemId from trip_checklists).",
          "uniqueItems": true
        },
        "checklist_id": {
          "type": "string",
          "description": "The checklist note's segment ID (checklist_id from trip_checklists)."
        }
      },
      "additionalProperties": false
    }
    arguments 24 lines
  • get_travel_stats auth-required 41d ago

    Get lifetime travel summary statistics across all owned and shared trips: total trips, completed trips, total segments, and segment counts by type.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • trip_city_remove auth-required never probed

    Remove one city association from a trip by trip_city_id. Confirm this destructive action with the user first.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id",
        "trip_city_id"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Trip ID."
        },
        "trip_city_id": {
          "type": "string",
          "format": "uuid",
          "description": "Trip-city association ID returned by trip_cities_list."
        }
      }
    }
    arguments 19 lines
  • flight_booking_link auth-required never probed

    Return a Tineo redirect card for comparable flight search for a trip flight when affiliate flight deep links are enabled.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "The trip ID that owns the flight."
        },
        "segment_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional flight segment ID to target."
        },
        "flight_number": {
          "type": "string",
          "description": "Optional flight number to target when segment_id is not known."
        }
      }
    }
    arguments 22 lines
  • trip_restore auth-required never probed

    Restore a deleted trip owned by the authenticated user, together with the itinerary items that were removed when it was deleted (items deleted separately before that stay deleted). Call without trip_id to list recently deleted trips. Call with trip_id to preview the restore; nothing changes until the user explicitly confirms and you call again with confirmed=true. May re-add the trip to the owner's connected calendars when automatic sync is enabled.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "ID of the deleted trip to restore. Omit to list recently deleted trips."
        },
        "confirmed": {
          "type": "boolean",
          "description": "True only after the user explicitly confirms restoring this trip. Without it the tool only returns a preview."
        },
        "expected_deleted_at": {
          "type": "string",
          "format": "date-time",
          "description": "Optional deleted_at value from the preview. The restore is refused if the trip's deletion has changed since then."
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
  • trip_expense_create auth-required never probed

    Add expenses to a trip's shared expense ledger, with who paid and how each is split. Uses the same rules as the Expenses screen in Tineo. For one expense, send description and amount; for several (a list of receipts, a spreadsheet, a whole trip's costs), send them all in expenses in one call, up to 50 per call, instead of one call per expense. Each item in expenses is added or rejected on its own; failed items come back by index with the reason, so resend only those. Get traveler IDs from trip_expenses_list. Defaults: payer is the user, date is today in the user's profile time zone, an equal split with everyone on the trip (all on the payer on a solo trip). Confirm the amounts, payers and splits with the user before calling; for a batch, confirm the list once.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "date": {
          "type": "string",
          "description": "Expense date, YYYY-MM-DD. Defaults to today in the user's profile time zone; send the user's local date when you know it."
        },
        "notes": {
          "type": "string"
        },
        "split": {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "enum": [
                "payer",
                "equal",
                "percentage",
                "exact"
              ],
              "type": "string"
            },
            "participants": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "traveler_id"
                ],
                "properties": {
                  "amount": {
                    "type": "number",
                    "description": "Required for exact splits."
                  },
                  "percentage": {
                    "type": "number",
                    "description": "Required for percentage splits."
                  },
                  "traveler_id": {
                    "type": "string",
                    "description": "Traveler ID from trip_expenses_list travelers, or \"me\"."
                  }
                },
                "additionalProperties": false
              }
            }
          },
          "description": "Who the cost belongs to. type payer = all of it is the payer's cost (no split). equal = divided evenly among participants (omit participants for everyone on the trip). percentage = each participant's percentage, summing to 100. exact = each participant's amount, summing to the expense amount. To make an expense 100% one person's: if they paid, use type payer with paid_by set to them; if someone else paid, use percentage with only that person at 100.",
          "additionalProperties": false
        },
        "amount": {
          "type": "number",
          "description": "Total amount, greater than 0."
        },
        "vendor": {
          "type": "string",
          "description": "Merchant or vendor."
        },
        "paid_by": {
          "type": "string",
          "description": "Traveler ID from trip_expenses_list travelers, or \"me\". Defaults to me."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Tineo trip ID (from trips_list)."
        },
        "category": {
          "enum": [
            "Transportation",
            "Lodging",
            "CarRental",
            "Food",
            "Activities",
            "Shopping",
            "Insurance",
            "Communication",
            "Tips",
            "Fees",
            "Other"
          ],
          "type": "string"
        },
        "currency": {
          "type": "string",
          "description": "3-letter currency code. Defaults to the trip currency, else USD."
        },
        "expenses": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "description",
              "amount"
            ],
            "properties": {
              "date": {
                "type": "string",
                "description": "Expense date, YYYY-MM-DD. Defaults to today in the user's profile time zone; send the user's local date when you know it."
              },
              "notes": {
                "type": "string"
              },
              "split": {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "enum": [
                      "payer",
                      "equal",
                      "percentage",
                      "exact"
                    ],
                    "type": "string"
                  },
                  "participants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "traveler_id"
                      ],
                      "properties": {
                        "amount": {
                          "type": "number",
                          "description": "Required for exact splits."
                        },
                        "percentage": {
                          "type": "number",
                          "description": "Required for percentage splits."
                        },
                        "traveler_id": {
                          "type": "string",
                          "description": "Traveler ID from trip_expenses_list travelers, or \"me\"."
                        }
                      },
                      "additionalProperties": false
                    }
                  }
                },
                "description": "Who the cost belongs to. type payer = all of it is the payer's cost (no split). equal = divided evenly among participants (omit participants for everyone on the trip). percentage = each participant's percentage, summing to 100. exact = each participant's amount, summing to the expense amount. To make an expense 100% one person's: if they paid, use type payer with paid_by set to them; if someone else paid, use percentage with only that person at 100.",
                "additionalProperties": false
              },
              "amount": {
                "type": "number",
                "description": "Total amount, greater than 0."
              },
              "vendor": {
                "type": "string",
                "description": "Merchant or vendor."
              },
              "paid_by": {
                "type": "string",
                "description": "Traveler ID from trip_expenses_list travelers, or \"me\". Defaults to me."
              },
              "category": {
                "enum": [
                  "Transportation",
                  "Lodging",
                  "CarRental",
                  "Food",
                  "Activities",
                  "Shopping",
                  "Insurance",
                  "Communication",
                  "Tips",
                  "Fees",
                  "Other"
                ],
                "type": "string"
              },
              "currency": {
                "type": "string",
                "description": "3-letter currency code. Defaults to the trip currency, else USD."
              },
              "description": {
                "type": "string",
                "description": "What the expense was for, e.g. Travel insurance."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 50,
          "minItems": 1,
          "description": "Several expenses in one call, each with the same fields as a single expense. Use instead of description and amount at the top level."
        },
        "description": {
          "type": "string",
          "description": "What the expense was for, e.g. Travel insurance."
        }
      },
      "additionalProperties": false
    }
    arguments 202 lines
  • trip_city_update auth-required never probed

    Replace one trip-city association with another city. This never edits the shared city catalog record.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id",
        "trip_city_id"
      ],
      "properties": {
        "city_id": {
          "type": "string",
          "format": "uuid",
          "description": "Exact city catalog ID. Provide this OR city_name."
        },
        "country": {
          "type": "string",
          "description": "Country name or ISO code (for example CR or Costa Rica). Strongly recommended with city_name: it disambiguates same-named cities and lets Tineo add a place that is missing from the catalog."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Trip ID."
        },
        "city_name": {
          "type": "string",
          "description": "City, town or island name. Provide this OR city_id; ambiguous names return candidates, so pass country as well."
        },
        "trip_city_id": {
          "type": "string",
          "format": "uuid",
          "description": "Trip-city association ID returned by trip_cities_list."
        }
      }
    }
    arguments 32 lines
  • library_lists_search auth-required 35d ago

    Find the signed-in user's Tineo Library Lists by title or description. Return candidate IDs; when several titles match, ask the user to select one. These are freestanding Library Lists, separate from trip packing/checklists. Only lists are supported; do not invent journal, place or file edits.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "limit": {
          "type": "integer",
          "default": 20,
          "maximum": 50,
          "minimum": 0,
          "description": "Maximum candidates, 1..50. Omitted or zero uses 20."
        },
        "query": {
          "type": "string",
          "maxLength": 2000
        },
        "offset": {
          "type": "integer",
          "default": 0,
          "minimum": 0
        },
        "itemType": {
          "enum": [
            "list"
          ],
          "type": "string",
          "default": "list"
        }
      },
      "additionalProperties": false
    }
    arguments 30 lines
  • library_list_get auth-required 35d ago

    Read one owned Tineo Library List, including every stable item UUID and its version. Read before editing; preserve fields the user did not ask to change. Never use trip segment IDs or guess list/item IDs.

    mcp-tool

    {
      "type": "object",
      "required": [
        "listId"
      ],
      "properties": {
        "listId": {
          "type": "string",
          "format": "uuid"
        },
        "itemType": {
          "enum": [
            "list"
          ],
          "type": "string",
          "default": "list"
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
  • library_list_item_delete auth-required never probed

    Permanently delete one item from an owned Library List. Show the user the exact item first; call with confirmed=true only after they confirm. Use the listId and expectedVersion from the latest library_list_get. On library_version_mismatch, read the list again and reconsider the change; never retry blindly. Library Lists only, not trip checklists.

    mcp-tool

    {
      "type": "object",
      "required": [
        "listId",
        "expectedVersion",
        "itemId",
        "confirmed"
      ],
      "properties": {
        "itemId": {
          "type": "string",
          "format": "uuid",
          "description": "Existing item ID from library_list_get."
        },
        "listId": {
          "type": "string",
          "format": "uuid",
          "description": "Library List ID from library_lists_search or library_list_get."
        },
        "confirmed": {
          "type": "boolean",
          "description": "True only after the user explicitly confirms this exact change. Without it the tool changes nothing and returns the change for review."
        },
        "expectedVersion": {
          "type": "string",
          "maxLength": 64,
          "minLength": 64,
          "description": "Opaque version from the latest library_list_get or Library List tool result."
        }
      },
      "additionalProperties": false
    }
    arguments 32 lines
  • settings_read auth-required never probed

    Reads the user's Tineo display and notification settings: units, date and time formats, flight monitoring, and trip reminder emails.

    mcp-tool

    {
      "type": "object",
      "additionalProperties": false
    }
    arguments 4 lines
  • cruise_update auth-required never probed

    Preview and commit cruise update operations atomically. First call cruise_get for expectedVersion. Omit confirmationToken to preview, show the changes to the user, then repeat the unchanged request with its token only after the user approves. Reuse idempotencyKey for retries. Omitting a field preserves it; null clears nullable fields. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request"
      ],
      "properties": {
        "request": {
          "type": "object",
          "required": [
            "tripId",
            "idempotencyKey",
            "expectedVersion",
            "operations",
            "cruiseId"
          ],
          "properties": {
            "tripId": {
              "type": "string",
              "format": "uuid"
            },
            "cruiseId": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            },
            "operations": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "fields"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "UpdateCruise"
                      },
                      "fields": {
                        "type": "object",
                        "required": [],
                        "properties": {
                          "cost": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "notes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "status": {
                            "enum": [
                              "Tentative",
                              "Confirmed",
                              "Cancelled",
                              "Completed",
                              "PendingCompletion"
                            ],
                            "type": "string"
                          },
                          "groupId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "website": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "currency": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "shipName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "cabinDeck": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "cabinType": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "eventName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "occupancy": {
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "sortOrder": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "cruiseLine": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "embarkCity": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "cabinNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "endDateTime": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "contactEmail": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactPhone": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "voyageNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "disembarkCity": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "embarkCountry": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "leadPassenger": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "startDateTime": {
                            "type": "string",
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "contactAddress": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "embarkPortName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "embarkTerminal": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "onboardCredits": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "embarkTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "bookingReference": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "disembarkCountry": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "itineraryEndDate": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "disembarkPortName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "reservationNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "cancellationPolicy": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "confirmationNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "disembarkTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "itineraryStartDate": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "clientId",
                      "fields"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "AddDay"
                      },
                      "fields": {
                        "type": "object",
                        "required": [],
                        "properties": {
                          "cost": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "date": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date"
                          },
                          "dock": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "notes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "status": {
                            "enum": [
                              "Tentative",
                              "Confirmed",
                              "Cancelled",
                              "Completed",
                              "PendingCompletion"
                            ],
                            "type": "string"
                          },
                          "dayType": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Use Embarkation, SeaDay, Port, ScenicCruising or Disembarkation for these known meanings. Preserve unfamiliar stored or source labels verbatim; do not coerce them to Port or SeaDay."
                          },
                          "website": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "currency": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portCity": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "dayNumber": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "sortOrder": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "timeBasis": {
                            "enum": [
                              "Unknown",
                              "PortLocal",
                              "ShipTime",
                              null
                            ],
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "endDateTime": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "portCountry": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactEmail": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactPhone": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "isTenderPort": {
                            "type": [
                              "boolean",
                              "null"
                            ],
                            "description": "true means tender; false means docked; null means unknown."
                          },
                          "startDateTime": {
                            "type": "string",
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "dayNumberBasis": {
                            "enum": [
                              "LegacyCalendarDate",
                              "OfficialSequence",
                              null
                            ],
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "excursionNotes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portTimezoneId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "arrivalTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "allAboardTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "confirmationNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "departureTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "isOvernightPortCall": {
                            "type": [
                              "boolean",
                              "null"
                            ]
                          }
                        },
                        "additionalProperties": false
                      },
                      "clientId": {
                        "type": "string",
                        "maxLength": 100,
                        "minLength": 1
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "dayId",
                      "fields"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "UpdateDay"
                      },
                      "dayId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "fields": {
                        "type": "object",
                        "required": [],
                        "properties": {
                          "cost": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "date": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date"
                          },
                          "dock": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "notes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "status": {
                            "enum": [
                              "Tentative",
                              "Confirmed",
                              "Cancelled",
                              "Completed",
                              "PendingCompletion"
                            ],
                            "type": "string"
                          },
                          "dayType": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Use Embarkation, SeaDay, Port, ScenicCruising or Disembarkation for these known meanings. Preserve unfamiliar stored or source labels verbatim; do not coerce them to Port or SeaDay."
                          },
                          "website": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "currency": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portCity": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "dayNumber": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "sortOrder": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "timeBasis": {
                            "enum": [
                              "Unknown",
                              "PortLocal",
                              "ShipTime",
                              null
                            ],
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "endDateTime": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "portCountry": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactEmail": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactPhone": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "isTenderPort": {
                            "type": [
                              "boolean",
                              "null"
                            ],
                            "description": "true means tender; false means docked; null means unknown."
                          },
                          "startDateTime": {
                            "type": "string",
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "dayNumberBasis": {
                            "enum": [
                              "LegacyCalendarDate",
                              "OfficialSequence",
                              null
                            ],
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "excursionNotes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portTimezoneId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "arrivalTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "allAboardTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "confirmationNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "departureTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "isOvernightPortCall": {
                            "type": [
                              "boolean",
                              "null"
                            ]
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "dayId"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "DeleteDay"
                      },
                      "dayId": {
                        "type": "string",
                        "format": "uuid"
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "dayId"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "RestoreDay"
                      },
                      "dayId": {
                        "type": "string",
                        "format": "uuid"
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "dayIds"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "ReorderDays"
                      },
                      "dayIds": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "description": "Every live cruise day ID exactly once in the desired order. Reordering preserves dates and day numbers.",
                        "uniqueItems": true
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              },
              "maxItems": 250,
              "minItems": 1
            },
            "idempotencyKey": {
              "type": "string",
              "format": "uuid"
            },
            "expectedVersion": {
              "type": "string",
              "minLength": 1,
              "description": "Exact version returned by cruise_get, including the trip-only read before creating a cruise."
            }
          },
          "additionalProperties": false
        },
        "confirmationToken": {
          "type": "string",
          "minLength": 1,
          "description": "Omit to preview. After the user reviews and approves the exact preview, repeat the unchanged request with its token to commit. Never manufacture approval."
        }
      },
      "additionalProperties": false
    }
    arguments 793 lines
  • trips_list auth-required never probed

    List the user's trips. Use this when the user wants to see their trips, search for a specific trip, or asks about their travel plans.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Maximum number of trips to return. Defaults to 10, max 50."
        },
        "search": {
          "type": "string",
          "description": "Search query to filter trips by destination, name, or location"
        },
        "status": {
          "type": "string",
          "description": "Filter by trip status: all, upcoming, past, or ongoing. Defaults to all."
        }
      }
    }
    arguments 18 lines
  • flight_route_lookup auth-required 41d ago

    Find scheduled flights by route and date when the flight number is NOT known: origin airport, destination airport, local departure date, and optionally an airline. Returns matching flights with their flight numbers so the exact flight can then be added via flight_quickadd. Use flight_quickadd_lookup instead when the user already has the full flight number.

    mcp-tool

    {
      "type": "object",
      "required": [
        "origin",
        "destination",
        "date"
      ],
      "properties": {
        "date": {
          "type": "string",
          "description": "Local departure date in YYYY-MM-DD format."
        },
        "origin": {
          "type": "string",
          "description": "Departure airport IATA code, such as BUD."
        },
        "destination": {
          "type": "string",
          "description": "Arrival airport IATA code, such as SKG."
        },
        "airline_code": {
          "type": "string",
          "description": "Optional IATA airline code filter, such as W6 for Wizz Air."
        }
      }
    }
    arguments 26 lines
  • friend_requests_pending auth-required 41d ago

    List the authenticated user's pending friend requests, split into incoming (awaiting your response) and outgoing (awaiting the other person). Returns the counterpart's name only, never their email. Use the returned request_id with friend_request_accept / friend_request_decline / friend_request_resend.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {}
    }
    arguments 5 lines
  • friend_request_resend auth-required never probed

    Resend the notification email for one of YOUR OUTGOING pending friend requests by request_id (from friend_requests_pending). This re-emails the recipient, so confirm with the user first and pass confirmed=true. Throttled on an escalating cadence (60s after the original send, 24h after the first resend) and capped at 2 total resends per request.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request_id",
        "confirmed"
      ],
      "properties": {
        "confirmed": {
          "type": "boolean",
          "description": "Must be true. Set only after the user confirms they want to resend."
        },
        "request_id": {
          "type": "string",
          "description": "The outgoing request id from friend_requests_pending."
        }
      }
    }
    arguments 17 lines
  • cruise_day_restore auth-required never probed

    Preview and commit cruise day restore operations atomically. First call cruise_get for expectedVersion. Omit confirmationToken to preview, show the changes to the user, then repeat the unchanged request with its token only after the user approves. Reuse idempotencyKey for retries. Omitting a field preserves it; null clears nullable fields. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request"
      ],
      "properties": {
        "request": {
          "type": "object",
          "required": [
            "tripId",
            "idempotencyKey",
            "expectedVersion",
            "operations",
            "cruiseId"
          ],
          "properties": {
            "tripId": {
              "type": "string",
              "format": "uuid"
            },
            "cruiseId": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            },
            "operations": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "dayId"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "RestoreDay"
                      },
                      "dayId": {
                        "type": "string",
                        "format": "uuid"
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              },
              "maxItems": 250,
              "minItems": 1
            },
            "idempotencyKey": {
              "type": "string",
              "format": "uuid"
            },
            "expectedVersion": {
              "type": "string",
              "minLength": 1,
              "description": "Exact version returned by cruise_get, including the trip-only read before creating a cruise."
            }
          },
          "additionalProperties": false
        },
        "confirmationToken": {
          "type": "string",
          "minLength": 1,
          "description": "Omit to preview. After the user reviews and approves the exact preview, repeat the unchanged request with its token to commit. Never manufacture approval."
        }
      },
      "additionalProperties": false
    }
    arguments 74 lines
  • friend_request_decline changes data auth-required never probed

    Decline an INCOMING pending friend request by request_id (from friend_requests_pending). Confirm with the user before calling.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request_id"
      ],
      "properties": {
        "request_id": {
          "type": "string",
          "description": "The incoming request id from friend_requests_pending."
        }
      }
    }
    arguments 12 lines
  • tineo_ping auth-required 40d ago

    Check that Tineo is connected and the user is signed in. Returns the signed-in account's name and email; it does not list trips.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {}
    }
    arguments 5 lines
  • discover reads auth-required 41d ago

    Search for hotels, restaurants, attractions, or activities to recommend to the traveler, returned as rich visual cards (image, rating, price level, link). Use this when the user wants suggestions or things to do/eat/stay near a place.

    mcp-tool

    {
      "type": "object",
      "required": [
        "category"
      ],
      "properties": {
        "query": {
          "type": "string",
          "description": "Optional refinement, such as \"luxury\", \"family friendly\", \"tapas\", or \"museums\"."
        },
        "category": {
          "enum": [
            "hotels",
            "restaurants",
            "attractions",
            "activities"
          ],
          "type": "string",
          "description": "What to discover: hotels, restaurants, attractions, or activities."
        },
        "latitude": {
          "type": "number",
          "description": "Optional latitude to bias the search."
        },
        "location": {
          "type": "string",
          "description": "City or area to search in, such as \"Madrid\" or \"Lisbon, Portugal\". Provide this when latitude/longitude are unknown."
        },
        "longitude": {
          "type": "number",
          "description": "Optional longitude to bias the search."
        },
        "max_results": {
          "type": "integer",
          "description": "Max cards to return, 1-10. Defaults to 8."
        },
        "check_in_date": {
          "type": "string",
          "description": "Optional YYYY-MM-DD check-in date (hotels)."
        },
        "check_out_date": {
          "type": "string",
          "description": "Optional YYYY-MM-DD check-out date (hotels)."
        }
      }
    }
    arguments 46 lines
  • known_participants reads auth-required 41d ago

    Search people the authenticated user previously added to trips. Use before traveler_add, then obtain explicit invitation consent and confirm the email address.

    mcp-tool

    {
      "type": "object",
      "required": [
        "names"
      ],
      "properties": {
        "names": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 10,
          "minItems": 1,
          "description": "Names to match against prior trip participants."
        }
      }
    }
    arguments 17 lines
  • mentions_search reads auth-required 40d ago

    Typeahead search over the user's Tineo trips for composer @-mentions. Returns resource links to trips.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "query": {
          "type": "string",
          "maxLength": 200,
          "description": "Search text; may be empty."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • import_parse_text_preview auth-required never probed

    Parse pasted travel confirmation text into proposed itinerary segments without saving anything. Use this before creating segments from copied email, PDF, or booking text.

    mcp-tool

    {
      "type": "object",
      "required": [
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "description": "Travel confirmation, booking, or itinerary text to parse: one booking confirmation per call, or a few days of an itinerary. A whole trip page listing many bookings can exceed the 90-second parse limit, so split it. Raw text is used only for parsing and is not echoed back."
        },
        "trip_id": {
          "type": "string",
          "description": "Optional trip ID used only to verify access and give the parser trip context"
        },
        "user_hint": {
          "type": "string",
          "description": "Optional user-provided context, such as provider name or expected segment type"
        },
        "max_segments": {
          "type": "integer",
          "description": "Maximum number of segment previews to return, from 1 to 20. Defaults to 10."
        }
      }
    }
    arguments 24 lines
  • trip_details auth-required never probed

    Get detailed information about a specific trip. The text response includes the trip summary plus a chronological list of every segment (flights, hotels, activities, etc.) with each segment_id, so you can chain directly to segment_details, segment_update, segment_delete, or flight_status_for_segment without another search. Also includes traveler count. For full per-segment details, use segment_details with the returned segment_id. Use sections and segment_types to filter the response.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "description": "The unique identifier of the trip to fetch details for"
        },
        "sections": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional: filter which sections to include in the response. Values: 'segments', 'travelers'. Default: all sections."
        },
        "segment_types": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional: filter segments by type. Values: Flight, Lodging, CarRental, Train, Transfer, Ferry, EventTicket, Parking, Activity, Note, Poll. Default: all types."
        }
      }
    }
    arguments 26 lines
  • places_search reads auth-required 40d ago

    Search for real-world places by text. Use this when the user needs to find a hotel, restaurant, venue, airport, station, port, parking location, or other place before adding or editing a trip segment.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "query": {
          "type": "string",
          "description": "The place search text, such as a hotel name, restaurant, airport, venue, station, or full address"
        },
        "language": {
          "type": "string",
          "description": "Optional BCP 47 language code for place data"
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum results to return, from 1 to 20. Defaults to 10."
        },
        "included_type": {
          "type": "string",
          "description": "Optional place type bias, such as lodging, restaurant, airport, train_station, parking, tourist_attraction, or point_of_interest"
        },
        "location_bias": {
          "type": "object",
          "required": [
            "latitude",
            "longitude"
          ],
          "properties": {
            "latitude": {
              "type": "number"
            },
            "longitude": {
              "type": "number"
            }
          },
          "description": "Optional latitude/longitude used to bias search results"
        },
        "radius_meters": {
          "type": "number",
          "description": "Optional radius in meters around location_bias"
        }
      }
    }
    arguments 44 lines
  • segment_get_schema auth-required 40d ago

    Get the schema for a segment type. CALL THIS FIRST before creating/updating segments. Returns required fields and their types for the specified segment type. Supported types: Flight, Lodging, CarRental, Train, Transfer, Ferry, EventTicket, Parking, Activity, Note, Poll. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification. Cruise/CruiseDay generic writes require the dedicated cruise tools; their schemas and full reads remain available. Additional supported schemas: Cruise, CruiseDay, CruiseActivity.

    mcp-tool

    {
      "type": "object",
      "required": [
        "segment_type"
      ],
      "properties": {
        "segment_type": {
          "type": "string",
          "description": "The segment type to get schema for (Flight, Lodging, CarRental, Train, Transfer, Ferry, EventTicket, Parking, Activity, Note, Poll); also Cruise, CruiseDay and CruiseActivity"
        }
      }
    }
    arguments 12 lines
  • assistant_airbnb_search_user auth-required 41d ago

    Search Airbnb listings by location and dates. Use when the user is not asking about a specific trip in Tineo. Returns a slim list of cards (title, type, rating, host, URL). location must be a city or area, not a whole country (ask the user which city). Each card has distance_km from the requested place and in_requested_area; listings outside the area come last. If none are in the area, say so with their distances and do NOT re-search the same place with a reworded location string. Amenity filtering only via the amenities enum; there is NO keyword/free-text filter, so tell the user anything else can't be filtered. If structuredContent.status is 'unavailable', do NOT retry the same search: share structuredContent.fallback_search_url (a prefilled airbnb.com search), offer a hotel search, or a support ticket.

    mcp-tool

    {
      "type": "object",
      "required": [
        "location",
        "check_in",
        "check_out"
      ],
      "properties": {
        "adults": {
          "type": "integer",
          "maximum": 16,
          "minimum": 1
        },
        "infants": {
          "type": "integer",
          "maximum": 5,
          "minimum": 0,
          "description": "Infants under 2. Airbnb does not count them as guests."
        },
        "check_in": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Check-in date YYYY-MM-DD."
        },
        "children": {
          "type": "integer",
          "maximum": 5,
          "minimum": 0
        },
        "currency": {
          "type": "string",
          "description": "ISO 4217 currency code (default USD)."
        },
        "location": {
          "type": "string",
          "description": "City, neighborhood, or landmark with its region and country (e.g., 'Lisbon, Portugal', 'Brooklyn, NY, USA', 'Orange, NSW, Australia')."
        },
        "min_beds": {
          "type": "integer",
          "minimum": 0
        },
        "amenities": {
          "type": "array",
          "items": {
            "enum": [
              "wifi",
              "air_conditioning",
              "pool",
              "kitchen",
              "free_parking",
              "gym",
              "hot_tub",
              "heating",
              "washer",
              "dryer",
              "workspace",
              "ev_charger"
            ],
            "type": "string"
          },
          "description": "Only listings with ALL of these amenities. These are the only supported amenity filters; there is no keyword/free-text filter."
        },
        "check_out": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Check-out date YYYY-MM-DD."
        },
        "price_max": {
          "type": "integer",
          "minimum": 0
        },
        "price_min": {
          "type": "integer",
          "minimum": 0
        },
        "room_type": {
          "enum": [
            "entire_home",
            "private_room",
            "shared_room"
          ],
          "type": "string"
        },
        "max_results": {
          "type": "integer",
          "maximum": 5,
          "minimum": 1,
          "description": "Default 5, max 5."
        },
        "min_bedrooms": {
          "type": "integer",
          "minimum": 0
        },
        "min_bathrooms": {
          "type": "integer",
          "minimum": 0
        }
      }
    }
    arguments 99 lines
  • affiliate_program_catalog reads auth-required 41d ago

    Return Tineo's travel-affiliate catalog with truthful implementation status. Use only for questions about supported affiliate programs, never for a link to a specific or previously searched travel result. With generic search intent, validated generic adapters may include safe Tineo-owned CTA links. A card with bookingLink=null is metadata only, not a booking handoff or live inventory.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 54,
          "minimum": 1,
          "description": "Optional result cap. Defaults to 54."
        },
        "locale": {
          "type": "string",
          "description": "Optional locale. Defaults to en."
        },
        "endDate": {
          "type": "string",
          "format": "date",
          "description": "Optional local end/check-out date in YYYY-MM-DD format."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional Tineo trip ID (from trips_list) this request is for. Used only to default the currency to that trip's currency when currency is omitted and the user has no preferred currency; ignored if the trip is not found or not accessible to the user."
        },
        "currency": {
          "type": "string",
          "description": "Optional ISO-style three-letter display currency. Omit to use the user's preferred currency, then the currency of the trip given by trip_id, then USD."
        },
        "location": {
          "type": "string",
          "description": "Optional city or destination used to build the provider search."
        },
        "vertical": {
          "type": "string",
          "description": "Optional category filter, such as Hotels, Tours, Flights, Trains, or Transfers."
        },
        "startDate": {
          "type": "string",
          "format": "date",
          "description": "Optional local start/check-in date in YYYY-MM-DD format."
        },
        "travelers": {
          "type": "integer",
          "maximum": 30,
          "minimum": 1,
          "description": "Optional traveler count. Defaults to 1."
        },
        "searchTerm": {
          "type": "string",
          "description": "Concrete search intent. Required to generate booking CTA buttons."
        },
        "includeResearch": {
          "type": "boolean",
          "description": "Include catalogued/research programs. Defaults to true."
        }
      }
    }
    arguments 56 lines
  • car_rental_booking_links auth-required never probed

    Return DiscoverCars and Expedia affiliate car-rental search cards for a pickup city or airport and dates. These are provider search handoffs only, not live availability, prices, vehicles, or confirmed bookings.

    mcp-tool

    {
      "type": "object",
      "required": [
        "pickup_location",
        "pickup_date"
      ],
      "properties": {
        "locale": {
          "type": "string",
          "description": "Optional locale. Defaults to en."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional Tineo trip ID (from trips_list) this request is for. Used only to default the currency to that trip's currency when currency is omitted and the user has no preferred currency; ignored if the trip is not found or not accessible to the user."
        },
        "currency": {
          "type": "string",
          "description": "Optional ISO-style three-letter display currency. Omit to use the user's preferred currency, then the currency of the trip given by trip_id, then USD."
        },
        "pickup_date": {
          "type": "string",
          "format": "date",
          "description": "Local pickup date in YYYY-MM-DD format."
        },
        "dropoff_date": {
          "type": "string",
          "format": "date",
          "description": "Optional local drop-off date in YYYY-MM-DD format."
        },
        "pickup_location": {
          "type": "string",
          "description": "Pickup city or airport, e.g. Lisbon or LIS. Prefer the airport IATA code when picking up at an airport."
        }
      }
    }
    arguments 36 lines
  • search_flight_prices reads auth-required 40d ago

    Never send more than 3 search_flight_prices calls in one turn: calls beyond 3 are rejected without searching. Search for flight itineraries with prices between two airports on a date using Google Flights. Returns available itineraries with prices, durations, airlines, layovers, and ranked route-search actions. Ages 12-17 are mapped as adults where a provider requires it; ages 0-1 are infants whose lap-versus-seat placement and provider policy must be confirmed before booking. Each account runs one search at a time; the second and third wait their turn and still return results. When the user names several airports, destinations, dates or trip lengths, search the 1 to 3 most likely combinations first (or one outbound_end_date range of up to 7 days), show the results, then ask before searching more. A queued or slow search returns lookupStatus pending with retry_after_seconds; it keeps its place and finishes on its own, so repeat the identical call after that wait to get its result. When the user rules out airlines or connection airports/countries, pass include_airlines/exclude_airlines/avoid_connection_airports/avoid_connection_countries so excluded routes are removed. Fares carry no baggage allowance: never claim a fare includes bags.

    mcp-tool

    {
      "type": "object",
      "required": [
        "departure_airport",
        "arrival_airport",
        "outbound_date"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional Tineo trip ID (from trips_list) this request is for. Used only to default the currency to that trip's currency when currency is omitted and the user has no preferred currency; ignored if the trip is not found or not accessible to the user."
        },
        "currency": {
          "type": "string",
          "description": "Optional ISO-style three-letter currency code. Omit to use the user's preferred currency, then the currency of the trip given by trip_id, then USD."
        },
        "max_stops": {
          "type": "integer",
          "description": "Optional maximum number of stops (0 = nonstop only, 1 = up to 1 stop)."
        },
        "child_ages": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 17,
            "minimum": 0
          },
          "description": "Age of each traveler under 18. Ages 12-17 are provider-mapped as adults where required; ages 2-11 are children and 0-1 are infants. Confirm lap-versus-seat placement with the user/provider for ages 0-1."
        },
        "adult_count": {
          "type": "integer",
          "default": 1,
          "maximum": 9,
          "minimum": 1,
          "description": "Number of adult travelers (default 1)."
        },
        "cabin_class": {
          "enum": [
            "economy",
            "premium_economy",
            "business",
            "first"
          ],
          "type": "string",
          "description": "Cabin class preference: 'economy', 'premium_economy', 'business', or 'first'. Default is 'economy'."
        },
        "return_date": {
          "type": "string",
          "description": "Optional return date in YYYY-MM-DD format for round-trip searches."
        },
        "outbound_date": {
          "type": "string",
          "description": "Outbound date in YYYY-MM-DD format. To compare several departure days, pass outbound_end_date in this one call rather than sending one call per day."
        },
        "arrival_airport": {
          "type": "string",
          "description": "Arrival airport IATA code, such as CDG."
        },
        "exclude_airlines": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional. Remove itineraries with any flight on these airlines (IATA code, airline name, or alliance). Single-date searches only."
        },
        "include_airlines": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional. Keep only itineraries where every flight is on one of these airlines: 2-character IATA code such as LH, airline name, or an alliance (Star Alliance, oneworld, SkyTeam). Single-date searches only."
        },
        "departure_airport": {
          "type": "string",
          "description": "Departure airport IATA code, such as JFK."
        },
        "outbound_end_date": {
          "type": "string",
          "description": "Optional inclusive end date for a cheapest-returned-fare-per-day calendar, up to 7 outbound dates beginning at outbound_date. Each day reports priced, no_results, failed, or not_searched; prices are live estimates and may change. Economy cabin only: omit cabin_class or use economy with a range."
        },
        "avoid_connection_airports": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional. Remove itineraries that connect at these airports (3-letter IATA codes). Single-date searches only."
        },
        "avoid_connection_countries": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional. Remove itineraries that connect in these countries (prefer ISO 3166 alpha-2 codes such as US, TR, RU; translate names to English). Single-date searches only."
        }
      }
    }
    arguments 97 lines
  • search_tours auth-required 40d ago

    Search for bookable tours, activities, excursions, and experiences at a destination using GetYourGuide with Viator and Tiqets travelpayouts fallbacks. Returns tour options with titles, prices, ratings, durations, and booking links. Use when the user asks about things to do, tours, activities, excursions, or experiences in a city or destination. Search one destination per call.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "date": {
          "type": "string",
          "description": "Optional date in YYYY-MM-DD format to filter tours available on that day."
        },
        "limit": {
          "type": "integer",
          "default": 10,
          "maximum": 30,
          "minimum": 1,
          "description": "Maximum number of tour results to return (default 10, max 30)."
        },
        "query": {
          "type": "string",
          "description": "Search query for ONE destination, optionally with an activity type (e.g. 'walking tour Rome', 'snorkeling Cancun'). Never list several cities in one query: for a multi-city trip, call this tool once per city."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional Tineo trip ID (from trips_list) this request is for. Used only to default the currency to that trip's currency when currency is omitted and the user has no preferred currency; ignored if the trip is not found or not accessible to the user."
        },
        "currency": {
          "type": "string",
          "description": "Optional ISO-style three-letter currency code. Omit to use the user's preferred currency, then the currency of the trip given by trip_id, then USD."
        },
        "provider": {
          "enum": [
            "all",
            "getyourguide",
            "viator"
          ],
          "type": "string",
          "description": "Preferred tour provider to search ('all', 'getyourguide', or 'viator'). Default is 'all'."
        }
      }
    }
    arguments 41 lines
  • forwarding_address_create auth-required never probed

    Create the authenticated user's personal Tineo forwarding address when they explicitly ask for one. Tineo reads email sent to that address and adds the travel bookings it finds to the user's trips, so the user can forward confirmations from any inbox or give it to a travel agent or booking site. Never replaces or changes an existing address: if one already exists it is returned unchanged. Use forwarding_address_get to read addresses without creating one.

    mcp-tool

    {
      "type": "object",
      "required": [
        "confirmed"
      ],
      "properties": {
        "confirmed": {
          "type": "boolean",
          "description": "Must be true, set only after the user explicitly asks to create a forwarding address."
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • friends_list reads auth-required 41d ago

    List the authenticated user's accepted friends (paged). Returns each friend's name, home location, your label for them (Friend/Family) and your two-way trip-sharing state. Never returns other users' email addresses.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "page": {
          "type": "integer",
          "minimum": 1,
          "description": "1-based page number. Default 1."
        },
        "search": {
          "type": "string",
          "description": "Optional case-insensitive name filter."
        },
        "page_size": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1,
          "description": "Friends per page (max 50). Default 20."
        }
      }
    }
    arguments 21 lines
  • library_list_update auth-required never probed

    Change one owned Library List's own details (title, emoji, color, description). Changes only the fields named in updateFields; never touches the list's items. Use the listId and expectedVersion from the latest library_list_get. On library_version_mismatch, read the list again and reconsider the change; never retry blindly. Library Lists only, not trip checklists.

    mcp-tool

    {
      "type": "object",
      "required": [
        "listId",
        "expectedVersion",
        "updateFields",
        "updates"
      ],
      "properties": {
        "listId": {
          "type": "string",
          "format": "uuid",
          "description": "Library List ID from library_lists_search or library_list_get."
        },
        "updates": {
          "type": "object",
          "properties": {
            "color": {
              "type": "string",
              "maxLength": 64
            },
            "emoji": {
              "type": "string",
              "maxLength": 16,
              "minLength": 1
            },
            "title": {
              "type": "string",
              "maxLength": 200,
              "minLength": 1
            },
            "description": {
              "type": "string",
              "maxLength": 2000
            }
          },
          "description": "New values for the fields named in updateFields.",
          "minProperties": 1,
          "additionalProperties": false
        },
        "updateFields": {
          "type": "array",
          "items": {
            "enum": [
              "title",
              "emoji",
              "color",
              "description"
            ],
            "type": "string"
          },
          "maxItems": 4,
          "minItems": 1,
          "description": "The fields the user asked to change. Only these keys of updates are applied. To clear a nullable field, name it here and set it to an empty string, only when the user asks to clear it.",
          "uniqueItems": true
        },
        "expectedVersion": {
          "type": "string",
          "maxLength": 64,
          "minLength": 64,
          "description": "Opaque version from the latest library_list_get or Library List tool result."
        }
      },
      "additionalProperties": false
    }
    arguments 65 lines
  • cruise_create auth-required never probed

    Preview and commit cruise create operations atomically. First call cruise_get for expectedVersion. Omit confirmationToken to preview, show the changes to the user, then repeat the unchanged request with its token only after the user approves. Reuse idempotencyKey for retries. Omitting a field preserves it; null clears nullable fields. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request"
      ],
      "properties": {
        "request": {
          "type": "object",
          "required": [
            "tripId",
            "idempotencyKey",
            "expectedVersion",
            "operations"
          ],
          "properties": {
            "tripId": {
              "type": "string",
              "format": "uuid"
            },
            "cruiseId": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            },
            "operations": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "fields"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "CreateCruise"
                      },
                      "fields": {
                        "type": "object",
                        "required": [],
                        "properties": {
                          "cost": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "notes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "status": {
                            "enum": [
                              "Tentative",
                              "Confirmed",
                              "Cancelled",
                              "Completed",
                              "PendingCompletion"
                            ],
                            "type": "string"
                          },
                          "groupId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "website": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "currency": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "shipName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "cabinDeck": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "cabinType": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "eventName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "occupancy": {
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "sortOrder": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "cruiseLine": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "embarkCity": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "cabinNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "endDateTime": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "contactEmail": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactPhone": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "voyageNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "disembarkCity": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "embarkCountry": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "leadPassenger": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "startDateTime": {
                            "type": "string",
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "contactAddress": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "embarkPortName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "embarkTerminal": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "onboardCredits": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "embarkTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "bookingReference": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "disembarkCountry": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "itineraryEndDate": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "disembarkPortName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "reservationNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "cancellationPolicy": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "confirmationNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "disembarkTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "itineraryStartDate": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "clientId",
                      "fields"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "AddDay"
                      },
                      "fields": {
                        "type": "object",
                        "required": [],
                        "properties": {
                          "cost": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "date": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date"
                          },
                          "dock": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "notes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "status": {
                            "enum": [
                              "Tentative",
                              "Confirmed",
                              "Cancelled",
                              "Completed",
                              "PendingCompletion"
                            ],
                            "type": "string"
                          },
                          "dayType": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Use Embarkation, SeaDay, Port, ScenicCruising or Disembarkation for these known meanings. Preserve unfamiliar stored or source labels verbatim; do not coerce them to Port or SeaDay."
                          },
                          "website": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "currency": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portCity": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "dayNumber": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "sortOrder": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "timeBasis": {
                            "enum": [
                              "Unknown",
                              "PortLocal",
                              "ShipTime",
                              null
                            ],
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "endDateTime": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "portCountry": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactEmail": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactPhone": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "isTenderPort": {
                            "type": [
                              "boolean",
                              "null"
                            ],
                            "description": "true means tender; false means docked; null means unknown."
                          },
                          "startDateTime": {
                            "type": "string",
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "dayNumberBasis": {
                            "enum": [
                              "LegacyCalendarDate",
                              "OfficialSequence",
                              null
                            ],
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "excursionNotes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portTimezoneId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "arrivalTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "allAboardTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "confirmationNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "departureTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "isOvernightPortCall": {
                            "type": [
                              "boolean",
                              "null"
                            ]
                          }
                        },
                        "additionalProperties": false
                      },
                      "clientId": {
                        "type": "string",
                        "maxLength": 100,
                        "minLength": 1
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              },
              "maxItems": 250,
              "minItems": 1
            },
            "idempotencyKey": {
              "type": "string",
              "format": "uuid"
            },
            "expectedVersion": {
              "type": "string",
              "minLength": 1,
              "description": "Exact version returned by cruise_get, including the trip-only read before creating a cruise."
            }
          },
          "additionalProperties": false
        },
        "confirmationToken": {
          "type": "string",
          "minLength": 1,
          "description": "Omit to preview. After the user reviews and approves the exact preview, repeat the unchanged request with its token to commit. Never manufacture approval."
        }
      },
      "additionalProperties": false
    }
    arguments 520 lines
  • cruise_reorder auth-required never probed

    Preview and commit cruise reorder operations atomically. First call cruise_get for expectedVersion. Omit confirmationToken to preview, show the changes to the user, then repeat the unchanged request with its token only after the user approves. Reuse idempotencyKey for retries. Omitting a field preserves it; null clears nullable fields. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request"
      ],
      "properties": {
        "request": {
          "type": "object",
          "required": [
            "tripId",
            "idempotencyKey",
            "expectedVersion",
            "operations",
            "cruiseId"
          ],
          "properties": {
            "tripId": {
              "type": "string",
              "format": "uuid"
            },
            "cruiseId": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            },
            "operations": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "dayIds"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "ReorderDays"
                      },
                      "dayIds": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "uuid"
                        },
                        "description": "Every live cruise day ID exactly once in the desired order. Reordering preserves dates and day numbers.",
                        "uniqueItems": true
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              },
              "maxItems": 250,
              "minItems": 1
            },
            "idempotencyKey": {
              "type": "string",
              "format": "uuid"
            },
            "expectedVersion": {
              "type": "string",
              "minLength": 1,
              "description": "Exact version returned by cruise_get, including the trip-only read before creating a cruise."
            }
          },
          "additionalProperties": false
        },
        "confirmationToken": {
          "type": "string",
          "minLength": 1,
          "description": "Omit to preview. After the user reviews and approves the exact preview, repeat the unchanged request with its token to commit. Never manufacture approval."
        }
      },
      "additionalProperties": false
    }
    arguments 79 lines
  • search auth-required 40d ago

    Use this when the user wants to search their trips, itinerary segments, or travel documents by keyword. Returns citation-ready IDs, titles, and canonical URLs.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "query": {
          "type": "string",
          "description": "Search query"
        }
      }
    }
    arguments 12 lines
  • fetch auth-required 41d ago

    Use this when the user wants the full text for a specific Tineo search result. Pass an ID returned by search, such as trip:{id}, segment:{id}, travel-document:{id}, or document:{id}.

    mcp-tool

    {
      "type": "object",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "ID returned by the search tool"
        }
      }
    }
    arguments 12 lines
  • batch_segment_create auth-required never probed

    Create multiple segments in a trip in one call. Put each item's values in fields, named as segment_get_schema returns them (Activity activityType is one of: tour, dining, show, spa, class, sports, sightseeing, other). Each item succeeds or fails on its own: valid items are created and failed items are returned by index with the reason, so resend only the failed items. Max 50 segments per call; split larger itineraries into several calls. Segment dates must fall within the parent trip dates. Dates up to 1 day outside the trip extend it, with a warning; further out, call trip_update first. For an Activity, Lodging, EventTicket or Parking at a real place, call places_search first and put the result's place ID in fields.placeId: Tineo links that place (map pin and coordinates) and fills a missing name, address, phone and website. Never invent a time: if the user has not given or chosen one, ask, or send the date only (YYYY-MM-DD) in startDateTime and Tineo stores it as time not set. Send a clock time only when the user stated it or a booking shows it. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification. Cruise/CruiseDay generic writes require the dedicated cruise tools; their schemas and full reads remain available.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id",
        "segments"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "description": "The trip ID to add segments to"
        },
        "segments": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "segment_type",
              "fields"
            ],
            "properties": {
              "fields": {
                "type": "object",
                "description": "Field values for this segment, named as segment_get_schema returns them for segment_type. Activity activityType is one of: tour, dining, show, spa, class, sports, sightseeing, other."
              },
              "segment_type": {
                "type": "string",
                "description": "Segment type: Flight, Lodging, CarRental, Train, Transfer, Ferry, EventTicket, Parking, Activity, Note, Poll"
              }
            }
          },
          "description": "Array of segments to create. Each must have segment_type and fields."
        }
      }
    }
    arguments 34 lines
  • assistant_airbnb_search_trip reads auth-required 41d ago

    Search Airbnb listings for an existing Tineo trip. Derives location and dates from the trip; the model may override. location must be a city or area, not a whole country (ask the user which city). Each card has distance_km from the requested place and in_requested_area; listings outside the area come last. If none are in the area, say so with their distances and do NOT re-search the same place with a reworded location string. Amenity filtering only via the amenities enum; there is NO keyword/free-text filter, so tell the user anything else can't be filtered. If structuredContent.status is 'unavailable', do NOT retry the same search: share structuredContent.fallback_search_url (a prefilled airbnb.com search), offer a hotel search, or a support ticket.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "adults": {
          "type": "integer",
          "maximum": 16,
          "minimum": 1
        },
        "infants": {
          "type": "integer",
          "maximum": 5,
          "minimum": 0,
          "description": "Infants under 2. Airbnb does not count them as guests."
        },
        "trip_id": {
          "type": "string",
          "description": "Tineo trip ID. Defaults below are derived from this trip when omitted."
        },
        "check_in": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Check-in date YYYY-MM-DD."
        },
        "children": {
          "type": "integer",
          "maximum": 5,
          "minimum": 0
        },
        "currency": {
          "type": "string",
          "description": "ISO 4217 currency code (default USD)."
        },
        "location": {
          "type": "string",
          "description": "Optional override for the trip's destination."
        },
        "min_beds": {
          "type": "integer",
          "minimum": 0
        },
        "amenities": {
          "type": "array",
          "items": {
            "enum": [
              "wifi",
              "air_conditioning",
              "pool",
              "kitchen",
              "free_parking",
              "gym",
              "hot_tub",
              "heating",
              "washer",
              "dryer",
              "workspace",
              "ev_charger"
            ],
            "type": "string"
          },
          "description": "Only listings with ALL of these amenities. These are the only supported amenity filters; there is no keyword/free-text filter."
        },
        "check_out": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Check-out date YYYY-MM-DD."
        },
        "price_max": {
          "type": "integer",
          "minimum": 0
        },
        "price_min": {
          "type": "integer",
          "minimum": 0
        },
        "room_type": {
          "enum": [
            "entire_home",
            "private_room",
            "shared_room"
          ],
          "type": "string"
        },
        "max_results": {
          "type": "integer",
          "maximum": 5,
          "minimum": 1,
          "description": "Default 5, max 5."
        },
        "min_bedrooms": {
          "type": "integer",
          "minimum": 0
        },
        "min_bathrooms": {
          "type": "integer",
          "minimum": 0
        }
      }
    }
    arguments 101 lines
  • trip_cities_list auth-required never probed

    List the ordered city associations for a trip. Returns trip_city_id values used by update, remove, and reorder.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Trip ID."
        }
      }
    }
    arguments 13 lines
  • support_ticket_create auth-required never probed

    Create a Tineo support ticket after the user explicitly asks or confirms and notify Tineo support by email. Use when the assistant cannot complete a request, a tool fails, or the requested capability is unsupported. Tineo attaches the user's app version, platform, device model and OS version automatically, so do not ask for them or list them as unknown.

    mcp-tool

    {
      "type": "object",
      "required": [
        "summary",
        "description",
        "confirmed"
      ],
      "properties": {
        "source": {
          "enum": [
            "assistant_failure",
            "tool_error",
            "unsupported_request",
            "user_requested",
            "other"
          ],
          "type": "string",
          "description": "Why the support ticket is being created."
        },
        "summary": {
          "type": "string",
          "description": "Short support-ticket summary."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Related trip ID, if known."
        },
        "confirmed": {
          "type": "boolean",
          "description": "Must be true only after the user directly asks to create a ticket or confirms the assistant's offer."
        },
        "segment_id": {
          "type": "string",
          "format": "uuid",
          "description": "Related segment ID, if known."
        },
        "attachments": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "base64"
            ],
            "properties": {
              "base64": {
                "type": "string"
              },
              "file_name": {
                "type": "string"
              },
              "content_type": {
                "type": "string"
              }
            }
          },
          "maxItems": 10,
          "description": "Optional image attachments as base64 data URIs."
        },
        "description": {
          "type": "string",
          "description": "User-facing explanation of what failed or could not be completed."
        },
        "failure_context": {
          "type": "string",
          "description": "The failed Tineo tool name and its error text, if a Tineo tool failed."
        }
      }
    }
    arguments 69 lines
  • segment_details auth-required 40d ago

    Get full details for a specific trip segment. Returns complete information based on segment type: flight details (airline, flight number, airports, terminals, seats, baggage), hotel details (property, address, check-in/out times, room type, amenities), activity details (venue, tickets, timing), event ticket details (event name, venue, timing, vendor, order, confirmation), car rental details (company, vehicle, pickup/dropoff locations), or transfer details (provider, transfer type, pickup/dropoff locations, addresses, and local times). bookingContext describes whether Tineo can prepare an in-app reviewed change or needs the full editor; it is not a save confirmation or additional write authority.

    mcp-tool

    {
      "type": "object",
      "required": [
        "segment_id"
      ],
      "properties": {
        "segment_id": {
          "type": "string",
          "description": "The unique identifier of the segment to fetch details for"
        }
      }
    }
    arguments 12 lines
  • trip_booking_links reads auth-required never probed

    Return useful booking, reservation, ticket, check-in, itinerary, and affiliate flight-search links for a user's trip as booking_link_cards. Use this when the user asks for booking links, reservations, tickets, check-in, vouchers, receipts, or comparable flight-booking options.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "The trip ID to search for booking links."
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum number of booking-link cards to return. Defaults to 12 and is capped at 25."
        },
        "segment_types": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional segment type filter, such as Flight, Lodging, Activity, EventTicket, CarRental, Transfer, Train, Ferry, Parking, or CruiseActivity."
        },
        "classifications": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional link classification filter, such as DirectReservation, CheckIn, ViewTickets, ManageBooking, ViewItinerary, TravelDocuments, or FlightAffiliateSearch."
        }
      }
    }
    arguments 31 lines
  • segment_booking_links reads auth-required never probed

    Return useful booking, reservation, ticket, check-in, itinerary, voucher, receipt, and travel-document links for one trip segment as booking_link_cards.

    mcp-tool

    {
      "type": "object",
      "required": [
        "segment_id"
      ],
      "properties": {
        "segment_id": {
          "type": "string",
          "format": "uuid",
          "description": "The segment ID to search for booking links."
        },
        "classifications": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional link classification filter, such as DirectReservation, CheckIn, ViewTickets, ManageBooking, ViewItinerary, or TravelDocuments."
        }
      }
    }
    arguments 20 lines
  • trip_travelers reads auth-required never probed

    Get the list of travelers/participants for a specific trip. Returns names, emails, roles, and which segments each traveler is assigned to.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "description": "The unique identifier of the trip to get travelers for"
        }
      }
    }
    arguments 12 lines
  • flight_status_for_segment auth-required 41d ago

    Get current flight status for an existing flight segment in a user's trip. Use this when the user asks if a flight in their itinerary is delayed, canceled, on time, boarding, or has gate/terminal updates. Status is cached for a few minutes, so call it once per flight per answer; calling again for the same flight soon after returns the same result. The text says when the provider last updated the data.

    mcp-tool

    {
      "type": "object",
      "required": [
        "segment_id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Alias for segment_id"
        },
        "segment_id": {
          "type": "string",
          "description": "The flight segment ID from a trip itinerary or segment details result"
        }
      }
    }
    arguments 16 lines
  • flight_quickadd_lookup auth-required never probed

    Look up flight details by airline, flight number, and departure date before creating or editing a flight segment. Use this when the user gives a flight number and wants to add, preview, or verify a flight.

    mcp-tool

    {
      "type": "object",
      "required": [
        "flight_number",
        "departure_date"
      ],
      "properties": {
        "airline": {
          "type": "string",
          "description": "Optional airline name or callsign, such as American Airlines"
        },
        "airline_code": {
          "type": "string",
          "description": "Optional IATA or ICAO airline code, such as AA, UA, DL, or AAL"
        },
        "flight_number": {
          "type": "string",
          "description": "Flight number, with or without the airline prefix, such as AA3242 or 3242"
        },
        "departure_date": {
          "type": "string",
          "description": "Local scheduled departure date in YYYY-MM-DD format"
        }
      }
    }
    arguments 25 lines
  • place_details auth-required 41d ago

    Look up a selected place ID for its name, address, map URL, coordinates, photos, and timezone when missing from places_search. Google rich business details are disabled: do not use this tool to answer opening-hours, open-now, price, website, phone, or rating questions. Missing fields mean unavailable, not closed or absent. Previously cached optional details may be stale.

    mcp-tool

    {
      "type": "object",
      "required": [
        "place_id"
      ],
      "properties": {
        "language": {
          "type": "string",
          "description": "Optional BCP 47 language code for place data"
        },
        "place_id": {
          "type": "string",
          "description": "The provider place ID returned by places_search"
        }
      }
    }
    arguments 16 lines
  • segment_create auth-required never probed

    Create a new segment in a trip. FIRST call segment_get_schema to get the required fields for the segment type. Required in fields, besides trip_id: Flight airline (or a flightNumber starting with the airline code, e.g. UA 123), departureAirportCode, arrivalAirportCode, startDateTime; Lodging propertyName, startDateTime; Activity title, startDateTime; EventTicket eventName, startDateTime; CarRental rentalCompany, startDateTime; Train and Ferry operator, departureCity, arrivalCity, startDateTime; Transfer provider, pickupLocation, dropoffLocation, startDateTime; Parking facilityName, startDateTime; Note title; Poll title, options. Then provide the trip_id, segment_type, and fields matching the schema. Segment dates must fall within the parent trip dates. Dates up to 1 day outside the trip extend it, with a warning; further out, call trip_update first. For an Activity, Lodging, EventTicket or Parking at a real place, call places_search first and put the result's place ID in fields.placeId: Tineo links that place (map pin and coordinates) and fills a missing name, address, phone and website. Never invent a time: if the user has not given or chosen one, ask, or send the date only (YYYY-MM-DD) in startDateTime and Tineo stores it as time not set. Send a clock time only when the user stated it or a booking shows it. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification. Cruise/CruiseDay generic writes require the dedicated cruise tools; their schemas and full reads remain available.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "fields": {
          "type": "object",
          "description": "Field values matching the schema for the segment type. Get schema first with segment_get_schema. Activity activityType is one of: tour, dining, show, spa, class, sports, sightseeing, other (other words are mapped or saved as other). title is optional for Flight, Lodging, Transfer, CarRental and Parking: Tineo derives one (e.g. \"AA72 SYD → LAX\", the property name, \"Transfer to <dropoff>\")."
        },
        "trip_id": {
          "type": "string",
          "description": "The trip ID to add the segment to"
        },
        "segment_type": {
          "type": "string",
          "description": "The type of segment to create (Flight, Lodging, CarRental, Train, Transfer, Ferry, EventTicket, Parking, Activity, Note, Poll)"
        }
      },
      "additionalProperties": true
    }
    arguments 21 lines
  • segment_update changes data auth-required never probed

    Update an existing segment. Only provide the fields you want to change. Get field names from segment_get_schema if unsure. Segment dates must fall within the parent trip dates; use trip_update first to extend the trip. To change a checklist's tasks use checklist_items_add, checklist_item_update, checklist_items_remove or checklist_items_reorder (IDs from trip_checklists). The result lists the saved value of every field you sent, read back from Tineo, so do not call segment_details to confirm the change. On an Activity, Lodging, EventTicket or Parking, fields.placeId (a place_id from places_search) attaches that place the same way segment_associate_place does, replacing the stored address with the place's. Never invent a time: if the user has not given or chosen one, ask, or send the date only (YYYY-MM-DD) in startDateTime and Tineo stores it as time not set. Send a clock time only when the user stated it or a booking shows it. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification. Cruise/CruiseDay generic writes require the dedicated cruise tools; their schemas and full reads remain available.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "id": {
          "type": "string",
          "description": "Alias for segment_id (widget compatibility)"
        },
        "fields": {
          "type": "object",
          "description": "Field values to update. Only include fields that should be changed. Send null to clear an optional field; an empty string is ignored and the stored value is kept."
        },
        "segment_id": {
          "type": "string",
          "description": "The ID of the segment to update"
        }
      },
      "additionalProperties": true
    }
    arguments 19 lines
  • segment_delete changes data auth-required never probed

    Delete a segment from a trip. This action cannot be undone. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification. Cruise/CruiseDay generic writes require the dedicated cruise tools; their schemas and full reads remain available.

    mcp-tool

    {
      "type": "object",
      "required": [
        "segment_id"
      ],
      "properties": {
        "segment_id": {
          "type": "string",
          "description": "The ID of the segment to delete"
        }
      }
    }
    arguments 12 lines
  • trip_create auth-required never probed

    Create a new trip with explicit start_date and end_date (YYYY-MM-DD), covering its planned segments. Returns its ID; the authenticated user becomes the owner.

    mcp-tool

    {
      "type": "object",
      "required": [
        "title",
        "start_date",
        "end_date"
      ],
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 200,
          "description": "Trip title MUST be a human-readable destination name (e.g. 'Barcelona', 'Tokyo & Kyoto (Oct 2026)'). DO NOT use hyphenated airport corridor codes (e.g. 'DAC-IST-BCN-IST-DAC-CXB'). If unsure, provide destination city name or leave generic."
        },
        "end_date": {
          "type": "string",
          "description": "Trip end date in YYYY-MM-DD format"
        },
        "start_date": {
          "type": "string",
          "description": "Trip start date in YYYY-MM-DD format"
        },
        "description": {
          "type": "string",
          "maxLength": 1000,
          "description": "Optional trip description or notes"
        },
        "destination": {
          "type": "string",
          "maxLength": 200,
          "description": "Primary destination city or region"
        }
      },
      "additionalProperties": false
    }
    arguments 34 lines
  • trip_update auth-required never probed

    Update trip dates, title, destination, or description for a trip the authenticated user can edit. May synchronize changes to the trip owner's connected calendars when automatic sync is enabled.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 200,
          "description": "Alias for title"
        },
        "title": {
          "type": "string",
          "maxLength": 200,
          "description": "New trip title (e.g., 'Japan October 2026')"
        },
        "trip_id": {
          "type": "string",
          "description": "The ID of the trip to update"
        },
        "end_date": {
          "type": "string",
          "description": "Trip end date in YYYY-MM-DD format"
        },
        "start_date": {
          "type": "string",
          "description": "Trip start date in YYYY-MM-DD format"
        },
        "description": {
          "type": "string",
          "maxLength": 1000,
          "description": "Optional trip description or notes"
        },
        "destination": {
          "type": "string",
          "maxLength": 200,
          "description": "Primary destination city or region"
        },
        "destination_scope": {
          "enum": [
            "trip"
          ],
          "type": "string",
          "description": "Required as 'trip' when changing destination on a trip that already has dated itinerary items."
        },
        "destination_confirmed": {
          "type": "boolean",
          "description": "Required true when changing destination on a trip that already has dated itinerary items; confirms this is a parent-trip change, not an item location correction."
        }
      },
      "additionalProperties": false
    }
    arguments 52 lines
  • trip_delete changes data auth-required never probed

    Delete a trip owned by the authenticated user and its itinerary segments. Requires confirmed=true after explicit user confirmation. Also removes connected calendar events when automatic sync is enabled.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id",
        "confirmed"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "ID of the trip to delete."
        },
        "confirmed": {
          "type": "boolean",
          "description": "True only after the user explicitly confirms deleting this trip and its itinerary."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • trip_rename auth-required never probed

    Rename a trip owned by the authenticated user. Returns the old and new titles. May synchronize the title to the trip owner's connected calendars when automatic sync is enabled.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id",
        "new_title"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "description": "The ID of the trip to rename"
        },
        "new_title": {
          "type": "string",
          "description": "The new trip title"
        }
      }
    }
    arguments 17 lines
  • flight_quickadd changes data auth-required never probed

    Look up a real flight by number and date, then create it as a segment in the trip. Combines flight_quickadd_lookup + segment_create in one call. May take 2-5 seconds due to external flight data lookup. Segment dates must fall within the parent trip dates; use trip_update first to extend the trip.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id",
        "flight_number",
        "departure_date"
      ],
      "properties": {
        "airline": {
          "type": "string",
          "description": "Full airline name as fallback (e.g., 'American Airlines'). Used only if airline_code is not provided."
        },
        "trip_id": {
          "type": "string",
          "description": "The trip ID to add the flight to"
        },
        "airline_code": {
          "type": "string",
          "description": "IATA or ICAO airline code (AA, UA, DL, AAL). Optional if embedded in flight_number."
        },
        "flight_number": {
          "type": "string",
          "description": "Flight number, e.g. 'AA3242', 'UA100', or just '3242' if airline_code is provided"
        },
        "departure_date": {
          "type": "string",
          "description": "Departure date in YYYY-MM-DD format"
        }
      }
    }
    arguments 30 lines
  • traveler_assign auth-required never probed

    Assign one or more travelers to one or more segments in a single call. To put the same travelers on several segments (for example every flight of a trip), pass all of them in segment_ids and all travelers in traveler_ids in one call instead of one call per segment. Up to 50 segments and 50 travelers per call, and at most 200 segment-traveler pairs. Assigning an already-assigned traveler is a no-op, and each segment succeeds or fails on its own: the result lists what was assigned and, per segment, what failed and why.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "segment_id": {
          "type": "string",
          "description": "One segment ID to assign travelers to. Use segment_ids for several."
        },
        "segment_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 50,
          "description": "Segment IDs to assign the same travelers to, in one call."
        },
        "traveler_id": {
          "type": "string",
          "description": "One trip traveler ID to assign. Use traveler_ids for several."
        },
        "traveler_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 50,
          "description": "Trip traveler IDs (from trip_travelers) to assign to every listed segment."
        }
      }
    }
    arguments 29 lines
  • traveler_add auth-required never probed

    Add a traveler only after known_participants and the user's explicit invitation decision. With an invitation, pass email and invite_confirmed=true; this creates and sends the trip invitation. If the user explicitly declines, omit email and pass invite_confirmed=false. If the email matches someone the user already added to a trip, that existing traveler's name is reused instead of creating a second identity for the same person.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id",
        "name",
        "invite_confirmed"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Traveler's display name"
        },
        "email": {
          "type": "string",
          "description": "Confirmed invitation email. Required when invite_confirmed=true and forbidden when false."
        },
        "trip_id": {
          "type": "string",
          "description": "The trip ID to add the traveler to"
        },
        "invite_confirmed": {
          "type": "boolean",
          "description": "True only after the user explicitly confirms sending an invitation. False only after they explicitly decline."
        }
      }
    }
    arguments 26 lines
  • traveler_update_email auth-required never probed

    Correct one pending, unaccepted trip traveler's email after the owner supplies the exact traveler ID and new email. A changed address revokes the old link and automatically sends a renewed invitation. Report invitationSent truthfully; an unchanged address sends nothing.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id",
        "traveler_id",
        "email"
      ],
      "properties": {
        "email": {
          "type": "string",
          "format": "email",
          "maxLength": 320,
          "description": "New email explicitly supplied by the owner"
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Trip ID owned by the caller"
        },
        "traveler_id": {
          "type": "string",
          "format": "uuid",
          "description": "Exact pending traveler ID from trip_travelers"
        }
      },
      "additionalProperties": false
    }
    arguments 27 lines
  • train_booking_link auth-required never probed

    Return a train or bus search handoff between two cities, routed by region. Asian routes open 12Go with the route and date prefilled. European routes open the Omio route page (Madrid-Barcelona opens a prefilled search; Tokyo-Kyoto also gets the Omio page). Routes in other regions, such as the Americas, return no handoff. Confirm dates and passengers on the partner site; the card preserves the requested date for reference. No live fares, availability, or tickets are provided.

    mcp-tool

    {
      "type": "object",
      "required": [
        "origin",
        "destination",
        "departureDate"
      ],
      "properties": {
        "locale": {
          "type": "string",
          "description": "Optional locale, such as en."
        },
        "origin": {
          "type": "string",
          "description": "Departure city or station."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional Tineo trip ID (from trips_list) this request is for. Used only to default the currency to that trip's currency when currency is omitted and the user has no preferred currency; ignored if the trip is not found or not accessible to the user."
        },
        "currency": {
          "type": "string",
          "description": "Optional ISO-style three-letter display currency, such as EUR. Omit to use the user's preferred currency, then the currency of the trip given by trip_id, then EUR."
        },
        "passengers": {
          "type": "integer",
          "maximum": 9,
          "minimum": 1,
          "description": "Optional passenger count. Defaults to 1."
        },
        "returnDate": {
          "type": "string",
          "format": "date",
          "description": "Optional return date in YYYY-MM-DD format."
        },
        "destination": {
          "type": "string",
          "description": "Arrival city or station."
        },
        "departureDate": {
          "type": "string",
          "format": "date",
          "description": "Local departure date in YYYY-MM-DD format."
        }
      }
    }
    arguments 47 lines
  • ground_transfer_booking_links reads auth-required never probed

    Return Welcome Pickups and GetTransfer affiliate cards for a dated pickup and drop-off route. These are provider search or quote handoffs only, not live availability, prices, or confirmed bookings.

    mcp-tool

    {
      "type": "object",
      "required": [
        "pickup_location",
        "dropoff_location",
        "pickup_date"
      ],
      "properties": {
        "locale": {
          "type": "string",
          "description": "Optional locale. Defaults to en."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional Tineo trip ID (from trips_list) this request is for. Used only to default the currency to that trip's currency when currency is omitted and the user has no preferred currency; ignored if the trip is not found or not accessible to the user."
        },
        "currency": {
          "type": "string",
          "description": "Optional ISO-style three-letter display currency. Omit to use the user's preferred currency, then the currency of the trip given by trip_id, then USD."
        },
        "passengers": {
          "type": "integer",
          "maximum": 30,
          "minimum": 1,
          "description": "Optional passenger count. Defaults to 1."
        },
        "pickup_date": {
          "type": "string",
          "format": "date",
          "description": "Local pickup date in YYYY-MM-DD format."
        },
        "pickup_location": {
          "type": "string",
          "description": "Pickup airport, hotel, port, station, address, or place name."
        },
        "dropoff_location": {
          "type": "string",
          "description": "Drop-off hotel, airport, port, station, address, or place name."
        }
      }
    }
    arguments 42 lines
  • travel_document_assign_trip changes data auth-required never probed

    Move or assign a travel document (insurance, visa, passport scan, voucher) to another trip the user OWNS, or back to the general library. Provide document_id from a documents listing and trip_id from trips_list. Omit trip_id (or pass null) to move the document to the library. Only trips the user owns are valid targets. The document's linked files move with it; a file also attached to another document is left in place and reported. If more than one document could match the request, confirm which one before moving. Returns the document, its previous and new trip, and how many linked files were re-pointed.

    mcp-tool

    {
      "type": "object",
      "required": [
        "document_id"
      ],
      "properties": {
        "trip_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Target trip id owned by the user; omit or null to unassign the document to the library."
        },
        "document_id": {
          "type": "string",
          "description": "Id of the travel document to move."
        }
      }
    }
    arguments 23 lines
  • get_routes reads auth-required 41d ago

    Compare available driving, transit, walking, and bicycling route summaries between two places using Google Maps. Returns duration and distance estimates for supported modes, plus Uber, Lyft, Waymo, and Google Maps handoff buttons for the destination. Set origin to 'home' for the user's saved home address. Ground time excludes airport check-in and security. Fares, detailed legs, flights, and ferries are unavailable.

    mcp-tool

    {
      "type": "object",
      "required": [
        "origin",
        "destination"
      ],
      "properties": {
        "time": {
          "type": "string",
          "description": "ISO 8601 date-time with an explicit UTC offset. Required for leave_by or arrive_by; omit for leave_now."
        },
        "modes": {
          "type": "array",
          "items": {
            "enum": [
              "driving",
              "transit",
              "walking",
              "bicycling"
            ],
            "type": "string"
          },
          "maxItems": 4,
          "minItems": 1,
          "description": "Modes to compare. Defaults to all four.",
          "uniqueItems": true
        },
        "origin": {
          "type": "string",
          "description": "Starting place or address (1 to 300 characters), or 'home' for the user's private saved home address."
        },
        "time_mode": {
          "enum": [
            "leave_now",
            "leave_by",
            "arrive_by"
          ],
          "type": "string",
          "description": "When to travel. Default leave_now."
        },
        "destination": {
          "type": "string",
          "description": "Ending place or address (1 to 300 characters)."
        }
      }
    }
    arguments 46 lines
  • search_hotels auth-required 41d ago

    Search for hotels and accommodations. Ordinary searches use the text query. Dated radius searches use a geographic bounding box and exact distance filter; SearchAPI does not apply the text query or style preferences within the radius. Provider coverage may be incomplete and prices may change. A hotel_place_id without radius_meters searches by the resolved hotel name; with radius_meters it searches nearby. Only a unique identity match retains its offer links.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "limit": {
          "type": "integer",
          "default": 8,
          "maximum": 10,
          "minimum": 1,
          "description": "Maximum number of hotel results to return (max 10)."
        },
        "query": {
          "type": "string",
          "description": "Search query or destination city (e.g. 'hotels in Tokyo'). Required for ordinary hotel search. Google Hotels can mix in properties from nearby towns or districts; cards outside the searched place carry outsideRequestedArea and distanceFromAreaKm, and areaNote says how many. When the user wants a specific neighbourhood, get its coordinates or center_place_id from places_search and use a radius search. Radius search ignores this text in provider selection and filters by geography only. For hotel_place_id without radius_meters, the resolved property name is used for provider search and identity matching."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional Tineo trip ID (from trips_list) this request is for. Used only to default the currency to that trip's currency when currency is omitted and the user has no preferred currency; ignored if the trip is not found or not accessible to the user."
        },
        "check_in": {
          "type": "string",
          "description": "Check-in date in YYYY-MM-DD format (alias: checkIn)."
        },
        "currency": {
          "type": "string",
          "description": "Optional ISO-style three-letter currency code. Omit to use the user's preferred currency, then the currency of the trip given by trip_id, then USD."
        },
        "latitude": {
          "type": "number",
          "maximum": 90,
          "minimum": -90,
          "description": "Radius center latitude. Supply together with longitude instead of a place ID. Query may be omitted for a coordinate-only radius search."
        },
        "check_out": {
          "type": "string",
          "description": "Check-out date in YYYY-MM-DD format (alias: checkOut)."
        },
        "longitude": {
          "type": "number",
          "maximum": 180,
          "minimum": -180,
          "description": "Radius center longitude. Supply together with latitude instead of a place ID. Query may be omitted for a coordinate-only radius search."
        },
        "adult_count": {
          "type": "integer",
          "default": 1,
          "maximum": 9,
          "minimum": 1,
          "description": "Number of adults (alias: adults)."
        },
        "radius_meters": {
          "type": "integer",
          "maximum": 50000,
          "minimum": 100,
          "description": "Geographic search radius, default 1000 meters when center_place_id or coordinates are given. Requires stay dates and a center. Text query and style preferences are not applied to radius provider selection."
        },
        "hotel_place_id": {
          "type": "string",
          "description": "Optional specific hotel place ID. Searches priced inventory by hotel name, or nearby when radius_meters is supplied. Retains offer links only if identity is uniquely verified. Requires check_in and check_out."
        },
        "center_place_id": {
          "type": "string",
          "description": "Optional place ID for the radius center, from places_search. Requires check_in and check_out."
        }
      }
    }
    arguments 67 lines
  • search_attractions auth-required 40d ago

    Search for popular tourist attractions, sights, landmarks, and things to do in a destination using TripAdvisor and Google Places. Returns attraction cards with ratings, descriptions, addresses, and ticket/experience links. Use when the user asks about top sights, landmarks, or attractions in a city.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "default": 8,
          "maximum": 10,
          "minimum": 1,
          "description": "Maximum number of attractions to return (max 10)."
        },
        "query": {
          "type": "string",
          "description": "Destination name, landmark, or attraction search term (e.g. 'Rome', 'Eiffel Tower', 'museums in London')."
        },
        "location": {
          "type": "string",
          "description": "Optional city/area location filter."
        }
      }
    }
    arguments 23 lines
  • estimate_transfer_drive_time auth-required never probed

    Estimate the drive time of a Transfer or Transport segment (taxi, car service, airport transfer, ground transport) from its pickup and drop-off at its pickup time, using Apple Maps traffic prediction. apply=false (default) only reports the estimate; apply=true saves it as the estimated drop-off time so the Tineo calendar and iCal feed show the real ride length instead of a flat hour. A drop-off time already on the booking or set by the user is never changed, and a failed lookup changes nothing. Present the result as an estimate.

    mcp-tool

    {
      "type": "object",
      "required": [
        "segment_id"
      ],
      "properties": {
        "apply": {
          "type": "boolean",
          "description": "Save the estimate as the drop-off time. Default false."
        },
        "segment_id": {
          "type": "string",
          "description": "ID of the Transfer or Transport segment."
        }
      }
    }
    arguments 16 lines
  • packing_list_regenerate auth-required never probed

    Regenerate a trip's existing packing checklist: replaces the generated items the user has not touched, and keeps every item the user checked, added or edited. Use only after the user asks to redo or refresh the list. With people, only those people's lists are regenerated (a person without a list gets a new one); a trip with no list yet gets a new one. Provide the trip_id from trips_list. Tineo builds the list on its servers with its AI model provider, sending the trip's title, dates, destinations, itinerary items, weather forecast, any context_notes, and each person's age band and notes (never their name).

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "people": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name",
              "age_band"
            ],
            "properties": {
              "name": {
                "type": "string",
                "description": "Person's name or a label such as \"Kid 1\". Used only as the list's title; never sent to the AI model provider."
              },
              "notes": {
                "type": "string",
                "maxLength": 1000,
                "description": "Optional packing-relevant details for this person that the user asked to include. Never include health conditions, medical details or other sensitive personal information."
              },
              "age_band": {
                "enum": [
                  "adult",
                  "teen",
                  "child",
                  "toddler",
                  "infant"
                ],
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "maxItems": 6,
          "description": "Optional. One personalized list per person (max 6), titled with the person's name."
        },
        "trip_id": {
          "type": "string",
          "description": "Tineo trip ID (from trips_list)."
        },
        "context_notes": {
          "type": "string",
          "maxLength": 1000,
          "description": "Optional packing-relevant details the user asked to include, such as planned activities or special gear. Pass only what the user wants reflected in the list. Never include health conditions, medical details or other sensitive personal information."
        }
      },
      "additionalProperties": false
    }
    arguments 52 lines
  • trip_checklists auth-required never probed

    Read every checklist on a trip with its items. Returns each checklist's title and, for every task, a stable itemId, text, category (section heading), position (0-based stored order; the app groups tasks under their section headings in first-appearance order), isChecked (complete for everyone on a shared trip) and checkedByMe (on a shared trip a task you ticked stays unchecked until every traveler ticks it). Tasks are a flat list: there are no subtasks or nested items. Pass checklist_id (the checklist's segment ID) to read just one checklist. Call this before editing items so you have the item IDs. To create a checklist use segment_create (type Note, isChecklist true, checklistItems [{text, category?}]). To change tasks use checklist_items_add (append tasks), checklist_item_update (text, category, or checked to mark done/not done), checklist_items_remove, or checklist_items_reorder, passing checklist_id and the item IDs. Delete a whole checklist with segment_delete. Never show IDs to users.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "description": "ID of the trip (from trips_list)."
        },
        "checklist_id": {
          "type": "string",
          "description": "Optional. The checklist note's segment ID, to read just that one checklist."
        }
      },
      "additionalProperties": false
    }
    arguments 17 lines
  • duplicate_checklist auth-required never probed

    Duplicate a checklist into one or more new checklists on the same trip. Each copy keeps item text and sections; every item starts unchecked. Provide source_note_id (a checklist segment ID from trip_details) and one title per copy (max 10).

    mcp-tool

    {
      "type": "object",
      "required": [
        "source_note_id",
        "titles"
      ],
      "properties": {
        "titles": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "One title per copy (1 to 10, each up to 200 characters)."
        },
        "source_note_id": {
          "type": "string",
          "description": "ID of the checklist to copy (from trip_details)."
        }
      }
    }
    arguments 20 lines
  • checklist_items_add auth-required never probed

    Add one or more tasks to the end of an existing trip checklist. Get checklist_id from trip_checklists. Each item has text and an optional category (the section heading it appears under). A checklist holds at most 100 tasks; tasks are a flat list with no subtasks. Calling this twice adds the tasks twice. To create a new checklist use segment_create (type Note, isChecklist true). Never show IDs to users.

    mcp-tool

    {
      "type": "object",
      "required": [
        "checklist_id",
        "items"
      ],
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "text"
            ],
            "properties": {
              "text": {
                "type": "string",
                "maxLength": 500,
                "minLength": 1,
                "description": "The task text."
              },
              "category": {
                "type": "string",
                "maxLength": 40,
                "description": "Optional section heading, e.g. Clothing or Documents."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 100,
          "minItems": 1,
          "description": "Tasks to append, in order."
        },
        "checklist_id": {
          "type": "string",
          "description": "The checklist note's segment ID (checklist_id from trip_checklists)."
        }
      },
      "additionalProperties": false
    }
    arguments 40 lines
  • checklist_item_update auth-required never probed

    Change one task on a trip checklist: its text, its category (section heading), or whether it is done. Get checklist_id and item_id from trip_checklists. Send only what changes. checked true marks the task done for the current user (on a shared trip it shows complete once every traveler ticks it); checked false unticks it. category "" removes the task from its section. Never show IDs to users.

    mcp-tool

    {
      "type": "object",
      "required": [
        "checklist_id",
        "item_id"
      ],
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 500,
          "minLength": 1,
          "description": "New task text."
        },
        "checked": {
          "type": "boolean",
          "description": "true marks the task done for the current user; false unticks it."
        },
        "item_id": {
          "type": "string",
          "description": "The task's itemId from trip_checklists."
        },
        "category": {
          "type": "string",
          "maxLength": 40,
          "description": "New section heading; \"\" clears it."
        },
        "checklist_id": {
          "type": "string",
          "description": "The checklist note's segment ID (checklist_id from trip_checklists)."
        }
      },
      "additionalProperties": false
    }
    arguments 33 lines
  • checklist_items_reorder auth-required never probed

    Put a trip checklist's tasks in a new order. Get checklist_id and the item IDs from trip_checklists, then send order listing every task ID exactly once in the new order. The app groups tasks under their section headings in first-appearance order. Never show IDs to users.

    mcp-tool

    {
      "type": "object",
      "required": [
        "checklist_id",
        "order"
      ],
      "properties": {
        "order": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 100,
          "minItems": 1,
          "description": "Every task ID on the checklist, in the new order.",
          "uniqueItems": true
        },
        "checklist_id": {
          "type": "string",
          "description": "The checklist note's segment ID (checklist_id from trip_checklists)."
        }
      },
      "additionalProperties": false
    }
    arguments 24 lines
  • trip_cover_update changes data auth-required never probed

    Set a trip's cover photo from an image URL or a place_photo_reference returned by places_search/place_details. Becomes the trip's hero image immediately. Provide the trip_id from trips_list.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "description": "Tineo trip ID (from trips_list)."
        },
        "image_url": {
          "type": "string",
          "maxLength": 1024,
          "description": "Direct https:// image URL to use as the cover. Provide this or place_photo_reference."
        },
        "place_photo_reference": {
          "type": "string",
          "maxLength": 1000,
          "description": "A photoReference from a places_search/place_details photos entry. Provide this or image_url."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • segment_associate_place auth-required never probed

    Attach a Google Place to an ALREADY-EXISTING segment retroactively — writes a place association and syncs the segment's address/city/country/coordinates from the place. Use when a segment has a venue/name but no address (e.g. imported from a ticket confirmation with venue-only data). Requires a place_id from places_search/place_details. For CarRental/Transfer segments pass role "origin" or "destination"; omit for single-location segments (Activity, Lodging, EventTicket, Parking), which default to "primary".

    mcp-tool

    {
      "type": "object",
      "required": [
        "segment_id",
        "place_id"
      ],
      "properties": {
        "role": {
          "enum": [
            "primary",
            "origin",
            "destination"
          ],
          "type": "string",
          "description": "Which location this place represents. Default \"primary\"."
        },
        "place_id": {
          "type": "string",
          "maxLength": 450,
          "description": "Google Place ID from a prior places_search/place_details call."
        },
        "segment_id": {
          "type": "string",
          "description": "Segment ID (from segment_details/trip_details) to attach the place to."
        }
      },
      "additionalProperties": false
    }
    arguments 28 lines
  • segment_link_add auth-required never probed

    Add a separate labeled, clickable URL (for example a restaurant Menu, online check-in, or directions link) to an ALREADY-EXISTING itinerary segment. Additive only: imported and existing links are never changed or removed, and an identical URL already on the segment is reported instead of duplicated. Find the segment first: call trips_list, then trip_details with sections ["segments"] on each candidate trip and match the segment by title or venue (keyword search can miss names), then confirm with the user. Returns the saved link and every link now on the segment.

    mcp-tool

    {
      "type": "object",
      "required": [
        "segment_id",
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "maxLength": 2048,
          "description": "Absolute http(s) URL to add, such as a restaurant menu page."
        },
        "label": {
          "type": "string",
          "maxLength": 200,
          "description": "Short button label shown for the link, such as \"Menu\", \"Online Check-in\", or \"Directions\"."
        },
        "link_type": {
          "enum": [
            "CheckIn",
            "ManageBooking",
            "ViewTickets",
            "SelectSeats",
            "GetDirections",
            "CancelReservation",
            "ViewItinerary",
            "Other"
          ],
          "type": "string",
          "description": "Optional link category. Defaults to Other (use Other for menus and general websites)."
        },
        "segment_id": {
          "type": "string",
          "description": "Segment ID (from trip_details/segment_details) to add the link to."
        }
      },
      "additionalProperties": false
    }
    arguments 38 lines
  • get_flight_airport_conditions auth-required 41d ago

    Get cached airport conditions, delay indices, weather, and flight rules for an IATA airport code (e.g. "ORD") or a flight segment's departure and arrival airports. Cache-only: reads existing airport intelligence and never triggers an external fetch.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "route_to": {
          "type": "string",
          "description": "Optional destination IATA airport code when checking a specific route."
        },
        "iata_code": {
          "type": "string",
          "description": "3-letter IATA airport code, such as ORD or LHR."
        },
        "flight_segment_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional flight segment ID (from trip_details) to look up both departure and arrival conditions."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • get_trip_expense_summary auth-required 41d ago

    Get trip spend totals, per-currency breakdowns, traveler balances, and calculated who-pays-whom settlement suggestions for a trip.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Tineo trip ID (from trips_list)."
        },
        "include_settlements": {
          "type": "boolean",
          "description": "Whether to include optimal who-pays-whom settlement suggestions. Default true."
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • trip_expenses_list auth-required never probed

    List a trip's individual expenses with who paid and how each is split, plus the trip's travelers (ID, name, and which one is the user). Use it to find an expense or traveler ID before trip_expense_update or trip_expense_create. For totals and who owes whom use get_trip_expense_summary.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "query": {
          "type": "string",
          "description": "Optional words to match in the description, vendor or category."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Tineo trip ID (from trips_list)."
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • trip_expense_update auth-required never probed

    Change an existing trip expense: amount, description, date, category, who paid, or how it is split (for example, make an expense 100% one person's). Get the expense ID and traveler IDs from trip_expenses_list. Send only the fields that change; a split replaces the whole split. Changing the amount of an equal or percentage split keeps the same people and proportions. Only the trip owner or an editor can edit expenses.

    mcp-tool

    {
      "type": "object",
      "required": [
        "expense_id"
      ],
      "properties": {
        "date": {
          "type": "string",
          "description": "Expense date, YYYY-MM-DD."
        },
        "notes": {
          "type": "string"
        },
        "split": {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "type": {
              "enum": [
                "payer",
                "equal",
                "percentage",
                "exact"
              ],
              "type": "string"
            },
            "participants": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "traveler_id"
                ],
                "properties": {
                  "amount": {
                    "type": "number",
                    "description": "Required for exact splits."
                  },
                  "percentage": {
                    "type": "number",
                    "description": "Required for percentage splits."
                  },
                  "traveler_id": {
                    "type": "string",
                    "description": "Traveler ID from trip_expenses_list travelers, or \"me\"."
                  }
                },
                "additionalProperties": false
              }
            }
          },
          "description": "Who the cost belongs to. type payer = all of it is the payer's cost (no split). equal = divided evenly among participants (omit participants for everyone on the trip). percentage = each participant's percentage, summing to 100. exact = each participant's amount, summing to the expense amount. To make an expense 100% one person's: if they paid, use type payer with paid_by set to them; if someone else paid, use percentage with only that person at 100.",
          "additionalProperties": false
        },
        "amount": {
          "type": "number",
          "description": "Total amount, greater than 0."
        },
        "vendor": {
          "type": "string",
          "description": "Merchant or vendor."
        },
        "paid_by": {
          "type": "string",
          "description": "Traveler ID from trip_expenses_list travelers, or \"me\"."
        },
        "category": {
          "enum": [
            "Transportation",
            "Lodging",
            "CarRental",
            "Food",
            "Activities",
            "Shopping",
            "Insurance",
            "Communication",
            "Tips",
            "Fees",
            "Other"
          ],
          "type": "string"
        },
        "currency": {
          "type": "string",
          "description": "3-letter currency code."
        },
        "expense_id": {
          "type": "string",
          "format": "uuid",
          "description": "Expense ID from trip_expenses_list."
        },
        "description": {
          "type": "string",
          "description": "What the expense was for, e.g. Travel insurance."
        }
      },
      "additionalProperties": false
    }
    arguments 100 lines
  • get_flight_change_history auth-required 41d ago

    Get recorded historical timeline of flight schedule changes, gate changes, and delays for flights monitored on the user's trips.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional trip ID to filter changes for flights on that trip."
        },
        "since_days": {
          "type": "integer",
          "maximum": 365,
          "minimum": 1,
          "description": "Lookback window in days. Default 30."
        },
        "flight_date": {
          "type": "string",
          "format": "date",
          "description": "Optional flight departure date in YYYY-MM-DD format."
        },
        "airline_code": {
          "type": "string",
          "description": "Optional 2-letter airline code, such as UA."
        },
        "flight_number": {
          "type": "string",
          "description": "Optional flight number, such as 1234."
        },
        "flight_segment_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional flight segment ID."
        }
      },
      "additionalProperties": false
    }
    arguments 35 lines
  • diagnose_failed_import auth-required never probed

    Triage a failed, held, or partially processed email import on the user's account. Returns the failure step, error message, likely reason, and actionable next steps.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional trip ID to look up the most recent non-clean import for that trip."
        },
        "import_id": {
          "type": "string",
          "format": "uuid",
          "description": "Specific EmailImport ID to diagnose."
        }
      },
      "additionalProperties": false
    }
    arguments 16 lines
  • get_day_of_travel_brief reads auth-required 41d ago

    Get airport day-of-travel intelligence combining cached airport conditions and ground-transportation guides (trains, shuttles, taxis) for an airport code or flight segment.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "iata_code": {
          "type": "string",
          "description": "3-letter IATA airport code, such as ATL."
        },
        "flight_segment_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional flight segment ID (from trip_details) to check departure and arrival airports."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • search_airport_lounges auth-required 40d ago

    Requires Tineo Ultra access. Search Tineo's populated first-party airport-lounge catalog by IATA and optional terminal/gate. Returns terminal, concourse, stored gate reference, location, access, amenity, rating, and day-pass fields with categorical gate relevance (not walking distance).

    mcp-tool

    {
      "type": "object",
      "required": [
        "iata_code"
      ],
      "properties": {
        "gate": {
          "type": "string",
          "maxLength": 40,
          "description": "Optional gate, such as A17."
        },
        "terminal": {
          "type": "string",
          "maxLength": 100,
          "description": "Optional terminal or concourse, such as Terminal 5 or Concourse A."
        },
        "iata_code": {
          "type": "string",
          "pattern": "^[A-Za-z]{3}$",
          "description": "Required 3-letter IATA airport code, such as ATL."
        },
        "max_results": {
          "type": "integer",
          "maximum": 20,
          "minimum": 1,
          "description": "Maximum lounges returned. Default 10."
        }
      },
      "additionalProperties": false
    }
    arguments 30 lines
  • forwarding_address_get auth-required never probed

    Read the authenticated user's Tineo email forwarding addresses without changing anything. Returns the personal forwarding address when one exists, any other active personal addresses, and the universal [email protected] address, which works for mail forwarded from the user's primary or registered email. A personal address can also receive mail sent by an assistant or travel provider. If the user has no personal address and wants one, use forwarding_address_create after they ask for it.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • audit_travel_documents auth-required 41d ago

    Audit expiration dates of the user's travel documents (passports, visas, insurance) and flag expired, expiring soon (<180 days), or expiring before trip end.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Optional trip ID to check documents against that trip's dates."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • friend_request_send auth-required never probed

    Send a friend request to another user by user_id, or by email. This emails a real person, so ALWAYS confirm the recipient with the user before calling, and pass confirmed=true only once they agree. Provide exactly one of user_id or email. If the email belongs to someone not on Tineo, an invitation to join is sent instead. For privacy, the email path always reports the same neutral result whether or not the address is registered.

    mcp-tool

    {
      "type": "object",
      "required": [
        "confirmed"
      ],
      "properties": {
        "email": {
          "type": "string",
          "description": "Target email address. Provide this OR user_id, not both."
        },
        "message": {
          "type": "string",
          "description": "Optional personal note (max 280 chars)."
        },
        "user_id": {
          "type": "string",
          "description": "Target user id (e.g. from friends_list or a suggestion). Provide this OR email, not both."
        },
        "confirmed": {
          "type": "boolean",
          "description": "Must be true. Set only after the user has confirmed they want to send this request/invite."
        }
      }
    }
    arguments 24 lines
  • friend_request_accept auth-required never probed

    Accept an INCOMING pending friend request by request_id (from friend_requests_pending). This connects you and notifies the sender, so confirm with the user before calling.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request_id"
      ],
      "properties": {
        "request_id": {
          "type": "string",
          "description": "The incoming request id from friend_requests_pending."
        }
      }
    }
    arguments 12 lines
  • trip_sharing_get auth-required never probed

    Read who can see the user's own trips, one trip (trip_id) or every trip they own (paged). For each trip it reports the three sharing mechanisms separately: people with per-trip access (access edit/view/invited/none, where invited means an invitation awaits acceptance and can still be revoked; invitation status pending/accepted/declined/expired, level view/edit, and traveler role), whether a public view link is active, and the trip's own friend-sharing switches (hidden from friends, plans shared with friends; per trip, not account settings). Pass friend_user_id (from friends_list) to also get that friend's exact state on each trip: per-trip access, invitation, and whether they see the trip summary or full plan through friend sharing (planVisibleVia: friend_grant = the user shares plans with this friend on every trip, trip_grant = this trip shares plans with all friends, or both). Use this before trip_sharing_set and to report sharing status. Only the trip owner can read this. Revoked invitations are deleted, so they are not listed. Never show IDs to the user.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {
        "page": {
          "type": "integer",
          "minimum": 1,
          "description": "1-based page when trip_id is omitted. Default 1."
        },
        "trip_id": {
          "type": "string",
          "description": "Optional trip ID. Omit to page through every trip the user owns."
        },
        "page_size": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1,
          "description": "Trips per page (max 50). Default 25."
        },
        "upcoming_only": {
          "type": "boolean",
          "description": "Only trips that have not ended yet. Default false."
        },
        "friend_user_id": {
          "type": "string",
          "description": "Optional friend user_id from friends_list. Adds that friend's access on each trip."
        }
      }
    }
    arguments 29 lines
  • trip_sharing_set auth-required never probed

    Give one friend view or edit access to the user's own trips, change their level, or remove it (access=none), for specific trips (trip_ids) or every trip the user owns (all_trips=true, 25 per page). Idempotent: it checks each trip first and only changes what differs, so re-running it never sends a duplicate invitation. New access is an invitation emailed to the friend, who gets access once they accept. Without confirmed=true nothing is written or emailed: it returns the plan per trip (would_invite, would_update_access, would_revoke, already_correct, already_invited, needs_attention). Show that plan, and call again with the same arguments plus confirmed=true only once the user has explicitly asked for this change, in this conversation or in the instructions of a scheduled task they set up; after they approve the plan, apply it without previewing or asking again. Results per trip: invited, invitation_updated, access_updated, revoked, already_correct, already_invited, needs_attention (with a reason, e.g. not the owner or access via the traveler list) or failed; report them to the user, describing invited trips as pending invitations rather than access already granted. Friend summaries are separate and never changed here: they follow the user's friend settings and each trip's hide-from-friends switch. Only friends can get access; for someone who is not a friend yet, offer friend_request_send first. If their friend request is still pending, the call changes nothing and returns friendRequest and a note: tell the user they haven't accepted yet, and only if the user still wants it, call again with confirmed=true and pending_friend_confirmed=true. Get friend_user_id from friends_list; never guess it from a name. Never show IDs to the user.

    mcp-tool

    {
      "type": "object",
      "required": [
        "friend_user_id",
        "access"
      ],
      "properties": {
        "page": {
          "type": "integer",
          "minimum": 1,
          "description": "With all_trips, the 1-based page of 25 trips. Default 1."
        },
        "access": {
          "enum": [
            "view",
            "edit",
            "none"
          ],
          "type": "string",
          "description": "view = can see the trip; edit = can change it; none = remove their per-trip access."
        },
        "message": {
          "type": "string",
          "description": "Optional note for new invitation emails (max 280 chars)."
        },
        "trip_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 25,
          "description": "Trip IDs to change. Provide this OR all_trips."
        },
        "all_trips": {
          "type": "boolean",
          "description": "Apply to every trip the user owns, 25 per page. Provide this OR trip_ids."
        },
        "confirmed": {
          "type": "boolean",
          "description": "true applies the change. Omit or false to preview without writing or emailing anything."
        },
        "upcoming_only": {
          "type": "boolean",
          "description": "With all_trips, only trips that have not ended yet. Default false."
        },
        "friend_user_id": {
          "type": "string",
          "description": "The friend's user_id from friends_list. For access=none, any user_id listed with access in trip_sharing_get."
        },
        "pending_friend_confirmed": {
          "type": "boolean",
          "description": "Only when the friend request is still pending: true once the user, told they haven't accepted yet, still wants to grant this access."
        }
      }
    }
    arguments 55 lines
  • cities_search reads auth-required 41d ago

    Search the saved city catalog by city name or alias before adding a city to a trip. Matches whole names, name prefixes and word starts (not text inside a word), exact matches first. Pass country to limit results to one country. An empty result does not mean the place does not exist: trip_city_add can add a real town or island that is missing from the catalog when you pass city_name and country. Returns stored city IDs and location details. Search results do not add or select a city.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1,
          "description": "Maximum number of results, from 1 to 50. Defaults to 10."
        },
        "query": {
          "type": "string",
          "maxLength": 100,
          "minLength": 2,
          "description": "City name or alias to search; two to 100 characters after trimming."
        },
        "country": {
          "type": "string",
          "maxLength": 100,
          "description": "Optional country name or ISO code (for example CR or Costa Rica) to limit results to that country. Pass it whenever the user named a country."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • trip_city_add auth-required never probed

    Add a city to the end of a trip's ordered city list. This is idempotent when an equivalent city is already present. Pass city_name plus country: names are matched against the catalog (including aliases), a major city that shares its name with smaller places resolves to the major one, and a real town or island missing from the catalog (for example Bijagua or Santorini) is looked up in that country and added automatically.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "city_id": {
          "type": "string",
          "format": "uuid",
          "description": "Exact city catalog ID. Provide this OR city_name."
        },
        "country": {
          "type": "string",
          "description": "Country name or ISO code (for example CR or Costa Rica). Strongly recommended with city_name: it disambiguates same-named cities and lets Tineo add a place that is missing from the catalog."
        },
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Trip ID."
        },
        "city_name": {
          "type": "string",
          "description": "City, town or island name. Provide this OR city_id; ambiguous names return candidates, so pass country as well."
        }
      }
    }
    arguments 26 lines
  • trip_cities_reorder changes data auth-required never probed

    Replace the trip city order using every current trip_city_id exactly once. The first city drives the automatic cover when an image is available.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id",
        "ordered_trip_city_ids"
      ],
      "properties": {
        "trip_id": {
          "type": "string",
          "format": "uuid",
          "description": "Trip ID."
        },
        "ordered_trip_city_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          },
          "description": "Complete ordered list of current trip_city_id values."
        }
      }
    }
    arguments 22 lines
  • library_list_item_add auth-required never probed

    Add one item to an owned Library List. Generate one new itemId UUID for the item and reuse it on retries, so a retried call never adds a duplicate. Use the listId and expectedVersion from the latest library_list_get. On library_version_mismatch, read the list again and reconsider the change; never retry blindly. Library Lists only, not trip checklists.

    mcp-tool

    {
      "type": "object",
      "required": [
        "listId",
        "expectedVersion",
        "itemId",
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 2000,
          "minLength": 1,
          "description": "The item's text."
        },
        "itemId": {
          "type": "string",
          "format": "uuid",
          "description": "New caller-generated UUID for the item; reuse the same value when retrying."
        },
        "listId": {
          "type": "string",
          "format": "uuid",
          "description": "Library List ID from library_lists_search or library_list_get."
        },
        "expectedVersion": {
          "type": "string",
          "maxLength": 64,
          "minLength": 64,
          "description": "Opaque version from the latest library_list_get or Library List tool result."
        }
      },
      "additionalProperties": false
    }
    arguments 34 lines
  • library_list_items_add auth-required never probed

    Add several items to an owned Library List in one call, in order (for example a whole packing or to-do list). Give each item its own new itemId UUID and reuse the same values on retries, so a retried call never adds duplicates. Up to 100 items per call; split longer lists. Use the listId and expectedVersion from the latest library_list_get. On library_version_mismatch, read the list again and reconsider the change; never retry blindly. Library Lists only, not trip checklists.

    mcp-tool

    {
      "type": "object",
      "required": [
        "listId",
        "expectedVersion",
        "items"
      ],
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "itemId",
              "text"
            ],
            "properties": {
              "text": {
                "type": "string",
                "maxLength": 2000,
                "minLength": 1,
                "description": "The item's text."
              },
              "itemId": {
                "type": "string",
                "format": "uuid",
                "description": "New caller-generated UUID for this item; reuse the same value when retrying."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 100,
          "minItems": 1,
          "description": "The new items in order."
        },
        "listId": {
          "type": "string",
          "format": "uuid",
          "description": "Library List ID from library_lists_search or library_list_get."
        },
        "expectedVersion": {
          "type": "string",
          "maxLength": 64,
          "minLength": 64,
          "description": "Opaque version from the latest library_list_get or Library List tool result."
        }
      },
      "additionalProperties": false
    }
    arguments 49 lines
  • library_list_item_update auth-required never probed

    Change one existing item in an owned Library List (text, completed, color, notes, priority, dueDate), for example to check it off. Changes only the fields named in updateFields. Use the listId and expectedVersion from the latest library_list_get. On library_version_mismatch, read the list again and reconsider the change; never retry blindly. Library Lists only, not trip checklists.

    mcp-tool

    {
      "type": "object",
      "required": [
        "listId",
        "expectedVersion",
        "itemId",
        "updateFields",
        "updates"
      ],
      "properties": {
        "itemId": {
          "type": "string",
          "format": "uuid",
          "description": "Existing item ID from library_list_get."
        },
        "listId": {
          "type": "string",
          "format": "uuid",
          "description": "Library List ID from library_lists_search or library_list_get."
        },
        "updates": {
          "type": "object",
          "properties": {
            "text": {
              "type": "string",
              "maxLength": 2000,
              "minLength": 1
            },
            "color": {
              "type": "string",
              "maxLength": 64
            },
            "notes": {
              "type": "string",
              "maxLength": 4000
            },
            "dueDate": {
              "type": "string",
              "maxLength": 32
            },
            "priority": {
              "type": "string",
              "pattern": "^(low|medium|high)?$"
            },
            "completed": {
              "type": "boolean"
            }
          },
          "description": "New values for the fields named in updateFields.",
          "minProperties": 1,
          "additionalProperties": false
        },
        "updateFields": {
          "type": "array",
          "items": {
            "enum": [
              "text",
              "completed",
              "color",
              "notes",
              "priority",
              "dueDate"
            ],
            "type": "string"
          },
          "maxItems": 6,
          "minItems": 1,
          "description": "The fields the user asked to change. Only these keys of updates are applied. To clear a nullable field, name it here and set it to an empty string, only when the user asks to clear it.",
          "uniqueItems": true
        },
        "expectedVersion": {
          "type": "string",
          "maxLength": 64,
          "minLength": 64,
          "description": "Opaque version from the latest library_list_get or Library List tool result."
        }
      },
      "additionalProperties": false
    }
    arguments 79 lines
  • library_list_items_reorder auth-required never probed

    Reorder the items of an owned Library List. orderedItemIds must contain every current item ID exactly once, in the new order. Show the user the proposed order first; call with confirmed=true only after they confirm. Use the listId and expectedVersion from the latest library_list_get. On library_version_mismatch, read the list again and reconsider the change; never retry blindly. Library Lists only, not trip checklists.

    mcp-tool

    {
      "type": "object",
      "required": [
        "listId",
        "expectedVersion",
        "orderedItemIds",
        "confirmed"
      ],
      "properties": {
        "listId": {
          "type": "string",
          "format": "uuid",
          "description": "Library List ID from library_lists_search or library_list_get."
        },
        "confirmed": {
          "type": "boolean",
          "description": "True only after the user explicitly confirms this exact change. Without it the tool changes nothing and returns the change for review."
        },
        "orderedItemIds": {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uuid"
          },
          "maxItems": 10000,
          "minItems": 1,
          "description": "Every current item ID exactly once, in the new order.",
          "uniqueItems": true
        },
        "expectedVersion": {
          "type": "string",
          "maxLength": 64,
          "minLength": 64,
          "description": "Opaque version from the latest library_list_get or Library List tool result."
        }
      },
      "additionalProperties": false
    }
    arguments 38 lines
  • library_list_clear_completed auth-required never probed

    Permanently delete every completed item from an owned Library List. Tell the user how many items will be removed; call with confirmed=true only after they confirm. Use the listId and expectedVersion from the latest library_list_get. On library_version_mismatch, read the list again and reconsider the change; never retry blindly. Library Lists only, not trip checklists.

    mcp-tool

    {
      "type": "object",
      "required": [
        "listId",
        "expectedVersion",
        "confirmed"
      ],
      "properties": {
        "listId": {
          "type": "string",
          "format": "uuid",
          "description": "Library List ID from library_lists_search or library_list_get."
        },
        "confirmed": {
          "type": "boolean",
          "description": "True only after the user explicitly confirms this exact change. Without it the tool changes nothing and returns the change for review."
        },
        "expectedVersion": {
          "type": "string",
          "maxLength": 64,
          "minLength": 64,
          "description": "Opaque version from the latest library_list_get or Library List tool result."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • library_list_delete auth-required never probed

    Delete an entire owned Library List and all of its items. Name the list to the user first; call with confirmed=true only after they confirm. Use the listId and expectedVersion from the latest library_list_get. On library_version_mismatch, read the list again and reconsider the change; never retry blindly. Library Lists only, not trip checklists.

    mcp-tool

    {
      "type": "object",
      "required": [
        "listId",
        "expectedVersion",
        "confirmed"
      ],
      "properties": {
        "listId": {
          "type": "string",
          "format": "uuid",
          "description": "Library List ID from library_lists_search or library_list_get."
        },
        "confirmed": {
          "type": "boolean",
          "description": "True only after the user explicitly confirms this exact change. Without it the tool changes nothing and returns the change for review."
        },
        "expectedVersion": {
          "type": "string",
          "maxLength": 64,
          "minLength": 64,
          "description": "Opaque version from the latest library_list_get or Library List tool result."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • trips_hub auth-required never probed

    Opens the Tineo trips app: browse current, upcoming, and past trips and open a trip's day-by-day itinerary. The user launches it from the ChatGPT sidebar or a conversation panel.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • settings_update changes data auth-required never probed

    Changes the user's Tineo display and notification settings. Only include settings the user asked to change.

    mcp-tool

    {
      "type": "object",
      "required": [
        "set"
      ],
      "properties": {
        "set": {
          "type": "object",
          "properties": {
            "dateFormat": {
              "enum": [
                "Automatic",
                "Year-Month-Day",
                "Day/Month/Year",
                "Month/Day/Year"
              ],
              "type": "string"
            },
            "timeFormat": {
              "enum": [
                "Automatic",
                "12-hour",
                "24-hour"
              ],
              "type": "string"
            },
            "distanceUnit": {
              "enum": [
                "Automatic",
                "Kilometers",
                "Miles"
              ],
              "type": "string"
            },
            "temperatureUnit": {
              "enum": [
                "Automatic",
                "Celsius",
                "Fahrenheit"
              ],
              "type": "string"
            },
            "flightMonitoring": {
              "type": "boolean"
            },
            "tripReminderEmails": {
              "type": "boolean"
            }
          },
          "minProperties": 1,
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    }
    arguments 55 lines
  • cruise_get auth-required 12d ago

    Read the complete commercial Cruise and linked CruiseDay fields, including soft-deleted items and version. Omit cruiseId to read the trip version before creation. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification.

    mcp-tool

    {
      "type": "object",
      "required": [
        "tripId"
      ],
      "properties": {
        "tripId": {
          "type": "string",
          "format": "uuid"
        },
        "cruiseId": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid"
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
  • cruise_delete auth-required never probed

    Preview and commit cruise delete operations atomically. First call cruise_get for expectedVersion. Omit confirmationToken to preview, show the changes to the user, then repeat the unchanged request with its token only after the user approves. Reuse idempotencyKey for retries. Omitting a field preserves it; null clears nullable fields. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request"
      ],
      "properties": {
        "request": {
          "type": "object",
          "required": [
            "tripId",
            "idempotencyKey",
            "expectedVersion",
            "operations",
            "cruiseId"
          ],
          "properties": {
            "tripId": {
              "type": "string",
              "format": "uuid"
            },
            "cruiseId": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            },
            "operations": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "DeleteCruise"
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              },
              "maxItems": 250,
              "minItems": 1
            },
            "idempotencyKey": {
              "type": "string",
              "format": "uuid"
            },
            "expectedVersion": {
              "type": "string",
              "minLength": 1,
              "description": "Exact version returned by cruise_get, including the trip-only read before creating a cruise."
            }
          },
          "additionalProperties": false
        },
        "confirmationToken": {
          "type": "string",
          "minLength": 1,
          "description": "Omit to preview. After the user reviews and approves the exact preview, repeat the unchanged request with its token to commit. Never manufacture approval."
        }
      },
      "additionalProperties": false
    }
    arguments 69 lines
  • cruise_restore auth-required never probed

    Preview and commit cruise restore operations atomically. First call cruise_get for expectedVersion. Omit confirmationToken to preview, show the changes to the user, then repeat the unchanged request with its token only after the user approves. Reuse idempotencyKey for retries. Omitting a field preserves it; null clears nullable fields. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request"
      ],
      "properties": {
        "request": {
          "type": "object",
          "required": [
            "tripId",
            "idempotencyKey",
            "expectedVersion",
            "operations",
            "cruiseId"
          ],
          "properties": {
            "tripId": {
              "type": "string",
              "format": "uuid"
            },
            "cruiseId": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            },
            "operations": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "RestoreCruise"
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              },
              "maxItems": 250,
              "minItems": 1
            },
            "idempotencyKey": {
              "type": "string",
              "format": "uuid"
            },
            "expectedVersion": {
              "type": "string",
              "minLength": 1,
              "description": "Exact version returned by cruise_get, including the trip-only read before creating a cruise."
            }
          },
          "additionalProperties": false
        },
        "confirmationToken": {
          "type": "string",
          "minLength": 1,
          "description": "Omit to preview. After the user reviews and approves the exact preview, repeat the unchanged request with its token to commit. Never manufacture approval."
        }
      },
      "additionalProperties": false
    }
    arguments 69 lines
  • cruise_day_create auth-required never probed

    Preview and commit cruise day create operations atomically. First call cruise_get for expectedVersion. Omit confirmationToken to preview, show the changes to the user, then repeat the unchanged request with its token only after the user approves. Reuse idempotencyKey for retries. Omitting a field preserves it; null clears nullable fields. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request"
      ],
      "properties": {
        "request": {
          "type": "object",
          "required": [
            "tripId",
            "idempotencyKey",
            "expectedVersion",
            "operations",
            "cruiseId"
          ],
          "properties": {
            "tripId": {
              "type": "string",
              "format": "uuid"
            },
            "cruiseId": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            },
            "operations": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "clientId",
                      "fields"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "AddDay"
                      },
                      "fields": {
                        "type": "object",
                        "required": [],
                        "properties": {
                          "cost": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "date": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date"
                          },
                          "dock": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "notes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "status": {
                            "enum": [
                              "Tentative",
                              "Confirmed",
                              "Cancelled",
                              "Completed",
                              "PendingCompletion"
                            ],
                            "type": "string"
                          },
                          "dayType": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Use Embarkation, SeaDay, Port, ScenicCruising or Disembarkation for these known meanings. Preserve unfamiliar stored or source labels verbatim; do not coerce them to Port or SeaDay."
                          },
                          "website": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "currency": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portCity": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "dayNumber": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "sortOrder": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "timeBasis": {
                            "enum": [
                              "Unknown",
                              "PortLocal",
                              "ShipTime",
                              null
                            ],
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "endDateTime": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "portCountry": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactEmail": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactPhone": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "isTenderPort": {
                            "type": [
                              "boolean",
                              "null"
                            ],
                            "description": "true means tender; false means docked; null means unknown."
                          },
                          "startDateTime": {
                            "type": "string",
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "dayNumberBasis": {
                            "enum": [
                              "LegacyCalendarDate",
                              "OfficialSequence",
                              null
                            ],
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "excursionNotes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portTimezoneId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "arrivalTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "allAboardTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "confirmationNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "departureTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "isOvernightPortCall": {
                            "type": [
                              "boolean",
                              "null"
                            ]
                          }
                        },
                        "additionalProperties": false
                      },
                      "clientId": {
                        "type": "string",
                        "maxLength": 100,
                        "minLength": 1
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              },
              "maxItems": 250,
              "minItems": 1
            },
            "idempotencyKey": {
              "type": "string",
              "format": "uuid"
            },
            "expectedVersion": {
              "type": "string",
              "minLength": 1,
              "description": "Exact version returned by cruise_get, including the trip-only read before creating a cruise."
            }
          },
          "additionalProperties": false
        },
        "confirmationToken": {
          "type": "string",
          "minLength": 1,
          "description": "Omit to preview. After the user reviews and approves the exact preview, repeat the unchanged request with its token to commit. Never manufacture approval."
        }
      },
      "additionalProperties": false
    }
    arguments 270 lines
  • cruise_day_update auth-required never probed

    Preview and commit cruise day update operations atomically. First call cruise_get for expectedVersion. Omit confirmationToken to preview, show the changes to the user, then repeat the unchanged request with its token only after the user approves. Reuse idempotencyKey for retries. Omitting a field preserves it; null clears nullable fields. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request"
      ],
      "properties": {
        "request": {
          "type": "object",
          "required": [
            "tripId",
            "idempotencyKey",
            "expectedVersion",
            "operations",
            "cruiseId"
          ],
          "properties": {
            "tripId": {
              "type": "string",
              "format": "uuid"
            },
            "cruiseId": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            },
            "operations": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "dayId",
                      "fields"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "UpdateDay"
                      },
                      "dayId": {
                        "type": "string",
                        "format": "uuid"
                      },
                      "fields": {
                        "type": "object",
                        "required": [],
                        "properties": {
                          "cost": {
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "date": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "date"
                          },
                          "dock": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "port": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "notes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "title": {
                            "type": "string"
                          },
                          "status": {
                            "enum": [
                              "Tentative",
                              "Confirmed",
                              "Cancelled",
                              "Completed",
                              "PendingCompletion"
                            ],
                            "type": "string"
                          },
                          "dayType": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Use Embarkation, SeaDay, Port, ScenicCruising or Disembarkation for these known meanings. Preserve unfamiliar stored or source labels verbatim; do not coerce them to Port or SeaDay."
                          },
                          "website": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "currency": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portCity": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portName": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "dayNumber": {
                            "type": "integer",
                            "minimum": 1
                          },
                          "sortOrder": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "timeBasis": {
                            "enum": [
                              "Unknown",
                              "PortLocal",
                              "ShipTime",
                              null
                            ],
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "endDateTime": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "portCountry": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactEmail": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "contactPhone": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "isTenderPort": {
                            "type": [
                              "boolean",
                              "null"
                            ],
                            "description": "true means tender; false means docked; null means unknown."
                          },
                          "startDateTime": {
                            "type": "string",
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "dayNumberBasis": {
                            "enum": [
                              "LegacyCalendarDate",
                              "OfficialSequence",
                              null
                            ],
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "excursionNotes": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "portTimezoneId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "arrivalTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "allAboardTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "confirmationNumber": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "departureTimeLocal": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "description": "Independent local date or date and time, YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss, without UTC offsets or conversion. Never invent missing times."
                          },
                          "isOvernightPortCall": {
                            "type": [
                              "boolean",
                              "null"
                            ]
                          }
                        },
                        "additionalProperties": false
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              },
              "maxItems": 250,
              "minItems": 1
            },
            "idempotencyKey": {
              "type": "string",
              "format": "uuid"
            },
            "expectedVersion": {
              "type": "string",
              "minLength": 1,
              "description": "Exact version returned by cruise_get, including the trip-only read before creating a cruise."
            }
          },
          "additionalProperties": false
        },
        "confirmationToken": {
          "type": "string",
          "minLength": 1,
          "description": "Omit to preview. After the user reviews and approves the exact preview, repeat the unchanged request with its token to commit. Never manufacture approval."
        }
      },
      "additionalProperties": false
    }
    arguments 269 lines
  • cruise_day_delete auth-required never probed

    Preview and commit cruise day delete operations atomically. First call cruise_get for expectedVersion. Omit confirmationToken to preview, show the changes to the user, then repeat the unchanged request with its token only after the user approves. Reuse idempotencyKey for retries. Omitting a field preserves it; null clears nullable fields. For commercial cruise reservations and sea/port days use cruise_* tools. Never substitute Activity, CruiseActivity or Sailing for a cruise day. Ordinary shore excursions remain valid Activity/CruiseActivity. If cruise tools are unavailable explain the limitation and ask for clarification.

    mcp-tool

    {
      "type": "object",
      "required": [
        "request"
      ],
      "properties": {
        "request": {
          "type": "object",
          "required": [
            "tripId",
            "idempotencyKey",
            "expectedVersion",
            "operations",
            "cruiseId"
          ],
          "properties": {
            "tripId": {
              "type": "string",
              "format": "uuid"
            },
            "cruiseId": {
              "type": [
                "string",
                "null"
              ],
              "format": "uuid"
            },
            "operations": {
              "type": "array",
              "items": {
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "dayId"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "const": "DeleteDay"
                      },
                      "dayId": {
                        "type": "string",
                        "format": "uuid"
                      }
                    },
                    "additionalProperties": false
                  }
                ]
              },
              "maxItems": 250,
              "minItems": 1
            },
            "idempotencyKey": {
              "type": "string",
              "format": "uuid"
            },
            "expectedVersion": {
              "type": "string",
              "minLength": 1,
              "description": "Exact version returned by cruise_get, including the trip-only read before creating a cruise."
            }
          },
          "additionalProperties": false
        },
        "confirmationToken": {
          "type": "string",
          "minLength": 1,
          "description": "Omit to preview. After the user reviews and approves the exact preview, repeat the unchanged request with its token to commit. Never manufacture approval."
        }
      },
      "additionalProperties": false
    }
    arguments 74 lines
  • generate_packing_list auth-required never probed

    Create a weather- and activity-aware packing checklist for a trip, grouped into sections and saved as a pinned checklist note. Never changes an existing list: if one already exists it is returned unchanged; use packing_list_regenerate to replace it. Requires the trip to have a destination or at least one itinerary item. Provide the trip_id from trips_list. For one list per person, pass people (max 6). Tineo builds the list on its servers with its AI model provider, sending the trip's title, dates, destinations, itinerary items, weather forecast, any context_notes, and each person's age band and notes (never their name).

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "people": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name",
              "age_band"
            ],
            "properties": {
              "name": {
                "type": "string",
                "description": "Person's name or a label such as \"Kid 1\". Used only as the list's title; never sent to the AI model provider."
              },
              "notes": {
                "type": "string",
                "maxLength": 1000,
                "description": "Optional packing-relevant details for this person that the user asked to include. Never include health conditions, medical details or other sensitive personal information."
              },
              "age_band": {
                "enum": [
                  "adult",
                  "teen",
                  "child",
                  "toddler",
                  "infant"
                ],
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "maxItems": 6,
          "description": "Optional. One personalized list per person (max 6), titled with the person's name."
        },
        "trip_id": {
          "type": "string",
          "description": "Tineo trip ID (from trips_list)."
        },
        "context_notes": {
          "type": "string",
          "maxLength": 1000,
          "description": "Optional packing-relevant details the user asked to include, such as planned activities or special gear. Pass only what the user wants reflected in the list. Never include health conditions, medical details or other sensitive personal information."
        }
      },
      "additionalProperties": false
    }
    arguments 52 lines
  • get_trip_weather auth-required 41d ago

    Get trip weather. Daily detail returns a city-grouped forecast bounded to trip dates with confidence tiers; current or hourly detail returns observed or near-term conditions for one trip city. Provide trip_id from trips_list. The Tineo itinerary already shows each day's weather and refreshes it automatically as the trip gets closer.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trip_id"
      ],
      "properties": {
        "hours": {
          "type": "integer",
          "maximum": 48,
          "minimum": 1,
          "description": "Hourly forecast horizon, default 12 hours. Used only when detail is hourly."
        },
        "detail": {
          "enum": [
            "daily",
            "current",
            "hourly"
          ],
          "type": "string",
          "description": "Weather detail. Default daily."
        },
        "city_id": {
          "type": "string",
          "description": "Trip city ID, used for current or hourly weather. If omitted on a multi-city trip, the result lists available city IDs."
        },
        "trip_id": {
          "type": "string",
          "description": "Tineo trip ID (from trips_list)."
        },
        "max_days": {
          "type": "integer",
          "maximum": 35,
          "minimum": 1,
          "description": "Optional forecast horizon cap in days. Default 16."
        }
      }
    }
    arguments 37 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id c13c30187d55571a.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/c13c30187d55571a/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/c13c30187d55571a/badge.svg)](https://brick.blue/agent/c13c30187d55571a?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.