You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: improve skill guidance for partial matches, anchor hotels, and prompt (#3)
* feat: handle partial matches in result presentation
When filters are active, the MCP server may return hotels that only
match some criteria (isPartialMatch). Rank full matches first, be
transparent about missing filters, and use match status to inform
category grouping.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add guidance for prompt, anchor hotels, and appliedFilters
Instruct the agent to pass the prompt parameter on every search,
present anchor hotels separately from alternatives, and use
appliedFilters to explain semantic filter mapping in partial matches.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: fix README formatting and update connector instructions
Update claude.ai setup to use Connectors instead of Integrations,
fix bold syntax in tool list, and add missing blank lines before
code blocks.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: remove internal repo reference from AGENTS.md
Replace private Andromeda repo link with the public MCP server docs
URL before open-sourcing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs: rename README title to Vio Skill
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+9-7Lines changed: 9 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,13 +1,13 @@
1
-
# Vio MCP Skill
1
+
# Vio Skill
2
2
3
3
A portable skill for AI agents that provides conversational hotel search via the [Vio MCP server](https://mcp.vio.com/docs/). Search hotels, compare prices, read reviews, and explore room options through natural conversation.
4
4
5
5
## What It Does
6
6
7
7
The `/vio` skill teaches agents to use two MCP tools:
8
8
9
-
-**`search_hotels`** — Discover hotels by location, coordinates, or name. Supports filters (star rating, amenities, property type, price range), sorting, and pagination.
10
-
-**`get_hotels`** — Fetch detailed data for specific hotels: reviews, rooms, FAQ, policies, price analytics, and more.
9
+
-`**search_hotels**` — Discover hotels by location, coordinates, or name. Supports filters (star rating, amenities, property type, price range), sorting, and pagination.
10
+
-`**get_hotels**` — Fetch detailed data for specific hotels: reviews, rooms, FAQ, policies, price analytics, and more.
11
11
12
12
## How It Works
13
13
@@ -38,9 +38,9 @@ Or build locally: `mise run zip`
38
38
1. Download `vio.zip` from [Releases](https://github.com/viodotcom/mcp-skill/releases)
39
39
2. Go to **Customize → Skills** and upload `vio.zip`
40
40
3. Enable the skill
41
-
4. Add the Vio MCP server under **Customize → Integrations → MCP**:
Copy file name to clipboardExpand all lines: SKILL.md
+6-4Lines changed: 6 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -85,12 +85,12 @@ Map user preferences to tool parameters:
85
85
86
86
### 2. Initial Search
87
87
88
-
Call `search_hotels` with the user's location via `queries`. ALWAYS include `analytics` and `insights` alongside the defaults: `include: ['location', 'rating', 'classification', 'media', 'offer', 'analytics', 'insights']`.
88
+
Call `search_hotels` with the user's location via `queries`. Always pass `prompt` with a clean English version of the user's query (strip any PII). ALWAYS include `analytics` and `insights` alongside the defaults: `include: ['location', 'rating', 'classification', 'media', 'offer', 'analytics', 'insights']`.
89
89
90
90
-**Analytics** — price comparison vs similar hotels (cheaper/same/expensive), trends, and historical data. E.g., "Priced 15% below similar hotels in the area."
91
91
-**Insights** — AI-generated review summaries per category (Facilities, Cleanliness, Rooms, Service, Location, Food). E.g., "Guests consistently praise the rooftop terrace and breakfast."
92
92
93
-
When searching for a specific hotel by name, pass the full hotel name in `queries` (e.g., `queries: ["Hilton Amsterdam"]`). This returns the hotel plus similar alternatives.
93
+
When searching for a specific hotel by name, pass the full hotel name in `queries` (e.g., `queries: ["Hilton Amsterdam"]`). This returns the hotel plus similar alternatives. The searched hotel is marked with `isAnchorHotel: true` and its ID appears in `anchorHotelIds`. Always present the anchor hotel first and separately from alternatives — it's what the user asked for, not a recommendation.
94
94
95
95
For multiple locations or hotels, pass up to 3 queries: `queries: ["Paris", "London"]`.
96
96
@@ -100,7 +100,9 @@ Use `searchMode: 'fast'` (default) for initial searches — it returns results q
100
100
101
101
Before presenting, rank hotels by how well they match the user's expressed intent. Consider what they asked for — destination, vibe, priorities, constraints, occasion, budget — and reorder results so the best matches come first. Use all available data to inform the ranking: location, rating, classification, facilities, analytics, insights, and any other signals in the response. Analytics (price vs similar hotels) and insights (review summaries) tend to carry strong signal.
102
102
103
-
Group the ranked hotels into 2-3 categories based on the data (e.g., "Best Value", "Top Rated", "Central Location", "Luxury Picks"). Place the strongest-match category first.
103
+
**Partial matches:** When filters are active, some hotels may have `isPartialMatch: true` — they matched some but not all requested filters. Always rank full matches above partial matches. When presenting partial matches, be transparent: mention which requested filters they don't meet (e.g., "doesn't have a pool but scores high on everything else you asked for"). Use `appliedFilters` from the response to see what filters were actually applied after semantic matching — this helps explain the gap between what the user typed and what was matched (e.g., user said "pool" but the applied filter is "Swimming Pool"). If the results are mostly partial matches, explain why — the filter combination may be uncommon in that market (e.g., "2-star hotels with a pool are rare in Amsterdam — these are the closest matches"). Never present a partial match as if it fully satisfies the user's criteria.
104
+
105
+
Group the ranked hotels into 2-3 categories based on the data (e.g., "Best Value", "Top Rated", "Central Location", "Luxury Picks"). Place the strongest-match category first. When there's a mix of full and partial matches, use this to inform grouping — e.g., a "Full Match" or "Closest to What You Asked" category first, followed by a "Worth Considering" category for strong partial matches.
104
106
105
107
For each category, write a `##` heading (2-4 words max), then a short paragraph (2-3 sentences) describing why these hotels are grouped together. Bold key attributes — star ratings, amenities, neighborhoods, guest rating ranges — so users can scan quickly.
106
108
@@ -113,7 +115,7 @@ After the category description, list each hotel in this format:
113
115
- [match points tied to user intent]
114
116
```
115
117
116
-
The last line should explain why this hotel fits (or doesn't) what the user asked for, in plain language. Tie it back to their expressed intent — e.g., "walking distance to the historic centre", "rooftop pool fits the honeymoon vibe", "priced 15% below similar hotels". Include negative match points when relevant — e.g., "farther from the beach than you described".
118
+
The last line should explain why this hotel fits (or doesn't) what the user asked for, in plain language. Tie it back to their expressed intent — e.g., "walking distance to the historic centre", "rooftop pool fits the honeymoon vibe", "priced 15% below similar hotels". Include negative match points when relevant — e.g., "farther from the beach than you described". For partial matches, explicitly note the missing filter — e.g., "no pool, but strong on location and price".
117
119
118
120
Rules:
119
121
- Every hotel must appear in exactly one category — never repeat a hotel across categories
0 commit comments