Inspiration
Every reminder tool tracks what you have not done yet. The expensive failures are somewhere else: the things you did, and then never handed over. In the archive this project came out of, ten finished submissions were ready to go and six of them died past their deadline — not for lack of work, but at a step that takes thirty seconds.
What it does
lastmile is a self-hosted MCP server an assistant like Alexa+ can call. It is built on three ideas:
preparedis a state of its own.open → prepared → delivered. "Finished but not handed over" is what the server speaks up about; not-yet-started work does not bury it.- Rank by the window, not the date.
actionable_untilis the last instant the remaining human step can still succeed, computed backwards from the deadline through the opening hours of the channel you have to use (notary, post office, courier, counter, phone, online). A lease affidavit due Sunday at midnight really closes Friday at 4 PM, because notaries do not work weekends: the calendar hides 56 hours. - Delivered requires proof.
commitment_advancerefuses to reachdeliveredwithout a receipt number, confirmation id or URL, and refuses to skipprepared.
Every tool returns a speech field written to be read aloud (capped at 240 characters by rebuilding the sentence, never by truncating it) plus the structured data behind it.
Tools: at_risk, spoken_brief, window_for, commitment_add, commitment_advance, delivery_proof; resource lastmile://channels.
How we built it
- Node 22+,
@modelcontextprotocol/sdk1.30.0, Streamable HTTP with per-session transports, storage in built-innode:sqlite(no native build). - Time zones from the runtime's IANA database via
Intl, so daylight-saving transitions stay right without a data file. - 47 tests, including an end-to-end test that connects the official MCP client over Streamable HTTP, and a test that the demo shows its point on all seven weekdays.
- No API keys, no accounts and no network calls, so judges can run it freely:
npm install && npm test && npm run demo && npm start. - Built with the help of an AI coding assistant (Claude); the design decisions, tests and every number in this write-up were checked by running the code.
About the demo video
We did not have an Alexa+ device. Following the resources page ("You can simulate an Alexa+ experience … via a web app"), the video uses a web-app simulator included in the repository (npm run simulate). Utterances are typed and a keyword stub chooses which tool to call; on a real Alexa+ device the model makes that choice. Every MCP call and every answer shown is real, and each spoken answer in the video is the server's own speech text. Voices in the video are synthesised (ElevenLabs).
Challenges
Full friction log in FRICTION.md. The main ones:
- A fresh transport per request passes a hand-written
initializeand then fails on the client's next message withServer not initialized, while the server log looks healthy. - A time-window demo depends on the weekday it is run. Our first fix still broke on Saturdays; we found it while recording the video on a Saturday, and now test all seven days.
- Hearing the answers spoken for the first time exposed a courier explanation that omitted the 24-hour transit time. The tests had not caught that.
What's next
- Connect a real Alexa+ client in place of the keyword stub.
- Proactive delivery: speak the
spoken_briefsentence unprompted when aprepareditem's window is about to close. - User-defined channels with their own opening hours and holidays.
Links
- Demo video: https://youtu.be/wiES3r6rldU
- Repository: https://github.com/kimdooo-a/lastmile-mcp
Built With
- javascript
- model-context-protocol
- node.js
- sqlite
- streamable-http
Log in or sign up for Devpost to join the conversation.