`[Unknown tool]` console warning spam for widget-originated `ui/message` calls

Severity: Low (cosmetic — functionality is correct)

Date observed: April 28, 2026

Not observed: April 27, 2026 (same code, same server)

Environment: ChatGPT web (gpt-5-5-thinking), MCP Apps connector using `ui/message` JSON-RPC method

Description:

When a widget sends a `ui/message` JSON-RPC request (the MCP Apps standard equivalent of `window.openai.sendFollowUpMessage`), the ChatGPT console repeatedly logs:

```
[Unknown tool] Encountered a message with an unknown tool. Rendering as Unknown message type, which is not visible.
```

The follow-up message works correctly — the model receives it, calls the expected tool, and the new widget renders. The warning is cosmetic but noisy.

Reproduction steps:

  1. Register an MCP Apps connector with multiple tools, each with a UI resource template.
  2. From one tool’s widget, send a `ui/message` via the MCP Apps bridge:
    ```json
    {
    “jsonrpc”: “2.0”,
    “method”: “ui/message”,
    “params”: {
    “role”: “user”,
    “content”: [{ “type”: “text”, “text”: “Call my_other_tool with debug true.” }]
    }
    }
    ```
  3. Open the browser console.

Observed behavior:

The console logs `[Unknown tool]` warnings repeatedly. Inspecting the message object shows:

```json
{
“author”: {
“role”: “tool”,
“name”: “ui://widget/dev_test/spa_dev_test_tool.html”
},
“content”: {
“content_type”: “text”,
“parts”: [“Call spa_dev_test_custom_sync_tool with debug true.”]
},
“metadata”: {
“is_visually_hidden_from_conversation”: true
}
}
```

ChatGPT attributes the message author to the sending widget’s resource URI (`ui://widget/…`), then the frontend renderer fails to match that URI to a registered tool name, triggering the warning — even though `is_visually_hidden_from_conversation: true` means the message is intentionally hidden.

Expected behavior:

No console warning for messages that are `is_visually_hidden_from_conversation: true`, or the author name should resolve to a known tool rather than the resource URI.

Notes:

  • This was not occurring on April 27 with the same server code and widget. Likely a ChatGPT frontend regression shipped between April 27–28.
  • The `ui/message` params follow the documented spec exactly (`{ role, content }`). There is no documented parameter to control author attribution.

I am seeing the same issue as well.

Seeing this same message, issue is for me this results in widget rendering but conversational aspect shows

Error in message stream

Hey @all! Really appreciate you digging into this and sharing the details. We’re taking a closer look on our side and will share an update once we know more.

- Sunny