Files
voicebox/landing
James PineandClaude Opus 4.7 0cef2c9fe1 feat(mcp): local MCP server exposes voicebox.* tools to AI agents
Mounts FastMCP at /mcp (Streamable HTTP) so Claude Code, Cursor,
Windsurf, and the VS Code MCP extensions can call voicebox.speak,
voicebox.transcribe, voicebox.list_captures, and voicebox.list_profiles
against the running Voicebox server.

Backend
- new backend/mcp_server package (tools, middleware, profile resolve,
  pub/sub events); named mcp_server to avoid shadowing the installed mcp
  PyPI package FastMCP imports internally
- app.py migrated from @app.on_event to lifespan= so FastMCP's session
  manager cohabits with Voicebox's startup/shutdown
- new MCPClientBinding table + /mcp/bindings CRUD; ClientIdMiddleware
  reads X-Voicebox-Client-Id into a ContextVar and stamps last_seen_at
- profile resolution precedence: explicit -> per-client binding ->
  capture_settings.default_playback_voice_id
- POST /speak REST wrapper for non-MCP callers (shell, ACP, A2A)
- GET /events/speak SSE broadcasts speak-start / speak-end so the pill
  surfaces agent-initiated speech
- backend/mcp_shim proxy (plain httpx) for stdio-only MCP clients
- PyInstaller spec updates + new --shim build target (~18 MB)

Frontend
- Settings -> MCP page with HTTP / stdio / claude-mcp-add copy snippets,
  default voice picker, per-client bindings table, connection status
- useMCPBindings, useSpeakEvents hooks
- CapturePill gains 'speaking' state; DictateWindow subscribes to SSE
  and emits dictate:show so the Rust side surfaces the pill window

Native
- tauri.conf.json externalBin now includes voicebox-mcp
- show_dictate_window helper + dictate:show listener in main.rs
- (also in this commit: InputMonitoringGate UX, hotkey_monitor tweaks,
  landing footer/navbar updates, new overview docs for captures /
  dictation / mcp-server / voice-personalities)

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-04-22 22:05:30 -07:00
..
2026-01-25 13:40:18 -08:00
2026-01-25 13:40:18 -08:00
2026-01-25 13:40:18 -08:00

Voicebox Landing Page

Landing page for voicebox.sh - a modern Next.js 16 application.

Tech Stack

  • Next.js 16 with App Router
  • Bun for package management
  • Tailwind CSS with shadcn/ui components
  • TypeScript with strict mode
  • Railway deployment ready

Getting Started

Prerequisites

Installation

cd landing
bun install

Development

bun run dev

Open http://localhost:3000 to view the landing page.

Build

bun run build

Production

bun run start

Configuration

Edit src/lib/constants.ts to update:

  • LATEST_VERSION - Current release version
  • DOWNLOAD_LINKS - GitHub release download URLs
  • GITHUB_REPO - Repository URL

Update GitHub Username

Replace USERNAME in src/lib/constants.ts with your actual GitHub username.

Deployment to Railway

  1. Connect your GitHub repository to Railway
  2. Railway will auto-detect nixpacks.toml
  3. Set root directory to landing/
  4. Railway will automatically:
    • Install dependencies with bun install
    • Build with bun run build
    • Start with bun run start
  5. Configure custom domain voicebox.sh in Railway settings

Project Structure

landing/
├── src/
│   ├── app/
│   │   ├── layout.tsx      # Root layout with metadata
│   │   ├── page.tsx        # Landing page
│   │   └── globals.css     # Global styles
│   ├── components/
│   │   ├── Header.tsx      # Top navigation
│   │   ├── Footer.tsx      # Footer
│   │   ├── DownloadSection.tsx  # Download buttons
│   │   └── ui/             # shadcn/ui components
│   └── lib/
│       ├── utils.ts        # Utility functions
│       └── constants.ts    # App constants
├── public/
│   └── voicebox-logo.png   # Logo asset
└── nixpacks.toml          # Railway deployment config

Features

  • Responsive design (mobile-first)
  • Dark mode by default
  • SEO optimized metadata
  • Download links for Mac, Windows, Linux
  • Feature showcase
  • Platform highlights
  • GitHub integration