mountly-mcp 4.0.2 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/GLOSSARY.md +37 -0
- package/README.md +103 -190
- package/dist/add-DAFMA4F3.js +263 -0
- package/dist/add-DAFMA4F3.js.map +1 -0
- package/dist/add.d.ts +13 -0
- package/dist/chunk-EOWAWZH2.js +34 -0
- package/dist/chunk-EOWAWZH2.js.map +1 -0
- package/dist/{chunk-KWVGW5Q7.js → chunk-GN2IQYV3.js} +1 -1
- package/dist/chunk-GN2IQYV3.js.map +1 -0
- package/dist/{chunk-UECZA34Q.js → chunk-OWAXBNZA.js} +10 -5
- package/dist/chunk-OWAXBNZA.js.map +1 -0
- package/dist/cli.js +97 -25
- package/dist/cli.js.map +1 -1
- package/dist/compose/index.d.ts +48 -0
- package/dist/compose/index.js +141 -0
- package/dist/compose/index.js.map +1 -0
- package/dist/connect-server-P2UZ62YC.js +7 -0
- package/dist/create.js +43 -15
- package/dist/create.js.map +1 -1
- package/dist/dev/host-entry.js +7 -0
- package/dist/dev/index.js +2 -2
- package/dist/doctor-B54H6CRN.js +122 -0
- package/dist/doctor-B54H6CRN.js.map +1 -0
- package/dist/doctor.d.ts +16 -0
- package/dist/errors-4ERW7HZB.js +11 -0
- package/dist/errors-4ERW7HZB.js.map +1 -0
- package/dist/errors.d.ts +25 -0
- package/dist/json-render/index.js +4 -4
- package/package.json +17 -5
- package/templates/react/README.md.tmpl +83 -6
- package/templates/react/package.json.tmpl +2 -0
- package/templates/react/serve-stdio.mjs.tmpl +9 -0
- package/templates/react/server.mjs.tmpl +6 -1
- package/templates/react/src/view.tsx.tmpl +1 -1
- package/templates/svelte/README.md.tmpl +27 -4
- package/templates/svelte/package.json.tmpl +2 -0
- package/templates/svelte/serve-stdio.mjs.tmpl +5 -0
- package/templates/svelte/server.mjs.tmpl +6 -1
- package/templates/svelte/src/Dashboard.svelte.tmpl +1 -1
- package/templates/vanilla/README.md.tmpl +27 -11
- package/templates/vanilla/package.json.tmpl +2 -0
- package/templates/vanilla/serve-stdio.mjs.tmpl +5 -0
- package/templates/vanilla/server.mjs.tmpl +6 -1
- package/templates/vanilla/src/view.ts.tmpl +1 -1
- package/templates/vue/README.md.tmpl +27 -4
- package/templates/vue/package.json.tmpl +2 -0
- package/templates/vue/serve-stdio.mjs.tmpl +5 -0
- package/templates/vue/server.mjs.tmpl +6 -1
- package/templates/vue/src/Dashboard.vue.tmpl +1 -1
- package/dist/chunk-KWVGW5Q7.js.map +0 -1
- package/dist/chunk-UECZA34Q.js.map +0 -1
- package/dist/connect-server-7L4HGKKL.js +0 -7
- /package/dist/{connect-server-7L4HGKKL.js.map → connect-server-P2UZ62YC.js.map} +0 -0
package/GLOSSARY.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Mountly MCP glossary
|
|
2
|
+
|
|
3
|
+
Public vocabulary for `mountly-mcp`. Skills, templates, CLI help, README, and
|
|
4
|
+
docs must use these names.
|
|
5
|
+
|
|
6
|
+
| Term | Meaning |
|
|
7
|
+
| ------------------------ | -------------------------------------------------------------------------------------------- |
|
|
8
|
+
| **App** | MCP server plus its Views (SEP-1865 product). |
|
|
9
|
+
| **View** | Iframe UI for a tool result (`ui://` resource). |
|
|
10
|
+
| **`ui://`** | Required scheme for View resource URIs. |
|
|
11
|
+
| **`createMcpView`** | Wrap a React / Vue / Svelte component (`mountly-mcp/react` etc.). Vanilla: `publishMcpView`. |
|
|
12
|
+
| **`mountlyMcpViews`** | Vite plugin. Emits View HTML and `dist/mountly-mcp.manifest.json`. |
|
|
13
|
+
| **`registerMcpApps`** | Install Views and UI-linked tools on an unconnected `McpServer`. |
|
|
14
|
+
| **`readMcpAppManifest`** | Load `dist/mountly-mcp.manifest.json` from `mountly-mcp/artifact`. |
|
|
15
|
+
| **`mcp.fixtures.json`** | Named samples for `mountly-mcp dev` (tool args with `--server`, else `structuredContent`). |
|
|
16
|
+
| **`create`** | `mountly-mcp create`: scaffold a greenfield App. |
|
|
17
|
+
| **`add`** | `mountly-mcp add`: add a second View to an existing Mountly Vite project. |
|
|
18
|
+
| **`build`** | `mountly-mcp build`: build Views via Vite. |
|
|
19
|
+
| **`dev`** | `mountly-mcp dev`: local sandboxed AppBridge host with live reload. |
|
|
20
|
+
| **`verify`** | `mountly-mcp verify`: conformance (`--strict`, `--render`). |
|
|
21
|
+
| **`doctor`** | `mountly-mcp doctor`: check Node, Vite plugin, Playwright, peer floors. |
|
|
22
|
+
|
|
23
|
+
## Do not put in MCP docs / skills / templates
|
|
24
|
+
|
|
25
|
+
- Islands vocabulary, HTML island attributes, microfrontends
|
|
26
|
+
- Cloning `jagreehal/mountly` or `modelcontextprotocol/ext-apps` for greenfield Views
|
|
27
|
+
- Hand-writing View HTML or postMessage for Views
|
|
28
|
+
- Calling Mountly the "default view layer" until hosts recommend it
|
|
29
|
+
|
|
30
|
+
## Happy path
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx mountly-mcp create my-app --framework react # react | vue | svelte | vanilla
|
|
34
|
+
cd my-app && pnpm install && pnpm dev
|
|
35
|
+
pnpm verify
|
|
36
|
+
pnpm verify --strict --render # CI
|
|
37
|
+
```
|
package/README.md
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
# mountly-mcp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Build MCP Apps Views from React, Vue, or Svelte. New apps or components you
|
|
4
|
+
already ship.
|
|
4
5
|
|
|
5
|
-
[MCP Apps](https://github.com/modelcontextprotocol/ext-apps) (SEP-1865)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
[MCP Apps](https://github.com/modelcontextprotocol/ext-apps) (SEP-1865) is the
|
|
7
|
+
protocol. Official packages speak the wire. `mountly-mcp` is the View kit:
|
|
8
|
+
component → `ui://` resource → local host → `registerMcpApps` on your server.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npx mountly-mcp create my-app --framework react
|
|
12
|
+
cd my-app && pnpm install && pnpm dev
|
|
13
|
+
```
|
|
10
14
|
|
|
11
15
|
```ts
|
|
12
16
|
import { createMcpView } from "mountly-mcp/react";
|
|
@@ -15,81 +19,69 @@ import Dashboard from "./Dashboard";
|
|
|
15
19
|
createMcpView(Dashboard);
|
|
16
20
|
```
|
|
17
21
|
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
`--framework`: `react` | `vue` | `svelte` | `vanilla`. Vanilla calls
|
|
23
|
+
`publishMcpView` with `mount` / `update` / `unmount`. No framework runtime.
|
|
20
24
|
|
|
21
|
-
|
|
22
|
-
npx mountly-mcp create my-app --framework react
|
|
23
|
-
cd my-app && pnpm install && pnpm dev
|
|
24
|
-
```
|
|
25
|
+
## vs ext-apps
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
| Need | Package |
|
|
28
|
+
| ------------------------------------------------------- | -------------------------------- |
|
|
29
|
+
| Host / bridge protocol | `@modelcontextprotocol/ext-apps` |
|
|
30
|
+
| Component → View → `dev` → `verify` → `registerMcpApps` | `mountly-mcp` |
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
Details: [Mountly vs ext-apps](https://mountly.dev/mcp-apps/vs-ext-apps/).
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
|
36
|
-
|
|
|
37
|
-
| [`
|
|
38
|
-
| [`
|
|
34
|
+
## Agent Skills
|
|
35
|
+
|
|
36
|
+
| Skill | Ask for |
|
|
37
|
+
| ---------------------------------------------------------------------------------- | ----------------------------------- |
|
|
38
|
+
| [`create-mcp-app`](../../plugins/mountly-mcp/skills/create-mcp-app/SKILL.md) | "Create an MCP App" |
|
|
39
|
+
| [`add-app-to-server`](../../plugins/mountly-mcp/skills/add-app-to-server/SKILL.md) | "Add UI to my MCP server" |
|
|
40
|
+
| [`convert-web-app`](../../plugins/mountly-mcp/skills/convert-web-app/SKILL.md) | "Turn my component into an MCP App" |
|
|
41
|
+
| [`migrate-ext-apps`](../../plugins/mountly-mcp/skills/migrate-ext-apps/SKILL.md) | "Migrate from ext-apps" |
|
|
39
42
|
|
|
40
43
|
```
|
|
41
44
|
/plugin marketplace add jagreehal/mountly
|
|
42
45
|
/plugin install mountly-mcp@mountly
|
|
43
46
|
```
|
|
44
47
|
|
|
45
|
-
Docs: [Agent Skills](https://mountly.dev/mcp-apps/agent-skills/).
|
|
46
|
-
`mountly-mcp build` emits a versioned App manifest; `registerMcpApps` installs
|
|
47
|
-
the Views into the MCP server you already own. Existing website components stay
|
|
48
|
-
reusable as-is.
|
|
49
|
-
|
|
50
|
-
The wire protocol is delegated to the official `@modelcontextprotocol/sdk` and
|
|
51
|
-
`@modelcontextprotocol/ext-apps` packages in full, so server transports,
|
|
52
|
-
handshakes, capabilities and message types track the spec rather than a
|
|
53
|
-
reimplementation of it. Both are runtime dependencies of `mountly-mcp`.
|
|
48
|
+
Or `npx skills add jagreehal/mountly`. Docs: [Agent Skills](https://mountly.dev/mcp-apps/agent-skills/).
|
|
54
49
|
|
|
55
50
|
## Install
|
|
56
51
|
|
|
57
52
|
```bash
|
|
58
|
-
# React (default)
|
|
53
|
+
# React (default). mountly + mountly-react are included.
|
|
59
54
|
npm install mountly-mcp react react-dom
|
|
60
55
|
|
|
61
56
|
# Vue / Svelte
|
|
62
57
|
npm install mountly-mcp mountly-vue vue # or mountly-svelte + svelte
|
|
63
58
|
```
|
|
64
59
|
|
|
65
|
-
|
|
66
|
-
its APIs itself, for example to configure a custom HTTP transport. Mountly's
|
|
67
|
-
server entry point does not require a separate SDK install.
|
|
60
|
+
Add `@modelcontextprotocol/sdk` when you import `McpServer`.
|
|
68
61
|
|
|
69
|
-
|
|
62
|
+
Peers: Node 20+ (22 preferred), React 18 or 19. Scaffolds pin Vite 8.
|
|
63
|
+
`npx mountly-mcp doctor` checks a project.
|
|
64
|
+
|
|
65
|
+
## Build
|
|
70
66
|
|
|
71
67
|
```ts
|
|
72
68
|
// vite.config.ts
|
|
73
|
-
import
|
|
69
|
+
import { defineConfig } from "vite";
|
|
70
|
+
import react from "@vitejs/plugin-react";
|
|
74
71
|
import { mountlyMcpViews } from "mountly-mcp/vite";
|
|
75
72
|
|
|
76
73
|
export default defineConfig({
|
|
77
74
|
plugins: [
|
|
78
|
-
|
|
75
|
+
react(),
|
|
79
76
|
mountlyMcpViews({
|
|
80
77
|
apps: [
|
|
81
78
|
{
|
|
82
|
-
entry: "src/
|
|
79
|
+
entry: "src/view.tsx",
|
|
83
80
|
uri: "ui://weather-server/dashboard",
|
|
84
81
|
name: "weather_dashboard",
|
|
85
82
|
displayModes: ["inline", "fullscreen"],
|
|
86
83
|
csp: { connectDomains: ["https://api.weather.com"] },
|
|
87
84
|
},
|
|
88
|
-
{
|
|
89
|
-
entry: "src/settings.ts",
|
|
90
|
-
uri: "ui://weather-server/settings",
|
|
91
|
-
name: "weather_settings",
|
|
92
|
-
},
|
|
93
85
|
],
|
|
94
86
|
}),
|
|
95
87
|
],
|
|
@@ -100,38 +92,19 @@ export default defineConfig({
|
|
|
100
92
|
npx mountly-mcp build
|
|
101
93
|
```
|
|
102
94
|
|
|
103
|
-
|
|
104
|
-
HTML with a transitional `.meta.json` file. The canonical
|
|
105
|
-
`dist/mountly-mcp.manifest.json` gives build, dev, registration, and CI one
|
|
106
|
-
versioned artifact contract. The original single-View plugin shape and
|
|
107
|
-
`vite build` remain supported.
|
|
95
|
+
Writes HTML and `dist/mountly-mcp.manifest.json`.
|
|
108
96
|
|
|
109
|
-
##
|
|
97
|
+
## Develop
|
|
110
98
|
|
|
111
99
|
```bash
|
|
112
|
-
npx mountly-mcp dev
|
|
113
|
-
|
|
114
|
-
npx mountly-mcp dev --app weather_dashboard
|
|
100
|
+
npx mountly-mcp dev --server ./server.mjs
|
|
101
|
+
npx mountly-mcp dev --app weather_dashboard --server ./server.mjs
|
|
115
102
|
```
|
|
116
103
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
It's a real host, not a preview: the published official `AppBridge` drives the
|
|
121
|
-
handshake and host behavior, while Mountly supplies two origins and a sandbox
|
|
122
|
-
proxy enforcing the CSP and permissions the App artifact declares. Sample tool
|
|
123
|
-
results come from `mcp.fixtures.json`,
|
|
124
|
-
one button each, so clicking between them exercises the update path:
|
|
125
|
-
|
|
126
|
-
```json
|
|
127
|
-
{ "annual": { "total": 99 }, "monthly": { "total": 12 } }
|
|
128
|
-
```
|
|
104
|
+
Real AppBridge host plus sandbox CSP. Tool arguments come from
|
|
105
|
+
`mcp.fixtures.json`.
|
|
129
106
|
|
|
130
|
-
|
|
131
|
-
fixtures become tool _arguments_ instead: the view renders what your handler
|
|
132
|
-
really returns, and the tool calls the view makes itself are routed there too.
|
|
133
|
-
|
|
134
|
-
## Install into your production server
|
|
107
|
+
## Production server
|
|
135
108
|
|
|
136
109
|
```ts
|
|
137
110
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -153,152 +126,92 @@ await registerMcpApps(server, {
|
|
|
153
126
|
config: {
|
|
154
127
|
inputSchema: { type: "object", properties: { location: { type: "string" } } },
|
|
155
128
|
},
|
|
156
|
-
handler: async ({ location }) => ({
|
|
129
|
+
handler: async ({ location }) => ({
|
|
130
|
+
structuredContent: { location, temperature: 72 },
|
|
131
|
+
}),
|
|
157
132
|
},
|
|
158
133
|
],
|
|
159
134
|
});
|
|
135
|
+
// connect with YOUR transport after this
|
|
160
136
|
```
|
|
161
137
|
|
|
162
|
-
Call `registerMcpApps` before
|
|
163
|
-
ownership of authentication, transport, prompts, non-UI tools, lifecycle, and
|
|
164
|
-
deployment. Views and tools are independent, so several tools can link to one
|
|
165
|
-
View and app-only tools use `visibility: "app"`. Mountly negotiates the UI
|
|
166
|
-
extension and degrades to text-only model tools for hosts without MCP Apps.
|
|
167
|
-
|
|
168
|
-
`createMcpAppServer` and `serveStdio` remain as convenience adapters for small
|
|
169
|
-
servers and existing projects.
|
|
138
|
+
Call `registerMcpApps` before `connect`. You keep auth, transport, and deploy.
|
|
170
139
|
|
|
171
|
-
## Verify
|
|
140
|
+
## Verify
|
|
172
141
|
|
|
173
142
|
```bash
|
|
143
|
+
npx mountly-mcp doctor
|
|
174
144
|
npx mountly-mcp verify
|
|
175
|
-
npx mountly-mcp verify --strict
|
|
176
|
-
npx mountly-mcp verify --render --strict
|
|
145
|
+
npx mountly-mcp verify --strict --render
|
|
177
146
|
```
|
|
178
147
|
|
|
179
|
-
|
|
180
|
-
launches Chromium, waits for the explicit bridge mount state, and rejects Views
|
|
181
|
-
that time out, throw, or mount without content. Errors always fail; advisory
|
|
182
|
-
warnings fail only under `--strict`. The same engine is exported as
|
|
183
|
-
`verifyMcpApps()` from `mountly-mcp/testing` for custom test runners. Install
|
|
184
|
-
Playwright and Chromium for the browser tier.
|
|
185
|
-
|
|
186
|
-
## Reading tool data in a view
|
|
187
|
-
|
|
188
|
-
The bridge exposes `mcp`, `toolInput`, `toolResult`, and `hostContext`. React
|
|
189
|
-
and Vue consume those bridge props in their wrapper and expose them through
|
|
190
|
-
hooks/composables, leaving the existing component's props unchanged. Svelte
|
|
191
|
-
receives them directly as component props:
|
|
192
|
-
|
|
193
|
-
```tsx
|
|
194
|
-
// React
|
|
195
|
-
const result = useToolResult<{ structuredContent?: Quote }>();
|
|
196
|
-
const quote = result?.structuredContent;
|
|
197
|
-
useHostStyles(); // adopt the host's theme variables and fonts
|
|
198
|
-
```
|
|
148
|
+
## Second View
|
|
199
149
|
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
const result = useToolResult<{ structuredContent?: Quote }>(); // a ref
|
|
203
|
-
const quote = computed(() => result.value?.structuredContent);
|
|
150
|
+
```bash
|
|
151
|
+
npx mountly-mcp add settings --framework react
|
|
204
152
|
```
|
|
205
153
|
|
|
206
|
-
|
|
154
|
+
## Glossary
|
|
207
155
|
|
|
208
|
-
|
|
156
|
+
[GLOSSARY.md](./GLOSSARY.md). Protocol: [`@modelcontextprotocol/ext-apps`](https://www.npmjs.com/package/@modelcontextprotocol/ext-apps).
|
|
209
157
|
|
|
210
|
-
|
|
211
|
-
|
|
158
|
+
## Compose from teams' elements
|
|
159
|
+
|
|
160
|
+
`mountly-mcp/compose` lets the agent build a page from many teams' custom
|
|
161
|
+
elements, using a [`mountly-compose`](../mountly-compose/README.md) catalog read
|
|
162
|
+
from their `custom-elements.json`:
|
|
212
163
|
|
|
213
164
|
```ts
|
|
214
|
-
import {
|
|
215
|
-
import {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
resourceUri: "ui://json-render-dashboard/view.html",
|
|
165
|
+
import { loadCatalog } from "mountly-compose";
|
|
166
|
+
import { registerComposeApp } from "mountly-mcp/compose";
|
|
167
|
+
|
|
168
|
+
registerComposeApp(server, {
|
|
169
|
+
catalog: await loadCatalog("https://cdn.acme.com/registry.json", { actions }),
|
|
170
|
+
imports: {
|
|
171
|
+
"mountly-compose": "https://cdn.acme.com/mountly-compose.js",
|
|
172
|
+
"@modelcontextprotocol/ext-apps": "https://cdn.acme.com/ext-apps/app-with-deps.js",
|
|
173
|
+
react: "…",
|
|
174
|
+
"react/jsx-runtime": "…",
|
|
175
|
+
"react-dom/client": "…",
|
|
176
|
+
"mountly-react": "…",
|
|
177
|
+
"mountly/embed": "…",
|
|
228
178
|
},
|
|
229
179
|
});
|
|
230
180
|
```
|
|
231
181
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
182
|
+
The catalog becomes `show_page`'s description, and the agent composes the page.
|
|
183
|
+
The handler validates the page and repairs small mistakes. When a page needs
|
|
184
|
+
more than a repair, the handler returns the reasons as a tool error for the
|
|
185
|
+
agent to fix. The `ui://` view renders with `mountly-compose` and loads each
|
|
186
|
+
team's embed on first use. Its CSP allows the origins in `imports` and the
|
|
187
|
+
teams' embed origins. The view runs at a `null` origin, so the servers behind
|
|
188
|
+
those URLs send `Access-Control-Allow-Origin`. When the user acts in a widget,
|
|
189
|
+
the view sends the agent its next turn with the current page. The
|
|
190
|
+
[`ai-compose`](../../docs/examples/ai-compose) example runs this in `mcp/`.
|
|
236
191
|
|
|
237
|
-
|
|
238
|
-
const { spec, loading, connected, error } = useJsonRenderApp({
|
|
239
|
-
name: "json-render-dashboard",
|
|
240
|
-
version: "1.0.0",
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
if (error) return <div>{error.message}</div>;
|
|
244
|
-
if (!connected || loading || !spec) return <div>Waiting…</div>;
|
|
245
|
-
return <pre>{JSON.stringify(spec, null, 2)}</pre>;
|
|
246
|
-
}
|
|
247
|
-
```
|
|
192
|
+
## Advanced: json-render
|
|
248
193
|
|
|
249
|
-
`
|
|
250
|
-
`mountly
|
|
251
|
-
|
|
252
|
-
### Interoperability with `@json-render/mcp`
|
|
253
|
-
|
|
254
|
-
Mountly's facade is wire-compatible with [`@json-render/mcp`](https://www.npmjs.com/package/@json-render/mcp) in both
|
|
255
|
-
directions, so you can mix the two without a bridge:
|
|
256
|
-
|
|
257
|
-
- **Tool input** is `{ spec }`, typed from `catalog.zodSchema()`, and the tool
|
|
258
|
-
description carries `catalog.prompt()` — the model sees the full component
|
|
259
|
-
vocabulary.
|
|
260
|
-
- **Tool output** carries the spec twice: as JSON in `content[0].text` (the
|
|
261
|
-
shape `@json-render/mcp`'s iframe hook reads) and as `structuredContent.spec`
|
|
262
|
-
(what Mountly's own hosts read).
|
|
263
|
-
- **`useJsonRenderApp`** reads either shape, so an iframe built with Mountly
|
|
264
|
-
renders a `@json-render/mcp` server unchanged, and vice versa.
|
|
265
|
-
|
|
266
|
-
One deliberate difference: `@json-render/core` 0.19 generates a _strict_ catalog
|
|
267
|
-
schema that requires `visible` and `children` on every element, which rejects
|
|
268
|
-
most first-attempt model output at the SDK's input gate. Mountly accepts the
|
|
269
|
-
catalog schema **or** a looser spec shape, then validates in the handler and
|
|
270
|
-
renders what it can. Drop the loose branch once core relaxes those fields.
|
|
194
|
+
`mountly-mcp/json-render` is optional catalog-driven UI. Start with `create` /
|
|
195
|
+
`createMcpView`. Docs: [Generative UI](https://mountly.dev/concepts/generative-ui/).
|
|
271
196
|
|
|
272
197
|
## Exports
|
|
273
198
|
|
|
274
|
-
| Entry
|
|
275
|
-
|
|
|
276
|
-
| `mountly-mcp`
|
|
277
|
-
| `mountly-mcp/react`
|
|
278
|
-
| `mountly-mcp/vue`
|
|
279
|
-
| `mountly-mcp/svelte`
|
|
280
|
-
| `mountly-mcp/vite`
|
|
281
|
-
| `mountly-mcp/artifact`
|
|
282
|
-
| `mountly-mcp/
|
|
283
|
-
| `mountly-mcp/
|
|
284
|
-
| `mountly-mcp/
|
|
285
|
-
| `mountly-mcp/
|
|
286
|
-
|
|
287
|
-
Types use the spec's own names (`McpUiHostContext`, `McpUiDisplayMode`, …) —
|
|
288
|
-
one vocabulary, no translation layer.
|
|
289
|
-
|
|
290
|
-
## Agent Skills
|
|
291
|
-
|
|
292
|
-
Install the plugin skills and ask your coding agent to create an MCP App:
|
|
293
|
-
[Agent Skills docs](https://mountly.dev/mcp-apps/agent-skills/) ·
|
|
294
|
-
[`create-mcp-app`](../../plugins/mountly-mcp/skills/create-mcp-app/SKILL.md).
|
|
295
|
-
|
|
296
|
-
Greenfield without an agent: `npx mountly-mcp create my-app --framework react`.
|
|
199
|
+
| Entry | Contents |
|
|
200
|
+
| ------------------------- | --------------------------------------- |
|
|
201
|
+
| `mountly-mcp` | `runBridge`, `publishMcpView`, types |
|
|
202
|
+
| `mountly-mcp/react` | `createMcpView` + hooks |
|
|
203
|
+
| `mountly-mcp/vue` | `createMcpView` + composables |
|
|
204
|
+
| `mountly-mcp/svelte` | `createMcpView` (props) |
|
|
205
|
+
| `mountly-mcp/vite` | `mountlyMcpViews()` |
|
|
206
|
+
| `mountly-mcp/artifact` | Manifest APIs |
|
|
207
|
+
| `mountly-mcp/server` | `registerMcpApps` |
|
|
208
|
+
| `mountly-mcp/dev` | Local host helpers |
|
|
209
|
+
| `mountly-mcp/testing` | `verifyMcpApps` |
|
|
210
|
+
| `mountly-mcp/json-render` | Generative path |
|
|
211
|
+
| `mountly-mcp/compose` | `registerComposeApp`, `composeViewHtml` |
|
|
297
212
|
|
|
298
213
|
## See also
|
|
299
214
|
|
|
300
|
-
- [`
|
|
301
|
-
|
|
302
|
-
- [
|
|
303
|
-
protocol harness (not the greenfield starter)
|
|
304
|
-
- `docs/how-to-test.md`
|
|
215
|
+
- [`mcp-release-readiness`](../../docs/examples/mcp-release-readiness) — production-shaped Vite View
|
|
216
|
+
- [`mcp-app-demo`](../../docs/examples/mcp-app-demo) — protocol harness
|
|
217
|
+
- [Host matrix](https://mountly.dev/mcp-apps/host-matrix/)
|