# Dreamfare (remote · api.dreamfare.app)

Travel tools for AI agents: plan and edit real trips, search stays and tours, import travel videos.

- Trust score: 79/100 (medium)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-24

## Components

- remote · `api.dreamfare.app`: 79/100 (this document), [markdown](https://verifymcp.io/servers/app-dreamfare-mcp/api.md), [page](https://verifymcp.io/servers/app-dreamfare-mcp/api)

## Channel facts

- Endpoint: `https://api.dreamfare.app/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.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-09-24.

- **Endpoint Security**: 94/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.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 74/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 10319 tokens (~448/item across 23 items; 21 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 4/100
  - Stability check failed: schema churn in the 21 days we've observed: 25 tool removals, 0 breaking changes, 0 auth/transport breaks, 8 additions.
- **Tool Coverage**: 95/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 84% of tool parameters carry a description.
- **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 23 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 Dreamfare MCP server?

Dreamfare is a hosted endpoint at https://api.dreamfare.app/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 app-dreamfare-mcp 'https://api.dreamfare.app/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "app-dreamfare-mcp": {
      "url": "https://api.dreamfare.app/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "app-dreamfare-mcp": {
      "type": "http",
      "url": "https://api.dreamfare.app/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.app-dreamfare-mcp]
url = "https://api.dreamfare.app/mcp"
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add app-dreamfare-mcp --url 'https://api.dreamfare.app/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  app-dreamfare-mcp:
    url: "https://api.dreamfare.app/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "app-dreamfare-mcp": {
      "Transport": "http",
      "Url": "https://api.dreamfare.app/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add app-dreamfare-mcp -t streamable-http -u 'https://api.dreamfare.app/mcp'
```

### Other

```json
{
  "mcpServers": {
    "app-dreamfare-mcp": {
      "type": "http",
      "url": "https://api.dreamfare.app/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-09-16 (score 79, −4)

- [security regression] Stability: 0.40 → fail
- [security regression] A breaking change shipped without a version bump: still 1.0.0
- [security regression] Tool “add_flight_to_trip” was removed
- [security regression] Tool “add_option_to_trip” was removed
- [security regression] Tool “add_receipt” was removed
- [security regression] Tool “add_saved_places_to_trip” was removed
- [security regression] Tool “add_stops” was removed
- [security regression] Tool “add_train_to_trip” was removed
- [security regression] Tool “compare_options” was removed
- [security regression] Tool “copy_trip” was removed
- [security regression] Tool “display_results” was removed
- [security regression] Tool “display_trip” was removed
- [security regression] Tool “get_details” was removed
- [security regression] Tool “get_flights” was removed
- [security regression] Tool “get_import” was removed
- [security regression] Tool “get_train_details” was removed
- [security regression] Tool “import_file” was removed
- [security regression] Tool “import_text” was removed
- [security regression] Tool “import_video” was removed
- [security regression] Tool “invite_to_trip” was removed
- [security regression] Tool “list_crew” was removed
- [security regression] Tool “list_receipts” was removed
- [security regression] Tool “list_saved_finds” was removed
- [security regression] Tool “list_saved_places” was removed
- [security regression] Tool “list_travel_tips” was removed
- [security regression] Tool “list_trips” was removed
- [security regression] Tool “manage_packing” was removed
- [security regression] Tool “manage_saved_places” was removed
- [security regression] Tool “manage_travel_tips” was removed
- [security regression] Tool “mark_stop_booked” was removed
- [security regression] Tool “post_trip_chat” was removed
- [security regression] Tool “read_trip_chat” was removed
- [security regression] Tool “refine_train_results” was removed
- [security regression] Tool “refresh_stay_prices” was removed
- [security regression] Tool “save_place” was removed
- [security regression] Tool “search_airports” was removed
- [security regression] Tool “share_trip” was removed
- [security regression] Tool “travel_extras” was removed
- [security regression] Tool “vote_stop” was removed
- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “edit_library”, which the server declares destructive
- [security] New tool “import_places”, which the server declares destructive
- [security] Tool “create_trip” rewrote its description, which is the text the model reads
- [security] Tool “delete_trip” rewrote its description, which is the text the model reads
- [security] Tool “edit_trip” rewrote its description, which is the text the model reads
- [security] Tool “explore_trips” rewrote its description, which is the text the model reads
- [security] Tool “get_profile” rewrote its description, which is the text the model reads
- [security] Tool “get_trip” rewrote its description, which is the text the model reads
- [security] Tool “manage_crew” rewrote its description, which is the text the model reads
- [security] Tool “plan_trip” rewrote its description, which is the text the model reads
- [security] Tool “search_activities” rewrote its description, which is the text the model reads
- [security] Tool “search_car_rentals” rewrote its description, which is the text the model reads
- [security] Tool “search_flights” rewrote its description, which is the text the model reads
- [security] Tool “search_places” rewrote its description, which is the text the model reads
- [security] Tool “search_stays” rewrote its description, which is the text the model reads
- [security] Tool “update_profile” rewrote its description, which is the text the model reads
- [security] Tool “search_trains” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 288 → 448
- [functional improvement] Tool coverage: 49% → 84%
- [functional] New tool “add_to_trip”
- [functional] New tool “display_card”
- [functional] New tool “list_library”
- [functional] New tool “research_options”
- [cosmetic] “create_trip” added an optional parameter “copyFromPublicationId”
- [cosmetic] “create_trip” added an optional parameter “copyFromTripId”
- [cosmetic] “get_trip” added an optional parameter “chatBefore”
- [cosmetic] “get_trip” added an optional parameter “chatLimit”
- [cosmetic] “get_trip” added an optional parameter “include”
- [cosmetic] “manage_crew” added an optional parameter “invite”
- [cosmetic] “manage_crew” added an optional parameter “post”
- [cosmetic] “search_flights” added an optional parameter “searchId”
- [cosmetic] “search_trains” added an optional parameter “journeyId”
- [cosmetic] “search_trains” added an optional parameter “searchId”
- [cosmetic] “explore_trips” reworded the description of “sort”
- [cosmetic] “create_trip” reworded the description of “title”
- [cosmetic] “explore_trips” reworded the description of “destination”
- [cosmetic] “explore_trips” reworded the description of “limit”
- [cosmetic] “explore_trips” reworded the description of “offset”
- [cosmetic] “explore_trips” reworded the description of “q”
- [cosmetic] “get_trip” reworded the description of “tripId”
- [cosmetic] “manage_crew” reworded the description of “leave”
- [cosmetic] “manage_crew” reworded the description of “remove”
- [cosmetic] “manage_crew” reworded the description of “revokeInvites”
- [cosmetic] “manage_crew” reworded the description of “setRole”
- [cosmetic] “manage_crew” reworded the description of “tripId”
- [cosmetic] “plan_trip” reworded the description of “currency”
- [cosmetic] “plan_trip” reworded the description of “destinationCountryCode”
- [cosmetic] “plan_trip” reworded the description of “logistics”
- [cosmetic] “plan_trip” reworded the description of “partySize”
- [cosmetic] “plan_trip” reworded the description of “savedPlaceIds”
- [cosmetic] “plan_trip” reworded the description of “title”
- [cosmetic] “search_activities” reworded the description of “fallback”
- [cosmetic] “search_activities” reworded the description of “flags”
- [cosmetic] “search_activities” reworded the description of “sort”
- [cosmetic] “search_activities” reworded the description of “timeOfDay”
- [cosmetic] “search_car_rentals” reworded the description of “driverAge”
- [cosmetic] “search_car_rentals” reworded the description of “dropoffAirport”
- [cosmetic] “search_car_rentals” reworded the description of “dropoffTime”
- [cosmetic] “search_car_rentals” reworded the description of “licenseCountry”
- [cosmetic] “search_car_rentals” reworded the description of “maxTotalAmount”
- [cosmetic] “search_car_rentals” reworded the description of “minSeats”
- [cosmetic] “search_car_rentals” reworded the description of “pickupAirport”
- [cosmetic] “search_car_rentals” reworded the description of “pickupTime”
- [cosmetic] “search_car_rentals” reworded the description of “transmission”
- [cosmetic] “search_flights” reworded the description of “cabin”
- [cosmetic] “search_flights” reworded the description of “departDate”
- [cosmetic] “search_flights” reworded the description of “destination”
- [cosmetic] “search_flights” reworded the description of “origin”
- [cosmetic] “search_flights” reworded the description of “priceBasis”
- [cosmetic] “search_flights” reworded the description of “sort”
- [cosmetic] “search_places” reworded the description of “kind”
- [cosmetic] “search_places” reworded the description of “sort”
- [cosmetic] “search_stays” reworded the description of “constraintMode”
- [cosmetic] “search_stays” reworded the description of “fallback”
- [cosmetic] “search_stays” reworded the description of “sort”
- [cosmetic] “search_stays” reworded the description of “unknownPolicy”
- [cosmetic] “search_trains” reworded the description of “departAfter”
- [cosmetic] “search_trains” reworded the description of “departBefore”
- [cosmetic] “search_trains” reworded the description of “departDate”
- [cosmetic] “search_trains” reworded the description of “destination”
- [cosmetic] “search_trains” reworded the description of “maxChanges”
- [cosmetic] “search_trains” reworded the description of “maxDurationMinutes”
- [cosmetic] “search_trains” reworded the description of “maxTotalAmount”
- [cosmetic] “search_trains” reworded the description of “origin”
- [cosmetic] “search_trains” reworded the description of “passengers”
- [cosmetic] “search_trains” reworded the description of “returnDate”
- [cosmetic] “search_trains” reworded the description of “returnDepartAfter”
- [cosmetic] “search_trains” reworded the description of “returnDepartBefore”
- [cosmetic] “search_trains” reworded the description of “sort”
- [cosmetic] “update_profile” reworded the description of “bio”
- [cosmetic] “update_profile” reworded the description of “displayName”
- [cosmetic] “update_profile” reworded the description of “homeCurrency”
- [cosmetic] “update_profile” reworded the description of “nationality”
- [cosmetic] “update_profile” reworded the description of “visitedCountries”
- [cosmetic] “delete_trip” dropped the optional parameter “presentation”
- [cosmetic] “create_trip” made “title” optional
- [cosmetic] “get_trip” made “tripId” optional
- [cosmetic] “search_flights” made “departDate” optional
- [cosmetic] “search_flights” made “destination” optional
- [cosmetic] “search_flights” made “origin” optional
- [cosmetic] “search_trains” made “departDate” optional
- [cosmetic] “search_trains” made “destination” optional
- [cosmetic] “search_trains” made “origin” optional
- [cosmetic] Tool “get_trip” changed its title: Read a trip → Read a trip, or list trips
- [cosmetic] Tool “manage_crew” changed its title: Change, remove or revoke on a trip's crew → Change a trip's crew or talk to it

### 2026-09-14 (score 83, 0)

We did not load change detail this far back for this component, so this day may have recorded more than is shown.

- [security] Tool “add_flight_to_trip” rewrote its description, which is the text the model reads
- [security] Tool “add_option_to_trip” rewrote its description, which is the text the model reads
- [security] Tool “add_receipt” rewrote its description, which is the text the model reads
- [security] Tool “add_saved_places_to_trip” rewrote its description, which is the text the model reads
- [security] Tool “add_stops” rewrote its description, which is the text the model reads
- [security] Tool “compare_options” rewrote its description, which is the text the model reads
- [security] Tool “copy_trip” rewrote its description, which is the text the model reads
- [security] Tool “create_trip” rewrote its description, which is the text the model reads
- [security] Tool “delete_trip” rewrote its description, which is the text the model reads
- [security] Tool “edit_trip” rewrote its description, which is the text the model reads
- [security] Tool “explore_trips” rewrote its description, which is the text the model reads
- [security] Tool “get_details” rewrote its description, which is the text the model reads
- [security] Tool “get_flights” rewrote its description, which is the text the model reads
- [security] Tool “get_import” rewrote its description, which is the text the model reads
- [security] Tool “get_profile” rewrote its description, which is the text the model reads
- [security] Tool “get_trip” rewrote its description, which is the text the model reads
- [security] Tool “import_file” rewrote its description, which is the text the model reads
- [security] Tool “import_text” rewrote its description, which is the text the model reads
- [security] Tool “import_video” rewrote its description, which is the text the model reads
- [security] Tool “invite_to_trip” rewrote its description, which is the text the model reads
- [security] Tool “list_crew” rewrote its description, which is the text the model reads
- [security] Tool “list_receipts” rewrote its description, which is the text the model reads
- [security] Tool “list_saved_places” rewrote its description, which is the text the model reads
- [security] Tool “list_travel_tips” rewrote its description, which is the text the model reads
- [security] Tool “list_trips” rewrote its description, which is the text the model reads
- [security] Tool “manage_crew” rewrote its description, which is the text the model reads
- [security] Tool “manage_packing” rewrote its description, which is the text the model reads
- [security] Tool “manage_saved_places” rewrote its description, which is the text the model reads
- [security] Tool “manage_travel_tips” rewrote its description, which is the text the model reads
- [security] Tool “mark_stop_booked” rewrote its description, which is the text the model reads
- [security] Tool “plan_trip” rewrote its description, which is the text the model reads
- [functional regression] Tool coverage: 54% → 49%
- [functional regression] Schema quality: 222 → 288
- [functional] Schema quality: good → excellent
- [cosmetic] “add_option_to_trip” added an optional parameter “optionId”
- [cosmetic] “add_option_to_trip” added an optional parameter “resultId”
- [cosmetic] “compare_options” added an optional parameter “optionIds”
- [cosmetic] “compare_options” added an optional parameter “resultId”
- [cosmetic] “get_details” added an optional parameter “optionId”
- [cosmetic] “get_details” added an optional parameter “resultId”
- [cosmetic] “get_flights” added an optional parameter “arriveBy”
- [cosmetic] “get_flights” added an optional parameter “returnArriveBy”
- [cosmetic] “plan_trip” added an optional parameter “durationDays”
- [cosmetic] “plan_trip” added an optional parameter “logistics”
- [cosmetic] “create_trip” reworded the description of “currency”
- [cosmetic] “import_video” reworded the description of “url”
- [cosmetic] “plan_trip” reworded the description of “endDate”
- [cosmetic] “get_trip” dropped the optional parameter “presentation”
- [cosmetic] “add_option_to_trip” made “kind” optional
- [cosmetic] “add_option_to_trip” made “option” optional
- [cosmetic] “compare_options” made “kind” optional
- [cosmetic] “compare_options” made “options” optional
- [cosmetic] “get_details” made “kind” optional
- [cosmetic] Tool “import_video” changed its title: Import places from a video or post → Import travel places and tips from a link

### 2026-09-13 (score 83, +1)

We did not load change detail this far back for this component, so this day may have recorded more than is shown.

### 2026-09-11 (score 82, +1)

We did not load change detail this far back for this component, so this day may have recorded more than is shown.

### 2026-09-08 (score 81, +1)

We did not load change detail this far back for this component, so this day may have recorded more than is shown.

### 2026-09-07 (score 80, +1)

We did not load change detail this far back for this component, so this day may have recorded more than is shown.

### 2026-09-06 (score 79, −1)

We did not load change detail this far back for this component, so this day may have recorded more than is shown.

### 2026-09-05 (score 80, +1)

We did not load change detail this far back for this component, so this day may have recorded more than is shown.

## MCP tools (21)

### `get_trip` (~270 tokens)

Read a trip, or list trips

Read a trip, or list the traveler's trips (own and shared, newest first) when tripId is omitted. A trip comes back with its days and stops (stopIds for edit_trip), the packing list, tips for the destination, the sharing state, and per-stop booking links; bookings made through a stop's bookingUrl earn the traveler commission back. include adds essentials (tracked partner links for an eSIM, rental cars and transfers), crew (members, roles, open invites), receipts (filed booking confirmations) and chat (the crew chat, newest last; chatBefore pages back). Read silently while planning; show the plan with display_card. Returns data plus display.resultId; call display_card to show it.

Input parameters:

- `chatBefore` (string): With include chat: only messages before this ISO timestamp, to page further back
- `chatLimit` (integer): With include chat: how many messages
- `include` (array): Extra sections to fold in: essentials = tracked eSIM, rental-car and transfer links for the destination; crew = owner, collaborators with roles, and open invites; receipts = booking confirmations fil…
- `tripId` (string): Omit to list the traveler's trips instead

### `create_trip` (~420 tokens)

Create a Dreamfare trip

Save a travel plan as a Dreamfare trip the traveler can open, edit with their crew, and book. Pass the full day-by-day plan in one call via days; stops are enriched shortly after creation (photos, map pins, booking links). Use plan_trip instead when the traveler wants Dreamfare's planner to build the days. To copy a trip, pass copyFromPublicationId (a trip from explore_trips; keeps the creator's credit) or copyFromTripId (one of the traveler's own) and no days. Before planning a destination, check list_library for the traveler's saves there and ask whether to include them (add_to_trip source=saved_places keeps their pins and links). Returns the trip and its URL; always give the traveler that URL. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `adults` (integer): Adults travelling; wins over partySize
- `cabinClass`
- `childrenAges` (array): One age per child travelling
- `copyFromPublicationId` (string): Copy a published trip (publicationId from explore_trips) into the traveler's account
- `copyFromTripId` (string): Duplicate one of the traveler's own trips
- `currency` (string): Trip budgeting currency; defaults to the traveler's home currency, then USD
- `days` (array): Day-by-day plan; day 1 falls on startDate when dates are set
- `description` (string)
- `destinationCountryCode` (string): ISO 3166-1 alpha-2
- `destinationName` (string): City or region, e.g. 'Tokyo'
- `endDate`
- `partySize` (integer)
- `presentation` (object)
- `rooms` (integer)
- `startDate` (string)
- `title` (string): Required unless copying

### `add_to_trip` (~889 tokens)

Add to a trip

Put something on a trip as stops. source says what: stops (plain stops you describe in stops), saved_places (library places with their pins, photos and links; by savedPlaceIds, folderName, or importId for everything an import found), search_result (one option from search_stays, search_activities or search_places by resultId + optionId), flight (a fare from search_flights by searchId + offerId), train (a fare from search_trains by searchId + journeyId), receipt (a booking confirmation as text or base64 image/PDF; parsed, filed on the trip, and the matching stop marked booked). Say which day with dayIndex or date; a stay defaults to its check-in date, a flight or train to its departure day. These are plans, not bookings: the traveler books through each stop's bookingUrl. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `checkIn`: (source=search_result) Stays: required
- `checkOut`: (source=search_result) Stays: required
- `contentType` (string): (source=receipt) Type of the base64 bytes in data
- `data` (string): (source=receipt) Raw base64 bytes of the image or PDF, no data URL prefix
- `date`: The day's calendar date (YYYY-MM-DD) instead of dayIndex
- `dayIndex`: 0-based day for the stop (stops carry their own); or give date instead
- `folderName` (string): (source=saved_places) Every place in this library folder
- `guests`: (source=search_result) Stays: travelers sharing the room
- `importId` (string): (source=saved_places) Everything an import found; the import's own day hints place each stop
- `journeyId` (string): (source=train) The journey's id from that search
- `kind` (string): (source=search_result) What the option is, for legacy object callers. stay = a search_stays property. activity = a search_activities product. place = a search_places result's itemDraft. Restored from…
- `offerId` (string): (source=flight) The fare's id from that search
- `option` (object): (source=search_result) The option/offer object (or, for kind 'place', the itemDraft), unchanged
- `optionId` (string): Exact propertyId (stay), productId (activity), or id (place) from that search reply
- `presentation` (object)
- `resultId` (string): The search reply's display.resultId; account-bound and retained for 30 minutes
- `savedPlaceIds` (array): (source=saved_places) Place ids from list_library
- `searchId` (string): (source=flight, train) The searchId returned by search_flights or search_trains
- `source` (string, required): stops = plain stops described in `stops`; saved_places = library places by savedPlaceIds, folderName or importId, with pins, photos and links intact; search_result = one search option by resultId + o…
- `spreadAcrossDays` (boolean): (source=saved_places) Deal the places out across the trip's days in order instead of one day
- `stopId` (string): (source=receipt) Link the confirmation to this stop and mark it booked
- `stops` (array): (source=stops) Each stop names its day with dayIndex or date
- `text` (string): (source=receipt) The confirmation text; omit when sending image/PDF bytes
- `time`: Start time at the destination, HH:MM (a stay's check-in time; saved_places: the first place of each day)
- `tripId` (string, required)

### `edit_trip` (~245 tokens)

Edit a trip

Every change to an existing trip in one batched call. Structural actions: update_trip (details and notes), update_stop / remove_stop / move_stop (by stopId from get_trip), add_day / update_day / remove_day (by 0-based dayIndex). Side actions: packing (the packing list), mark_booked (record a booking the traveler made), vote_stop (crew votes), refresh_stay_prices (re-quote partner-priced stays). Stage actions, at most one per call and run last: finalize locks the trip for sharing and booking, reopen unlocks it, publish puts a finalized trip on a public link and Explore, unpublish takes it off. Omitted fields keep their value; null clears. A finalized trip rejects structural edits, so reopen it in its own call first. remove_stop and remove_day delete data. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `actions` (array, required)
- `presentation` (object)
- `tripId` (string, required)

### `delete_trip` (~85 tokens)

Delete a trip

Delete a trip the traveler owns (also unpublishes it from Explore). Requires echoing the exact trip title as confirmTitle; only call this after the traveler explicitly asks to delete the trip. Returns data plus display.resultId; call display_card to show it.

Input parameters:

- `confirmTitle` (string, required): The trip's exact title, as confirmation
- `tripId` (string, required)

### `plan_trip` (~527 tokens)

Plan a whole trip with Dreamfare's planner

Build a complete day-by-day trip in one call with Dreamfare's own planner: real venues with their opening hours, a stay, activities from partner inventory, the traveler's saved places woven in, pins, photos and booking links, all stitched server-side in about 10 seconds. Prefer it for 'plan me N days in X'. Use create_trip when the traveler dictated the stops themselves. The traveler's saved places at the destination count even when they do not mention them: pass savedPlaceIds or folderName for the ones they want in, or includeSavedPlaces (true = all of them, false = none). Leave all three out and, when they have saves there, the call returns them unbuilt and uncharged so you can ask first. Costs Stardust credits like planning in the app, and get_profile shows the balance. Give the traveler the trip URL. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `brief` (string, required): What the traveler wants, in their words: pace, interests, budget, must-sees, dietary needs
- `currency` (string): ISO currency code for the trip's prices; defaults to the traveler's home currency.
- `destinationCountryCode` (string): ISO alpha-2 country code of the destination.
- `destinationName` (string, required): City or region, e.g. 'Lisbon'
- `durationDays` (integer): Number of itinerary days, even without calendar dates. With one date, derives the other; with both dates, must equal their inclusive span. Default 4 when dates do not determine duration.
- `endDate`
- `folderName` (string): Weave in every place from this saved-places folder (max 20)
- `includeSavedPlaces` (boolean): The traveler's answer about their saved places at the destination: true weaves in all of them (max 20), false leaves them out. Omit it before you've asked.
- `logistics` (object): Already-booked stays and flights; the planner keeps these fixed and plans around them.
- `partySize` (integer): How many people travel; sizes the stay and the costs.
- `presentation` (object)
- `savedPlaceIds` (array): Saved places to weave into the days; ids come from list_library.
- `startDate` (string)
- `title` (string): Trip title; defaults to the destination.

### `search_car_rentals` (~384 tokens)

Search rental cars

Search Trip.com rental cars for an airport pickup and drop-off, with exact local dates and times, the driver's age and the licence's issuing country. Ask for a missing age or licence country; never guess either. Trip.com quotes a 30 to 60 driver-age band for that range, while supplier eligibility uses the real age. Returned prices are rental totals, not daily rates, and deposits sit outside them. Links open a search the traveler completes: they confirm the vehicle, the policies and the final price there. There is no in-app booking, and a failed source never means no cars exist. Read-only, and it costs nothing. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `currency` (string)
- `driverAge` (integer, required): The driver's actual age; ask, never guess
- `dropoffAirport` (string): Drop-off airport IATA code; defaults to the pickup airport
- `dropoffDate` (required)
- `dropoffTime` (string, required): Local drop-off time, HH:MM
- `licenseCountry` (string, required): The driving licence's issuing country, ISO2; ask, never guess
- `maxTotalAmount` (integer): Rental-total ceiling in integer minor units of currency
- `minSeats` (integer): Keep only cars with at least this many seats
- `pickupAirport` (string, required): Pickup airport, exact IATA code. Resolve a city name with search_flights first.
- `pickupDate` (string, required)
- `pickupTime` (string, required): Local pickup time, HH:MM
- `presentation` (object)
- `transmission` (string): automatic = self-shifting gearbox | manual = stick shift

### `search_trains` (~570 tokens)

Search trains

Search real dated train fares for a route, or re-read an earlier search. Results carry departures, arrivals, operators, durations and changes. Prices cover the requested adults, and returnOptions are separate one-way quotes. Pass searchId alone to filter or sort a search without asking the sellers again; pass searchId with journeyId for one fare's stored details. Start a fresh search when the route, date, currency or passenger count changes. A source failure does not mean no trains run. Never substitute a promotional from-price, a seller search page or a generic listing for an individual fare. Attach a fare with add_to_trip source 'train', this searchId and the unchanged journeyId. Read-only, and it costs nothing. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `currency` (string)
- `departAfter` (string): Earliest outbound departure, HH:MM local, including the time it takes to reach the station
- `departBefore` (string): Latest outbound departure, HH:MM local
- `departDate` (string): Outbound travel date, YYYY-MM-DD. Omit only when refining with searchId.
- `destination` (string): Where it ends, as a city or station name. Omit only when refining with searchId.
- `journeyId` (string): With searchId: return the stored details of that one fare, exactly as it was quoted.
- `limit` (integer)
- `maxChanges` (integer): Most changes of train allowed on a journey; 0 means direct
- `maxDurationMinutes` (integer): Longest acceptable journey, in minutes
- `maxTotalAmount` (integer): Whole-party one-way fare ceiling in integer minor units
- `origin` (string): Where the journey starts, as a city or station name. Rail has no universal station codes. Omit only when refining with searchId.
- `passengers` (integer): Adult travelers; adult quotes never cover children
- `presentation` (object)
- `returnDate`: Explicit return travel date. Omit for one way; never repeat the outbound date.
- `returnDepartAfter` (string): Earliest return departure, HH:MM local; needs returnDate
- `returnDepartBefore`: Latest return departure, HH:MM local; needs returnDate
- `searchId` (string): Refine an earlier search instead of asking the sellers again: the searchId it returned. Route, date, currency and passengers stay fixed.
- `sort` (string): cheapest = lowest whole-party fare (default) | fastest = shortest journey | earliest = first departure

### `search_stays` (~942 tokens)

Search places to stay

Search stays for a city and exact dates. Prices include taxes and fees for the quoted accommodation, and guests is the party sharing it, not a room count. Use budget {amount, currency, basis:'per_night'} or maxNightlyAmount in integer minor units (USD 15000 is $150), and sort cheapest when the traveler wants cheaper. Set constraintMode strict for real requirements; prefer allows labeled alternatives. near searches around a landmark, name finds one named property, and keywords matches style words in listing names. For hotels near food, galleries or other interests pass interests: each one is resolved to real places at the destination and matched by verified straight-line distance. Never call that distance a walking time, and claim no match without verified places. Property type is inferred from listing evidence, not certified by the supplier. No matches and a provider failure are different answers; never invent a matching quote. Research a property with research_options using this reply's display.resultId and the property's propertyId, attach it with add_to_trip source 'search_result', and present the returned bookingUrl for booking. Read-only, and it costs nothing. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `budget`: Nightly ceiling for the quoted accommodation, including taxes/fees. Integer MINOR units: USD 15000 = $150. Do not combine with maxNightlyAmount.
- `checkIn` (string, required): Check-in calendar date, YYYY-MM-DD
- `checkOut` (required): Check-out calendar date, YYYY-MM-DD; must be after checkIn
- `constraintMode`: strict = every filter is a requirement, nothing is relaxed | prefer = labeled alternatives are allowed when nothing matches exactly (the default)
- `currency`: ISO pricing currency. A bound in-app trip supplies its currency; MCP and the account assistant default to home currency, then USD.
- `destination` (string, required): City or town, e.g. Kyoto; use a town within a large region
- `fallback`: Legacy alias for constraintMode. none = strict | cheapest = prefer. Do not set both.
- `freeCancellation` (boolean|null): Require supplier-confirmed free cancellation; this requirement is never relaxed
- `guests`: Travelers sharing the quoted accommodation, 1–10; default 2
- `interests`: Traveler interests such as food, art galleries, or quiet parks. Resolves real places and keeps hotels within maxDistanceKm (default 5 km) of a verified place for EACH interest. Do not put interests i…
- `keywords`: Up to five style words matched against listing names; any one matches
- `limit`: Maximum results after filtering and sorting, default 8
- `maxDistanceKm`: Maximum distance from near or the city center, in kilometers
- `maxNightly`: Deprecated: nightly ceiling in MAJOR currency units (150 = $150). Prefer budget or maxNightlyAmount; never combine them.
- `maxNightlyAmount`: Nightly ceiling in integer MINOR units of currency; alternatively use budget
- `minBedrooms`: Minimum bedrooms; never relaxed
- `minGuests`: Minimum verified sleeping capacity; never relaxed
- `minNightly`: Deprecated: nightly floor in MAJOR currency units. Prefer minNightlyAmount; never combine them.
- `minNightlyAmount`: Nightly floor in integer MINOR units of currency
- `minRating`: Guest-score floor on the 0–10 scale
- `minReviews`: Minimum number of guest reviews
- `minStars`: Hotel-star floor, 1–5
- `name`: One specific named hotel; a style such as boutique belongs in keywords
- `near`: Landmark or neighborhood inside destination; strict mode uses a 5 km radius unless maxDistanceKm is supplied
- `presentation` (object)
- `propertyType`: hotel (including family suites), rental, or hostel; inferred from listing evidence
- `sort`: best = provider relevance (default) | cheapest = lowest nightly price | rating = best guest score first | distance = closest to near or the city center first
- `tripId`: Price against this trip: its currency is used when `currency` is omitted.
- `unknownPolicy`: Property type only. exclude = drop listings whose type is unproven | include_labeled = keep them, labeled (the default). Price, capacity, cancellation and distance always need evidence.

### `search_activities` (~800 tokens)

Search activities and tours

Search bookable activities, tours and experiences for a destination. Say what kind with q ('food tour', 'sunset cruise', 'day trip to Sintra') and narrow with category, flags, tags, duration or minRating. Default order is partner relevance: for a budget or a 'cheaper' ask set maxPrice or minPrice and sort cheapest instead of repeating the search, and read priceRange for what was found. Each result carries tags, flags and a short description. Plain activity stops added with add_to_trip source 'stops' are matched to partners automatically, so search here only when the traveler wants options. Research one, or weigh two to five, with research_options using this reply's display.resultId and each productId; attach the pick with add_to_trip source 'search_result'. Read-only, and it costs nothing. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `category` (string): Keep only products whose partner tags match ('Food & Drink', 'Day Trips', 'Museums', 'Walking Tours')
- `currency` (string)
- `date` (string)
- `destination` (string, required)
- `fallback` (string): What to do when nothing matches. cheapest = return the cheapest available, labeled as alternatives (default) | none = keep the filters strict and return nothing
- `flags` (array): Every kept product must carry all of these. free_cancellation = cancellable for a refund | skip_the_line = priority entry | private_tour = your party only | likely_to_sell_out = limited availability
- `limit` (integer)
- `maxDistanceKm` (number): Drop products whose meeting point is farther than this from `near`
- `maxDurationMinutes` (integer): 'Under 3 hours' = 180
- `maxPrice` (number): Per-person price ceiling, MAJOR units of the pricing currency (50 = $50)
- `minDurationMinutes` (integer)
- `minPrice` (number): Per-person price floor, major units
- `minRating` (number): Traveler-rating floor, 0–5
- `minReviews` (integer): 'Well reviewed' / 'popular': ignore products with fewer reviews than this (300 is a solid bar)
- `name` (string): ONE specific product the traveler named ('Devour Lisbon food tour'): found on its own terms and leads the list. A kind of experience is q
- `near` (string): A landmark, neighborhood or hotel inside the destination to search around: products with a known meeting point stay within 5 km (or maxDistanceKm) and report distanceMeters, nearest first
- `offset` (integer): 'Show me more': skip this many products (12 per page) instead of repeating the same search
- `presentation` (object)
- `q` (string): What kind of experience, in the traveler's words: 'food tour', 'sunset cruise', 'kayaking'
- `sort` (string): best = partner relevance (default) | cheapest = lowest per-person price | rating = best reviewed first | duration = shortest first
- `tags` (array): Partner tag words EVERY kept product must carry: 'kid' / 'family', 'wheelchair', 'small group', 'private', 'romantic', 'sunset', 'night', 'luxury', 'self-guided', 'audio guide', 'hop-on hop-off'. For…
- `timeOfDay` (string): Keeps products whose listed start times fall in that window; products with no listed time stay. morning = before noon | afternoon = noon to 17:00 | evening = after 17:00

### `search_places` (~708 tokens)

Discover real places

Find real venues for a destination: restaurants, activities, hotels, landmarks and shopping, with ratings, pins and photos, from partner inventory plus cached Google Places. Use it to ground a plan in real places. For hotels pass checkIn and checkOut, or use search_stays: without them prices cover a sample window a month out and the reply says so in pricedWindow, and a hotel added to a day is re-dated and re-quoted. Narrow with openNow or openAt, priceLevels, minRating, and near with radiusKm. minRating reads each source's own scale: hotels run 0 to 10, Google places and tours 0 to 5. Research a result, or weigh two to five, with research_options using this reply's display.resultId and the result's id; attach the pick with add_to_trip source 'search_result', which keeps its pin, photo and any partner bookability. Read-only, and it costs nothing. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `category` (string): Activities: partner tag to keep ('Food & Drink')
- `checkIn` (string): Hotels: price a concrete window
- `checkOut`
- `currency` (string)
- `freeCancellation` (boolean): Hotels and activities: free cancellation only
- `guests` (integer)
- `includeUnpriced` (boolean): Keep results with no known price (most restaurants and landmarks). Set false for a shortlist that must have a verifiable price.
- `kind` (string, required): activity = tours and experiences | hotel = places to stay | restaurant = places to eat | shopping = shops and markets | landmark = sights and attractions
- `limit` (integer): Maximum results to return, including one or three. A provider page can contain fewer.
- `maxBudget` (number): Price ceiling in MAJOR units of currency: per night for hotels, per person for activities. Unknown prices follow includeUnpriced.
- `maxDurationMinutes` (integer): Activities: length ceiling
- `minBudget` (number): Price floor in the same currency and basis as maxBudget.
- `minRating` (number): Rating floor: Google/tours 0–5, hotels 0–10
- `near` (string): A landmark or neighborhood inside the region to search around
- `offset` (integer): Continue with the previous reply's nextOffset; keep the same query and filters.
- `openAt` (string): Only places open at this local time, 'YYYY-MM-DDTHH:MM' (needs listed hours)
- `openNow` (boolean): Restaurants/shops/landmarks: only places open right now
- `presentation` (object)
- `priceLevels` (array): Google price levels to keep: 0 free, 1 $, 2 $$, 3 $$$, 4 $$$$
- `q` (string): Refinement, e.g. 'ramen', 'sunset cruise'
- `radiusKm` (number): How far around `near` to look (default 3 km)
- `region` (string, required): City or region, e.g. 'Lisbon'
- `sort` (string): best = relevance (default) | cheapest = lowest price first | rating = best rated first

### `search_flights` (~1135 tokens)

Search and compare flights

Search and compare real flights for a route and dates, or re-read an earlier board. origin and destination take an IATA airport or metro code, or a plain city or airport name that is resolved here; when several cities match or none does, the reply is an error carrying candidates, so ask the traveler and search again with a code. Pass searchId to filter, sort or re-read a board without another scrape; a partial board can gain fares when read again. Every fare carries the quote of each site that answered. Never imply a site that did not answer was searched. Returned amounts, minTotalAmount and maxTotalAmount are whole-party integer minor units; maxTotal and minTotal take normal currency units and priceBasis says whether they mean the party or a seat. Lead with the per-seat price and its seats multiplier when the party buys more than one seat, then name the whole-party total once. Clock filters are local to each departure or arrival airport. For a deadline such as home by Sunday evening resolve the exact date and use returnArriveBy; arriveBy is the outbound equivalent. bookingUrl opens the exact itinerary on bookOn, itineraryUrl is that provider's own page, sourceUrl is research evidence only. Attach a fare with add_to_trip source 'flight', this searchId and the fare's offerId. Prices are indicative until the traveler books. Returns data plus display.resultId; call display_card to show it.

Input parameters:

- `airlines`: Only these IATA carrier codes on every segment
- `arriveAfter`: HH:MM local at the outbound destination
- `arriveBefore`: HH:MM local at the outbound destination
- `arriveBy` (string): Absolute outbound arrival deadline YYYY-MM-DDTHH:MM in the arrival airport local calendar
- `cabin` (string): economy = the standard cabin | premium_economy = the extra-legroom cabin | business = lie-flat or wide seat | first = the top cabin
- `cabinBag`: Only fares including a cabin bag
- `checkedBag`: Only fares including a checked bag
- `children`: Children aged 2 to 11
- `currency` (string): ISO pricing currency; defaults to the traveler's home currency
- `departAfter`: HH:MM local at the outbound origin
- `departBefore`: HH:MM local at the outbound origin
- `departDate` (string): Outbound date, YYYY-MM-DD, within 330 days. Omit only when refining with searchId.
- `destination` (string): Where it lands: an IATA airport or metro code, or a city or airport name. Omit only when refining with searchId.
- `excludedAirlines` (array): Exclude these IATA carrier codes from every segment
- `infants`: Infants under 2; at most one per adult
- `limit`: Maximum fares to return, in requested sort order. Use 1 for one flight or 3 for three; default 3. Return fewer only when fewer are available. Maximum 60.
- `maxDurationMinutes` (integer): Maximum elapsed journey duration in EACH direction, including connections
- `maxLayoverMinutes` (integer): Maximum ground time at EVERY connection; nonstop fares remain eligible
- `maxStops`: Maximum connections in EACH direction; 0 means nonstop
- `maxTotal`: Fare ceiling in normal currency units; priceBasis defaults to total
- `maxTotalAmount` (integer): Whole-party fare ceiling in integer MINOR units, regardless of priceBasis
- `minLayoverMinutes` (integer): Minimum ground time at EVERY connection; nonstop fares remain eligible
- `minTotal`: Fare floor in normal currency units; priceBasis defaults to total
- `minTotalAmount` (integer): Whole-party fare floor in integer MINOR units, regardless of priceBasis
- `noSelfTransfer`: Hide separate-ticket itineraries
- `origin` (string): Where the flight starts: an IATA airport or metro code (LHR, LON), or a city or airport name resolved here ('Lisbon' becomes LIS). Omit only when refining with searchId.
- `passengers` (integer): Adults; default 1
- `presentation` (object)
- `priceBasis` (string): Reads minTotal and maxTotal only. total = the whole party's fare (default) | per_person = the budget is per adult or child seat, infant costs still included
- `returnArriveAfter`: HH:MM local at the return destination; requires returnDate
- `returnArriveBefore`: HH:MM local at the return destination; requires returnDate
- `returnArriveBy`: Absolute home arrival deadline YYYY-MM-DDTHH:MM in the home airport local calendar; requires returnDate. Use for home by Sunday evening instead of a clock-only filter.
- `returnDate`: YYYY-MM-DD for the return; omit for one way
- `returnDepartAfter`: HH:MM local at the return origin; requires returnDate
- `returnDepartBefore`: HH:MM local at the return origin; requires returnDate
- `searchId` (string): Refine an earlier board instead of scraping again: the searchId that search returned, retained for about 90 minutes. Route, dates, party, cabin and currency stay as they were; filters and sort narrow…
- `sort`: best = balanced price, time and connections (default) | cheapest = lowest whole-party fare | fastest = shortest elapsed journey | fewest_stops = fewest connections

### `research_options` (~837 tokens)

Research one option, or compare a few

Research options from an earlier search: one in depth, or two to five side by side. Pass resultId (that search reply's display.resultId) with optionIds. One id returns everything known about that option: photos, an editorial summary and what reviewers say, key facts (stars, guest score, capacity, cancellation and instant-book policies, duration, languages, meeting point, inclusions, itinerary, opening hours, price level, phone, website), features, the exact location, and prices per booking site for stays plus tours and tickets at landmarks. Two to five ids return one table: price, rating and reviews, distance, duration, cancellation and features, with the best cell in each row marked and verdict naming the winners. Use it when the traveler asks about one option ('tell me more', 'is it near', 'what's included', 'can I cancel', 'is it open Sunday'), when they are weighing a few ('which of these', 'A or B', 'the cheapest that is still well rated'), and before recommending one. Every option is researched fresh, so the answer is exact rather than a summary of the search screen. Stays: pass checkIn, checkOut and guests so prices cover the traveler's dates. Legacy callers without a resultId can echo search objects in option or options, pass a search_places placeId as id, or a name with destination. Attach what the traveler picks with add_to_trip source 'search_result', reusing the same resultId and optionId. Read-only, and it costs nothing. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `checkIn` (string): Stays: the traveler's check-in date, so prices cover their nights
- `checkOut`: Stays: the traveler's check-out date
- `criteria` (array): Comparison only: compare these rows, in this order, with no duplicates. Stays take nightly (per-night price), total (whole-stay price), stars, rating, reviews, distance, sleeps, cancellation, feature…
- `currency` (string): ISO pricing currency; defaults to the traveler's home currency
- `date`: Activities: the day the traveler has in mind
- `destination` (string): City the options are in; anchors name lookups and distances
- `guests` (integer): Stays: travelers sharing the room
- `id` (string): A search_places result's placeId (kind 'place')
- `kind` (string): What the options are, for legacy object callers. stay = a property from search_stays | activity = a product from search_activities | place = a restaurant, shop, landmark or Google-listed hotel from s…
- `name` (string): Look up by name when there is no object: 'Time Out Market'
- `near` (string): The landmark or neighborhood the search was anchored on, so distances read 'from Alfama'
- `option` (object): Legacy single-option research: the search result echoed unchanged
- `optionIds` (array): Exact IDs from that search reply (propertyId for a stay, productId for an activity, id for a place), in the order to research. One id returns the full detail; two to five return a comparison in this…
- `options` (array): Legacy comparison: two to five search results of one kind, echoed unchanged
- `presentation` (object)
- `resultId` (string): The search reply's display.resultId; account-bound and retained for 30 minutes

### `import_places` (~380 tokens)

Import places and tips from a link, text or file

Pull the real places and travel tips out of something the traveler shares and save them to their library. source url reads a TikTok, Instagram, YouTube, Facebook, Reddit, blog or other travel page on the Dreamfare server, subject to the source being reachable. source text reads words they pasted. source file reads a screenshot or travel PDF. Runs in the background: poll list_library with the returned importId until status is done or failed, about 20 to 90 seconds. Every place and tip is saved with its source, so list_library finds them later. Once done, add them to a trip with add_to_trip source=saved_places (importId keeps the pins, photos and tips) or plan days around them with plan_trip. General travel tips are advice, not stops. Costs Stardust credits exactly like importing in the app, and a failed import refunds them. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `contentType` (string): (source=file) The bytes' media type. image/jpeg, image/png, image/webp and image/heic are screenshots or photos; application/pdf is a travel document.
- `data` (string): (source=file) Raw base64 bytes, no data URL prefix.
- `presentation` (object)
- `source` (string, required): Where the places come from. url: a link the traveler shared. text: words they pasted. file: a screenshot or PDF they supplied.
- `text` (string): (source=text) The pasted text, verbatim. At least 40 characters.
- `url` (string): (source=url) The video, post or blog address, exactly as shared.

### `get_profile` (~87 tokens)

Read the traveler's account

The traveler's Dreamfare account snapshot: profile, membership tier, Stardust credits, and wallet balance (commission earned through tracked bookings). Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `presentation` (object)

### `update_profile` (~188 tokens)

Update the traveler's profile

Update profile fields: display name, bio, home currency, nationality, and the visited-countries list. Omitted fields keep their value. visitedCountries replaces the whole list, so read get_profile first when adding to it. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `bio`: Short profile blurb; null clears it.
- `displayName` (string): The name other travelers see.
- `homeCurrency` (string): ISO currency code new trips and prices default to.
- `nationality`: ISO alpha-2 country code of the passport; null clears it.
- `presentation` (object)
- `visitedCountries` (array): ISO alpha-2 codes of every country visited; replaces the whole list.

### `list_library` (~443 tokens)

Read the traveler's saved library

Read what the traveler has saved: their places with folders, their travel-tips notebook, and the results of an import. Pass importId to follow an import started by import_places: while status is neither done nor failed, call again after about 15 seconds. Pass query or area to search places and tips together, with the source each one came from. Pass folderName, type or sort to browse the places shelf itself, and offset with the returned nextOffset to continue. Tips are advice, never itinerary stops. Put library places on a trip with add_to_trip source=saved_places (by savedPlaceIds, folderName or importId), or plan days around them with plan_trip. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `area` (string): Destination to scope the answer to, such as 'Lisbon'. General tips come with it.
- `folderName` (string): Places only: one folder's places; 'unsorted' means places in no folder. Keeps the answer on the places shelf even with a query.
- `importId` (string): Follow this import: its status and every place and tip it extracted.
- `kind` (string): What to read. all: saved places and tips together. places: saved places only. tips: the tips notebook only.
- `limit` (integer): How many entries to return. Searches return at most 8; the shelf defaults to 40.
- `offset` (integer): Skip this many entries. Pass the nextOffset from the previous call.
- `presentation` (object)
- `query` (string): Words to look for in saved places and tips, such as 'airport train'.
- `sort` (string): Places only. newest: most recently saved first. oldest: earliest saved first. name: alphabetical by title.
- `type` (string): Places only. all: everything saved. places: individual places. areas: whole-city or region entries, which are destinations rather than stops.

### `edit_library` (~357 tokens)

Save and tidy the traveler's library

Change what the traveler has saved, in one call: save a place, delete places, move places into a folder or out to unsorted, rename a place, create, rename or delete folders, and add or remove travel tips. Save a place when the traveler wants it remembered without putting it on a trip yet; put library places on a trip with add_to_trip source=saved_places. Ids and folder names come from list_library. Deleting a folder keeps its places as unsorted. Returns the places shelf, plus savedPlace and tips for the parts that ran. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `addTips` (array): Tips to write into the notebook. Leave areaName out for advice that travels everywhere.
- `createFolders` (array): Folder names to create; an existing name is left alone.
- `deleteFolders` (array): Delete folders by name; their places survive as unsorted.
- `deletePlaces` (array): Saved place ids to delete from the library.
- `move` (array): Move places: folderName null means unsorted, and a new name creates the folder.
- `presentation` (object)
- `removeTips` (array): Tip ids to delete (list_library with kind tips).
- `rename` (array): Give saved places new titles.
- `renameFolders` (array): Rename folders by name.
- `savePlace` (object): Remember one place. Saving a title already in the library is a no-op.
- `showFolder` (string): Which folder the returned shelf shows.

### `manage_crew` (~323 tokens)

Change a trip's crew or talk to it

Everything that changes who is on a trip, plus the crew chat, in one call: invite someone, change a member's role, remove a member, leave the trip, revoke an open invite, and post a message. Read the crew and the chat first with get_trip include crew and include chat: collaboratorId, invite ids and member userIds all come from there. Anyone who can edit the trip may invite and post, only the owner may set roles, remove members or revoke invites, and any member other than the owner may leave. An emailed invite leaves Dreamfare. Returns the crew, plus invite and posted for the parts that ran. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `invite` (object): Create an invite link. With no email, the returned link is what to share.
- `leave` (boolean): Remove yourself from the trip. The owner cannot leave; delete the trip instead.
- `post` (object): Say something to the crew in the trip's chat.
- `presentation` (object)
- `remove` (array): Owner only: collaboratorIds to take off the trip.
- `revokeInvites` (array): Owner only: invite ids to kill, so the links stop working.
- `setRole` (array): Owner only: change what these members may do.
- `tripId` (string, required): The trip whose crew is changing.

### `explore_trips` (~211 tokens)

Browse published trips

Trips other travelers published on Dreamfare, by destination and free text: real itineraries with stops, photos and creator credit. Give the traveler their own editable copy with create_trip copyFromPublicationId. Use it for inspiration and for how locals actually route a city, not for live prices. Continue the same search with nextOffset. Returns data plus display.resultId; call display_card to show it. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `destination` (string): City, region or country the trip goes to.
- `limit` (integer): How many trips to return.
- `offset` (integer): Skip this many trips. Pass the nextOffset from the previous call.
- `presentation` (object)
- `q` (string): Words in the title or summary.
- `sort` (string): popular: most liked, saved and copied first. newest: most recently published first.

### `display_card` (~201 tokens)

Display a card

Show a Dreamfare card to the traveler: a trip's itinerary (tripId) or the details of an earlier result (resultId, from that tool's display.resultId). Call it once, after the requested work is done or when the traveler asks to see something; never after every intermediate call. It reads a saved snapshot retained for 30 minutes and never repeats a search, edit, import, message or charge. If a snapshot has expired, refresh it with a read-only lookup rather than repeating a write. This is the only tool that opens a visual; every other tool returns data. presentation (optional) shapes what is shown without changing the action: compact or full layout, and only the limit, ids or sections this tool advertises.

Input parameters:

- `presentation` (object)
- `resultId` (string): Show an earlier result by its display.resultId; never invent this id
- `tripId` (string): Show this trip's itinerary

## Diagnostics

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

## Score history

- 2026-09-24: 79
- 2026-09-23: 79
- 2026-09-22: 79
- 2026-09-21: 79
- 2026-09-20: 79
- 2026-09-19: 79
- 2026-09-18: 79
- 2026-09-17: 79
- 2026-09-16: 79
- 2026-09-15: 83
- 2026-09-14: 83
- 2026-09-13: 83
- 2026-09-12: 82
- 2026-09-11: 82
- 2026-09-10: 81
- 2026-09-09: 81
- 2026-09-08: 81
- 2026-09-07: 80
- 2026-09-06: 79
- 2026-09-05: 80
- 2026-09-04: 79
- 2026-09-03: 79

## Common questions

### What is the Dreamfare MCP server?

Dreamfare is an MCP server listed in the public MCP registry as app.dreamfare/mcp. Travel tools for AI agents: plan and edit real trips, search stays and tours, import travel videos. This page covers its hosted endpoint (https://api.dreamfare.app/mcp).

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

Dreamfare scores 79 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 Dreamfare MCP server expose?

Dreamfare exposes 21 tools: get_trip, create_trip, add_to_trip, edit_trip, delete_trip, and 16 more. Their descriptions and schemas cost roughly 10,002 tokens of context every time the server is loaded.

### Does the Dreamfare MCP server require authentication?

Yes. Dreamfare 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 Dreamfare MCP server still maintained?

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

## Links

- Remote endpoint: https://api.dreamfare.app/mcp
- Website: https://dreamfare.app/mcp
- Changelog RSS feed: https://verifymcp.io/servers/app-dreamfare-mcp/api.xml
- Changelog JSON feed: https://verifymcp.io/servers/app-dreamfare-mcp/api.json
- HTML version of this page: https://verifymcp.io/servers/app-dreamfare-mcp/api
