---
title: "MCP Apps: cuando una tool necesita una interfaz y no otro párrafo"
excerpt: "MCP Apps permite que un servidor entregue una UI interactiva dentro del cliente. La parte interesante no es el iframe: es cómo separa datos, herramientas y permisos para que el agente no tenga que fingir una interfaz con texto."
date: "2026-09-08T13:00:00.000Z"
category: "Inteligencia Artificial"
tech_article: true
author:
  name: "angel cruz"
  picture: "/images/me/angel-cruz.png"
ogImage:
  url: "/images/open-graph/mcp-opengraph-image.png"
seo_title: "MCP Apps: UI interactiva para herramientas MCP"
seo_description: "Qué resuelve MCP Apps, cómo conecta una UI sandboxed con tools MCP y qué límites de seguridad debe aplicar el host."
---

**MCP Apps existe para los casos donde una tool necesita que una persona vea y elija algo.** Un calendario, una tabla de resultados o una aprobación con varios campos no mejoran porque el modelo los describa en prosa. Necesitan una interfaz, pero sin convertir el servidor MCP en una aplicación web sin límites.

La extensión oficial MCP Apps permite que una tool enlace a un recurso HTML que el cliente muestra embebido. El modelo sigue llamando tools; la interfaz presenta los datos y puede pedir acciones dentro de un canal definido por el protocolo.

## El resultado de la tool no tiene que ser solo texto

Imagina una tool que prepara cambios para veinte facturas. Un resultado textual obliga al agente a resumir una lista larga y al usuario a aprobar a ciegas. Con una App, la tool puede devolver los datos estructurados y enlazar a una vista que los renderiza.

La especificación obliga a registrar el recurso de UI antes de usarlo, bajo una URI `ui://`, y a referenciarlo desde la metadata de la tool en `_meta.ui.resourceUri`. Con la plantilla separada de los datos, el host puede inspeccionarla o precargarla antes de ejecutar nada, y un cliente que no implemente la extensión se queda con la respuesta de texto. Es lo que permite que la tool siga sirviendo en clientes distintos sin exigirles que rendericen tu interfaz.

## El iframe no recibe carta blanca

Una MCP App se ejecuta en un iframe sandboxed. La UI habla con el host mediante mensajes JSON-RPC sobre `postMessage`; no obtiene acceso directo al servidor ni a las tools porque sí. Si quiere llamar una herramienta, el host media la petición y decide qué aprobar.

Una vista que llega de un servidor remoto es código ejecutándose en el cliente. El host debe limitar dominios con una Content Security Policy, mostrar de dónde viene la acción y aplicar el mismo modelo de permisos que aplicaría a una tool invocada por el agente.

```text
Agente → tool del servidor → datos + recurso ui://
Host → iframe sandboxed → vista interactiva
Vista → petición de tool → host decide si la reenvía
```

El servidor no debería usar una UI para esconder una operación que el usuario no habría aprobado como tool. Si la vista solicita "enviar factura", el host debe poder atribuir esa llamada al servidor y aplicar confirmación o una política explícita.

## Cuándo vale la pena crear una App

No la uses para mostrar un resultado que cabe en una frase. Tiene sentido cuando la persona tiene que comparar filas, editar campos o revisar una acción antes de ejecutarla, y por eso un formulario o un flujo con estado la aprovechan mucho más que una respuesta a la que solo le falta formato.

La especificación pide además que el servidor ofrezca un comportamiento de solo texto para toda tool con UI, y que la tool devuelva un array `content` con contenido significativo aunque la interfaz esté disponible. MCP Apps es una extensión opcional, así que un cliente que no la implemente tiene que seguir recibiendo la información que necesita.

## Preguntas frecuentes

### ¿MCP Apps reemplaza a una aplicación web?

No. Es una UI pequeña servida por una tool dentro de un cliente MCP. Para un producto completo sigues necesitando tu aplicación, autenticación y rutas normales.

### ¿La App puede llamar cualquier tool?

No. La especificación da a cada tool un campo `visibility`, que por defecto vale `["model", "app"]`, y obliga al host a rechazar una petición `tools/call` que venga de la App para una tool que no incluya `"app"`. Con `visibility: ["app"]` una herramienta queda disponible para la interfaz y oculta al modelo.

### ¿Funciona en todos los clientes MCP?

No necesariamente. Es una extensión opcional, por eso el fallback de texto es parte del diseño.

## Fuentes

- [MCP Apps: anuncio oficial](https://blog.modelcontextprotocol.io/posts/2026-01-26-mcp-apps/)
- [Especificación de MCP Apps](https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx)
- [MCP por dentro](/post/mcp-por-dentro)
- [Guía de MCP](/guia-mcp)

---

## Sitemap

Índice completo del sitio: [/sitemap.md](https://www.angelcruz.dev/sitemap.md)

Canónico HTML: [https://www.angelcruz.dev/post/mcp-apps-ui-interactiva](https://www.angelcruz.dev/post/mcp-apps-ui-interactiva)
