Inspiration

I'm a Spanish speaker learning English, and the hardest part was never grammar — it was speaking out loud with nobody there to correct you in the moment. Most English-coaching apps give you multiple choice, not a voice. For the "Build, Ship, Shape" hackathon I wanted to pair that problem with the Alexa+ MCP Toolkit track and AWS's AI stack (Bedrock, Transcribe, Polly) to build something that actually listens and talks back.

What it does

English Coach AI is a voice-based English pronunciation coach, built as an Agent Skill for Alexa+. You say a target phrase out loud, and it: transcribes your speech, scores your pronunciation, highlights exactly which words you mispronounced (and which ones you keep getting wrong across attempts), gives you corrective feedback in Spanish explaining how to fix it, speaks that feedback back to you naturally, and can suggest a colloquial expression tied to what you just practiced or generate new practice phrases at your level — all through real MCP tool calls.

How we built it

The frontend is a React app that opens a WebSocket connection to a Lambda orchestrator. That orchestrator is a real MCP client: on every analyze or suggest_expression request, it opens a Streamable HTTP session against a separate MCP server Lambda (its own public Function URL) and calls its tools (analyze_pronunciation, suggest_expression, generate_phrases) over the protocol — it doesn't reimplement any of that logic locally. The MCP server runs the actual voice pipeline: audio lands in S3 via a presigned URL, Amazon Transcribe turns it into text, Amazon Bedrock scores pronunciation and drafts feedback, and Amazon Polly speaks it back. Auth is Cognito, per-user progress lives in DynamoDB, and the whole thing — frontend included (S3 + CloudFront) — is deployed as one AWS SAM / CloudFormation stack, 100% serverless.

Challenges we ran into

Chaining multiple AWS AI services behind a single WebSocket request turned out to be a real latency puzzle: Transcribe alone can take up to ~25s to finish a job, and by the time Bedrock and Polly ran afterward, we occasionally blew past the orchestrator Lambda's timeout — the frontend would just hang on "processing" with no error, because the Lambda got killed before it could even report failure. Tuning that chain (and understanding where each timeout actually lived — API Gateway's WebSocket integration, the Lambda itself, and the MCP HTTP client) was the trickiest part of the whole build. Getting audio upload working was its own fight too: MediaRecorder's mimeType varies by browser, which broke S3's presigned URL signature until we switched to SigV4 and stopped signing a Content-Type.

Accomplishments that we're proud of

The MCP server isn't just mentioned in the code — it's invoked live, over the actual protocol, on every request. I verified this independently with the official MCP Inspector (the same tool used to test Alexa+ MCP add-ons): connecting it directly to my deployed server shows the real tools/list and tools/call traffic, with Bedrock-backed responses coming back in under a second. I'm also proud that the feedback is bilingual by design — English pronunciation coaching explained in Spanish — because that's the actual gap for the audience I built this for.

What we learned

I learned the Streamable HTTP MCP transport from scratch (versus the more common stdio setup), how Alexa+'s MCP Toolkit differs from its Category SDK (and where "Category SDK: MCP" sits in between), and a lot about tuning Lambda/API Gateway timeouts when chaining multiple async AWS AI services behind one user-facing request.

What's next for English Coach

Deeper Alexa+ integration beyond the web simulation (real device testing once MCP Toolkit access opens up further), a ui:// MCP Apps card for richer in-conversation feedback instead of plain JSON, persistent cross-session progress tracking surfaced back to the user, and a larger expression/slang corpus organized by context (travel, work, social media).

Built With

Share this project:

Updates

Submission history