@miragon/mcp-toolkit-ui 0.10.1 → 1.1.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.
Files changed (49) hide show
  1. package/README.md +7 -7
  2. package/dist/app/adapt-data-widget.d.ts +26 -5
  3. package/dist/app/adapt-data-widget.d.ts.map +1 -1
  4. package/dist/app/adapt-data-widget.js +39 -5
  5. package/dist/app/adapt-data-widget.js.map +1 -1
  6. package/dist/app/host-bridge.d.ts +52 -46
  7. package/dist/app/host-bridge.d.ts.map +1 -1
  8. package/dist/app/host-bridge.js +30 -52
  9. package/dist/app/host-bridge.js.map +1 -1
  10. package/dist/app/index.d.ts +5 -4
  11. package/dist/app/index.d.ts.map +1 -1
  12. package/dist/app/index.js +9 -8
  13. package/dist/app/index.js.map +1 -1
  14. package/dist/app/mcp-app-view.d.ts.map +1 -1
  15. package/dist/app/mcp-app-view.js +37 -24
  16. package/dist/app/mcp-app-view.js.map +1 -1
  17. package/dist/app/mcp-toolkit-app.d.ts +21 -10
  18. package/dist/app/mcp-toolkit-app.d.ts.map +1 -1
  19. package/dist/app/mcp-toolkit-app.js +26 -12
  20. package/dist/app/mcp-toolkit-app.js.map +1 -1
  21. package/dist/app/mcp-use-host-bridge.d.ts +29 -0
  22. package/dist/app/mcp-use-host-bridge.d.ts.map +1 -0
  23. package/dist/app/mcp-use-host-bridge.js +120 -0
  24. package/dist/app/mcp-use-host-bridge.js.map +1 -0
  25. package/dist/app/use-host-actions.d.ts +6 -6
  26. package/dist/app/use-host-actions.js +6 -6
  27. package/dist/app/widget-fixture.d.ts +24 -21
  28. package/dist/app/widget-fixture.d.ts.map +1 -1
  29. package/dist/app/widget-fixture.js +27 -123
  30. package/dist/app/widget-fixture.js.map +1 -1
  31. package/dist/hooks/use-tool-result-recovery.d.ts +40 -15
  32. package/dist/hooks/use-tool-result-recovery.d.ts.map +1 -1
  33. package/dist/hooks/use-tool-result-recovery.js +57 -4
  34. package/dist/hooks/use-tool-result-recovery.js.map +1 -1
  35. package/dist/index.js +1 -1
  36. package/dist/index.js.map +1 -1
  37. package/package.json +16 -8
  38. package/src/app/adapt-data-widget.tsx +50 -6
  39. package/src/app/host-bridge.test.ts +107 -0
  40. package/src/app/host-bridge.tsx +85 -82
  41. package/src/app/index.ts +15 -10
  42. package/src/app/mcp-app-view.tsx +41 -32
  43. package/src/app/mcp-toolkit-app.tsx +33 -16
  44. package/src/app/mcp-use-host-bridge.tsx +164 -0
  45. package/src/app/use-host-actions.tsx +6 -6
  46. package/src/app/widget-fixture.tsx +35 -156
  47. package/src/hooks/use-tool-result-recovery.ts +75 -19
  48. package/src/index.ts +1 -1
  49. package/ui-catalog.json +81 -27
@@ -1,11 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState, useCallback } from "react";
3
- import { useWidget } from "mcp-use/react";
3
+ import { useDisplayMode, useHostContext, useToolContext } from "mcp-use/react";
4
4
  import { Maximize2, Minimize2, Pencil, RefreshCw } from "lucide-react";
5
5
  import { Skeleton } from "../primitives/skeleton.js";
6
6
  import { AppQueryProvider, queryClient } from "../providers/query-provider.js";
7
7
  import { useToolResultRecovery } from "../hooks/use-tool-result-recovery.js";
8
8
  import { parseToolResult } from "../lib/parse-tool-result.js";
9
+ import { useHostBridge } from "./host-bridge.js";
9
10
  import { LayoutBuilder } from "./layout-builder.js";
10
11
  import { WidgetRenderer } from "./widget-renderer.js";
