Inspiration

Capture tools save what you kept. Generators continue whatever you hand them. Nobody treats the idea you flinched away from mid-jam as a first-class object. Almost does.

What it does

Almost watches a jam session (with explicit consent) and detects creative near-misses: moments where you ramped into something new, hit a peak, then retreated to a safe loop without capturing it. Ask Alexa+ "what did I just walk past?" and it names the top near-miss, shows an event graph (Approach, Peak, Abandon, SafeLoop), lets you flip to "the other one," cue back with "take me back," and "export that seed" as a MIDI-JSON snippet.

Scope note: this build runs on synthetic fixture jams inside our own web Alexa+ simulator, which calls the live MCP server. There is no live audio capture or hosted Alexa+ client yet.

How we built it

  • A self-hosted MCP server over Streamable HTTP (protocol 2025-11-25) exposing 7 tools: start_session, ingest_timeline, list_near_misses, explain_near_miss, resume_near_miss, export_seed, session_summary.
  • Deterministic near-miss scoring in a shared core package: sliding-window novelty (spectral flux, onset density), repetition (self-similarity), and commitment (loop/stabilize). No LLM in the detector.
  • A Next.js web Alexa+ simulation that calls the live MCP server first and falls back to the same in-process core if MCP is down.
  • Stateful sessions keyed by Mcp-Session-Id so concurrent users never clobber each other's active jam.
  • Synthetic fixture jams only, no copyrighted audio.

Challenges we ran into

The shared "active jam" leaked across clients until we keyed state per MCP session and cleaned up on close. Host header allowlisting blocked non-localhost hostnames until we added ALLOWED_HOSTS. The dual Accept header requirement returned 406s with no docs example. One-shot MCP clients mint a new session per call, so the web sim passes the jam sessionId explicitly.

Accomplishments that we're proud of

A real MCP Streamable HTTP server that negotiates 2025-11-25, a smoke test that asserts both near-miss peaks (~30s and ~62s) and multi-client isolation, and one deterministic backend serving both a voice agent and a web sim.

What we learned

MCP lets one backend serve voice and web at once. Session scoping and host policy are the real tax of going multi-user, not a reason to leave the stack.

What's next for Almost

A consent card with pause and kill-switch utterances in Alexa+, ranked voice disambiguation when several near-misses stack, DAW deep-link export, live ingest from MIDI/CC timelines, and Bedrock-generated explanations.

Built With

Share this project:

Updates

Submission history