mcp-use 1.9.1-canary.0 → 1.9.1-canary.1

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 (28) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{chunk-KHTTBIRP.js → chunk-33U4IA4N.js} +58 -1
  3. package/dist/{chunk-5URNFWCQ.js → chunk-LWVK6RXA.js} +8 -3
  4. package/dist/{context-storage-TXQ4DVSS.js → context-storage-NA4MHWOZ.js} +3 -1
  5. package/dist/src/server/context-storage.d.ts +8 -1
  6. package/dist/src/server/context-storage.d.ts.map +1 -1
  7. package/dist/src/server/endpoints/mount-mcp.d.ts.map +1 -1
  8. package/dist/src/server/index.cjs +447 -21
  9. package/dist/src/server/index.d.ts +1 -1
  10. package/dist/src/server/index.d.ts.map +1 -1
  11. package/dist/src/server/index.js +391 -25
  12. package/dist/src/server/mcp-server.d.ts +30 -0
  13. package/dist/src/server/mcp-server.d.ts.map +1 -1
  14. package/dist/src/server/prompts/index.d.ts.map +1 -1
  15. package/dist/src/server/resources/index.d.ts +1 -0
  16. package/dist/src/server/resources/index.d.ts.map +1 -1
  17. package/dist/src/server/resources/subscriptions.d.ts +54 -0
  18. package/dist/src/server/resources/subscriptions.d.ts.map +1 -0
  19. package/dist/src/server/sessions/session-manager.d.ts +7 -1
  20. package/dist/src/server/sessions/session-manager.d.ts.map +1 -1
  21. package/dist/src/server/tools/tool-execution-helpers.d.ts +30 -17
  22. package/dist/src/server/tools/tool-execution-helpers.d.ts.map +1 -1
  23. package/dist/src/server/types/tool-context.d.ts +16 -0
  24. package/dist/src/server/types/tool-context.d.ts.map +1 -1
  25. package/dist/src/server/utils/response-helpers.d.ts +48 -4
  26. package/dist/src/server/utils/response-helpers.d.ts.map +1 -1
  27. package/dist/{tool-execution-helpers-IVUDHXMK.js → tool-execution-helpers-BQJTPWPN.js} +7 -1
  28. package/package.json +3 -3
@@ -2,11 +2,12 @@ import {
2
2
  getRequestContext,
3
3
  hasRequestContext,
4
4
  runWithContext
5
- } from "../../chunk-5URNFWCQ.js";
5
+ } from "../../chunk-LWVK6RXA.js";
6
6
  import {
7
7
  createEnhancedContext,
8
- findSessionContext
9
- } from "../../chunk-KHTTBIRP.js";
8
+ findSessionContext,
9
+ isValidLogLevel
10
+ } from "../../chunk-33U4IA4N.js";
10
11
  import {
11
12
  convertToolResultToResourceResult
12
13
  } from "../../chunk-362PI25Z.js";
@@ -31,6 +32,8 @@ import {
31
32
  McpServer as OfficialMcpServer,
32
33
  ResourceTemplate as ResourceTemplate2
33
34
  } from "@modelcontextprotocol/sdk/server/mcp.js";
35
+ import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
36
+ import { z as z2 } from "zod";
34
37
 
35
38
  // src/server/utils/response-helpers.ts
36
39
  function text(content) {
@@ -63,7 +66,109 @@ function image(data, mimeType = "image/png") {
63
66
  };
64
67
  }
65
68
  __name(image, "image");
