mcp-use 1.10.0-canary.3 → 1.10.0-canary.4

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/index.js CHANGED
@@ -3,6 +3,7 @@ import {
3
3
  streamEventsToAISDK,
4
4
  streamEventsToAISDKWithTools
5
5
  } from "./chunk-EW4MJSHA.js";
6
+ import "./chunk-JQKKMUCT.js";
6
7
  import "./chunk-ZFZPZ4GE.js";
7
8
  import {
8
9
  AcquireActiveMCPServerTool,
@@ -43,6 +44,10 @@ import {
43
44
  MCPSession,
44
45
  WebSocketConnector
45
46
  } from "./chunk-QBTQXCAI.js";
47
+ import {
48
+ BrowserOAuthClientProvider,
49
+ onMcpAuthorization
50
+ } from "./chunk-3R5PDYIN.js";
46
51
  import {
47
52
  BaseConnector
48
53
  } from "./chunk-LTA4LQTH.js";
@@ -50,11 +55,6 @@ import {
50
55
  Logger,
51
56
  logger
52
57
  } from "./chunk-34R6SIER.js";
53
- import "./chunk-JQKKMUCT.js";
54
- import {
55
- BrowserOAuthClientProvider,
56
- onMcpAuthorization
57
- } from "./chunk-3R5PDYIN.js";
58
58
  import {
59
59
  ElicitationDeclinedError,
60
60
  ElicitationTimeoutError,
@@ -17,6 +17,10 @@ import {
17
17
  MCPSession,
18
18
  WebSocketConnector
19
19
  } from "../chunk-QBTQXCAI.js";
20
+ import {
21
+ BrowserOAuthClientProvider,
22
+ onMcpAuthorization
23
+ } from "../chunk-3R5PDYIN.js";
20
24
  import {
21
25
  BaseConnector
22
26
  } from "../chunk-LTA4LQTH.js";
@@ -24,10 +28,6 @@ import {
24
28
  Logger,
25
29
  logger
26
30
  } from "../chunk-34R6SIER.js";
27
- import {
28
- BrowserOAuthClientProvider,
29
- onMcpAuthorization
30
- } from "../chunk-3R5PDYIN.js";
31
31
  import "../chunk-MTHLLDCX.js";
32
32
  import "../chunk-3GQAWCBQ.js";
33
33
  export {
@@ -11,11 +11,11 @@ import {
11
11
  useWidgetTheme
12
12
  } from "../../chunk-VPHP7ERH.js";
13
13
  import "../../chunk-QBTQXCAI.js";
14
- import "../../chunk-LTA4LQTH.js";
15
- import "../../chunk-34R6SIER.js";
16
14
  import {
17
15
  onMcpAuthorization
18
16
  } from "../../chunk-3R5PDYIN.js";
17
+ import "../../chunk-LTA4LQTH.js";
18
+ import "../../chunk-34R6SIER.js";
19
19
  import "../../chunk-MTHLLDCX.js";
20
20
  import "../../chunk-3GQAWCBQ.js";
21
21
  export {
@@ -1108,37 +1108,12 @@ function binary(base64Data, mimeType) {
1108
1108
  }
1109
1109
  __name(binary, "binary");
1110
1110
  function widget(config) {
1111
- const {
1112
- name,
1113
- data,
1114
- message,
1115
- invoking,
1116
- invoked,
1117
- widgetAccessible = true,
1118
- resultCanProduceWidget = true,
1119
- buildId
1120
- } = config;
1121
- const randomId = Math.random().toString(36).substring(2, 15);
1122
- const buildIdPart = buildId ? `-${buildId}` : "";
1123
- const uniqueUri = `ui://widget/${name}${buildIdPart}-${randomId}.html`;
1124
- const metadata = {
1125
- "openai/outputTemplate": uniqueUri,
1126
- "openai/widgetAccessible": widgetAccessible,
1127
- "openai/resultCanProduceWidget": resultCanProduceWidget
1128
- };
1129
- if (invoking) {
1130
- metadata["openai/toolInvocation/invoking"] = invoking;
1131
- }
1132
- if (invoked) {
1133
- metadata["openai/toolInvocation/invoked"] = invoked;
1134
- }
1135
- const displayMessage = message || `Displaying ${name}`;
1111
+ const { data, message } = config;
1136
1112
  return {
1137
- _meta: metadata,
1138
1113
  content: [
1139
1114
  {
1140
1115
  type: "text",
1141
- text: displayMessage
1116
+ text: message || ""
1142
1117
  }
1143
1118
  ],
1144
1119
  // structuredContent will be injected as window.openai.toolOutput by Apps SDK
@@ -1816,6 +1791,7 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
1816
1791
  const props = metadata.inputs || {};
1817
1792
  const description = metadata.description || `Widget: ${widgetName}`;
1818
1793
  const title = metadata.title || widgetName;
1794
+ const exposeAsTool = metadata.exposeAsTool !== void 0 ? metadata.exposeAsTool : true;
1819
1795
  const mcp_connect_domain = serverConfig.serverBaseUrl ? new URL(serverConfig.serverBaseUrl || "").origin : null;
1820
1796
  return {
1821
1797
  name: widgetName,
@@ -1831,7 +1807,8 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
1831
1807
  type: "appsSdk",
1832
1808
  props,
1833
1809
  html: html2,
1834
- dev: isDev
1810
+ dev: isDev,
1811
+ exposeAsTool
1835
1812
  },
1836
1813
  ...metadata._meta || {}
1837
1814
  },
@@ -2401,6 +2378,12 @@ __name(setupWidgetRoutes, "setupWidgetRoutes");
2401
2378
  // src/server/widgets/ui-resource-registration.ts
2402
2379
  function uiResourceRegistration(server, definition) {
2403
2380
  const displayName = definition.title || definition.name;
2381
+ if (definition.type === "appsSdk" && definition._meta) {
2382
+ server.widgetDefinitions.set(
2383
+ definition.name,
2384
+ definition._meta
2385
+ );
2386
+ }
2404
2387
  let resourceUri;
2405
2388
  let mimeType;
2406
2389
  switch (definition.type) {
@@ -2480,71 +2463,76 @@ function uiResourceRegistration(server, definition) {
2480
2463
  }, "readCallback")
2481
2464
  });
2482
2465
  }
2483
- const toolMetadata = definition._meta || {};
2484
- if (definition.type === "appsSdk" && definition.appsSdkMetadata) {
2485
- toolMetadata["openai/outputTemplate"] = resourceUri;
2486
- const toolMetadataFields = [
2487
- "openai/toolInvocation/invoking",
2488
- "openai/toolInvocation/invoked",
2489
- "openai/widgetAccessible",
2490
- "openai/resultCanProduceWidget"
2491
- ];
2492
- for (const field of toolMetadataFields) {
2493
- if (definition.appsSdkMetadata[field] !== void 0) {
2494
- toolMetadata[field] = definition.appsSdkMetadata[field];
2466
+ const widgetMetadata = definition._meta?.["mcp-use/widget"];
2467
+ const exposeAsTool = definition.exposeAsTool ?? widgetMetadata?.exposeAsTool ?? true;
2468
+ if (exposeAsTool) {
2469
+ const toolMetadata = definition._meta || {};
2470
+ if (definition.type === "appsSdk" && definition.appsSdkMetadata) {
2471
+ toolMetadata["openai/outputTemplate"] = resourceUri;
2472
+ const toolMetadataFields = [
2473
+ "openai/toolInvocation/invoking",
2474
+ "openai/toolInvocation/invoked",
2475
+ "openai/widgetAccessible",
2476
+ "openai/resultCanProduceWidget"
2477
+ ];
2478
+ for (const field of toolMetadataFields) {
2479
+ if (definition.appsSdkMetadata[field] !== void 0) {
2480
+ toolMetadata[field] = definition.appsSdkMetadata[field];
2481
+ }
2495
2482
  }
2496
2483
  }
2497
- }
2498
- server.tool(
2499
- {
2500
- name: definition.name,
2501
- title: definition.title,
2502
- description: definition.description,
2503
- inputs: convertPropsToInputs(definition.props),
2504
- _meta: Object.keys(toolMetadata).length > 0 ? toolMetadata : void 0
2505
- },
2506
- async (params) => {
2507
- const uiResource = await createWidgetUIResource(
2508
- definition,
2509
- params,
2510
- serverConfig
2511
- );
2512
- if (definition.type === "appsSdk") {
2513
- const randomId = Math.random().toString(36).substring(2, 15);
2514
- const uniqueUri = generateWidgetUri(
2515
- definition.name,
2516
- server.buildId,
2517
- ".html",
2518
- randomId
2484
+ server.tool(
2485
+ {
2486
+ name: definition.name,
2487
+ title: definition.title,
2488
+ description: definition.description,
2489
+ inputs: convertPropsToInputs(definition.props),
2490
+ annotations: definition.toolAnnotations,
2491
+ _meta: Object.keys(toolMetadata).length > 0 ? toolMetadata : void 0
2492
+ },
2493
+ async (params) => {
2494
+ const uiResource = await createWidgetUIResource(
2495
+ definition,
2496
+ params,
2497
+ serverConfig
2519
2498
  );
2520
- const uniqueToolMetadata = {
2521
- ...toolMetadata,
2522
- "openai/outputTemplate": uniqueUri
2523
- };
2499
+ if (definition.type === "appsSdk") {
2500
+ const randomId = Math.random().toString(36).substring(2, 15);
2501
+ const uniqueUri = generateWidgetUri(
2502
+ definition.name,
2503
+ server.buildId,
2504
+ ".html",
2505
+ randomId
2506
+ );
2507
+ const uniqueToolMetadata = {
2508
+ ...toolMetadata,
2509
+ "openai/outputTemplate": uniqueUri
2510
+ };
2511
+ return {
2512
+ _meta: uniqueToolMetadata,
2513
+ content: [
2514
+ {
2515
+ type: "text",
2516
+ text: `Displaying ${displayName}`
2517
+ }
2518
+ ],
2519
+ // structuredContent will be injected as window.openai.toolOutput by Apps SDK
2520
+ structuredContent: params
2521
+ };
2522
+ }
2524
2523
  return {
2525
- _meta: uniqueToolMetadata,
2526
2524
  content: [
2527
2525
  {
2528
2526
  type: "text",
2529
- text: `Displaying ${displayName}`
2530
- }
2531
- ],
2532
- // structuredContent will be injected as window.openai.toolOutput by Apps SDK
2533
- structuredContent: params
2527
+ text: `Displaying ${displayName}`,
2528
+ description: `Show MCP-UI widget for ${displayName}`
2529
+ },
2530
+ uiResource
2531
+ ]
2534
2532
  };
2535
2533
  }
2536
- return {
2537
- content: [
2538
- {
2539
- type: "text",
2540
- text: `Displaying ${displayName}`,
2541
- description: `Show MCP-UI widget for ${displayName}`
2542
- },
2543
- uiResource
2544
- ]
2545
- };
2546
- }
2547
- );
2534
+ );
2535
+ }
2548
2536
  return server;
2549
2537
  }
2550
2538
  __name(uiResourceRegistration, "uiResourceRegistration");
@@ -3662,9 +3650,9 @@ async function setupOAuthForServer(app, oauthProvider, baseUrl, state) {
3662
3650
  __name(setupOAuthForServer, "setupOAuthForServer");
3663
3651
 
3664
3652
  // src/server/mcp-server.ts
3665
- var MCPServer = class {
3653
+ var MCPServerClass = class {
3666
3654
  static {
3667
- __name(this, "MCPServer");
3655
+ __name(this, "MCPServerClass");
3668
3656
  }
3669
3657
  /**
3670
3658
  * Native MCP server instance from @modelcontextprotocol/sdk
@@ -3688,8 +3676,6 @@ var MCPServer = class {
3688
3676
  buildId;
3689
3677
  sessions = /* @__PURE__ */ new Map();
3690
3678
  idleCleanupInterval;
3691
- oauthConfig;
3692
- // Store OAuth config for lazy initialization
3693
3679
  oauthSetupState = {
3694
3680
  complete: false,
3695
3681
  provider: void 0,
@@ -3707,6 +3693,11 @@ var MCPServer = class {
3707
3693
  resources: /* @__PURE__ */ new Map(),
3708
3694
  resourceTemplates: /* @__PURE__ */ new Map()
3709
3695
  };
3696
+ /**
3697
+ * Storage for widget definitions, used to inject metadata into tool responses
3698
+ * when using the widget() helper with returnsWidget option
3699
+ */
3700
+ widgetDefinitions = /* @__PURE__ */ new Map();
3710
3701
  /**
3711
3702
  * Resource subscription manager for tracking and notifying resource updates
3712
3703
  */
@@ -3753,7 +3744,7 @@ var MCPServer = class {
3753
3744
  }
3754
3745
  );
3755
3746
  this.app = createHonoApp(requestLogger);
3756
- this.oauthConfig = config.oauth;
3747
+ this.oauthProvider = config.oauth;
3757
3748
  this.wrapRegistrationMethods();
3758
3749
  return createHonoProxy(this, this.app);
3759
3750
  }
@@ -3768,14 +3759,54 @@ var MCPServer = class {
3768
3759
  const originalResourceTemplate = registerResourceTemplate;
3769
3760
  const self = this;
3770
3761
  this.tool = ((toolDefinition, callback) => {
3771
- const actualCallback = callback || toolDefinition.cb;
3762
+ const widgetConfig = toolDefinition.widget;
3763
+ const widgetName = widgetConfig?.name;
3764
+ if (widgetConfig && widgetName) {
3765
+ const buildIdPart = self.buildId ? `-${self.buildId}` : "";
3766
+ const outputTemplate = `ui://widget/${widgetName}${buildIdPart}.html`;
3767
+ toolDefinition._meta = {
3768
+ ...toolDefinition._meta,
3769
+ "openai/outputTemplate": outputTemplate,
3770
+ "openai/toolInvocation/invoking": widgetConfig.invoking ?? `Loading ${widgetName}...`,
3771
+ "openai/toolInvocation/invoked": widgetConfig.invoked ?? `${widgetName} ready`,
3772
+ "openai/widgetAccessible": widgetConfig.widgetAccessible ?? true,
3773
+ "openai/resultCanProduceWidget": widgetConfig.resultCanProduceWidget ?? true
3774
+ };
3775
+ }
3776
+ let actualCallback = callback || toolDefinition.cb;
3777
+ if (widgetConfig && widgetName && actualCallback) {
3778
+ const originalCallback = actualCallback;
3779
+ actualCallback = /* @__PURE__ */ __name((async (params, ctx) => {
3780
+ const result = await originalCallback(params, ctx);
3781
+ const widgetDef = self.widgetDefinitions.get(widgetName);
3782
+ if (result && typeof result === "object") {
3783
+ const randomId = Math.random().toString(36).substring(2, 15);
3784
+ const buildIdPart = self.buildId ? `-${self.buildId}` : "";
3785
+ const uniqueUri = `ui://widget/${widgetName}${buildIdPart}-${randomId}.html`;
3786
+ const responseMeta = {
3787
+ ...widgetDef || {},
3788
+ // Include mcp-use/widget and other widget metadata
3789
+ "openai/outputTemplate": uniqueUri,
3790
+ "openai/toolInvocation/invoking": widgetConfig.invoking ?? `Loading ${widgetName}...`,
3791
+ "openai/toolInvocation/invoked": widgetConfig.invoked ?? `${widgetName} ready`,
3792
+ "openai/widgetAccessible": widgetConfig.widgetAccessible ?? true,
3793
+ "openai/resultCanProduceWidget": widgetConfig.resultCanProduceWidget ?? true
3794
+ };
3795
+ result._meta = responseMeta;
3796
+ if (result.content?.[0]?.type === "text" && !result.content[0].text) {
3797
+ result.content[0].text = `Displaying ${widgetName}`;
3798
+ }
3799
+ }
3800
+ return result;
3801
+ }), "actualCallback");
3802
+ }
3772
3803
  if (actualCallback) {
3773
3804
  self.registrationRecipes.tools.set(toolDefinition.name, {
3774
3805
  config: toolDefinition,
3775
3806
  handler: actualCallback
3776
3807
  });
3777
3808
  }
3778
- return originalTool.call(self, toolDefinition, callback);
3809
+ return originalTool.call(self, toolDefinition, actualCallback);
3779
3810
  });
3780
3811
  this.prompt = ((promptDefinition, callback) => {
3781
3812
  const actualCallback = callback || promptDefinition.cb;
@@ -4067,18 +4098,18 @@ var MCPServer = class {
4067
4098
  this.serverPort
4068
4099
  );
4069
4100
  }
4070
- // Tool registration helper
4071
- tool = toolRegistration;
4101
+ // Tool registration helper - type is set in wrapRegistrationMethods
4102
+ tool;
4072
4103
  // Schema conversion helpers (used by tool registration)
4073
4104
  convertZodSchemaToParams = convertZodSchemaToParams;
4074
4105
  createParamsSchema = createParamsSchema;
4075
4106
  // Template URI parsing helper (used by resource templates)
4076
4107
  parseTemplateUri = parseTemplateUri;
4077
- // Resource registration helpers
4078
- resource = registerResource;
4079
- resourceTemplate = registerResourceTemplate;
4080
- // Prompt registration helper
4081
- prompt = registerPrompt;
4108
+ // Resource registration helpers - types are set in wrapRegistrationMethods
4109
+ resource;
4110
+ resourceTemplate;
4111
+ // Prompt registration helper - type is set in wrapRegistrationMethods
4112
+ prompt;
4082
4113
  // Notification helpers
4083
4114
  getActiveSessions = getActiveSessions;
4084
4115
  sendNotification = sendNotification;
@@ -4191,7 +4222,7 @@ var MCPServer = class {
4191
4222
  this.serverHost,
4192
4223
  this.serverPort
4193
4224
  );
4194
- if (this.oauthConfig && !this.oauthSetupState.complete && this.oauthProvider) {
4225
+ if (this.oauthProvider && !this.oauthSetupState.complete) {
4195
4226
  await setupOAuthForServer(
4196
4227
  this.app,
4197
4228
  this.oauthProvider,
@@ -4244,7 +4275,7 @@ var MCPServer = class {
4244
4275
  * ```
4245
4276
  */
4246
4277
  async getHandler(options) {
4247
- if (this.oauthConfig && !this.oauthSetupState.complete && this.oauthProvider) {
4278
+ if (this.oauthProvider && !this.oauthSetupState.complete) {
4248
4279
  await setupOAuthForServer(
4249
4280
  this.app,
4250
4281
  this.oauthProvider,
@@ -4314,8 +4345,9 @@ var MCPServer = class {
4314
4345
  }
4315
4346
  }
4316
4347
  };
4348
+ var MCPServer = MCPServerClass;
4317
4349
  function createMCPServer(name, config = {}) {
4318
- const instance = new MCPServer({
4350
+ const instance = new MCPServerClass({
4319
4351
  name,
4320
4352
  version: config.version || "1.0.0",
4321
4353
  description: config.description,