Skip to content

[Bug]: Confluence MCP Apps cards have unreadable text on a white canvas in dark mode #16991

Closed

Description

@PixPMusic

What happened

In the October 7, 2026 nightly on macOS desktop, MCP Apps cards from Atlassian Rovo (Legacy) getConfluencePage render on a white background in dark mode. The heading and open-link icon become white and disappear; secondary text becomes light gray with poor contrast. Switching the same conversation to light mode makes the cards readable.

Confirmed with Codex. Claude has not been verified.

Reproduction

  1. Use the Atlassian Rovo (Legacy) integration in a Codex thread.
  2. Call getConfluencePage so its ui://widget/confluence-widget.html app appears inline.
  3. Switch T3 Code between light and dark appearance.
  4. Observe that the dark-mode card keeps a white canvas while its text switches to dark-theme colors.

Expected: readable text and a compatible background in either appearance, including after switching an existing thread.

Investigation

The MCP Apps feature landed in #16236 (4d976d1fc233d3aa971fa7dcbf2e7316bfa3ac72, merged October 7).

apps/web/src/components/chat/McpAppFrame.tsx passes hostContext.theme and standardized style variables to the app, sends context changes, and sets colorScheme on the outer iframe element. The captured Confluence app consumes the host theme and sets the child document root class to dark, which selects white primary text (#fff) and gray tertiary text (#afafaf). Its widget background is transparent.

However, the widget only sets document.documentElement.style.colorScheme when structuredContent.context.featureFlags["claude_mcp_ui_theme_fix_jac-99665"] === true. Both affected Confluence results have only content at the top level of structuredContent, so that condition is false. There is no other child-document color-scheme declaration in the captured HTML.

Likely cause: the child document selects dark text colors but retains a light canvas/color scheme. This is a source-based diagnosis; a synthetic browser reproduction is still needed to confirm the exact iframe canvas behavior. It may require an upstream widget fix or a host compatibility measure rather than changing the theme message itself. The mobile host uses the same bridge but has not been verified.

Private screenshots and original conversation payloads are intentionally omitted. The separate blank Jira-widget symptom is being investigated independently.

Activity

  1. PixPMusic commented on Oct 7, 2026

    @PixPMusic
    ContributorAuthor

    Confirmed the iframe color-scheme mechanism in a synthetic reproduction in Zen (Firefox), with no private content. A dark parent containing a sandboxed iframe styled color-scheme: dark still renders the child on an opaque white canvas when the child root has dark text variables but no color-scheme declaration. White headings disappear and gray secondary text is faint. Adding only html { color-scheme: dark } inside the child document restores a compatible canvas and readable text. This reproduces the reported contrast failure independently of the MCP provider. Full integration verification remains separate from this reduced test.

  2. PixPMusic commented on Oct 7, 2026

    @PixPMusic
    ContributorAuthor

    Also confirmed in the logged-in nightly web client in Zen: the existing conversation renders both Confluence cards with white backgrounds, invisible headings, and faint gray descriptions in dark mode while the reasoning trace is collapsed. The adjacent Jira frames have no accessible child content and occupy empty space, consistent with the separately investigated blank-embed symptom. No private screenshots or payloads are attached.

  3. PixPMusic commented on Oct 7, 2026

    @PixPMusic
    ContributorAuthor

    Screenshots of the actual Confluence MCP embed. Its title, workspace, author, date, and description were replaced in DevTools with fictional sample content. These captures contain only the embed.

    Before, in dark mode:

    Sanitized actual embed before the color-scheme correction

    After applying only document.documentElement.style.colorScheme = "dark" inside the embed:

    Sanitized actual embed after the color-scheme correction

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions