Skip to content

Commit b54d9ae

Browse files
feat: initial vio hotel search skill
Portable skill for AI agents providing conversational hotel search via the Vio MCP server. Includes intent-based ranking, smart categorization, booking funnel guidance, and three interaction modes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0 parents  commit b54d9ae

11 files changed

Lines changed: 885 additions & 0 deletions

File tree

.github/workflows/release.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
branches: [main]
6+
7+
permissions:
8+
contents: write
9+
pull-requests: write
10+
11+
jobs:
12+
release-please:
13+
runs-on: ubuntu-latest
14+
outputs:
15+
release_created: ${{ steps.release.outputs.release_created }}
16+
tag_name: ${{ steps.release.outputs.tag_name }}
17+
steps:
18+
- uses: googleapis/release-please-action@v4
19+
id: release
20+
with:
21+
config-file: release-please-config.json
22+
manifest-file: .release-please-manifest.json
23+
24+
build-artifact:
25+
needs: release-please
26+
if: needs.release-please.outputs.release_created
27+
runs-on: ubuntu-latest
28+
steps:
29+
- uses: actions/checkout@v4
30+
31+
- name: Setup mise
32+
uses: jdx/mise-action@v2
33+
34+
- name: Build skill zip
35+
run: mise run zip
36+
37+
- name: Upload zip to release
38+
env:
39+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
40+
run: gh release upload "${{ needs.release-please.outputs.tag_name }}" vio.zip

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*.zip
2+
node_modules/

.mise.toml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[tools]
2+
node = "22"
3+
4+
[tasks.zip]
5+
description = "Create skill zip for upload"
6+
run = """
7+
rm -rf /tmp/vio-skill-zip vio.zip
8+
mkdir -p /tmp/vio-skill-zip/vio
9+
cp SKILL.md /tmp/vio-skill-zip/vio/
10+
cp -r references /tmp/vio-skill-zip/vio/
11+
cd /tmp/vio-skill-zip && zip -r "$OLDPWD/vio.zip" vio/
12+
rm -rf /tmp/vio-skill-zip
13+
"""

.release-please-manifest.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
".": "0.1.0"
3+
}

