v1.6.1
Fixed
-
dockyard-bridgeui/initializenow uses the MCP Appsui/dialect — a
spec-compliant host no longer rejects the View handshake. (D-179) The View's
ui/initializerequest sent base-MCP{capabilities:{appCapabilities}, clientInfo}; the MCP Apps host (@modelcontextprotocol/ext-apps) validates the
request against a strict schema requiring top-level{appInfo, appCapabilities, protocolVersion}(appInfoREQUIRED). The mismatch made the host return a
JSON-RPC error for the first handshake message, soconnect()rejected,ready
never became true, and an otherwise-correct App rendered blank with no visible
error. The bridge now sends theui/dialect shape. (Hosts only spoke this
dialect; the local inspector accepted the base-MCP shape, which is why this
passed locally.) The publicclientInfobridge option is unchanged. -
dockyard-bridgeSENDSui/notifications/initializedrather than awaiting it.
(D-180) The handshake waited to receiveui/notifications/initialized
before resolvingready. Per the JSON-RPC/MCP lifecycle (and the ext-apps
reference View) the View is the initiator and sendsinitializedafter the
ui/initializeresult, then is ready. A spec-compliant host never sends a
View→host message, so the old code deadlocked. An inboundinitializedfrom a
non-spec host is now ignored. -
dockyard-bridgereports View content size to the host via
ui/notifications/size-changed. (D-181) The bridge only ever received
size-changed(host→View); it never measured or reported its own content
height. A spec-compliant host sizes the App iframe from the View's report;
without it the iframe collapses to ~0px and the App looks blank even after it
paints. The bridge now runs aResizeObserverand emits a de-duplicated
size-changedon ready and on every change, torn down inclose().
Commits
Fixed
- bridge: speak the MCP Apps ui/ dialect so a spec host renders the App