Scope / evidence
User-facing examples/mcp-app, audited at 72a8857ebe968636ac44dfc7ce4eba30664a8445. GitHub source review only; no browser/native execution was run. This is an example-adoption ticket, not a request to remove Agent Bundle's supported custom-server escape hatch.
Hand-rolled responsibilities and concrete drift
examples/mcp-app/src/mcp/status.ts constructs McpServer, indexes apps[0], manually registers the HTML resource and show-status, repeats App metadata and produces raw MCP content/structuredContent. The framework wraps stdio lifecycle, but operation/resource discovery and result projection remain application-authored SDK glue.
views/status-panel.ts already correctly uses createAppClient; do not claim it still owns a raw bridge. However it defines a manual StatusPanelRouteContracts/AppRegister map and loose browser result interfaces because the server is outside the conventional graph. That map includes tool:status/refresh-status, and the UI calls resources/read for ui://mcp-app-example/readiness-policy; the inspected server registers neither that tool nor that resource. Catching those failures and printing unavailable is not a working demonstration of the controls.
Existing replacement
Conventional src/mcp/<server>/tools, resources, and apps routes provide the compiler registry and generated browser contracts. inputSchema, resultSchema, Agent.Result, App metadata and the public appResourceUri association provide the ordinary implementation. Reuse the existing createAppClient and agent-bundle/meta integration. No custom renderer or second App bridge is required.
Work
Acceptance
The compiled manifest, real tools/resources listing, generated App types and browser controls agree. A change to a tool schema reaches the browser typecheck without editing a second map. Exercise show status for both services, refresh, policy read, represented error, cancellation and denied calls through the real generated MCP server and the browser harness.
Tests must not make an absent tool/resource succeed solely through a mock host. Keep isolated bridge tests explicitly separate from end-to-end example acceptance. Pack/relocate/delete source and open the actual compiled App; assert all advertised normal controls work. Update README and English/Chinese references that link this example.
Non-goals
No abolition of custom MCP factories, forced JSX browser UI, duplicated test-harness protocol implementation, invented status backend, global auto-approval, or transfer of application status semantics into framework core.
Scope / evidence
User-facing
examples/mcp-app, audited at72a8857ebe968636ac44dfc7ce4eba30664a8445. GitHub source review only; no browser/native execution was run. This is an example-adoption ticket, not a request to remove Agent Bundle's supported custom-server escape hatch.Hand-rolled responsibilities and concrete drift
examples/mcp-app/src/mcp/status.ts constructs
McpServer, indexesapps[0], manually registers the HTML resource andshow-status, repeats App metadata and produces raw MCP content/structuredContent. The framework wraps stdio lifecycle, but operation/resource discovery and result projection remain application-authored SDK glue.views/status-panel.ts already correctly uses
createAppClient; do not claim it still owns a raw bridge. However it defines a manualStatusPanelRouteContracts/AppRegistermap and loose browser result interfaces because the server is outside the conventional graph. That map includestool:status/refresh-status, and the UI callsresources/readforui://mcp-app-example/readiness-policy; the inspected server registers neither that tool nor that resource. Catching those failures and printing unavailable is not a working demonstration of the controls.Existing replacement
Conventional
src/mcp/<server>/tools,resources, andappsroutes provide the compiler registry and generated browser contracts.inputSchema,resultSchema,Agent.Result, App metadata and the publicappResourceUriassociation provide the ordinary implementation. Reuse the existingcreateAppClientandagent-bundle/metaintegration. No custom renderer or second App bridge is required.Work
apps[0]binding when the compiler can bind the named App directly.Acceptance
The compiled manifest, real tools/resources listing, generated App types and browser controls agree. A change to a tool schema reaches the browser typecheck without editing a second map. Exercise show status for both services, refresh, policy read, represented error, cancellation and denied calls through the real generated MCP server and the browser harness.
Tests must not make an absent tool/resource succeed solely through a mock host. Keep isolated bridge tests explicitly separate from end-to-end example acceptance. Pack/relocate/delete source and open the actual compiled App; assert all advertised normal controls work. Update README and English/Chinese references that link this example.
Non-goals
No abolition of custom MCP factories, forced JSX browser UI, duplicated test-harness protocol implementation, invented status backend, global auto-approval, or transfer of application status semantics into framework core.