Standup Voice
README.md
# Standup Voice
**"Alexa, what's my standup?"** A voice standup assistant for engineers. Your standup is built from what you actually shipped on GitHub, plus the work you mention out loud during the day.
Built for the **Alexa+** track of *Build, Ship, Shape: Amazon Developer Hackathon*. It is:
- a self-hosted **MCP server** on **Streamable HTTP** (TypeScript SDK v2, MCP spec 2026-07-28, which is newer than the required 2025-11-25),
- an **Agent Skill** (`skill/standup/SKILL.md`) that teaches any agent when and how to use it,
- a **simulated Alexa+ web app**: you talk, an agent discovers the tools over MCP and calls them, and the answer is spoken back.
## How it works
```
you (voice) ──▶ web app ──▶ agent (Claude, or offline intents)
│ MCP over Streamable HTTP
▼
standup MCP server /mcp
get_standup · add_note · list_items · complete_item · file_issue
│ │ │
GitHub activity Claude extraction GitHub issues
(merged PRs, commits, closed, of spoken notes into (deduped, only
assigned, review requests) task/bug/blocker/... when you say yes)
```
- **Done** comes from real activity: merged PRs, closed issues and commits since your last standup, each dated by when it happened.
- **Next** comes from assigned issues, review requests, and tasks you mentioned ("I need to fix the login redirect").
- **Blockers** come from what you say ("I'm blocked on the OAuth secret") and from your own PRs waiting on review for over a day.
- **Voice-first output**: `get_standup` returns a `spoken` version (three items per section, about 20 seconds) alongside markdown for the screen.
## Quick start
```bash
npm install
npm run serve # http://localhost:8787 · MCP at http://127.0.0.1:8787/mcp
```
Open the page in Chrome or Safari, tap the ring and talk, or use the suggestion chips.
| Env var | |
|---|---|
| `ANTHROPIC_API_KEY` | Enables the Claude agent and Claude note extraction. Without it, offline keyword intents run the same MCP tools. |
| `STANDUPBEE_EXTRACTOR` | `anthropic` · `bedrock` · `rules` |
| `AWS_REGION`, `STANDUPBEE_BEDROCK_MODEL` | Claude on Amazon Bedrock (default `anthropic.claude-opus-5-5`) |
| `GITHUB_TOKEN` | GitHub access; falls back to `gh auth token` |
| `STANDUPBEE_REPO` | Default `owner/name` for `file_issue` |
| `STANDUPBEE_GITHUB=0` | Turn off GitHub sync |
### Things to say
| You say | Tool called |
|---|---|
| "What's my standup?" · "What did I do this week?" | `get_standup` (with `days` for "this week", "last 3 days", Mondays) |
| "I need to fix the login redirect bug" | `add_note` → saved as a bug |
| "I'm blocked on the OAuth client secret" | `add_note` → saved as a blocker |
| "Anything blocking me?" | `list_items` |
| "Mark the redirect bug done" | `list_items` → `complete_item` (Claude agent or any MCP client) |
| "File the OAuth blocker as an issue" | `file_issue`, only after you confirm (Claude agent or any MCP client) |
Without `ANTHROPIC_API_KEY` the web page runs offline keyword intents that cover the first four rows. Every row works from an MCP client such as Claude Code.
### Use it from any MCP client
```bash
claude mcp add --transport http standup http://127.0.0.1:8787/mcp
```
## Tests
```bash
npm test # includes a real MCP client ↔ server round trip over HTTP
npm run typecheck
```
## Also included
`src/cli.ts` + `src/bee.ts` form a batch mode that reads conversations from a Bee wearable through `@beeai/cli`. It was built first, for the Bee track. It is kept because the extraction pipeline is shared (`npm run demo` runs it on a recorded sample day).
## Hackathon notes
- [FRICTION_LOG.md](FRICTION_LOG.md): what got in the way while building, with workarounds and suggestions.
- Licensed under [MIT](LICENSE).
## Privacy
The server binds to localhost and checks Host/Origin headers. Notes go only to the model provider you configure, and nowhere at all with the offline extractor. Data lives in `data/state.json`.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues