MCP App UI resource is not rendered when the tool declares annotations
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 193k
- Forks
- 42.8k
- PR merge metrics
- PR metrics pending
Description
Does this issue occur when all extensions are disabled?: Yes. The behavior is in the built-in MCP Apps/Copilot Chat path; no third-party extension is involved.
- VS Code Version: 1.138
- OS Version: Linux
- MCP transport: stdio
Summary
An MCP App tool is rendered when it has an output schema and both supported UI resource URI metadata forms, but adding MCP tool annotations prevents the host from treating the result as an app. The host no longer reads the registered ui:// resource.
Minimal setup
Register a tool with:
{
"name": "widget_show",
"inputSchema": {"type": "object"},
"outputSchema": {"type": "object"},
"_meta": {
"ui": {"resourceUri": "ui://example/widget.html"},
"ui/resourceUri": "ui://example/widget.html"
}
}
Register ui://example/widget.html as text/html;profile=mcp-app, and return structured content matching the output schema plus markdown content from the tool call.
Steps to reproduce
- Call the tool without
annotations. VS Code renders the MCP App and reads theui://resource. - Add one or more standard tool annotations, for example:
"annotations": {
"readOnlyHint": true,
"idempotentHint": true,
"openWorldHint": false
}
- Restart the stdio server and call the same tool.
Actual behavior
The result is treated as ordinary tool output and the host does not read the registered ui:// resource.
Expected behavior
Tool annotations should not change MCP App discovery or rendering. They describe execution semantics and should be compatible with a tool that returns an app-backed UI result.
Notes
The reproduction currently demonstrates the behavior with the annotation set above. I have intentionally not claimed which individual annotation triggers it; isolating that detail can follow once the expected interaction between annotations and MCP App detection is confirmed.
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
Reproduce the issue through the built-in MCP Apps/Copilot Chat path using the stdio server, first without annotations and then with the listed annotations. Trace how tool results discover and read the registered ui:// resource; done means annotations no longer prevent the MCP App from rendering.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript, vscode
- Domain
- developer-experience, devtools
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100