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

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 (47) hide show
  1. package/README.md +9 -6
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/{chunk-MUZ5WYE3.js → chunk-BFFS67JY.js} +1 -1
  4. package/dist/{chunk-D22NUQTL.js → chunk-HRWL2M2I.js} +184 -0
  5. package/dist/{chunk-33U4IA4N.js → chunk-Q3PFK7Y4.js} +81 -1
  6. package/dist/index.cjs +184 -0
  7. package/dist/index.d.ts +3 -2
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +2 -2
  10. package/dist/src/browser.cjs +184 -0
  11. package/dist/src/browser.js +1 -1
  12. package/dist/src/react/index.cjs +184 -0
  13. package/dist/src/react/index.js +2 -2
  14. package/dist/src/server/endpoints/mount-mcp.d.ts.map +1 -1
  15. package/dist/src/server/index.cjs +150 -44
  16. package/dist/src/server/index.d.ts +2 -2
  17. package/dist/src/server/index.d.ts.map +1 -1
  18. package/dist/src/server/index.js +73 -47
  19. package/dist/src/server/mcp-server.d.ts +19 -9
  20. package/dist/src/server/mcp-server.d.ts.map +1 -1
  21. package/dist/src/server/oauth/providers.d.ts +27 -9
  22. package/dist/src/server/oauth/providers.d.ts.map +1 -1
  23. package/dist/src/server/resources/index.d.ts +42 -23
  24. package/dist/src/server/resources/index.d.ts.map +1 -1
  25. package/dist/src/server/sessions/session-manager.d.ts +2 -0
  26. package/dist/src/server/sessions/session-manager.d.ts.map +1 -1
  27. package/dist/src/server/tools/tool-execution-helpers.d.ts +2 -2
  28. package/dist/src/server/tools/tool-execution-helpers.d.ts.map +1 -1
  29. package/dist/src/server/tools/tool-registration.d.ts.map +1 -1
  30. package/dist/src/server/types/common.d.ts +24 -8
  31. package/dist/src/server/types/common.d.ts.map +1 -1
  32. package/dist/src/server/types/index.d.ts +3 -3
  33. package/dist/src/server/types/index.d.ts.map +1 -1
  34. package/dist/src/server/types/prompt.d.ts +2 -1
  35. package/dist/src/server/types/prompt.d.ts.map +1 -1
  36. package/dist/src/server/types/resource.d.ts +53 -8
  37. package/dist/src/server/types/resource.d.ts.map +1 -1
  38. package/dist/src/server/types/tool-context.d.ts +115 -0
  39. package/dist/src/server/types/tool-context.d.ts.map +1 -1
  40. package/dist/src/server/types/tool.d.ts +1 -1
  41. package/dist/src/server/types/tool.d.ts.map +1 -1
  42. package/dist/src/server/widgets/index.d.ts +2 -2
  43. package/dist/src/server/widgets/ui-resource-registration.d.ts +2 -2
  44. package/dist/src/session.d.ts +337 -2
  45. package/dist/src/session.d.ts.map +1 -1
  46. package/dist/{tool-execution-helpers-BQJTPWPN.js → tool-execution-helpers-RRMGLAHR.js} +1 -1
  47. package/package.json +3 -3
@@ -456,7 +456,67 @@ function createLogMethod(sendNotification2, minLogLevel) {
456
456
  });
457
457
  };
458
458
  }
