Inspiration
I work on an IT help desk. Most calls end in one of two places: the service is down and nobody told the caller, or one of five standard fixes works. At home it's the same, except the help desk is whichever family member "does computers." I wanted Alexa+ to do the first hour of that job: check whether it's really broken, walk you through the fix calmly, and when it can't be fixed by voice, hand a human a ticket with the homework already done.
What it does
Deskside is an MCP server that gives Alexa+ a home and small-office IT help desk.
- "Is Slack down?" It reads the vendor's official status feed live (15 services, including Zoom, Slack, Gmail, Outlook.com, Teams, Jira, GitHub and Dropbox) and says either "it's not you" or "let's troubleshoot."
- Guided fixes, one spoken step at a time for internet and Wi-Fi, printers, email, video calls, slow computers and sign-in problems. Steps that depend on a service check its live status in the middle of the flow.
- It remembers where you stopped. Say "my email still won't send" two days later and it picks up at the exact step.
- Tickets with the trail. When a fix needs hands on the device, Deskside opens a ticket listing every step already tried.
- It keeps working after you hang up. A background watcher re-reads outages every ten minutes and resolves the ticket when the vendor recovers. Scheduled follow-ups run the same way. The next "how's our tech today?" starts with what changed while you were away.
- On a screen, an MCP App. Ticket and briefing tools ship an interactive board (live service health and open tickets, with a "Mark fixed" button that calls back into the server).
- An Agent Skill that teaches any agent the help-desk method.
How I built it
- MCP server on Cloudflare Workers with
@modelcontextprotocol/server2.2.0 andcreateMcpHandler: Streamable HTTP, protocol 2025-11-25, plus the 2026-07-28 revision, from one endpoint. - State in Cloudflare D1, scoped per workspace: troubleshooting sessions, tickets with history, device inventory, the services a place relies on, and an event log for briefings.
- Background work with a Worker cron trigger (every 10 minutes), batched to stay inside the free plan's per-run limits.
- MCP Apps: tools declare
_meta.ui.resourceUri, and the server servesui://deskside/board.htmlastext/html;profile=mcp-app. Tested end to end with the officialAppBridgein a minimal host page (/apps.html). - Simulated Alexa+: an Echo Show page that is itself an MCP client over Streamable HTTP. Workers AI (Llama 4 Scout) chooses the tools, the browser listens, and Deepgram Aura-2 on Workers AI speaks (cached per sentence, with a MeloTTS fallback).
- Tests: 20 end-to-end tests through the official MCP client against the live server, covering every tool and every guided-fix path.
Challenges I ran into
- No real Alexa+ access for entrants, so I built a faithful simulation: a real MCP client, not a mock.
- Models that pretend. On the same test script, one free model answered "I've saved the printer" without calling any tool. I measured four models and kept the one that called the right tool every time. I also made the server the source of facts: every tool returns the sentence to speak, built from real data, so a model can't round "ticket 4" into "ticket 5."
- Keeping a voice flow on rails. Short answers like "no, still nothing" now go straight to the active fix, and restating the problem resumes it instead of counting as "no."
- Four different status-feed formats, and several vendors had moved their status pages. I published the adapters as a separate open-source library: https://github.com/danielhagever/status-feeds
Accomplishments that I'm proud of
- A ticket opened during a real outage resolves itself when the vendor recovers. I tested this against Atlassian's live status.
- The MCP App round trip works: a button in the view closes a ticket on the server through the host bridge.
- It degrades instead of dying: if the language model is unavailable, a keyword router keeps the main requests working.
What I learned
The hard part of a voice agent isn't the model. It's deciding which facts the model is allowed to phrase, and when the conversation belongs to a flow instead of to the model.
What's next
- More playbooks (smart TV, Bluetooth, phone storage) and per-device playbooks from the remembered models.
- Notifying the household's tech person by email when a ticket is escalated.
- Running on real Alexa+ as soon as a developer path opens.
Built With
- agent-skills
- cloudflare-d1
- cloudflare-workers
- deepgram
- mcp-apps
- model-context-protocol
- typescript
- web-speech-api
- workers-ai
Log in or sign up for Devpost to join the conversation.