mcp-use 1.10.0-canary.2 → 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.
Files changed (76) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{chunk-QREDNTLS.js → chunk-F5MMLHUR.js} +1 -1
  3. package/dist/{chunk-Q3PFK7Y4.js → chunk-L6P6GBCW.js} +3 -2
  4. package/dist/{chunk-ZQUCGISK.js → chunk-LTA4LQTH.js} +6 -4
  5. package/dist/{chunk-HRWL2M2I.js → chunk-QBTQXCAI.js} +1 -1
  6. package/dist/{chunk-BFFS67JY.js → chunk-VPHP7ERH.js} +18 -9
  7. package/dist/{chunk-U5BX3ISQ.js → chunk-YMJL66MY.js} +10 -6
  8. package/dist/index.cjs +36 -20
  9. package/dist/index.js +9 -8
  10. package/dist/src/agents/index.cjs +10 -6
  11. package/dist/src/agents/index.js +3 -3
  12. package/dist/src/agents/mcp_agent.d.ts.map +1 -1
  13. package/dist/src/browser.cjs +16 -10
  14. package/dist/src/browser.js +3 -3
  15. package/dist/src/client/prompts.js +2 -2
  16. package/dist/src/connectors/base.d.ts +2 -2
  17. package/dist/src/connectors/base.d.ts.map +1 -1
  18. package/dist/src/oauth-helper.d.ts.map +1 -1
  19. package/dist/src/react/WidgetControls.d.ts.map +1 -1
  20. package/dist/src/react/index.cjs +23 -12
  21. package/dist/src/react/index.js +3 -3
  22. package/dist/src/react/useMcp.d.ts.map +1 -1
  23. package/dist/src/server/endpoints/mount-mcp.d.ts +4 -1
  24. package/dist/src/server/endpoints/mount-mcp.d.ts.map +1 -1
  25. package/dist/src/server/index.cjs +237 -168
  26. package/dist/src/server/index.js +238 -170
  27. package/dist/src/server/mcp-server.d.ts +28 -13
  28. package/dist/src/server/mcp-server.d.ts.map +1 -1
  29. package/dist/src/server/oauth/middleware.d.ts.map +1 -1
  30. package/dist/src/server/oauth/providers/auth0.d.ts +1 -1
  31. package/dist/src/server/oauth/providers/auth0.d.ts.map +1 -1
  32. package/dist/src/server/oauth/providers/custom.d.ts +4 -2
  33. package/dist/src/server/oauth/providers/custom.d.ts.map +1 -1
  34. package/dist/src/server/oauth/providers/keycloak.d.ts +1 -1
  35. package/dist/src/server/oauth/providers/keycloak.d.ts.map +1 -1
  36. package/dist/src/server/oauth/providers/supabase.d.ts +1 -1
  37. package/dist/src/server/oauth/providers/supabase.d.ts.map +1 -1
  38. package/dist/src/server/oauth/providers/types.d.ts +9 -5
  39. package/dist/src/server/oauth/providers/types.d.ts.map +1 -1
  40. package/dist/src/server/oauth/setup.d.ts +5 -4
  41. package/dist/src/server/oauth/setup.d.ts.map +1 -1
  42. package/dist/src/server/oauth/utils.d.ts +3 -2
  43. package/dist/src/server/oauth/utils.d.ts.map +1 -1
  44. package/dist/src/server/prompts/index.d.ts +5 -4
  45. package/dist/src/server/prompts/index.d.ts.map +1 -1
  46. package/dist/src/server/resources/index.d.ts +1 -1
  47. package/dist/src/server/resources/index.d.ts.map +1 -1
  48. package/dist/src/server/sessions/session-manager.d.ts +10 -6
  49. package/dist/src/server/sessions/session-manager.d.ts.map +1 -1
  50. package/dist/src/server/tools/tool-execution-helpers.d.ts +30 -7
  51. package/dist/src/server/tools/tool-execution-helpers.d.ts.map +1 -1
  52. package/dist/src/server/tools/tool-registration.d.ts +21 -7
  53. package/dist/src/server/tools/tool-registration.d.ts.map +1 -1
  54. package/dist/src/server/types/common.d.ts +1 -1
  55. package/dist/src/server/types/common.d.ts.map +1 -1
  56. package/dist/src/server/types/resource.d.ts +6 -1
  57. package/dist/src/server/types/resource.d.ts.map +1 -1
  58. package/dist/src/server/types/tool.d.ts +41 -0
  59. package/dist/src/server/types/tool.d.ts.map +1 -1
  60. package/dist/src/server/types/widget.d.ts +11 -1
  61. package/dist/src/server/types/widget.d.ts.map +1 -1
  62. package/dist/src/server/utils/response-helpers.d.ts +16 -28
  63. package/dist/src/server/utils/response-helpers.d.ts.map +1 -1
  64. package/dist/src/server/widgets/index.d.ts +1 -1
  65. package/dist/src/server/widgets/index.d.ts.map +1 -1
  66. package/dist/src/server/widgets/mount-widgets-dev.d.ts.map +1 -1
  67. package/dist/src/server/widgets/ui-resource-registration.d.ts +13 -25
  68. package/dist/src/server/widgets/ui-resource-registration.d.ts.map +1 -1
  69. package/dist/src/server/widgets/widget-helpers.d.ts +11 -6
  70. package/dist/src/server/widgets/widget-helpers.d.ts.map +1 -1
  71. package/dist/src/server/widgets/widget-types.d.ts +3 -3
  72. package/dist/src/server/widgets/widget-types.d.ts.map +1 -1
  73. package/dist/src/session.d.ts +1 -1
  74. package/dist/src/session.d.ts.map +1 -1
  75. package/dist/{tool-execution-helpers-RRMGLAHR.js → tool-execution-helpers-2LGVSS7L.js} +1 -1
  76. package/package.json +3 -3
