@unovis/mcp 1.7.0-mcp.2 → 1.7.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/dist/codegen/index.js +23 -8
- package/dist/codegen/index.js.map +1 -1
- package/dist/recipes/bar.d.ts +1 -1
- package/dist/recipes/bar.js +4 -1
- package/dist/recipes/bar.js.map +1 -1
- package/dist/recipes/shared.js +1 -1
- package/dist/recipes/shared.js.map +1 -1
- package/dist/render/materialize.js +25 -8
- package/dist/render/materialize.js.map +1 -1
- package/dist/render/spec-schema.d.ts +3 -3
- package/dist/render/spec-schema.js +2 -2
- package/dist/render/spec-schema.js.map +1 -1
- package/dist/render/spec.d.ts +9 -4
- package/dist/render/spec.js +8 -3
- package/dist/render/spec.js.map +1 -1
- package/dist/server.js +12 -3
- package/dist/server.js.map +1 -1
- package/dist/tools/register.d.ts +11 -1
- package/dist/tools/register.js +70 -12
- package/dist/tools/register.js.map +1 -1
- package/dist/widget/bundle.js +423 -426
- package/dist/widget/bundle.meta.json +2 -2
- package/dist/widget/bundle.standard.js +215 -218
- package/dist/widget/entry.js +79 -2
- package/dist/widget/entry.js.map +1 -1
- package/dist/widget/events.js +3 -1
- package/dist/widget/events.js.map +1 -1
- package/dist/widget/unpack.js +1 -1
- package/dist/widget/unpack.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/architecture.md +12 -89
- package/docs/chart-spec.md +15 -12
- package/docs/interactive.md +24 -12
- package/docs/output-types.md +8 -9
- package/docs/tools.md +1 -1
- package/docs/troubleshooting.md +13 -44
- package/docs/webview.md +4 -6
- package/package.json +5 -4
- package/schema/{chart-spec.v1.baseline.json → chart-spec.v0.1.baseline.json} +5 -5
- package/schema/{chart-spec.v1.json → chart-spec.v0.1.json} +5 -5
package/dist/tools/register.js
CHANGED
|
@@ -7,8 +7,13 @@ import { recipes } from '../recipes/index.js';
|
|
|
7
7
|
import { renderChart, resolveMapMarkers, ChartInputError } from '../render/renderer.js';
|
|
8
8
|
import { buildChartDocument } from '../html/document.js';
|
|
9
9
|
import { generateCode, formatGeneratedFiles } from '../codegen/index.js';
|
|
10
|
-
/** MCP
|
|
10
|
+
/** MCP Apps resource the interactive output binds to (registered in server.ts) */
|
|
11
11
|
export const WIDGET_URI = 'ui://unovis/chart';
|
|
12
|
+
/** MCP Apps extension (SEP-1865, io.modelcontextprotocol/ui) wire constants.
|
|
13
|
+
* Pinned by tests; keep in sync with the extension spec rather than importing
|
|
14
|
+
* @modelcontextprotocol/ext-apps, whose react peer deps we don't need. */
|
|
15
|
+
export const APPS_MIME_TYPE = 'text/html;profile=mcp-app';
|
|
16
|
+
export const APPS_EXTENSION_ID = 'io.modelcontextprotocol/ui';
|
|
12
17
|
const textResult = (text, isError = false) => ({ content: [{ type: 'text', text }], ...(isError ? { isError: true } : {}) });
|
|
13
18
|
/** Map data lives behind a `{ $unovisMap }` marker that only the Node renderer
|
|
14
19
|
* resolves — the browser widget has no map bundles, so bake it into the spec */
|
|
@@ -31,17 +36,29 @@ export function refuseWrite(outputPath, writeDir) {
|
|
|
31
36
|
}
|
|
32
37
|
return undefined;
|
|
33
38
|
}
|
|
34
|
-
|
|
39
|
+
/** In an MCP Apps host, every declared tool call renders the widget iframe —
|
|
40
|
+
* so every result must carry the spec, or the frame sits empty next to the
|
|
41
|
+
* answer. Gated on the client capability to keep non-Apps responses lean
|
|
42
|
+
* (the spec embeds the full dataset). */
|
|
43
|
+
async function appsResult(result, spec, appsHost) {
|
|
44
|
+
if (!appsHost)
|
|
45
|
+
return result;
|
|
46
|
+
return {
|
|
47
|
+
...result,
|
|
48
|
+
structuredContent: { spec: (await specForBrowser(spec)) },
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
async function runRecipe(recipe, input, writeDir, appsHost = false) {
|
|
35
52
|
try {
|
|
36
53
|
const spec = recipe.toSpec(input);
|
|
37
54
|
if (input.outputType === 'config') {
|
|
38
|
-
return textResult(JSON.stringify(spec, null, 2));
|
|
55
|
+
return appsResult(textResult(JSON.stringify(spec, null, 2)), spec, appsHost);
|
|
39
56
|
}
|
|
40
57
|
// Code: emit source for the chosen wrapper. Uses the unresolved spec so
|
|
41
58
|
// map data stays an import rather than an inlined payload.
|
|
42
59
|
if (input.outputType === 'code') {
|
|
43
60
|
const files = generateCode(spec, input.framework ?? 'ts');
|
|
44
|
-
return textResult(formatGeneratedFiles(files));
|
|
61
|
+
return appsResult(textResult(formatGeneratedFiles(files)), spec, appsHost);
|
|
45
62
|
}
|
|
46
63
|
// Interactive: hand the spec to a UI-capable client, which renders it with
|
|
47
64
|
// the widget resource. Static content stays in the transcript as a summary.
|
|
@@ -50,6 +67,8 @@ async function runRecipe(recipe, input, writeDir) {
|
|
|
50
67
|
return {
|
|
51
68
|
content: [{ type: 'text', text: `Interactive chart: ${chartSummary(spec)}` }],
|
|
52
69
|
structuredContent: { spec: browserSpec },
|
|
70
|
+
// Result-level template link kept for pre-MCP-Apps hosts; official
|
|
71
|
+
// hosts key off the tool-level _meta.ui declaration instead
|
|
53
72
|
_meta: { 'openai/outputTemplate': WIDGET_URI },
|
|
54
73
|
};
|
|
55
74
|
}
|
|
@@ -77,8 +96,8 @@ async function runRecipe(recipe, input, writeDir) {
|
|
|
77
96
|
const target = outputPath ?? join(mkdtempSync(join(fallbackDir, 'unovis-chart-')), 'chart.html');
|
|
78
97
|
mkdirSync(dirname(target), { recursive: true });
|
|
79
98
|
writeFileSync(target, html);
|
|
80
|
-
return textResult(`Interactive chart saved to ${target} — open it in a browser for tooltips, ` +
|
|
81
|
-
`crosshair and hover highlighting. ${chartSummary(spec)}`);
|
|
99
|
+
return appsResult(textResult(`Interactive chart saved to ${target} — open it in a browser for tooltips, ` +
|
|
100
|
+
`crosshair and hover highlighting. ${chartSummary(spec)}`), spec, appsHost);
|
|
82
101
|
}
|
|
83
102
|
const result = await renderChart(spec);
|
|
84
103
|
const warningsNote = result.warnings.length ? ` (warnings: ${result.warnings.join('; ')})` : '';
|
|
@@ -91,21 +110,21 @@ async function runRecipe(recipe, input, writeDir) {
|
|
|
91
110
|
if (outputPath) {
|
|
92
111
|
mkdirSync(dirname(outputPath), { recursive: true });
|
|
93
112
|
writeFileSync(outputPath, png);
|
|
94
|
-
return textResult(`Chart saved to ${outputPath} (${result.width}×${result.height} at ${input.scale ?? 2}x)${warningsNote}`);
|
|
113
|
+
return appsResult(textResult(`Chart saved to ${outputPath} (${result.width}×${result.height} at ${input.scale ?? 2}x)${warningsNote}`), spec, appsHost);
|
|
95
114
|
}
|
|
96
|
-
return {
|
|
115
|
+
return appsResult({
|
|
97
116
|
content: [
|
|
98
117
|
{ type: 'image', data: png.toString('base64'), mimeType: 'image/png' },
|
|
99
118
|
...(warningsNote ? [{ type: 'text', text: warningsNote.trim() }] : []),
|
|
100
119
|
],
|
|
101
|
-
};
|
|
120
|
+
}, spec, appsHost);
|
|
102
121
|
}
|
|
103
122
|
if (outputPath) {
|
|
104
123
|
mkdirSync(dirname(outputPath), { recursive: true });
|
|
105
124
|
writeFileSync(outputPath, `<?xml version="1.0" encoding="UTF-8"?>\n${result.svg}`);
|
|
106
|
-
return textResult(`Chart saved to ${outputPath} (${result.width}×${result.height})${warningsNote}`);
|
|
125
|
+
return appsResult(textResult(`Chart saved to ${outputPath} (${result.width}×${result.height})${warningsNote}`), spec, appsHost);
|
|
107
126
|
}
|
|
108
|
-
return textResult(result.svg + (result.warnings.length ? `\n<!-- warnings: ${result.warnings.join('; ')} -->` : ''));
|
|
127
|
+
return appsResult(textResult(result.svg + (result.warnings.length ? `\n<!-- warnings: ${result.warnings.join('; ')} -->` : '')), spec, appsHost);
|
|
109
128
|
}
|
|
110
129
|
catch (e) {
|
|
111
130
|
if (e instanceof ChartInputError) {
|
|
@@ -119,6 +138,42 @@ export function activeRecipes(filter = {}) {
|
|
|
119
138
|
const enabled = filter.enabledTools?.length ? new Set(filter.enabledTools) : undefined;
|
|
120
139
|
return recipes.filter(r => !disabled.has(r.name) && (!enabled || enabled.has(r.name)));
|
|
121
140
|
}
|
|
141
|
+
/** Connections whose client advertised the MCP Apps extension.
|
|
142
|
+
*
|
|
143
|
+
* The SDK's ClientCapabilities schema predates SEP-1724, so it strips the
|
|
144
|
+
* `extensions` key during initialize — getClientCapabilities() can never see
|
|
145
|
+
* it (verified end-to-end). Until the SDK learns the field, the raw
|
|
146
|
+
* initialize message is sniffed at the transport seam; the schema path below
|
|
147
|
+
* takes over automatically once it stops returning undefined. */
|
|
148
|
+
const appsClients = new WeakSet();
|
|
149
|
+
/** Intercept a transport's onmessage assignment to sniff
|
|
150
|
+
* `capabilities.extensions` from the raw initialize request. Must run BEFORE
|
|
151
|
+
* connect — with an in-memory transport the initialize can arrive in the same
|
|
152
|
+
* microtask the connection is established in. */
|
|
153
|
+
export function sniffAppsCapability(server, transport) {
|
|
154
|
+
let assigned;
|
|
155
|
+
Object.defineProperty(transport, 'onmessage', {
|
|
156
|
+
configurable: true,
|
|
157
|
+
enumerable: true,
|
|
158
|
+
get: () => assigned,
|
|
159
|
+
set: (handler) => {
|
|
160
|
+
assigned = handler && ((...args) => {
|
|
161
|
+
const message = args[0];
|
|
162
|
+
if (message?.method === 'initialize' && message.params?.capabilities?.extensions?.[APPS_EXTENSION_ID]) {
|
|
163
|
+
appsClients.add(server);
|
|
164
|
+
}
|
|
165
|
+
handler.apply(transport, args);
|
|
166
|
+
});
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/** Did the connected client advertise the MCP Apps extension capability? */
|
|
171
|
+
function appsCapableClient(server) {
|
|
172
|
+
if (appsClients.has(server))
|
|
173
|
+
return true;
|
|
174
|
+
const capabilities = server.server.getClientCapabilities();
|
|
175
|
+
return Boolean(capabilities?.extensions?.[APPS_EXTENSION_ID]);
|
|
176
|
+
}
|
|
122
177
|
export function registerTools(server, filter = {}) {
|
|
123
178
|
for (const recipe of activeRecipes(filter)) {
|
|
124
179
|
server.registerTool(recipe.name, {
|
|
@@ -129,9 +184,12 @@ export function registerTools(server, filter = {}) {
|
|
|
129
184
|
readOnlyHint: false, // outputPath can write a file
|
|
130
185
|
openWorldHint: false, // fully local, no network
|
|
131
186
|
},
|
|
187
|
+
// MCP Apps: the template is declared on the tool, ahead of time, so
|
|
188
|
+
// hosts can prefetch, cache and security-review it before any call
|
|
189
|
+
_meta: { ui: { resourceUri: WIDGET_URI } },
|
|
132
190
|
},
|
|
133
191
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
134
|
-
async (args) => runRecipe(recipe, args, filter.writeDir));
|
|
192
|
+
async (args) => runRecipe(recipe, args, filter.writeDir, appsCapableClient(server)));
|
|
135
193
|
}
|
|
136
194
|
server.registerTool('get_unovis_info', {
|
|
137
195
|
title: 'Unovis info',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAKnE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAiBxE,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/tools/register.ts"],"names":[],"mappings":"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"}
|