What it does and how it works

Once Upon YOUR Child makes personalized stories where the child is the hero. This project brings it to voice. It's an MCP server that lets a voice client run a choose-your-own-path adventure or a calming bedtime story for a specific child, out loud, with the child choosing what happens. What we show is the combination: the family's saved profile (name, age, buddy, comfort item), tonight's concern ("Maya is nervous about her swim lesson tomorrow"), and spoken choices adapted to the child's age. We tested it with our own simulated Alexa+ page, a browser MCP client; other compatible MCP clients can use the same story tools next.

What it does:

  • list_heroes: finds the family's saved heroes, so "tell Maya a story" works without setup questions.
  • start_adventure / choose_path: an interactive story. Each scene ends with the choices written to be spoken, and the child can answer with a choice or their own idea.
  • tell_bedtime_story: a calmer linear story shaped by the child's mood that night.
  • narrate / list_voices: the app's storyteller voices (MP3), for hosts that want them over their own TTS.
  • bedtime prompt: a ready-made starting point for the host.

Designed for listening, not reading. Text written for a screen sounds wrong read aloud, so the server rewrites before it speaks. It strips stage directions and echoes of the choice, keeps short vocabulary explanations, and phrases the choices by the child's age band. A 4-year-old (Sprout, 5 and under) is asked by name, with no numbers: "Theo, which one? follow the fox, or open the door?" with each option cut to about six words. Older children hear numbered options ("One: … Two: …") plus an invitation to give their own idea. The goodnight line changes by age too: "Sweet dreams, Maya" for the little ones, a plain "The end." for teens.

Built for a real family, not a demo. The server stays signed in on its own: it uses the refresh token, and if that fails it re-mints the anonymous session by client id. It's stateless per request, as recommended for hosted MCP servers. It's locked by a shared secret, because anyone who reaches it becomes the parent. The app's child-safety rules stay in force: story and TTS routes require auth and parental consent, and child voices never go to third-party voice cloning.

Simulated Alexa+ page. The server also serves a small browser page that works as an MCP client. It sends standard initialize / tools/list / tools/call messages, uses Web Speech for voice in, and shows every MCP call with its timing, so judges can watch the protocol at work. It is what we tested with; other compatible MCP clients can use the same story tools.

Why voice. This is for parents of young children at bedtime, the one time of day when a screen is the wrong tool and a story is the right one. Spoken, with the lights off, a story about the child can take tonight's worry ("nervous about her swim lesson tomorrow") and walk her through it with her own buddy beside her, and she can steer it without reading. That is what a parent does on a good night; this lets the app do it on the nights the parent is running on empty.

What existed before, and what was built during the hackathon

Existed before the submission period: the Once Upon YOUR Child app (Flutter) and its Flask backend on Railway, including story generation, interactive-story continuation and TTS endpoints.

Built during the submission period (from 2026-09-24): everything in this repository. That covers the MCP server and its six tools and prompt, the speech-shaping layer by age band, self-healing authentication, the shared-secret lock, the simulated Alexa+ page, and the check scripts (smoke, voice, per-age walkthroughs). One backend change was made for this entry: OUYC PR #73 passes the child's feelings and comfort item into the bedtime prompt, which it previously ignored (written 2026-09-25, merged 2026-09-27 as commit 3e7926c9).

Verified live through the deployed server (2026-09-28): a bedtime story for Maya with the feeling "missing grandma" named Grandma five times and included Bloo, her blue blanket, so the story really is shaped by how the child feels that night.

Built With

Share this project:

Updates

Submission history