11
12
  const DEFAULT_LABELS = {
@@ -27,15 +28,19 @@ function isCompleteViewData(value) {
27
28
  }
28
29
  export function McpAppView({ widgets, refreshToolName = "refresh-view", builderEnabled, labels, }) {
29
30
  const effectiveLabels = { ...DEFAULT_LABELS, ...labels };
30
- const { props: initialViewData, isPending, callTool, displayMode: currentDisplayMode, requestDisplayMode, safeArea, toolInput, hostContext, } = useWidget();
31
+ // Since mcp-use 2.x the shell reads the view channels through the dedicated
32
+ // hooks (all require the surrounding `bootstrapView` mount that
33
+ // `mountMcpToolkitApp` provides) and calls tools through the HostBridge that
34
+ // `McpUseHostBridgeProvider` installs.
35
+ const tool = useToolContext();
36
+ const { displayMode, requestDisplayMode } = useDisplayMode();
37
+ const { safeArea, hostContext } = useHostContext();
38
+ const bridge = useHostBridge();
39
+ const callTool = useCallback((name, args) => bridge.callTool(name, args), [bridge]);
40
+ const isPending = tool.status === "pending";
41
+ const initialViewData = tool.status === "ready" ? tool.toolOutput : undefined;
42
+ const toolInput = tool.toolInput;
31
43
  const [viewData, setViewData] = useState(null);
32
- const [displayMode, setDisplayMode] = useState(currentDisplayMode ?? "inline");
33
- const [prevCurrentDisplayMode, setPrevCurrentDisplayMode] = useState(currentDisplayMode);
34
- if (currentDisplayMode !== prevCurrentDisplayMode) {
35
- setPrevCurrentDisplayMode(currentDisplayMode);
36
- if (currentDisplayMode)
37
- setDisplayMode(currentDisplayMode);
38
- }
39
44
  const [isRefreshing, setIsRefreshing] = useState(false);
40
45
  // In-iframe build mode is purely a UI state — the LLM never sees the
41
46
  // catalogue, the user toggles into build by clicking the toolbar button.
@@ -59,10 +64,13 @@ export function McpAppView({ widgets, refreshToolName = "refresh-view", builderE
59
64
  }
60
65
  }
61
66
  // Hosts that strip `structuredContent` from the tool-result notification
62
- // (claude.ai / Claude Desktop) leave `initialViewData` empty forever; the
63
- // recovery re-executes the originating tool once via `callTool` (responses
64
- // carry `structuredContent` intact) and fills the gap. Conforming hosts
65
- // deliver a valid payload up front, so this never fires there.
67
+ // (claude.ai / Claude Desktop) never latch a result under mcp-use 2.x — the
68
+ // `useToolContext` latch ignores content-only results, so `isPending` stays
69
+ // true forever. The recovery therefore also arms itself on a grace timer
70
+ // once the originating tool is known, re-executes it via `callTool`
71
+ // (responses carry `structuredContent` intact), and fills the gap.
72
+ // Conforming hosts deliver a valid payload up front, so it never fires
73
+ // there.
66
74
  const recovery = useToolResultRecovery({
67
75
  resultReady: !isPending,
68
76
  props: initialViewData,
@@ -81,8 +89,10 @@ export function McpAppView({ widgets, refreshToolName = "refresh-view", builderE
81
89
  const toggleFullscreen = useCallback(async () => {
82
90
  const newMode = displayMode === "fullscreen" ? "inline" : "fullscreen";
83
91
  try {
84
- const result = await requestDisplayMode(newMode);
85
- setDisplayMode(result.mode);
92
+ // Advisory since 2.x: the promise only confirms the host processed the
93
+ // request. `displayMode` from `useDisplayMode` updates reactively when
94
+ // (and only when) the host actually applies the change.
95
+ await requestDisplayMode({ mode: newMode });
86
96
  }
87
97
  catch (e) {
88
98
  console.error("Failed to toggle display mode:", e);
@@ -135,7 +145,10 @@ export function McpAppView({ widgets, refreshToolName = "refresh-view", builderE
135
145
  }
136
146
  setBuildMode(false);
137
147
  }, []);
138
- if (isPending || !viewData) {
148
+ // `isPending` must not gate the render: on hosts that strip
149
+ // `structuredContent` the 2.x latch stays "pending" forever, and recovered
150
+ // viewData still has to replace the skeleton.
151
+ if (!viewData) {
139
152
  return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsx(Skeleton, { className: "h-8 w-48" }), _jsx(Skeleton, { className: "h-32 w-full" }), _jsx("p", { className: "text-muted-foreground text-sm", children: effectiveLabels.loading })] }));
140
153
  }
141
154
  const showHeader = !buildMode;
@@ -147,17 +160,17 @@ export function McpAppView({ widgets, refreshToolName = "refresh-view", builderE
147
160
  return (_jsxs("main", { style: {
148
161
  // Fullscreen: the widget owns the viewport, so we take the full window
149
162
  // and handle our own scrolling. Inline: the host (Claude, ChatGPT) owns
150
- // sizing + scrolling and is notified of our intrinsic height via
151
- // `McpUseProvider`, so we let content dictate height and avoid setting
152
- // overflowY (which would clip our own content inside a host that's
153
- // already auto-sized to us).
163
+ // sizing + scrolling and observes our intrinsic height via
164
+ // `bootstrapView`'s auto-resize, so we let content dictate height and
165
+ // avoid setting overflowY (which would clip our own content inside a
166
+ // host that's already auto-sized to us).
154
167
  ...(displayMode === "fullscreen"
155
168
  ? { minHeight: "100vh", overflowY: "auto" }
156
169
  : null),
157
- paddingTop: safeArea?.insets?.top,
158
- paddingRight: safeArea?.insets?.right,
159
- paddingBottom: safeArea?.insets?.bottom,
160
- paddingLeft: safeArea?.insets?.left,
170
+ paddingTop: safeArea.top,
171
+ paddingRight: safeArea.right,
172
+ paddingBottom: safeArea.bottom,
173
+ paddingLeft: safeArea.left,
161
174
  }, children: [showHeader && (_jsxs("div", { className: "mb-4 flex items-center justify-between", children: [viewData.title && _jsx("h2", { className: "text-xl font-bold", children: viewData.title }), _jsxs("div", { className: "ml-auto flex items-center gap-2", children: [viewData._refreshParams && viewData.layout && (_jsxs("button", { onClick: () => {
162
175
  void refreshView();
163
176
  }, disabled: isRefreshing, className: "hover:bg-accent hover:text-accent-foreground inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium transition-colors disabled:opacity-50", children: [_jsx(RefreshCw, { "aria-hidden": "true", className: `h-4 w-4 ${isRefreshing ? "animate-spin" : ""}` }), isRefreshing ? effectiveLabels.refreshing : effectiveLabels.refresh] })), builderAvailable && viewData._refreshParams && (_jsxs("button", { onClick: () => setBuildMode(true), className: "hover:bg-accent hover:text-accent-foreground inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium transition-colors", children: [_jsx(Pencil, { className: "h-4 w-4" }), effectiveLabels.build] })), _jsxs("button", { onClick: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-app-view.js","sourceRoot":"","sources":["../../src/app/mcp-app-view.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-app-view.js","sourceRoot":"","sources":["../../src/app/mcp-app-view.tsx"],"names":[],"mappings":"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"}
@@ -1,18 +1,29 @@
1
1
  import { type McpAppViewProps } from "./mcp-app-view.js";
2
2
  /**
3
- * Consumer-facing root for a toolkit-rendered MCP App. Wraps `McpAppView`
4
- * in `McpUseProvider` so the host (Claude, ChatGPT Apps SDK) receives
5
- * intrinsic-height notifications and the widget auto-sizes inside the
6
- * host's inline container.
3
+ * Consumer-facing root for a toolkit-rendered MCP App. Composes the mcp-use
4
+ * 2.x view plumbing around `McpAppView`: `ThemeProvider` applies the host's
5
+ * theme/style variables to the document, and `McpUseHostBridgeProvider`
6
+ * installs the `HostBridge` (and view-scope flag) every toolkit widget below
7
+ * resolves through `useHostBridge()`.
7
8
  *
8
- * Usage at the bundle entry point:
9
+ * Must render inside a `bootstrapView`-mounted tree — the mcp-use view hooks
10
+ * throw outside one. Use {@link mountMcpToolkitApp} at the bundle entry point,
11
+ * which wires exactly that; render `McpToolkitApp` directly only when
12
+ * composing a custom view under your own `bootstrapView` call.
13
+ */
14
+ export declare function McpToolkitApp(props: McpAppViewProps): import("react").JSX.Element;
15
+ /**
16
+ * Mount the toolkit app as the document's MCP App view — the bundle entry
17
+ * point since mcp-use 2.x.
18
+ *
19
+ * `bootstrapView` owns the mount: it connects the ext-apps postMessage bridge
20
+ * to the host, installs an error boundary, and auto-reports size changes
21
+ * (replacing 1.x's `createRoot` + `McpUseProvider` pair).
9
22
  *
10
23
  * ```tsx
11
- * createRoot(root).render(<McpToolkitApp widgets={widgets} />)
24
+ * // main.tsx of the widget bundle
25
+ * mountMcpToolkitApp({ widgets })
12
26
  * ```
13
- *
14
- * `McpUseProvider` also installs StrictMode, a default ErrorBoundary, and
15
- * the theme plumbing used by the toolkit primitives.
16
27
  */
17
- export declare function McpToolkitApp(props: McpAppViewProps): import("react").JSX.Element;
28
+ export declare function mountMcpToolkitApp(props: McpAppViewProps): void;
18
29
  //# sourceMappingURL=mcp-toolkit-app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-toolkit-app.d.ts","sourceRoot":"","sources":["../../src/app/mcp-toolkit-app.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEpE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,+BAMnD"}
1
+ {"version":3,"file":"mcp-toolkit-app.d.ts","sourceRoot":"","sources":["../../src/app/mcp-toolkit-app.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGpE;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,+BAQnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE/D"}
@@ -1,22 +1,36 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { McpUseProvider } from "mcp-use/react";
2
+ import { ThemeProvider, bootstrapView } from "mcp-use/react";
3
3
  import { McpAppView } from "./mcp-app-view.js";
4
+ import { McpUseHostBridgeProvider } from "./mcp-use-host-bridge.js";
4
5
  /**
5
- * Consumer-facing root for a toolkit-rendered MCP App. Wraps `McpAppView`
6
- * in `McpUseProvider` so the host (Claude, ChatGPT Apps SDK) receives
7
- * intrinsic-height notifications and the widget auto-sizes inside the
8
- * host's inline container.
6
+ * Consumer-facing root for a toolkit-rendered MCP App. Composes the mcp-use
7
+ * 2.x view plumbing around `McpAppView`: `ThemeProvider` applies the host's
8
+ * theme/style variables to the document, and `McpUseHostBridgeProvider`
9
+ * installs the `HostBridge` (and view-scope flag) every toolkit widget below
10
+ * resolves through `useHostBridge()`.
9
11
  *
10
- * Usage at the bundle entry point:
12
+ * Must render inside a `bootstrapView`-mounted tree — the mcp-use view hooks
13
+ * throw outside one. Use {@link mountMcpToolkitApp} at the bundle entry point,
14
+ * which wires exactly that; render `McpToolkitApp` directly only when
15
+ * composing a custom view under your own `bootstrapView` call.
16
+ */
17
+ export function McpToolkitApp(props) {
18
+ return (_jsx(ThemeProvider, { children: _jsx(McpUseHostBridgeProvider, { children: _jsx(McpAppView, { ...props }) }) }));
19
+ }
20
+ /**
21
+ * Mount the toolkit app as the document's MCP App view — the bundle entry
22
+ * point since mcp-use 2.x.
23
+ *
24
+ * `bootstrapView` owns the mount: it connects the ext-apps postMessage bridge
25
+ * to the host, installs an error boundary, and auto-reports size changes
26
+ * (replacing 1.x's `createRoot` + `McpUseProvider` pair).
11
27
  *
12
28
  * ```tsx
13
- * createRoot(root).render(<McpToolkitApp widgets={widgets} />)
29
+ * // main.tsx of the widget bundle
30
+ * mountMcpToolkitApp({ widgets })
14
31
  * ```
15
- *
16
- * `McpUseProvider` also installs StrictMode, a default ErrorBoundary, and
17
- * the theme plumbing used by the toolkit primitives.
18
32
  */
19
- export function McpToolkitApp(props) {
20
- return (_jsx(McpUseProvider, { children: _jsx(McpAppView, { ...props }) }));
33
+ export function mountMcpToolkitApp(props) {
34
+ bootstrapView({ default: () => _jsx(McpToolkitApp, { ...props }) });
21
35
  }
22
36
  //# sourceMappingURL=mcp-toolkit-app.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-toolkit-app.js","sourceRoot":"","sources":["../../src/app/mcp-toolkit-app.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAwB,MAAM,mBAAmB,CAAA;AAEpE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAAC,KAAsB;IAClD,OAAO,CACL,KAAC,cAAc,cACb,KAAC,UAAU,OAAK,KAAK,GAAI,GACV,CAClB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"mcp-toolkit-app.js","sourceRoot":"","sources":["../../src/app/mcp-toolkit-app.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAwB,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAEnE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,KAAsB;IAClD,OAAO,CACL,KAAC,aAAa,cACZ,KAAC,wBAAwB,cACvB,KAAC,UAAU,OAAK,KAAK,GAAI,GACA,GACb,CACjB,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAsB;IACvD,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAC,aAAa,OAAK,KAAK,GAAI,EAAE,CAAC,CAAA;AAChE,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type ReactNode } from "react";
2
+ /** Whether the subtree runs inside an mcp-use view (see {@link McpUseViewContext}). */
3
+ export declare function useIsInsideMcpUseView(): boolean;
4
+ /**
5
+ * Install the `mcp-use` {@link HostBridge} (plus the view-scope flag) for a
6
+ * subtree inside an mcp-use 2.x view.
7
+ *
8
+ * Composes the 2.x view hooks into the `McpUseWidgetSurface` shape and maps it
9
+ * through {@link toHostBridge}, so the fail-soft bridge contract widgets rely
10
+ * on is exactly the pinned one:
11
+ *
12
+ * - `callTool` — the dynamic-tool pool above; resolves with the raw
13
+ * `CallToolResult` envelope, rejects on tool errors.
14
+ * - `sendFollowup` / `openExternal` — `useSendFollowUp` / `useOpenExternal`;
15
+ * while the bridge is not connected (local `file://` preview), `openExternal`
16
+ * throws into `toHostBridge`'s documented `window.open` fallback.
17
+ * - `setModelContext` — writes `{ __model_context }` into the view state,
18
+ * which hosts receive via `ui/update-model-context` (ext-apps) or
19
+ * `widgetState` (ChatGPT). The key is a toolkit-owned convention since 2.x.
20
+ * - `getWidgetData` — the rendering tool's `structuredContent` once ready.
21
+ *
22
+ * Must render inside a `bootstrapView`-mounted tree (the mcp-use hooks throw
23
+ * otherwise) — `McpToolkitApp` does this for the standard bundle; use it
24
+ * directly only when composing a custom shell under `bootstrapView`.
25
+ */
26
+ export declare function McpUseHostBridgeProvider({ children }: {
27
+ children: ReactNode;
28
+ }): ReactNode;
29
+ //# sourceMappingURL=mcp-use-host-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-use-host-bridge.d.ts","sourceRoot":"","sources":["../../src/app/mcp-use-host-bridge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAqBd,uFAAuF;AACvF,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAoED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,GAAG,SAAS,CAwCzF"}
@@ -0,0 +1,120 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react";
3
+ import { useDynamicTool, useHostContext, useOpenExternal, useSendFollowUp, useToolContext, useViewState, useViewTheme, } from "mcp-use/react";
4
+ import { HostBridgeProvider, toHostBridge } from "./host-bridge.js";
5
+ /**
6
+ * `true` inside an mcp-use 2.x view — i.e. under a
7
+ * {@link McpUseHostBridgeProvider}, which itself only renders under a
8
+ * `bootstrapView`-mounted tree. Components that want to use `mcp-use/react`
9
+ * primitives (which throw outside a view) branch on this instead of probing
10
+ * mcp-use internals; see `adaptDataWidget`'s ModelContext handling.
11
+ */
12
+ const McpUseViewContext = createContext(false);
13
+ /** Whether the subtree runs inside an mcp-use view (see {@link McpUseViewContext}). */
14
+ export function useIsInsideMcpUseView() {
15
+ return useContext(McpUseViewContext);
16
+ }
17
+ /**
18
+ * Mounts one `useDynamicTool` handle and hands its stable `callTool` up to the
19
+ * pool. This rendered indirection exists because mcp-use 2.x has no public
20
+ * "call any tool by name" API — `useDynamicTool(name)` is fixed per hook
21
+ * instance, so a generic `(name, args)` caller needs one mounted hook per
22
+ * distinct name.
23
+ */
24
+ function ToolBinder({ name, onBind, }) {
25
+ const { callTool } = useDynamicTool(name);
26
+ useEffect(() => {
27
+ onBind(name, callTool);
28
+ }, [name, callTool, onBind]);
29
+ return null;
30
+ }
31
+ /**
32
+ * A generic `(name, args)` tool caller over mcp-use 2.x's per-name hooks.
33
+ *
34
+ * The first call for a given name mounts a {@link ToolBinder} (one render
35
+ * tick) and resolves once its handle is bound; later calls hit the bound
36
+ * handle directly. Binders accumulate for the mount's lifetime — tool names in
37
+ * a view are a small closed set. Calls left waiting when the view unmounts
38
+ * never settle, which is moot because their callers unmounted with it.
39
+ */
40
+ function useDynamicToolPool() {
41
+ const [names, setNames] = useState([]);
42
+ const boundRef = useRef(new Map());
43
+ const waitersRef = useRef(new Map());
44
+ const onBind = useCallback((name, call) => {
45
+ boundRef.current.set(name, call);
46
+ const waiters = waitersRef.current.get(name);
47
+ if (!waiters)
48
+ return;
49
+ waitersRef.current.delete(name);
50
+ for (const resolve of waiters)
51
+ resolve(call);
52
+ }, []);
53
+ const callTool = useCallback((name, args) => {
54
+ const bound = boundRef.current.get(name);
55
+ if (bound)
56
+ return bound(args);
57
+ const pending = new Promise((resolve) => {
58
+ const waiters = waitersRef.current.get(name) ?? [];
59
+ waiters.push(resolve);
60
+ waitersRef.current.set(name, waiters);
61
+ });
62
+ setNames((prev) => (prev.includes(name) ? prev : [...prev, name]));
63
+ return pending.then((call) => call(args));
64
+ }, []);
65
+ const binders = useMemo(() => names.map((name) => _jsx(ToolBinder, { name: name, onBind: onBind }, name)), [names, onBind]);
66
+ return { callTool, binders };
67
+ }
68
+ /**
69
+ * Install the `mcp-use` {@link HostBridge} (plus the view-scope flag) for a
70
+ * subtree inside an mcp-use 2.x view.
71
+ *
72
+ * Composes the 2.x view hooks into the `McpUseWidgetSurface` shape and maps it
73
+ * through {@link toHostBridge}, so the fail-soft bridge contract widgets rely
74
+ * on is exactly the pinned one:
75
+ *
76
+ * - `callTool` — the dynamic-tool pool above; resolves with the raw
77
+ * `CallToolResult` envelope, rejects on tool errors.
78
+ * - `sendFollowup` / `openExternal` — `useSendFollowUp` / `useOpenExternal`;
79
+ * while the bridge is not connected (local `file://` preview), `openExternal`
80
+ * throws into `toHostBridge`'s documented `window.open` fallback.
81
+ * - `setModelContext` — writes `{ __model_context }` into the view state,
82
+ * which hosts receive via `ui/update-model-context` (ext-apps) or
83
+ * `widgetState` (ChatGPT). The key is a toolkit-owned convention since 2.x.
84
+ * - `getWidgetData` — the rendering tool's `structuredContent` once ready.
85
+ *
86
+ * Must render inside a `bootstrapView`-mounted tree (the mcp-use hooks throw
87
+ * otherwise) — `McpToolkitApp` does this for the standard bundle; use it
88
+ * directly only when composing a custom shell under `bootstrapView`.
89
+ */
90
+ export function McpUseHostBridgeProvider({ children }) {
91
+ const { callTool, binders } = useDynamicToolPool();
92
+ const sendFollowUp = useSendFollowUp();
93
+ const openExternal = useOpenExternal();
94
+ const tool = useToolContext();
95
+ const theme = useViewTheme();
96
+ const { isAvailable } = useHostContext();
97
+ const [, setViewState] = useViewState({});
98
+ const output = tool.status === "ready" ? tool.toolOutput : undefined;
99
+ const bridge = useMemo(() => toHostBridge({
100
+ callTool,
101
+ sendFollowUpMessage: (prompt) => sendFollowUp({ prompt }),
102
+ openExternal: (url) => {
103
+ // Not connected (e.g. the bundle opened straight in a browser):
104
+ // throw synchronously so toHostBridge's window.open fallback fires.
105
+ if (!isAvailable)
106
+ throw new Error("mcp-use view bridge is not connected");
107
+ void openExternal({ url }).catch((err) => {
108
+ console.warn("[host-bridge] openExternal failed:", err);
109
+ });
110
+ },
111
+ output,
112
+ theme,
113
+ setState: (state) => {
114
+ setViewState((prev) => ({ ...prev, ...state }));
115
+ return Promise.resolve();
116
+ },
117
+ }), [callTool, sendFollowUp, openExternal, output, theme, isAvailable, setViewState]);
118
+ return (_jsxs(McpUseViewContext.Provider, { value: true, children: [binders, _jsx(HostBridgeProvider, { bridge: bridge, children: children })] }));
119
+ }
120
+ //# sourceMappingURL=mcp-use-host-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-use-host-bridge.js","sourceRoot":"","sources":["../../src/app/mcp-use-host-bridge.tsx"],"names":[],"mappings":"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"}
@@ -46,12 +46,12 @@ export declare function buildShowWidgetIntent(toolName: string, description: str
46
46
  * because they cross the UI→chat boundary for different reasons — see above).
47
47
  *
48
48
  * Relationship to {@link useHostBridge}: this hook resolves the active bridge
49
- * through `useHostBridge()`, so it honours an explicit `HostBridgeProvider`
50
- * (ChatGPT / standalone) when one is present, and otherwise falls back to the
51
- * default `mcp-use` bridge — exactly the behaviour widgets had before the bridge
52
- * abstraction existed, so no existing widget or test breaks. Prefer
53
- * `useHostBridge` directly in new portable widgets; `useHostActions` stays for
54
- * its named affordances and backward compatibility.
49
+ * through `useHostBridge()`, so it uses whatever the nearest
50
+ * `HostBridgeProvider` supplies — the toolkit shell installs the `mcp-use`
51
+ * bridge via `McpUseHostBridgeProvider`, ChatGPT / standalone mounts wrap
52
+ * their root themselves — and, like `useHostBridge`, it throws when no
53
+ * provider is present. Prefer `useHostBridge` directly in new portable
54
+ * widgets; `useHostActions` stays for its named affordances.
55
55
  */
56
56
  export declare function useHostActions(): HostActions;
57
57
  //# sourceMappingURL=use-host-actions.d.ts.map
@@ -19,12 +19,12 @@ export function buildShowWidgetIntent(toolName, description) {
19
19
  * because they cross the UI→chat boundary for different reasons — see above).
20
20
  *
21
21
  * Relationship to {@link useHostBridge}: this hook resolves the active bridge
22
- * through `useHostBridge()`, so it honours an explicit `HostBridgeProvider`
23
- * (ChatGPT / standalone) when one is present, and otherwise falls back to the
24
- * default `mcp-use` bridge — exactly the behaviour widgets had before the bridge
25
- * abstraction existed, so no existing widget or test breaks. Prefer
26
- * `useHostBridge` directly in new portable widgets; `useHostActions` stays for
27
- * its named affordances and backward compatibility.
22
+ * through `useHostBridge()`, so it uses whatever the nearest
23
+ * `HostBridgeProvider` supplies — the toolkit shell installs the `mcp-use`
24
+ * bridge via `McpUseHostBridgeProvider`, ChatGPT / standalone mounts wrap
25
+ * their root themselves — and, like `useHostBridge`, it throws when no
26
+ * provider is present. Prefer `useHostBridge` directly in new portable
27
+ * widgets; `useHostActions` stays for its named affordances.
28
28
  */
29
29
  export function useHostActions() {
30
30
  const bridge = useHostBridge();
@@ -67,8 +67,11 @@ export declare class FixtureCallToolRegistry {
67
67
  }
68
68
  /**
69
69
  * A host action a widget asked the host to perform, surfaced to the harness so
70
- * it can render an activity log. Mirrors the `mcp-use` bridge verbs that
71
- * {@link useHostActions} and `useWidget` route through `window.openai`.
70
+ * it can render an activity log. The `HostBridge` verbs (`callTool`,
71
+ * `sendFollowup`, `openExternal`) fire in the harness; `requestDisplayMode` /
72
+ * `setWidgetState` remain in the union for log-renderer compatibility but no
73
+ * longer fire — they belonged to the 1.x `window.openai` shim this harness
74
+ * used to install.
72
75
  */
73
76
  export type HostActionLog = {
74
77
  type: "callTool";
@@ -122,13 +125,14 @@ export interface WidgetFixtureHostProps {
122
125
  dataType?: string;
123
126
  /**
124
127
  * Tool fixtures keyed by tool name. Each value is a static result or a
125
- * handler — see {@link FixtureToolEntry}. Drives both `mcp-use`'s
126
- * `useCallTool` and the toolkit's `useToolQuery`.
128
+ * handler — see {@link FixtureToolEntry}. Drives the simulated
129
+ * `HostBridge.callTool` and the toolkit's `useToolQuery`.
127
130
  */
128
131
  tools?: Record<string, FixtureToolEntry>;
129
132
  /**
130
- * Host context globals to override (theme, displayMode, locale, …). Merged
131
- * over {@link DEFAULT_GLOBALS}.
133
+ * Host context overrides, merged over {@link DEFAULT_GLOBALS}. Since the
134
+ * mcp-use 2.x move only `theme` influences the simulated host; the other
135
+ * keys are accepted for compatibility with existing playground setups.
132
136
  */
133
137
  globals?: Record<string, unknown>;
134
138
  /**
@@ -155,25 +159,24 @@ export declare function buildFixtureWidgetProps(data: Record<string, unknown>, d
155
159
  * without booting a real MCP host or backend.
156
160
  *
157
161
  * ### What it mocks
158
- * - **`window.openai`** — the `mcp-use` Apps-SDK bridge `useWidget`/`useCallTool`
159
- * read from. Installed on mount, removed on unmount. `callTool` is routed to a
160
- * {@link FixtureCallToolRegistry} built from `tools`; `sendFollowUpMessage`,
161
- * `openExternal`, etc. are reported to `onHostAction`.
162
+ * - **A {@link HostBridge}** — a `createStandaloneHostBridge` over the fixture
163
+ * registry and callbacks, provided via `HostBridgeProvider`. `callTool`
164
+ * resolves against the {@link FixtureCallToolRegistry} built from `tools`;
165
+ * `sendFollowup` / `openExternal` are reported to `onHostAction`;
166
+ * `setModelContext` feeds `onModelContext`, so you can *see* what the model
167
+ * would (adapted widgets report through this bridge outside a real view).
162
168
  * - **The toolkit `AppQueryProvider`** — so widgets that fetch via `useToolQuery`
163
169
  * (e.g. generated `use*` hooks) resolve against the same registry.
164
- * - **`ModelContext`** — a flush handler captures the serialized context string
165
- * and forwards it to `onModelContext`, so you can *see* what the model would.
166
- * - **A {@link HostBridge}** — a `createStandaloneHostBridge` over the same
167
- * registry and callbacks, provided via `HostBridgeProvider`, so widgets
168
- * written against `useHostBridge` (the host-portable pattern) are simulated
169
- * from the same single source as the `window.openai` shim above.
170
170
  *
171
171
  * ### Boundaries
172
- * `mcp-use`'s hooks select their provider from `window.openai` presence; this
173
- * harness deliberately drives the Apps-SDK path (sets `window.openai`) rather
174
- * than the `postMessage` bridge, which only activates inside a cross-origin
175
- * iframe. The shim is intentionally minimal — it is not a host, and host
176
- * features beyond the bridge verbs above are out of scope.
172
+ * The harness simulates the **host-portable pattern** (`useHostBridge`,
173
+ * `useToolQuery`) — the surface the toolkit's skills teach. It does not
174
+ * simulate the mcp-use 2.x view runtime: since 2.x the `mcp-use/react` hooks
175
+ * only run under a `bootstrapView`-mounted view speaking the ext-apps
176
+ * postMessage protocol (the 1.x `window.openai` shim this harness used to
177
+ * install has no equivalent seam). A widget that calls `mcp-use/react` hooks
178
+ * directly must be exercised against a real host — or rewritten against
179
+ * `useHostBridge`, which is the portable contract anyway.
177
180
  */
178
181
  export declare function WidgetFixtureHost({ widget: Widget, data, dataType, tools, globals, onModelContext, onHostAction, }: WidgetFixtureHostProps): ReactNode;
179
182
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"widget-fixture.d.ts","sourceRoot":"","sources":["../../src/app/widget-fixture.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"widget-fixture.d.ts","sourceRoot":"","sources":["../../src/app/widget-fixture.tsx"],"names":[],"mappings":"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"}