@@ -7,7 +7,7 @@ import {
7
7
  createEnhancedContext,
8
8
  findSessionContext,
9
9
  isValidLogLevel
10
- } from "../../chunk-Q3PFK7Y4.js";
10
+ } from "../../chunk-L6P6GBCW.js";
11
11
  import {
12
12
  convertToolResultToResourceResult
13
13
  } from "../../chunk-362PI25Z.js";
@@ -307,37 +307,12 @@ function binary(base64Data, mimeType) {
307
307
  }
308
308
  __name(binary, "binary");
309
309
  function widget(config) {
310
- const {
311
- name,
312
- data,
313
- message,
314
- invoking,
315
- invoked,
316
- widgetAccessible = true,
317
- resultCanProduceWidget = true,
318
- buildId
319
- } = config;
320
- const randomId = Math.random().toString(36).substring(2, 15);
321
- const buildIdPart = buildId ? `-${buildId}` : "";
322
- const uniqueUri = `ui://widget/${name}${buildIdPart}-${randomId}.html`;
323
- const metadata = {
324
- "openai/outputTemplate": uniqueUri,
325
- "openai/widgetAccessible": widgetAccessible,
326
- "openai/resultCanProduceWidget": resultCanProduceWidget
327
- };
328
- if (invoking) {
329
- metadata["openai/toolInvocation/invoking"] = invoking;
330
- }
331
- if (invoked) {
332
- metadata["openai/toolInvocation/invoked"] = invoked;
333
- }
334
- const displayMessage = message || `Displaying ${name}`;
310
+ const { data, message } = config;
335
311
  return {
336
- _meta: metadata,
337
312
  content: [
338
313
  {
339
314
  type: "text",
340
- text: displayMessage
315
+ text: message || ""
341
316
  }
342
317
  ],
343
318
  // structuredContent will be injected as window.openai.toolOutput by Apps SDK
@@ -1006,6 +981,7 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
1006
981
  const props = metadata.inputs || {};
1007
982
  const description = metadata.description || `Widget: ${widgetName}`;
1008
983
  const title = metadata.title || widgetName;
984
+ const exposeAsTool = metadata.exposeAsTool !== void 0 ? metadata.exposeAsTool : true;
1009
985
  const mcp_connect_domain = serverConfig.serverBaseUrl ? new URL(serverConfig.serverBaseUrl || "").origin : null;
1010
986
  return {
1011
987
  name: widgetName,
@@ -1021,7 +997,8 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
1021
997
  type: "appsSdk",
1022
998
  props,
1023
999
  html: html2,
1024
- dev: isDev
1000
+ dev: isDev,
1001
+ exposeAsTool
1025
1002
  },
1026
1003
  ...metadata._meta || {}
1027
1004
  },
@@ -1587,25 +1564,31 @@ function setupWidgetRoutes(app, serverConfig) {
1587
1564
  __name(setupWidgetRoutes, "setupWidgetRoutes");
1588
1565
 
1589
1566
  // src/server/widgets/ui-resource-registration.ts
1590
- function uiResourceRegistration(definition) {
1567
+ function uiResourceRegistration(server, definition) {
1591
1568
  const displayName = definition.title || definition.name;
1569
+ if (definition.type === "appsSdk" && definition._meta) {
1570
+ server.widgetDefinitions.set(
1571
+ definition.name,
1572
+ definition._meta
1573
+ );
1574
+ }
1592
1575
  let resourceUri;
1593
1576
  let mimeType;
1594
1577
  switch (definition.type) {
1595
1578
  case "externalUrl":
1596
- resourceUri = generateWidgetUri(definition.widget, this.buildId);
1579
+ resourceUri = generateWidgetUri(definition.widget, server.buildId);
1597
1580
  mimeType = "text/uri-list";
1598
1581
  break;
1599
1582
  case "rawHtml":
1600
- resourceUri = generateWidgetUri(definition.name, this.buildId);
1583
+ resourceUri = generateWidgetUri(definition.name, server.buildId);
1601
1584
  mimeType = "text/html";
1602
1585
  break;
1603
1586
  case "remoteDom":
1604
- resourceUri = generateWidgetUri(definition.name, this.buildId);
1587
+ resourceUri = generateWidgetUri(definition.name, server.buildId);
1605
1588
  mimeType = "application/vnd.mcp-ui.remote-dom+javascript";
1606
1589
  break;
1607
1590
  case "appsSdk":
1608
- resourceUri = generateWidgetUri(definition.name, this.buildId, ".html");
1591
+ resourceUri = generateWidgetUri(definition.name, server.buildId, ".html");
1609
1592
  mimeType = "text/html+skybridge";
1610
1593
  break;
1611
1594
  default:
@@ -1614,12 +1597,12 @@ function uiResourceRegistration(definition) {
1614
1597
  );
1615
1598
  }
1616
1599
  const serverConfig = {
1617
- serverHost: this.serverHost,
1618
- serverPort: this.serverPort || 3e3,
1619
- serverBaseUrl: this.serverBaseUrl,
1620
- buildId: this.buildId
1600
+ serverHost: server.serverHost,
1601
+ serverPort: server.serverPort || 3e3,
1602
+ serverBaseUrl: server.serverBaseUrl,
1603
+ buildId: server.buildId
1621
1604
  };
1622
- this.resource({
1605
+ server.resource({
1623
1606
  name: definition.name,
1624
1607
  uri: resourceUri,
1625
1608
  title: definition.title,
@@ -1641,9 +1624,9 @@ function uiResourceRegistration(definition) {
1641
1624
  }, "readCallback")
1642
1625
  });
1643
1626
  if (definition.type === "appsSdk") {
1644
- const buildIdPart = this.buildId ? `-${this.buildId}` : "";
1627
+ const buildIdPart = server.buildId ? `-${server.buildId}` : "";
1645
1628
  const uriTemplate = `ui://widget/${definition.name}${buildIdPart}-{id}.html`;
1646
- this.resourceTemplate({
1629
+ server.resourceTemplate({
1647
1630
  name: `${definition.name}-dynamic`,
1648
1631
  resourceTemplate: {
1649
1632
  uriTemplate,
@@ -1668,70 +1651,77 @@ function uiResourceRegistration(definition) {
1668
1651
  }, "readCallback")
1669
1652
  });
1670
1653
  }
1671
- const toolMetadata = definition._meta || {};
1672
- if (definition.type === "appsSdk" && definition.appsSdkMetadata) {
1673
- toolMetadata["openai/outputTemplate"] = resourceUri;
1674
- const toolMetadataFields = [
1675
- "openai/toolInvocation/invoking",
1676
- "openai/toolInvocation/invoked",
1677
- "openai/widgetAccessible",
1678
- "openai/resultCanProduceWidget"
1679
- ];
1680
- for (const field of toolMetadataFields) {
1681
- if (definition.appsSdkMetadata[field] !== void 0) {
1682
- toolMetadata[field] = definition.appsSdkMetadata[field];
1654
+ const widgetMetadata = definition._meta?.["mcp-use/widget"];
1655
+ const exposeAsTool = definition.exposeAsTool ?? widgetMetadata?.exposeAsTool ?? true;
1656
+ if (exposeAsTool) {
1657
+ const toolMetadata = definition._meta || {};
1658
+ if (definition.type === "appsSdk" && definition.appsSdkMetadata) {
1659
+ toolMetadata["openai/outputTemplate"] = resourceUri;
1660
+ const toolMetadataFields = [
1661
+ "openai/toolInvocation/invoking",
1662
+ "openai/toolInvocation/invoked",
1663
+ "openai/widgetAccessible",
1664
+ "openai/resultCanProduceWidget"
1665
+ ];
1666
+ for (const field of toolMetadataFields) {
1667
+ if (definition.appsSdkMetadata[field] !== void 0) {
1668
+ toolMetadata[field] = definition.appsSdkMetadata[field];
1669
+ }
1683
1670
  }
1684
1671
  }
1685
- }
1686
- this.tool({
1687
- name: definition.name,
1688
- title: definition.title,
1689
- description: definition.description,
1690
- inputs: convertPropsToInputs(definition.props),
1691
- _meta: Object.keys(toolMetadata).length > 0 ? toolMetadata : void 0,
1692
- cb: /* @__PURE__ */ __name(async (params) => {
1693
- const uiResource = await createWidgetUIResource(
1694
- definition,
1695
- params,
1696
- serverConfig
1697
- );
1698
- if (definition.type === "appsSdk") {
1699
- const randomId = Math.random().toString(36).substring(2, 15);
1700
- const uniqueUri = generateWidgetUri(
1701
- definition.name,
1702
- this.buildId,
1703
- ".html",
1704
- randomId
1672
+ server.tool(
1673
+ {
1674
+ name: definition.name,
1675
+ title: definition.title,
1676
+ description: definition.description,
1677
+ inputs: convertPropsToInputs(definition.props),
1678
+ annotations: definition.toolAnnotations,
1679
+ _meta: Object.keys(toolMetadata).length > 0 ? toolMetadata : void 0
1680
+ },
1681
+ async (params) => {
1682
+ const uiResource = await createWidgetUIResource(
1683
+ definition,
1684
+ params,
1685
+ serverConfig
1705
1686
  );
1706
- const uniqueToolMetadata = {
1707
- ...toolMetadata,
1708
- "openai/outputTemplate": uniqueUri
1709
- };
1687
+ if (definition.type === "appsSdk") {
1688
+ const randomId = Math.random().toString(36).substring(2, 15);
1689
+ const uniqueUri = generateWidgetUri(
1690
+ definition.name,
1691
+ server.buildId,
1692
+ ".html",
1693
+ randomId
1694
+ );
1695
+ const uniqueToolMetadata = {
1696
+ ...toolMetadata,
1697
+ "openai/outputTemplate": uniqueUri
1698
+ };
1699
+ return {
1700
+ _meta: uniqueToolMetadata,
1701
+ content: [
1702
+ {
1703
+ type: "text",
1704
+ text: `Displaying ${displayName}`
1705
+ }
1706
+ ],
1707
+ // structuredContent will be injected as window.openai.toolOutput by Apps SDK
1708
+ structuredContent: params
1709
+ };
1710
+ }
1710
1711
  return {
1711
- _meta: uniqueToolMetadata,
1712
1712
  content: [
1713
1713
  {
1714
1714
  type: "text",
1715
- text: `Displaying ${displayName}`
1716
- }
1717
- ],
1718
- // structuredContent will be injected as window.openai.toolOutput by Apps SDK
1719
- structuredContent: params
1715
+ text: `Displaying ${displayName}`,
1716
+ description: `Show MCP-UI widget for ${displayName}`
1717
+ },
1718
+ uiResource
1719
+ ]
1720
1720
  };
1721
1721
  }
1722
- return {
1723
- content: [
1724
- {
1725
- type: "text",
1726
- text: `Displaying ${displayName}`,
1727
- description: `Show MCP-UI widget for ${displayName}`
1728
- },
1729
- uiResource
1730
- ]
1731
- };
1732
- }, "cb")
1733
- });
1734
- return this;
1722
+ );
1723
+ }
1724
+ return server;
1735
1725
  }
1736
1726
  __name(uiResourceRegistration, "uiResourceRegistration");
1737
1727
 
@@ -2059,7 +2049,7 @@ function registerResource(resourceDefinition, callback) {
2059
2049
  const explicitMimeType = resourceDefinition.mimeType;
2060
2050
  const wrappedCallback = /* @__PURE__ */ __name(async () => {
2061
2051
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2062
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-RRMGLAHR.js");
2052
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
2063
2053
  const initialRequestContext = getRequestContext2();
2064
2054
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2065
2055
  const { requestContext } = findSessionContext2(
@@ -2137,7 +2127,7 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2137
2127
  async (uri) => {
2138
2128
  const params = this.parseTemplateUri(uriTemplate, uri.toString());
2139
2129
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2140
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-RRMGLAHR.js");
2130
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
2141
2131
  const initialRequestContext = getRequestContext2();
2142
2132
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2143
2133
  const { requestContext } = findSessionContext2(
@@ -2192,7 +2182,7 @@ function registerPrompt(promptDefinition, callback) {
2192
2182
  }
2193
2183
  const wrappedCallback = /* @__PURE__ */ __name(async (params, extra) => {
2194
2184
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2195
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-RRMGLAHR.js");
2185
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
2196
2186
  const initialRequestContext = getRequestContext2();
2197
2187
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2198
2188
  const { requestContext } = findSessionContext2(
@@ -2780,12 +2770,13 @@ function createBearerAuthMiddleware(provider, baseUrl) {
2780
2770
  const result = await provider.verifyToken(token);
2781
2771
  const payload = result.payload;
2782
2772
  const user = provider.getUserInfo(payload);
2773
+ const scope = payload.scope;
2783
2774
  const authInfo = {
2784
2775
  user,
2785
2776
  payload,
2786
2777
  accessToken: token,
2787
2778
  // Extract scopes from scope claim (OAuth standard)
2788
- scopes: payload.scope ? payload.scope.split(" ") : [],
2779
+ scopes: scope ? scope.split(" ") : [],
2789
2780
  // Extract permissions (Auth0 style, or custom)
2790
2781
  permissions: payload.permissions || []
2791
2782
  };
@@ -2833,9 +2824,9 @@ async function setupOAuthForServer(app, oauthProvider, baseUrl, state) {
2833
2824
  __name(setupOAuthForServer, "setupOAuthForServer");
2834
2825
 
2835
2826
  // src/server/mcp-server.ts
2836
- var MCPServer = class {
2827
+ var MCPServerClass = class {
2837
2828
  static {
2838
- __name(this, "MCPServer");
2829
+ __name(this, "MCPServerClass");
2839
2830
  }
2840
2831
  /**
2841
2832
  * Native MCP server instance from @modelcontextprotocol/sdk
@@ -2859,8 +2850,6 @@ var MCPServer = class {
2859
2850
  buildId;
2860
2851
  sessions = /* @__PURE__ */ new Map();
2861
2852
  idleCleanupInterval;
2862
- oauthConfig;
2863
- // Store OAuth config for lazy initialization
2864
2853
  oauthSetupState = {
2865
2854
  complete: false,
2866
2855
  provider: void 0,
@@ -2878,6 +2867,11 @@ var MCPServer = class {
2878
2867
  resources: /* @__PURE__ */ new Map(),
2879
2868
  resourceTemplates: /* @__PURE__ */ new Map()
2880
2869
  };
2870
+ /**
2871
+ * Storage for widget definitions, used to inject metadata into tool responses
2872
+ * when using the widget() helper with returnsWidget option
2873
+ */
2874
+ widgetDefinitions = /* @__PURE__ */ new Map();
2881
2875
  /**
2882
2876
  * Resource subscription manager for tracking and notifying resource updates
2883
2877
  */
@@ -2924,7 +2918,7 @@ var MCPServer = class {
2924
2918
  }
2925
2919
  );
2926
2920
  this.app = createHonoApp(requestLogger);
2927
- this.oauthConfig = config.oauth;
2921
+ this.oauthProvider = config.oauth;
2928
2922
  this.wrapRegistrationMethods();
2929
2923
  return createHonoProxy(this, this.app);
2930
2924
  }
@@ -2939,38 +2933,97 @@ var MCPServer = class {
2939
2933
  const originalResourceTemplate = registerResourceTemplate;
2940
2934
  const self = this;
2941
2935
  this.tool = ((toolDefinition, callback) => {
2942
- const actualCallback = callback || toolDefinition.cb;
2943
- self.registrationRecipes.tools.set(toolDefinition.name, {
2944
- config: toolDefinition,
2945
- handler: actualCallback
2946
- });
2947
- return originalTool.call(self, toolDefinition, callback);
2936
+ const widgetConfig = toolDefinition.widget;
2937
+ const widgetName = widgetConfig?.name;
2938
+ if (widgetConfig && widgetName) {
2939
+ const buildIdPart = self.buildId ? `-${self.buildId}` : "";
2940
+ const outputTemplate = `ui://widget/${widgetName}${buildIdPart}.html`;
2941
+ toolDefinition._meta = {
2942
+ ...toolDefinition._meta,
2943
+ "openai/outputTemplate": outputTemplate,
2944
+ "openai/toolInvocation/invoking": widgetConfig.invoking ?? `Loading ${widgetName}...`,
2945
+ "openai/toolInvocation/invoked": widgetConfig.invoked ?? `${widgetName} ready`,
2946
+ "openai/widgetAccessible": widgetConfig.widgetAccessible ?? true,
2947
+ "openai/resultCanProduceWidget": widgetConfig.resultCanProduceWidget ?? true
2948
+ };
2949
+ }
2950
+ let actualCallback = callback || toolDefinition.cb;
2951
+ if (widgetConfig && widgetName && actualCallback) {
2952
+ const originalCallback = actualCallback;
2953
+ actualCallback = /* @__PURE__ */ __name((async (params, ctx) => {
2954
+ const result = await originalCallback(params, ctx);
2955
+ const widgetDef = self.widgetDefinitions.get(widgetName);
2956
+ if (result && typeof result === "object") {
2957
+ const randomId = Math.random().toString(36).substring(2, 15);
2958
+ const buildIdPart = self.buildId ? `-${self.buildId}` : "";
2959
+ const uniqueUri = `ui://widget/${widgetName}${buildIdPart}-${randomId}.html`;
2960
+ const responseMeta = {
2961
+ ...widgetDef || {},
2962
+ // Include mcp-use/widget and other widget metadata
2963
+ "openai/outputTemplate": uniqueUri,
2964
+ "openai/toolInvocation/invoking": widgetConfig.invoking ?? `Loading ${widgetName}...`,
2965
+ "openai/toolInvocation/invoked": widgetConfig.invoked ?? `${widgetName} ready`,
2966
+ "openai/widgetAccessible": widgetConfig.widgetAccessible ?? true,
2967
+ "openai/resultCanProduceWidget": widgetConfig.resultCanProduceWidget ?? true
2968
+ };
2969
+ result._meta = responseMeta;
2970
+ if (result.content?.[0]?.type === "text" && !result.content[0].text) {
2971
+ result.content[0].text = `Displaying ${widgetName}`;
2972
+ }
2973
+ }
2974
+ return result;
2975
+ }), "actualCallback");
2976
+ }
2977
+ if (actualCallback) {
2978
+ self.registrationRecipes.tools.set(toolDefinition.name, {
2979
+ config: toolDefinition,
2980
+ handler: actualCallback
2981
+ });
2982
+ }
2983
+ return originalTool.call(self, toolDefinition, actualCallback);
2948
2984
  });
2949
- this.prompt = function(promptDefinition, callback) {
2985
+ this.prompt = ((promptDefinition, callback) => {
2950
2986
  const actualCallback = callback || promptDefinition.cb;
2951
- self.registrationRecipes.prompts.set(promptDefinition.name, {
2952
- config: promptDefinition,
2953
- handler: actualCallback
2954
- });
2955
- return originalPrompt.call(self, promptDefinition, callback);
2956
- };
2957
- this.resource = function(resourceDefinition, callback) {
2987
+ if (actualCallback) {
2988
+ self.registrationRecipes.prompts.set(promptDefinition.name, {
2989
+ config: promptDefinition,
2990
+ handler: actualCallback
2991
+ });
2992
+ }
2993
+ return originalPrompt.call(
2994
+ self,
2995
+ promptDefinition,
2996
+ callback
2997
+ );
2998
+ });
2999
+ this.resource = ((resourceDefinition, callback) => {
2958
3000
  const actualCallback = callback || resourceDefinition.readCallback;
2959
- const resourceKey = `${resourceDefinition.name}:${resourceDefinition.uri}`;
2960
- self.registrationRecipes.resources.set(resourceKey, {
2961
- config: resourceDefinition,
2962
- handler: actualCallback
2963
- });
3001
+ if (actualCallback) {
3002
+ const resourceKey = `${resourceDefinition.name}:${resourceDefinition.uri}`;
3003
+ self.registrationRecipes.resources.set(resourceKey, {
3004
+ config: resourceDefinition,
3005
+ handler: actualCallback
3006
+ });
3007
+ }
2964
3008
  return originalResource.call(self, resourceDefinition, callback);
2965
- };
2966
- this.resourceTemplate = function(templateDefinition, callback) {
3009
+ });
3010
+ this.resourceTemplate = ((templateDefinition, callback) => {
2967
3011
  const actualCallback = callback || templateDefinition.readCallback;
2968
- self.registrationRecipes.resourceTemplates.set(templateDefinition.name, {
2969
- config: templateDefinition,
2970
- handler: actualCallback
2971
- });
2972
- return originalResourceTemplate.call(self, templateDefinition, callback);
2973
- };
3012
+ if (actualCallback) {
3013
+ self.registrationRecipes.resourceTemplates.set(
3014
+ templateDefinition.name,
3015
+ {
3016
+ config: templateDefinition,
3017
+ handler: actualCallback
3018
+ }
3019
+ );
3020
+ }
3021
+ return originalResourceTemplate.call(
3022
+ self,
3023
+ templateDefinition,
3024
+ callback
3025
+ );
3026
+ });
2974
3027
  }
2975
3028
  /**
2976
3029
  * Create a new server instance for a session following official SDK pattern.
@@ -3028,11 +3081,12 @@ var MCPServer = class {
3028
3081
  console.log("[createMessage] Got result successfully");
3029
3082
  return result;
3030
3083
  } catch (err) {
3084
+ const error2 = err;
3031
3085
  console.error(
3032
3086
  "[createMessage] Error:",
3033
- err.message,
3087
+ error2.message,
3034
3088
  "Code:",
3035
- err.code
3089
+ error2.code
3036
3090
  );
3037
3091
  throw err;
3038
3092
  }
@@ -3081,8 +3135,8 @@ var MCPServer = class {
3081
3135
  } else {
3082
3136
  argsSchema = void 0;
3083
3137
  }
3084
- const wrappedHandler = /* @__PURE__ */ __name(async (params) => {
3085
- const result = await handler(params);
3138
+ const wrappedHandler = /* @__PURE__ */ __name(async (params, extra) => {
3139
+ const result = await handler(params, extra);
3086
3140
  if ("messages" in result && Array.isArray(result.messages)) {
3087
3141
  return result;
3088
3142
  }
@@ -3101,8 +3155,8 @@ var MCPServer = class {
3101
3155
  }
3102
3156
  for (const [_key, recipe] of this.registrationRecipes.resources) {
3103
3157
  const { config, handler } = recipe;
3104
- const wrappedHandler = /* @__PURE__ */ __name(async () => {
3105
- const result = await handler();
3158
+ const wrappedHandler = /* @__PURE__ */ __name(async (extra) => {
3159
+ const result = await handler(extra);
3106
3160
  if ("contents" in result && Array.isArray(result.contents)) {
3107
3161
  return result;
3108
3162
  }
@@ -3147,20 +3201,23 @@ var MCPServer = class {
3147
3201
  config.name,
3148
3202
  template,
3149
3203
  metadata,
3150
- async (uri) => {
3204
+ async (uri, extra) => {
3151
3205
  const params = this.parseTemplateUri(uriTemplate, uri.toString());
3152
- const result = await handler(uri, params);
3206
+ const result = await handler(uri, params, extra);
3153
3207
  if ("contents" in result && Array.isArray(result.contents)) {
3154
3208
  return result;
3155
3209
  }
3156
3210
  const { convertToolResultToResourceResult: convertToolResultToResourceResult2 } = await import("../../conversion-5MA4VY3B.js");
3157
- return convertToolResultToResourceResult2(uri.toString(), result);
3211
+ return convertToolResultToResourceResult2(
3212
+ uri.toString(),
3213
+ result
3214
+ );
3158
3215
  }
3159
3216
  );
3160
3217
  }
3161
3218
  newServer.server.setRequestHandler(
3162
3219
  z2.object({ method: z2.literal("logging/setLevel") }).passthrough(),
3163
- async (request) => {
3220
+ (async (request, extra) => {
3164
3221
  const level = request.params?.level;
3165
3222
  if (!level) {
3166
3223
  throw new McpError(
@@ -3199,7 +3256,7 @@ var MCPServer = class {
3199
3256
  "[MCP] Could not find session for logging/setLevel request"
3200
3257
  );
3201
3258
  throw new McpError(ErrorCode.InternalError, "Could not find session");
3202
- }
3259
+ })
3203
3260
  );
3204
3261
  this.subscriptionManager.registerHandlers(newServer, this.sessions);
3205
3262
  return newServer;
@@ -3215,18 +3272,18 @@ var MCPServer = class {
3215
3272
  this.serverPort
3216
3273
  );
3217
3274
  }
3218
- // Tool registration helper
3219
- tool = toolRegistration;
3275
+ // Tool registration helper - type is set in wrapRegistrationMethods
3276
+ tool;
3220
3277
  // Schema conversion helpers (used by tool registration)
3221
3278
  convertZodSchemaToParams = convertZodSchemaToParams;
3222
3279
  createParamsSchema = createParamsSchema;
3223
3280
  // Template URI parsing helper (used by resource templates)
3224
3281
  parseTemplateUri = parseTemplateUri;
3225
- // Resource registration helpers
3226
- resource = registerResource;
3227
- resourceTemplate = registerResourceTemplate;
3228
- // Prompt registration helper
3229
- prompt = registerPrompt;
3282
+ // Resource registration helpers - types are set in wrapRegistrationMethods
3283
+ resource;
3284
+ resourceTemplate;
3285
+ // Prompt registration helper - type is set in wrapRegistrationMethods
3286
+ prompt;
3230
3287
  // Notification helpers
3231
3288
  getActiveSessions = getActiveSessions;
3232
3289
  sendNotification = sendNotification;
@@ -3249,7 +3306,9 @@ var MCPServer = class {
3249
3306
  async notifyResourceUpdated(uri) {
3250
3307
  return this.subscriptionManager.notifyResourceUpdated(uri, this.sessions);
3251
3308
  }
3252
- uiResource = uiResourceRegistration;
3309
+ uiResource = /* @__PURE__ */ __name((definition) => {
3310
+ return uiResourceRegistration(this, definition);
3311
+ }, "uiResource");
3253
3312
  /**
3254
3313
  * Mount MCP server endpoints at /mcp and /sse
3255
3314
  *
@@ -3337,7 +3396,7 @@ var MCPServer = class {
3337
3396
  this.serverHost,
3338
3397
  this.serverPort
3339
3398
  );
3340
- if (this.oauthConfig && !this.oauthSetupState.complete) {
3399
+ if (this.oauthProvider && !this.oauthSetupState.complete) {
3341
3400
  await setupOAuthForServer(
3342
3401
  this.app,
3343
3402
  this.oauthProvider,
@@ -3390,7 +3449,7 @@ var MCPServer = class {
3390
3449
  * ```
3391
3450
  */
3392
3451
  async getHandler(options) {
3393
- if (this.oauthConfig && !this.oauthSetupState.complete) {
3452
+ if (this.oauthProvider && !this.oauthSetupState.complete) {
3394
3453
  await setupOAuthForServer(
3395
3454
  this.app,
3396
3455
  this.oauthProvider,
@@ -3460,8 +3519,9 @@ var MCPServer = class {
3460
3519
  }
3461
3520
  }
3462
3521
  };
3522
+ var MCPServer = MCPServerClass;
3463
3523
  function createMCPServer(name, config = {}) {
3464
- const instance = new MCPServer({
3524
+ const instance = new MCPServerClass({
3465
3525
  name,
3466
3526
  version: config.version || "1.0.0",
3467
3527
  description: config.description,
@@ -3545,12 +3605,13 @@ var SupabaseOAuthProvider = class {
3545
3605
  }
3546
3606
  }
3547
3607
  getUserInfo(payload) {
3608
+ const userMetadata = payload.user_metadata;
3548
3609
  return {
3549
3610
  userId: payload.sub || payload.user_id,
3550
3611
  email: payload.email,
3551
- name: payload.user_metadata?.name || payload.user_metadata?.full_name,
3552
- username: payload.user_metadata?.username,
3553
- picture: payload.user_metadata?.avatar_url,
3612
+ name: userMetadata?.name || userMetadata?.full_name,
3613
+ username: userMetadata?.username,
3614
+ picture: userMetadata?.avatar_url,
3554
3615
  roles: payload.role ? [payload.role] : [],
3555
3616
  permissions: payload.aal ? [`aal:${payload.aal}`] : [],
3556
3617
  // Include Supabase-specific claims
@@ -3623,6 +3684,7 @@ var Auth0OAuthProvider = class {
3623
3684
  }
3624
3685
  }
3625
3686
  getUserInfo(payload) {
3687
+ const scope = payload.scope;
3626
3688
  return {
3627
3689
  userId: payload.sub,
3628
3690
  email: payload.email,
@@ -3635,7 +3697,7 @@ var Auth0OAuthProvider = class {
3635
3697
  // Auth0 can include roles (if configured)
3636
3698
  roles: payload.roles || payload["https://your-app.com/roles"] || [],
3637
3699
  // Include scope as well
3638
- scopes: payload.scope ? payload.scope.split(" ") : [],
3700
+ scopes: scope ? scope.split(" ") : [],
3639
3701
  // Additional Auth0-specific claims
3640
3702
  email_verified: payload.email_verified,
3641
3703
  updated_at: payload.updated_at
@@ -3707,8 +3769,10 @@ var KeycloakOAuthProvider = class {
3707
3769
  }
3708
3770
  }
3709
3771
  getUserInfo(payload) {
3710
- const realmRoles = payload.realm_access?.roles || [];
3711
- const clientRoles = this.config.clientId && payload.resource_access?.[this.config.clientId]?.roles || [];
3772
+ const realmAccess = payload.realm_access;
3773
+ const realmRoles = realmAccess?.roles || [];
3774
+ const resourceAccess = payload.resource_access;
3775
+ const clientRoles = this.config.clientId && (resourceAccess?.[this.config.clientId]?.roles || []) || [];
3712
3776
  const allRoles = [...realmRoles, ...clientRoles];
3713
3777
  const permissions = [];
3714
3778
  if (payload.resource_access) {
@@ -3722,6 +3786,7 @@ var KeycloakOAuthProvider = class {
3722
3786
  }
3723
3787
  );
3724
3788
  }
3789
+ const scope = payload.scope;
3725
3790
  return {
3726
3791
  userId: payload.sub,
3727
3792
  email: payload.email,
@@ -3732,7 +3797,7 @@ var KeycloakOAuthProvider = class {
3732
3797
  roles: allRoles,
3733
3798
  permissions,
3734
3799
  // Include scope as well
3735
- scopes: payload.scope ? payload.scope.split(" ") : [],
3800
+ scopes: scope ? scope.split(" ") : [],
3736
3801
  // Keycloak-specific claims
3737
3802
  email_verified: payload.email_verified,
3738
3803
  given_name: payload.given_name,
@@ -3861,7 +3926,7 @@ var CustomOAuthProvider = class {
3861
3926
  async verifyToken(token) {
3862
3927
  try {
3863
3928
  const result = await this.config.verifyToken(token);
3864
- return { payload: result };
3929
+ return result;
3865
3930
  } catch (error2) {
3866
3931
  throw new Error(`Custom OAuth verification failed: ${error2}`);
3867
3932
  }
@@ -3870,16 +3935,19 @@ var CustomOAuthProvider = class {
3870
3935
  if (this.config.getUserInfo) {
3871
3936
  return this.config.getUserInfo(payload);
3872
3937
  }
3938
+ const scope = payload.scope;
3939
+ const roles = payload.roles;
3940
+ const permissions = payload.permissions;
3873
3941
  return {
3874
3942
  userId: payload.sub || payload.user_id || payload.id,
3875
- email: payload.email,
3876
- name: payload.name,
3877
- username: payload.username || payload.preferred_username,
3878
- nickname: payload.nickname,
3879
- picture: payload.picture || payload.avatar_url,
3880
- roles: payload.roles || [],
3881
- permissions: payload.permissions || [],
3882
- scopes: payload.scope ? payload.scope.split(" ") : []
3943
+ email: payload.email ? payload.email : void 0,
3944
+ name: payload.name ? payload.name : void 0,
3945
+ username: payload.username || payload.preferred_username ? payload.username || payload.preferred_username : void 0,
3946
+ nickname: payload.nickname ? payload.nickname : void 0,
3947
+ picture: payload.picture || payload.avatar_url ? payload.picture || payload.avatar_url : void 0,
3948
+ roles: Array.isArray(roles) ? roles : [],
3949
+ permissions: Array.isArray(permissions) ? permissions : [],
3950
+ scopes: scope ? scope.split(" ") : []
3883
3951
  };
3884
3952
  }
3885
3953
  getIssuer() {