diff --git a/ui/desktop/src/components/McpApps/McpAppRenderer.tsx b/ui/desktop/src/components/McpApps/McpAppRenderer.tsx index 35acaf116864..993142575192 100644 --- a/ui/desktop/src/components/McpApps/McpAppRenderer.tsx +++ b/ui/desktop/src/components/McpApps/McpAppRenderer.tsx @@ -32,6 +32,12 @@ interface McpAppRendererProps { append?: (text: string) => void; } +interface ResourceData { + html: string | null; + csp: CspMetadata | null; + prefersBorder: boolean; +} + export default function McpAppRenderer({ resourceUri, extensionName, @@ -42,8 +48,11 @@ export default function McpAppRenderer({ toolCancelled, append, }: McpAppRendererProps) { - const [resourceHtml, setResourceHtml] = useState(null); - const [resourceCsp, setResourceCsp] = useState(null); + const [resource, setResource] = useState({ + html: null, + csp: null, + prefersBorder: true, + }); const [error, setError] = useState(null); const [iframeHeight, setIframeHeight] = useState(DEFAULT_IFRAME_HEIGHT); @@ -60,11 +69,15 @@ export default function McpAppRenderer({ if (response.data) { const content = response.data; - - setResourceHtml(content.text); - - const meta = content._meta as { ui?: { csp?: CspMetadata } } | undefined; - setResourceCsp(meta?.ui?.csp || null); + const meta = content._meta as + | { ui?: { csp?: CspMetadata; prefersBorder?: boolean } } + | undefined; + + setResource({ + html: content.text, + csp: meta?.ui?.csp || null, + prefersBorder: meta?.ui?.prefersBorder ?? true, + }); } } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load resource'); @@ -161,8 +174,8 @@ export default function McpAppRenderer({ }, []); const { iframeRef, proxyUrl } = useSandboxBridge({ - resourceHtml: resourceHtml || '', - resourceCsp, + resourceHtml: resource.html || '', + resourceCsp: resource.csp, resourceUri, toolInput, toolInputPartial, @@ -174,25 +187,20 @@ export default function McpAppRenderer({ if (error) { return ( -
+
Failed to load MCP app: {error}
); } - if (!resourceHtml) { - return ( -
-
- Loading MCP app... -
-
- ); - } - return ( -
- {proxyUrl ? ( +
+ {resource.html && proxyUrl ? (