mcp-use 1.11.0-canary.16 → 1.11.0-canary.18

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 (34) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{chunk-GVHS2DDJ.js → chunk-6TCXBLDE.js} +2 -2
  3. package/dist/{chunk-RU7FIJVM.js → chunk-BUUAJ4ZA.js} +1 -1
  4. package/dist/{chunk-76F72Y73.js → chunk-DKK3OEIY.js} +1 -1
  5. package/dist/{chunk-FMK46JYP.js → chunk-I3NZCYBR.js} +4 -2
  6. package/dist/{chunk-MGYJYTTX.js → chunk-M6HG2X4Q.js} +10 -1
  7. package/dist/{chunk-2FOTPDUJ.js → chunk-MIY5EBAT.js} +82 -43
  8. package/dist/{chunk-6AB7U4KA.js → chunk-OD724W55.js} +10 -4
  9. package/dist/{chunk-J56ACHX4.js → chunk-SRXA64QS.js} +8 -3
  10. package/dist/index.cjs +107 -46
  11. package/dist/index.js +13 -13
  12. package/dist/src/agents/index.cjs +93 -43
  13. package/dist/src/agents/index.js +5 -5
  14. package/dist/src/browser.cjs +101 -45
  15. package/dist/src/browser.js +10 -10
  16. package/dist/src/client/browser.d.ts.map +1 -1
  17. package/dist/src/client.cjs +93 -43
  18. package/dist/src/client.js +3 -3
  19. package/dist/src/config.d.ts.map +1 -1
  20. package/dist/src/connectors/http.d.ts +2 -0
  21. package/dist/src/connectors/http.d.ts.map +1 -1
  22. package/dist/src/react/index.cjs +105 -46
  23. package/dist/src/react/index.js +5 -5
  24. package/dist/src/react/useMcp.d.ts.map +1 -1
  25. package/dist/src/server/index.cjs +89 -46
  26. package/dist/src/server/index.js +12 -8
  27. package/dist/src/server/types/widget.d.ts +2 -2
  28. package/dist/src/server/types/widget.d.ts.map +1 -1
  29. package/dist/src/server/widgets/mount-widgets-dev.d.ts.map +1 -1
  30. package/dist/src/telemetry/telemetry.d.ts +1 -0
  31. package/dist/src/telemetry/telemetry.d.ts.map +1 -1
  32. package/dist/src/version.d.ts +1 -1
  33. package/dist/{tool-execution-helpers-7ZZVUHAM.js → tool-execution-helpers-YTLQZ7KG.js} +2 -2
  34. package/package.json +3 -3
@@ -942,7 +942,7 @@ function generateUUID() {
942
942
  __name(generateUUID, "generateUUID");
943
943
 
944
944
  // src/version.ts
945
- var VERSION = "1.11.0-canary.16";
945
+ var VERSION = "1.11.0-canary.18";
946
946
  function getPackageVersion() {
947
947
  return VERSION;
948
948
  }
@@ -1080,12 +1080,26 @@ var Telemetry = class _Telemetry {
1080
1080
  "Anonymized telemetry enabled. Set MCP_USE_ANONYMIZED_TELEMETRY=false to disable."
1081
1081
  );
1082
1082
  this._posthogLoading = this._initPostHog();
1083
- try {
1084
- this._scarfClient = new ScarfEventLogger(this.SCARF_GATEWAY_URL, 3e3);
1085
- } catch (e) {
1086
- logger.warn(`Failed to initialize Scarf telemetry: ${e}`);
1083
+ if (this._runtimeEnvironment !== "browser") {
1084
+ try {
1085
+ this._scarfClient = new ScarfEventLogger(
1086
+ this.SCARF_GATEWAY_URL,
1087
+ 3e3
1088
+ );
1089
+ } catch (e) {
1090
+ logger.warn(`Failed to initialize Scarf telemetry: ${e}`);
1091
+ this._scarfClient = null;
1092
+ }
1093
+ } else {
1087
1094
  this._scarfClient = null;
1088
1095
  }
1096
+ if (this._storageCapability === "filesystem" && this._scarfClient) {
1097
+ setTimeout(() => {
1098
+ this.trackPackageDownload({ triggered_by: "initialization" }).catch(
1099
+ (e) => logger.debug(`Failed to track package download: ${e}`)
1100
+ );
1101
+ }, 0);
1102
+ }
1089
1103
  }
1090
1104
  }
