@happyvertical/smrt-mcp-apps
A framework-neutral, browser-only view-side bridge for portable MCP Apps: lifecycle, correlated transport, and capability gates.
What it gives you
A framework-neutral, browser-only view-side bridge for portable MCP Apps: lifecycle, correlated transport, and capability gates.
- 01McpAppBridge binds one host window and one exact origin from trusted configuration for its whole lifetime
- 02Implements initialize, server tools/call, ui/open-link, text ui/message, text and structured model-context updates, display-mode requests, and teardown
- 03Bounded JSON everywhere: nesting, array, key, and character budgets, with cycles and accessors rejected
What it is not
It is not a server adapter, host or sandbox implementation, authorization layer, or WebMCP tool registrar. No app-tools capability is advertised. Resource proxying, sampling, and downloads have no built-in adapter; an opt-in extension adapter may register a bounded contract. Consumers must keep a normal app or review URL fallback.
Svelte bindings
useMcpApp and useMcpAppIntent are imported from the explicit @happyvertical/smrt-svelte/mcp-apps subpath. useMcpApp constructs the bridge on mount and disposes it on unmount. useMcpAppIntent binds a declared view intent to a mounted registry as a component-local callable, never a remote tool.
Pinned upstream contract
The runtime schema of a pinned ext-apps revision is authoritative. Its prose examples differ from the schema in places; contract tests pin the runtime shapes explicitly.
Package UI
No UI layer to carry
This package stays focused on models, runtime behavior, or tooling. Build its interface with smrt-ui, or use a related domain package that exposes a /svelte entry point.
Intentionally headless
Package previews
No playground module yet
This package does not currently export a ./playground module. Its component names and import path remain available in the Components tab.
Intentionally not registered
Generated interface
REST
The exact route set comes from each model's @smrt({ api }) policy
and the application manifest—not from a second controller definition.
A browser-side bridge without models. It defines no resource of its own; the tools it calls come from the application MCP server the host exposes.
Generated interface
MCP
AI tools are generated from the methods you explicitly include. Their inputs are validated against the same model metadata used by REST and CLI.
A browser-side bridge without models. It defines no resource of its own; the tools it calls come from the application MCP server the host exposes.
Browser-native agent interface
WebMCP
The generated web definitions carry the same tool names, descriptions, and JSON Schema
inputs as MCP. smrt-web registers them with document.modelContext.
A browser-side bridge without models. It defines no resource of its own; the tools it calls come from the application MCP server the host exposes.
Generated interface
CLI
The app CLI turns manifest resources into predictable operator commands while keeping package-specific actions close to their models.
A browser-side bridge without models. It defines no resource of its own; the tools it calls come from the application MCP server the host exposes.