Inspiration
3Dogs Nexus consults on advanced AI. The question we hear most from operators is "Can I just ask my numbers out loud and trust the answer?" Northstar Ask is our answer, built for Alexa+ as a self-hosted MCP server plus a simulated Alexa+ experience. Judges can try the multi-turn flow in a browser, with no device needed.
What it does
- Multi-turn Q&A on one session. Ask "Which region sold the most tents this year?", then "And last quarter?" and "Break that down by sales channel." "Explain that" and "correct me" refer to the right answer.
- Spoken reply plus an Echo Show-style card (title, columns, rows, chart hint, sources, confidence).
- Weekly brief in one click (MCP prompt
weekly-business-brief). - "Correct me" turn. Correct the last answer. In sample mode the correction is acknowledged but not learned.
- Honest low-confidence answers. When the fictional data cannot support a question, the reply says so.
What you can run today, and what you can't
Everything above runs in sample mode: on the hosted Lambda endpoint, or locally with no token. Answers are precomputed from the fictional dataset by samples/build_samples.py, and every spoken reply starts with "Sample answer:". The full 3Dogs Nexus engine is not part of this submission.
How we built it
- Self-hosted MCP server on the official MCP Python SDK (
mcp_server/server.py,FastMCP), MCP spec 2025-11-25 over Streamable HTTP at/mcp. It has 4 tools (ask_northstar,weekly_brief,explain_last_answer,correct_last_answer) and 1 prompt. - Live on AWS Lambda behind a Function URL, defined in AWS SAM (
deploy/template.yaml, stacknorthstar-dev, us-east-1,SampleMode=true).lambda_handleradapts Function URL events onto the same ASGI app. - Thin HTTPS client (
client/northstar_client.py): a 7-second budget per call, one budget-aware retry, a 256 KB response cap, and the token kept out of all error text. - Simulated Alexa+ experience (
web_sim/): push-to-talk through the Web Speech API with typed input as a first-class path, spoken replies through SpeechSynthesis, and card rendering, with no external libraries. - Tests against the real transport:
tests/test_mcp_live.pyandtests/test_mcp_session.pydrive the server with the SDK's own client.
AWS services used (AWS Builder mini challenge)
AWS Lambda with a Function URL hosts the MCP server. AWS SAM defines and deploys it. In sample mode the endpoint makes no model calls. See docs/AWS.md.
Challenges
- Session continuity. The first version ran stateless and minted a new session id on every call, so follow-ups landed in new conversations.
tests/test_mcp_session.pynow guards this. - Lambda host header. The SDK's DNS-rebinding protection returns "421 Invalid Host header" for Function URL hosts until it is explicitly disabled (
MCP_ALLOW_ANY_HOST=true, Lambda only). - Lambda lifespan. The SDK's ASGI app needs its lifespan started. A per-request adapter hit "Task group is not initialized".
- Buffered responses. Streamable HTTP over a buffered Lambda response gives up server-initiated streaming, which forces JSON-response mode.
- Voice latency. A remote answering service forced a hard 7-second budget, one retry and a 256 KB cap.
- Uneven browser speech support. Typed input had to be a first-class path.
- SAM packaging.
CodeUriandHandlermust agree on the package root. Our first draft disagreed.
What's next (roadmap: in development, not in this demo)
None of the findings in this section are produced by the submitted project. Nothing here runs in the demo, the video or the hosted endpoint. Behind the same voice we are connecting the full 3Dogs Nexus engine, which works the data before you ask. Computed from the same fictional data, by an engine that is not in this demo, it would raise these findings without being asked:
- Central's backpack return rate went from 1.0% to 3.9% between Q1 and Q2 2026.
- Tents alone fell $145,752 from Q1 to Q2 2026, more than the whole company's $93,654 drop.
- On the six-quarter trend, Q3 2026 lands near $744K, about 3% below Q2's $769,742.
The engine is planned to work like this: a qualifying step checks whether the data can answer the question, several independent answerers reply, every figure is rechecked against the data before anything is spoken, and each verified correction becomes a test.
Testing instructions
No install needed: connect any MCP client (e.g. MCP Inspector, transport "Streamable HTTP") to https://rkko3li742dagcpa3f4os6zf640yuitu.lambda-url.us-east-1.on.aws/mcp , initialize, and call ask_northstar. To run locally (Python 3.12): clone https://github.com/DKJager/northstar-ask , python3.12 -m venv .venv && . .venv/bin/activate && pip install -r requirements.txt, then SAMPLE_MODE=true python web_sim/bridge.py and open http://127.0.0.1:8765/ . Type these exactly: "Which region sold the most tents this year?" / "And last quarter?" / "Break that down by sales channel." / click Weekly brief / click Correct me, then "Which region sold the most sleeping bags last quarter?" / "Are returns hurting our margins in the Central region?" (low-confidence case). All data is fictional; every reply starts "Sample answer:".
Built With
- aws-lambda
- aws-sam
- css
- fastmcp
- html
- javascript
- lambda-function-urls
- mcp
- python
- streamable-http
- uvicorn
- web-speech-api
Log in or sign up for Devpost to join the conversation.