A centralised hub that connects AI coding agents to humans —
through speech, choices, messaging, and rich terminal graphics.
The io-mcp TUI rendering bitmap overlays through the kitty graphics protocol — glow borders, status indicators, and inline images composited directly onto the terminal.
An MCP server that gives AI agents a way to talk to humans — and humans a way to direct agents — without touching a keyboard.
Claude Code agents run autonomously, but they regularly need human input: approval, direction, clarification. The standard interface is a terminal prompt — which means you have to be at a keyboard.
io-mcp exposes MCP tools that let agents present choices, speak aloud, receive messages, and share images. A TUI and Android companion app provide the human side. Any input device that maps to j/k/Enter — including a smart ring — becomes a full project controller.
One use of io-mcp that demonstrates the generality of the approach.
A smart ring’s scroll wheel maps to j/k. The agent presents choices via present_choices(); each option is read aloud through TTS. Click to select.
Voice commands via STT, or queue text messages with m. The agent narrates progress through speak_async() so you always know what’s happening.
The agent writes code, runs tests, commits — all narrated. You stay eyes-free the entire time. No screen, no keyboard, just gestures and audio.
Pixel-perfect rendering in the terminal — no browser, no Electron.
io-mcp uses the kitty graphics protocol to render bitmap overlays directly in the terminal. This enables:
Terminals that support kitty graphics (Ghostty, kitty, WezTerm) get full bitmap rendering. All other terminals fall back gracefully to Rich text markup — no feature is lost, only visual fidelity.
Before: Rich text markup only.
After: kitty graphics protocol — bitmap overlays composited onto the terminal.
MCP tools, TUI features, and infrastructure for multi-agent coordination.
Each connected agent gets its own tab with independent state, TTS voice, and chat history.
Press t to launch new agents locally or on remote hosts. Workers run in isolated git worktrees.
DMs, broadcasts, work dashboard, automatic health monitoring. Agents claim beads and coordinate via io-mcp.
SQLite-backed task tracking shared across agents. Kanban board, lifecycle management, velocity metrics, 24h activity heatmaps.
Shared drawing surface with layers, animation frames, stamps, Bézier curves, and GIF export. Agents collaborate visually.
Persistent image IDs, server-side resize/compression, inline kitty graphics rendering in chat. Generate images via gpt-image-1.
Per-agent and global key-value memory that persists across restarts. Share project knowledge across the swarm.
Glow borders, sparklines, progress gauges, status dots, and inline images via the kitty graphics protocol. Text fallbacks everywhere.
Multiple TTS models (gpt-4o-mini-tts, mai-voice-1), voice/emotion presets, per-agent voice rotation, audio chimes, and STT input.
Escalating TTS updates during silence. Configurable health monitoring with webhook notifications via ntfy, Slack, or Discord.
Jetpack Compose app on port 8445 — touch, scroll, mic, notifications. SSE-connected to the backend.
Nord, Tokyo Night, Catppuccin, Dracula. WCAG-aware contrast. Switch from the settings menu or config.
50+ tools spanning interaction, speech, task management, drawing, and infrastructure.
present_choices Scroll-wheel single-selectpresent_multi_select Checkable batch listrun_command Shell with user approvalcheck_inbox Poll queued messagesawait_message Block until message arrivesspeak Blocking TTSspeak_async Non-blocking TTSspeak_urgent Interrupt current playbackset_voice / set_emotion Runtime voice configset_tts_model / set_stt_model Switch modelssend_to_agent Direct message another agentbroadcast_to_agents Team-wide announcementbeads_* Create, claim, close, search tasksrun_tests Queue background test runmemory_* Per-agent & global KV storesend_image / generate_image Share or create imagespixel_canvas_* Draw shapes, text, gradientscanvas_* Rich-text collaborative gridset_profile_pic Agent avatarget_tui_state Capture screen for debuggingUp and running in under a minute.
# Clone and enter dev shell git clone https://github.com/harryaskham/io-mcp cd io-mcp && nix develop # Start io-mcp (auto-starts MCP proxy on :8444) uv run io-mcp
# Add as MCP server in Claude Code # Agents register via register_session() # Each gets its own tab in the TUI
# Send a message from another terminal io-mcp-msg "check this file" # Or run in demo mode (no agent needed) uv run io-mcp --demo
Three processes, one seamless connection. The proxy survives backend restarts.
Thin FastMCP proxy. Agents connect here. Survives TUI restarts so agents stay connected.
TUI, TTS engine, session management, tool dispatch. Hot-reloadable via request_restart().
REST + SSE for remote frontends. Powers the Android companion app.