v3.1.2 - MCP Apps render in Claude Desktop
Fixes the app iframes sitting blank in Claude Desktop: the host renders MCP Apps and speaks the official ext-apps wire protocol (JSON-RPC over postMessage with a ui/initialize handshake), which our self-contained pages didn't implement - so the host, correctly following the spec, never delivered the tool result.
All three apps (PMC fitness chart, weekly summary card, workout structure viewer) now implement the view protocol inline: handshake, tool-result rendering, host-driven theming (the iframe follows Claude's light/dark theme), and size reporting (no more oversized blank frames). Verified against a spec-faithful host simulator; the raw-postMessage fallback is retained.
Upgrade: git pull && .venv/bin/pip install -e . then fully restart Claude Desktop.