66
- function resource(uri, mimeType, text2) {
69
+ function getAudioMimeType(filename) {
70
+ const ext = filename.split(".").pop()?.toLowerCase();
71
+ switch (ext) {
72
+ case "wav":
73
+ return "audio/wav";
74
+ case "mp3":
75
+ return "audio/mpeg";
76
+ case "ogg":
77
+ return "audio/ogg";
78
+ case "m4a":
79
+ return "audio/mp4";
80
+ case "webm":
81
+ return "audio/webm";
82
+ case "flac":
83
+ return "audio/flac";
84
+ case "aac":
85
+ return "audio/aac";
86
+ default:
87
+ return "audio/wav";
88
+ }
89
+ }
90
+ __name(getAudioMimeType, "getAudioMimeType");
91
+ function arrayBufferToBase64(buffer) {
92
+ if (isDeno) {
93
+ const bytes = new Uint8Array(buffer);
94
+ let binary2 = "";
95
+ for (let i = 0; i < bytes.length; i++) {
96
+ binary2 += String.fromCharCode(bytes[i]);
97
+ }
98
+ return btoa(binary2);
99
+ } else {
100
+ return Buffer.from(buffer).toString("base64");
101
+ }
102
+ }
103
+ __name(arrayBufferToBase64, "arrayBufferToBase64");
104
+ function audio(dataOrPath, mimeType) {
105
+ const isFilePath = dataOrPath.includes("/") || dataOrPath.includes("\\") || dataOrPath.includes(".");
106
+ if (isFilePath && dataOrPath.length < 1e3) {
107
+ return (async () => {
108
+ const buffer = await fsHelpers.readFile(dataOrPath);
109
+ const base64Data = arrayBufferToBase64(buffer);
110
+ const inferredMimeType = mimeType || getAudioMimeType(dataOrPath);
111
+ return {
112
+ content: [
113
+ {
114
+ type: "audio",
115
+ data: base64Data,
116
+ mimeType: inferredMimeType
117
+ }
118
+ ],
119
+ _meta: {
120
+ mimeType: inferredMimeType,
121
+ isAudio: true
122
+ }
123
+ };
124
+ })();
125
+ }
126
+ const finalMimeType = mimeType || "audio/wav";
127
+ return {
128
+ content: [
129
+ {
130
+ type: "audio",
131
+ data: dataOrPath,
132
+ mimeType: finalMimeType
133
+ }
134
+ ],
135
+ _meta: {
136
+ mimeType: finalMimeType,
137
+ isAudio: true
138
+ }
139
+ };
140
+ }
141
+ __name(audio, "audio");
142
+ function resource(uri, mimeTypeOrContent, text2) {
143
+ if (typeof mimeTypeOrContent === "object" && mimeTypeOrContent !== null && "content" in mimeTypeOrContent) {
144
+ const contentResult = mimeTypeOrContent;
145
+ let extractedText;
146
+ let extractedMimeType;
147
+ if (contentResult._meta && typeof contentResult._meta === "object") {
148
+ const meta = contentResult._meta;
149
+ if (meta.mimeType && typeof meta.mimeType === "string") {
150
+ extractedMimeType = meta.mimeType;
151
+ }
152
+ }
153
+ if (contentResult.content && contentResult.content.length > 0) {
154
+ const firstContent = contentResult.content[0];
155
+ if (firstContent.type === "text" && "text" in firstContent) {
156
+ extractedText = firstContent.text;
157
+ }
158
+ }
159
+ const resourceContent2 = {
160
+ type: "resource",
161
+ resource: {
162
+ uri,
163
+ ...extractedMimeType && { mimeType: extractedMimeType },
164
+ ...extractedText && { text: extractedText }
165
+ }
166
+ };
167
+ return {
168
+ content: [resourceContent2]
169
+ };
170
+ }
171
+ const mimeType = mimeTypeOrContent;
67
172
  const resourceContent = {
68
173
  type: "resource",
69
174
  resource: {
@@ -338,7 +443,7 @@ function parseTemplateUri(template, uri) {
338
443
  const params = {};
339
444
  let regexPattern = template.replace(/[.*+?^$()[\]\\|]/g, "\\$&");
340
445
  const paramNames = [];
341
- regexPattern = regexPattern.replace(/\\\{([^}]+)\\\}/g, (_, paramName) => {
446
+ regexPattern = regexPattern.replace(/\{([^}]+)\}/g, (_, paramName) => {
342
447
  paramNames.push(paramName);
343
448
  return "([^/]+)";
344
449
  });
@@ -1794,6 +1899,154 @@ __name(toolRegistration, "toolRegistration");
1794
1899
 
1795
1900
  // src/server/resources/index.ts
1796
1901
  import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
1902
+
1903
+ // src/server/resources/subscriptions.ts
1904
+ import {
1905
+ SubscribeRequestSchema,
1906
+ UnsubscribeRequestSchema
1907
+ } from "@modelcontextprotocol/sdk/types.js";
1908
+ var ResourceSubscriptionManager = class {
1909
+ static {
1910
+ __name(this, "ResourceSubscriptionManager");
1911
+ }
1912
+ /**
1913
+ * Tracks resource subscriptions per session
1914
+ * Map structure: uri -> Set<sessionId>
1915
+ */
1916
+ subscriptions = /* @__PURE__ */ new Map();
1917
+ /**
1918
+ * Register subscription handlers with an MCP server instance
1919
+ *
1920
+ * @param server - The native MCP server instance
1921
+ * @param sessions - Map of active sessions
1922
+ */
1923
+ registerHandlers(server, sessions) {
1924
+ server.server.setRequestHandler(
1925
+ SubscribeRequestSchema,
1926
+ async (request) => {
1927
+ const { uri } = request.params;
1928
+ const sessionId = this.getSessionIdFromContext(sessions, server);
1929
+ if (!sessionId) {
1930
+ console.warn(
1931
+ `[MCP] Could not determine session ID for resource subscription to ${uri}`
1932
+ );
1933
+ return {};
1934
+ }
1935
+ if (!this.subscriptions.has(uri)) {
1936
+ this.subscriptions.set(uri, /* @__PURE__ */ new Set());
1937
+ }
1938
+ this.subscriptions.get(uri).add(sessionId);
1939
+ console.log(
1940
+ `[MCP] Session ${sessionId} subscribed to resource: ${uri}`
1941
+ );
1942
+ return {};
1943
+ }
1944
+ );
1945
+ server.server.setRequestHandler(
1946
+ UnsubscribeRequestSchema,
1947
+ async (request) => {
1948
+ const { uri } = request.params;
1949
+ const sessionId = this.getSessionIdFromContext(sessions, server);
1950
+ if (!sessionId) {
1951
+ console.warn(
1952
+ `[MCP] Could not determine session ID for resource unsubscribe from ${uri}`
1953
+ );
1954
+ return {};
1955
+ }
1956
+ const subscribers = this.subscriptions.get(uri);
1957
+ if (subscribers) {
1958
+ subscribers.delete(sessionId);
1959
+ if (subscribers.size === 0) {
1960
+ this.subscriptions.delete(uri);
1961
+ }
1962
+ console.log(
1963
+ `[MCP] Session ${sessionId} unsubscribed from resource: ${uri}`
1964
+ );
1965
+ }
1966
+ return {};
1967
+ }
1968
+ );
1969
+ }
1970
+ /**
1971
+ * Get session ID from request context or sessions map
1972
+ *
1973
+ * @param sessions - Map of active sessions
1974
+ * @param server - The server instance to match against
1975
+ * @returns The session ID, or undefined if not found
1976
+ */
1977
+ getSessionIdFromContext(sessions, server) {
1978
+ const requestContext = getRequestContext();
1979
+ let sessionId;
1980
+ if (requestContext) {
1981
+ sessionId = requestContext.req.header("mcp-session-id");
1982
+ }
1983
+ if (!sessionId) {
1984
+ for (const [sid, session] of sessions.entries()) {
1985
+ if (session.server === server) {
1986
+ sessionId = sid;
1987
+ break;
1988
+ }
1989
+ }
1990
+ }
1991
+ return sessionId;
1992
+ }
1993
+ /**
1994
+ * Notify subscribed clients that a resource has been updated
1995
+ *
1996
+ * This method sends a `notifications/resources/updated` notification to all
1997
+ * sessions that have subscribed to the specified resource URI.
1998
+ *
1999
+ * @param uri - The URI of the resource that changed
2000
+ * @param sessions - Map of active sessions
2001
+ * @returns Promise that resolves when all notifications have been sent
2002
+ */
2003
+ async notifyResourceUpdated(uri, sessions) {
2004
+ const subscribers = this.subscriptions.get(uri);
2005
+ if (!subscribers || subscribers.size === 0) {
2006
+ return;
2007
+ }
2008
+ console.log(
2009
+ `[MCP] Notifying ${subscribers.size} subscriber(s) of resource update: ${uri}`
2010
+ );
2011
+ for (const sessionId of subscribers) {
2012
+ const session = sessions.get(sessionId);
2013
+ if (session?.server) {
2014
+ try {
2015
+ await session.server.server.sendResourceUpdated({ uri });
2016
+ console.log(
2017
+ `[MCP] Sent resource update notification to session ${sessionId}`
2018
+ );
2019
+ } catch (error2) {
2020
+ console.error(
2021
+ `[MCP] Failed to send resource update notification to session ${sessionId}:`,
2022
+ error2
2023
+ );
2024
+ }
2025
+ }
2026
+ }
2027
+ }
2028
+ /**
2029
+ * Clean up resource subscriptions for a closed session
2030
+ *
2031
+ * This method is called automatically when a session is closed to remove
2032
+ * all resource subscriptions associated with that session.
2033
+ *
2034
+ * @param sessionId - The session ID to clean up
2035
+ */
2036
+ cleanupSession(sessionId) {
2037
+ for (const [uri, subscribers] of this.subscriptions) {
2038
+ subscribers.delete(sessionId);
2039
+ if (subscribers.size === 0) {
2040
+ this.subscriptions.delete(uri);
2041
+ }
2042
+ }
2043
+ console.log(
2044
+ `[MCP] Cleaned up resource subscriptions for session ${sessionId}`
2045
+ );
2046
+ }
2047
+ };
2048
+
2049
+ // src/server/resources/index.ts
1797
2050
  function registerResource(resourceDefinition, callback) {
1798
2051
  const actualCallback = callback || resourceDefinition.readCallback;
1799
2052
  if (!actualCallback) {
@@ -1803,8 +2056,8 @@ function registerResource(resourceDefinition, callback) {
1803
2056
  }
1804
2057
  const explicitMimeType = resourceDefinition.mimeType;
1805
2058
  const wrappedCallback = /* @__PURE__ */ __name(async () => {
1806
- const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-TXQ4DVSS.js");
1807
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-IVUDHXMK.js");
2059
+ const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2060
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-BQJTPWPN.js");
1808
2061
  const initialRequestContext = getRequestContext2();
1809
2062
  const sessions = this.sessions || /* @__PURE__ */ new Map();
1810
2063
  const { requestContext } = findSessionContext2(
@@ -1883,8 +2136,8 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
1883
2136
  resourceTemplateDefinition.resourceTemplate.uriTemplate,
1884
2137
  uri.toString()
1885
2138
  );
1886
- const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-TXQ4DVSS.js");
1887
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-IVUDHXMK.js");
2139
+ const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2140
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-BQJTPWPN.js");
1888
2141
  const initialRequestContext = getRequestContext2();
1889
2142
  const sessions = this.sessions || /* @__PURE__ */ new Map();
1890
2143
  const { requestContext } = findSessionContext2(
@@ -1928,12 +2181,14 @@ function registerPrompt(promptDefinition, callback) {
1928
2181
  argsSchema = this.convertZodSchemaToParams(
1929
2182
  promptDefinition.schema
1930
2183
  );
2184
+ } else if (promptDefinition.args && promptDefinition.args.length > 0) {
2185
+ argsSchema = this.createParamsSchema(promptDefinition.args);
1931
2186
  } else {
1932
- argsSchema = this.createParamsSchema(promptDefinition.args || []);
2187
+ argsSchema = void 0;
1933
2188
  }
1934
2189
  const wrappedCallback = /* @__PURE__ */ __name(async (params, extra) => {
1935
- const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-TXQ4DVSS.js");
1936
- const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-IVUDHXMK.js");
2190
+ const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
2191
+ const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-BQJTPWPN.js");
1937
2192
  const initialRequestContext = getRequestContext2();
1938
2193
  const sessions = this.sessions || /* @__PURE__ */ new Map();
1939
2194
  const { requestContext } = findSessionContext2(
@@ -2204,7 +2459,7 @@ async function sendNotificationToSession2(sessionId, method, params) {
2204
2459
  __name(sendNotificationToSession2, "sendNotificationToSession");
2205
2460
 
2206
2461
  // src/server/sessions/session-manager.ts
2207
- function startIdleCleanup(sessions, idleTimeoutMs) {
2462
+ function startIdleCleanup(sessions, idleTimeoutMs, mcpServerInstance) {
2208
2463
  if (idleTimeoutMs <= 0) {
2209
2464
  return void 0;
2210
2465
  }
@@ -2222,6 +2477,7 @@ function startIdleCleanup(sessions, idleTimeoutMs) {
2222
2477
  );
2223
2478
  for (const sessionId of expiredSessions) {
2224
2479
  sessions.delete(sessionId);
2480
+ mcpServerInstance?.cleanupSessionSubscriptions?.(sessionId);
2225
2481
  }
2226
2482
  }
2227
2483
  }, 6e4);
@@ -2235,7 +2491,11 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
2235
2491
  const transports = /* @__PURE__ */ new Map();
2236
2492
  let idleCleanupInterval;
2237
2493
  if (idleTimeoutMs > 0) {
2238
- idleCleanupInterval = startIdleCleanup(sessions, idleTimeoutMs);
2494
+ idleCleanupInterval = startIdleCleanup(
2495
+ sessions,
2496
+ idleTimeoutMs,
2497
+ mcpServerInstance
2498
+ );
2239
2499
  }
2240
2500
  const handleRequest = /* @__PURE__ */ __name(async (c) => {
2241
2501
  const sessionId = c.req.header("mcp-session-id");
@@ -2267,6 +2527,7 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
2267
2527
  console.log(`[MCP] Session closed: ${sid}`);
2268
2528
  transports.delete(sid);
2269
2529
  sessions.delete(sid);
2530
+ mcpServerInstance.cleanupSessionSubscriptions?.(sid);
2270
2531
  }, "onsessionclosed")
2271
2532
  });
2272
2533
  await server.connect(transport);
@@ -2602,6 +2863,22 @@ var McpServer = class {
2602
2863
  resources: /* @__PURE__ */ new Map(),
2603
2864
  resourceTemplates: /* @__PURE__ */ new Map()
2604
2865
  };
2866
+ /**
2867
+ * Resource subscription manager for tracking and notifying resource updates
2868
+ */
2869
+ subscriptionManager = new ResourceSubscriptionManager();
2870
+ /**
2871
+ * Clean up resource subscriptions for a closed session
2872
+ *
2873
+ * This method is called automatically when a session is closed to remove
2874
+ * all resource subscriptions associated with that session.
2875
+ *
2876
+ * @param sessionId - The session ID to clean up
2877
+ * @internal
2878
+ */
2879
+ cleanupSessionSubscriptions(sessionId) {
2880
+ this.subscriptionManager.cleanupSession(sessionId);
2881
+ }
2605
2882
  /**
2606
2883
  * Creates a new MCP server instance with Hono integration
2607
2884
  *
@@ -2616,10 +2893,21 @@ var McpServer = class {
2616
2893
  this.config = config;
2617
2894
  this.serverHost = config.host || "localhost";
2618
2895
  this.serverBaseUrl = config.baseUrl;
2619
- this.nativeServer = new OfficialMcpServer({
2620
- name: config.name,
2621
- version: config.version
2622
- });
2896
+ this.nativeServer = new OfficialMcpServer(
2897
+ {
2898
+ name: config.name,
2899
+ version: config.version
2900
+ },
2901
+ {
2902
+ capabilities: {
2903
+ logging: {},
2904
+ resources: {
2905
+ subscribe: true,
2906
+ listChanged: true
2907
+ }
2908
+ }
2909
+ }
2910
+ );
2623
2911
  this.app = createHonoApp(requestLogger);
2624
2912
  this.oauthConfig = config.oauth;
2625
2913
  this.wrapRegistrationMethods();
@@ -2674,10 +2962,17 @@ var McpServer = class {
2674
2962
  * This is called for each initialize request to create an isolated server.
2675
2963
  */
2676
2964
  getServerForSession() {
2677
- const newServer = new OfficialMcpServer({
2678
- name: this.config.name,
2679
- version: this.config.version
2680
- });
2965
+ const newServer = new OfficialMcpServer(
2966
+ {
2967
+ name: this.config.name,
2968
+ version: this.config.version
2969
+ },
2970
+ {
2971
+ capabilities: {
2972
+ logging: {}
2973
+ }
2974
+ }
2975
+ );
2681
2976
  for (const [name, recipe] of this.registrationRecipes.tools) {
2682
2977
  const { config, handler: actualCallback } = recipe;
2683
2978
  let inputSchema;
@@ -2692,7 +2987,7 @@ var McpServer = class {
2692
2987
  const initialRequestContext = getRequestContext();
2693
2988
  const extraProgressToken = extra?._meta?.progressToken;
2694
2989
  const extraSendNotification = extra?.sendNotification;
2695
- const { requestContext, progressToken, sendNotification: sendNotification2 } = findSessionContext(
2990
+ const { requestContext, session, progressToken, sendNotification: sendNotification2 } = findSessionContext(
2696
2991
  this.sessions,
2697
2992
  initialRequestContext,
2698
2993
  extraProgressToken,
@@ -2723,7 +3018,8 @@ var McpServer = class {
2723
3018
  createMessageWithLogging,
2724
3019
  newServer.server.elicitInput.bind(newServer.server),
2725
3020
  progressToken,
2726
- sendNotification2
3021
+ sendNotification2,
3022
+ session?.logLevel
2727
3023
  );
2728
3024
  const executeCallback = /* @__PURE__ */ __name(async () => {
2729
3025
  if (actualCallback.length >= 2) {
@@ -2753,8 +3049,10 @@ var McpServer = class {
2753
3049
  let argsSchema;
2754
3050
  if (config.schema) {
2755
3051
  argsSchema = this.convertZodSchemaToParams(config.schema);
3052
+ } else if (config.args && config.args.length > 0) {
3053
+ argsSchema = this.createParamsSchema(config.args);
2756
3054
  } else {
2757
- argsSchema = this.createParamsSchema(config.args || []);
3055
+ argsSchema = void 0;
2758
3056
  }
2759
3057
  const wrappedHandler = /* @__PURE__ */ __name(async (params) => {
2760
3058
  const result = await handler(params);
@@ -2835,6 +3133,50 @@ var McpServer = class {
2835
3133
  }
2836
3134
  );
2837
3135
  }
3136
+ newServer.server.setRequestHandler(
3137
+ z2.object({ method: z2.literal("logging/setLevel") }).passthrough(),
3138
+ async (request) => {
3139
+ const level = request.params?.level;
3140
+ if (!level) {
3141
+ throw new McpError(
3142
+ ErrorCode.InvalidParams,
3143
+ "Missing 'level' parameter"
3144
+ );
3145
+ }
3146
+ if (!isValidLogLevel(level)) {
3147
+ throw new McpError(
3148
+ ErrorCode.InvalidParams,
3149
+ `Invalid log level '${level}'. Must be one of: debug, info, notice, warning, error, critical, alert, emergency`
3150
+ );
3151
+ }
3152
+ const requestContext = getRequestContext();
3153
+ if (requestContext) {
3154
+ const sessionId = requestContext.req.header("mcp-session-id");
3155
+ if (sessionId && this.sessions.has(sessionId)) {
3156
+ const session = this.sessions.get(sessionId);
3157
+ session.logLevel = level;
3158
+ console.log(
3159
+ `[MCP] Set log level to '${level}' for session ${sessionId}`
3160
+ );
3161
+ return {};
3162
+ }
3163
+ }
3164
+ for (const [sessionId, session] of this.sessions.entries()) {
3165
+ if (session.server === newServer) {
3166
+ session.logLevel = level;
3167
+ console.log(
3168
+ `[MCP] Set log level to '${level}' for session ${sessionId}`
3169
+ );
3170
+ return {};
3171
+ }
3172
+ }
3173
+ console.warn(
3174
+ "[MCP] Could not find session for logging/setLevel request"
3175
+ );
3176
+ throw new McpError(ErrorCode.InternalError, "Could not find session");
3177
+ }
3178
+ );
3179
+ this.subscriptionManager.registerHandlers(newServer, this.sessions);
2838
3180
  return newServer;
2839
3181
  }
2840
3182
  /**
@@ -2864,6 +3206,24 @@ var McpServer = class {
2864
3206
  getActiveSessions = getActiveSessions;
2865
3207
  sendNotification = sendNotification;
2866
3208
  sendNotificationToSession = sendNotificationToSession2;
3209
+ /**
3210
+ * Notify subscribed clients that a resource has been updated
3211
+ *
3212
+ * This method sends a `notifications/resources/updated` notification to all
3213
+ * sessions that have subscribed to the specified resource URI.
3214
+ *
3215
+ * @param uri - The URI of the resource that changed
3216
+ * @returns Promise that resolves when all notifications have been sent
3217
+ *
3218
+ * @example
3219
+ * ```typescript
3220
+ * // After updating a resource, notify subscribers
3221
+ * await server.notifyResourceUpdated("file:///path/to/resource.txt");
3222
+ * ```
3223
+ */
3224
+ async notifyResourceUpdated(uri) {
3225
+ return this.subscriptionManager.notifyResourceUpdated(uri, this.sessions);
3226
+ }
2867
3227
  uiResource = uiResourceRegistration;
2868
3228
  /**
2869
3229
  * Mount MCP server endpoints at /mcp and /sse
@@ -2947,6 +3307,11 @@ var McpServer = class {
2947
3307
  if (hostEnv) {
2948
3308
  this.serverHost = hostEnv;
2949
3309
  }
3310
+ this.serverBaseUrl = getServerBaseUrl(
3311
+ this.serverBaseUrl,
3312
+ this.serverHost,
3313
+ this.serverPort
3314
+ );
2950
3315
  if (this.oauthConfig && !this.oauthSetupState.complete) {
2951
3316
  await setupOAuthForServer(
2952
3317
  this.app,
@@ -3677,6 +4042,7 @@ export {
3677
4042
  adaptConnectMiddleware,
3678
4043
  adaptMiddleware,
3679
4044
  array,
4045
+ audio,
3680
4046
  binary,
3681
4047
  buildWidgetUrl,
3682
4048
  createExternalUrlResource,
@@ -41,6 +41,20 @@ export declare class McpServer {
41
41
  * Following the official SDK pattern where each session gets its own server instance
42
42
  */
43
43
  private registrationRecipes;
44
+ /**
45
+ * Resource subscription manager for tracking and notifying resource updates
46
+ */
47
+ private subscriptionManager;
48
+ /**
49
+ * Clean up resource subscriptions for a closed session
50
+ *
51
+ * This method is called automatically when a session is closed to remove
52
+ * all resource subscriptions associated with that session.
53
+ *
54
+ * @param sessionId - The session ID to clean up
55
+ * @internal
56
+ */
57
+ cleanupSessionSubscriptions(sessionId: string): void;
44
58
  /**
45
59
  * Creates a new MCP server instance with Hono integration
46
60
  *
@@ -77,6 +91,22 @@ export declare class McpServer {
77
91
  getActiveSessions: typeof getActiveSessions;
78
92
  sendNotification: typeof sendNotification;
79
93
  sendNotificationToSession: typeof sendNotificationToSession;
94
+ /**
95
+ * Notify subscribed clients that a resource has been updated
96
+ *
97
+ * This method sends a `notifications/resources/updated` notification to all
98
+ * sessions that have subscribed to the specified resource URI.
99
+ *
100
+ * @param uri - The URI of the resource that changed
101
+ * @returns Promise that resolves when all notifications have been sent
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * // After updating a resource, notify subscribers
106
+ * await server.notifyResourceUpdated("file:///path/to/resource.txt");
107
+ * ```
108
+ */
109
+ notifyResourceUpdated(uri: string): Promise<void>;
80
110
  uiResource: any;
81
111
  /**
82
112
  * Mount MCP server endpoints at /mcp and /sse
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,gBAAgB,EAChB,+BAA+B,EAC/B,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QACN,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE;YACR,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,GAAG,CAAC;SACjB,EACD,iBAAiB,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,eAAe,CAAC,GAC3D,IAAI,CAAC;KACT,CAAC;IACF,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IACzC,wBAAwB,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,mBAAmB,EACzB,gBAAgB,EAAE,gBAAgB,GAAG,+BAA+B,EACpE,QAAQ,CAAC,EAAE,cAAc,GACxB,mBAAmB,CA8ErB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,gBAAgB,EAChB,+BAA+B,EAC/B,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QACN,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE;YACR,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,WAAW,EAAE,MAAM,CAAC;YACpB,UAAU,EAAE,GAAG,CAAC;SACjB,EACD,iBAAiB,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,eAAe,CAAC,GAC3D,IAAI,CAAC;KACT,CAAC;IACF,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,kBAAkB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IACzC,wBAAwB,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC;CAChD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,mBAAmB,EACzB,gBAAgB,EAAE,gBAAgB,GAAG,+BAA+B,EACpE,QAAQ,CAAC,EAAE,cAAc,GACxB,mBAAmB,CAiFrB"}
@@ -2,6 +2,7 @@ import type { ResourceDefinition, ReadResourceCallback, ReadResourceTemplateCall
2
2
  import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
  import type { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js";
4
4
  import type { ResourceTemplateDefinition } from "../types/index.js";
5
+ export { ResourceSubscriptionManager } from "./subscriptions.js";
5
6
  export interface ResourceServerContext {
6
7
  server: {
7
8
  registerResource(name: string, uri: string, metadata: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,4BAA4B,EAC5B,iCAAiC,EACjC,yCAAyC,EAC1C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAGpE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE;QACN,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE;YACR,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACjC,EACD,YAAY,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAC9C,IAAI,CAAC;KACT,CAAC;IACF,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,qBAAqB,EAC3B,kBAAkB,EAAE,kBAAkB,GAAG,iCAAiC,EAC1E,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,qBAAqB,CA+EvB;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE;QACN,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,GAAG,EACb,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GACvC,IAAI,CAAC;KACT,CAAC;IACF,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,6BAA6B,EACnC,0BAA0B,EACtB,0BAA0B,GAC1B,yCAAyC,EAC7C,QAAQ,CAAC,EAAE,4BAA4B,GACtC,6BAA6B,CAkG/B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,4BAA4B,EAC5B,iCAAiC,EACjC,yCAAyC,EAC1C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAIpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE;QACN,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE;YACR,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACjC,EACD,YAAY,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,GAC9C,IAAI,CAAC;KACT,CAAC;IACF,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,qBAAqB,EAC3B,kBAAkB,EAAE,kBAAkB,GAAG,iCAAiC,EAC1E,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,qBAAqB,CA+EvB;AAED,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE;QACN,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,GAAG,EACb,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GACvC,IAAI,CAAC;KACT,CAAC;IACF,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,6BAA6B,EACnC,0BAA0B,EACtB,0BAA0B,GAC1B,yCAAyC,EAC7C,QAAQ,CAAC,EAAE,4BAA4B,GACtC,6BAA6B,CAkG/B"}