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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/{chunk-KHTTBIRP.js → chunk-33U4IA4N.js} +58 -1
- package/dist/{chunk-5URNFWCQ.js → chunk-LWVK6RXA.js} +8 -3
- package/dist/{context-storage-TXQ4DVSS.js → context-storage-NA4MHWOZ.js} +3 -1
- package/dist/src/server/context-storage.d.ts +8 -1
- package/dist/src/server/context-storage.d.ts.map +1 -1
- package/dist/src/server/endpoints/mount-mcp.d.ts.map +1 -1
- package/dist/src/server/index.cjs +447 -21
- package/dist/src/server/index.d.ts +1 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +391 -25
- package/dist/src/server/mcp-server.d.ts +30 -0
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/prompts/index.d.ts.map +1 -1
- package/dist/src/server/resources/index.d.ts +1 -0
- package/dist/src/server/resources/index.d.ts.map +1 -1
- package/dist/src/server/resources/subscriptions.d.ts +54 -0
- package/dist/src/server/resources/subscriptions.d.ts.map +1 -0
- package/dist/src/server/sessions/session-manager.d.ts +7 -1
- package/dist/src/server/sessions/session-manager.d.ts.map +1 -1
- package/dist/src/server/tools/tool-execution-helpers.d.ts +30 -17
- package/dist/src/server/tools/tool-execution-helpers.d.ts.map +1 -1
- package/dist/src/server/types/tool-context.d.ts +16 -0
- package/dist/src/server/types/tool-context.d.ts.map +1 -1
- package/dist/src/server/utils/response-helpers.d.ts +48 -4
- package/dist/src/server/utils/response-helpers.d.ts.map +1 -1
- package/dist/{tool-execution-helpers-IVUDHXMK.js → tool-execution-helpers-BQJTPWPN.js} +7 -1
- package/package.json +3 -3
package/dist/src/server/index.js
CHANGED
|
@@ -2,11 +2,12 @@ import {
|
|
|
2
2
|
getRequestContext,
|
|
3
3
|
hasRequestContext,
|
|
4
4
|
runWithContext
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-LWVK6RXA.js";
|
|
6
6
|
import {
|
|
7
7
|
createEnhancedContext,
|
|
8
|
-
findSessionContext
|
|
9
|
-
|
|
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
|
|
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(
|
|
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-
|
|
1807
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
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-
|
|
1887
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
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 =
|
|
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-
|
|
1936
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
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(
|
|
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
|
-
|
|
2621
|
-
|
|
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
|
-
|
|
2679
|
-
|
|
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 =
|
|
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":"AAAA,OAAO,EACL,SAAS,IAAI,iBAAiB,EAE/B,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,oCAAoC,CAAC;
|
|
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,
|
|
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;
|
|
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"}
|