Inspiration

Voice assistants are passive about football. They read out a score, but they don't remember which teams a household cares about, and they forget Dad's bold prediction the moment he makes it. Sports apps that do talk about probabilities usually push people toward real-money betting.

We wanted the opposite: a proactive Alexa+ companion for the living room that learns the household's leagues and teams, plans the night, and runs a betting-free family prediction league that teaches what a probability really means. The winner is not whoever guesses most, but whoever beats the market's fair expectation: calling an 18 % underdog counts for much more than backing a 79 % favourite.

What it does

Match Night Copilot is a football companion for screen devices like the Echo Show:

  • Memory and agentic planning. On first use it asks for the family's leagues and favourite teams, and remembers them across sessions. "What should we watch today?" builds a plan on its own: followed teams first, then the most even and goal-rich games. "Which match has the most goals?" or "Any derby today?" bring a top-5 ranking, and it knows the famous clásicos.
  • Honest match insight. The headline is always the market's fair chance, with the bookmaker margin removed by Shin's method. A small Poisson model is only a second opinion.
  • A betting-free prediction league. "Dad thinks Real Madrid wins, 80 percent sure" saves the pick with the market's fair chance at that moment. Predictions close at kick-off and settle themselves after the final whistle. The leaderboard ranks each member by how many more picks they got right than the market expected, and our open-source library rates their calibration (over-confident or well calibrated).
  • It acts on its own. Reminders fire at half-time with the score, and when the last match ends it asks "Want to see who won the family league?", then crowns a champion with confetti. A demo time machine ("Fast-forward to midnight") replays a real matchday in seconds.
  • Multimodal, in two languages. Every answer comes with a 1280×720 card, and the voice adds one or two sentences instead of reading the card. It listens and answers in English or Latin American Spanish.
  • Under the hood, live. A side panel streams every MCP tool call the agent makes, with its arguments and duration.

How we built it

  • The MCP server (backend). A self-hosted server built with the official MCP Python SDK (mcp 2.3.0), over Streamable HTTP, negotiating protocol 2026-07-28 (the track requires 2025-11-25 or later). It exposes 15 tools with read-only and destructive annotations, server instructions for agents, and a ready-to-speak say sentence in every result. The household memory lives in SQLite; the cards are drawn with Pillow, with initial badges instead of club crests.
  • The agent (AWS Builder). Claude Haiku 4.5 on Amazon Bedrock, through the Converse API with tool use and a Bedrock API key. For every utterance the backend connects to our MCP server as a real MCP client, reads its instructions and tools, and runs the tool-use loop. Any MCP-capable assistant, Alexa+ included, could use the same server.
  • The simulator (frontend). A web page that plays the Echo Show: Web Speech API for voice in and out, a light bar, a card carousel, earcons synthesized with Web Audio, and the live "Under the hood" panel. The Bedrock key never reaches the browser.
  • Guardrails in code, not only in the prompt. It only follows a team when the user asked, the reply always confirms what was saved, failed tool turns are rolled back, and betting words are filtered out of what Alexa says.
  • Open-source core. The probability maths lives in fair-odds-audit, a standalone MIT library (CI on Python 3.9–3.13): Shin de-vigging, price value (EV/CLV) and a calibration audit for any forecaster.
  • Demo data. A real Saturday (18 Oct 2026): 23 matches in 7 leagues with their real kick-offs and final scores.
  • Quality. 63 automated tests, run through the real MCP protocol, check every tool before the model ever calls it.

Challenges we ran into

Getting the model to stay truthful in a chatty role. In early versions it talked about a prediction the server had rejected, followed teams nobody asked for, and invented a "confidence". We fixed each of these at the source: the tool results now state exactly which members have settled predictions, a code-level check blocks follow_team unless the user asked for it, and picks are named by team, which removed the home/away mix-ups.

Designing voice for a screen. Reading 23 scores aloud is useless. We moved the detail into cards, kept speech to one or two sentences, showed one match per turn ("Want the next one?"), and added a carousel when a turn produces several cards.

Too much football. Seven leagues flood the screen. Remembering the household's leagues and teams, while always including any match someone predicted on, made every list fit on one card.

Bedrock onboarding. Our account was pinned to us-east-2 without warning, and newer Claude models showed as available but returned 403 at runtime. Details are in our friction log.

Accomplishments that we're proud of

  • The family league rewards beating the market, not just being right, and audits calibration with a real statistical library. A family can learn something from the game without betting a cent.
  • A real MCP server that any MCP-capable assistant can use, plus a real MCP client agent on Bedrock, with every tool call visible live.
  • A complete, coherent product loop: setup, plan, insight, predictions, reminders, results and champion. It works in two languages.
  • Shipping a standalone, tested open-source library alongside the product.

What we learned

  • With agents, the best fixes are structural: tell the model the facts it needs inside the tool result, and enforce the important rules in code.
  • Voice on a screen device is its own design discipline: speak the highlight and show the detail.
  • Probabilities become intuitive when they are personal: "Maria beat the market by 0.8 picks" teaches more than any chart.

What's next for Match Night Copilot

  • Publish it as an Alexa+ integration for real households, with live fixtures and odds from a licensed data provider.
  • Lineups, key players and injury news from a licensed data provider, so Alexa can say whether the star plays tonight.
  • Morning push briefings ("Emelec plays at 2 pm, want a reminder?") and weekly family leagues with season-long calibration.
  • More leagues, more languages, and kid-friendly explanations of probability right in the cards.

Built With

  • amazon-bedrock
  • claude-haiku-4.5
  • fair-odds-audit
  • httpx
  • javascript
  • mcp-python-sdk
  • model-context-protocol
  • pillow
  • python
  • sqlite
  • starlette
  • streamable-http
  • uvicorn
  • web-audio-api
  • web-speech-api
Share this project:

Updates

Submission history