Overview
MCPHub supports MCP Apps as a transparent proxy. It forwards UI-linked tool metadata, app-only tools,ui:// resources, and upstream list-change notifications. MCPHub does not render app UIs in its dashboard.
No MCPHub configuration switch is required. Support is enabled automatically when the downstream host advertises the io.modelcontextprotocol/ui extension with the text/html;profile=mcp-app MIME type.
Routing Requirements
MCP Apps passthrough is enabled whenever a request route resolves to at least one connected MCP upstream server:/mcp/{server}/mcp/{group}, whether the group contains one visible MCP server or several/mcpwhen at least one MCP server is visible to the caller
$smart routes are the one exception and continue to work as ordinary MCP routes, since Smart Routing tools aren’t addressed by name at all. On that route MCPHub:
- hides app-only tools such as tools with
_meta.ui.visibility: ["app"] - removes Apps-specific
_meta.uiand legacy_meta["ui/resourceUri"]fields - rejects direct calls to app-only tools
- rejects unlisted
ui://resource reads
Tool Names
Ordinary (non-Apps) MCPHub routes expose qualified tool names such asweather::forecast, using your configured name separator.
A route eligible for Apps passthrough that resolves to a single connected server exposes the upstream tool names unchanged, such as forecast. This allows calls from the app iframe to pass through without rewriting, which is what most Apps widgets expect when they call back into a single-server host.
A route that resolves to more than one connected server keeps the qualified name (weather-station::forecast) instead, since more than one upstream server could otherwise expose a tool with the same bare name. Apps metadata (_meta.ui) and app-only tools are still fully surfaced on these multi-server routes — only the tool-name qualification differs from the single-server case. A widget on a multi-server route should read its own qualified name from the tool listing (or the host context passed to it) rather than assume the bare name.
UI Resources
MCP Apps servers may omit UI-only resources fromresources/list. On an Apps-eligible route, MCPHub forwards direct resources/read calls for unlisted ui:// URIs:
- On a single-server route, the request goes straight to that server.
- On a multi-server route, MCPHub has no prior way to know which upstream owns a given
ui://URI, since it isn’t listed. It probes each connected server in the group in turn and returns the first successful response.
Dynamic Lists
MCPHub subscribes to upstreamtools/list_changed, resources/list_changed, and prompts/list_changed notifications. It refreshes its cache, updates Smart Routing embeddings for model-visible tools, and notifies connected downstream clients.