Inspiration

Every weekend families ask the same question, and the hard part is never finding a place. It's finding one that works for everyone. Grandpa uses a wheelchair, so he needs step-free paths and an accessible restroom. The four-year-old rides in a stroller and naps after lunch. The dog can only come where dogs are allowed. And the forecast says 34°C at noon.

Today that means an hour of tabs: reviews, the venue's own site, weather, park alerts, drive times. We wanted an assistant that does the homework a careful parent does, for every person in the household, and remembers how the last trip went.

What it does

Fit Trip MCP is a self-hosted MCP server for a voice assistant on a smart display. It knows the household (who lives there, their needs, where home is) and answers two kinds of questions:

  • "Where can we go this Saturday?" It researches the area and ranks places with a fit verdict for every family member.
  • "Is the closest zoo a good fit for us?" It runs a fit check of one place.

Results appear as an MCP App card on the device screen. Tap a place to see it member by member: what works for Grandpa, what to watch for with Leo, whether the dog can come.

It remembers. Before a new search it asks how the last trip went, follows up once if the answer is vague, and uses that review next time. When the family picks a place ("let's go to number two"), it logs the visit. The family can also set a maximum drive time by voice.

How we built it

  • Two agents on two sides of MCP. A device agent stands in for the smart-display assistant and talks to our server through a real MCP client over Streamable HTTP. A research agent runs on the server for each search.
  • The research agent is free, not scripted. Tools: web_search (web + maps search around home), fetch_pages (reads up to 10 official sites at once), record_access, add_note, submit. It reads the site of every place it ranks, so each card rests on the place's own page.
  • No hard-coded simulation. The agent gets the plain hourly forecast and weather alerts and judges fit itself.
  • Live public data: hourly forecast and geocoding, national weather alerts, national park alerts and closures, places near home from Wikidata, drive times from OSRM, and live web search with page scraping.
  • Live narration. While it works, the research agent writes short spoken updates. Nothing is canned: every line comes from the agent.
  • Voice: push-to-talk with in-browser voice activity detection, Whisper large-v3 speech to text, streamed text to speech.
  • Speed: each place's story is prefetched in the background as soon as the ranking is ready, so a tap opens instantly.
  • Hosting: Node + Express on AWS EC2, live over HTTPS, no keys needed to try it.

Challenges we ran into

  • Latency. The first version took 53 seconds before saying anything useful. We parallelized research, removed hard-coded weather scenarios, searched by coordinates and streamed speech. Now the family hears progress within seconds.
  • Letting the agent think. Our early pipeline decided too much in code, and the agent rarely read a real page. A good tool manual plus the rule "read every place you rank" made answers much better.
  • Conversation order. Models like to call memory and search in one turn, so the server enforces that the last trip's review is asked before any new search.
  • Voice rate limits. Free speech tiers throttle quickly, so we built provider fallbacks and finally settled on one stable voice.

Accomplishments that we're proud of

  • A research agent that actually reads places' own pages and records accessibility facts per place.
  • Per-member verdicts: the answer is about your family, not the average visitor.
  • Memory that makes the next trip better than the last.
  • A demo UI that shows both agents and every MCP message between them, live.

What we learned

Give the agent good tools and a clear manual, then step back. Our best improvements came from removing logic from code and trusting the model with live data.

What's next for Fit Trip MCP

Ticket and booking links, calendar awareness (naps, school days), and shared family profiles across devices.

Built With

  • aws-ec2
  • deepseek
  • express.js
  • grok
  • groq
  • mcp-apps
  • model-context-protocol
  • national-weather-service
  • node.js
  • nps-api
  • open-meteo
  • openrouter
  • osrm
  • pi-agent
  • playwright
  • qlever
  • serper
  • typescript
  • whisper
  • wikidata
Share this project:

Updates

Submission history