Inspiration

Every team has heard it: "I'll send that over by Friday." Then Friday passes. Meeting tools give you transcripts and summaries, but neither one tells you that the invoice nobody volunteered to pay is now a day late, or that "I'll try to update the incident policy, maybe" was never a real commitment. A dropped promise rarely costs much on its own. The damage comes from what it touches: a missed contract renewal, a failed audit, a breached SLA. We wanted the assistant already sitting in the room to catch those promises as they're made.

What it does

Obligate is an MCP server for Alexa+ that turns spoken commitments into tracked obligations, each with an owner, a deadline and a risk level.

  • "Alexa, wrap up the meeting." Obligate pulls every commitment out of the transcript: "I'll..." promises, "Raj, can you..." requests (and whether they were confirmed), "Leo will..." assignments, and "we need to..." tasks that nobody claimed.
  • It understands how people say deadlines: "by Friday", "next Tuesday", "end of month", "in two weeks", "it's already late".
  • It scores risk on the things that make promises slip: no owner, asked but never confirmed, hedged language ("I'll try"), overdue or due within 48 hours, and compliance-sensitive topics such as contracts, audits, GDPR/HIPAA, security, invoices and renewals.
  • "What could go wrong?" gets a ranked, spoken risk report. "Give the SOC 2 report to Priya by November 14" fixes a risk by voice, and Alexa tells you the risk dropped from high to medium.
  • Briefings, lists, completions ("Raj sent the renewal contract") work by fuzzy-matching what you say, so nobody has to remember an ID.
  • It keeps state across sessions. Obligations persist from meeting to meeting, so Monday's "what does Raj owe?" includes the promise he made in Thursday's vendor review. Obligate is a context-aware add-on with memory, not a single-turn Q&A bot.
  • A live dashboard shows every obligation, its source quote and why it's risky, for an Echo Show or a team screen.

In our sample vendor-review meeting, Obligate catches all 8 commitments. That includes two that nobody owned and an overdue invoice no one had flagged.

How we built it

  • MCP server in Python on the official MCP SDK, served over Streamable HTTP at /mcp. It negotiates spec 2025-11-25 (and newer).
  • 7 tools designed for voice first. Each returns a speech string written to be read aloud, plus structured data for screens and agents. Read-only tools carry readOnlyHint annotations, and the server ships instructions so the Alexa+ LLM knows when to call which tool.
  • Extraction has two engines. Amazon Bedrock (Converse API, Amazon Nova by default) handles messy real-world transcripts. A deterministic rules engine handles clear speech, works offline and serves as the automatic fallback, so a meeting is never lost when the LLM call fails.
  • Risk scoring is a single, explainable scorer applied to every obligation. Each risk comes with plain-language reasons, never a black-box number.
  • SQLite for zero-setup persistence. A Dockerfile for AWS App Runner or Fargate.
  • Voice console (/voice): an Alexa+ simulation that uses browser speech recognition and synthesis and talks to the real MCP endpoint over JSON-RPC, beside the live dashboard.
  • Tests: unit tests for extraction, dates, risk and the Bedrock path (including fallback), plus an end-to-end test that drives every tool through a real MCP client over Streamable HTTP.

Challenges we ran into

  • Who owns "we"? "We need to renew the SOC 2 report" sounds like a plan but has no owner. We treat these as the most dangerous kind of commitment instead of ignoring them.
  • Requests vs. commitments. "Priya, can you draft the consent update?" only becomes Priya's obligation once she says "yes, on it". We track the follow-up turn to upgrade it.
  • Writing for the ear. Screen-style output sounds robotic when spoken. We rewrote every response to be heard: owner first, short clauses, and the reason given only when it adds something new.
  • MCP SDK 2.x renamed core server classes (FastMCP became MCPServer). We support both 1.x and 2.x.
  • Exposing a local MCP server safely. DNS-rebinding protection is on by default, so we added an explicit allow-list for tunnel or cloud hostnames rather than turning it off.

Accomplishments that we're proud of

  • All 8 commitments in our test meeting are captured with the correct owner, deadline and kind, including confirmed requests and unowned team tasks.
  • Fixing a risk by voice and hearing "Risk dropped from high to medium" feels like the product working as intended.
  • Every risk explains itself, so a compliance lead can trust it.

What we learned

  • MCP is a great fit for voice. Good tool descriptions and server instructions do most of the intent-routing work, so the server can stay small and focused.
  • The most valuable signal in a meeting isn't what was said. It's what was left unowned.

What's next

  • Speaker-attributed transcripts straight from Alexa+ meetings.
  • Proactive Alexa+ nudges the morning an obligation is due.
  • Sync to calendars, Jira and Slack, so obligations land where teams already work.
  • DynamoDB and per-team auth for multi-tenant deployment, plus audit-ready exports for compliance teams.

Built With

  • alexa-plus
  • amazon-bedrock
  • docker
  • model-context-protocol
  • python
  • sqlite
  • starlette
  • streamable-http
  • uvicorn
Share this project:

Updates

Submission history