MCP server + widget
Register tools, return structuredContent, keep widget-only state in
_meta, and point _meta.ui.resourceUri at a
text/html;profile=mcp-app resource.
Choose the product constraints, then export the MCP app or voice-agent path.
The matrix converts the selected pattern into owner-level decisions across Capability, Risk, Latency, Data boundary, Owner, and Source confidence.
| Capability | Risk | Latency | Data boundary | Owner | Source confidence |
|---|
Export the active plan with implementation phases, operating risks, source confidence, and the exact SDK primitives the team needs to build the MCP app responsibly.
The "Realtime Voice SDK 2.0" request maps to the current OpenAI stack:
gpt-realtime-2, Realtime WebRTC, and the Agents SDK realtime package.
The MCP app shell stays standard MCP so ChatGPT and other MCP clients can read the
same contracts. Session setup uses /v1/realtime/calls, with
/v1/realtime/client_secrets available for the ephemeral-token flow.
Register tools, return structuredContent, keep widget-only state in
_meta, and point _meta.ui.resourceUri at a
text/html;profile=mcp-app resource.
Use the current TypeScript MCP SDK for server contracts and portable tool schemas.
Use the MCP Apps extension helpers for widget resources and app bridge policy.
Keep standard API keys server-side for Realtime session brokering and tool calls.
Use the Agents SDK realtime path when browser speech-to-speech needs orchestration.
Pick reasoning effort deliberately; higher effort can improve tool use and raise latency.
These snippets show the interface between MCP tool results, the widget bridge, and the Realtime broker. They are deliberately small so the real product code can be reviewed.