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
refactor(mcp-apps): remove show_ui — it can't suppress app rendering
show_ui promised "skip the form and execute directly", but it can't deliver:
the host renders an MCP App for any tool that carries _meta.ui.resourceUri, and
the 2026-01-26 MCP Apps spec has no per-call/per-result way to opt out of
rendering. show_ui only flipped the server's defer decision, so show_ui=false
created the PR/issue up-front yet the host still rendered the app — exactly the
contradiction this work set out to fix. And show_ui is only ever exposed to
clients that support UI, i.e. precisely the clients that always render the app.
Remove it entirely:
- Drop the show_ui schema property, the form-param allowlist entry, and the
showUI term from the defer predicate in create_pull_request and issue_write.
The gate is now FF && clientSupportsUI && !_ui_submitted && !hasNonFormParams.
- Delete the now-unused UI-only schema-property strip machinery in
pkg/inventory (uiOnlySchemaProperties, stripUIOnlySchemaProperties,
stripSchemaProperties) and the exported ConditionalSchemaPropertyDescriptions,
which existed solely to surface show_ui to UI-capable clients. _meta.ui
stripping is untouched.
- Drop the conditional-property annotation from the docs generator.
- Update toolsnaps, generated docs, and tests.
With the up-front-execution Views now rendering the result (success card), the
remaining contract is simple: when MCP Apps are enabled the form is the path,
and the form is only shown while the action is genuinely deferred.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
-`reviewers`: GitHub usernames or ORG/team-slug team reviewers to request reviews from (string[], optional)
48
-
-`show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when the user has already confirmed the action and the form would be redundant. (boolean, optional, conditional — visible when remote_mcp_ui_apps is enabled unless the client explicitly indicates it does not support io.modelcontextprotocol/ui)
-`show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when the user has already confirmed the action and the form would be redundant. (boolean, optional, conditional — visible when remote_mcp_ui_apps is enabled unless the client explicitly indicates it does not support io.modelcontextprotocol/ui)
73
71
-`state`: New state (string, optional)
74
72
-`state_reason`: Reason for the state change. Ignored unless state is changed. (string, optional)
Copy file name to clipboardExpand all lines: docs/insiders-features.md
-2Lines changed: 0 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -39,7 +39,6 @@ The list below is generated from the Go source. It covers tool **inventory and s
39
39
-`owner`: Repository owner (string, required)
40
40
-`repo`: Repository name (string, required)
41
41
-`reviewers`: GitHub usernames or ORG/team-slug team reviewers to request reviews from (string[], optional)
42
-
-`show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when the user has already confirmed the action and the form would be redundant. (boolean, optional, conditional — visible when remote_mcp_ui_apps is enabled unless the client explicitly indicates it does not support io.modelcontextprotocol/ui)
43
42
-`title`: PR title (string, required)
44
43
45
44
-**get_me** - Get my user profile
@@ -63,7 +62,6 @@ The list below is generated from the Go source. It covers tool **inventory and s
63
62
-`milestone`: Milestone number (number, optional)
64
63
-`owner`: Repository owner (string, required)
65
64
-`repo`: Repository name (string, required)
66
-
-`show_ui`: Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when the user has already confirmed the action and the form would be redundant. (boolean, optional, conditional — visible when remote_mcp_ui_apps is enabled unless the client explicitly indicates it does not support io.modelcontextprotocol/ui)
67
65
-`state`: New state (string, optional)
68
66
-`state_reason`: Reason for the state change. Ignored unless state is changed. (string, optional)
Copy file name to clipboardExpand all lines: pkg/github/__toolsnaps__/create_pull_request.snap
-4Lines changed: 0 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -49,10 +49,6 @@
49
49
},
50
50
"type": "array"
51
51
},
52
-
"show_ui": {
53
-
"description": "Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when the user has already confirmed the action and the form would be redundant.",
Copy file name to clipboardExpand all lines: pkg/github/__toolsnaps__/issue_write.snap
-4Lines changed: 0 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -96,10 +96,6 @@
96
96
"description": "Repository name",
97
97
"type": "string"
98
98
},
99
-
"show_ui": {
100
-
"description": "Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when the user has already confirmed the action and the form would be redundant.",
Copy file name to clipboardExpand all lines: pkg/github/issues.go
+2-19Lines changed: 2 additions & 19 deletions
Original file line number
Diff line number
Diff line change
@@ -1742,7 +1742,6 @@ var issueWriteFormParams = map[string]struct{}{
1742
1742
"state": {},
1743
1743
"state_reason": {},
1744
1744
"duplicate_of": {},
1745
-
"show_ui": {},
1746
1745
"_ui_submitted": {},
1747
1746
}
1748
1747
@@ -1919,17 +1918,6 @@ Options are:
1919
1918
Required: []string{"field_name"},
1920
1919
},
1921
1920
},
1922
-
// show_ui is hidden from clients that do not advertise MCP App
1923
-
// UI support. The strip happens per-request in
1924
-
// inventory.ToolsForRegistration; it is present in the static
1925
-
// schema (and therefore in toolsnaps and the feature-flag /
1926
-
// insiders docs) so the UI-capable surface is fully
1927
-
// documented. It is intentionally not in the main README,
1928
-
// which renders the stripped (non-UI) schema.
1929
-
"show_ui": {
1930
-
Type: "boolean",
1931
-
Description: "Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when the user has already confirmed the action and the form would be redundant.",
1932
-
},
1933
1921
},
1934
1922
Required: []string{"method", "owner", "repo"},
1935
1923
},
@@ -1952,18 +1940,13 @@ Options are:
1952
1940
1953
1941
// When MCP Apps are enabled and the client supports UI, route the
1954
1942
// call to the interactive form unless:
1955
-
// - it is itself a form submission (the UI sends _ui_submitted=true),
1956
-
// - the caller explicitly asked to skip the UI (show_ui=false), or
1943
+
// - it is itself a form submission (the UI sends _ui_submitted=true), or
1957
1944
// - it carries parameters the form cannot represent (e.g. labels,
1958
1945
// assignees or issue_fields). Those must be applied directly so
// show_ui is hidden from clients that do not advertise MCP App
712
-
// UI support. The strip happens per-request in
713
-
// inventory.ToolsForRegistration; it is present in the static
714
-
// schema (and therefore in toolsnaps and the feature-flag /
715
-
// insiders docs) so the UI-capable surface is fully
716
-
// documented. It is intentionally not in the main README,
717
-
// which renders the stripped (non-UI) schema.
718
-
"show_ui": {
719
-
Type: "boolean",
720
-
Description: "Whether to render the MCP App form instead of executing the request immediately. Defaults to true. Set to false to skip the form and execute directly — useful when the user has already confirmed the action and the form would be redundant.",
0 commit comments