Talk2Build
Integrates with Alexa+ as a voice front-end via MCP for meeting utterances, and supports Amazon Bedrock Converse as an LLM provider for planning meeting turns and task composer.
Provides tools for fetching git log and git diff from a workspace repository, enabling incident investigation, change tracking, and context for meetings.
Supports OpenAI-compatible /chat/completions endpoints as an LLM provider for planning meeting turns and task composer, with fallback to deterministic classifier on failure.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Talk2Build
Talk2Build is a meeting room with an agent in it, built for the Alexa+ track of the Amazon Developer Hackathon (amazonappdev2026), plus the AWS Builder and Open Source mini challenges. People talk; Alexa+ (a self-hosted MCP server on spec 2025-11-25 over Streamable HTTP, driven by a simulated Alexa+ client in the web app) turns real decisions into plan, design, feasibility and evidence cards while the meeting goes on. Chatter is parked. Anything that writes code waits for a spoken yes. Ending the meeting writes minutes.
Demo video (2:26): https://youtu.be/oLMys1SccUk. It shows the pizza game jam: three people specify Space Cat Courier, a tiny canvas game, and after a "Yes" Talk2Build writes docs/spec.md from their decisions, scaffolds a playable prototype from its game-jam template, and runs node --test (7/7).
For judges
About five minutes, no API keys, no account:
nvm use 22 # Node.js 22+ is required (node:sqlite)
npm install
npm test # 160+ tests, including an HTTP end-to-end game-jam meeting and the MCP transport
npm run build
MCP_DEMO_TOKEN=$(openssl rand -hex 16) TALK2BUILD_SESSION_SECRET=$(openssl rand -hex 24) npm startOpen http://127.0.0.1:43123, click Start meeting, then More → Play the pizza game jam (v2 demo). What to look for:
A Plan card under Maya's name; architecture and wireframe SVGs inline in their cards and on the shared stage.
"Phaser or PixiJS?" → an Evidence card with live GitHub and npm numbers and their source URLs (needs internet; set
TALK2BUILD_LIVE=0for tests offline)."Is the pizza here yet?" is parked, not planned.
The scaffold job waits for "Yes", then shows
node --test: 7/7 passing. Click ▶ Play the prototype or watch it on the shared stage.End writes minutes.
To exercise the MCP server directly as an MCP client would (initialize → tools/list → tools/call):
TOKEN=... # the MCP_DEMO_TOKEN you started with
curl -si http://127.0.0.1:43123/mcp -H "authorization: Bearer $TOKEN" -H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"judge","version":"1"}}}'
# then send tools/list with the returned MCP-Session-Id and MCP-Protocol-Version: 2025-11-25 headersHonest scope: by default the demo runs in mock mode. Meeting turns are planned deterministically and agent output comes from recorded fixtures, so no model is called. The game comes from a template written ahead of time; the meeting picks it and the spec is generated from the meeting. The evidence numbers and the test run are real. Bedrock is wired in (src/lib/llm/bedrock.ts) and runs when you supply AWS credentials; see Live Amazon Bedrock below.
Related MCP server: relay
Live transcription (real speech)
The scripted game jam is the showcase, but the room also takes real speech. Both paths feed the same meeting-turn pipeline as typed lines, with the speaker taken from the Speaking as picker. Each transcript line is tagged with how it arrived (mic · Whisper, mic · browser).
Mode | How | Key needed |
Server, local Whisper |
| none |
Browser, Web Speech API | Used when server transcription is off. Live interim captions; each final phrase becomes a turn. Availability depends on the browser (Chrome sends audio to its own speech service) | none |
Amazon Transcribe (streaming) |
| AWS |
Set up local Whisper once:
python3 -m venv .venv-stt && .venv-stt/bin/pip install faster-whisper numpy # ffmpeg must be on PATH
TALK2BUILD_STT=whisper TALK2BUILD_WHISPER_PYTHON=$PWD/.venv-stt/bin/python npm start
# optional: TALK2BUILD_WHISPER_MODEL=small.en (default base.en; the model downloads on first use)Send a recorded clip without a browser:
curl -s -X POST "http://127.0.0.1:43123/api/meetings/$MEETING/transcribe?speaker=Maya&language=en" \
-H 'content-type: audio/wav' --data-binary @line.wavThe response has the transcription (text, segments, latency) and the meeting turn it produced. GET /api/stt reports the active provider. Speaker attribution is manual for now (one speaker per clip, from the picker); diarization is future work.
Fully local, no keys (real model)
Everything real, nothing scripted, no account: local Whisper for speech and a local model through any OpenAI-compatible server (Ollama or llama.cpp).
ollama serve & # or llama.cpp: llama-server -m model.gguf --port 11434
ollama pull qwen2.5:1.5b # or import a GGUF with `ollama create`
LLM_PROVIDER=local TALK2BUILD_STT=whisper TALK2BUILD_WHISPER_PYTHON=$PWD/.venv-stt/bin/python \
MCP_DEMO_TOKEN=$(openssl rand -hex 16) TALK2BUILD_SESSION_SECRET=$(openssl rand -hex 24) npm startLOCAL_LLM_BASE_URL (default http://127.0.0.1:11434/v1), LOCAL_LLM_MODEL (default qwen2.5:1.5b), LOCAL_LLM_TIMEOUT_MS (45000), LOCAL_LLM_MAX_TOKENS (512). The planner and the in-room agent both use it. Measured results, including what went wrong: docs/live-local-check.md. What is real vs scripted vs blocked by keys: docs/reality-audit.md.
Production start
npm run dev is for development only. For demos, recordings and judging, use the production build:
Variable | Required | Notes |
| yes | Random, at least 16 characters. Bearer token for |
| yes | At least 32 characters. Signs meeting session cookies |
| no | Data directory (SQLite + workspaces). Default |
| no |
|
| no | Delay between card updates (the video used 650) |
| no | Extra comma-separated origins allowed to call |
npm run build && npm start serves on port 43123. NODE_ENV=production always requires the bearer token on /mcp.
Live Amazon Bedrock
The planner and the in-room agent call Bedrock Converse through @aws-sdk/client-bedrock-runtime when credentials are present. Default model amazon.nova-lite-v1:0 (BEDROCK_MODEL_ID overrides). To check one live call with your own account:
AWS_REGION=us-east-1 AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... npm run bedrock:smokeIt prints the plan, model, region and latency, or exits 2 without calling anything when no credentials are set. To run whole meetings on Bedrock, start the server with the same AWS variables and TALK2BUILD_AGENT=bedrock (do not set LLM_PROVIDER=mock). Enable model access for Nova Lite in the Bedrock console first. A Bedrock failure falls back to the deterministic path and is marked degraded.
The UI follows a desktop meeting-client layout (study in docs/design/). The other scripted modes are below.
Run it (development)
npm install
npm test
npm run devOpen http://127.0.0.1:43123. No API keys. Talk2Build needs Node.js 22 or newer because meetings are stored with node:sqlite. .nvmrc is 22. npm test, npm run dev, and npm run build check the version first and stop with that requirement on Node 20 instead of exiting from a missing module. npm run dev also sets NODE_OPTIONS=--experimental-sqlite.
On the meeting home:
Start meeting opens a room with you, Maya, Chris, and Priya. Play a working session runs a billing-export conversation. The right panel fills in a plan, an architecture sketch, a settings wireframe, an API spec, a feasibility check, and a research card that cites yesterday's decision. Lunch is parked. Tests wait until someone says yes.
Join takes a code. Your room is
TB-ROOM. Schedule leaves a meeting on the list.Incident demo resets the 2:17 AM room. Play the 2:17 script runs the eight beats.
stopand不对roll back one checkpoint.Task desk (
/tasks) is the secondary thread view.
Meetings, tasks, messages, and artifacts are stored in data/talk2build.sqlite. Workspace files live under data/workspaces/. Both are gitignored.
Architecture
flowchart LR
home["Meeting home"] --> room["Live room"]
room --> turn["POST /api/alexa/turn"]
turn --> alexa["AlexaPlusClient"]
alexa --> mcp["POST /mcp"]
mcp --> tools["MCP tools"]
tools --> panel["Plan, design, verify, research"]
desk["Task desk"] --> chat["POST /api/threads/:id/messages"]
chat --> tools
tools --> db["SQLite meetings and tasks"]
tools --> files["Workspace files"]
planner["Mock, Bedrock, or Nebius"] --> turnAlexa+ is the voice front-end. src/alexa/client.ts is a Streamable HTTP client for MCP protocol 2025-11-25. The web app calls it for every meeting utterance. A device uses the same server through alexa/addon-package/addon.json (integrations[].type is MCP).
The task desk streams a plan, each tool call, and the reply as server-sent events. The right-hand task monitor shows the to-do list, the files written for that task, and the MCP tools that ran.
Tool | What it does |
| Store a line and label it |
| Marks on the timeline, and the link between them |
| Side talk, kept out of the requirement pool |
| Decisions, the pool, action items |
| Asks before a diff, a PR, a scaffold, a test run, or issues |
| Markdown in the workspace. Docs do not wait |
| Live plan card: goal and milestones |
| Architecture diagram, UI wireframe, or API spec while design is discussed |
| Feasibility against earlier decisions. The test suite still waits for a yes |
| References from past meetings and saved preferences. Mock mode does not invent web citations |
| A timely reminder, and a preference the next meeting can use |
| Decisions and action items across meetings, including yesterday |
| One markdown issue per open action item |
| Minutes back onto the task |
| A live room and a join code |
| Incident meetings use the Redis-pool fix. Other workspaces get real files and |
| Incident fixtures, or |
| Workspace files. Paths cannot escape the folder |
| Status line, and |
Small writes happen immediately. Scaffolding, test runs, issue creation, and pull requests wait for a yes.
Models
Meeting turns still classify through LLM_PROVIDER (mock unless you set one). The in-room agent is separate. It picks a backend in this order:
TALK2BUILD_AGENTif set (bedrock,nebius,openai,local, ormock)Otherwise
LLM_PROVIDERwhen that is setOtherwise Bedrock when both
AWS_ACCESS_KEY_IDandAWS_SECRET_ACCESS_KEYare set, or whenAWS_BEARER_TOKEN_BEDROCKis set. One key alone is skipped, with a log line, and the agent falls through to Nebius, OpenAI, or the fixture modelOtherwise Nebius when
NEBIUS_API_KEYis present, or any OpenAI-compatible server whenOPENAI_API_KEYis presentOtherwise the recorded-fixture model. That path does not call the network
Variable | Role |
| Bedrock key pair. Both the access key id and the secret are required |
| Bedrock model. Default |
| Nebius Token Factory. Default base URL |
| Any OpenAI-compatible |
| Local OpenAI-compatible server (Ollama, llama.cpp). No key. Verified live with |
| Force the fixture model even if keys are set |
| Delay between card updates. Tests force this to 0 |
With no keys, plan, design, verify, and research still run as background jobs and write files under the meeting workspace.
If the room compares technologies ("which is more popular, Express or Fastify?"), an Evidence card fetches GitHub stars, open issues, latest release, and last push, plus npm weekly downloads or PyPI recent downloads, and the documentation URL listed by the registry. Every number keeps its source URL and fetch time. A failed call is shown as a failure. The model does not fill in missing numbers. Tech selection and requirement review are written only from those rows. The same jobs are drawn as a decision tree: the goal at the root, topics as branches, and alternatives side by side. After the evidence is in, Architect and Skeptic join the grid and can be called with @architect and @skeptic.
TALK2BUILD_LIVE=0 skips the tests that call the public APIs. They run by default when the network is up.
A code job only scaffolds, writes docs/patch.diff, and drafts a pull request after someone says yes. Research sources are earlier decisions and saved preferences. URLs that were not already in the context are dropped.
The task composer can still pin Mock, Bedrock, or Nebius per thread. If Bedrock or the OpenAI-compatible endpoint fails, a meeting turn falls back to the deterministic classifier and the response is marked degraded.
See .env.example. TALK2BUILD_HOME moves the SQLite file and the workspaces.
Alexa+
The hackathon asks for a self-hosted MCP server on spec 2025-11-25 or later, Streamable HTTP, and for the repo to call that technology rather than only mention it.
The server is
/mcp, implemented insrc/mcp/handler.ts.Meeting utterances go through
AlexaPlusClientover HTTP.npm testincludes that round trip.alexa/addon-package/addon.jsonis the add-on manifest.integrations[0].typeisMCP.
To put it on a device:
Serve the app on a public HTTPS URL. A tunnel such as cloudflared is enough for development. Alexa+ will not call localhost.
Replace every
https://example.com/...value inaddon.jsonwith that origin. Icons and the carousel already exist at/alexa/*.png. Privacy and terms are/privacyand/terms.Point
integrations[].config.endpoints.default.uriathttps://YOUR_HOST/mcp.Install the Alexa AI CLI, run
alexa-ai configure, thenalexa-ai deployfrom this repo once the manifest paths match what the CLI expects (addon-package/addon.json).Auth is off for local development. Set
MCP_REQUIRE_AUTH=trueto require a bearer token. Unauthenticated/mcpcalls then return401with noWWW-Authenticateheader. Protected-resource and authorization-server metadata are under/.well-known/, and the token endpoint speaks OAuth 2.1 authorization-code + PKCES256. The local authorization server auto-approves. Do not use it as a production identity provider.NODE_ENV=productionalways requires auth, even whenMCP_REQUIRE_AUTHis unset. SetMCP_DEMO_TOKENto a random secret of at least 16 characters. The public valuetalk2build-demois rejected. The same bearer token is required onPOST /api/meetings/:id/jobs/:jobId/cancel. The in-room cancel button does not send that token; it cancels through a server action. SendAuthorization: Bearer $MCP_DEMO_TOKENfor the HTTP cancel route and for/mcp.
npm run mcp serves the same routes headless, bound to 127.0.0.1 unless you set HOST.
Round-trip tool calls in mock mode are well under the 500 ms Alexa+ budget. A live Bedrock plan is extra latency on top of the tool call.
Tests
npm testClassifier and incident fixtures, including the 50 → 20 diff and the missing timeout.
A generic “root cause” on a normal meeting does not open the Redis pull request. The scripted 2:17 AM lines still do.
MCP transport: session, protocol header, SSE, origin rejection, and the PKCE login.
Provider adapters for Bedrock and the OpenAI-compatible API, with injected responses.
SQLite reload, a real
node --testin a workspace, and path escape rejection.Chat: yesterday's decision, then issues on disk after a yes.
A meeting that ends posts minutes onto its task, including the completion report.
Agent jobs: recorded fixtures, concurrent runs, cancel, the yes gate, and a local OpenAI-compatible stub.
The scripted postmortem through the Alexa+ client, plus rollback on
stopand不对.
Docs for the submission
Shot list for the video, at or under three minutes
License
MIT. See LICENSE.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Autonomous dev team steered from chat: plain-English requests in, tested merged PRs out.
Source control for coding agents: declare an intent, settle overlaps before code, verify each push.
Bring meeting decisions, tasks and user stories into your AI editor (Claude, Cursor, Copilot).
Design, build and run teams of AI agents with checked handoffs between them.
Related MCP Servers
- FlicenseAqualityCmaintenanceA local-first MCP server that handles daily work tasks through your AI assistant: converts meeting notes into todos, manages todo lifecycle, tracks work hours, generates daily/weekly reports, organizes files via move-only operations, and diagnoses dev environments, all guarded by a human-maintained preview/apply safety model.25-
- AlicenseNot gradedqualityBmaintenanceEnables any coding model or session to pick up where a previous one left off by keeping handoff state (START / SPEC / DECISIONS / TASKS / LOG) in the repository and projecting each harness's entry files from a single source. It also blocks commits until structural checks and the project's own executable acceptance tests actually pass, providing init, onboarding, session briefing/exit, verification, sync, and task-claim tools.16 npm1MIT
- AlicenseNot gradedqualityCmaintenanceLets an AI coding agent journal its edits, commands, checkpoints, intents and test evidence locally, then compile them into a machine-readable Change Package plus a human-readable review summary with statically computed risks. Optionally publishes the result as a GitHub Draft PR with inline comments on the exact diff lines, always gated behind explicit confirmation and redaction.6 npmAGPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables development agents to keep persistent memory: proposing and reviewing workspace-scoped content, running hybrid search over accepted sources, and resuming projects with auditable history and provenance. It exposes 32 MCP tools over stdio and authenticated Streamable HTTP, with optional embeddings and rerank.Apache 2.0