Inspiration
Planning a short trip means juggling a flight site, a hotel site and a calendar, and then doing the math yourself. A voice assistant should be able to take "a long weekend in Barcelona in November, we have $2,500" and simply come back with the best package.
What it does
Trip Scout is a self-hosted MCP server plus an Agent Skill that turns Alexa+ into a travel planner.
- plan_trip compares round-trip fares for up to 14 departure dates in parallel, pulls well-rated hotels for the 3 cheapest dates and ranks complete flight + hotel packages against the budget.
- find_cheapest_dates returns a price calendar and the day that saves the most.
- search_flights / search_hotels return live Google Flights and Google Hotels results (prices, stops, CO2, ratings).
- Traveler profile (home airport, party size, cabin, hotel standards) is stored per user, so it never has to be repeated.
- Price watches keep first / current / best price and full history; "did any of my prices drop?" re-checks them all.
- Every tool returns a short, voice-ready
speechline andstructuredContentrendered by an MCP Apps view — Echo Show-style cards with flights, stops, CO2 and hotel ratings.
How we built it
- MCP server in Python on the official SDK, spec 2025-11-25 over Streamable HTTP (
/mcp): 10 tools, progress notifications, one MCP Apps resource (ui://trip-scout/view.html,text/html;profile=mcp-app, linked through_meta.ui.resourceUri). - Agent Skill (
skills/trip-scout/SKILL.md) teaches the model which tool to call and how to speak: one short sentence, details on screen, never read out flight numbers. - Own flight and hotel engines: Google Flights'
tfsprotobuf and Google Hotels'ts/qssearch state are built by hand — no browser, no API key. A thread-pool planner fans out the searches; a 10-minute TTL cache makes follow-up questions instant. - Honest ranking: hotels use a Bayesian rating prior (a 5.0 with 12 reviews doesn't beat a 4.7 with 3,000), hostels/dorms and single rooms for groups are filtered out, packages are ranked by value against the budget.
- Per-user state in SQLite keyed by
x-user-id; Origin/Host validation (DNS-rebinding protection), localhost binding and optional bearer auth (TRIP_SCOUT_TOKEN). - Simulated Alexa+ host (allowed by the rules, source in
web/): loads the Agent Skill, lets an LLM (any OpenAI-compatible endpoint, e.g. Amazon Bedrock) call the MCP tools, speaks the answer, and renders the MCP App like an Echo Show, with a live MCP activity log. A rule-based fallback router keeps it working when the LLM is unavailable.
Challenges we ran into
- There is no way yet for outside developers to point a real Alexa+ at an MCP endpoint, so we built a faithful simulated host.
- The latest MCP Python SDK (2.x) negotiates a newer protocol and renamed
FastMCP; we pinnedmcp<2to speak exactly 2025-11-25. - Voice latency: a second LLM round trip after each tool call doubled response time, so tools now return a ready-to-speak
speechfield.
Accomplishments that we're proud of
- A live end-to-end MCP smoke test (protocol negotiation, all 10 tools, the MCP Apps resource, live flights / dates / hotels / packages / watches) plus offline unit tests.
- One sentence triggers ~17 live searches and still answers in a single spoken sentence.
What we learned
Voice needs a different output contract than chat: one short spoken sentence, everything else on the screen — Agent Skills + MCP Apps express exactly that.
What's next for Trip Scout
Connect to a real Alexa+ endpoint as soon as registration opens, and proactive price-drop announcements ("Your Barcelona fare dropped $80").
Log in or sign up for Devpost to join the conversation.