459
- function createEnhancedContext(baseContext, createMessage, elicitInput, progressToken, sendNotification2, minLogLevel) {
459
+ function createClientCapabilityChecker(clientCapabilities) {
460
+ const caps = clientCapabilities || {};
461
+ return {
462
+ can(capability) {
463
+ return capability in caps;
464
+ },
465
+ capabilities() {
466
+ return { ...caps };
467
+ }
468
+ };
469
+ }
470
+ function createSendNotificationMethod(sessionId, sessions) {
471
+ if (!sessionId || !sessions) {
472
+ return void 0;
473
+ }
474
+ return async (method, params) => {
475
+ const session = sessions.get(sessionId);
476
+ if (!session?.sendNotification) {
477
+ console.warn(
478
+ `[MCP] Cannot send notification to session ${sessionId} - no sendNotification function`
479
+ );
480
+ return;
481
+ }
482
+ try {
483
+ await session.sendNotification({
484
+ method,
485
+ params: params || {}
486
+ });
487
+ } catch (error2) {
488
+ console.error(
489
+ `[MCP] Error sending notification to session ${sessionId}:`,
490
+ error2
491
+ );
492
+ }
493
+ };
494
+ }
495
+ function createSendNotificationToSessionMethod(sessions) {
496
+ if (!sessions) {
497
+ return void 0;
498
+ }
499
+ return async (sessionId, method, params) => {
500
+ const session = sessions.get(sessionId);
501
+ if (!session?.sendNotification) {
502
+ return false;
503
+ }
504
+ try {
505
+ await session.sendNotification({
506
+ method,
507
+ params: params || {}
508
+ });
509
+ return true;
510
+ } catch (error2) {
511
+ console.error(
512
+ `[MCP] Error sending notification to session ${sessionId}:`,
513
+ error2
514
+ );
515
+ return false;
516
+ }
517
+ };
518
+ }
519
+ function createEnhancedContext(baseContext, createMessage, elicitInput, progressToken, sendNotification2, minLogLevel, clientCapabilities, sessionId, sessions) {
460
520
  const enhancedContext = baseContext ? Object.create(baseContext) : {};
461
521
  enhancedContext.sample = createSampleMethod(
462
522
  createMessage,
@@ -469,6 +529,23 @@ function createEnhancedContext(baseContext, createMessage, elicitInput, progress
469
529
  sendNotification2
470
530
  );
471
531
  enhancedContext.log = createLogMethod(sendNotification2, minLogLevel);
532
+ enhancedContext.client = createClientCapabilityChecker(clientCapabilities);
533
+ if (sessionId) {
534
+ enhancedContext.session = {
535
+ sessionId
536
+ };
537
+ }
538
+ const sendNotificationMethod = createSendNotificationMethod(
539
+ sessionId,
540
+ sessions
541
+ );
542
+ if (sendNotificationMethod) {
543
+ enhancedContext.sendNotification = sendNotificationMethod;
544
+ }
545
+ const sendNotificationToSessionMethod = createSendNotificationToSessionMethod(sessions);
546
+ if (sendNotificationToSessionMethod) {
547
+ enhancedContext.sendNotificationToSession = sendNotificationToSessionMethod;
548
+ }
472
549
  return enhancedContext;
473
550
  }
474
551
  var import_zod_json_schema_compat, LOG_LEVELS, VALID_LOG_LEVELS;
@@ -508,6 +585,9 @@ var init_tool_execution_helpers = __esm({
508
585
  __name(isValidLogLevel, "isValidLogLevel");
509
586
  __name(shouldLogMessage, "shouldLogMessage");
510
587
  __name(createLogMethod, "createLogMethod");
588
+ __name(createClientCapabilityChecker, "createClientCapabilityChecker");
589
+ __name(createSendNotificationMethod, "createSendNotificationMethod");
590
+ __name(createSendNotificationToSessionMethod, "createSendNotificationToSessionMethod");
511
591
  __name(createEnhancedContext, "createEnhancedContext");
512
592
  }
513
593
  });
@@ -705,6 +785,7 @@ var init_conversion2 = __esm({
705
785
  // src/server/index.ts
706
786
  var server_exports = {};
707
787
  __export(server_exports, {
788
+ MCPServer: () => MCPServer,
708
789
  adaptConnectMiddleware: () => adaptConnectMiddleware,
709
790
  adaptMiddleware: () => adaptMiddleware,
710
791
  array: () => array,
@@ -2599,7 +2680,7 @@ function toolRegistration(toolDefinition, callback) {
2599
2680
  const initialRequestContext = getRequestContext();
2600
2681
  const extraProgressToken = extra?._meta?.progressToken;
2601
2682
  const extraSendNotification = extra?.sendNotification;
2602
- const { requestContext, progressToken, sendNotification: sendNotification2 } = findSessionContext(
2683
+ const { requestContext, session, progressToken, sendNotification: sendNotification2 } = findSessionContext(
2603
2684
  this.sessions,
2604
2685
  initialRequestContext,
2605
2686
  extraProgressToken,
@@ -2610,7 +2691,9 @@ function toolRegistration(toolDefinition, callback) {
2610
2691
  this.createMessage.bind(this),
2611
2692
  this.server.server.elicitInput.bind(this.server.server),
2612
2693
  progressToken,
2613
- sendNotification2
2694
+ sendNotification2,
2695
+ session?.logLevel,
2696
+ session?.clientCapabilities
2614
2697
  );
2615
2698
  const executeCallback = /* @__PURE__ */ __name(async () => {
2616
2699
  if (actualCallback.length >= 2) {
@@ -2839,24 +2922,25 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2839
2922
  `Resource template '${resourceTemplateDefinition.name}' must have either a readCallback property or a callback parameter`
2840
2923
  );
2841
2924
  }
2842
- const template = new import_mcp.ResourceTemplate(
2843
- resourceTemplateDefinition.resourceTemplate.uriTemplate,
2844
- {
2845
- list: void 0,
2846
- // Optional: callback to list all matching resources
2847
- complete: void 0
2848
- // Optional: callback for auto-completion
2849
- }
2850
- );
2925
+ const isFlatStructure = "uriTemplate" in resourceTemplateDefinition;
2926
+ const uriTemplate = isFlatStructure ? resourceTemplateDefinition.uriTemplate : resourceTemplateDefinition.resourceTemplate.uriTemplate;
2927
+ const mimeType = isFlatStructure ? resourceTemplateDefinition.mimeType : resourceTemplateDefinition.resourceTemplate.mimeType;
2928
+ const templateDescription = isFlatStructure ? void 0 : resourceTemplateDefinition.resourceTemplate.description;
2929
+ const template = new import_mcp.ResourceTemplate(uriTemplate, {
2930
+ list: void 0,
2931
+ // Optional: callback to list all matching resources
2932
+ complete: void 0
2933
+ // Optional: callback for auto-completion
2934
+ });
2851
2935
  const metadata = {};
2852
2936
  if (resourceTemplateDefinition.title) {
2853
2937
  metadata.title = resourceTemplateDefinition.title;
2854
2938
  }
2855
- if (resourceTemplateDefinition.description || resourceTemplateDefinition.resourceTemplate.description) {
2856
- metadata.description = resourceTemplateDefinition.description || resourceTemplateDefinition.resourceTemplate.description;
2939
+ if (resourceTemplateDefinition.description || templateDescription) {
2940
+ metadata.description = resourceTemplateDefinition.description || templateDescription;
2857
2941
  }
2858
- if (resourceTemplateDefinition.resourceTemplate.mimeType) {
2859
- metadata.mimeType = resourceTemplateDefinition.resourceTemplate.mimeType;
2942
+ if (mimeType) {
2943
+ metadata.mimeType = mimeType;
2860
2944
  }
2861
2945
  if (resourceTemplateDefinition.annotations) {
2862
2946
  metadata.annotations = resourceTemplateDefinition.annotations;
@@ -2866,10 +2950,7 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2866
2950
  template,
2867
2951
  metadata,
2868
2952
  async (uri) => {
2869
- const params = this.parseTemplateUri(
2870
- resourceTemplateDefinition.resourceTemplate.uriTemplate,
2871
- uri.toString()
2872
- );
2953
+ const params = this.parseTemplateUri(uriTemplate, uri.toString());
2873
2954
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await Promise.resolve().then(() => (init_context_storage(), context_storage_exports));
2874
2955
  const { findSessionContext: findSessionContext2 } = await Promise.resolve().then(() => (init_tool_execution_helpers(), tool_execution_helpers_exports));
2875
2956
  const initialRequestContext = getRequestContext2();
@@ -2884,8 +2965,12 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2884
2965
  const executeCallback = /* @__PURE__ */ __name(async () => {
2885
2966
  if (actualCallback.length >= 3) {
2886
2967
  return await actualCallback(uri, params, enhancedContext);
2968
+ } else if (actualCallback.length === 2) {
2969
+ return await actualCallback(uri, params);
2970
+ } else if (actualCallback.length === 1) {
2971
+ return await actualCallback(uri);
2887
2972
  }
2888
- return await actualCallback(uri, params);
2973
+ return await actualCallback();
2889
2974
  }, "executeCallback");
2890
2975
  const result = requestContext ? await runWithContext2(requestContext, executeCallback) : await executeCallback();
2891
2976
  if ("contents" in result && Array.isArray(result.contents)) {
@@ -3266,6 +3351,17 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
3266
3351
  context: c,
3267
3352
  honoContext: c
3268
3353
  });
3354
+ server.server.oninitialized = () => {
3355
+ const clientCapabilities = server.server.getClientCapabilities();
3356
+ if (clientCapabilities && sessions.has(sid)) {
3357
+ const session = sessions.get(sid);
3358
+ session.clientCapabilities = clientCapabilities;
3359
+ console.log(
3360
+ `[MCP] Captured client capabilities for session ${sid}:`,
3361
+ Object.keys(clientCapabilities)
3362
+ );
3363
+ }
3364
+ };
3269
3365
  }, "onsessioninitialized"),
3270
3366
  onsessionclosed: /* @__PURE__ */ __name((sid) => {
3271
3367
  console.log(`[MCP] Session closed: ${sid}`);
@@ -3562,9 +3658,9 @@ async function setupOAuthForServer(app, oauthProvider, baseUrl, state) {
3562
3658
  __name(setupOAuthForServer, "setupOAuthForServer");
3563
3659
 
3564
3660
  // src/server/mcp-server.ts
3565
- var McpServer = class {
3661
+ var MCPServer = class {
3566
3662
  static {
3567
- __name(this, "McpServer");
3663
+ __name(this, "MCPServer");
3568
3664
  }
3569
3665
  /**
3570
3666
  * Native MCP server instance from @modelcontextprotocol/sdk
@@ -3631,7 +3727,7 @@ var McpServer = class {
3631
3727
  * access to Hono methods while preserving MCP server functionality.
3632
3728
  *
3633
3729
  * @param config - Server configuration including name, version, and description
3634
- * @returns A proxied McpServer instance that supports both MCP and Hono methods
3730
+ * @returns A proxied MCPServer instance that supports both MCP and Hono methods
3635
3731
  */
3636
3732
  constructor(config) {
3637
3733
  this.config = config;
@@ -3737,6 +3833,15 @@ var McpServer = class {
3737
3833
  extraProgressToken,
3738
3834
  extraSendNotification
3739
3835
  );
3836
+ let sessionId;
3837
+ if (session) {
3838
+ for (const [id, s] of this.sessions.entries()) {
3839
+ if (s === session) {
3840
+ sessionId = id;
3841
+ break;
3842
+ }
3843
+ }
3844
+ }
3740
3845
  const createMessageWithLogging = /* @__PURE__ */ __name(async (params2, options) => {
3741
3846
  console.log("[createMessage] About to call server.createMessage");
3742
3847
  console.log("[createMessage] Has server:", !!newServer);
@@ -3763,7 +3868,10 @@ var McpServer = class {
3763
3868
  newServer.server.elicitInput.bind(newServer.server),
3764
3869
  progressToken,
3765
3870
  sendNotification2,
3766
- session?.logLevel
3871
+ session?.logLevel,
3872
+ session?.clientCapabilities,
3873
+ sessionId,
3874
+ this.sessions
3767
3875
  );
3768
3876
  const executeCallback = /* @__PURE__ */ __name(async () => {
3769
3877
  if (actualCallback.length >= 2) {
@@ -3839,22 +3947,23 @@ var McpServer = class {
3839
3947
  }
3840
3948
  for (const [_name, recipe] of this.registrationRecipes.resourceTemplates) {
3841
3949
  const { config, handler } = recipe;
3842
- const template = new import_mcp2.ResourceTemplate(
3843
- config.resourceTemplate.uriTemplate,
3844
- {
3845
- list: void 0,
3846
- complete: void 0
3847
- }
3848
- );
3950
+ const isFlatStructure = "uriTemplate" in config;
3951
+ const uriTemplate = isFlatStructure ? config.uriTemplate : config.resourceTemplate.uriTemplate;
3952
+ const mimeType = isFlatStructure ? config.mimeType : config.resourceTemplate.mimeType;
3953
+ const templateDescription = isFlatStructure ? void 0 : config.resourceTemplate.description;
3954
+ const template = new import_mcp2.ResourceTemplate(uriTemplate, {
3955
+ list: void 0,
3956
+ complete: void 0
3957
+ });
3849
3958
  const metadata = {};
3850
3959
  if (config.title) {
3851
3960
  metadata.title = config.title;
3852
3961
  }
3853
- if (config.description || config.resourceTemplate.description) {
3854
- metadata.description = config.description || config.resourceTemplate.description;
3962
+ if (config.description || templateDescription) {
3963
+ metadata.description = config.description || templateDescription;
3855
3964
  }
3856
- if (config.resourceTemplate.mimeType) {
3857
- metadata.mimeType = config.resourceTemplate.mimeType;
3965
+ if (mimeType) {
3966
+ metadata.mimeType = mimeType;
3858
3967
  }
3859
3968
  if (config.annotations) {
3860
3969
  metadata.annotations = config.annotations;
@@ -3864,10 +3973,7 @@ var McpServer = class {
3864
3973
  template,
3865
3974
  metadata,
3866
3975
  async (uri) => {
3867
- const params = this.parseTemplateUri(
3868
- config.resourceTemplate.uriTemplate,
3869
- uri.toString()
3870
- );
3976
+ const params = this.parseTemplateUri(uriTemplate, uri.toString());
3871
3977
  const result = await handler(uri, params);
3872
3978
  if ("contents" in result && Array.isArray(result.contents)) {
3873
3979
  return result;
@@ -3993,7 +4099,7 @@ var McpServer = class {
3993
4099
  const result = await mountMcp(
3994
4100
  this.app,
3995
4101
  this,
3996
- // Pass the McpServer instance so mountMcp can call getServerForSession()
4102
+ // Pass the MCPServer instance so mountMcp can call getServerForSession()
3997
4103
  this.sessions,
3998
4104
  this.config,
3999
4105
  isProductionMode()
@@ -4093,7 +4199,7 @@ var McpServer = class {
4093
4199
  * @example
4094
4200
  * ```typescript
4095
4201
  * // For Supabase Edge Functions (handles path rewriting automatically)
4096
- * const server = createMCPServer('my-server');
4202
+ * const server = new MCPServer({ name: 'my-server', version: '1.0.0' });
4097
4203
  * server.tool({ ... });
4098
4204
  * const handler = await server.getHandler({ provider: 'supabase' });
4099
4205
  * Deno.serve(handler);
@@ -4102,7 +4208,7 @@ var McpServer = class {
4102
4208
  * @example
4103
4209
  * ```typescript
4104
4210
  * // For Cloudflare Workers
4105
- * const server = createMCPServer('my-server');
4211
+ * const server = new MCPServer({ name: 'my-server', version: '1.0.0' });
4106
4212
  * server.tool({ ... });
4107
4213
  * const handler = await server.getHandler();
4108
4214
  * export default { fetch: handler };
@@ -4180,7 +4286,7 @@ var McpServer = class {
4180
4286
  }
4181
4287
  };
4182
4288
  function createMCPServer(name, config = {}) {
4183
- const instance = new McpServer({
4289
+ const instance = new MCPServer({
4184
4290
  name,
4185
4291
  version: config.version || "1.0.0",
4186
4292
  description: config.description,
@@ -1,4 +1,4 @@
1
- export { createMCPServer, type McpServerInstance } from "./mcp-server.js";
1
+ export { MCPServer, createMCPServer, type McpServerInstance, } from "./mcp-server.js";
2
2
  export type { ToolContext, SampleOptions, ElicitOptions, ElicitFormParams, ElicitUrlParams, } from "./types/tool-context.js";
3
3
  export * from "./types/index.js";
4
4
  export { getRequestContext, runWithContext, hasRequestContext, } from "./context-storage.js";
@@ -6,5 +6,5 @@ export { text, image, resource, error, object, array, widget, mix, audio, html,
6
6
  export { getAuth, hasScope, hasAnyScope, requireScope, requireAnyScope, oauthSupabaseProvider, oauthAuth0Provider, oauthKeycloakProvider, oauthWorkOSProvider, oauthCustomProvider, type AuthInfo, type OAuthProvider, type UserInfo, type SupabaseProviderConfig, type Auth0ProviderConfig, type KeycloakProviderConfig, type WorkOSProviderConfig, type CustomProviderConfig, } from "./oauth/index.js";
7
7
  export { buildWidgetUrl, createExternalUrlResource, createRawHtmlResource, createRemoteDomResource, createUIResourceFromDefinition, type UrlConfig, } from "./widgets/mcp-ui-adapter.js";
8
8
  export { adaptConnectMiddleware, adaptMiddleware, isExpressMiddleware, } from "./connect-adapter.js";
9
- export type { DiscoverWidgetsOptions, ExternalUrlUIResource, InputDefinition, McpContext, PromptCallback, PromptDefinition, RawHtmlUIResource, ReadResourceCallback, ReadResourceTemplateCallback, RemoteDomUIResource, ResourceDefinition, ServerConfig, ToolCallback, ToolDefinition, UIResourceDefinition, WidgetConfig, WidgetManifest, WidgetProps, } from "./types/index.js";
9
+ export type { DiscoverWidgetsOptions, ExternalUrlUIResource, InputDefinition, McpContext, PromptCallback, PromptDefinition, RawHtmlUIResource, ReadResourceCallback, ReadResourceTemplateCallback, RemoteDomUIResource, ResourceDefinition, ServerConfig, ToolCallback, ToolDefinition, UIResourceDefinition, WidgetConfig, WidgetManifest, WidgetProps, ToolAnnotations, GetPromptResult, PromptResult, } from "./types/index.js";
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAG1E,YAAY,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,GAAG,EACH,KAAK,EAEL,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,GAAG,EACH,UAAU,EACV,MAAM,EACN,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,OAAO,EACP,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,SAAS,GACf,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAC5B,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,cAAc,EAEd,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,WAAW,GACZ,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,eAAe,EACf,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,GAAG,EACH,KAAK,EAEL,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,GAAG,EACH,UAAU,EACV,MAAM,EACN,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,OAAO,EACP,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,SAAS,GACf,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAC5B,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,cAAc,EAEd,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,WAAW,EAEX,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,kBAAkB,CAAC"}
@@ -7,7 +7,7 @@ import {
7
7
  createEnhancedContext,
8
8
  findSessionContext,
9
9
  isValidLogLevel
10
- } from "../../chunk-33U4IA4N.js";
10
+ } from "../../chunk-Q3PFK7Y4.js";
11
11
  import {
12
12
  convertToolResultToResourceResult
13
13
  } from "../../chunk-362PI25Z.js";
@@ -1867,7 +1867,7 @@ function toolRegistration(toolDefinition, callback) {
1867
1867
  const initialRequestContext = getRequestContext();
1868
1868
  const extraProgressToken = extra?._meta?.progressToken;
1869
1869
  const extraSendNotification = extra?.sendNotification;
1870
- const { requestContext, progressToken, sendNotification: sendNotification2 } = findSessionContext(
1870
+ const { requestContext, session, progressToken, sendNotification: sendNotification2 } = findSessionContext(
1871
1871
  this.sessions,
1872
1872
  initialRequestContext,
1873
1873
  extraProgressToken,
@@ -1878,7 +1878,9 @@ function toolRegistration(toolDefinition, callback) {
1878
1878
  this.createMessage.bind(this),
1879
1879
  this.server.server.elicitInput.bind(this.server.server),
1880
1880
  progressToken,
1881
- sendNotification2
1881
+ sendNotification2,
1882
+ session?.logLevel,
1883
+ session?.clientCapabilities
1882
1884
  );
1883
1885
  const executeCallback = /* @__PURE__ */ __name(async () => {
1884
1886
  if (actualCallback.length >= 2) {
@@ -2057,7 +2059,7 @@ function registerResource(resourceDefinition, callback) {
2057
2059
  const explicitMimeType = resourceDefinition.mimeType;
2058
2060
  const wrappedCallback = /* @__PURE__ */ __name(async () => {
2059
2061
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2060
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-BQJTPWPN.js");
2062
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-RRMGLAHR.js");
2061
2063
  const initialRequestContext = getRequestContext2();
2062
2064
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2063
2065
  const { requestContext } = findSessionContext2(
@@ -2105,24 +2107,25 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2105
2107
  `Resource template '${resourceTemplateDefinition.name}' must have either a readCallback property or a callback parameter`
2106
2108
  );
2107
2109
  }
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
- );
2110
+ const isFlatStructure = "uriTemplate" in resourceTemplateDefinition;
2111
+ const uriTemplate = isFlatStructure ? resourceTemplateDefinition.uriTemplate : resourceTemplateDefinition.resourceTemplate.uriTemplate;
2112
+ const mimeType = isFlatStructure ? resourceTemplateDefinition.mimeType : resourceTemplateDefinition.resourceTemplate.mimeType;
2113
+ const templateDescription = isFlatStructure ? void 0 : resourceTemplateDefinition.resourceTemplate.description;
2114
+ const template = new ResourceTemplate(uriTemplate, {
2115
+ list: void 0,
2116
+ // Optional: callback to list all matching resources
2117
+ complete: void 0
2118
+ // Optional: callback for auto-completion
2119
+ });
2117
2120
  const metadata = {};
2118
2121
  if (resourceTemplateDefinition.title) {
2119
2122
  metadata.title = resourceTemplateDefinition.title;
2120
2123
  }
2121
- if (resourceTemplateDefinition.description || resourceTemplateDefinition.resourceTemplate.description) {
2122
- metadata.description = resourceTemplateDefinition.description || resourceTemplateDefinition.resourceTemplate.description;
2124
+ if (resourceTemplateDefinition.description || templateDescription) {
2125
+ metadata.description = resourceTemplateDefinition.description || templateDescription;
2123
2126
  }
2124
- if (resourceTemplateDefinition.resourceTemplate.mimeType) {
2125
- metadata.mimeType = resourceTemplateDefinition.resourceTemplate.mimeType;
2127
+ if (mimeType) {
2128
+ metadata.mimeType = mimeType;
2126
2129
  }
2127
2130
  if (resourceTemplateDefinition.annotations) {
2128
2131
  metadata.annotations = resourceTemplateDefinition.annotations;
@@ -2132,12 +2135,9 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2132
2135
  template,
2133
2136
  metadata,
2134
2137
  async (uri) => {
2135
- const params = this.parseTemplateUri(
2136
- resourceTemplateDefinition.resourceTemplate.uriTemplate,
2137
- uri.toString()
2138
- );
2138
+ const params = this.parseTemplateUri(uriTemplate, uri.toString());
2139
2139
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2140
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-BQJTPWPN.js");
2140
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-RRMGLAHR.js");
2141
2141
  const initialRequestContext = getRequestContext2();
2142
2142
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2143
2143
  const { requestContext } = findSessionContext2(
@@ -2150,8 +2150,12 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
2150
2150
  const executeCallback = /* @__PURE__ */ __name(async () => {
2151
2151
  if (actualCallback.length >= 3) {
2152
2152
  return await actualCallback(uri, params, enhancedContext);
2153
+ } else if (actualCallback.length === 2) {
2154
+ return await actualCallback(uri, params);
2155
+ } else if (actualCallback.length === 1) {
2156
+ return await actualCallback(uri);
2153
2157
  }
2154
- return await actualCallback(uri, params);
2158
+ return await actualCallback();
2155
2159
  }, "executeCallback");
2156
2160
  const result = requestContext ? await runWithContext2(requestContext, executeCallback) : await executeCallback();
2157
2161
  if ("contents" in result && Array.isArray(result.contents)) {
@@ -2188,7 +2192,7 @@ function registerPrompt(promptDefinition, callback) {
2188
2192
  }
2189
2193
  const wrappedCallback = /* @__PURE__ */ __name(async (params, extra) => {
2190
2194
  const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2191
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-BQJTPWPN.js");
2195
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-RRMGLAHR.js");
2192
2196
  const initialRequestContext = getRequestContext2();
2193
2197
  const sessions = this.sessions || /* @__PURE__ */ new Map();
2194
2198
  const { requestContext } = findSessionContext2(
@@ -2522,6 +2526,17 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
2522
2526
  context: c,
2523
2527
  honoContext: c
2524
2528
  });
2529
+ server.server.oninitialized = () => {
2530
+ const clientCapabilities = server.server.getClientCapabilities();
2531
+ if (clientCapabilities && sessions.has(sid)) {
2532
+ const session = sessions.get(sid);
2533
+ session.clientCapabilities = clientCapabilities;
2534
+ console.log(
2535
+ `[MCP] Captured client capabilities for session ${sid}:`,
2536
+ Object.keys(clientCapabilities)
2537
+ );
2538
+ }
2539
+ };
2525
2540
  }, "onsessioninitialized"),
2526
2541
  onsessionclosed: /* @__PURE__ */ __name((sid) => {
2527
2542
  console.log(`[MCP] Session closed: ${sid}`);
@@ -2818,9 +2833,9 @@ async function setupOAuthForServer(app, oauthProvider, baseUrl, state) {
2818
2833
  __name(setupOAuthForServer, "setupOAuthForServer");
2819
2834
 
2820
2835
  // src/server/mcp-server.ts
2821
- var McpServer = class {
2836
+ var MCPServer = class {
2822
2837
  static {
2823
- __name(this, "McpServer");
2838
+ __name(this, "MCPServer");
2824
2839
  }
2825
2840
  /**
2826
2841
  * Native MCP server instance from @modelcontextprotocol/sdk
@@ -2887,7 +2902,7 @@ var McpServer = class {
2887
2902
  * access to Hono methods while preserving MCP server functionality.
2888
2903
  *
2889
2904
  * @param config - Server configuration including name, version, and description
2890
- * @returns A proxied McpServer instance that supports both MCP and Hono methods
2905
+ * @returns A proxied MCPServer instance that supports both MCP and Hono methods
2891
2906
  */
2892
2907
  constructor(config) {
2893
2908
  this.config = config;
@@ -2993,6 +3008,15 @@ var McpServer = class {
2993
3008
  extraProgressToken,
2994
3009
  extraSendNotification
2995
3010
  );
3011
+ let sessionId;
3012
+ if (session) {
3013
+ for (const [id, s] of this.sessions.entries()) {
3014
+ if (s === session) {
3015
+ sessionId = id;
3016
+ break;
3017
+ }
3018
+ }
3019
+ }
2996
3020
  const createMessageWithLogging = /* @__PURE__ */ __name(async (params2, options) => {
2997
3021
  console.log("[createMessage] About to call server.createMessage");
2998
3022
  console.log("[createMessage] Has server:", !!newServer);
@@ -3019,7 +3043,10 @@ var McpServer = class {
3019
3043
  newServer.server.elicitInput.bind(newServer.server),
3020
3044
  progressToken,
3021
3045
  sendNotification2,
3022
- session?.logLevel
3046
+ session?.logLevel,
3047
+ session?.clientCapabilities,
3048
+ sessionId,
3049
+ this.sessions
3023
3050
  );
3024
3051
  const executeCallback = /* @__PURE__ */ __name(async () => {
3025
3052
  if (actualCallback.length >= 2) {
@@ -3095,22 +3122,23 @@ var McpServer = class {
3095
3122
  }
3096
3123
  for (const [_name, recipe] of this.registrationRecipes.resourceTemplates) {
3097
3124
  const { config, handler } = recipe;
3098
- const template = new ResourceTemplate2(
3099
- config.resourceTemplate.uriTemplate,
3100
- {
3101
- list: void 0,
3102
- complete: void 0
3103
- }
3104
- );
3125
+ const isFlatStructure = "uriTemplate" in config;
3126
+ const uriTemplate = isFlatStructure ? config.uriTemplate : config.resourceTemplate.uriTemplate;
3127
+ const mimeType = isFlatStructure ? config.mimeType : config.resourceTemplate.mimeType;
3128
+ const templateDescription = isFlatStructure ? void 0 : config.resourceTemplate.description;
3129
+ const template = new ResourceTemplate2(uriTemplate, {
3130
+ list: void 0,
3131
+ complete: void 0
3132
+ });
3105
3133
  const metadata = {};
3106
3134
  if (config.title) {
3107
3135
  metadata.title = config.title;
3108
3136
  }
3109
- if (config.description || config.resourceTemplate.description) {
3110
- metadata.description = config.description || config.resourceTemplate.description;
3137
+ if (config.description || templateDescription) {
3138
+ metadata.description = config.description || templateDescription;
3111
3139
  }
3112
- if (config.resourceTemplate.mimeType) {
3113
- metadata.mimeType = config.resourceTemplate.mimeType;
3140
+ if (mimeType) {
3141
+ metadata.mimeType = mimeType;
3114
3142
  }
3115
3143
  if (config.annotations) {
3116
3144
  metadata.annotations = config.annotations;
@@ -3120,10 +3148,7 @@ var McpServer = class {
3120
3148
  template,
3121
3149
  metadata,
3122
3150
  async (uri) => {
3123
- const params = this.parseTemplateUri(
3124
- config.resourceTemplate.uriTemplate,
3125
- uri.toString()
3126
- );
3151
+ const params = this.parseTemplateUri(uriTemplate, uri.toString());
3127
3152
  const result = await handler(uri, params);
3128
3153
  if ("contents" in result && Array.isArray(result.contents)) {
3129
3154
  return result;
@@ -3249,7 +3274,7 @@ var McpServer = class {
3249
3274
  const result = await mountMcp(
3250
3275
  this.app,
3251
3276
  this,
3252
- // Pass the McpServer instance so mountMcp can call getServerForSession()
3277
+ // Pass the MCPServer instance so mountMcp can call getServerForSession()
3253
3278
  this.sessions,
3254
3279
  this.config,
3255
3280
  isProductionMode()
@@ -3349,7 +3374,7 @@ var McpServer = class {
3349
3374
  * @example
3350
3375
  * ```typescript
3351
3376
  * // For Supabase Edge Functions (handles path rewriting automatically)
3352
- * const server = createMCPServer('my-server');
3377
+ * const server = new MCPServer({ name: 'my-server', version: '1.0.0' });
3353
3378
  * server.tool({ ... });
3354
3379
  * const handler = await server.getHandler({ provider: 'supabase' });
3355
3380
  * Deno.serve(handler);
@@ -3358,7 +3383,7 @@ var McpServer = class {
3358
3383
  * @example
3359
3384
  * ```typescript
3360
3385
  * // For Cloudflare Workers
3361
- * const server = createMCPServer('my-server');
3386
+ * const server = new MCPServer({ name: 'my-server', version: '1.0.0' });
3362
3387
  * server.tool({ ... });
3363
3388
  * const handler = await server.getHandler();
3364
3389
  * export default { fetch: handler };
@@ -3436,7 +3461,7 @@ var McpServer = class {
3436
3461
  }
3437
3462
  };
3438
3463
  function createMCPServer(name, config = {}) {
3439
- const instance = new McpServer({
3464
+ const instance = new MCPServer({
3440
3465
  name,
3441
3466
  version: config.version || "1.0.0",
3442
3467
  description: config.description,
@@ -4039,6 +4064,7 @@ function requireAnyScope(needed) {
4039
4064
  }
4040
4065
  __name(requireAnyScope, "requireAnyScope");
4041
4066
  export {
4067
+ MCPServer,
4042
4068
  adaptConnectMiddleware,
4043
4069
  adaptMiddleware,
4044
4070
  array,