---
name: mystai
description: Find hotels that fit what a guest is looking for (a travel feeling such as retreat, wellness, romance or city energy, plus wishes, companions and landscape) and send the hotel an inquiry for the guest. Use when a user looks for a hotel by mood or needs, or wants to ask a hotel about a stay. mystai never books.
---

# mystai

mystai matches hotels to what a guest is looking for and passes the guest's Anfrage (inquiry) on to the hotel. It never books, never quotes prices and never takes payment.

Use the remote MCP server at `https://mystai.de/mcp` (Streamable HTTP, no sign-in). Every tool takes an optional `brand`: `mystai` (default, the whole catalogue) or `soul` (Soul Hotels).

All content is German. Translate it for the user.

## How to help a guest

1. Call `get_vocabulary` to learn the intents, traits, wishes, companions and landscapes the brand offers right now.
2. Map the user's own words onto those values and call `match_profile`. Put anything that does not fit into `freeText`. To browse without a profile, use `search_hotels`.
3. Show the best hotels with their coverage ("n von m Bedürfnissen") and their mystai URL. Use `get_hotel` for the details of one hotel.
4. Before an inquiry, agree on the summary with the user: `match_profile` returns a draft in `summary`. Collect name, e-mail, number of adults, the ages of children and the travel period (dates, or open with a note such as "a weekend in November").
5. Only with the user's explicit consent, call `create_inquiry`. Set `entry` to `profile` when the hotel came from `match_profile`.
6. Tell the user to confirm the inquiry with the link in the e-mail mystai has just sent. Nothing reaches the hotel before that. The hotel answers the guest directly by e-mail.

## Guardrails

- An inquiry is not a booking. Never promise availability, a room or a price.
- Send nothing without the user's consent. Pass only the summary the user approved, never raw profile answers or personality traits.
- Contact data reaches mystai only through `create_inquiry`, and the hotel only after the guest has confirmed by e-mail.
- A value the brand hides right now gives a notice or no hits, not an error. Only unknown values are rejected.

## Tool reference

- `get_vocabulary`: the options for `match_profile` (ids with German labels) and the living need and style tags with their number of hotels.
- `match_profile`: `intent`, `traits`, `wishes`, `companion`, `landscape`, `lifePhase`, `budget`, `freeText`, optional `priceBand`. `landscape` (mountains, sea, lake, city, countryside, or `egal` for no preference) only raises the coverage of hotels in that landscape; it never drops a hotel. Returns ranked hotels with coverage in percent, "n of m needs", reasons, notices and an inquiry summary. Below two known needs there is no percentage, only a notice.
- `search_hotels`: free text, `region`, `needTags`, `styleTags`, `priceBand`. Recommended hotels come first. Each hotel names the `intents` it fits: it carries every need tag of that intent.
- `get_hotel`: one hotel by `slug`; `hotel` is `null` when the brand does not show it.
- `create_inquiry`: `hotelSlug`, `entry`, `name`, `email`, `adults`, `childAges`, `period`, `summary`, `message`. Returns the inquiry number and the stage `awaiting_confirmation`. The same guest, hotel and period again returns the existing inquiry with `alreadyRequested: true`.
