Inspiration: Trip planners stop helping once the plan is made. Then the monsoon floods the waterfall road, a beach gets a high-wave warning, or a festival fills every hotel, and you only find out when you get there. The warning signs were already out there in posts from other travellers and in the local news. Nobody was reading them for you. We wanted an assistant that reads them first and tells you plainly whether to go.
What it does: TripRescue is a self-hosted MCP server for Alexa+. It has 12 tools that cover a whole trip:
Plans: starts a trip and checks your calendar (a cousin’s wedding on day 3 keeps that evening free). It ranks hotels by what you like, builds a day-by-day itinerary, and splits out the budget. Gives a verdict: trip_verdict returns GO / WAIT / SKIP with a confidence score. It explains why: the hotspots people are posting about, live news headlines, which items in your plan are affected, and a safer alternative destination. Rescues: check_disruption reads the live forecast and finds the outdoor plans that rain would break. replan_trip swaps them for indoor activities you’ll enjoy, and explain_changes tells you what changed and why. Leaves the decision to you: the verdict never cancels or changes the trip by itself. Plan changes and bookings need an explicit “yes”, and that rule is enforced in code, not only in the prompt.
Every tool returns a short speech field written to be spoken aloud, plus structured data for the screen.
Example: “My verdict is skip, 73% confident. 159 recent posts report flooding, mostly around Dudhsagar, and today’s news has a high wave warning for Goa. Gokarna has similar beaches with far fewer problems. Do you still want Goa, or should I check Gokarna?”
How we built it: MCP server: TypeScript MCP SDK 1.32 over stateless Streamable HTTP (protocol 2025-11-25), on Express 5. Each client gets its own trip through an x-session-id header. Two-stage social analysis: A fast keyword pass scores all 50,018 posts plus live news in about 20 ms. Each post is weighted by how recent it is, its likes, how trustworthy its source is, and whether it mentions a place in your itinerary. Amazon Bedrock (Nova Lite) then re-reads the 12 highest-weighted posts for sentiment and topic, and its judgement replaces the keyword score for those posts. Live data: Google News RSS for headlines (cached for 10 minutes) and Open-Meteo for weather. Both fall back to saved data if they fail. Planning is plain, deterministic code. Most tools answer in under 40 ms, so Alexa never waits on a model to do arithmetic. Simulated Alexa+ page: a web chat where Bedrock Nova Pro runs an agent loop that calls the MCP tools through an in-process MCP client. This lets anyone try the full conversation in a browser. Hosting: AWS Lambda (Node 22) behind a Function URL, using serverless-http. On Lambda it authenticates to Bedrock through the function’s IAM role, so no keys are deployed. The chat is rate limited to 12 messages per minute per visitor to protect the Bedrock bill.
Challenges we ran into: The MCP SDK returned 415 errors on Lambda. serverless-http doesn’t fill in rawHeaders, which the SDK relies on. We rebuild them from the parsed headers in one line in lambda.js. Model behaviour: Claude models weren’t available on our Bedrock account, so we moved to Nova. Nova Lite leaked tags into replies and tried to run the whole plan in one turn. Nova Pro reasoned better, but once booked without asking. That is why the confirmation guard now lives in code. Live data limits: GDELT rate-limited us (we switched to Google News RSS), and Open-Meteo only forecasts about 16 days ahead, so later trips use a saved forecast. Windows tooling: Windows’ zip tool writes backslash paths that Lambda can’t read. We used tar.exe instead.
Accomplishments that we're proud of: The verdict is explainable. It shows the posts, the places and the news behind its answer instead of only a score. Safety comes first without being bossy. TripRescue warns you, suggests an alternative, and then respects your choice to go anyway. It reads 50k posts plus live news in milliseconds, using Bedrock only where judgement matters. It is live on Lambda: the public MCP endpoint works in the MCP Inspector, and the chat page works for anyone with the link.
What we learned: Keep deterministic logic out of the model. Let the model talk and judge, and let code count, rank and enforce rules. Safety rules belong in code. A prompt that says “always ask first” is a suggestion, not a guarantee. Write tool output for voice from the start (a short speech field). It makes the tools work on Alexa and on a screen.
What's next for TripRescue: Store trips in DynamoDB so they survive restarts and work across Lambda instances. Real social feeds where APIs allow (the post feed is simulated today because Instagram and X have no free search API). Score conditions for the trip dates instead of the last 72 hours. Add travel cost to the budget. Publish it as a real Alexa+ integration.
Built With
- amazon-bedrock
- amazon-nova
- aws-lambda
- css
- express.js
- google-news-rss
- html
- javascript
- model-context-protocol
- node.js
- open-meteo
- serverless-http
- typescript-mcp-sdk
- zod
Log in or sign up for Devpost to join the conversation.