1091
1105
  _checkTelemetryDisabled() {
@@ -1210,47 +1224,65 @@ var Telemetry = class _Telemetry {
1210
1224
  break;
1211
1225
  case "session-only":
1212
1226
  default:
1213
- this._currUserId = `session-${generateUUID()}`;
1214
- logger.debug(
1215
- `Using session-based user ID (${this._runtimeEnvironment} environment)`
1216
- );
1227
+ try {
1228
+ this._currUserId = `session-${generateUUID()}`;
1229
+ } catch (uuidError) {
1230
+ this._currUserId = `session-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1231
+ }
1217
1232
  break;
1218
1233
  }
1219
- if (this._storageCapability === "filesystem" && this._currUserId) {
1220
- this._trackPackageDownloadInternal(this._currUserId, {
1221
- triggered_by: "user_id_property"
1222
- }).catch((e) => logger.debug(`Failed to track package download: ${e}`));
1223
- }
1224
1234
  } catch (e) {
1225
- logger.debug(`Failed to get/create user ID: ${e}`);
1226
1235
  this._currUserId = this.UNKNOWN_USER_ID;
1227
1236
  }
1228
1237
  return this._currUserId;
1229
1238
  }
1230
1239
  /**
1231
1240
  * Get or create user ID from filesystem (Node.js/Bun)
1241
+ * Falls back to session ID if filesystem operations fail
1232
1242
  */
1233
1243
  _getUserIdFromFilesystem() {
1234
- const fs2 = require("fs");
1235
- const os = require("os");
1236
- const path2 = require("path");
1237
- if (!this._userIdPath) {
1238
- this._userIdPath = path2.join(
1239
- this._getCacheHome(os, path2),
1240
- "mcp_use_3",
1241
- "telemetry_user_id"
1242
- );
1243
- }
1244
- const isFirstTime = !fs2.existsSync(this._userIdPath);
1245
- if (isFirstTime) {
1246
- logger.debug(`Creating user ID path: ${this._userIdPath}`);
1247
- fs2.mkdirSync(path2.dirname(this._userIdPath), { recursive: true });
1248
- const newUserId = generateUUID();
1249
- fs2.writeFileSync(this._userIdPath, newUserId);
1250
- logger.debug(`User ID path created: ${this._userIdPath}`);
1251
- return newUserId;
1244
+ try {
1245
+ let fs2, os, path2;
1246
+ try {
1247
+ fs2 = require("fs");
1248
+ os = require("os");
1249
+ path2 = require("path");
1250
+ } catch (requireError) {
1251
+ try {
1252
+ const sessionId = `session-${generateUUID()}`;
1253
+ return sessionId;
1254
+ } catch (uuidError) {
1255
+ return `session-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1256
+ }
1257
+ }
1258
+ if (!this._userIdPath) {
1259
+ this._userIdPath = path2.join(
1260
+ this._getCacheHome(os, path2),
1261
+ "mcp_use_3",
1262
+ "telemetry_user_id"
1263
+ );
1264
+ }
1265
+ const isFirstTime = !fs2.existsSync(this._userIdPath);
1266
+ if (isFirstTime) {
1267
+ fs2.mkdirSync(path2.dirname(this._userIdPath), { recursive: true });
1268
+ let newUserId;
1269
+ try {
1270
+ newUserId = generateUUID();
1271
+ } catch (uuidError) {
1272
+ newUserId = `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1273
+ }
1274
+ fs2.writeFileSync(this._userIdPath, newUserId);
1275
+ return newUserId;
1276
+ }
1277
+ const userId = fs2.readFileSync(this._userIdPath, "utf-8").trim();
1278
+ return userId;
1279
+ } catch (e) {
1280
+ try {
1281
+ return `session-${generateUUID()}`;
1282
+ } catch (uuidError) {
1283
+ return `session-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1284
+ }
1252
1285
  }
1253
- return fs2.readFileSync(this._userIdPath, "utf-8").trim();
1254
1286
  }
1255
1287
  /**
1256
1288
  * Get or create user ID from localStorage (Browser)
@@ -1259,14 +1291,22 @@ var Telemetry = class _Telemetry {
1259
1291
  try {
1260
1292
  let userId = localStorage.getItem(USER_ID_STORAGE_KEY);
1261
1293
  if (!userId) {
1262
- userId = generateUUID();
1294
+ try {
1295
+ userId = generateUUID();
1296
+ } catch (uuidError) {
1297
+ userId = `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1298
+ }
1263
1299
  localStorage.setItem(USER_ID_STORAGE_KEY, userId);
1264
- logger.debug(`Created new browser user ID`);
1265
1300
  }
1266
1301
  return userId;
1267
1302
  } catch (e) {
1268
- logger.debug(`localStorage access failed: ${e}`);
1269
- return `session-${generateUUID()}`;
1303
+ let sessionId;
1304
+ try {
1305
+ sessionId = `session-${generateUUID()}`;
1306
+ } catch (uuidError) {
1307
+ sessionId = `session-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1308
+ }
1309
+ return sessionId;
1270
1310
  }
1271
1311
  }
1272
1312
  _getCacheHome(os, path2) {
@@ -1295,6 +1335,7 @@ var Telemetry = class _Telemetry {
1295
1335
  if (!this._posthogNodeClient && !this._posthogBrowserClient && !this._scarfClient) {
1296
1336
  return;
1297
1337
  }
1338
+ const currentUserId = this.userId;
1298
1339
  const properties = { ...event.properties };
1299
1340
  properties.mcp_use_version = getPackageVersion();
1300
1341
  properties.language = "typescript";
@@ -1302,9 +1343,8 @@ var Telemetry = class _Telemetry {
1302
1343
  properties.runtime = this._runtimeEnvironment;
1303
1344
  if (this._posthogNodeClient) {
1304
1345
  try {
1305
- logger.debug(`CAPTURE: PostHog Node Event ${event.name}`);
1306
1346
  this._posthogNodeClient.capture({
1307
- distinctId: this.userId,
1347
+ distinctId: currentUserId,
1308
1348
  event: event.name,
1309
1349
  properties
1310
1350
  });
@@ -1314,10 +1354,9 @@ var Telemetry = class _Telemetry {
1314
1354
  }
1315
1355
  if (this._posthogBrowserClient) {
1316
1356
  try {
1317
- logger.debug(`CAPTURE: PostHog Browser Event ${event.name}`);
1318
1357
  this._posthogBrowserClient.capture(event.name, {
1319
1358
  ...properties,
1320
- distinct_id: this.userId
1359
+ distinct_id: currentUserId
1321
1360
  });
1322
1361
  } catch (e) {
1323
1362
  logger.debug(
@@ -1329,7 +1368,7 @@ var Telemetry = class _Telemetry {
1329
1368
  try {
1330
1369
  const scarfProperties = {
1331
1370
  ...properties,
1332
- user_id: this.userId,
1371
+ user_id: currentUserId,
1333
1372
  event: event.name
1334
1373
  };
1335
1374
  await this._scarfClient.logEvent(scarfProperties);
@@ -3143,6 +3182,7 @@ var HttpConnector = class extends BaseConnector {
3143
3182
  sseReadTimeout;
3144
3183
  clientInfo;
3145
3184
  preferSse;
3185
+ disableSseFallback;
3146
3186
  transportType = null;
3147
3187
  streamableTransport = null;
3148
3188
  constructor(baseUrl, opts = {}) {
@@ -3159,6 +3199,7 @@ var HttpConnector = class extends BaseConnector {
3159
3199
  version: "1.0.0"
3160
3200
  };
3161
3201
  this.preferSse = opts.preferSse ?? false;
3202
+ this.disableSseFallback = opts.disableSseFallback ?? false;
3162
3203
  }
3163
3204
  /** Establish connection to the MCP implementation via HTTP (streamable or SSE). */
3164
3205
  async connect() {
@@ -3215,6 +3256,13 @@ var HttpConnector = class extends BaseConnector {
3215
3256
  authError.code = 401;
3216
3257
  throw authError;
3217
3258
  }
3259
+ if (this.disableSseFallback) {
3260
+ logger.info("SSE fallback disabled - failing connection");
3261
+ await this.cleanupResources();
3262
+ throw new Error(
3263
+ `Streamable HTTP connection failed: ${fallbackReason}. SSE fallback is disabled.`
3264
+ );
3265
+ }
3218
3266
  logger.info("\u{1F504} Falling back to SSE transport...");
3219
3267
  try {
3220
3268
  await this.connectWithSse(baseUrl);
@@ -3579,6 +3627,8 @@ function createConnectorFromConfig(serverConfig, connectorOptions) {
3579
3627
  authToken: serverConfig.auth_token || serverConfig.authToken,
3580
3628
  // Only force SSE if explicitly requested
3581
3629
  preferSse: serverConfig.preferSse || transport === "sse",
3630
+ // Disable SSE fallback if explicitly disabled in config
3631
+ disableSseFallback: serverConfig.disableSseFallback,
3582
3632
  ...connectorOptions
3583
3633
  });
3584
3634
  }
@@ -4,11 +4,11 @@ import {
4
4
  MCPClient,
5
5
  VMCodeExecutor,
6
6
  isVMAvailable
7
- } from "../chunk-FMK46JYP.js";
7
+ } from "../chunk-I3NZCYBR.js";
8
8
  import {
9
9
  MCPSession
10
- } from "../chunk-MGYJYTTX.js";
11
- import "../chunk-2FOTPDUJ.js";
10
+ } from "../chunk-M6HG2X4Q.js";
11
+ import "../chunk-MIY5EBAT.js";
12
12
  import "../chunk-FRUZDWXH.js";
13
13
  import "../chunk-3GQAWCBQ.js";
14
14
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAKjE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAGpE;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAC/C,aAAa,CAwBf"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAKjE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAGpE;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAC/C,aAAa,CA0Bf"}
@@ -10,6 +10,7 @@ export interface HttpConnectorOptions extends ConnectorInitOptions {
10
10
  version: string;
11
11
  };
12
12
  preferSse?: boolean;
13
+ disableSseFallback?: boolean;
13
14
  }
14
15
  export declare class HttpConnector extends BaseConnector {
15
16
  private readonly baseUrl;
@@ -18,6 +19,7 @@ export declare class HttpConnector extends BaseConnector {
18
19
  private readonly sseReadTimeout;
19
20
  private readonly clientInfo;
20
21
  private readonly preferSse;
22
+ private readonly disableSseFallback;
21
23
  private transportType;
22
24
  private streamableTransport;
23
25
  constructor(baseUrl: string, opts?: HttpConnectorOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/connectors/http.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,mBAAmB,CAA8C;gBAE7D,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB;IAkB5D,mFAAmF;IAC7E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAqHhB,yBAAyB;YAkJzB,cAAc;IAqE5B,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM7C;IAED;;OAEG;IACH,gBAAgB,IAAI,iBAAiB,GAAG,KAAK,GAAG,IAAI;CAGrD"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/connectors/http.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,mBAAmB,CAA8C;gBAE7D,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB;IAmB5D,mFAAmF;IAC7E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YA8HhB,yBAAyB;YAkJzB,cAAc;IAqE5B,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM7C;IAED;;OAEG;IACH,gBAAgB,IAAI,iBAAiB,GAAG,KAAK,GAAG,IAAI;CAGrD"}
@@ -918,7 +918,7 @@ function generateUUID() {
918
918
  __name(generateUUID, "generateUUID");
919
919
 
920
920
  // src/version.ts
921
- var VERSION = "1.11.0-canary.16";
921
+ var VERSION = "1.11.0-canary.18";
922
922
  function getPackageVersion() {
923
923
  return VERSION;
924
924
  }
@@ -1056,12 +1056,26 @@ var Telemetry = class _Telemetry {
1056
1056
  "Anonymized telemetry enabled. Set MCP_USE_ANONYMIZED_TELEMETRY=false to disable."
1057
1057
  );
1058
1058
  this._posthogLoading = this._initPostHog();
1059
- try {
1060
- this._scarfClient = new ScarfEventLogger(this.SCARF_GATEWAY_URL, 3e3);
1061
- } catch (e) {
1062
- logger.warn(`Failed to initialize Scarf telemetry: ${e}`);
1059
+ if (this._runtimeEnvironment !== "browser") {
1060
+ try {
1061
+ this._scarfClient = new ScarfEventLogger(
1062
+ this.SCARF_GATEWAY_URL,
1063
+ 3e3
1064
+ );
1065
+ } catch (e) {
1066
+ logger.warn(`Failed to initialize Scarf telemetry: ${e}`);
1067
+ this._scarfClient = null;
1068
+ }
1069
+ } else {
1063
1070
  this._scarfClient = null;
1064
1071
  }
1072
+ if (this._storageCapability === "filesystem" && this._scarfClient) {
1073
+ setTimeout(() => {
1074
+ this.trackPackageDownload({ triggered_by: "initialization" }).catch(
1075
+ (e) => logger.debug(`Failed to track package download: ${e}`)
1076
+ );
1077
+ }, 0);
1078
+ }
1065
1079
  }
1066
1080
  }
1067
1081
  _checkTelemetryDisabled() {
@@ -1186,47 +1200,65 @@ var Telemetry = class _Telemetry {
1186
1200
  break;
1187
1201
  case "session-only":
1188
1202
  default:
1189
- this._currUserId = `session-${generateUUID()}`;
1190
- logger.debug(
1191
- `Using session-based user ID (${this._runtimeEnvironment} environment)`
1192
- );
1203
+ try {
1204
+ this._currUserId = `session-${generateUUID()}`;
1205
+ } catch (uuidError) {
1206
+ this._currUserId = `session-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1207
+ }
1193
1208
  break;
1194
1209
  }
1195
- if (this._storageCapability === "filesystem" && this._currUserId) {
1196
- this._trackPackageDownloadInternal(this._currUserId, {
1197
- triggered_by: "user_id_property"
1198
- }).catch((e) => logger.debug(`Failed to track package download: ${e}`));
1199
- }
1200
1210
  } catch (e) {
1201
- logger.debug(`Failed to get/create user ID: ${e}`);
1202
1211
  this._currUserId = this.UNKNOWN_USER_ID;
1203
1212
  }
1204
1213
  return this._currUserId;
1205
1214
  }
1206
1215
  /**
1207
1216
  * Get or create user ID from filesystem (Node.js/Bun)
1217
+ * Falls back to session ID if filesystem operations fail
1208
1218
  */
1209
1219
  _getUserIdFromFilesystem() {
1210
- const fs = require("fs");
1211
- const os = require("os");
1212
- const path = require("path");
1213
- if (!this._userIdPath) {
1214
- this._userIdPath = path.join(
1215
- this._getCacheHome(os, path),
1216
- "mcp_use_3",
1217
- "telemetry_user_id"
1218
- );
1219
- }
1220
- const isFirstTime = !fs.existsSync(this._userIdPath);
1221
- if (isFirstTime) {
1222
- logger.debug(`Creating user ID path: ${this._userIdPath}`);
1223
- fs.mkdirSync(path.dirname(this._userIdPath), { recursive: true });
1224
- const newUserId = generateUUID();
1225
- fs.writeFileSync(this._userIdPath, newUserId);
1226
- logger.debug(`User ID path created: ${this._userIdPath}`);
1227
- return newUserId;
1220
+ try {
1221
+ let fs, os, path;
1222
+ try {
1223
+ fs = require("fs");
1224
+ os = require("os");
1225
+ path = require("path");
1226
+ } catch (requireError) {
1227
+ try {
1228
+ const sessionId = `session-${generateUUID()}`;
1229
+ return sessionId;
1230
+ } catch (uuidError) {
1231
+ return `session-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1232
+ }
1233
+ }
1234
+ if (!this._userIdPath) {
1235
+ this._userIdPath = path.join(
1236
+ this._getCacheHome(os, path),
1237
+ "mcp_use_3",
1238
+ "telemetry_user_id"
1239
+ );
1240
+ }
1241
+ const isFirstTime = !fs.existsSync(this._userIdPath);
1242
+ if (isFirstTime) {
1243
+ fs.mkdirSync(path.dirname(this._userIdPath), { recursive: true });
1244
+ let newUserId;
1245
+ try {
1246
+ newUserId = generateUUID();
1247
+ } catch (uuidError) {
1248
+ newUserId = `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1249
+ }
1250
+ fs.writeFileSync(this._userIdPath, newUserId);
1251
+ return newUserId;
1252
+ }
1253
+ const userId = fs.readFileSync(this._userIdPath, "utf-8").trim();
1254
+ return userId;
1255
+ } catch (e) {
1256
+ try {
1257
+ return `session-${generateUUID()}`;
1258
+ } catch (uuidError) {
1259
+ return `session-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1260
+ }
1228
1261
  }
1229
- return fs.readFileSync(this._userIdPath, "utf-8").trim();
1230
1262
  }
1231
1263
  /**
1232
1264
  * Get or create user ID from localStorage (Browser)
@@ -1235,14 +1267,22 @@ var Telemetry = class _Telemetry {
1235
1267
  try {
1236
1268
  let userId = localStorage.getItem(USER_ID_STORAGE_KEY);
1237
1269
  if (!userId) {
1238
- userId = generateUUID();
1270
+ try {
1271
+ userId = generateUUID();
1272
+ } catch (uuidError) {
1273
+ userId = `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1274
+ }
1239
1275
  localStorage.setItem(USER_ID_STORAGE_KEY, userId);
1240
- logger.debug(`Created new browser user ID`);
1241
1276
  }
1242
1277
  return userId;
1243
1278
  } catch (e) {
1244
- logger.debug(`localStorage access failed: ${e}`);
1245
- return `session-${generateUUID()}`;
1279
+ let sessionId;
1280
+ try {
1281
+ sessionId = `session-${generateUUID()}`;
1282
+ } catch (uuidError) {
1283
+ sessionId = `session-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
1284
+ }
1285
+ return sessionId;
1246
1286
  }
1247
1287
  }
1248
1288
  _getCacheHome(os, path) {
@@ -1271,6 +1311,7 @@ var Telemetry = class _Telemetry {
1271
1311
  if (!this._posthogNodeClient && !this._posthogBrowserClient && !this._scarfClient) {
1272
1312
  return;
1273
1313
  }
1314
+ const currentUserId = this.userId;
1274
1315
  const properties = { ...event.properties };
1275
1316
  properties.mcp_use_version = getPackageVersion();
1276
1317
  properties.language = "typescript";
@@ -1278,9 +1319,8 @@ var Telemetry = class _Telemetry {
1278
1319
  properties.runtime = this._runtimeEnvironment;
1279
1320
  if (this._posthogNodeClient) {
1280
1321
  try {
1281
- logger.debug(`CAPTURE: PostHog Node Event ${event.name}`);
1282
1322
  this._posthogNodeClient.capture({
1283
- distinctId: this.userId,
1323
+ distinctId: currentUserId,
1284
1324
  event: event.name,
1285
1325
  properties
1286
1326
  });
@@ -1290,10 +1330,9 @@ var Telemetry = class _Telemetry {
1290
1330
  }
1291
1331
  if (this._posthogBrowserClient) {
1292
1332
  try {
1293
- logger.debug(`CAPTURE: PostHog Browser Event ${event.name}`);
1294
1333
  this._posthogBrowserClient.capture(event.name, {
1295
1334
  ...properties,
1296
- distinct_id: this.userId
1335
+ distinct_id: currentUserId
1297
1336
  });
1298
1337
  } catch (e) {
1299
1338
  logger.debug(
@@ -1305,7 +1344,7 @@ var Telemetry = class _Telemetry {
1305
1344
  try {
1306
1345
  const scarfProperties = {
1307
1346
  ...properties,
1308
- user_id: this.userId,
1347
+ user_id: currentUserId,
1309
1348
  event: event.name
1310
1349
  };
1311
1350
  await this._scarfClient.logEvent(scarfProperties);
@@ -2043,6 +2082,7 @@ var HttpConnector = class extends BaseConnector {
2043
2082
  sseReadTimeout;
2044
2083
  clientInfo;
2045
2084
  preferSse;
2085
+ disableSseFallback;
2046
2086
  transportType = null;
2047
2087
  streamableTransport = null;
2048
2088
  constructor(baseUrl, opts = {}) {
@@ -2059,6 +2099,7 @@ var HttpConnector = class extends BaseConnector {
2059
2099
  version: "1.0.0"
2060
2100
  };
2061
2101
  this.preferSse = opts.preferSse ?? false;
2102
+ this.disableSseFallback = opts.disableSseFallback ?? false;
2062
2103
  }
2063
2104
  /** Establish connection to the MCP implementation via HTTP (streamable or SSE). */
2064
2105
  async connect() {
@@ -2115,6 +2156,13 @@ var HttpConnector = class extends BaseConnector {
2115
2156
  authError.code = 401;
2116
2157
  throw authError;
2117
2158
  }
2159
+ if (this.disableSseFallback) {
2160
+ logger.info("SSE fallback disabled - failing connection");
2161
+ await this.cleanupResources();
2162
+ throw new Error(
2163
+ `Streamable HTTP connection failed: ${fallbackReason}. SSE fallback is disabled.`
2164
+ );
2165
+ }
2118
2166
  logger.info("\u{1F504} Falling back to SSE transport...");
2119
2167
  try {
2120
2168
  await this.connectWithSse(baseUrl);
@@ -2756,7 +2804,9 @@ var BrowserMCPClient = class _BrowserMCPClient extends BaseMCPClient {
2756
2804
  wrapTransport,
2757
2805
  clientOptions,
2758
2806
  samplingCallback,
2759
- elicitationCallback
2807
+ elicitationCallback,
2808
+ disableSseFallback,
2809
+ preferSse
2760
2810
  } = serverConfig;
2761
2811
  if (!url) {
2762
2812
  throw new Error("Server URL is required");
@@ -2772,8 +2822,12 @@ var BrowserMCPClient = class _BrowserMCPClient extends BaseMCPClient {
2772
2822
  // ← Pass client options (capabilities, etc.) to connector
2773
2823
  samplingCallback,
2774
2824
  // ← Pass sampling callback to connector
2775
- elicitationCallback
2825
+ elicitationCallback,
2776
2826
  // ← Pass elicitation callback to connector
2827
+ disableSseFallback,
2828
+ // ← Disable automatic SSE fallback
2829
+ preferSse
2830
+ // ← Use SSE transport directly
2777
2831
  };
2778
2832
  if (clientOptions) {
2779
2833
  console.log(
@@ -3213,7 +3267,12 @@ function useMcp(options) {
3213
3267
  const serverName = "inspector-server";
3214
3268
  const serverConfig = {
3215
3269
  url,
3216
- transport: transportTypeParam === "sse" ? "http" : transportTypeParam
3270
+ transport: transportTypeParam === "sse" ? "http" : transportTypeParam,
3271
+ // Disable SSE fallback when using explicit HTTP transport (not SSE)
3272
+ // This prevents automatic HTTP → SSE fallback at the connector level
3273
+ disableSseFallback: transportTypeParam === "http",
3274
+ // Use SSE transport when explicitly requested
3275
+ preferSse: transportTypeParam === "sse"
3217
3276
  };
3218
3277
  if (customHeaders && Object.keys(customHeaders).length > 0) {
3219
3278
  serverConfig.headers = customHeaders;
@@ -9,18 +9,18 @@ import {
9
9
  useWidgetProps,
10
10
  useWidgetState,
11
11
  useWidgetTheme
12
- } from "../../chunk-J56ACHX4.js";
13
- import "../../chunk-6AB7U4KA.js";
14
- import "../../chunk-MGYJYTTX.js";
12
+ } from "../../chunk-SRXA64QS.js";
13
+ import "../../chunk-OD724W55.js";
14
+ import "../../chunk-M6HG2X4Q.js";
15
15
  import {
16
16
  Tel,
17
17
  Telemetry,
18
18
  setTelemetrySource
19
- } from "../../chunk-2FOTPDUJ.js";
19
+ } from "../../chunk-MIY5EBAT.js";
20
+ import "../../chunk-FRUZDWXH.js";
20
21
  import {
21
22
  onMcpAuthorization
22
23
  } from "../../chunk-J75I2C26.js";
23
- import "../../chunk-FRUZDWXH.js";
24
24
  import "../../chunk-3GQAWCBQ.js";
25
25
  export {
26
26
  Tel as BrowserTelemetry,
@@ -1 +1 @@
1
- {"version":3,"file":"useMcp.d.ts","sourceRoot":"","sources":["../../../src/react/useMcp.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAgwC3D"}
1
+ {"version":3,"file":"useMcp.d.ts","sourceRoot":"","sources":["../../../src/react/useMcp.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAqwC3D"}