Skip to content

Add app-rendered elicitation support to MCP Apps - #1723

Draft
krubenok wants to merge 2 commits into
modelcontextprotocol:mainfrom
krubenok:feature/apps-elicitation-integrated
Draft

Add app-rendered elicitation support to MCP Apps#1723
krubenok wants to merge 2 commits into
modelcontextprotocol:mainfrom
krubenok:feature/apps-elicitation-integrated

Conversation

@krubenok

@krubenok krubenok commented Jul 23, 2026

Copy link
Copy Markdown

Summary

  • add app-rendered form elicitation capability types to ModelContextProtocol.Extensions.Apps
  • advertise server support as elicitation: {} inside the existing io.modelcontextprotocol/ui extension
  • use effective request-scoped client capabilities on 2026-07-28, with initialized-session fallback for older revisions
  • preserve _meta.ui.resourceUri when the elicitation is embedded in an MRTR InputRequest
  • document the public, server-agnostic MRTR flow

Design

There is no separate app-elicitation extension package or extension identifier. Negotiation requires:

  1. core client elicitation.form
  2. client MCP Apps MIME support
  3. client io.modelcontextprotocol/ui.elicitation
  4. server io.modelcontextprotocol/ui.elicitation

McpAppElicitation.SetAppUiIfSupported attaches an absolute ui:// resource at _meta.ui.resourceUri without changing the core ElicitRequestParams. On protocol revision 2026-07-28, the request-context overload reads the capabilities carried by the current request; older initialized sessions use the server's negotiated capabilities.

The server embeds the request with InputRequest.ForElicitation. The host validates the app's standard ElicitResult, places it under the matching MRTR inputResponses key, and retries the original request with requestState. Unsupported clients receive the unchanged request for native form rendering.

Normative MCP Apps draft: modelcontextprotocol/ext-apps#733.

Core protocol context: modelcontextprotocol/modelcontextprotocol#3118.

TypeScript SDK reference: modelcontextprotocol/typescript-sdk#2578.

Validation

  • McpAppElicitationTests on .NET 8: 12 passed
  • McpAppElicitationTests on .NET 9: 12 passed
  • McpAppElicitationTests on .NET 10: 12 passed
  • targeted dotnet format --verify-no-changes for the changed C# files
  • git diff --check

@krubenok
krubenok force-pushed the feature/apps-elicitation-integrated branch from ac13c74 to 5fd0c8d Compare July 29, 2026 16:24
@krubenok krubenok changed the title Prototype app-rendered elicitation in MCP Apps Add app-rendered elicitation support to MCP Apps Jul 29, 2026
@krubenok

krubenok commented Jul 29, 2026

Copy link
Copy Markdown
Author

The coordinated public references are now aligned to protocol revision 2026-07-28:

The primary flow uses request-scoped client capabilities, server capabilities from server/discover, and the core MRTR shape: the server embeds the ordinary elicitation/create request in InputRequiredResult; the host validates the App's standard ElicitResult, places it under the matching inputResponses key, and retries the originating request with requestState.

No second extension, custom method, or custom result type is introduced. The Inspector is pinned to ext-apps commit 89ab2bc. The MCP Apps View↔Host bridge independently negotiates Apps protocol version 2026-01-26; that is separate from core MCP 2026-07-28.

The references are generic and contain no product-specific example details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants