From e01ce648c3fd84df688776702fe16984ead3adca Mon Sep 17 00:00:00 2001 From: Andrew Harvard Date: Tue, 13 Jan 2026 09:25:47 -0500 Subject: [PATCH 1/3] feat(ui): support prefersBorder option for MCP Apps --- .../src/components/McpApps/McpAppRenderer.tsx | 49 ++++++++++++++----- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/ui/desktop/src/components/McpApps/McpAppRenderer.tsx b/ui/desktop/src/components/McpApps/McpAppRenderer.tsx index 35acaf116864..bebb2d951544 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,15 +187,20 @@ export default function McpAppRenderer({ if (error) { return ( -
+
Failed to load MCP app: {error}
); } - if (!resourceHtml) { + if (!resource.html) { return ( -
+
Loading MCP app...
@@ -191,7 +209,12 @@ export default function McpAppRenderer({ } return ( -
+
{proxyUrl ? (