973: The Web’s Next Form: MCP UI (with Kent C. Dodds)

Summary of 973: The Web’s Next Form: MCP UI (with Kent C. Dodds)

by Wes Bos & Scott Tolinski - Full Stack JavaScript Web Developers

48mJanuary 26, 2026

Overview of 973: The Web’s Next Form — MCP UI (with Kent C. Dodds)

This episode explores MCP (Model Context Protocol) and MCP UI (the effort to return interactive UI/widgets from model tool-calls) with educator and developer Kent C. Dodds. Kent explains what MCP is, how it’s being used to let models call reusable tools and surface rich interactive UI inside chat/agent hosts, current implementations (ChatGPT Apps / MCP Apps), developer workflows and tooling, practical examples, limitations and security trade-offs, and where the ecosystem is heading.

Key topics covered

  • What MCP (Model Context Protocol) is and why it matters
  • Tool-calling and context engineering for LLMs
  • MCP UI / MCP Apps — returning HTML/CSS/JS as interactive widgets inside chat/agent hosts
  • Differences and overlap between MCP, Skills, ChatGPT Apps, and other approaches
  • Developer workflow, debugging, testing, and DX pain points
  • Real-world examples (Sentry, Media RSS, pizza bot demo, calculator/Tron demo)
  • Hosts and adopters (ChatGPT, Cursor, VS Code, Postman, Goose by Block)
  • Security, CSP, and why returned UI must be served as static assets today
  • The spec evolution (Linux Foundation donation, multi-vendor participation)

What MCP is (simple explanation)

  • MCP = Model Context Protocol. It standardizes how LLM agents discover and call external tools, share metadata, and exchange structured data with those tools.
  • Goal: remove the fragile copy-paste pattern (copying context into/out of the chat) and let models call tools/services directly in a predictable, reusable, interoperable way.
  • Useful when you want: reusable, controlled tool access across agents/hosts; more predictable behavior than giving raw OpenAPI/Swagger to a model.

Why MCP matters (main benefits)

  • Normalizes tool interfaces across different agents/hosts (like “jQuery of context management”).
  • Lets third-party services (Sentry, etc.) expose useful context/tools to any MCP-enabled agent.
  • Enables agents on phones and in desktop apps to leverage your services without embedding APIs everywhere.
  • Paves the way for richer interactions than plain text: interactive widgets, carousels, images, buttons.

MCP UI / MCP Apps — returning interactive UI

  • MCP UI (and the emerging “MCP Apps” extension) lets an MCP server return HTML/CSS/JS resources (widgets) that a host can render inside a conversation or side panel.
  • The host renders a static resource (HTML + JS bundles) and the UI can interact with the conversation by calling MCP tool endpoints (click button → tool call → model/chat updates).
  • For security, returned UI must be served as static resources (host must validate CSP and allowed domains). The spec includes metadata for CSP and resource whitelisting.
  • Hosts that support MCP Apps or MCP UI: ChatGPT Apps (adapter exists), Postman, Cursor, experimental VS Code support, Goose, and others.

How it works technically (developer view)

  • Tool registration: define tools with schemas (arguments, return shapes), titles, descriptions. These become available to agents.
  • Distribution:
    • Local: run as a local process and communicate over stdio (good for editor integration; publishable as npm/NPX).
    • Remote: HTTP streaming interface (host connects to your remote MCP server; send events; post tool calls).
  • UI flow: MCP server returns metadata + static resource URLs. Hosts fetch and render the widget. The widget can make tool calls back to the MCP server and/or signal the conversation to continue.
  • Dynamic discovery: modern implementations are moving to dynamically include only relevant tools (post-prompt filtering) to avoid context bloat in the model.

Developer DX, testing and tooling

  • Feedback loops are currently slower than typical modern front-end dev (lack of HMR, slow connector refresh in some hosts).
  • Debugging tools:
    • Inspector / MCP Jam: local tooling to add MCP servers, inspect tools/resources/templates, fire individual tool calls and view responses.
  • Testing:
    • Server code often does not require LLM evals, but tool descriptions/titles/metadata do affect model behavior — these should be evaluated (evals) to ensure reliability.
    • Testing workflows are early and evolving; more robust patterns will develop with adoption.
  • Common pain points: context blow (too many tool descriptions in the prompt), regenerating connectors, slow end-to-end test loops.

