Inspiration

We publish murder mystery scenarios. The biggest thing between a customer and a game they already bought is not price or quality: they have to get three to seven people free on the same evening, plus one more person who agrees to run the table and never gets to play.

An AI game master is the obvious fix, and it fails for a structural reason. If the script is in the model's context, the model knows who did it, and it plays every suspect, judges every deduction and narrates every scene while knowing. You can't prompt that away.

What it does

Sealed Case for Alexa+ lets one person play a full murder mystery by voice. Alexa+ is the game master: it searches rooms, questions suspects and reads back the player's accusation. The case lives in a self-hosted MCP server, and the solution never leaves the server process. Alexa+ can call every tool in any order and ends up exactly where the player is: holding evidence and reasoning it out.

  • Every tool result carries a speech field (plain spoken English, at most two sentences) next to structured data. Suspects' testimony is quoted verbatim, so the assistant never paraphrases a lie into a truth.
  • Tools take what the player actually says ("ask the owner where he was") and the server resolves it.
  • accuse is two-step: the accusation is read back, and it is graded only after the player says yes.
  • One game per Mcp-Session-Id, so many people can play at once.

How we built it

Node and the official MCP TypeScript SDK (1.30.1), Streamable HTTP, protocol 2025-11-25. The game rules and the scenario come from our earlier browser project Sealed Case (WebMCP). Everything server-side and voice-side is new; the README has a section listing exactly what was reused and what was built during the hackathon window.

Challenges we ran into

Proving a negative. Grepping for the culprit's name proves nothing: the culprit is one of the suspects, so the name correctly appears everywhere. We replaced it with a differential test. Every call is replayed against a copy of the case with a different culprit, method and motive, and every response before a committed accusation must be byte-identical. We checked the test by planting two real leaks; the name grep missed one, the differential test caught both.

Accomplishments that we're proud of

13 tests, including 1,200 randomised tool calls, all byte-identical across solutions until the player commits. The seal is a property of the architecture, not an instruction to the model.

What we learned

Voice changes the interface more than the rules. There is no button to click, so "the human confirms" had to become a read-back plus a spoken yes, and misheard questions must not cost the player anything.

What's next

Connect it end to end with Alexa+ over a public HTTPS endpoint (we have not tested against Alexa+ itself yet; the tests use the MCP SDK client), then load the other scenarios we publish.

Feedback on the tools

  • MCP TypeScript SDK: Streamable HTTP with per-session transports was straightforward, and the negotiated protocol version is easy to verify. A documented example of per-session state keyed by Mcp-Session-Id would save builders time.
  • Alexa+ track: a public test harness or reference client for "show your MCP server in action" would make it easier to demonstrate the Alexa+ side without a device.

Built by Ai-Q Labs with Claude (AI-assisted).

Built With

Share this project:

Updates

Submission history