Real-app evidence: MCP App result delivery

Both commits ran as independent worktrees using `T3CODE_DEV_SEED=0 vp run dev`, each with its own fresh database. Data was created through the real server CLI/RPC. No production data or database copies were used. Surface: Linux web app, Chromium, 1280x800 CSS viewport, DPR 2, dark theme. Claude Code 2.1.322; MCP Apps SDK 2.0.4. The local synthetic connector returns a valid PNG plus structuredContent containing three synthetic screen images. No Mobbin account was used.

Reproduction:
1. Add the synthetic workspace and connector using reproduce.sh (same script and data for both commits).
2. Start a Claude thread requesting search_screens, platform "ios", query "fitness app paywall screen".
3. After successful completion, open the thread in the real web client. Close sidebar and thread details using app controls.
4. Start browser recording, reload the thread, and observe for ten seconds. The app initializes and receives the stored tool result through its real host.
5. Base remains on "Waiting for results…". Head displays "3 screens received from structuredContent" and all three images.

The stored search inputs and results were identical between sides after replacing local image-file path hints with a redaction. The stored image block has `source.media_type` and `source.sizeBytes` but no image bytes. The app's ontoolresult callback is registered using the actual MCP Apps SDK, not an imitation validator. The head agent also performed an unrelated placeholder Agent call, which is visible in its final message; the search tool's input and stored result still match base exactly.

Recordings show the same reload interaction. Stills were acquired only after two screenshots 500 ms apart had zero differing pixels. Every uploaded image and each recording's one-second contact sheet was visually inspected. Captures show the upper 640 CSS pixels of the same 1280x800 viewport; the composer is cropped off to omit private runtime metadata. A 40-pixel environment label is added above each capture. No app content was replaced.

Scope: demonstrates the reported image-stub rejection and structuredContent gallery delivery in the real web app through Claude's real adapter. Mobbin's authenticated connector/gallery, Electron, mobile, and interactive tools/call responses are unverified.

AI-assisted; verified with the tests and tools listed above.
