modelcontextprotocol / modelcontextprotocol/ext-apps
Clarify host behavior for rendering an MCP App view when the tool result is an error (isError: true)
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 2.9k
- Forks
- 387
- Avg merge
- 3h 21m
- Merged PRs (30d)
- 6
Description
Summary
The spec defines how a host renders a view once a tool with a ui.resourceUri returns, but it doesn't say what a host should do when that tool call returns an error result (isError: true). Hosts are diverging, and I'd like a recommendation (ideally normative) so implementations stay consistent.
- ChatGPT unmount the view iframe (it was already mounted when the output was received)
- Claude doesn't mount the view iframe
- Goose keep the iframe mounted and proceed with rendering as usual. The
isErrorvalue is not accessible from the view.
What the spec covers today
The ui/notifications/tool-result notification and the rendering flow describe the success path (result.content / structuredContent are forwarded to the view). There's ui/notifications/tool-cancelled for cancellation, but nothing addresses a completed tool call whose result has isError: true, e.g.:
{
"content": [{ "type": "text", "text": "My custom error message returned from tool" }],
"isError": true,
}
Questions
- When a tool result has
isError: true, should the host skip rendering the view and fall back to the normal error/text presentation? - If the view is still rendered, should the host deliver the error via ui/notifications/tool-result (with
isErrorpreserved), via a distinct signal, or not at all? If the same notification is used, how to access theisErrorboolean?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Read specification/2026-01-26/apps.mdx, especially ui/notifications/tool-result and the rendering flow, and compare the host behaviors described here. Done means the specification gives a decided, normative rule for isError: true results, including whether views render and how any error state reaches them.
Written by the indexing model from the issue text.
Assessment
- Domain
- documentation
- Issue type
- Documentation
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100