Skip to content

Protocol discrepancies between MCP Apps and Apps SDK #201

Description

@fredericbarthelet

My current understanding of the ongoing effort of MCP Apps extension is to serve as the common standard shared by all clients:

This SEP [SEP-1865] addresses the current limitations through an optional, backwards-compatible extension that unifies the approaches pioneered by MCP-UI and the Apps SDK into a single, open standard.

From SEP-1865 initial message

However, as of today, there are still discrepancies between the current version of OpenAI Apps SDK and MCP Apps Extension. Some are just interface differences that can be unified under a common interface with some adaptors like the ones from MCP-UI or from Skybridge or even the draft #172). Some others simply can't be achieve with the existing tooling.

I tried listing those hereafter in order to have a better picture of the current situation with associated ongoing efforts on missing pieces. Feel free to let me know if something is missing.

Which of those will remain not implemented in ext-apps? Which should be discussed further to make their way in the final implementation before GA?

Pre-declared meta

On tool (tools/list operation)

Apps SDKExt AppsComment
_meta["securitySchemes"]Deferred
_meta["openai/outputTemplate"]_meta["ui"].resourceUriAligned ✅
_meta["openai/widgetAccessible"]Deferred
_meta["openai/visibility"]_meta["ui"].visibilityAligned ✅
_meta["openai/toolInvocation/invoking"]Deferred
_meta["openai/toolInvocation/invoked"]Deferred
_meta["openai/fileParams"]Deferred

On resource (resource/read operation)

Apps SDKExt AppsComment
_meta["openai/widgetDescription"]Deferred
_meta["openai/widgetPrefersBorder"]_meta["ui"].prefersBorderAligned ✅
_meta["openai/widgetCSP"]_meta["ui"].cspconnect & resource domains included in both standards. frame and redirect only available in apps sdk. Will be added in #158
_meta["openai/widgetDomain"]_meta["ui"].domainAligned ✅

Dynamic comms

Properties available in widget (Host -> UI)

Apps SDKExt AppsComment
window.openai.toolInputui/notifications/tool-inputAligned ✅
window.openai.toolOutputui/notifications/tool-resultAligned ✅
window.openai.toolResponseMetadataui/notifications/tool-resultAligned ✅
_meta["openai/widgetSessionId"]Deferred (sessions will likely be added in some form in the future)
ui/notifications/tool-cancelled
ui/resource-teardown
window.openai.widgetStateDiscussed in #62
window.openai.themethemeAligned ✅
window.openai.displayModedisplayModemissing "modal" value in apps sdk
availableDisplayModes
window.openai.maxHeightviewport.maxHeightAligned ✅
window.openai.safeAreasafeAreaInsetsAligned ✅
window.openai.view
window.openai.userAgentdeviceCapabilities & platformAligned ✅
userAgent
window.openai.localelocaleAligned ✅
timeZone
styles
toolInfo

Properties added by host on tool call (Host -> Server)

Apps SDKExt AppsComment
_meta["openai/userAgent"]
_meta["openai/locale"]
_meta["openai/userLocation"]
_meta["openai/subject"]

Methods (UI -> Host)

Apps SDKExt AppsComment
window.openai.setWidgetState(state)Discussed in #61 and #62 as everything set in widget state is injected in model's context. To be clear, #62 will support writing to a shared mutable state with the model. All other related capabilities have been deferred
window.openai.callTool(name, args)tools/callAligned ✅
resources/read
window.openai.sendFollowUpMessage({ prompt })ui/messageAligned ✅
window.openai.requestDisplayMode({ mode })ui/request-display-modeAligned ✅
window.openai.requestModal({ title, params, anchor })Deferred
window.openai.notifyIntrinsicHeight()ui/notifications/size-changedmissing "width" in apps sdk
window.openai.openExternal({ href })ui/open-linkAligned ✅
window.openai.requestClose()#203
window.openai.uploadFile(file)Deferred
window.openai.getFileDownloadUrl({ fileId })Deferred

Others

  • _meta["mcp/www_authenticate"] sent by MCP server in the tools/call response as a challenge to trigger OAuth
  • Hosted-backed navigation - discussion in SEP: Host Backed Navigation #147

Edited on Jan 7th with @idosal comments

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions