mcp-use 1.5.0-canary.0 → 1.5.0-canary.1

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.
@@ -2,12 +2,15 @@
2
2
  * Entry point for the React integration.
3
3
  * Provides the useMcp hook and related types.
4
4
  */
5
- export { useMcp } from "./useMcp.js";
6
5
  export type { UseMcpOptions, UseMcpResult } from "./types.js";
6
+ export { useMcp } from "./useMcp.js";
7
7
  export { onMcpAuthorization } from "../auth/callback.js";
8
- export type { Tool, Resource, ResourceTemplate, Prompt, } from "@modelcontextprotocol/sdk/types.js";
9
- export { useWidget, useWidgetProps, useWidgetTheme, useWidgetState, } from "./useWidget.js";
10
- export { WidgetFullscreenWrapper } from "./WidgetFullscreenWrapper.js";
11
- export { WidgetDebugger } from "./WidgetDebugger.js";
12
- export type { UseWidgetResult, OpenAiGlobals, API, Theme, DisplayMode, DeviceType, SafeArea, SafeAreaInsets, UserAgent, CallToolResponse, UnknownObject, } from "./widget-types.js";
8
+ export type { Prompt, Resource, ResourceTemplate, Tool, } from "@modelcontextprotocol/sdk/types.js";
9
+ export { ErrorBoundary } from "./ErrorBoundary.js";
10
+ export { Image } from "./Image.js";
11
+ export { ThemeProvider } from "./ThemeProvider.js";
12
+ export { useWidget, useWidgetProps, useWidgetState, useWidgetTheme, } from "./useWidget.js";
13
+ export type { API, CallToolResponse, DeviceType, DisplayMode, OpenAiGlobals, SafeArea, SafeAreaInsets, Theme, UnknownObject, UserAgent, UseWidgetResult, } from "./widget-types.js";
14
+ export { WidgetControls } from "./WidgetControls.js";
15
+ export { McpUseProvider } from "./McpUseProvider.js";
13
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,YAAY,EACV,IAAI,EACJ,QAAQ,EACR,gBAAgB,EAChB,MAAM,GACP,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EACV,eAAe,EACf,aAAa,EACb,GAAG,EACH,KAAK,EACL,WAAW,EACX,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,aAAa,GACd,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,YAAY,EACV,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,IAAI,GACL,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,SAAS,EACT,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,GAAG,EACH,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,aAAa,EACb,QAAQ,EACR,cAAc,EACd,KAAK,EACL,aAAa,EACb,SAAS,EACT,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,12 +1,15 @@
1
1
  import {
2
- WidgetDebugger,
3
- WidgetFullscreenWrapper,
2
+ ErrorBoundary,
3
+ Image,
4
+ McpUseProvider,
5
+ ThemeProvider,
6
+ WidgetControls,
4
7
  useMcp,
5
8
  useWidget,
6
9
  useWidgetProps,
7
10
  useWidgetState,
8
11
  useWidgetTheme
9
- } from "../../chunk-RE7EYFDV.js";
12
+ } from "../../chunk-5XVM4A23.js";
10
13
  import {
11
14
  onMcpAuthorization
12
15
  } from "../../chunk-GRLCLVAK.js";
@@ -14,8 +17,11 @@ import "../../chunk-DSBKVAWD.js";
14
17
  import "../../chunk-34R6SIER.js";
15
18
  import "../../chunk-3GQAWCBQ.js";
