-
-
The City Service Generator dashboard, where users input a City and Service to instantly create a dynamic landing page.
-
The Streamlit frontend where the owner speaks their command. The AI transcribes the voice and sends it to the MCP server.
-
The MCP server responds with a Draft ID and the changes. The AI is blocked from publishing until owner explicitly clicks Confirm & Publish
-
The live page updated! A custom brown warning banner is injected via REST API, preserving the original plugin layout.
Inspiration
Local service business owners (plumbers, dentists, painters) often struggle to update their websites. They have to navigate complex dashboards or hire developers just to change their opening hours or announce a holiday. We wanted to build a solution that makes updating the web as easy as talking to a virtual assistant.
What it does
VoxCity is a voice-powered AI agent that allows business owners to update their live WordPress pages using just their voice. It uses a custom, self-hosted "MCP (Model Context Protocol) server" (compatible with the Alexa+ track) to securely bridge a Streamlit frontend to a WordPress backend.
The core feature is the "Human-in-the-Loop safety workflow". When the owner says, "Change my opening time tomorrow to 11 AM," the MCP server doesn't immediately publish the change. Instead, it creates a draft, shows a preview, and requires the owner's explicit confirmation before hitting the WordPress REST API.
How we built it
- MCP Server (Backend): Built in Python using the official MCP SDK. It runs as a self-hosted web service on Render using Streamable HTTP.
- Voice Interface (Frontend):Built with Streamlit for capturing voice input, transcribing it, and displaying the draft-confirmation workflow.
- WordPress Integration: We built a custom REST API endpoint in WordPress (using the Code Snippets plugin) to securely receive the approved updates and inject a custom-styled banner into the live page without breaking the existing layout.
- City Service Generator: The foundation is a custom WordPress plugin that dynamically generates local landing pages based on a City and Service.
Challenges we ran into
- Browser Security: Browsers strictly block microphone access inside
http://iframes. We solved this by deploying Cloudflare HTTPS tunnels for local development and adding a native browser microphone fallback button. - WordPress API Limits: WordPress blocks external scripts from saving custom metadata. We solved this by writing a custom REST API endpoint in PHP to handle our specific payload.
- MCP Auth: Working with Streamable HTTP and ensuring the MCP server remained stateless but secure during the draft-confirmation process.
Accomplishments that we're proud of
- Building a fully functioning MCP server that deploys to the cloud.
- Creating a seamless, safe workflow that guarantees an AI agent cannot accidentally break a live website.
- Successfully bridging a modern AI stack (Python/Streamlit) with a legacy CMS (WordPress).
What we learned
- Deepened our understanding of the Model Context Protocol (MCP) and how AI agents interact with external tools.
- Learned how to build custom WordPress REST API endpoints and bypass strict CORS/authentication policies.
- Gained experience deploying Python servers to the cloud.
What's next for VoxCity
- Connecting the MCP server directly to a real Amazon Alexa+ device using an actual Alexa Skill.
- Expanding the voice commands to allow image uploads and full blog post generation.
- Supporting multiple languages for local business owners globally.
Built With
- alexa+concept
- amazon
- api
- cloudflare
- fastapi
- html/css/javascript
- mcp
- php
- python
- render
- rest
- streamlit
- wordpress
Log in or sign up for Devpost to join the conversation.