Skip to content

spec: switch interactive UI output from ChatGPT Apps to MCP Apps#1

Open
rvguha wants to merge 1 commit into
mainfrom
spec-mcp-apps-output
Open

spec: switch interactive UI output from ChatGPT Apps to MCP Apps#1
rvguha wants to merge 1 commit into
mainfrom
spec-mcp-apps-output

Conversation

@rvguha

@rvguha rvguha commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Migrates NLWeb's interactive UI output format from the ChatGPT Apps SDK structure to the MCP Apps extension (io.modelcontextprotocol/ui).

What changed

  • response_format: chatgpt_appmcp_app (the old format is removed, not kept).
  • Structured payload: structuredData (array) → structuredContent (object), with NLWeb's typed items under a results array.
  • UI template reference: _meta openai/outputTemplate + openai/widgetAccessible_meta.ui.resourceUri pointing at a ui:// resource. Over MCP transport the host fetches it via resources/read; over HTTP transport the URI must resolve to a text/html;profile=mcp-app resource.
  • Updated §3.3.1, the _meta field list, §4.1.1 (renamed MCP Apps Result Structure), the worked example, and added a changelog entry.

Files

  • NLWEBSPEC.md — source of truth.
  • app/docs/specification/page.mdx — rendered docs page kept in sync.

Not included (flagging for discussion)

  • app/docs/intro/page.mdx still says "every NLWeb endpoint is also natively a ChatGPT app" — left as-is since it's positioning copy, not the spec. Happy to update if we want it consistent.

Design decisions baked in

  • Replace chatgpt_app entirely (vs. keeping it deprecated/alongside).
  • structuredContent as an object wrapping the results array (vs. a bare array).
  • ui:// + resources/read on MCP, with a resolvable-URL fallback for HTTP transport.

Replaces the chatgpt_app response_format with mcp_app, conforming to
the MCP Apps extension (io.modelcontextprotocol/ui):

- response_format: chatgpt_app -> mcp_app
- structuredData (array) -> structuredContent (object with a results array)
- _meta openai/outputTemplate + openai/widgetAccessible ->
  _meta.ui.resourceUri referencing a ui:// resource (fetched via
  resources/read over MCP; resolvable URL over HTTP transport)

Mirrors the same edits into the rendered docs page
(app/docs/specification/page.mdx) and notes the migration in the
changelog.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant