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:
- Register an MCP Apps connector with multiple tools, each with a UI resource template.
- 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.” }]
}
}
``` - 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.