modelcontextprotocol / modelcontextprotocol/ext-apps
App view frame is labeled with the tool `name`, not its `title` — no `_meta.ui` field to name a view
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 2.9k
- Forks
- 387
- Avg merge
- 3h 21m
- Merged PRs (30d)
- 6
Description
Summary
When a tool renders an MCP App (i.e. it carries _meta.ui.resourceUri), the host's app-view frame/header is labeled with the tool's name (e.g. get_report_app) instead of its human-facing title (e.g. "Open Dashboard"). Regular (non-app) tool calls render title correctly in the same host, so app views are the only surface where the raw programmatic identifier leaks to end users — and there is no _meta.ui field a server can set to label the view.
Evidence / how it reproduces
- The server sets a top-level
Tool.titleand it is emitted on the wire.mcp.types.Toolhas atitlefield, and the host renders it for ordinary tool-call chips — e.g. tools titled "Look Up Data", "Business Glossary", "Run Analysis" all display those titles. - The same server's app-rendering tool (declares
_meta.ui.resourceUri, plus a top-leveltitle) shows its frame header labeled with the toolname(get_report_app, underscores and all — no humanization), not itstitle. - Inspecting the Apps metadata schema (
2026-01-26), the_meta.uiobject for a tool has only:domain,prefersBorder,resourceUri,visibility. There is notitle/label/displayNamefor the view frame. So even if a host wanted to show a friendly frame label, the server has no field to supply one independently of the tool name.
Net: for app-rendering tools, the tool name is effectively user-facing chrome, but the only user-facing-name mechanism (Tool.title) is ignored for the frame, and there's no app-specific alternative.
Impact
End users (often non-technical business users) see programmatic identifiers like get_report_app in the app frame. There is no server-side way to present a clean name for an app view — renaming the tool name itself just swaps one snake_case identifier for another (the frame doesn't humanize it) and couples the user-facing label to the programmatic call name.
Proposal (either would resolve it)
- Host behavior: when labeling an app-view frame, hosts SHOULD prefer the tool's
title(falling back tonamewhentitleis absent) — mirroring how non-app tool chips already resolve the display name. - Spec: add an optional
title(orlabel) to the tool_meta.uiobject, letting a server name the view independently of the toolname— analogous to the proposedui.homepagefield (#703). Hosts render_meta.ui.title ?? tool.title ?? tool.name.
Option 1 needs no schema change and immediately fixes the mismatch; Option 2 gives finer control (e.g. a view title distinct from the tool title).
Environment
- MCP Apps spec
2026-01-26. - Host: claude.ai (web).
- Server: FastMCP; the tool declares a top-level
title(verified emitted on the wire) and it renders correctly for non-app tool calls in the same session.
Related
- #703 (
ui.homepagefield) — precedent for adding aui.*field to app metadata. - #672 (UI views not tied to specific tool calls) — adjacent to how a view is identified/labeled.
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
Start by reviewing the Apps metadata schema for 2026-01-26 and the host handling that distinguishes app-view frames from ordinary tool-call chips. Compare how Tool.title and Tool.name are resolved in both surfaces; done means the app frame has a defined friendly-label behavior or the schema documents the chosen _meta.ui field.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- api, frontend
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100