# SlickTrip (remote · mcp.slicktrip.com)

Live flight, hotel and seat prices, cheapest-day calendars, and price-drop alerts.

- Trust score: 92/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `mcp.slicktrip.com`: 92/100 (this document), [markdown](https://verifymcp.io/servers/com-slicktrip-slicktrip/mcp.md), [page](https://verifymcp.io/servers/com-slicktrip-slicktrip/mcp)

## Channel facts

- Endpoint: `https://mcp.slicktrip.com/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.1.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 92/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server supports Client ID Metadata Documents, the current MCP client-registration mechanism.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 76/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 14800 tokens (~336/item across 44 items; 38 tools + 6 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 100/100
  - No destabilizing schema changes in the last 30 days.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 40 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

## Install

### How do I install the SlickTrip MCP server?

SlickTrip is a hosted endpoint at https://mcp.slicktrip.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-slicktrip-slicktrip 'https://mcp.slicktrip.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-slicktrip-slicktrip": {
      "url": "https://mcp.slicktrip.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-slicktrip-slicktrip": {
      "type": "http",
      "url": "https://mcp.slicktrip.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-slicktrip-slicktrip]
url = "https://mcp.slicktrip.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-slicktrip-slicktrip": {
      "type": "remote",
      "url": "https://mcp.slicktrip.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-slicktrip-slicktrip --url 'https://mcp.slicktrip.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-slicktrip-slicktrip:
    url: "https://mcp.slicktrip.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-slicktrip-slicktrip": {
      "Transport": "http",
      "Url": "https://mcp.slicktrip.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-slicktrip-slicktrip -t streamable-http -u 'https://mcp.slicktrip.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-slicktrip-slicktrip": {
      "type": "http",
      "url": "https://mcp.slicktrip.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 92, 0)

- [security] Stability: 0.97 → pass

### 2026-11-03 (score 92, +1)

No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-01 (score 91, +1)

No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-30 (score 90, +1)

No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 89, +1)

No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-26 (score 88, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 86, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “add_flight_bucket_list” rewrote its description, which is the text the model reads
- [security] Tool “add_hotel_bucket_list” rewrote its description, which is the text the model reads
- [security] Tool “handoff_link” rewrote its description, which is the text the model reads
- [security] Tool “search_hotels” rewrote its description, which is the text the model reads
- [security] Tool “share_link” rewrote its description, which is the text the model reads
- [functional] New tool “check_my_watches”
- [functional] New tool “explore_destinations”
- [cosmetic] “list_bucket_lists” added an optional parameter “name”
- [cosmetic] “price_calendar” added an optional parameter “depart_from”
- [cosmetic] “price_calendar” added an optional parameter “depart_to”
- [cosmetic] “search_hotels” added an optional parameter “brand”
- [cosmetic] “search_hotels” added an optional parameter “min_bedrooms”
- [cosmetic] “search_hotels” reworded the description of “min_guest_rating”

## MCP tools (38)

### `search_flights` (~1601 tokens)

Search flights

Call this tool to find flights once the traveler has told you their dates. It handles one-way trips, round trips, two possible dates each way, and up to three airports on each side at once.

Before you call it, you need four things from the traveler: where they are flying from, where they are flying to, the date they want to leave, and, for a round trip, the date they want to come back. If the traveler has not told you any of these, ask them for everything that is missing in one question. Do not pick dates for the traveler. Do not guess whether the trip is one way or a round trip.

A question like "what is the cheapest flight from Newark to Los Angeles" still needs dates. Ask the traveler when they want to go and whether it is one way or a round trip, then call this tool. If the traveler does not have dates yet, offer to set up a bucket list alert with add_flight_bucket_list, which watches the route for them and alerts them when a good fare appears.

Search as soon as you have those four things. After the results, offer ways to narrow the choice: cabin, stops, airlines, times of day.

You can search up to two departure dates and two return dates in one call by joining them with _ (for example 2026-11-20_2026-11-21).

Fill in origin, destination, depart_date and, for a round trip, return_date. You can also pass the traveler's own words in query and leave the fields you do not know empty. SlickTrip fills in only what the traveler's words say. It does not guess the rest.

The answer lists priced itineraries, cheapest first, each with an itinerary_id for track_flight and search_return_flights, and a search_url.

When the traveler wants to be alerted about a route over flexible months, or does not have dates yet, use add_flight_bucket_list.

Input parameters:

- `airlines`: Only these marketing carriers, as IATA codes or names.
- `arrive_after`: HH:MM, local time at that airport.
- `arrive_before`: HH:MM, local time at that airport.
- `cabin` (string): Cabin class.
- `carry_on_bags`: Carry-on bags per traveler (0 or 1). The prices then include the bag fees, shown as price_with_bags next to the fare.
- `checked_bags`: Checked bags per traveler (0 to 2). Bag fees are only priced for flights within the US and Canada; for other flights the answer says the prices do not include them. The prices then include the bag fe…
- `connecting_airports`: Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.
- `depart_after`: HH:MM, local time at that airport.
- `depart_before`: HH:MM, local time at that airport.
- `depart_date`: YYYY-MM-DD. A second date joined with _ searches both as flexible dates (2026-11-03_2026-11-04); at most 2 per direction.
- `destination`: A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airp…
- `display`: compact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does.
- `exclude_airlines`: Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.
- `exclude_connecting_airports`: Leave out itineraries that change planes at these airports (codes or city codes).
- `lap_infants` (integer): Babies under 2 who will sit on an adult's lap (no seat of their own). Not counted in travelers and not in the quoted fare; the answer says how airlines charge them.
- `legs`: Multi-city trip: the legs in order, 2 to 5, each one airport or city code per side and one date. When given, origin / destination / depart_date / return_date are ignored.
- `lower_emissions`: Only itineraries with lower emissions than is typical for the route.
- `max_duration_hours`: Longest itinerary to show, in hours.
- `max_layover_hours`: Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.
- `max_price_usd`: Highest fare to show, USD, as the TOTAL for all travelers together: for a per-person budget, multiply by travelers (2 people at $300 each = 600). Unlike bucket lists, whose price bar is per traveler.
- `max_results` (integer): How many results to return, 1-50.
- `max_stops`: Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number).
- `min_layover_hours`: Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.
- `no_overnight_layovers`: Leave out itineraries with an overnight layover: for 'no overnight at the transit airport'.
- `origin`: A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airp…
- `query`: The traveler's request in their own words, used to fill any field left empty.
- `return_date`: YYYY-MM-DD for a round trip; empty for one way.
- `sort` (string): Order of results.
- `travelers` (integer): Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat an…
- `user_request`: Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs it…

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `counts` (object|null): priced, matching_filters, returned integers
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `filters` (object|null): Filters as the caller gave them (max_stops, airlines, max_price_usd, ...)
- `highlights` (object|null): The spread over every matching fare: cheapest, cheapest_nonstop, fastest, earliest, latest; each with itinerary_id, price, airlines, stops, duration_minutes, departs_at
- `itineraries` (array|null): Items: itinerary_id, price {total_usd, per_traveler_usd}, outbound leg, needs_leg, track_url, optional depart_date + search_key
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): Guidance on trip type or why empty
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `search` (object|null): Route dict: origin, destination, names, destination_image, cabin, travelers, dates, trip_type, legs (multi-city), search_key, served_from, retrieved_at
- `search_url` (string|null): slicktrip.com search page link with attribution
- `searched_as` (string|null): What the search assumed: trip type, travelers, cabin
- `status` (string|null): ok | no_data | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `search_return_flights` (~669 tokens)

Search return flights

Use after search_flights when the traveler wants a specific return, or the next leg of a multi-city trip (once per remaining leg). Takes an outbound itinerary_id; returns complete itineraries with the trip total, needs_leg false once the trip is whole. Filters apply to the leg being chosen. Not needed for an outbound watch.

Input parameters:

- `airlines`: Only these marketing carriers, as IATA codes or names.
- `arrive_after`: HH:MM, local time at that airport.
- `arrive_before`: HH:MM, local time at that airport.
- `carry_on_bags`: Carry-on bags per traveler (0 or 1). The prices then include the bag fees, shown as price_with_bags next to the fare.
- `checked_bags`: Checked bags per traveler (0 to 2). Bag fees are only priced for flights within the US and Canada; for other flights the answer says the prices do not include them. The prices then include the bag fe…
- `connecting_airports`: Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.
- `depart_after`: HH:MM, local time at that airport.
- `depart_before`: HH:MM, local time at that airport.
- `display`: compact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does.
- `exclude_airlines`: Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.
- `exclude_connecting_airports`: Leave out itineraries that change planes at these airports (codes or city codes).
- `itinerary_id` (string, required): An outbound (or partial multi-city) itinerary_id from search_flights or a previous call.
- `lower_emissions`: Only itineraries with lower emissions than is typical for the route.
- `max_duration_hours`: Longest itinerary to show, in hours.
- `max_layover_hours`: Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.
- `max_price_usd`: Highest fare to show, USD, as the TOTAL for all travelers together: for a per-person budget, multiply by travelers (2 people at $300 each = 600). Unlike bucket lists, whose price bar is per traveler.
- `max_results` (integer): How many results to return, 1-50.
- `max_stops`: Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number).
- `min_layover_hours`: Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.
- `no_overnight_layovers`: Leave out itineraries with an overnight layover: for 'no overnight at the transit airport'.
- `sort` (string): Order of results.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `counts` (object|null): priced, matching_filters, returned integers
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `filters` (object|null): Filters as the caller gave them
- `highlights` (object|null): The spread over every matching return: cheapest, cheapest_nonstop, fastest, earliest, latest
- `itineraries` (array|null): Items: itinerary_id, price, return (round trip) or next_leg (multi-city) leg object, needs_leg
- `legs_chosen` (array|null): Multi-city only: leg objects chosen so far
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): Guidance on totals and next step
- `outbound` (object|null): Leg shape: airlines, stops, duration_minutes, segments, layovers
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `search` (object|null): Route dict plus search_key, outbound_itinerary_id; multi-city adds leg_number, legs_total
- `search_url` (string|null): slicktrip.com search page link
- `status` (string|null): ok | no_data | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `track_url` (string|null): Outbound handoff tracking link (round-trip path only)

### `price_calendar` (~1607 tokens)

Price calendar

Use price_calendar only for a traveler who is flexible within a period they named (for example "sometime in March", "any weekend in December", "this winter"), has told you how many nights they want to stay, and wants to know which days are cheapest.

It shows the cheapest fare for each departure day, across about two months starting with the month you give. With max_stops=0 it also shows which days have a nonstop flight, for a traveler who is flexible within a period they named and wants a nonstop.

Every price in the calendar is for one exact trip: a set number of nights away, one cabin, one number of travelers, and one set of stops, airlines and times. If any of these is guessed, every price in the calendar is for a trip the traveler will not take.

Before you call it, you need from the traveler: the month or period, and for a round trip the number of nights they want to stay. Also pass any preferences the traveler gave you: nonstop or not, airlines, times of day, cabin, and number of travelers. If the traveler has not told you the period, or for a round trip the number of nights, ask them in one question. Do not choose a month for the traveler. Do not choose a trip length for the traveler.

Do not call this tool when the traveler has given you dates. Search those dates with search_flights instead. Do not call this tool when the traveler has given no dates at all. Ask them when they want to go instead, and offer a bucket list alert with add_flight_bucket_list, which watches the route for them.

Call it once, or twice at most, per answer. Then show the traveler the two or three cheapest days. The answer tells you how to close: one question that offers flights for the day they pick, or a bucket list alert that watches the whole period.

Input parameters:

- `airlines`: Up to 3 carriers as IATA codes, or one alliance: star alliance, oneworld, skyteam.
- `arrive_after`: HH:MM, local time at that airport.
- `arrive_before`: HH:MM, local time at that airport.
- `cabin` (string): Cabin class.
- `carry_on_bags`: Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.
- `checked_bags`: Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows th…
- `connecting_airports`: Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.
- `depart_after`: HH:MM, local time at that airport.
- `depart_before`: HH:MM, local time at that airport.
- `depart_from`: YYYY-MM-DD, with depart_to: only departures in the traveler's own window ("any day before Christmas" is December 1 to 24; "mid-March through April" is March 15 to April 30). It can run to the end of…
- `depart_to`: YYYY-MM-DD, the last day the traveler could leave.
- `destination` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `exclude_airlines`: Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.
- `exclude_connecting_airports`: Leave out itineraries that change planes at these airports (codes or city codes).
- `lap_infants` (integer): Babies under 2 who will sit on an adult's lap (no seat of their own). Not counted in travelers and not in the quoted fare; the answer says how airlines charge them.
- `lower_emissions`: Only itineraries with lower emissions than is typical for the route.
- `max_duration_hours`: Longest itinerary to show, in hours.
- `max_layover_hours`: Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.
- `max_stops` (integer): Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number).
- `min_layover_hours`: Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.
- `month`: The month the traveler named, as YYYY-MM. Leave it empty only when the traveler asked about the next few weeks. Do not choose a month for the traveler.
- `origin` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `travelers` (integer): Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat an…
- `trip_length_days`: How many nights the traveler wants to stay. Round trips only. Every price in the calendar is for exactly this many nights. If the traveler has not told you how many nights, ask them. Do not pick a nu…
- `trip_type` (string): Round trip or one way.
- `user_request`: Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs it…

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `days` (array|null): Items: depart_date, return_date, price_usd, day_of_week, low_price
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): Next-step guidance or why no data
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `query` (object|null): The calendar query: origin, destination, cabin, travelers, trip_type, stops, month, airlines
- `search_url` (string|null): slicktrip.com flights tab link
- `status` (string|null): ok | no_data | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `summary` (object|null): Partner grid summary stats for the window

### `track_flight` (~267 tokens)

Track a flight's price

Use to start price alerts on an itinerary from a search, after the traveler confirms (asking for alerts is confirming). One way: any itinerary_id from search_flights. Round trip: an outbound itinerary_id from search_flights watches that outbound with its cheapest return; a complete itinerary_id from search_return_flights tracks that exact pairing. Multi-city: a complete itinerary_id. Alerts go to the account's channels on a new low; alert_rule any hears every move; target_price_usd sets a bar.

Input parameters:

- `alert_rule`: When to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead.
- `email`: Send alerts by email. Empty keeps the account's setting.
- `itinerary_id` (string, required): From search_flights (one way) or search_return_flights (a complete round trip or multi-city).
- `target_price_usd`: Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel.
- `text`: Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.

Output parameters:

- `alerts` (string|null): Plain-words description of what alerts fire
- `alerts_when` (string|null): When alerts fire, from the alert preference
- `channels` (object|null): {email: boolean, text: boolean} stored alert channels
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `fid` (string|null): Tracked itinerary id (flight numbers)
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): Note about text alerts needing a verified phone
- `outbound_fid` (string|null): Outbound watch only: the outbound fid
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `price_at_save` (number|null): Price recorded when tracking started
- `route` (object|null): Route dict: origin, destination, cabin, travelers, dates, trip_type (+names on outbound watch)
- `saved_url` (string|null): slicktrip.com saved-flights page link
- `search_key` (string|null): The tracked route's search key
- `status` (string|null): tracking | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `text_not_enabled` (string|null): Text asked but no verified phone on account
- `text_unconfirmed` (string|null): Could not confirm text-alert status
- `watch` (string|null): "outbound" when an outbound-only watch was saved

### `list_tracked_flights` (~82 tokens)

List tracked flights

Use to see the flight price alerts on the signed-in account: route, dates, cabin, alert settings, each itinerary's current price against the price when tracking began, and the search_key and fid that stop_tracking_flight and update_flight_tracking take.

Input parameters:

- `limit` (integer): How many to return, newest first, 1-200.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `count` (number|null): Number of flight trackings on the account
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `manage_url` (string|null): slicktrip.com saved-flights page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): How to stop a tracking
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `status` (string|null): error | sign_in_required (absent on success)
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `trackings` (array|null): Items: route fields, search_key, alert_preference, alert_method, prices, last_alert_sent, itineraries[], manage_url

### `stop_tracking_flight` (~88 tokens)

Stop tracking a flight

Use to stop price alerts for a tracked route (search_key from list_tracked_flights), or one itinerary in it (fid). Cannot be undone; confirm first.

Input parameters:

- `fid`: An itinerary's fid from list_tracked_flights, to stop only that one and keep the route.
- `search_key` (string, required): The route's search_key from list_tracked_flights.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `fid` (string|null): The single itinerary removed, if any
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `manage_url` (string|null): slicktrip.com saved-flights page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `route` (object|null): Route dict parsed from the key with place names
- `scope` (string|null): "one itinerary" or "whole route"
- `search_key` (string|null): The route that was stopped
- `status` (string|null): stopped | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `recent_deals` (~49 tokens)

Recent deals

Use for 'any deals right now?': the freshest price-drop alerts SlickTrip actually sent, by category (flights, hotels, seats, flexible routes). Not a search; no account needed.

Output parameters:

- `alerts` (object|null): Category name to array of recent alert items (route, price, prevPrice, dates, url, ...)
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): These are real alerts sent recently
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `site` (string|null): slicktrip.com homepage link with attribution
- `status` (string|null): error | sign_in_required (absent on success)
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `find_places` (~98 tokens)

Find airport and city codes

Use when unsure of an airport or city code before searching. Matches a place name or code and returns the code to pass as origin or destination, whether it is one airport or all airports in a city, and the airports a city code covers. Not needed for well-known codes like JFK or LHR.

Input parameters:

- `limit` (integer): Most matches to return.
- `query` (string, required): A city or airport name, or a code to check.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): How to use the code, or no-match hint
- `places` (array|null): Items: code, name, kind, country, plus airports[] (city) or city (airport)
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `status` (string|null): error | sign_in_required (absent on success)
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `booking_options` (~120 tokens)

Sellers for an itinerary

Use when the traveler wants to book flights they have chosen: the sellers offering that exact itinerary (airline direct and agencies), each with its price and a link that opens its checkout on the seller's site. Takes a complete itinerary_id: one-way from search_flights, round trip from search_return_flights. Not for an outbound alone (choose a return first) and not a price watch (track_flight).

Input parameters:

- `itinerary_id` (string, required): A complete itinerary_id from search_flights (one way) or search_return_flights (round trip).

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `flight_numbers` (array|null): Strings: flight numbers of every segment
- `itinerary_id` (string|null): The itinerary the sellers are for
- `message` (string|null): Explanation for non-ok statuses or wrapper errors
- `note` (string|null): Links open seller checkout; last a day
- `outbound` (object|null): On needs_return: the outbound leg (airlines, segments, layovers) the answer is about
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `search_key` (string|null): The search key of the itinerary
- `search_url` (string|null): slicktrip.com search page link
- `sellers` (array|null): Items: seller, price_usd, airline_direct, separate_tickets, book_url
- `status` (string|null): ok | book_on_site | needs_return | unavailable | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `trip_total_usd` (number|null): The itinerary's searched total price

### `hotel_booking_options` (~107 tokens)

Sellers for a hotel

Use when the traveler wants to book a hotel from search_hotels: every seller quoting it for those dates (the hotel itself and booking sites), each with the stay total and a link that opens its checkout on the seller's site. Takes the search_key and hotel_id from search_hotels. Not a price watch (track_hotel).

Input parameters:

- `hotel_id` (string, required): The hotel_id from search_hotels.
- `search_key` (string, required): The search_key from search_hotels.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `hotel_id` (string|null): The hotel's property token
- `hotel_url` (string|null): slicktrip.com hotel page link
- `message` (string|null): Explanation for unavailable or wrapper errors
- `name` (string|null): Hotel name
- `note` (string|null): Links open seller checkout; last a day
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `search_key` (string|null): The hotel search key
- `sellers` (array|null): Items: seller, total_usd, per_night_usd, hotel_direct, free_cancellation, book_url
- `status` (string|null): ok | unavailable | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `hotel_details` (~125 tokens)

Hotel details

Use when the traveler asks for the details, more information, photos, rooms or description of one hotel from search_hotels: description, photos, guest rating, amenities, the sellers' stay totals, the rooms, check-in and check-out times. Takes the search_key and hotel_id from search_hotels. Not for prices across dates (hotel_price_calendar). Booking links are hotel_booking_options; call that only when they say book.

Input parameters:

- `hotel_id` (string, required): The hotel_id from search_hotels.
- `search_key` (string, required): The search_key from search_hotels.

Output parameters:

- `address` (string|null): Street address
- `amenities` (array|null): Amenity names
- `check_in_time` (string|null): Check-in time
- `check_out_time` (string|null): Check-out time
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `description` (string|null): Hotel description
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `guest_rating` (number|null): Guest rating out of 5
- `hotel_id` (string|null): Hotel id
- `hotel_url` (string|null): The hotel on slicktrip.com
- `images` (array|null): Photo URLs
- `message` (string|null): Error or sign-in text
- `name` (string|null): Hotel name
- `nights` (number|null): Nights in the stay
- `note` (string|null): Guidance for the assistant
- `per_night_usd` (number|null): Cheapest room per night
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `reviews` (number|null): Review count
- `rooms` (array|null): Rooms: name, seller, total_usd, free_cancellation
- `search_key` (string|null): The hotel search key
- `sellers` (array|null): Stay total by seller, cheapest first: seller, total_usd, per_night_usd, hotel_direct, free_cancellation
- `stars` (number|null): Star class
- `status` (string|null): ok | no_data | error | sign_in_required
- `stay` (object|null): location, check_in, check_out, adults, children
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `total_usd` (number|null): Cheapest room stay total

### `flight_lookup` (~612 tokens)

Flights on a route that day

Call this tool when the traveler wants to know which flights operate on a route on a given date, or when you need a flight number for seat_availability or track_seats. It returns the departure and arrival times, the airline, the aircraft and the stops. It does not return prices. To find prices, use search_flights.

Input parameters:

- `depart_date` (string, required): YYYY-MM-DD.
- `destination` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `display`: compact: one line per option, more options, far fewer tokens; full: every field (what the cards draw). Empty picks for you: compact when the app shows no cards, full when it does.
- `flight_number`: Only this flight, like AA100.
- `origin` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `user_request`: Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs it…

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `flights` (array|null): Scheduled flights: flight_numbers, aircraft, airlines, stops, duration_minutes, segments
- `message` (string|null): Error or sign-in text
- `note` (string|null): Guidance for the assistant
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `search` (object|null): origin, destination, depart_date with names
- `seat_tracker_url` (string|null): The seat tracker on slicktrip.com
- `status` (string|null): ok | no_data | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `shared_trip` (~80 tokens)

Open a shared trip

Use when the traveler pastes a slicktrip.com/share link: the shared itinerary or bucket list and its current price, so they can start their own watch on it. Takes the link or its code. Not for making a link (share_link).

Input parameters:

- `share_url` (string, required): A slicktrip.com/share/<code> link, or just the code.

Output parameters:

- `best_deals` (array|null): Deals found so far
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `current_price_usd` (number|null): Shared watch's current price
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `itineraries` (array|null): fid, price_usd, outbound, return legs
- `kind` (string|null): flight | bucket_list
- `max_price_usd` (number|null): Bucket list price bar
- `max_stops` (number|null): Stops allowed
- `message` (string|null): Error or sign-in text
- `months` (array|null): Bucket list months
- `nights` (array|null): min and max nights
- `note` (string|null): Guidance for the assistant
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `route` (object|null): Route with names and dates
- `search_key` (string|null): The route's search key
- `search_url` (string|null): The search on slicktrip.com
- `share_code` (string|null): The share code
- `status` (string|null): ok | no_data | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `route_airlines` (~328 tokens)

Airlines on a route

Use when the traveler asks who flies a route, or before filtering by airline: the carriers on the route, nonstop ones first, with the codes the airlines filters take. Not a fare search.

Input parameters:

- `destination` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `origin` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…

Output parameters:

- `airlines` (array|null): code, name, nonstop
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `destination` (string|null): Destination code
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `message` (string|null): Error or sign-in text
- `note` (string|null): Guidance for the assistant
- `origin` (string|null): Origin code
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `status` (string|null): ok | no_data | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `explore_destinations` (~653 tokens)

Cheapest places to go

Use when the traveler wants the cheapest place to fly from somewhere, or ideas for where to go, instead of a destination they already chose: "the cheapest flight from Warsaw, anywhere", "where can I go cheaply", "the cheapest city in Brazil". Returns destinations cheapest first with the airline, stops and a search_url: priced on the traveler's dates when you give depart_date (and return_date for a round trip), else each on its own cheapest dates in the coming months.

Input parameters:

- `abroad` (boolean): Only places outside the origin's country, when the traveler says out of the country, abroad or international.
- `cabin` (string): Cabin class.
- `country_or_region`: Only destinations in this country or region, as the traveler said it.
- `depart_date`: YYYY-MM-DD: price every place on this day (the traveler's own). Empty: each on its own cheapest dates.
- `max_price_usd`: Only fares at or under this total, in US dollars.
- `max_results` (integer): How many destinations to list.
- `nonstop` (boolean): Nonstop flights only.
- `origin` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `return_date`: YYYY-MM-DD, with depart_date, for a round trip.
- `travelers` (integer): Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat an…
- `trip_type` (string): Round trip or one way.
- `user_request`: Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs it…

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `destinations` (array|null): city, country, airport, price_usd (total), per_traveler_usd, depart_date, return_date, airline, stops, duration_minutes, search_url
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `message` (string|null): What went wrong, when status is error
- `note` (string|null): How to read and use the list
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `search` (object|null): origin, trip_type, travelers, cabin, nonstop, country_or_region, max_price_usd
- `status` (string|null): ok | no_data | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `total_found` (number|null): Destinations that fit, before max_results

### `search_hotels` (~734 tokens)

Search hotels

Use when the traveler wants a place to stay for known dates. Returns hotels cheapest first with star class, guest rating, per-night and whole-stay price, hotel_ids and a search_key for track_hotel and hotel_price_calendar, and a search_url. Filters match the site: price, stars, guest rating, property kinds, amenities, free cancellation, hotels or vacation rentals, bedrooms (rentals), sort. Not for flexible months (add_hotel_bucket_list).

Input parameters:

- `adults` (integer): Adults. A hotel room prices up to 6 guests in all; vacation rentals up to 16.
- `amenities`: Hotels: free parking, pool, gym, spa, free breakfast, beach access, pet-friendly, child-friendly, free wi-fi, air conditioning, all-inclusive, wheelchair accessible, ev charger, bar, restaurant, room…
- `brand`: Only stays of this brand or chain, matched in the hotel's name. Put the city in location, the brand here.
- `check_in` (string, required): YYYY-MM-DD.
- `check_out` (string, required): YYYY-MM-DD.
- `children_ages`: One age per child, 1-17.
- `free_cancellation` (boolean): Only stays with free cancellation.
- `location` (string, required): A city, neighbourhood, landmark or hotel name.
- `max_price_per_night`: Highest price per night to show, USD.
- `max_results` (integer): How many results to return, 1-50.
- `min_bedrooms`: Vacation rentals with at least this many bedrooms, as the traveler said it ("a 5-bedroom house": 5). Searches vacation rentals; each home says its bedrooms, bathrooms and how many it sleeps.
- `min_guest_rating`: Lowest guest rating out of 5; 3.5, 4 or 4.5 work best. A rating out of 10 (8 and up) is read as half.
- `min_price_per_night`: Lowest price per night to show, USD.
- `min_stars`: Lowest star class to show, 1-5.
- `property_kinds`: Hotels: resort, boutique hotel, hostel, inn, motel, spa hotel, bed and breakfast, apartment hotel, beach hotel, ryokan. Vacation rentals: apartment, house, villa, cabin, cottage, chalet, bungalow, ho…
- `property_type` (string): Hotels, or vacation rentals.
- `sort` (string): Cheapest first, or best rated first.
- `user_request`: Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs it…

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `filters` (object|null): Applied filters: property_type, min_stars, free_cancellation, min_bedrooms, advanced, sort
- `highlights` (object|null): The spread over every priced stay: cheapest, best_rated, cheapest_4_star_plus, most_reviewed; each with hotel_id, name, per_night_usd, total_usd, stars, guest_rating, reviews
- `hotels` (array|null): Items: hotel_id, name, image, type, stars, guest_rating, reviews, per_night_usd, total_usd, amenities, description, hotel_url; vacation rentals add sleeps, bedrooms, bathrooms
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): Prices are whole-stay; how to track
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `search` (object|null): location, check_in, check_out, adults, children_ages, nights, search_key
- `search_url` (string|null): slicktrip.com hotels search link
- `searched_as` (string|null): What the search assumed: guests, hotels or vacation rentals
- `status` (string|null): ok | no_data | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `total_found` (number|null): Total hotels found before max_results cut

### `track_hotel` (~239 tokens)

Track a hotel's price

Use to start price alerts on one hotel from search_hotels for those dates, after the traveler confirms. Alerts go to the account's channels when the price drops.

Input parameters:

- `alert_rule`: When to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead.
- `email`: Send alerts by email. Empty keeps the account's setting.
- `hotel_id` (string, required): A hotel_id from search_hotels.
- `search_key` (string, required): The search_key from search_hotels.
- `search_url`: The search_url from the same search_hotels result, so the alert reopens the same filtered search (stars, price range, amenities). Empty tracks against the plain search.
- `target_price_usd`: Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel.
- `text`: Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.

Output parameters:

- `added_to_existing_stay` (boolean|null): Merged into an existing stay record
- `alerts` (string|null): Plain-words description of alerts
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `current_price_usd` (number|null): already_tracking only: current tracked price
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `hotel_id` (string|null): The tracked hotel's property token
- `hotel_url` (string|null): slicktrip.com hotel page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): Manage on saved-hotels page or already tracked
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `saved_url` (string|null): slicktrip.com saved-hotels page link
- `search_key` (string|null): The hotel search key
- `status` (string|null): tracking | already_tracking | error | sign_in_required
- `stay` (object|null): location, check_in, check_out, adults, children
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `tracking_id` (string|null): The stay's tracking record id

### `list_tracked_hotels` (~73 tokens)

List tracked hotels

Use to see the hotel price alerts on the signed-in account: stay dates, guests, each hotel's current price against the price when tracking began, and the tracking_id and hotel_id the update and stop tools take.

Input parameters:

- `limit` (integer): How many to return, newest first, 1-200.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `count` (number|null): Number of hotel stays tracked
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `manage_url` (string|null): slicktrip.com saved-hotels page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): How to stop a tracking
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `status` (string|null): error | sign_in_required (absent on success)
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `trackings` (array|null): Items: tracking_id, name, check_in, check_out, adults, children, alert settings, prices, hotels[], manage_url

### `stop_tracking_hotel` (~81 tokens)

Stop tracking a hotel

Use to stop price alerts for a tracked stay (tracking_id from list_tracked_hotels), or one hotel in it (hotel_id). Cannot be undone; confirm first.

Input parameters:

- `hotel_id`: Drop only this hotel from the stay and keep the rest.
- `tracking_id` (string, required): The stay's tracking_id from list_tracked_hotels.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `hotel_id` (string|null): The single hotel removed, if any
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): Set when last hotel removal deleted the stay
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `scope` (string|null): "whole stay" or "one hotel"
- `status` (string|null): stopped | error | sign_in_required
- `stay` (object|null): location, hotel_name, name, check_in, check_out, adults
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `tracking_id` (string|null): The stay tracking id stopped

### `seat_availability` (~597 tokens)

Seat availability

Use to see which seats are open right now on one flight (needs a signed-in SlickTrip account; nothing is charged or changed): open seat numbers by row, counts of window, aisle, middle and exit-row seats, and rows with two seats together. Needs the flight number, route and date. Then track_seats to be told when a seat opens. Not for prices.

Input parameters:

- `cabin` (string): Cabin to look at; any = every cabin on the flight.
- `depart_date` (string, required): YYYY-MM-DD.
- `destination` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `flight_number` (string, required): Airline code and number, no space.
- `origin` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `user_request`: Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs it…

Output parameters:

- `available_seats` (array|null): Items: seat, kind, exit_row (up to 80)
- `cabin` (string|null): Cabin tier queried
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `counts` (object|null): seats, available, window, aisle, middle, exit_row, rows_with_2_together
- `exit_rows` (array|null): Row numbers with exit-row seats
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `flight` (object|null): flight_number, origin, destination, departure_time, arrival_time, aircraft, airline
- `message` (string|null): No seat map explanation or wrapper error
- `note` (string|null): Use track_seats to be alerted
- `open_seat_ids` (string|null): Every open seat id in the cabin, space-separated
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `seat_kinds` (object|null): Seat letter to window | aisle | middle
- `seat_map_svg` (object|null): url, view_box, aircraft, seats[] with x/y/w/h/status/kind
- `seat_map_url` (string|null): slicktrip.com seat-tracker setup page link
- `seat_tracker_url` (string|null): slicktrip.com seat-tracker route link
- `status` (string|null): ok | no_data | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `taken_seat_ids` (string|null): Every taken seat id in the cabin, space-separated

### `track_seats` (~483 tokens)

Track seats on a flight

Use to start seat alerts on one flight, after the traveler confirms: named seats, or every seat of a kind (window, aisle, middle, any), optionally only when N seats open together in a row. Alerts go to the account's channels when a watched seat opens.

Input parameters:

- `cabin` (string): Cabin to look at; any = every cabin on the flight.
- `depart_date` (string, required): YYYY-MM-DD.
- `destination` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `email`: Send alerts by email. Empty keeps the account's setting.
- `flight_number` (string, required): Airline code and number, no space.
- `origin` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `seat_type`: Watch every open seat of this kind instead of naming seats.
- `seats`: Seat numbers to watch.
- `seats_together`: Alert only when this many seats are open together in one row, 2-6.
- `text`: Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.

Output parameters:

- `alerts` (string|null): Plain-words description of alerts
- `cabin` (string|array|null): Cabin tracked, or list when several
- `channels` (object|null): Alert channels on the record: email, text (booleans)
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `flight` (object|null): flight_number, origin, destination, departure_time, arrival_time, aircraft, airline
- `merged_with_existing` (boolean|null): Added to an existing seat alert
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): Manage on saved-seats page
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `saved_url` (string|null): slicktrip.com saved-seats page link
- `status` (string|null): tracking | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `tracked` (object|null): seats, seat_type, specific_seats, seats_together, open_now
- `tracking_key` (string|null): Seat tracking key: route;departure_time;flight_number

### `list_tracked_seats` (~68 tokens)

List tracked seats

Use to see the seat alerts on the signed-in account: flight, departure, cabin, the seats watched and which are open now, and the tracking_key the update and stop tools take.

Input parameters:

- `limit` (integer): How many to return, newest first, 1-200.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `count` (number|null): Number of seat alerts on the account
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `manage_url` (string|null): slicktrip.com saved-seats page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): How to stop a seat alert
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `status` (string|null): error | sign_in_required (absent on success)
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `trackings` (array|null): Items: tracking_key, flight_number, origin, destination, departure_time, aircraft, cabins, seats_together, tracked_seats, open_now, alert_method, created_at, manage_url

### `stop_tracking_seats` (~55 tokens)

Stop tracking seats

Use to stop the seat alert on one flight (tracking_key from list_tracked_seats). Cannot be undone; confirm first.

Input parameters:

- `tracking_key` (string, required): The alert's tracking_key from list_tracked_seats.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `message` (string|null): Error or sign-in message from the server wrapper
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `status` (string|null): stopped | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `tracking_key` (string|null): The seat alert key stopped

### `add_flight_bucket_list` (~1367 tokens)

Add a flight bucket list

Call this tool when the traveler wants to be alerted about a route over flexible dates, for example "tell me when New York to Tokyo drops under $700 this winter". SlickTrip keeps searching the months or dates the traveler chose and alerts them when a fare is under their price limit. It returns a bucket_id.

When the traveler asks to be alerted, call it now: that is their go-ahead. Otherwise offer it first.

Use the months, the number of nights and the price limit the traveler gave you, and the defaults for anything they did not say (every month on sale, 3 to 10 nights, 1 traveler); then tell them what you assumed. They can change any of it with update_bucket_list.

Do not use this tool for fixed dates. Search those dates with search_flights, then use track_flight to watch the flight the traveler picks.

Input parameters:

- `airlines`: Only these marketing carriers, as IATA codes or names.
- `arrive_after`: HH:MM, local time at that airport.
- `arrive_before`: HH:MM, local time at that airport.
- `cabin` (string): Cabin class.
- `carry_on_bags`: Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.
- `checked_bags`: Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows th…
- `connecting_airports`: Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.
- `depart_after`: HH:MM, local time at that airport.
- `depart_before`: HH:MM, local time at that airport.
- `depart_days`: Only depart on these weekdays.
- `destination` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `end_date`: Last travel date, YYYY-MM-DD.
- `exclude_airlines`: Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.
- `exclude_connecting_airports`: Leave out itineraries that change planes at these airports (codes or city codes).
- `lower_emissions`: Only itineraries with lower emissions than is typical for the route.
- `max_duration_hours`: Longest itinerary to show, in hours.
- `max_layover_hours`: Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.
- `max_nights` (integer): Longest trip, nights (round trips).
- `max_price_usd`: The price bar, USD per traveler (or the trip total when price_is_total).
- `max_stops` (integer): Most stops allowed: 0 nonstop, 1, or 2.
- `min_layover_hours`: Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.
- `min_nights` (integer): Shortest trip, nights (round trips).
- `months`: Months to watch, as names or YYYY-MM, or give start_date + end_date. Leave both empty to watch every month on sale (the default).
- `name`: A short name for the list in the traveler's words; give one. It is how the list is called in every alert and on the site.
- `origin` (string, required): A 3-letter airport code (JFK), or a city code that searches every airport in the city (SlickTrip's 4-letter codes: NYCA New York, LOND London, ROME Rome, TYOA Tokyo). Up to 3 places joined with _ sea…
- `price_is_total` (boolean): max_price_usd is the total for all travelers.
- `return_days`: Only return on these weekdays.
- `start_date`: First travel date, YYYY-MM-DD. Give with end_date instead of months.
- `travelers` (integer): Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat an…
- `trip_type` (string): Round trip or one way.
- `user_request`: Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs it…

Output parameters:

- `airlines` (array|null): IATA carrier codes
- `alerts` (string|null): Plain-words description of alerts
- `bucket_id` (string|null): The new bucket list record id
- `channels` (object|null): Alert channels on the record: email, text (booleans)
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `display_name` (string|null): Name as the card shows it
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `handoff_url` (string|null): Bucket-list autosave link on slicktrip.com
- `kind` (string|null): Always "flight"
- `max_price_usd` (number|null): Price bar
- `max_stops` (number|null): Stop limit 0-2
- `message` (string|null): Error or sign-in message from the server wrapper
- `months` (array|null): Month names watched
- `name` (string|null): Custom name if given
- `nights` (array|null): [min_nights, max_nights] for round trips
- `note` (string|null): First results timing
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `route` (object|null): origin, destination, names, destination_image, trip_type, cabin, travelers
- `saved_url` (string|null): slicktrip.com saved-buckets page link
- `status` (string|null): watching | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `window` (object|null): {start, end} date window

### `add_hotel_bucket_list` (~458 tokens)

Add a hotel bucket list

Use for flexible-date hotel watches on a place or one named hotel: SlickTrip keeps searching stays of the given length across the chosen months or date window and alerts when a stay clears the per-night bar. Returns a bucket_id. When the traveler asks to be alerted, call it now; otherwise offer it first. Not for fixed dates (search_hotels, then track_hotel).

Input parameters:

- `adults` (integer): Adults. A hotel room prices up to 6 guests in all; vacation rentals up to 16.
- `check_in_days`: Only check in on these weekdays.
- `end_date`: Latest check-in, YYYY-MM-DD.
- `hotel_name`: Pin one exact hotel instead of the whole area.
- `location` (string, required): A city, area or landmark.
- `max_price_per_night`: The price bar, USD per night.
- `min_stars`: Lowest star class to show, 1-5.
- `months`: Months to watch, as names or YYYY-MM, or give start_date + end_date. Leave both empty to watch every month on sale (the default).
- `nights` (integer, required): Nights, 1-30.
- `start_date`: Earliest check-in, YYYY-MM-DD. Give with end_date instead of months.
- `user_request`: Optional, and it works in the traveler's favor. Quote the traveler's latest message about this trip exactly as they wrote it, in their wording, language and spelling, not a summary. SlickTrip runs it…

Output parameters:

- `alerts` (string|null): Plain-words description of alerts
- `bucket_id` (string|null): The new bucket list record id
- `channels` (object|null): Alert channels on the record: email, text (booleans)
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `kind` (string|null): Always "hotel"
- `max_price_per_night_usd` (number|null): Nightly price bar
- `message` (string|null): Error or sign-in message from the server wrapper
- `min_stars` (number|null): Minimum star rating
- `months` (array|null): Month names watched
- `note` (string|null): First results timing
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `saved_url` (string|null): slicktrip.com saved hotel-buckets link
- `status` (string|null): watching | error | sign_in_required
- `stay` (object|null): location, hotel_name, nights, adults
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `window` (object|null): {start, end} date window

### `list_bucket_lists` (~114 tokens)

List bucket lists

Use to see the flight and hotel bucket lists on the signed-in account, each with its settings, the best deals found so far, and the bucket_id that update_bucket_list, remove_bucket_list and share_link take.

Input parameters:

- `limit` (integer): How many to return, newest first, 1-200.
- `name`: Only the bucket lists the traveler asked about: words from a list's name or its places, e.g. 'Firefall' or 'Lisbon'. Leave out to list them all.

Output parameters:

- `bucket_lists` (array|null): Flight items (bucket_id, kind, route fields, months, window, nights, price, best_deals...) and hotel items (location, nights, adults, months, best_deals...)
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `count` (number|null): Number of bucket lists returned
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `manage_url` (string|null): slicktrip.com saved-buckets page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): How to remove; price semantics
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `status` (string|null): error | sign_in_required (absent on success)
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `watch_details` (~191 tokens)

One watch in detail

Use when the traveler asks about ONE of their watches (a tracked flight, a bucket list, a hotel stay or a seat watch): how it is doing, its price history, when it went up or down, the alerts sent. Returns its settings, the price now against the first price seen, the lowest and highest with dates, every recorded price move with its time (oldest first), each day's low and high and the alerts sent (flights), the best dates found (bucket lists), and when the last alert went out. Not for listing every watch (use the list_ tools).

Input parameters:

- `watch` (string, required): The watch: its id from a list tool (search_key, bucket_id, tracking_id or tracking_key), or a name or place in the traveler's words, like 'Japan Road Trip' or 'Lisbon'. If several watches match, the…

Output parameters:

- `alerts_sent` (array|null): Flights: the alerts sent on this route: at, price_usd, previous_usd, kind
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `daily_prices` (array|null): Flights: each day's low_usd, high_usd, close_usd and checks
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `kind` (string|null): flight | bucket_list | hotel_bucket_list | hotel | seat
- `last_alert_sent` (string|null): When the last alert went out
- `matches` (array|null): status choose: the watches that match (watch, kind, label)
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): How to read the prices and lists
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `price` (object|null): now_usd, first_seen_usd/at, change_since_first_usd, lowest_usd/at, highest_usd/at, at_lowest
- `price_moves` (array|null): Every recorded price change, oldest first: at, price_usd, previous_usd, airlines
- `status` (string|null): ok | choose | not_found | no_watches, or error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `title` (string|null): The watch in words: route and dates, or the list's name
- `travelers` (number|null): Travelers on a flight watch when more than one
- `watch` (object|null): Its settings, as the matching list tool returns them (itineraries, best_deals, alert settings...)
- `watch_id` (string|null): The watch's id (search_key, bucket_id, tracking_id or tracking_key)
- `watches` (array|null): status not_found: every watch on the account (watch, kind, label)

### `check_my_watches` (~135 tokens)

Check every watch

Use for a routine check of everything the traveler watches (for example a daily scheduled check, or "anything new on my watches?"): what dropped, what rose, new lows and the alerts SlickTrip sent in the last since_hours, with whether each moved price is lower than usual. One call covers every flight, bucket list, hotel and seat watch, from SlickTrip's records; it never runs a new search. For one watch in full, use watch_details.

Input parameters:

- `since_hours` (integer): How far back to look, in hours: 24 for a daily check (the default), up to 168.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `message` (string|null): Error or sign-in message from the server wrapper
- `moved` (array|null): Watches that moved or sent an alert: watch, kind, title, now_usd, was_usd, change_usd, lowest_seen, alerts_sent, price_check
- `note` (string|null): How to report the check
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `since_hours` (number|null): The window checked, in hours
- `status` (string|null): ok | no_watches, or error | sign_in_required
- `steady` (array|null): Watches with no move: watch, kind, title, now_usd
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `summary` (object|null): Counts: watches, dropped, rose, new_low, alerts_sent, off_sale

### `remove_bucket_list` (~47 tokens)

Remove a bucket list

Use to stop a bucket list (bucket_id from list_bucket_lists). Cannot be undone; confirm first.

Input parameters:

- `bucket_id` (string, required): The list's bucket_id from list_bucket_lists.

Output parameters:

- `bucket_id` (string|null): The removed bucket list id
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `display_name` (string|null): Name as the card shows it
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `kind` (string|null): "flight" or "hotel"
- `manage_url` (string|null): slicktrip.com saved buckets page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `name` (string|null): The bucket's name
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `route` (object|null): Flight only: origin, destination, names, trip_type, cabin, travelers
- `status` (string|null): removed | error | sign_in_required
- `stay` (object|null): Hotel only: location, hotel_name, nights, adults
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `hotel_price_calendar` (~132 tokens)

Hotel price calendar

Use for 'when is this hotel cheapest' (signed-in account): one hotel's nightly price by check-in date across a span of months. Needs a hotel_id from search_hotels. Then search_hotels with the chosen dates to track it.

Input parameters:

- `end_month`: Last month, as a name or YYYY-MM. Empty means next month.
- `hotel_id` (string, required): A hotel_id from search_hotels.
- `hotel_name`: The hotel's name from search_hotels, for the card's title.
- `start_month`: First month, as a name or YYYY-MM. Empty means this month.

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `days` (array|null): Items: check_in, per_night_usd, day_of_week
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `hotel_id` (string|null): The hotel property token
- `hotel_name` (string|null): The hotel name as given by the caller
- `message` (string|null): No-data explanation or wrapper error
- `months` (array|null): [start_month_name, end_month_name]
- `note` (string|null): Per-night semantics and next step
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `status` (string|null): ok | no_data | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `summary` (object|null): priced_days, cheapest_per_night_usd, cheapest_check_in, median_per_night_usd, first_date, last_date

### `handoff_link` (~787 tokens)

Link into SlickTrip

Use when the traveler wants to continue on slicktrip.com, wants to send a flights or hotels search to someone (a bucket_list link saves the list for whoever opens it, so never send one), or the account is not connected: builds a link that lands them fully configured without running a search (a flights search with a track_url that starts tracking on arrival, a bucket list that saves on arrival, a hotel search, or the seat tracker).

Input parameters:

- `adults` (integer): Adults. A hotel room prices up to 6 guests in all; vacation rentals up to 16.
- `airlines`: Only these marketing carriers, as IATA codes or names.
- `cabin` (string): Cabin class; several joined with + to compare them (economy+business).
- `check_in`: YYYY-MM-DD.
- `check_out`: YYYY-MM-DD.
- `children_ages`: One age per child, 1-17.
- `depart_date`: YYYY-MM-DD. A second date joined with _ searches both as flexible dates (2026-11-03_2026-11-04); at most 2 per direction.
- `destination`: A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airp…
- `end_date`: YYYY-MM-DD.
- `flight_number`: seats: the flight to open in the seat tracker.
- `flight_numbers`: flights: the itinerary's flight numbers, connections joined with +; adds a track_url that starts tracking on arrival.
- `hotel_id`: hotels: open this one hotel from search_hotels.
- `kind` (string, required): Which page to land on.
- `legs`: Multi-city trip: the legs in order, 2 to 5, each one airport or city code per side and one date. When given, origin / destination / depart_date / return_date are ignored.
- `location`: hotels: a city, area, landmark or hotel name.
- `max_nights`: Nights, 1-30.
- `max_price_per_night`: Highest price per night to show, USD.
- `max_price_usd`: bucket_list: the price bar, USD.
- `max_stops`: Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number).
- `min_nights`: Nights, 1-30.
- `min_stars`: Lowest star class to show, 1-5.
- `months`: Months to watch, as names or YYYY-MM. Give this OR start_date + end_date.
- `origin`: A 3-letter airport code (JFK) or a city code for all its airports (NYCA, LOND, ROME); up to 3 joined with _ (JFK_EWR). A clear place name works too. When the traveler names a city rather than an airp…
- `return_date`: YYYY-MM-DD.
- `start_date`: YYYY-MM-DD.
- `travelers` (integer): Travelers who need a seat (adults and children). Fares are quoted for all of them together; one booking holds up to 9 (a larger group gets a suggested split). A baby under 2 on a lap is not a seat an…

Output parameters:

- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `kind` (string|null): flights | bucket_list | hotels | seats
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): What the links do on arrival
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `prefill_url` (string|null): bucket_list: form pre-filled, not saved
- `search_key` (string|null): flights/hotels: the search key built
- `setup_url` (string|null): seats with flight_number: seat setup page link
- `status` (string|null): error | sign_in_required (absent on success)
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `track_url` (string|null): flights with flight_numbers: autosave tracking link
- `url` (string|null): The slicktrip.com landing link

### `update_flight_tracking` (~189 tokens)

Update flight alert settings

Use to change how a tracked route alerts: the alert rule, a target price, or the email and text channels. Only the fields given change. Confirm first.

Input parameters:

- `alert_rule`: When to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead.
- `email`: Send alerts by email. Empty keeps the account's setting.
- `search_key` (string, required): The route's search_key from list_tracked_flights.
- `target_price_usd`: Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel.
- `text`: Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.

Output parameters:

- `alerts_when` (string|null): When alerts fire, from the alert preference
- `channels` (object|null): {email: boolean, text: boolean} stored channels
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `manage_url` (string|null): slicktrip.com saved-flights page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): Text alerts need a verified phone
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `search_key` (string|null): The updated route's search key
- `status` (string|null): updated | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `text_not_enabled` (string|null): Text asked but no verified phone
- `text_unconfirmed` (string|null): Could not confirm text-alert status

### `update_hotel_tracking` (~210 tokens)

Update hotel alert settings

Use to change how a tracked stay alerts: the alert rule, a target price, the email and text channels, or its name. Only the fields given change. Confirm first.

Input parameters:

- `alert_rule`: When to alert: lowest = only a new low, any = every price move, none = off. Leave empty for the default, or give target_price_usd instead.
- `email`: Send alerts by email. Empty keeps the account's setting.
- `name`: Rename the stay, as it appears on the saved-hotels page.
- `target_price_usd`: Alert when the price goes under this, USD. Replaces alert_rule. It is the TOTAL: the whole trip for all travelers on a flight, the whole stay on a hotel.
- `text`: Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.
- `tracking_id` (string, required): The stay's tracking_id from list_tracked_hotels.

Output parameters:

- `alerts_when` (string|null): When alerts fire, from the alert preference
- `channels` (object|null): {email: boolean, text: boolean} stored channels
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `manage_url` (string|null): slicktrip.com saved-hotels page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `name` (string|null): New stay name if renamed
- `note` (string|null): Text alerts need a verified phone
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `status` (string|null): updated | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `text_not_enabled` (string|null): Text asked but no verified phone
- `text_unconfirmed` (string|null): Could not confirm text-alert status
- `tracking_id` (string|null): The updated stay tracking id

### `update_seat_tracking` (~157 tokens)

Update seat alert settings

Use to pause or resume a seat alert, or change its seats-together rule or channels. To watch different seats call track_seats again (it adds to the alert). Only the fields given change. Confirm first.

Input parameters:

- `alerts_on`: false pauses the alert, true resumes it.
- `email`: Send alerts by email. Empty keeps the account's setting.
- `seats_together`: Alert only when this many seats are open together, 2-6; 0 clears the rule.
- `text`: Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.
- `tracking_key` (string, required): The alert's tracking_key from list_tracked_seats.

Output parameters:

- `alertMethod` (object|null): {email, text} if channels changed
- `alertPreference` (string|null): "any" (on) or "none" (off) if changed
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `message` (string|null): Error or sign-in message from the server wrapper
- `note` (string|null): Change seats via track_seats
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `seatsTogether` (number|null): Seats-together count if changed
- `status` (string|null): updated | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `tracking_key` (string|null): The updated seat alert key

### `update_bucket_list` (~845 tokens)

Update a bucket list

Use to edit a bucket list: the price bar, months or date window, nights, stops, airlines, preferred weekdays, name, guests, stars, or channels, and a flight list's filters (airlines left out, connecting airports, times, duration, layovers, emissions, bags). Only the fields given change; a filter given replaces the stored one, and clear_filters names the ones to remove. A changed search resets the deals found so far. Confirm first.

Input parameters:

- `adults`: Hotel lists: adults, 1-6.
- `airlines`: Only these marketing carriers, as IATA codes or names.
- `arrive_after`: HH:MM, local time at that airport.
- `arrive_before`: HH:MM, local time at that airport.
- `bucket_id` (string, required): The list's bucket_id from list_bucket_lists.
- `carry_on_bags`: Carry-on bags per traveler (0-1). Prices then include the bag fees: search_flights shows them as price_with_bags next to the fare; a calendar or bucket list prices every day with them.
- `check_in_days`: Hotel lists: only check in on these weekdays.
- `checked_bags`: Checked bags per traveler (0-2), priced only for flights within the US and Canada (elsewhere the answer says the prices do not include them). Prices then include the bag fees: search_flights shows th…
- `clear_filters`: Flight lists: filters to remove.
- `clear_window` (boolean): Remove the date window and watch the months instead.
- `connecting_airports`: Only itineraries that change planes at these airports (codes or city codes), nonstops included: for 'US connections only' name the hubs.
- `depart_after`: HH:MM, local time at that airport.
- `depart_before`: HH:MM, local time at that airport.
- `depart_days`: Flight lists: only depart on these weekdays.
- `email`: Send alerts by email. Empty keeps the account's setting.
- `end_date`: YYYY-MM-DD.
- `exclude_airlines`: Leave out itineraries with any flight sold by these carriers (IATA codes, names or an alliance), by flight number or airline name: for 'not Gol' or 'avoid Air India'.
- `exclude_connecting_airports`: Leave out itineraries that change planes at these airports (codes or city codes).
- `lower_emissions`: Only itineraries with lower emissions than is typical for the route.
- `max_duration_hours`: Longest itinerary to show, in hours.
- `max_layover_hours`: Longest layover allowed at every connection, in hours (half hours allowed): for 'layovers no longer than 5 hours'.
- `max_nights`: Flight lists: longest trip. Hotel lists: the stay length.
- `max_price_usd`: The price bar, USD: per traveler for a flight list (total when price_is_total), per night for a hotel list.
- `max_stops`: Most stops allowed: 0 nonstop, 1, or 2 (2 or more: any number).
- `min_layover_hours`: Shortest layover allowed at every connection, in hours (half hours allowed): for 'at least 2 hours to connect'.
- `min_nights`: Flight lists: shortest trip. Hotel lists: the stay length.
- `min_stars`: Hotel lists: lowest star class, 1-5.
- `months`: Months to watch, as names or YYYY-MM. Give this OR start_date + end_date.
- `name`: A new label for the list.
- `price_is_total`: Flight lists: max_price_usd is the total for all travelers.
- `return_days`: Flight lists: only return on these weekdays.
- `start_date`: YYYY-MM-DD.
- `text`: Send alerts by text message. Needs a verified phone on the SlickTrip account; empty keeps the account's setting.

Output parameters:

- `bucket_id` (string|null): The updated bucket list id
- `changed` (object|null): Fields sent to the update handler, site vocabulary (price, stops, preferredMonths, ...)
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `display_name` (string|null): Name as the card shows it
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `kind` (string|null): "flight" or "hotel"
- `manage_url` (string|null): slicktrip.com saved buckets page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `name` (string|null): The bucket's name (pre-update record)
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `route` (object|null): Flight only: origin, destination, names, trip_type, cabin, travelers
- `status` (string|null): updated | error | sign_in_required
- `stay` (object|null): Hotel only: location, hotel_name, nights, adults
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

### `get_account` (~63 tokens)

The SlickTrip account

Use before offering text alerts, or when the traveler asks about their account: name, member since, which alert channels work (text needs a phone verified on the site), the plan and its free limit, and how many fares, stays, seats and bucket lists are watched.

Output parameters:

- `channels` (object|null): email, text, text_available booleans
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `email` (string|null): Signed-in email
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `free_limit_per_type` (number|null): Free-tier tracking cap; null on premium
- `manage_url` (string|null): slicktrip.com profile page link
- `member_since` (string|null): Account creation date YYYY-MM-DD
- `message` (string|null): Error or sign-in message from the server wrapper
- `name` (string|null): Display name on the account
- `note` (string|null): Text alerts need verified phone, when unverified
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `plan` (string|null): "premium" or "free"
- `status` (string|null): ok | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `watching` (object|null): Counts: flights, hotels, seats, bucket_lists

### `update_account` (~112 tokens)

Update the account

Use to change the display name, or the default alert channels (email, text) for new alerts, optionally applied to everything already watched. Phones are verified on the site, not here. Only the fields given change. Confirm first.

Input parameters:

- `apply_to_all` (boolean): Also set these channels on every alert already watched.
- `email`: Email alerts on new alerts by default.
- `name`: The traveler's display name.
- `text`: Text alerts on new alerts by default; needs a verified phone.

Output parameters:

- `applied` (object|null): Handler's per-type apply-to-all result, when returned
- `applied_to_all` (boolean|null): Channels pushed onto existing trackings
- `channels` (object|null): {email: boolean, text: boolean} stored default channels
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `manage_url` (string|null): slicktrip.com profile page link
- `message` (string|null): Error or sign-in message from the server wrapper
- `name` (string|null): Display name after the update
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `status` (string|null): updated | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country
- `text_not_enabled` (string|null): Text asked but no verified phone

### `share_link` (~151 tokens)

Share a trip

Use when the traveler wants to share a tracked route or a flight bucket list: a public slicktrip.com link, the same one the site's Share button makes, showing the itinerary and its price and nothing about the account. Made once and reused. To share a flights or hotels search that is not watched (a guest, or before a watch is set), use handoff_link with kind flights or hotels instead: it needs no watch and no sign-in. Never a bucket_list handoff link: it saves the list for whoever opens it.

Input parameters:

- `bucket_id`: A flight bucket list's bucket_id from list_bucket_lists.
- `search_key`: A tracked route's search_key from list_tracked_flights.

Output parameters:

- `bucket_id` (string|null): The shared flight bucket id, if any
- `code` (string|null): On an error: a machine-readable kind, e.g. unknown_place
- `field` (string|null): On unknown_place: which argument (origin, destination, ...)
- `message` (string|null): Error or sign-in message from the server wrapper
- `name` (string|null): The bucket list's name when the link shares a list
- `note` (string|null): What the link exposes
- `places_assumed` (array|null): Place names this call resolved on its own, e.g. 'Portland = Portland, OR (PDX)'; tell the traveler
- `route` (object|null): Route dict with names for a tracked route
- `search_key` (string|null): The shared tracked route key, if any
- `share_url` (string|null): Public slicktrip.com/share link
- `status` (string|null): ok | error | sign_in_required
- `suggestions` (array|null): On unknown_place: places to offer the traveler, each with code, name, kind (airport, all airports in the city, nearby airport), city, country

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-slicktrip-slicktrip/mcp#diagnostics

## Score history

- 2026-11-05: 92
- 2026-11-04: 92
- 2026-11-03: 92
- 2026-11-02: 91
- 2026-11-01: 91
- 2026-10-31: 90
- 2026-10-30: 90
- 2026-10-29: 89
- 2026-10-28: 89
- 2026-10-27: 88
- 2026-10-26: 88
- 2026-10-25: 87
- 2026-10-24: 87
- 2026-10-23: 86
- 2026-10-22: 86
- 2026-10-21: 86
- 2026-10-20: 85
- 2026-10-19: 85
- 2026-10-18: 84
- 2026-10-17: 84
- 2026-10-16: 83
- 2026-10-15: 83
- 2026-10-14: 82
- 2026-10-13: 82
- 2026-10-12: 82
- 2026-10-11: 81
- 2026-10-10: 81
- 2026-10-06: 79

## Common questions

### What is the SlickTrip MCP server?

SlickTrip is an MCP server listed in the public MCP registry as com.slicktrip/slicktrip. Live flight, hotel and seat prices, cheapest-day calendars, and price-drop alerts. This page covers its hosted endpoint (https://mcp.slicktrip.com/mcp).

### Is the SlickTrip MCP server safe to use?

SlickTrip scores 92 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the SlickTrip MCP server expose?

SlickTrip exposes 38 tools: search_flights, search_return_flights, price_calendar, track_flight, list_tracked_flights, and 33 more. Their descriptions and schemas cost roughly 13,774 tokens of context every time the server is loaded.

### Does the SlickTrip MCP server require authentication?

Yes. SlickTrip asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the SlickTrip MCP server still maintained?

SlickTrip is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the SlickTrip MCP server?

VerifyMCP ran 14 checks on SlickTrip, covering TLS certificate, Authorization, HTTPS, HSTS header and 10 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://mcp.slicktrip.com/mcp
- Repository: https://github.com/sliktrip/slicktrip-mcp
- Website: https://slicktrip.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-slicktrip-slicktrip/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-slicktrip-slicktrip/mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/com-slicktrip-slicktrip/mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-slicktrip-slicktrip/mcp
