diff --git a/apps/mcp/README.md b/apps/mcp/README.md
index c4a6c43..d3346f3 100644
--- a/apps/mcp/README.md
+++ b/apps/mcp/README.md
@@ -120,6 +120,8 @@ Then start the HTTP server with `pnpm dev`.
Wraps an HTML fragment with the complete OpenGenerativeUI design system.
+In [MCP Apps](https://github.com/modelcontextprotocol/ext-apps) hosts such as Claude Desktop, the tool is linked to the `ui://open-generative-ui/document.html` view, so the fragment renders inline in the conversation. The view applies the design system and the host's theme, runs the fragment's scripts in order, and maps `sendPrompt(text)` and `openLink(url)` to the host. The tool result is then a one-line confirmation, which keeps the document out of the model's context. Clients that do not advertise the `io.modelcontextprotocol/ui` extension receive the complete document as shown below.
+
**Input:**
```typescript
{
diff --git a/apps/mcp/package.json b/apps/mcp/package.json
index 5dd31a3..6d10310 100644
--- a/apps/mcp/package.json
+++ b/apps/mcp/package.json
@@ -23,7 +23,7 @@
"license": "MIT",
"dependencies": {
"@hono/node-server": "^1",
- "@modelcontextprotocol/sdk": "^1.25.3",
+ "@modelcontextprotocol/sdk": "^1.32.1",
"@repo/design-system": "workspace:*",
"hono": "^4",
"zod": "^3.23"
diff --git a/apps/mcp/src/renderer.ts b/apps/mcp/src/renderer.ts
index 8e1400b..81327fa 100644
--- a/apps/mcp/src/renderer.ts
+++ b/apps/mcp/src/renderer.ts
@@ -3,6 +3,21 @@
import { THEME_CSS, SVG_CLASSES_CSS, FORM_STYLES_CSS } from "@repo/design-system";
+// Origins generated UI may load scripts and assets from, in both rendering paths.
+export const CDN_ORIGINS = [
+ "https://cdnjs.cloudflare.com",
+ "https://esm.sh",
+ "https://cdn.jsdelivr.net",
+ "https://unpkg.com",
+];
+
+export const MCP_APP_MIME_TYPE = "text/html;profile=mcp-app";
+
+// ponytail: the view loads the MCP Apps SDK from jsDelivr when it opens, so rendering
+// needs network access; inline app-with-deps.js into the view if offline hosts matter.
+const EXT_APPS_SDK_URL =
+ "https://cdn.jsdelivr.net/npm/@modelcontextprotocol/ext-apps@2.0.3/dist/src/app-with-deps.js";
+
const BRIDGE_JS = `
window.sendPrompt = function(text) {
window.parent.postMessage({ type: 'send-prompt', text: text }, '*');
@@ -37,11 +52,7 @@ export function assembleDocument(html: string): string {