Skip to content

Prototype app-rendered elicitation in MCP Apps#1723

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

Prototype app-rendered elicitation in 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

This draft provides a reference implementation for app-rendered elicitations as an experimental addition to the existing MCP Apps extension.

It:

  • adds an experimental elicitation capability under io.modelcontextprotocol/ui;
  • attaches _meta.ui.resourceUri to an otherwise standard form elicitation only when the client negotiated both core form elicitation and MCP Apps elicitation support;
  • preserves an ordinary form elicitation for clients that support elicitation but not MCP Apps;
  • works with the 2026-07-28 stateless MRTR InputRequiredResult / retry flow;
  • adds strongly typed helpers, tests, documentation, and a minimal end-to-end server, host, and app sample.

The public API is marked with the existing MCP Apps experimental diagnostic (MCPEXP003) while the proposal is discussed.

Proposed wire convention

{
  "elicitation": { "form": {} },
  "extensions": {
    "io.modelcontextprotocol/ui": {
      "mimeTypes": ["text/html;profile=mcp-app"],
      "elicitation": {}
    }
  }
}

When negotiated, the server may add:

{
  "_meta": {
    "ui": {
      "resourceUri": "ui://portfolio/assign-manager"
    }
  }
}

The underlying request remains a standard elicitation/create, including a complete requestedSchema. A client that does not negotiate the nested Apps capability therefore receives the native form request unchanged.

Validation

  • dotnet build ModelContextProtocol.slnx --no-restore
  • dotnet build src/ModelContextProtocol.Extensions.Apps/ModelContextProtocol.Extensions.Apps.csproj --no-restore (net10.0, net9.0, net8.0, netstandard2.0)
  • 9 focused McpAppElicitation tests
  • live Streamable HTTP validation under protocol 2026-07-28:
    • form-only client: InputRequiredResult contains a normal form elicitation without app metadata;
    • Apps-capable client: the same request additionally contains _meta.ui.resourceUri;
    • MRTR retry completes with the same typed result.

Context

SEP-3118 cites this draft as its reference implementation. Until that proposal settles, the earlier two-extension prototype remains available on krubenok:feature/apps-elicitation for experiments that need an independently negotiated extension.

AI assistance disclosure

This proposal and implementation were developed with substantial assistance from OpenAI Codex. The author directed the design, reviewed the implementation, and validated the end-to-end behavior.

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.

1 participant