AGENTS.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Repository Guidelines
2+
3+
## Project Overview
4+
5+
This is the Vio MCP Skill — a portable skill that teaches AI agents how to search hotels, compare prices, and explore detailed hotel information via the Vio MCP server. It targets OpenClaw, claude.ai, Claude Code, and any agent that supports the skill format.
6+
7+
## Project Structure
8+
9+
- `SKILL.md` — Core skill definition with YAML frontmatter and conversation flow guidance
10+
- `references/tool-reference.md` — Complete tool schemas, parameters, and example payloads
11+
- `README.md` — Setup and usage documentation
12+
- `.mise.toml` — Build commands (`mise run zip`)
13+
- `version.txt` — Current version (managed by release-please)
14+
- `skills/` — Legacy nested structure for agents that discover skills from subdirectories
15+
16+
## Build & Development
17+
18+
- `mise run zip` — Build `vio.zip` for upload to claude.ai or distribution
19+
- The zip structure must be: `vio/SKILL.md` + `vio/references/` (folder at root named `vio`)
20+
21+
## Editing the Skill
22+
23+
- `SKILL.md` is the core file. Keep it under 2,000 words — move detailed content to `references/`
24+
- Write in **imperative form**, not second person ("Search for hotels" not "You should search")
25+
- The `description` field in frontmatter must use **third person** with specific trigger phrases
26+
- Tool schemas live in `references/tool-reference.md` — update this when the MCP server tools change
27+
- Source of truth for tool schemas: `src/mcp/tools/schemas/` in the [Andromeda](https://github.com/viodotcom/Andromeda) repo
28+
29+
## Testing
30+
31+
- **claude.ai**: Upload `vio.zip` via Customize → Skills, add MCP server via Integrations
32+
- **OpenClaw**: Copy skill to `~/.agents/skills/vio/`, add MCP server to `~/.openclaw/openclaw.json`
33+
- **Claude Code**: Use `--plugin-dir` with a plugin wrapper
34+
35+
## Releases
36+
37+
- Uses [release-please](https://github.com/googleapis/release-please) for automated versioning
38+
- Push conventional commits to `main` → release-please creates a release PR
39+
- When merged, the release workflow builds `vio.zip` and attaches it to the GitHub release
40+
- Use [Conventional Commits](https://www.conventionalcommits.org/) prefixes: `feat:`, `fix:`, `chore:`, `docs:`
41+
42+
## Coding Style
43+
44+
- Markdown throughout
45+
- Keep SKILL.md lean — progressive disclosure via `references/`
46+
- No emojis in skill content unless explicitly requested

LICENSE

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
BSD 3-Clause License
2+
3+
Copyright (c) 2026, Vio.com
4+
5+
Redistribution and use in source and binary forms, with or without
6+
modification, are permitted provided that the following conditions are met:
7+
8+
1. Redistributions of source code must retain the above copyright notice, this
9+
list of conditions and the following disclaimer.
10+
11+
2. Redistributions in binary form must reproduce the above copyright notice,
12+
this list of conditions and the following disclaimer in the documentation
13+
and/or other materials provided with the distribution.
14+
15+
3. Neither the name of the copyright holder nor the names of its
16+
contributors may be used to endorse or promote products derived from
17+
this software without specific prior written permission.
18+
19+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

README.md

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
# Vio MCP Skill
2+
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+
5+
## What It Does
6+
7+
The `/vio` skill teaches agents to use two MCP tools:
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.
11+
12+
## How It Works
13+
14+
The skill goes beyond basic search — it embeds product thinking into every interaction:
15+
16+
- **Intent-based ranking** — Hotels are ranked by how well they match what the user is actually looking for, not just by price or popularity. The agent evaluates location, reviews, price analytics, and amenities against the user's expressed intent.
17+
- **Smart categorization** — Results are grouped into 2-3 meaningful categories (e.g., "Best Value", "Central Location", "Top Rated") with explanations of why each group stands out.
18+
- **Booking funnel** — The agent actively guides users from search → narrowing → hotel deep-dive → room selection → booking, nudging toward the next step without being pushy.
19+
- **Three modes** — Discovery (exploring options), Comparison (head-to-head evaluation), and Lookup (quick facts about a specific hotel), each with tailored behavior.
20+
- **Intent persistence** — Context accumulates across the conversation. If the user mentioned "honeymoon" early on, that signal shapes every subsequent recommendation.
21+
- **Proactive alternatives** — When criteria conflict with reality (e.g., cheap hotels in an expensive area), the agent reframes the search with context rather than just returning poor results.
22+
23+
## Prerequisites
24+
25+
- Access to a Vio MCP server endpoint (obtain an API key from Vio)
26+
- An AI agent that supports the skill format (OpenClaw, Claude Code, or compatible)
27+
28+
## Download
29+
30+
Get the latest `vio.zip` from the [Releases page](https://github.com/viodotcom/mcp-skill/releases).
31+
32+
Or build locally: `mise run zip`
33+
34+
## Setup
35+
36+
### claude.ai
37+
38+
1. Download `vio.zip` from [Releases](https://github.com/viodotcom/mcp-skill/releases)
39+
2. Go to **Customize → Skills** and upload `vio.zip`
40+
3. Enable the skill
41+
4. Add the Vio MCP server under **Customize → Integrations → MCP**:
42+
- **Type:** HTTP
43+
- **URL:** `https://mcp.vio.com/mcp?api_key=YOUR_API_KEY`
44+
5. Start a conversation and try: "Find hotels in Amsterdam for next weekend"
45+
46+
### OpenClaw
47+
48+
1. Copy the skill into your personal skills directory:
49+
50+
```bash
51+
mkdir -p ~/.agents/skills/vio
52+
cp SKILL.md ~/.agents/skills/vio/
53+
cp -r references ~/.agents/skills/vio/
54+
```
55+
56+
2. Add the Vio MCP server to `~/.openclaw/openclaw.json`:
57+
58+
```json
59+
{
60+
"mcp": {
61+
"servers": {
62+
"vio": {
63+
"transport": "streamable-http",
64+
"url": "https://mcp.vio.com/mcp?api_key=YOUR_API_KEY"
65+
}
66+
}
67+
}
68+
}
69+
```
70+
71+
3. Restart the gateway and verify:
72+
73+
```bash
74+
openclaw gateway restart
75+
openclaw skills list # Should show "vio" as ready
76+
openclaw mcp list # Should show "vio" server
77+
```
78+
79+
4. Launch and test:
80+
81+
```bash
82+
openclaw tui
83+
# Then type: /vio Amsterdam for next weekend
84+
```
85+
86+
### Claude Code
87+
88+
Copy or symlink the skill into a plugin directory and use `--plugin-dir`:
89+
90+
```bash
91+
mkdir -p my-plugin/.claude-plugin my-plugin/skills/vio
92+
echo '{"name":"vio-hotels","description":"Hotel search via Vio MCP","version":"1.0.0"}' > my-plugin/.claude-plugin/plugin.json
93+
cp SKILL.md my-plugin/skills/vio/
94+
cp -r references my-plugin/skills/vio/
95+
```
96+
97+
Configure the MCP server in `.mcp.json` at the plugin root:
98+
99+
```json
100+
{
101+
"vio": {
102+
"type": "http",
103+
"url": "https://mcp.vio.com/mcp?api_key=${VIO_API_KEY}"
104+
}
105+
}
106+
```
107+
108+
Set the `VIO_API_KEY` environment variable and launch:
109+
110+
```bash
111+
export VIO_API_KEY=your-api-key-here
112+
claude --plugin-dir ./my-plugin
113+
```
114+
115+
### Other Agents
116+
117+
Install `SKILL.md` and `references/` into your agent's skill discovery path, then configure the Vio MCP server connection:
118+
119+
```
120+
https://mcp.vio.com/mcp?api_key=YOUR_API_KEY
121+
```
122+
123+
## Usage
124+
125+
Invoke the skill directly:
126+
```
127+
/vio Paris, 3 nights in July, budget under 150 EUR
128+
```
129+
130+
Or let the agent trigger it automatically when you mention hotel search:
131+
```
132+
Find me a 4-star hotel in Amsterdam with a pool
133+
```
134+
135+
### Example Queries
136+
137+
- "Search hotels in Barcelona for next weekend"
138+
- "Find family-friendly apartments in Rome with free cancellation"
139+
- "Compare the Hilton and Marriott in London"
140+
- "Show me reviews for that hotel"
141+
- "What rooms are available? I need something with a king bed"
142+
- "Sort by price, cheapest first"
143+
- "Show me more results"
144+
145+
## File Structure
146+
147+
```
148+
SKILL.md # Core skill definition
149+
references/
150+
tool-reference.md # Complete tool schemas and examples
151+
README.md # This file
152+
.mise.toml # Build commands (mise run zip)
153+
```
154+
155+
## License
156+
157+
[BSD 3-Clause](LICENSE)

0 commit comments

Comments
 (0)