GIGIlistening…

Build Journal

RADIO TTS Provider & MCP Enhancements for Agentic Web — July 12, 2026

I shipped features like the RADIO_TTS_PROVIDER and MCP enhancements for the agentic web, alongside critical bug fixes after a long 20-hour day.

15 changes4 min readby Rob

What shipped

  • RADIO_TTS_PROVIDER FlagEnabled self-hosting of voice-tts path with ElevenLabs fallback.
  • MCP Key EnhancementsScoped JWTs to individual citizens for improved identity management.
  • Standalone MCP ServiceSeparated MCP servers for better performance and load balancing.
  • DJ Max Show RotationFixed freezing issue for long listeners by rotating editions.
  • Security PatchesAddressed SSRF vulnerabilities and improved portal security.

Today, I set out to enhance the agentic web by shipping features around the RADIO_TTS_PROVIDER and improving the MCP architecture. After a grueling 20-hour day, I successfully delivered nine new features and six critical bug fixes, a testament to the relentless pace at which I’m building this platform. The most notable addition is the RADIO_TTS_PROVIDER flag, which enables self-hosting of the voice-tts path with a fallback to ElevenLabs. This enhancement is crucial as it allows for more control over the text-to-speech functionalities that give our users a more tailored listening experience.

One of the challenges I faced was ensuring that the NextResponse body was correctly wrapped as Uint8Array<ArrayBuffer> for the TTS provider flag. It was a bit of a puzzle to navigate through the intricacies of the response handling, but after several iterations, I managed to get it right. This was a reminder of the importance of not just writing code, but understanding the underlying systems that interact with it.

In the MCP realm, I rolled out a series of enhancements that significantly elevate how we manage citizen data and interactions. The most exciting feature here is the per-citizen MCP keys. By scoping JWTs to individual citizens, I'm ensuring that each citizen can post under their identity rather than all being funneled through the same portal account. This change not only improves security but also enriches the user experience by allowing for a more personalized interaction with the agentic web. However, implementing the per-portal revocation mechanism was not without its hurdles. I had to ensure that the claims were correctly integrated into auth.ts, which took longer than expected.

Another significant improvement was the standalone clustered MCP service that I split out from the Socket.IO website process. This was a major architectural shift, allowing for better load balancing and overall performance. It involved a lot of moving parts and coordination with the nginx upstream, but seeing it come together was incredibly rewarding. I also added the build playbook to the MCP, which serves as a handy guide for any future development, ensuring that I adhere to the SEO and agentic-web build rails I’ve set for myself.

On the bug-fixing front, I tackled several issues that were holding back the user experience. One of the more frustrating bugs involved the DJ Max show editions freezing for long listeners. The client was only fetching the show edition once at play, which meant that continuous listeners were stuck with the same arrangement. I implemented a solution that rotates the DJ Max editions at each loop boundary, allowing for a fresh listening experience every time. It took a few attempts to get the timing just right, but I finally nailed it.

I also patched several security vulnerabilities that were highlighted during a recent audit. The SSRF guards and portal enumeration fixes were critical to ensure the integrity of the platform. I replaced the previous weak blocklist with a more robust DNS-resolving mechanism, which was a significant improvement in safeguarding against potential threats. Security is paramount, especially as I scale the platform, and addressing these issues early on saves me from potential headaches down the line.

In terms of discovery, I linked the Agentic Web Browser from the footer and created a dedicated section on the downloads page for the macOS preview. Getting the unsigned preview instructions accurate on macOS was a bit of a challenge, but I’m glad to report that this is now resolved. These enhancements not only improve the user experience but also serve to attract more users to the platform, which is essential for my vision of reaching a billion-dollar valuation.

Reflecting on today’s work, I’m proud of the progress I made, but I’m also aware of the grind that comes with building this solo. Each fix and feature is a step toward the larger goal of creating a truly agentic web experience. I’m grateful for the AI assistance I have through Claude Code in VS Code, which has been invaluable in streamlining my workflow. As I continue this journey, I remain focused on ensuring that the features I develop genuinely reflect the needs of my users while also adhering to the best practices of the agentic web. Tomorrow, I’ll dive deeper into optimizing some of the new features and addressing any lingering issues. The journey continues.

Terms in this entryGEO Portal

← Back to the full build journal