Where does the bug appear (feature/product)?
Cursor IDE
Describe the Bug
Cursor strips _meta from ui/notifications/tool-result before forwarding MCP Apps tool results to the widget iframe. Widgets receive content and structuredContent only. Claude Desktop and VS Code forward _meta correctly on the same server payload.
The MCP Apps spec (2026-01-26) types the notification’s params as CallToolResult, which includes _meta, and describes _meta as widget-only metadata “not intended for model context.”
Steps to Reproduce
- Point Cursor at an MCP server that returns a tool result of this shape:
{ "content": [{"type": "text", "text": "Done."}], "structuredContent": {"summary": "..."}, "_meta": {"example.com/widget-data": {"foo": "bar"}} } - Invoke the tool from a widget-capable context.
- Log params in the widget’s ontoolresult handler.
Expected Behavior
params._meta contains the server’s payload, per the MCP Apps spec and matching Claude Desktop / VS Code behaviour.
Observed: _meta is absent.
Operating System
MacOS
Version Information
Version: 3.1.17
VSCode Version: 1.105.1
Commit: fce1e9ab7844f9ea35793da01e634aa7e50bce90
Date: 2026-04-19T19:33:58.189Z
Layout: glass
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 25.4.0
Additional Information
_meta is the only spec-designated channel for widget-only payloads. Ecosystem behaviour on content vs structuredContent is inconsistent — see SEP-2200 on the MCP core spec. Stripping _meta forces servers to leak widget state into model-visible fields.
Does this stop you from using Cursor
No - Cursor works, but with this issue