Skip to content

[FEATURE] Add Support for ui/request-display-mode messages from MCP Apps implementation #1130

@qchuchu

Description

@qchuchu

Feature

Currently in the client/src/components/chat-v2/thread/mcp-apps-renderer.tsx, we cannot send ui/request-display-mode messages (defined in the ext-apps definition). Hence, request for display mode are not taken into account

Image

Solution

  • Add a handler l512 for ui/request-display-mode (got inspired from the openai apps)
case "ui/request-display-mode": {
  const requestedMode = (params as { mode?: DisplayMode })?.mode || "inline";
  const isMobile = window.innerWidth < 768;
  // On mobile, upgrade PiP to fullscreen (same as OpenAI)
  const actualMode: DisplayMode =
    isMobile && requestedMode === "pip" ? "fullscreen" : requestedMode;
  
  setDisplayMode(actualMode);
  
  // Notify parent about PiP state changes
  if (actualMode === "pip") {
    onRequestPip?.(toolCallId);
  } else if (
    (actualMode === "inline" || actualMode === "fullscreen") &&
    pipWidgetId === toolCallId
  ) {
    onExitPip?.(toolCallId);
  }
  
  // Respond to the request (JSON-RPC requires response for requests with id)
  sendResponse(id, { displayMode: actualMode });
  
  // Also notify via host-context-changed so widget gets the update
  sendNotification("ui/notifications/host-context-changed", {
    displayMode: actualMode,
  });
  break;
}

Alternatives

N/A

Additional Context

N/A

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions