You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- If `ui/resourceUri` is present and host supports MCP Apps, host renders tool results using the specified UI resource
310
+
- If `ui.resourceUri` is present and host supports MCP Apps, host renders tool results using the specified UI resource
282
311
- If host does not support MCP Apps, tool behaves as standard tool (text-only fallback)
283
312
- Resource MUST exist on the server
284
-
- Host MUST use `resources/read` to fetch the referenced resource URI.
313
+
- Host MUST use `resources/read` to fetch the referenced resource URI
285
314
- Host MAY prefetch and cache UI resource content for performance optimization
286
315
- Since UI resources are primarily discovered through tool metadata, Servers MAY omit UI-only resources from `resources/list` and `notifications/resources/list_changed`
287
316
317
+
#### Visibility:
318
+
319
+
-`visibility` defaults to `["model"]` if omitted (standard MCP behavior)
320
+
-`"model"`: Tool is visible to and callable by the agent
321
+
-`"apps"`: Tool is callable by apps from the same server connection only
322
+
- Host MUST NOT include tools with `visibility: ["apps"]` in the agent's tool list
323
+
- Host MUST reject `tools/call` requests from apps for tools that don't include `"apps"` in visibility
324
+
- Cross-server tool calls are always blocked for app-only tools
325
+
288
326
#### Benefits:
289
327
290
328
-**Performance:** Host can preload templates before tool execution
@@ -706,7 +744,7 @@ sequenceDiagram
706
744
707
745
autonumber
708
746
S -->> H: resources/list (includes ui:// resources)
709
-
S -->> H: tools/list (includes tools with ui/resourceUri metadata)
747
+
S -->> H: tools/list (includes tools with _meta.ui metadata)
710
748
```
711
749
712
750
#### 2. UI Initialization (Desktop/Native Hosts)
@@ -720,7 +758,7 @@ sequenceDiagram
720
758
721
759
autonumber
722
760
par UI Tool call
723
-
H ->> S: tools/call to Tool with ui/resourceUri metadata
761
+
H ->> S: tools/call to Tool with _meta.ui metadata
724
762
and UI initialization
725
763
alt Desktop/Native hosts
726
764
H ->> H: Render Guest UI in an iframe (HTML from the ui:// resource)
This pattern enables interactive, self-updating widgets.
908
946
909
-
Note: The called tool may not appear in `tools/list` responses. MCP servers MAY expose private tools specifically designed for UI interaction that are not visible to the agent. UI implementations SHOULD attempt to call tools by name regardless of discoverability. The specification for Private Tools will be covered in a future SEP.
947
+
Note: Tools with `visibility: ["apps"]` are hidden from the agent but remain callable by apps via `tools/call`. This enables UI-only interactions (refresh buttons, form submissions) without exposing implementation details to the model. See the Visibility section under Resource Discovery for details.
910
948
911
949
### Client\<\>Server Capability Negotiation
912
950
@@ -959,7 +997,7 @@ if (hasUISupport) {
959
997
description: "Get weather with interactive dashboard",
@@ -1050,6 +1088,24 @@ This proposal synthesizes feedback from the UI CWG and MCP-UI community, host im
1050
1088
-**Include external URLs in MVP:** This is one of the easiest content types for servers to adopt, as it's possible to embed regular apps. However, it was deferred due to concerns around model visibility, inability to screenshot content, and review process.
1051
1089
-**Support multiple content types:** Deferred to maintain a lean MVP.
1052
1090
1091
+
#### 4. Tool Visibility via Metadata
1092
+
1093
+
**Decision:** Use `_meta.ui.visibility` array to control tool accessibility between model and apps.
1094
+
1095
+
**Rationale:**
1096
+
1097
+
- Nested `_meta.ui` structure groups all UI-related metadata cleanly
1098
+
- Array format (`["model", "apps"]`) allows flexible combinations
1099
+
- Default `["model"]` preserves standard MCP behavior for existing tools
1100
+
-`"apps"` scope is per-server, preventing cross-server tool calls
1101
+
- Cleaner than OpenAI's two-field approach (`widgetAccessible` + `visibility`)
1102
+
1103
+
**Alternatives considered:**
1104
+
1105
+
-**Two separate fields:** OpenAI uses `widgetAccessible` and `visibility` separately. Rejected as redundant; single `visibility` array covers all cases.
1106
+
-**Boolean `private` flag:** Simpler but less flexible; doesn't express model-only tools.
1107
+
-**Flat `ui/visibility` key:** Rejected in favor of nested structure for consistency with future `_meta.ui` fields.
1108
+
1053
1109
### Backward Compatibility
1054
1110
1055
1111
The proposal builds on the existing core protocol. There are no incompatibilities.
0 commit comments