(async function () {
'use strict';
const scriptTag = document.currentScript || document.querySelector('script[data-mcp-url]');
const serverUrl = scriptTag ? scriptTag.getAttribute('data-mcp-url') : null;
if (!serverUrl) {
console.error('[widget-runtime] Missing data-mcp-url attribute on script tag.');
return;
}
const scriptUrl = new URL(scriptTag.src);
const runtimeUrl = new URL('widget-runtime.mjs', scriptUrl);
const wasmJsUrl = new URL('mcp_wasm_client.js', scriptUrl);
const wasmBinaryUrl = new URL('mcp_wasm_client_bg.wasm', scriptUrl);
try {
const [runtimeModule, wasmModule] = await Promise.all([
import(runtimeUrl.href),
import(wasmJsUrl.href),
]);
const { App, AppBridge, installCompat } = runtimeModule;
const init = wasmModule.default;
const WasmClient = wasmModule.WasmClient;
await init(wasmBinaryUrl.href);
const client = new WasmClient();
await client.connect(serverUrl);
const app = new App({ name: 'StandaloneWidget', version: '1.0.0' });
installCompat(app);
window.mcpBridge.callTool = async function (name, args) {
try {
const mcpResult = await client.call_tool(name, args || {});
const success = !mcpResult.isError;
return { success, content: mcpResult.content || [] };
} catch (e) {
return { success: false, content: [], error: e.message };
}
};
window.dispatchEvent(new Event('mcpBridgeReady'));
} catch (e) {
console.error('[widget-runtime] Initialization failed:', e);
window.dispatchEvent(
new CustomEvent('mcpBridgeError', { detail: { error: e.message || String(e) } })
);
}
})();