Add MCP Apps extension support (typed metadata, attribute, and helpers)#1484
Draft
Add MCP Apps extension support (typed metadata, attribute, and helpers)#1484
Conversation
Agent-Logs-Url: https://github.com/modelcontextprotocol/csharp-sdk/sessions/5ec8e2cd-39e5-4b4c-a18e-182ccaaa7637 Co-authored-by: mikekistler <85643503+mikekistler@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Add MCP Apps support for typed metadata and helpers
Add MCP Apps extension support (typed metadata, attribute, and helpers)
Mar 31, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
MCP Apps is the first official MCP extension (
io.modelcontextprotocol/ui), enabling servers to deliver interactive UIs inside AI clients. The C# SDK had the foundational primitives (Extensions,_meta) but no typed convenience layer, requiring manual JSON construction that is error-prone and non-discoverable.New APIs
F1 – Constants (
McpApps)McpApps.ResourceMimeType→"text/html;profile=mcp-app"McpApps.ExtensionId→"io.modelcontextprotocol/ui"McpApps.ResourceUriMetaKey→"ui/resourceUri"(legacy backward-compat key)F2 – Typed metadata models
McpUiToolMeta–ResourceUri,VisibilityMcpUiToolVisibility–Model/Appstring constantsMcpUiResourceMeta–Csp,Permissions,Domain,PrefersBorderMcpUiResourceCsp–ConnectDomains,ResourceDomains,FrameDomains,BaseUrisMcpUiResourcePermissions–AllowMcpUiClientCapabilities–MimeTypesF3 – Client capability helper
F6 –
[McpAppUi]attribute (declarative path)Takes precedence over any
[McpMeta("ui", ...)]on the same method. Populates both_meta.ui(structured) and the legacy_meta["ui/resourceUri"]flat key automatically.F7 –
McpServerToolCreateOptions.AppUi(programmatic path)Explicit
Metaentries take precedence overAppUi;AppUitakes precedence overMcpMetaAttribute.Notes
[Experimental(MCPEXP001)]— same diagnostic asExtensionsand Tasks.McpJsonUtilities.JsonContextfor Native AOT compatibility.