Security & limitations (current restrictions)

  • Returned UI must be static and served via a resource URL; hosts restrict dynamic arbitrary HTML/JS run to protect users.
  • Hosts provide CSP suggestions and enforce allowed domains/resources.
  • Automatic programmatic generation of arbitrary markup by the model (having the model dynamically return fresh HTML/JS) is mostly restricted for security; workarounds (sampling, borrowing LLM for generation) exist but aren’t part of the core spec yet.
  • Models require tool metadata up front, which contributes to context usage — mitigations include dynamic tool discovery and sending only relevant tool metadata after the user prompt.

Differences: MCP vs Skills vs ChatGPT Apps

  • Skills/Recipes: lighter-weight, shareable scripts or decision flows describing how to accomplish tasks (good for copy/paste team workflows).
  • MCP: broader protocol for tool/tool discovery, reuse across agents, host/server interoperability, and richer tool interactions; better when you want reuse across many agents/hosts or tighter control over calls.
  • ChatGPT Apps: a big consumer-facing implementation; ChatGPT adopted similar ideas and created an Apps SDK. MCP Apps is being developed as an open extension, with participation from OpenAI, Anthropic, Microsoft, Google, and others.

Practical examples mentioned

  • Sentry: example of a service exposing an MCP server to give chat access to bug context.
  • Media RSS (Kent’s app): MCP server used to manage personal audio-book RSS feeds; Kent asks ChatGPT to suggest and add books.
  • Currency conversion & math servers: simple MCP servers that give models access to live rates/calculators.
  • Pizza ordering demo: an MCP server used to orchestrate multi-step flows and UI interactions to place an order.
  • Tron-themed calculator: example of UI interacting with the conversation and triggering different system behaviors.

Hosts & projects to watch

  • ChatGPT Apps (OpenAI): large reach; adopted MCP-like ideas and collaborated with MCPUI.
  • Postman: supports MCP Apps.
  • Cursor, VS Code (experimental), Goose (Block) — Goose is a desktop agent/CLI from Block that embraces MCP and was donated to the Linux Foundation.
  • MCP Jam / Inspector: developer tooling to inspect and drive MCP servers locally.
  • MCP and MCP Apps have been moved/donated into Linux Foundation stewardship to foster an open spec.

Where the ecosystem is headed

  • Ongoing optimization to reduce context bloat (dynamic tool discovery, only provide relevant tool metadata post-prompt).
  • Better DX: faster dev loops, HMR-like tooling, richer testing/evals.
  • More hosts and consistent support for MCP Apps / MCP UI across major players.
  • Continued blending of conversational agents and UI: widgets, sidecars, fullscreen app views (Zillow demo), richer two-way interactions—”put the application in the chatbot.”
  • Long-term: agent memory, search, and progressive discovery will make agent interactions more human-like and efficient.

Actionable recommendations (for developers)

  • Learn the basics of MCP: understand tool registration, schemas, and how hosts consume tool metadata.
  • Start small: build a narrow, reusable MCP server (e.g., currency, calculator, personal dataset) and test against an inspector tool (MCP Jam/Inspector).
  • Use static hosted assets for UI widgets and include CSP metadata as required by hosts.
  • Implement dynamic discovery where possible to avoid context bloat — only send tool metadata relevant to the user’s prompt.
  • Add evals for user-visible text: tool titles, descriptions, and prompts impact model behavior and deserve testing.
  • Watch/spec: follow MCP, MCP Apps extension, and Linux Foundation repos; review examples from Sentry, Postman, and Goose for real implementations.

Notable quotes / insights

  • “MCP is about eliminating the need to get things into the context window and then get things out of the context window back into the real world.”
  • “It’s like the jQuery of context management — it normalizes differences across agents.”
  • Tony Stark / Jarvis analogy: MCP + MCP UI = ability to build interactive assistants that change UI dynamically in response to instructions.

Resources & mentions

  • Kent’s platforms: epicreact.dev, epicweb.dev, epicai.pro (Kent recommends these for learning React, full-stack, and AI with MCP)
  • Projects & names to follow: MCP, MCP UI, MCP Apps, ChatGPT Apps, Goose (by Block), Postman MCP support, Sentry’s MCP server, MCP Jam / Inspector.
  • Example use-cases to prototype: Media RSS, currency convertor, calculator widget, small CRUD-like widgets for your own app.

Kent’s “sick pick” & plug

  • Sick pick: OneWheel (personal, fun hardware recommendation).
  • Shameless plug: Kent’s learning platforms — epicweb.dev, epicreact.dev, epicai.pro.

Summary: MCP is maturing quickly — it standardizes model tool-calling and opens up the possibility for interactive UI embedded in agent conversations. The spec, tooling, and host support are still evolving, but practical, valuable use-cases already exist. Developers should start experimenting with small MCP servers, use local inspectors (MCP Jam), and design UIs as static, CSP-aware widgets that interact via tool calls.