16
19
  export {
17
- WidgetDebugger,
18
- WidgetFullscreenWrapper,
20
+ ErrorBoundary,
21
+ Image,
22
+ McpUseProvider,
23
+ ThemeProvider,
24
+ WidgetControls,
19
25
  onMcpAuthorization,
20
26
  useMcp,
21
27
  useWidget,
@@ -1 +1 @@
1
- {"version":3,"file":"useWidget.d.ts","sourceRoot":"","sources":["../../../src/react/useWidget.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,KAAK,EAMV,KAAK,EACL,aAAa,EAEb,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAqC3B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CACvB,MAAM,SAAS,aAAa,GAAG,aAAa,EAC5C,OAAO,SAAS,aAAa,GAAG,aAAa,EAC7C,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,MAAM,SAAS,aAAa,GAAG,aAAa,EAC5C,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAgM5E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,aAAa,GAAG,aAAa,EACzE,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,KAAK,CAGtC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,aAAa,EACzD,YAAY,CAAC,EAAE,MAAM,GACpB,SAAS;IACV,MAAM,GAAG,IAAI;IACb,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;CACrE,CAoBA"}
1
+ {"version":3,"file":"useWidget.d.ts","sourceRoot":"","sources":["../../../src/react/useWidget.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,KAAK,EAMV,KAAK,EACL,aAAa,EAEb,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAqC3B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CACvB,MAAM,SAAS,aAAa,GAAG,aAAa,EAC5C,OAAO,SAAS,aAAa,GAAG,aAAa,EAC7C,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,MAAM,SAAS,aAAa,GAAG,aAAa,EAC5C,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAkN5E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,aAAa,GAAG,aAAa,EACzE,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,KAAK,CAGtC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAS,aAAa,EACzD,YAAY,CAAC,EAAE,MAAM,GACpB,SAAS;IACV,MAAM,GAAG,IAAI;IACb,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;CACrE,CAoBA"}
@@ -67,6 +67,8 @@ export interface API<WidgetState extends UnknownObject = UnknownObject> {
67
67
  }>;
68
68
  /** Persist widget state that will be shown to the model */
69
69
  setWidgetState: (state: WidgetState) => Promise<void>;
70
+ /** Notify OpenAI about intrinsic height changes for auto-sizing */
71
+ notifyIntrinsicHeight: (height: number) => Promise<void>;
70
72
  }
71
73
  export declare const SET_GLOBALS_EVENT_TYPE = "openai:set_globals";
72
74
  export declare class SetGlobalsEvent extends CustomEvent<{
@@ -77,6 +79,8 @@ export declare class SetGlobalsEvent extends CustomEvent<{
77
79
  declare global {
78
80
  interface Window {
79
81
  openai?: API<any> & OpenAiGlobals<any, any, any, any>;
82
+ __getFile?: (filename: string) => string;
83
+ __mcpPublicUrl?: string;
80
84
  }
81
85
  interface WindowEventMap {
82
86
  [SET_GLOBALS_EVENT_TYPE]: SetGlobalsEvent;
@@ -108,6 +112,8 @@ export interface UseWidgetResult<TProps extends UnknownObject = UnknownObject, T
108
112
  userAgent: UserAgent;
109
113
  /** Current locale */
110
114
  locale: string;
115
+ /** MCP server base URL for making API requests */
116
+ mcp_url: string;
111
117
  /** Call a tool on the MCP server */
112
118
  callTool: (name: string, args: Record<string, unknown>) => Promise<CallToolResponse>;
113
119
  /** Send a follow-up message to the conversation */
@@ -1 +1 @@
1
- {"version":3,"file":"widget-types.d.ts","sourceRoot":"","sources":["../../../src/react/widget-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"widget-types.d.ts","sourceRoot":"","sources":["../../../src/react/widget-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"connect-adapter.d.ts","sourceRoot":"","sources":["../../../src/server/connect-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,iBAAiB,EAAQ,MAAM,MAAM,CAAC;AAE7D;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CA0C5D;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,GAAG,EACf,cAAc,GAAE,MAAY,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAQ5B;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,iBAAiB,EAAE,GAAG,EACtB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAqJ5B"}
1
+ {"version":3,"file":"connect-adapter.d.ts","sourceRoot":"","sources":["../../../src/server/connect-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,iBAAiB,EAAQ,MAAM,MAAM,CAAC;AAE7D;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CA0C5D;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,GAAG,EACf,cAAc,GAAE,MAAY,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAQ5B;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,iBAAiB,EAAE,GAAG,EACtB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAwJ5B"}
@@ -230,7 +230,7 @@ async function adaptConnectMiddleware(connectMiddleware, middlewarePath) {
230
230
  const mockRequest = createRequest({
231
231
  method: request.method.toUpperCase(),
232
232
  url: middlewarePathname + parsedURL.search,
233
- headers: Object.fromEntries(request.headers.entries()),
233
+ headers: request.headers && typeof request.headers.entries === "function" ? Object.fromEntries(request.headers.entries()) : request.headers,
234
234
  query,
235
235
  ...request.body && { body: request.body }
236
236
  });
@@ -1137,10 +1137,34 @@ var McpServer = class {
1137
1137
  );
1138
1138
  return;
1139
1139
  }
1140
- let entries = [];
1140
+ const entries = [];
1141
1141
  try {
1142
- const files = await fs.readdir(srcDir);
1143
- entries = files.filter((f) => f.endsWith(".tsx") || f.endsWith(".ts")).map((f) => pathHelpers.join(srcDir, f));
1142
+ const files = await fs.readdir(srcDir, { withFileTypes: true });
1143
+ for (const dirent of files) {
1144
+ if (dirent.name.startsWith("._") || dirent.name.startsWith(".DS_Store")) {
1145
+ continue;
1146
+ }
1147
+ if (dirent.isFile() && (dirent.name.endsWith(".tsx") || dirent.name.endsWith(".ts"))) {
1148
+ entries.push({
1149
+ name: dirent.name.replace(/\.tsx?$/, ""),
1150
+ path: pathHelpers.join(srcDir, dirent.name)
1151
+ });
1152
+ } else if (dirent.isDirectory()) {
1153
+ const widgetPath = pathHelpers.join(
1154
+ srcDir,
1155
+ dirent.name,
1156
+ "widget.tsx"
1157
+ );
1158
+ try {
1159
+ await fs.access(widgetPath);
1160
+ entries.push({
1161
+ name: dirent.name,
1162
+ path: widgetPath
1163
+ });
1164
+ } catch {
1165
+ }
1166
+ }
1167
+ }
1144
1168
  } catch (error) {
1145
1169
  console.log(`[WIDGETS] No widgets found in ${resourcesDir}/ directory`);
1146
1170
  return;
@@ -1176,12 +1200,10 @@ var McpServer = class {
1176
1200
  return;
1177
1201
  }
1178
1202
  const widgets = entries.map((entry) => {
1179
- const baseName = entry.split("/").pop()?.replace(/\.tsx?$/, "") || "widget";
1180
- const widgetName = baseName;
1181
1203
  return {
1182
- name: widgetName,
1183
- description: `Widget: ${widgetName}`,
1184
- entry
1204
+ name: entry.name,
1205
+ description: `Widget: ${entry.name}`,
1206
+ entry: entry.path
1185
1207
  };
1186
1208
  });
1187
1209
  for (const widget of widgets) {
@@ -1237,10 +1259,34 @@ if (container && Component) {
1237
1259
  console.log(
1238
1260
  `[WIDGETS] Serving ${entries.length} widget(s) with shared Vite dev server and HMR`
1239
1261
  );
1262
+ const ssrCssPlugin = {
1263
+ name: "ssr-css-handler",
1264
+ enforce: "pre",
1265
+ resolveId(id, importer, options2) {
1266
+ if (options2 && options2.ssr === true && (id.endsWith(".css") || id.endsWith(".module.css"))) {
1267
+ return "\0ssr-css:" + id;
1268
+ }
1269
+ return null;
1270
+ },
1271
+ load(id, options2) {
1272
+ if (options2 && options2.ssr === true && id.startsWith("\0ssr-css:")) {
1273
+ return "export default {}";
1274
+ }
1275
+ return null;
1276
+ }
1277
+ };
1278
+ const watchResourcesPlugin = {
1279
+ name: "watch-resources",
1280
+ configureServer(server) {
1281
+ const resourcesPath = pathHelpers.join(getCwd(), resourcesDir);
1282
+ server.watcher.add(resourcesPath);
1283
+ console.log(`[WIDGETS] Watching resources directory: ${resourcesPath}`);
1284
+ }
1285
+ };
1240
1286
  const viteServer = await createServer({
1241
1287
  root: tempDir,
1242
1288
  base: baseRoute + "/",
1243
- plugins: [tailwindcss(), react()],
1289
+ plugins: [ssrCssPlugin, watchResourcesPlugin, tailwindcss(), react()],
1244
1290
  resolve: {
1245
1291
  alias: {
1246
1292
  "@": pathHelpers.join(getCwd(), resourcesDir)
@@ -1248,7 +1294,35 @@ if (container && Component) {
1248
1294
  },
1249
1295
  server: {
1250
1296
  middlewareMode: true,
1251
- origin: serverOrigin
1297
+ origin: serverOrigin,
1298
+ watch: {
1299
+ // Watch the resources directory for HMR to work
1300
+ // This ensures changes to widget source files trigger hot reload
1301
+ ignored: ["**/node_modules/**", "**/.git/**"],
1302
+ // Include the resources directory in watch list
1303
+ // Vite will watch files imported from outside root
1304
+ usePolling: false
1305
+ }
1306
+ },
1307
+ // Explicitly tell Vite to watch files outside root
1308
+ // This is needed because widget entry files import from resources directory
1309
+ optimizeDeps: {
1310
+ // Don't optimize dependencies that might change
1311
+ exclude: []
1312
+ },
1313
+ ssr: {
1314
+ // Force Vite to transform these packages in SSR instead of using external requires
1315
+ noExternal: ["@openai/apps-sdk-ui", "react-router"]
1316
+ },
1317
+ define: {
1318
+ // Define process.env for SSR context
1319
+ "process.env.NODE_ENV": JSON.stringify(
1320
+ process.env.NODE_ENV || "development"
1321
+ ),
1322
+ "import.meta.env.DEV": true,
1323
+ "import.meta.env.PROD": false,
1324
+ "import.meta.env.MODE": JSON.stringify("development"),
1325
+ "import.meta.env.SSR": true
1252
1326
  }
1253
1327
  });
1254
1328
  this.app.use(`${baseRoute}/*`, async (c, next) => {
@@ -1283,6 +1357,32 @@ if (container && Component) {
1283
1357
  `${baseRoute}/*`
1284
1358
  );
1285
1359
  this.app.use(`${baseRoute}/*`, viteMiddleware);
1360
+ this.app.get("/mcp-use/public/*", async (c) => {
1361
+ const filePath = c.req.path.replace("/mcp-use/public/", "");
1362
+ const fullPath = pathHelpers.join(getCwd(), "public", filePath);
1363
+ try {
1364
+ if (await fsHelpers.existsSync(fullPath)) {
1365
+ const content = await fsHelpers.readFile(fullPath);
1366
+ const ext = filePath.split(".").pop()?.toLowerCase();
1367
+ const contentType = ext === "js" ? "application/javascript" : ext === "css" ? "text/css" : ext === "png" ? "image/png" : ext === "jpg" || ext === "jpeg" ? "image/jpeg" : ext === "svg" ? "image/svg+xml" : ext === "gif" ? "image/gif" : ext === "webp" ? "image/webp" : ext === "ico" ? "image/x-icon" : ext === "woff" || ext === "woff2" ? "font/woff" + (ext === "woff2" ? "2" : "") : ext === "ttf" ? "font/ttf" : ext === "otf" ? "font/otf" : ext === "json" ? "application/json" : ext === "pdf" ? "application/pdf" : "application/octet-stream";
1368
+ return new Response(content, {
1369
+ status: 200,
1370
+ headers: { "Content-Type": contentType }
1371
+ });
1372
+ }
1373
+ return c.notFound();
1374
+ } catch {
1375
+ return c.notFound();
1376
+ }
1377
+ });
1378
+ this.app.use(`${baseRoute}/*`, async (c) => {
1379
+ const url = new URL(c.req.url);
1380
+ const isAsset = url.pathname.match(
1381
+ /\.(js|css|png|jpg|jpeg|svg|json|ico|woff2?|tsx?)$/i
1382
+ );
1383
+ const message = isAsset ? "Widget asset not found" : "Widget not found";
1384
+ return c.text(message, 404);
1385
+ });
1286
1386
  widgets.forEach((widget) => {
1287
1387
  console.log(
1288
1388
  `[WIDGET] ${widget.name} mounted at ${baseRoute}/${widget.name}`
@@ -1356,7 +1456,7 @@ if (container && Component) {
1356
1456
  html = html.replace(
1357
1457
  /<head[^>]*>/i,
1358
1458
  `<head>
1359
- <script>window.__getFile = (filename) => { return "${baseUrl}/mcp-use/widgets/${widget.name}/"+filename }</script>`
1459
+ <script>window.__getFile = (filename) => { return "${baseUrl}/mcp-use/widgets/${widget.name}/"+filename }; window.__mcpPublicUrl = "${baseUrl}/mcp-use/public";</script>`
1360
1460
  );
1361
1461
  } catch (error) {
1362
1462
  console.error(
@@ -1518,7 +1618,7 @@ if (container && Component) {
1518
1618
  html = html.replace(
1519
1619
  /<head[^>]*>/i,
1520
1620
  `<head>
1521
- <script>window.__getFile = (filename) => { return "${baseUrl}/mcp-use/widgets/${widgetName}/"+filename }</script>`
1621
+ <script>window.__getFile = (filename) => { return "${baseUrl}/mcp-use/widgets/${widgetName}/"+filename }; window.__mcpPublicUrl = "${baseUrl}/mcp-use/public";</script>`
1522
1622
  );
1523
1623
  }
1524
1624
  } catch (error) {
@@ -1642,7 +1742,7 @@ if (container && Component) {
1642
1742
  query: Object.fromEntries(new URL(req.url).searchParams),
1643
1743
  params: {},
1644
1744
  body: {},
1645
- headers: Object.fromEntries(req.headers.entries()),
1745
+ headers: req.headers && typeof req.headers.entries === "function" ? Object.fromEntries(req.headers.entries()) : req.headers,
1646
1746
  method: req.method
1647
1747
  };
1648
1748
  const expressRes = {
@@ -1763,7 +1863,6 @@ if (container && Component) {
1763
1863
  return c.text("", 200);
1764
1864
  });
1765
1865
  this.app.get(endpoint, async (c) => {
1766
- const { expressReq, expressRes, getResponse } = createExpressLikeObjects(c);
1767
1866
  const transport = new StreamableHTTPServerTransport({
1768
1867
  sessionIdGenerator: void 0,
1769
1868
  enableJsonResponse: true
@@ -1771,13 +1870,107 @@ if (container && Component) {
1771
1870
  c.req.raw.signal?.addEventListener("abort", () => {
1772
1871
  transport.close();
1773
1872
  });
1873
+ const { readable, writable } = new globalThis.TransformStream();
1874
+ const writer = writable.getWriter();
1875
+ const encoder = new TextEncoder();
1876
+ let resolveResponse;
1877
+ const responsePromise = new Promise((resolve) => {
1878
+ resolveResponse = resolve;
1879
+ });
1880
+ let headersSent = false;
1881
+ const headers = {};
1882
+ let statusCode = 200;
1883
+ const expressRes = {
1884
+ statusCode: 200,
1885
+ headersSent: false,
1886
+ status: /* @__PURE__ */ __name((code) => {
1887
+ statusCode = code;
1888
+ expressRes.statusCode = code;
1889
+ return expressRes;
1890
+ }, "status"),
1891
+ setHeader: /* @__PURE__ */ __name((name, value) => {
1892
+ if (!headersSent) {
1893
+ headers[name] = Array.isArray(value) ? value.join(", ") : value;
1894
+ }
1895
+ }, "setHeader"),
1896
+ getHeader: /* @__PURE__ */ __name((name) => headers[name], "getHeader"),
1897
+ write: /* @__PURE__ */ __name((chunk) => {
1898
+ if (!headersSent) {
1899
+ headersSent = true;
1900
+ resolveResponse(
1901
+ new Response(readable, {
1902
+ status: statusCode,
1903
+ headers
1904
+ })
1905
+ );
1906
+ }
1907
+ const data = typeof chunk === "string" ? encoder.encode(chunk) : chunk instanceof Uint8Array ? chunk : Buffer.from(chunk);
1908
+ writer.write(data);
1909
+ return true;
1910
+ }, "write"),
1911
+ end: /* @__PURE__ */ __name((chunk) => {
1912
+ if (chunk) {
1913
+ expressRes.write(chunk);
1914
+ }
1915
+ if (!headersSent) {
1916
+ headersSent = true;
1917
+ resolveResponse(
1918
+ new Response(null, {
1919
+ status: statusCode,
1920
+ headers
1921
+ })
1922
+ );
1923
+ writer.close();
1924
+ } else {
1925
+ writer.close();
1926
+ }
1927
+ }, "end"),
1928
+ on: /* @__PURE__ */ __name((event, handler) => {
1929
+ if (event === "close") {
1930
+ expressRes._closeHandler = handler;
1931
+ }
1932
+ }, "on"),
1933
+ once: /* @__PURE__ */ __name(() => {
1934
+ }, "once"),
1935
+ removeListener: /* @__PURE__ */ __name(() => {
1936
+ }, "removeListener"),
1937
+ writeHead: /* @__PURE__ */ __name((code, _headers) => {
1938
+ statusCode = code;
1939
+ expressRes.statusCode = code;
1940
+ if (_headers) {
1941
+ Object.assign(headers, _headers);
1942
+ }
1943
+ if (!headersSent) {
1944
+ headersSent = true;
1945
+ resolveResponse(
1946
+ new Response(readable, {
1947
+ status: statusCode,
1948
+ headers
1949
+ })
1950
+ );
1951
+ }
1952
+ return expressRes;
1953
+ }, "writeHead"),
1954
+ flushHeaders: /* @__PURE__ */ __name(() => {
1955
+ }, "flushHeaders")
1956
+ };
1957
+ const expressReq = {
1958
+ ...c.req.raw,
1959
+ url: new URL(c.req.url).pathname + new URL(c.req.url).search,
1960
+ path: new URL(c.req.url).pathname,
1961
+ query: Object.fromEntries(new URL(c.req.url).searchParams),
1962
+ headers: c.req.header(),
1963
+ method: c.req.method
1964
+ };
1774
1965
  await this.server.connect(transport);
1775
- await this.waitForRequestComplete(transport, expressReq, expressRes);
1776
- const response = getResponse();
1777
- if (response) {
1778
- return response;
1779
- }
1780
- return c.text("", 200);
1966
+ transport.handleRequest(expressReq, expressRes).catch((err) => {
1967
+ console.error("MCP Transport error:", err);
1968
+ try {
1969
+ writer.close();
1970
+ } catch {
1971
+ }
1972
+ });
1973
+ return responsePromise;
1781
1974
  });
1782
1975
  this.app.delete(endpoint, async (c) => {
1783
1976
  const { expressReq, expressRes, getResponse } = createExpressLikeObjects(c);
@@ -2159,6 +2352,24 @@ if (container && Component) {
2159
2352
  return c.notFound();
2160
2353
  }
2161
2354
  });
2355
+ this.app.get("/mcp-use/public/*", async (c) => {
2356
+ const filePath = c.req.path.replace("/mcp-use/public/", "");
2357
+ const fullPath = pathHelpers.join(getCwd(), "dist", "public", filePath);
2358
+ try {
2359
+ if (await fsHelpers.existsSync(fullPath)) {
2360
+ const content = await fsHelpers.readFile(fullPath);
2361
+ const ext = filePath.split(".").pop()?.toLowerCase();
2362
+ const contentType = ext === "js" ? "application/javascript" : ext === "css" ? "text/css" : ext === "png" ? "image/png" : ext === "jpg" || ext === "jpeg" ? "image/jpeg" : ext === "svg" ? "image/svg+xml" : ext === "gif" ? "image/gif" : ext === "webp" ? "image/webp" : ext === "ico" ? "image/x-icon" : ext === "woff" || ext === "woff2" ? "font/woff" + (ext === "woff2" ? "2" : "") : ext === "ttf" ? "font/ttf" : ext === "otf" ? "font/otf" : ext === "json" ? "application/json" : ext === "pdf" ? "application/pdf" : "application/octet-stream";
2363
+ return new Response(content, {
2364
+ status: 200,
2365
+ headers: { "Content-Type": contentType }
2366
+ });
2367
+ }
2368
+ return c.notFound();
2369
+ } catch {
2370
+ return c.notFound();
2371
+ }
2372
+ });
2162
2373
  }
2163
2374
  /**
2164
2375
  * Create input schema for resource templates