mcp-use 1.9.1-canary.1 → 1.10.0-canary.3

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 (87) hide show
  1. package/README.md +9 -6
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/{chunk-QREDNTLS.js → chunk-F5MMLHUR.js} +1 -1
  4. package/dist/{chunk-33U4IA4N.js → chunk-L6P6GBCW.js} +84 -3
  5. package/dist/{chunk-ZQUCGISK.js → chunk-LTA4LQTH.js} +6 -4
  6. package/dist/{chunk-D22NUQTL.js → chunk-QBTQXCAI.js} +185 -1
  7. package/dist/{chunk-MUZ5WYE3.js → chunk-VPHP7ERH.js} +18 -9
  8. package/dist/{chunk-U5BX3ISQ.js → chunk-YMJL66MY.js} +10 -6
  9. package/dist/index.cjs +220 -20
  10. package/dist/index.d.ts +3 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +13 -12
  13. package/dist/src/agents/index.cjs +10 -6
  14. package/dist/src/agents/index.js +3 -3
  15. package/dist/src/agents/mcp_agent.d.ts.map +1 -1
  16. package/dist/src/browser.cjs +200 -10
  17. package/dist/src/browser.js +7 -7
  18. package/dist/src/client/prompts.js +2 -2
  19. package/dist/src/connectors/base.d.ts +2 -2
  20. package/dist/src/connectors/base.d.ts.map +1 -1
  21. package/dist/src/oauth-helper.d.ts.map +1 -1
  22. package/dist/src/react/WidgetControls.d.ts.map +1 -1
  23. package/dist/src/react/index.cjs +207 -12
  24. package/dist/src/react/index.js +4 -4
  25. package/dist/src/react/useMcp.d.ts.map +1 -1
  26. package/dist/src/server/endpoints/mount-mcp.d.ts +4 -1
  27. package/dist/src/server/endpoints/mount-mcp.d.ts.map +1 -1
  28. package/dist/src/server/index.cjs +268 -125
  29. package/dist/src/server/index.d.ts +2 -2
  30. package/dist/src/server/index.d.ts.map +1 -1
  31. package/dist/src/server/index.js +188 -126
  32. package/dist/src/server/mcp-server.d.ts +21 -10
  33. package/dist/src/server/mcp-server.d.ts.map +1 -1
  34. package/dist/src/server/oauth/middleware.d.ts.map +1 -1
  35. package/dist/src/server/oauth/providers/auth0.d.ts +1 -1
  36. package/dist/src/server/oauth/providers/auth0.d.ts.map +1 -1
  37. package/dist/src/server/oauth/providers/custom.d.ts +4 -2
  38. package/dist/src/server/oauth/providers/custom.d.ts.map +1 -1
  39. package/dist/src/server/oauth/providers/keycloak.d.ts +1 -1
  40. package/dist/src/server/oauth/providers/keycloak.d.ts.map +1 -1
  41. package/dist/src/server/oauth/providers/supabase.d.ts +1 -1
  42. package/dist/src/server/oauth/providers/supabase.d.ts.map +1 -1
  43. package/dist/src/server/oauth/providers/types.d.ts +9 -5
  44. package/dist/src/server/oauth/providers/types.d.ts.map +1 -1
  45. package/dist/src/server/oauth/providers.d.ts +27 -9
  46. package/dist/src/server/oauth/providers.d.ts.map +1 -1
  47. package/dist/src/server/oauth/setup.d.ts +5 -4
  48. package/dist/src/server/oauth/setup.d.ts.map +1 -1
  49. package/dist/src/server/oauth/utils.d.ts +3 -2
  50. package/dist/src/server/oauth/utils.d.ts.map +1 -1
  51. package/dist/src/server/prompts/index.d.ts +5 -4
  52. package/dist/src/server/prompts/index.d.ts.map +1 -1
  53. package/dist/src/server/resources/index.d.ts +43 -24
  54. package/dist/src/server/resources/index.d.ts.map +1 -1
  55. package/dist/src/server/sessions/session-manager.d.ts +11 -5
  56. package/dist/src/server/sessions/session-manager.d.ts.map +1 -1
  57. package/dist/src/server/tools/tool-execution-helpers.d.ts +31 -8
  58. package/dist/src/server/tools/tool-execution-helpers.d.ts.map +1 -1
  59. package/dist/src/server/tools/tool-registration.d.ts +21 -7
  60. package/dist/src/server/tools/tool-registration.d.ts.map +1 -1
  61. package/dist/src/server/types/common.d.ts +25 -9
  62. package/dist/src/server/types/common.d.ts.map +1 -1
  63. package/dist/src/server/types/index.d.ts +3 -3
  64. package/dist/src/server/types/index.d.ts.map +1 -1
  65. package/dist/src/server/types/prompt.d.ts +2 -1
  66. package/dist/src/server/types/prompt.d.ts.map +1 -1
  67. package/dist/src/server/types/resource.d.ts +54 -9
  68. package/dist/src/server/types/resource.d.ts.map +1 -1
  69. package/dist/src/server/types/tool-context.d.ts +115 -0
  70. package/dist/src/server/types/tool-context.d.ts.map +1 -1
  71. package/dist/src/server/types/tool.d.ts +1 -1
  72. package/dist/src/server/types/tool.d.ts.map +1 -1
  73. package/dist/src/server/types/widget.d.ts +2 -1
  74. package/dist/src/server/types/widget.d.ts.map +1 -1
  75. package/dist/src/server/widgets/index.d.ts +3 -3
  76. package/dist/src/server/widgets/index.d.ts.map +1 -1
  77. package/dist/src/server/widgets/mount-widgets-dev.d.ts.map +1 -1
  78. package/dist/src/server/widgets/ui-resource-registration.d.ts +11 -25
  79. package/dist/src/server/widgets/ui-resource-registration.d.ts.map +1 -1
  80. package/dist/src/server/widgets/widget-helpers.d.ts +11 -6
  81. package/dist/src/server/widgets/widget-helpers.d.ts.map +1 -1
  82. package/dist/src/server/widgets/widget-types.d.ts +3 -3
  83. package/dist/src/server/widgets/widget-types.d.ts.map +1 -1
  84. package/dist/src/session.d.ts +337 -2
  85. package/dist/src/session.d.ts.map +1 -1
  86. package/dist/{tool-execution-helpers-BQJTPWPN.js → tool-execution-helpers-2LGVSS7L.js} +1 -1
  87. package/package.json +3 -3
@@ -7,7 +7,7 @@ import {
7
7
  createEnhancedContext,
8
8
  findSessionContext,
9
9
  isValidLogLevel
10
- } from "../../chunk-33U4IA4N.js";
10
+ } from "../../chunk-L6P6GBCW.js";
11
11
  import {
12
12
  convertToolResultToResourceResult
13
13
  } from "../../chunk-362PI25Z.js";
@@ -1587,25 +1587,25 @@ function setupWidgetRoutes(app, serverConfig) {
1587
1587
  __name(setupWidgetRoutes, "setupWidgetRoutes");
1588
1588
 
1589
1589
  // src/server/widgets/ui-resource-registration.ts
1590
- function uiResourceRegistration(definition) {
1590
+ function uiResourceRegistration(server, definition) {
1591
1591
  const displayName = definition.title || definition.name;
1592
1592
  let resourceUri;
1593
1593
  let mimeType;
1594
1594
  switch (definition.type) {
1595
1595
  case "externalUrl":
1596
- resourceUri = generateWidgetUri(definition.widget, this.buildId);
1596
+ resourceUri = generateWidgetUri(definition.widget, server.buildId);
1597
1597
  mimeType = "text/uri-list";
1598
1598
  break;
1599
1599
  case "rawHtml":
1600
- resourceUri = generateWidgetUri(definition.name, this.buildId);
1600
+ resourceUri = generateWidgetUri(definition.name, server.buildId);
1601
1601
  mimeType = "text/html";
1602
1602
  break;
1603
1603
  case "remoteDom":
1604
- resourceUri = generateWidgetUri(definition.name, this.buildId);
1604
+ resourceUri = generateWidgetUri(definition.name, server.buildId);
1605
1605
  mimeType = "application/vnd.mcp-ui.remote-dom+javascript";
1606
1606
  break;
1607
1607
  case "appsSdk":
1608
- resourceUri = generateWidgetUri(definition.name, this.buildId, ".html");
1608
+ resourceUri = generateWidgetUri(definition.name, server.buildId, ".html");
1609
1609
  mimeType = "text/html+skybridge";
1610
1610
  break;
1611
1611
  default:
@@ -1614,12 +1614,12 @@ function uiResourceRegistration(definition) {
1614
1614
  );
1615
1615
  }
1616
1616
  const serverConfig = {
1617
- serverHost: this.serverHost,
1618
- serverPort: this.serverPort || 3e3,
1619
- serverBaseUrl: this.serverBaseUrl,
1620
- buildId: this.buildId
1617
+ serverHost: server.serverHost,
1618
+ serverPort: server.serverPort || 3e3,
1619
+ serverBaseUrl: server.serverBaseUrl,
1620
+ buildId: server.buildId
1621
1621
  };
1622
- this.resource({
1622
+ server.resource({
1623
1623
  name: definition.name,
1624
1624
  uri: resourceUri,
1625
1625
  title: definition.title,
@@ -1641,9 +1641,9 @@ function uiResourceRegistration(definition) {
1641
1641
  }, "readCallback")
1642
1642
  });
1643
1643
  if (definition.type === "appsSdk") {
1644
- const buildIdPart = this.buildId ? `-${this.buildId}` : "";
1644
+ const buildIdPart = server.buildId ? `-${server.buildId}` : "";
1645
1645
  const uriTemplate = `ui://widget/${definition.name}${buildIdPart}-{id}.html`;
1646
- this.resourceTemplate({
1646
+ server.resourceTemplate({
1647
1647
  name: `${definition.name}-dynamic`,
1648
1648
  resourceTemplate: {
1649
1649
  uriTemplate,
@@ -1683,13 +1683,15 @@ function uiResourceRegistration(definition) {
1683
1683
  }
1684
1684
  }
1685
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) => {
1686
+ server.tool(
1687
+ {
1688
+ name: definition.name,
1689
+ title: definition.title,
1690
+ description: definition.description,
1691
+ inputs: convertPropsToInputs(definition.props),
1692
+ _meta: Object.keys(toolMetadata).length > 0 ? toolMetadata : void 0
1693
+ },
1694
+ async (params) => {
1693
1695
  const uiResource = await createWidgetUIResource(
1694
1696
  definition,
1695
1697
  params,
@@ -1699,7 +1701,7 @@ function uiResourceRegistration(definition) {
1699
1701
  const randomId = Math.random().toString(36).substring(2, 15);
1700
1702
  const uniqueUri = generateWidgetUri(
1701
1703
  definition.name,
1702
- this.buildId,
1704
+ server.buildId,
1703
1705
  ".html",
1704
1706
  randomId
1705
1707
  );
@@ -1729,9 +1731,9 @@ function uiResourceRegistration(definition) {
1729
1731
  uiResource
1730
1732
  ]
1731
1733
  };
1732
- }, "cb")
1733
- });
1734
- return this;
1734
+ }
1735
+ );
1736
+ return server;
1735
1737
  }
1736
1738
  __name(uiResourceRegistration, "uiResourceRegistration");
1737
1739
 
@@ -1867,7 +1869,7 @@ function toolRegistration(toolDefinition, callback) {
1867
1869
  const initialRequestContext = getRequestContext();
1868
1870
  const extraProgressToken = extra?._meta?.progressToken;
1869
1871
  const extraSendNotification = extra?.sendNotification;
1870
- const { requestContext, progressToken, sendNotification: sendNotification2 } = findSessionContext(
1872
+ const { requestContext, session, progressToken, sendNotification: sendNotification2 } = findSessionContext(
1871
1873
  this.sessions,
1872
1874
  initialRequestContext,
1873
1875
  extraProgressToken,
@@ -1878,7 +1880,9 @@ function toolRegistration(toolDefinition, callback) {
1878
1880
  this.createMessage.bind(this),
1879
1881
  this.server.server.elicitInput.bind(this.server.server),
1880
1882
  progressToken,
1881
- sendNotification2
1883
+ sendNotification2,
1884
+ session?.logLevel,
1885
+ session?.clientCapabilities
1882
1886
  );
1883
1887
  const executeCallback = /* @__PURE__ */ __name(async () => {
1884
1888
  if (actualCallback.length >= 2) {
@@ -2057,7 +2061,7 @@ function registerResource(resourceDefinition, callback) {
2057
2061
  const explicitMimeType = resourceDefinition.mimeType;
2058
2062
  const wrappedCallback = /* @__PURE__ */ __name(async () => {
2059
2063
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2060
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-BQJTPWPN.js");
2064
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
2061
2065
  const initialRequestContext = getRequestContext2();
2062
2066
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2063
2067
  const { requestContext } = findSessionContext2(
@@ -2105,24 +2109,25 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2105
2109
  `Resource template '${resourceTemplateDefinition.name}' must have either a readCallback property or a callback parameter`
2106
2110
  );
2107
2111
  }
2108
- const template = new ResourceTemplate(
2109
- resourceTemplateDefinition.resourceTemplate.uriTemplate,
2110
- {
2111
- list: void 0,
2112
- // Optional: callback to list all matching resources
2113
- complete: void 0
2114
- // Optional: callback for auto-completion
2115
- }
2116
- );
2112
+ const isFlatStructure = "uriTemplate" in resourceTemplateDefinition;
2113
+ const uriTemplate = isFlatStructure ? resourceTemplateDefinition.uriTemplate : resourceTemplateDefinition.resourceTemplate.uriTemplate;
2114
+ const mimeType = isFlatStructure ? resourceTemplateDefinition.mimeType : resourceTemplateDefinition.resourceTemplate.mimeType;
2115
+ const templateDescription = isFlatStructure ? void 0 : resourceTemplateDefinition.resourceTemplate.description;
2116
+ const template = new ResourceTemplate(uriTemplate, {
2117
+ list: void 0,
2118
+ // Optional: callback to list all matching resources
2119
+ complete: void 0
2120
+ // Optional: callback for auto-completion
2121
+ });
2117
2122
  const metadata = {};
2118
2123
  if (resourceTemplateDefinition.title) {
2119
2124
  metadata.title = resourceTemplateDefinition.title;
2120
2125
  }
2121
- if (resourceTemplateDefinition.description || resourceTemplateDefinition.resourceTemplate.description) {
2122
- metadata.description = resourceTemplateDefinition.description || resourceTemplateDefinition.resourceTemplate.description;
2126
+ if (resourceTemplateDefinition.description || templateDescription) {
2127
+ metadata.description = resourceTemplateDefinition.description || templateDescription;
2123
2128
  }
2124
- if (resourceTemplateDefinition.resourceTemplate.mimeType) {
2125
- metadata.mimeType = resourceTemplateDefinition.resourceTemplate.mimeType;
2129
+ if (mimeType) {
2130
+ metadata.mimeType = mimeType;
2126
2131
  }
2127
2132
  if (resourceTemplateDefinition.annotations) {
2128
2133
  metadata.annotations = resourceTemplateDefinition.annotations;
@@ -2132,12 +2137,9 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2132
2137
  template,
2133
2138
  metadata,
2134
2139
  async (uri) => {
2135
- const params = this.parseTemplateUri(
2136
- resourceTemplateDefinition.resourceTemplate.uriTemplate,
2137
- uri.toString()
2138
- );
2140
+ const params = this.parseTemplateUri(uriTemplate, uri.toString());
2139
2141
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2140
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-BQJTPWPN.js");
2142
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
2141
2143
  const initialRequestContext = getRequestContext2();
2142
2144
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2143
2145
  const { requestContext } = findSessionContext2(
@@ -2150,8 +2152,12 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2150
2152
  const executeCallback = /* @__PURE__ */ __name(async () => {
2151
2153
  if (actualCallback.length >= 3) {
2152
2154
  return await actualCallback(uri, params, enhancedContext);
2155
+ } else if (actualCallback.length === 2) {
2156
+ return await actualCallback(uri, params);
2157
+ } else if (actualCallback.length === 1) {
2158
+ return await actualCallback(uri);
2153
2159
  }
2154
- return await actualCallback(uri, params);
2160
+ return await actualCallback();
2155
2161
  }, "executeCallback");
2156
2162
  const result = requestContext ? await runWithContext2(requestContext, executeCallback) : await executeCallback();
2157
2163
  if ("contents" in result && Array.isArray(result.contents)) {
@@ -2188,7 +2194,7 @@ function registerPrompt(promptDefinition, callback) {
2188
2194
  }
2189
2195
  const wrappedCallback = /* @__PURE__ */ __name(async (params, extra) => {
2190
2196
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2191
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-BQJTPWPN.js");
2197
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
2192
2198
  const initialRequestContext = getRequestContext2();
2193
2199
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2194
2200
  const { requestContext } = findSessionContext2(
@@ -2522,6 +2528,17 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
2522
2528
  context: c,
2523
2529
  honoContext: c
2524
2530
  });
2531
+ server.server.oninitialized = () => {
2532
+ const clientCapabilities = server.server.getClientCapabilities();
2533
+ if (clientCapabilities && sessions.has(sid)) {
2534
+ const session = sessions.get(sid);
2535
+ session.clientCapabilities = clientCapabilities;
2536
+ console.log(
2537
+ `[MCP] Captured client capabilities for session ${sid}:`,
2538
+ Object.keys(clientCapabilities)
2539
+ );
2540
+ }
2541
+ };
2525
2542
  }, "onsessioninitialized"),
2526
2543
  onsessionclosed: /* @__PURE__ */ __name((sid) => {
2527
2544
  console.log(`[MCP] Session closed: ${sid}`);
@@ -2765,12 +2782,13 @@ function createBearerAuthMiddleware(provider, baseUrl) {
2765
2782
  const result = await provider.verifyToken(token);
2766
2783
  const payload = result.payload;
2767
2784
  const user = provider.getUserInfo(payload);
2785
+ const scope = payload.scope;
2768
2786
  const authInfo = {
2769
2787
  user,
2770
2788
  payload,
2771
2789
  accessToken: token,
2772
2790
  // Extract scopes from scope claim (OAuth standard)
2773
- scopes: payload.scope ? payload.scope.split(" ") : [],
2791
+ scopes: scope ? scope.split(" ") : [],
2774
2792
  // Extract permissions (Auth0 style, or custom)
2775
2793
  permissions: payload.permissions || []
2776
2794
  };
@@ -2818,9 +2836,9 @@ async function setupOAuthForServer(app, oauthProvider, baseUrl, state) {
2818
2836
  __name(setupOAuthForServer, "setupOAuthForServer");
2819
2837
 
2820
2838
  // src/server/mcp-server.ts
2821
- var McpServer = class {
2839
+ var MCPServer = class {
2822
2840
  static {
2823
- __name(this, "McpServer");
2841
+ __name(this, "MCPServer");
2824
2842
  }
2825
2843
  /**
2826
2844
  * Native MCP server instance from @modelcontextprotocol/sdk
@@ -2887,7 +2905,7 @@ var McpServer = class {
2887
2905
  * access to Hono methods while preserving MCP server functionality.
2888
2906
  *
2889
2907
  * @param config - Server configuration including name, version, and description
2890
- * @returns A proxied McpServer instance that supports both MCP and Hono methods
2908
+ * @returns A proxied MCPServer instance that supports both MCP and Hono methods
2891
2909
  */
2892
2910
  constructor(config) {
2893
2911
  this.config = config;
@@ -2925,37 +2943,56 @@ var McpServer = class {
2925
2943
  const self = this;
2926
2944
  this.tool = ((toolDefinition, callback) => {
2927
2945
  const actualCallback = callback || toolDefinition.cb;
2928
- self.registrationRecipes.tools.set(toolDefinition.name, {
2929
- config: toolDefinition,
2930
- handler: actualCallback
2931
- });
2946
+ if (actualCallback) {
2947
+ self.registrationRecipes.tools.set(toolDefinition.name, {
2948
+ config: toolDefinition,
2949
+ handler: actualCallback
2950
+ });
2951
+ }
2932
2952
  return originalTool.call(self, toolDefinition, callback);
2933
2953
  });
2934
- this.prompt = function(promptDefinition, callback) {
2954
+ this.prompt = ((promptDefinition, callback) => {
2935
2955
  const actualCallback = callback || promptDefinition.cb;
2936
- self.registrationRecipes.prompts.set(promptDefinition.name, {
2937
- config: promptDefinition,
2938
- handler: actualCallback
2939
- });
2940
- return originalPrompt.call(self, promptDefinition, callback);
2941
- };
2942
- this.resource = function(resourceDefinition, callback) {
2956
+ if (actualCallback) {
2957
+ self.registrationRecipes.prompts.set(promptDefinition.name, {
2958
+ config: promptDefinition,
2959
+ handler: actualCallback
2960
+ });
2961
+ }
2962
+ return originalPrompt.call(
2963
+ self,
2964
+ promptDefinition,
2965
+ callback
2966
+ );
2967
+ });
2968
+ this.resource = ((resourceDefinition, callback) => {
2943
2969
  const actualCallback = callback || resourceDefinition.readCallback;
2944
- const resourceKey = `${resourceDefinition.name}:${resourceDefinition.uri}`;
2945
- self.registrationRecipes.resources.set(resourceKey, {
2946
- config: resourceDefinition,
2947
- handler: actualCallback
2948
- });
2970
+ if (actualCallback) {
2971
+ const resourceKey = `${resourceDefinition.name}:${resourceDefinition.uri}`;
2972
+ self.registrationRecipes.resources.set(resourceKey, {
2973
+ config: resourceDefinition,
2974
+ handler: actualCallback
2975
+ });
2976
+ }
2949
2977
  return originalResource.call(self, resourceDefinition, callback);
2950
- };
2951
- this.resourceTemplate = function(templateDefinition, callback) {
2978
+ });
2979
+ this.resourceTemplate = ((templateDefinition, callback) => {
2952
2980
  const actualCallback = callback || templateDefinition.readCallback;
2953
- self.registrationRecipes.resourceTemplates.set(templateDefinition.name, {
2954
- config: templateDefinition,
2955
- handler: actualCallback
2956
- });
2957
- return originalResourceTemplate.call(self, templateDefinition, callback);
2958
- };
2981
+ if (actualCallback) {
2982
+ self.registrationRecipes.resourceTemplates.set(
2983
+ templateDefinition.name,
2984
+ {
2985
+ config: templateDefinition,
2986
+ handler: actualCallback
2987
+ }
2988
+ );
2989
+ }
2990
+ return originalResourceTemplate.call(
2991
+ self,
2992
+ templateDefinition,
2993
+ callback
2994
+ );
2995
+ });
2959
2996
  }
2960
2997
  /**
2961
2998
  * Create a new server instance for a session following official SDK pattern.
@@ -2993,6 +3030,15 @@ var McpServer = class {
2993
3030
  extraProgressToken,
2994
3031
  extraSendNotification
2995
3032
  );
3033
+ let sessionId;
3034
+ if (session) {
3035
+ for (const [id, s] of this.sessions.entries()) {
3036
+ if (s === session) {
3037
+ sessionId = id;
3038
+ break;
3039
+ }
3040
+ }
3041
+ }
2996
3042
  const createMessageWithLogging = /* @__PURE__ */ __name(async (params2, options) => {
2997
3043
  console.log("[createMessage] About to call server.createMessage");
2998
3044
  console.log("[createMessage] Has server:", !!newServer);
@@ -3004,11 +3050,12 @@ var McpServer = class {
3004
3050
  console.log("[createMessage] Got result successfully");
3005
3051
  return result;
3006
3052
  } catch (err) {
3053
+ const error2 = err;
3007
3054
  console.error(
3008
3055
  "[createMessage] Error:",
3009
- err.message,
3056
+ error2.message,
3010
3057
  "Code:",
3011
- err.code
3058
+ error2.code
3012
3059
  );
3013
3060
  throw err;
3014
3061
  }
@@ -3019,7 +3066,10 @@ var McpServer = class {
3019
3066
  newServer.server.elicitInput.bind(newServer.server),
3020
3067
  progressToken,
3021
3068
  sendNotification2,
3022
- session?.logLevel
3069
+ session?.logLevel,
3070
+ session?.clientCapabilities,
3071
+ sessionId,
3072
+ this.sessions
3023
3073
  );
3024
3074
  const executeCallback = /* @__PURE__ */ __name(async () => {
3025
3075
  if (actualCallback.length >= 2) {
@@ -3054,8 +3104,8 @@ var McpServer = class {
3054
3104
  } else {
3055
3105
  argsSchema = void 0;
3056
3106
  }
3057
- const wrappedHandler = /* @__PURE__ */ __name(async (params) => {
3058
- const result = await handler(params);
3107
+ const wrappedHandler = /* @__PURE__ */ __name(async (params, extra) => {
3108
+ const result = await handler(params, extra);
3059
3109
  if ("messages" in result && Array.isArray(result.messages)) {
3060
3110
  return result;
3061
3111
  }
@@ -3074,8 +3124,8 @@ var McpServer = class {
3074
3124
  }
3075
3125
  for (const [_key, recipe] of this.registrationRecipes.resources) {
3076
3126
  const { config, handler } = recipe;
3077
- const wrappedHandler = /* @__PURE__ */ __name(async () => {
3078
- const result = await handler();
3127
+ const wrappedHandler = /* @__PURE__ */ __name(async (extra) => {
3128
+ const result = await handler(extra);
3079
3129
  if ("contents" in result && Array.isArray(result.contents)) {
3080
3130
  return result;
3081
3131
  }
@@ -3095,22 +3145,23 @@ var McpServer = class {
3095
3145
  }
3096
3146
  for (const [_name, recipe] of this.registrationRecipes.resourceTemplates) {
3097
3147
  const { config, handler } = recipe;
3098
- const template = new ResourceTemplate2(
3099
- config.resourceTemplate.uriTemplate,
3100
- {
3101
- list: void 0,
3102
- complete: void 0
3103
- }
3104
- );
3148
+ const isFlatStructure = "uriTemplate" in config;
3149
+ const uriTemplate = isFlatStructure ? config.uriTemplate : config.resourceTemplate.uriTemplate;
3150
+ const mimeType = isFlatStructure ? config.mimeType : config.resourceTemplate.mimeType;
3151
+ const templateDescription = isFlatStructure ? void 0 : config.resourceTemplate.description;
3152
+ const template = new ResourceTemplate2(uriTemplate, {
3153
+ list: void 0,
3154
+ complete: void 0
3155
+ });
3105
3156
  const metadata = {};
3106
3157
  if (config.title) {
3107
3158
  metadata.title = config.title;
3108
3159
  }
3109
- if (config.description || config.resourceTemplate.description) {
3110
- metadata.description = config.description || config.resourceTemplate.description;
3160
+ if (config.description || templateDescription) {
3161
+ metadata.description = config.description || templateDescription;
3111
3162
  }
3112
- if (config.resourceTemplate.mimeType) {
3113
- metadata.mimeType = config.resourceTemplate.mimeType;
3163
+ if (mimeType) {
3164
+ metadata.mimeType = mimeType;
3114
3165
  }
3115
3166
  if (config.annotations) {
3116
3167
  metadata.annotations = config.annotations;
@@ -3119,23 +3170,23 @@ var McpServer = class {
3119
3170
  config.name,
3120
3171
  template,
3121
3172
  metadata,
3122
- async (uri) => {
3123
- const params = this.parseTemplateUri(
3124
- config.resourceTemplate.uriTemplate,
3125
- uri.toString()
3126
- );
3127
- const result = await handler(uri, params);
3173
+ async (uri, extra) => {
3174
+ const params = this.parseTemplateUri(uriTemplate, uri.toString());
3175
+ const result = await handler(uri, params, extra);
3128
3176
  if ("contents" in result && Array.isArray(result.contents)) {
3129
3177
  return result;
3130
3178
  }
3131
3179
  const { convertToolResultToResourceResult: convertToolResultToResourceResult2 } = await import("../../conversion-5MA4VY3B.js");
3132
- return convertToolResultToResourceResult2(uri.toString(), result);
3180
+ return convertToolResultToResourceResult2(
3181
+ uri.toString(),
3182
+ result
3183
+ );
3133
3184
  }
3134
3185
  );
3135
3186
  }
3136
3187
  newServer.server.setRequestHandler(
3137
3188
  z2.object({ method: z2.literal("logging/setLevel") }).passthrough(),
3138
- async (request) => {
3189
+ (async (request, extra) => {
3139
3190
  const level = request.params?.level;
3140
3191
  if (!level) {
3141
3192
  throw new McpError(
@@ -3174,7 +3225,7 @@ var McpServer = class {
3174
3225
  "[MCP] Could not find session for logging/setLevel request"
3175
3226
  );
3176
3227
  throw new McpError(ErrorCode.InternalError, "Could not find session");
3177
- }
3228
+ })
3178
3229
  );
3179
3230
  this.subscriptionManager.registerHandlers(newServer, this.sessions);
3180
3231
  return newServer;
@@ -3224,7 +3275,9 @@ var McpServer = class {
3224
3275
  async notifyResourceUpdated(uri) {
3225
3276
  return this.subscriptionManager.notifyResourceUpdated(uri, this.sessions);
3226
3277
  }
3227
- uiResource = uiResourceRegistration;
3278
+ uiResource = /* @__PURE__ */ __name((definition) => {
3279
+ return uiResourceRegistration(this, definition);
3280
+ }, "uiResource");
3228
3281
  /**
3229
3282
  * Mount MCP server endpoints at /mcp and /sse
3230
3283
  *
@@ -3249,7 +3302,7 @@ var McpServer = class {
3249
3302
  const result = await mountMcp(
3250
3303
  this.app,
3251
3304
  this,
3252
- // Pass the McpServer instance so mountMcp can call getServerForSession()
3305
+ // Pass the MCPServer instance so mountMcp can call getServerForSession()
3253
3306
  this.sessions,
3254
3307
  this.config,
3255
3308
  isProductionMode()
@@ -3312,7 +3365,7 @@ var McpServer = class {
3312
3365
  this.serverHost,
3313
3366
  this.serverPort
3314
3367
  );
3315
- if (this.oauthConfig && !this.oauthSetupState.complete) {
3368
+ if (this.oauthConfig && !this.oauthSetupState.complete && this.oauthProvider) {
3316
3369
  await setupOAuthForServer(
3317
3370
  this.app,
3318
3371
  this.oauthProvider,
@@ -3349,7 +3402,7 @@ var McpServer = class {
3349
3402
  * @example
3350
3403
  * ```typescript
3351
3404
  * // For Supabase Edge Functions (handles path rewriting automatically)
3352
- * const server = createMCPServer('my-server');
3405
+ * const server = new MCPServer({ name: 'my-server', version: '1.0.0' });
3353
3406
  * server.tool({ ... });
3354
3407
  * const handler = await server.getHandler({ provider: 'supabase' });
3355
3408
  * Deno.serve(handler);
@@ -3358,14 +3411,14 @@ var McpServer = class {
3358
3411
  * @example
3359
3412
  * ```typescript
3360
3413
  * // For Cloudflare Workers
3361
- * const server = createMCPServer('my-server');
3414
+ * const server = new MCPServer({ name: 'my-server', version: '1.0.0' });
3362
3415
  * server.tool({ ... });
3363
3416
  * const handler = await server.getHandler();
3364
3417
  * export default { fetch: handler };
3365
3418
  * ```
3366
3419
  */
3367
3420
  async getHandler(options) {
3368
- if (this.oauthConfig && !this.oauthSetupState.complete) {
3421
+ if (this.oauthConfig && !this.oauthSetupState.complete && this.oauthProvider) {
3369
3422
  await setupOAuthForServer(
3370
3423
  this.app,
3371
3424
  this.oauthProvider,
@@ -3436,7 +3489,7 @@ var McpServer = class {
3436
3489
  }
3437
3490
  };
3438
3491
  function createMCPServer(name, config = {}) {
3439
- const instance = new McpServer({
3492
+ const instance = new MCPServer({
3440
3493
  name,
3441
3494
  version: config.version || "1.0.0",
3442
3495
  description: config.description,
@@ -3520,12 +3573,13 @@ var SupabaseOAuthProvider = class {
3520
3573
  }
3521
3574
  }
3522
3575
  getUserInfo(payload) {
3576
+ const userMetadata = payload.user_metadata;
3523
3577
  return {
3524
3578
  userId: payload.sub || payload.user_id,
3525
3579
  email: payload.email,
3526
- name: payload.user_metadata?.name || payload.user_metadata?.full_name,
3527
- username: payload.user_metadata?.username,
3528
- picture: payload.user_metadata?.avatar_url,
3580
+ name: userMetadata?.name || userMetadata?.full_name,
3581
+ username: userMetadata?.username,
3582
+ picture: userMetadata?.avatar_url,
3529
3583
  roles: payload.role ? [payload.role] : [],
3530
3584
  permissions: payload.aal ? [`aal:${payload.aal}`] : [],
3531
3585
  // Include Supabase-specific claims
@@ -3598,6 +3652,7 @@ var Auth0OAuthProvider = class {
3598
3652
  }
3599
3653
  }
3600
3654
  getUserInfo(payload) {
3655
+ const scope = payload.scope;
3601
3656
  return {
3602
3657
  userId: payload.sub,
3603
3658
  email: payload.email,
@@ -3610,7 +3665,7 @@ var Auth0OAuthProvider = class {
3610
3665
  // Auth0 can include roles (if configured)
3611
3666
  roles: payload.roles || payload["https://your-app.com/roles"] || [],
3612
3667
  // Include scope as well
3613
- scopes: payload.scope ? payload.scope.split(" ") : [],
3668
+ scopes: scope ? scope.split(" ") : [],
3614
3669
  // Additional Auth0-specific claims
3615
3670
  email_verified: payload.email_verified,
3616
3671
  updated_at: payload.updated_at
@@ -3682,8 +3737,10 @@ var KeycloakOAuthProvider = class {
3682
3737
  }
3683
3738
  }
3684
3739
  getUserInfo(payload) {
3685
- const realmRoles = payload.realm_access?.roles || [];
3686
- const clientRoles = this.config.clientId && payload.resource_access?.[this.config.clientId]?.roles || [];
3740
+ const realmAccess = payload.realm_access;
3741
+ const realmRoles = realmAccess?.roles || [];
3742
+ const resourceAccess = payload.resource_access;
3743
+ const clientRoles = this.config.clientId && (resourceAccess?.[this.config.clientId]?.roles || []) || [];
3687
3744
  const allRoles = [...realmRoles, ...clientRoles];
3688
3745
  const permissions = [];
3689
3746
  if (payload.resource_access) {
@@ -3697,6 +3754,7 @@ var KeycloakOAuthProvider = class {
3697
3754
  }
3698
3755
  );
3699
3756
  }
3757
+ const scope = payload.scope;
3700
3758
  return {
3701
3759
  userId: payload.sub,
3702
3760
  email: payload.email,
@@ -3707,7 +3765,7 @@ var KeycloakOAuthProvider = class {
3707
3765
  roles: allRoles,
3708
3766
  permissions,
3709
3767
  // Include scope as well
3710
- scopes: payload.scope ? payload.scope.split(" ") : [],
3768
+ scopes: scope ? scope.split(" ") : [],
3711
3769
  // Keycloak-specific claims
3712
3770
  email_verified: payload.email_verified,
3713
3771
  given_name: payload.given_name,
@@ -3836,7 +3894,7 @@ var CustomOAuthProvider = class {
3836
3894
  async verifyToken(token) {
3837
3895
  try {
3838
3896
  const result = await this.config.verifyToken(token);
3839
- return { payload: result };
3897
+ return result;
3840
3898
  } catch (error2) {
3841
3899
  throw new Error(`Custom OAuth verification failed: ${error2}`);
3842
3900
  }
@@ -3845,16 +3903,19 @@ var CustomOAuthProvider = class {
3845
3903
  if (this.config.getUserInfo) {
3846
3904
  return this.config.getUserInfo(payload);
3847
3905
  }
3906
+ const scope = payload.scope;
3907
+ const roles = payload.roles;
3908
+ const permissions = payload.permissions;
3848
3909
  return {
3849
3910
  userId: payload.sub || payload.user_id || payload.id,
3850
- email: payload.email,
3851
- name: payload.name,
3852
- username: payload.username || payload.preferred_username,
3853
- nickname: payload.nickname,
3854
- picture: payload.picture || payload.avatar_url,
3855
- roles: payload.roles || [],
3856
- permissions: payload.permissions || [],
3857
- scopes: payload.scope ? payload.scope.split(" ") : []
3911
+ email: payload.email ? payload.email : void 0,
3912
+ name: payload.name ? payload.name : void 0,
3913
+ username: payload.username || payload.preferred_username ? payload.username || payload.preferred_username : void 0,
3914
+ nickname: payload.nickname ? payload.nickname : void 0,
3915
+ picture: payload.picture || payload.avatar_url ? payload.picture || payload.avatar_url : void 0,
3916
+ roles: Array.isArray(roles) ? roles : [],
3917
+ permissions: Array.isArray(permissions) ? permissions : [],
3918
+ scopes: scope ? scope.split(" ") : []
3858
3919
  };
3859
3920
  }
3860
3921
  getIssuer() {
@@ -4039,6 +4100,7 @@ function requireAnyScope(needed) {
4039
4100
  }
4040
4101
  __name(requireAnyScope, "requireAnyScope");
4041
4102
  export {
4103
+ MCPServer,
4042
4104
  adaptConnectMiddleware,
4043
4105
  adaptMiddleware,
4044
4106
  array,