mcp-use 1.9.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-2EYAMIT3.js +76 -0
- package/dist/chunk-33U4IA4N.js +337 -0
- package/dist/chunk-362PI25Z.js +110 -0
- package/dist/chunk-LWVK6RXA.js +30 -0
- package/dist/context-storage-NA4MHWOZ.js +13 -0
- package/dist/conversion-5MA4VY3B.js +7 -0
- package/dist/conversion-OTRZZBUU.js +7 -0
- 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/index.d.ts +7 -0
- package/dist/src/server/endpoints/index.d.ts.map +1 -0
- package/dist/src/server/endpoints/mount-mcp.d.ts +21 -0
- package/dist/src/server/endpoints/mount-mcp.d.ts.map +1 -0
- package/dist/src/server/index.cjs +4180 -3956
- package/dist/src/server/index.d.ts +4 -3
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +3590 -3040
- package/dist/src/server/inspector/index.d.ts +5 -0
- package/dist/src/server/inspector/index.d.ts.map +1 -0
- package/dist/src/server/inspector/mount.d.ts +33 -0
- package/dist/src/server/inspector/mount.d.ts.map +1 -0
- package/dist/src/server/logging.d.ts.map +1 -1
- package/dist/src/server/mcp-server.d.ts +91 -770
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/notifications/index.d.ts +7 -0
- package/dist/src/server/notifications/index.d.ts.map +1 -0
- package/dist/src/server/notifications/notification-registration.d.ts +82 -0
- package/dist/src/server/notifications/notification-registration.d.ts.map +1 -0
- package/dist/src/server/oauth/index.d.ts +1 -0
- package/dist/src/server/oauth/index.d.ts.map +1 -1
- package/dist/src/server/oauth/setup.d.ts +28 -0
- package/dist/src/server/oauth/setup.d.ts.map +1 -0
- package/dist/src/server/prompts/conversion.d.ts +22 -0
- package/dist/src/server/prompts/conversion.d.ts.map +1 -0
- package/dist/src/server/prompts/index.d.ts +60 -0
- package/dist/src/server/prompts/index.d.ts.map +1 -0
- package/dist/src/server/resources/conversion.d.ts +20 -0
- package/dist/src/server/resources/conversion.d.ts.map +1 -0
- package/dist/src/server/resources/index.d.ts +117 -0
- package/dist/src/server/resources/index.d.ts.map +1 -0
- 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/roots/index.d.ts +7 -0
- package/dist/src/server/roots/index.d.ts.map +1 -0
- package/dist/src/server/roots/roots-registration.d.ts +56 -0
- package/dist/src/server/roots/roots-registration.d.ts.map +1 -0
- package/dist/src/server/sessions/index.d.ts +6 -0
- package/dist/src/server/sessions/index.d.ts.map +1 -0
- package/dist/src/server/sessions/notifications.d.ts +25 -0
- package/dist/src/server/sessions/notifications.d.ts.map +1 -0
- package/dist/src/server/sessions/session-manager.d.ts +47 -0
- package/dist/src/server/sessions/session-manager.d.ts.map +1 -0
- package/dist/src/server/tools/index.d.ts +10 -0
- package/dist/src/server/tools/index.d.ts.map +1 -0
- package/dist/src/server/tools/schema-helpers.d.ts +54 -0
- package/dist/src/server/tools/schema-helpers.d.ts.map +1 -0
- package/dist/src/server/tools/tool-execution-helpers.d.ts +110 -0
- package/dist/src/server/tools/tool-execution-helpers.d.ts.map +1 -0
- package/dist/src/server/tools/tool-registration.d.ts +85 -0
- package/dist/src/server/tools/tool-registration.d.ts.map +1 -0
- package/dist/src/server/types/common.d.ts +24 -0
- package/dist/src/server/types/common.d.ts.map +1 -1
- package/dist/src/server/types/index.d.ts +5 -4
- package/dist/src/server/types/index.d.ts.map +1 -1
- package/dist/src/server/types/prompt.d.ts +61 -6
- package/dist/src/server/types/prompt.d.ts.map +1 -1
- package/dist/src/server/types/resource.d.ts +83 -8
- package/dist/src/server/types/resource.d.ts.map +1 -1
- package/dist/src/server/types/tool-context.d.ts +252 -0
- package/dist/src/server/types/tool-context.d.ts.map +1 -0
- package/dist/src/server/types/tool.d.ts +62 -5
- package/dist/src/server/types/tool.d.ts.map +1 -1
- package/dist/src/server/utils/hono-proxy.d.ts +21 -0
- package/dist/src/server/utils/hono-proxy.d.ts.map +1 -0
- package/dist/src/server/utils/index.d.ts +3 -0
- package/dist/src/server/utils/index.d.ts.map +1 -1
- package/dist/src/server/utils/jsonrpc-helpers.d.ts +94 -0
- package/dist/src/server/utils/jsonrpc-helpers.d.ts.map +1 -0
- package/dist/src/server/utils/response-helpers.d.ts +163 -7
- package/dist/src/server/utils/response-helpers.d.ts.map +1 -1
- package/dist/src/server/utils/server-helpers.d.ts +78 -0
- package/dist/src/server/utils/server-helpers.d.ts.map +1 -0
- package/dist/src/server/utils/server-lifecycle.d.ts +52 -0
- package/dist/src/server/utils/server-lifecycle.d.ts.map +1 -0
- package/dist/src/server/utils/session-helpers.d.ts +55 -0
- package/dist/src/server/utils/session-helpers.d.ts.map +1 -0
- package/dist/src/server/widgets/index.d.ts +30 -0
- package/dist/src/server/widgets/index.d.ts.map +1 -0
- package/dist/src/server/widgets/mcp-ui-adapter.d.ts.map +1 -0
- package/dist/src/server/widgets/mount-widgets-dev.d.ts +28 -0
- package/dist/src/server/widgets/mount-widgets-dev.d.ts.map +1 -0
- package/dist/src/server/widgets/mount-widgets-production.d.ts +27 -0
- package/dist/src/server/widgets/mount-widgets-production.d.ts.map +1 -0
- package/dist/src/server/widgets/setup-widget-routes.d.ts +23 -0
- package/dist/src/server/widgets/setup-widget-routes.d.ts.map +1 -0
- package/dist/src/server/widgets/ui-resource-registration.d.ts +75 -0
- package/dist/src/server/widgets/ui-resource-registration.d.ts.map +1 -0
- package/dist/src/server/widgets/widget-helpers.d.ts +277 -0
- package/dist/src/server/widgets/widget-helpers.d.ts.map +1 -0
- package/dist/src/server/widgets/widget-types.d.ts +49 -0
- package/dist/src/server/widgets/widget-types.d.ts.map +1 -0
- package/dist/tool-execution-helpers-BQJTPWPN.js +29 -0
- package/package.json +6 -5
- package/dist/chunk-F4UHAA5L.js +0 -854
- package/dist/oauth-U4NNKN4B.js +0 -30
- package/dist/src/server/adapters/mcp-ui-adapter.d.ts.map +0 -1
- /package/dist/src/server/{adapters → widgets}/mcp-ui-adapter.d.ts +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./chunk-3GQAWCBQ.js";
|
|
4
|
+
|
|
5
|
+
// src/server/prompts/conversion.ts
|
|
6
|
+
function isGetPromptResult(result) {
|
|
7
|
+
return "messages" in result && Array.isArray(result.messages);
|
|
8
|
+
}
|
|
9
|
+
__name(isGetPromptResult, "isGetPromptResult");
|
|
10
|
+
function convertToolResultToPromptResult(result) {
|
|
11
|
+
if (isGetPromptResult(result)) {
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
const messages = [];
|
|
15
|
+
if (result.content && result.content.length > 0) {
|
|
16
|
+
for (const content of result.content) {
|
|
17
|
+
if (content.type === "text") {
|
|
18
|
+
const textContent = content;
|
|
19
|
+
messages.push({
|
|
20
|
+
role: "user",
|
|
21
|
+
content: {
|
|
22
|
+
type: "text",
|
|
23
|
+
text: textContent.text
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
} else if (content.type === "image") {
|
|
27
|
+
const imageContent = content;
|
|
28
|
+
messages.push({
|
|
29
|
+
role: "user",
|
|
30
|
+
content: {
|
|
31
|
+
type: "image",
|
|
32
|
+
data: imageContent.data,
|
|
33
|
+
mimeType: imageContent.mimeType || "image/png"
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
} else if (content.type === "resource") {
|
|
37
|
+
const resourceContent = content;
|
|
38
|
+
const resourceData = resourceContent.resource;
|
|
39
|
+
const embeddedResource = {
|
|
40
|
+
type: "resource",
|
|
41
|
+
resource: {
|
|
42
|
+
uri: resourceData.uri,
|
|
43
|
+
mimeType: resourceData.mimeType
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
if (resourceData.text) {
|
|
47
|
+
embeddedResource.resource.text = resourceData.text;
|
|
48
|
+
} else if (resourceData.blob) {
|
|
49
|
+
embeddedResource.resource.blob = resourceData.blob;
|
|
50
|
+
}
|
|
51
|
+
messages.push({
|
|
52
|
+
role: "user",
|
|
53
|
+
content: embeddedResource
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (messages.length === 0) {
|
|
59
|
+
messages.push({
|
|
60
|
+
role: "user",
|
|
61
|
+
content: {
|
|
62
|
+
type: "text",
|
|
63
|
+
text: ""
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
messages,
|
|
69
|
+
description: result._meta?.description
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
__name(convertToolResultToPromptResult, "convertToolResultToPromptResult");
|
|
73
|
+
|
|
74
|
+
export {
|
|
75
|
+
convertToolResultToPromptResult
|
|
76
|
+
};
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ElicitationValidationError
|
|
3
|
+
} from "./chunk-KUEVOU4M.js";
|
|
4
|
+
import {
|
|
5
|
+
generateUUID
|
|
6
|
+
} from "./chunk-MTHLLDCX.js";
|
|
7
|
+
import {
|
|
8
|
+
__name
|
|
9
|
+
} from "./chunk-3GQAWCBQ.js";
|
|
10
|
+
|
|
11
|
+
// src/server/tools/tool-execution-helpers.ts
|
|
12
|
+
import { toJsonSchemaCompat } from "@modelcontextprotocol/sdk/server/zod-json-schema-compat.js";
|
|
13
|
+
function findSessionContext(sessions, initialRequestContext, extraProgressToken, extraSendNotification) {
|
|
14
|
+
let requestContext = initialRequestContext;
|
|
15
|
+
let session;
|
|
16
|
+
let progressToken = extraProgressToken;
|
|
17
|
+
let sendNotification = extraSendNotification;
|
|
18
|
+
if (!requestContext) {
|
|
19
|
+
for (const [, s] of sessions.entries()) {
|
|
20
|
+
if (s.context) {
|
|
21
|
+
requestContext = s.context;
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (!progressToken || !sendNotification) {
|
|
27
|
+
if (requestContext) {
|
|
28
|
+
for (const [, s] of sessions.entries()) {
|
|
29
|
+
if (s.context === requestContext) {
|
|
30
|
+
session = s;
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
const firstSession = sessions.values().next().value;
|
|
36
|
+
if (firstSession) {
|
|
37
|
+
session = firstSession;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (session) {
|
|
41
|
+
if (!progressToken && session.progressToken) {
|
|
42
|
+
progressToken = session.progressToken;
|
|
43
|
+
}
|
|
44
|
+
if (!sendNotification && session.sendNotification) {
|
|
45
|
+
sendNotification = session.sendNotification;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { requestContext, session, progressToken, sendNotification };
|
|
50
|
+
}
|
|
51
|
+
__name(findSessionContext, "findSessionContext");
|
|
52
|
+
async function sendProgressNotification(sendNotification, progressToken, progress, total, message) {
|
|
53
|
+
if (sendNotification && progressToken !== void 0) {
|
|
54
|
+
try {
|
|
55
|
+
await sendNotification({
|
|
56
|
+
method: "notifications/progress",
|
|
57
|
+
params: {
|
|
58
|
+
progressToken,
|
|
59
|
+
progress,
|
|
60
|
+
total,
|
|
61
|
+
message
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
} catch {
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
__name(sendProgressNotification, "sendProgressNotification");
|
|
69
|
+
async function withTimeout(promise, timeout, errorMessage) {
|
|
70
|
+
if (timeout && timeout !== Infinity) {
|
|
71
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
72
|
+
setTimeout(() => reject(new Error(errorMessage)), timeout);
|
|
73
|
+
});
|
|
74
|
+
return await Promise.race([promise, timeoutPromise]);
|
|
75
|
+
}
|
|
76
|
+
return await promise;
|
|
77
|
+
}
|
|
78
|
+
__name(withTimeout, "withTimeout");
|
|
79
|
+
function parseElicitParams(messageOrParams, schemaOrUrlOrOptions, maybeOptions) {
|
|
80
|
+
let sdkParams;
|
|
81
|
+
let zodSchema = null;
|
|
82
|
+
let options;
|
|
83
|
+
if (typeof messageOrParams === "string") {
|
|
84
|
+
const message = messageOrParams;
|
|
85
|
+
if (typeof schemaOrUrlOrOptions === "string") {
|
|
86
|
+
options = maybeOptions;
|
|
87
|
+
const elicitationId = `elicit-${generateUUID()}`;
|
|
88
|
+
sdkParams = {
|
|
89
|
+
mode: "url",
|
|
90
|
+
message,
|
|
91
|
+
url: schemaOrUrlOrOptions,
|
|
92
|
+
elicitationId
|
|
93
|
+
};
|
|
94
|
+
} else if (schemaOrUrlOrOptions && typeof schemaOrUrlOrOptions === "object" && "_def" in schemaOrUrlOrOptions) {
|
|
95
|
+
options = maybeOptions;
|
|
96
|
+
zodSchema = schemaOrUrlOrOptions;
|
|
97
|
+
const jsonSchema = toJsonSchemaCompat(schemaOrUrlOrOptions);
|
|
98
|
+
sdkParams = {
|
|
99
|
+
mode: "form",
|
|
100
|
+
message,
|
|
101
|
+
requestedSchema: jsonSchema
|
|
102
|
+
};
|
|
103
|
+
} else {
|
|
104
|
+
throw new Error(
|
|
105
|
+
"Invalid elicit signature: second parameter must be a Zod schema or URL string"
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
options = schemaOrUrlOrOptions;
|
|
110
|
+
const params = messageOrParams;
|
|
111
|
+
if (params.mode === "url") {
|
|
112
|
+
const elicitationId = `elicit-${generateUUID()}`;
|
|
113
|
+
sdkParams = {
|
|
114
|
+
mode: "url",
|
|
115
|
+
message: params.message,
|
|
116
|
+
url: params.url,
|
|
117
|
+
elicitationId
|
|
118
|
+
};
|
|
119
|
+
} else {
|
|
120
|
+
sdkParams = {
|
|
121
|
+
mode: "form",
|
|
122
|
+
message: params.message,
|
|
123
|
+
requestedSchema: params.requestedSchema
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return { sdkParams, zodSchema, options };
|
|
128
|
+
}
|
|
129
|
+
__name(parseElicitParams, "parseElicitParams");
|
|
130
|
+
function createSampleMethod(createMessage, progressToken, sendNotification) {
|
|
131
|
+
return async (promptOrParams, options) => {
|
|
132
|
+
let sampleParams;
|
|
133
|
+
if (typeof promptOrParams === "string") {
|
|
134
|
+
sampleParams = {
|
|
135
|
+
messages: [
|
|
136
|
+
{
|
|
137
|
+
role: "user",
|
|
138
|
+
content: {
|
|
139
|
+
type: "text",
|
|
140
|
+
text: promptOrParams
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
],
|
|
144
|
+
maxTokens: options?.maxTokens || 1e3,
|
|
145
|
+
...options?.modelPreferences && {
|
|
146
|
+
modelPreferences: options.modelPreferences
|
|
147
|
+
},
|
|
148
|
+
...options?.systemPrompt && { systemPrompt: options.systemPrompt },
|
|
149
|
+
...options?.temperature !== void 0 && {
|
|
150
|
+
temperature: options.temperature
|
|
151
|
+
},
|
|
152
|
+
...options?.stopSequences && { stopSequences: options.stopSequences },
|
|
153
|
+
...options?.metadata && { metadata: options.metadata }
|
|
154
|
+
};
|
|
155
|
+
} else {
|
|
156
|
+
sampleParams = promptOrParams;
|
|
157
|
+
}
|
|
158
|
+
const { timeout, progressIntervalMs = 5e3, onProgress } = options ?? {};
|
|
159
|
+
let progressCount = 0;
|
|
160
|
+
let completed = false;
|
|
161
|
+
let progressInterval = null;
|
|
162
|
+
if (progressToken !== void 0 && sendNotification) {
|
|
163
|
+
progressInterval = setInterval(async () => {
|
|
164
|
+
if (completed) return;
|
|
165
|
+
progressCount++;
|
|
166
|
+
const progressData = {
|
|
167
|
+
progress: progressCount,
|
|
168
|
+
total: void 0,
|
|
169
|
+
message: `Waiting for LLM response... (${progressCount * Math.round(progressIntervalMs / 1e3)}s elapsed)`
|
|
170
|
+
};
|
|
171
|
+
if (onProgress) {
|
|
172
|
+
try {
|
|
173
|
+
onProgress(progressData);
|
|
174
|
+
} catch {
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
await sendProgressNotification(
|
|
178
|
+
sendNotification,
|
|
179
|
+
progressToken,
|
|
180
|
+
progressData.progress,
|
|
181
|
+
progressData.total,
|
|
182
|
+
progressData.message
|
|
183
|
+
);
|
|
184
|
+
}, progressIntervalMs);
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
console.log("[SAMPLING DEBUG] Calling createMessage...");
|
|
188
|
+
const sdkTimeout = timeout && timeout !== Infinity ? timeout : 2147483647;
|
|
189
|
+
const samplePromise = createMessage(sampleParams, {
|
|
190
|
+
timeout: sdkTimeout
|
|
191
|
+
});
|
|
192
|
+
console.log("[SAMPLING DEBUG] Waiting for response...");
|
|
193
|
+
const result = await withTimeout(
|
|
194
|
+
samplePromise,
|
|
195
|
+
timeout,
|
|
196
|
+
`Sampling timed out after ${timeout}ms`
|
|
197
|
+
);
|
|
198
|
+
console.log("[SAMPLING DEBUG] Got result:", result);
|
|
199
|
+
return result;
|
|
200
|
+
} catch (error) {
|
|
201
|
+
console.error("[SAMPLING DEBUG] Error during sampling:", error);
|
|
202
|
+
throw error;
|
|
203
|
+
} finally {
|
|
204
|
+
completed = true;
|
|
205
|
+
if (progressInterval) {
|
|
206
|
+
clearInterval(progressInterval);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
__name(createSampleMethod, "createSampleMethod");
|
|
212
|
+
function createElicitMethod(elicitInput) {
|
|
213
|
+
return async (messageOrParams, schemaOrUrlOrOptions, maybeOptions) => {
|
|
214
|
+
const { sdkParams, zodSchema, options } = parseElicitParams(
|
|
215
|
+
messageOrParams,
|
|
216
|
+
schemaOrUrlOrOptions,
|
|
217
|
+
maybeOptions
|
|
218
|
+
);
|
|
219
|
+
const { timeout } = options ?? {};
|
|
220
|
+
const sdkTimeout = timeout && timeout !== Infinity ? timeout : 2147483647;
|
|
221
|
+
const result = await elicitInput(sdkParams, { timeout: sdkTimeout });
|
|
222
|
+
if (zodSchema && result.action === "accept" && result.data) {
|
|
223
|
+
try {
|
|
224
|
+
const validatedData = zodSchema.parse(result.data);
|
|
225
|
+
return {
|
|
226
|
+
...result,
|
|
227
|
+
data: validatedData
|
|
228
|
+
};
|
|
229
|
+
} catch (error) {
|
|
230
|
+
throw new ElicitationValidationError(
|
|
231
|
+
`Elicitation data validation failed: ${error.message}`,
|
|
232
|
+
error
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return result;
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
__name(createElicitMethod, "createElicitMethod");
|
|
240
|
+
function createReportProgressMethod(progressToken, sendNotification) {
|
|
241
|
+
if (progressToken !== void 0 && sendNotification) {
|
|
242
|
+
return async (progress, total, message) => {
|
|
243
|
+
await sendProgressNotification(
|
|
244
|
+
sendNotification,
|
|
245
|
+
progressToken,
|
|
246
|
+
progress,
|
|
247
|
+
total,
|
|
248
|
+
message
|
|
249
|
+
);
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
return void 0;
|
|
253
|
+
}
|
|
254
|
+
__name(createReportProgressMethod, "createReportProgressMethod");
|
|
255
|
+
var LOG_LEVELS = {
|
|
256
|
+
debug: 0,
|
|
257
|
+
info: 1,
|
|
258
|
+
notice: 2,
|
|
259
|
+
warning: 3,
|
|
260
|
+
error: 4,
|
|
261
|
+
critical: 5,
|
|
262
|
+
alert: 6,
|
|
263
|
+
emergency: 7
|
|
264
|
+
};
|
|
265
|
+
var VALID_LOG_LEVELS = [
|
|
266
|
+
"debug",
|
|
267
|
+
"info",
|
|
268
|
+
"notice",
|
|
269
|
+
"warning",
|
|
270
|
+
"error",
|
|
271
|
+
"critical",
|
|
272
|
+
"alert",
|
|
273
|
+
"emergency"
|
|
274
|
+
];
|
|
275
|
+
function isValidLogLevel(level) {
|
|
276
|
+
return VALID_LOG_LEVELS.includes(level);
|
|
277
|
+
}
|
|
278
|
+
__name(isValidLogLevel, "isValidLogLevel");
|
|
279
|
+
function shouldLogMessage(messageLevel, minLevel) {
|
|
280
|
+
if (!minLevel) {
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
if (!isValidLogLevel(messageLevel) || !isValidLogLevel(minLevel)) {
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
return LOG_LEVELS[messageLevel] >= LOG_LEVELS[minLevel];
|
|
287
|
+
}
|
|
288
|
+
__name(shouldLogMessage, "shouldLogMessage");
|
|
289
|
+
function createLogMethod(sendNotification, minLogLevel) {
|
|
290
|
+
if (!sendNotification) {
|
|
291
|
+
return void 0;
|
|
292
|
+
}
|
|
293
|
+
return async (level, message, logger) => {
|
|
294
|
+
if (!shouldLogMessage(level, minLogLevel)) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
await sendNotification({
|
|
298
|
+
method: "notifications/message",
|
|
299
|
+
params: {
|
|
300
|
+
level,
|
|
301
|
+
data: message,
|
|
302
|
+
logger: logger || "tool"
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
__name(createLogMethod, "createLogMethod");
|
|
308
|
+
function createEnhancedContext(baseContext, createMessage, elicitInput, progressToken, sendNotification, minLogLevel) {
|
|
309
|
+
const enhancedContext = baseContext ? Object.create(baseContext) : {};
|
|
310
|
+
enhancedContext.sample = createSampleMethod(
|
|
311
|
+
createMessage,
|
|
312
|
+
progressToken,
|
|
313
|
+
sendNotification
|
|
314
|
+
);
|
|
315
|
+
enhancedContext.elicit = createElicitMethod(elicitInput);
|
|
316
|
+
enhancedContext.reportProgress = createReportProgressMethod(
|
|
317
|
+
progressToken,
|
|
318
|
+
sendNotification
|
|
319
|
+
);
|
|
320
|
+
enhancedContext.log = createLogMethod(sendNotification, minLogLevel);
|
|
321
|
+
return enhancedContext;
|
|
322
|
+
}
|
|
323
|
+
__name(createEnhancedContext, "createEnhancedContext");
|
|
324
|
+
|
|
325
|
+
export {
|
|
326
|
+
findSessionContext,
|
|
327
|
+
sendProgressNotification,
|
|
328
|
+
withTimeout,
|
|
329
|
+
parseElicitParams,
|
|
330
|
+
createSampleMethod,
|
|
331
|
+
createElicitMethod,
|
|
332
|
+
createReportProgressMethod,
|
|
333
|
+
VALID_LOG_LEVELS,
|
|
334
|
+
isValidLogLevel,
|
|
335
|
+
shouldLogMessage,
|
|
336
|
+
createEnhancedContext
|
|
337
|
+
};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./chunk-3GQAWCBQ.js";
|
|
4
|
+
|
|
5
|
+
// src/server/resources/conversion.ts
|
|
6
|
+
function isReadResourceResult(result) {
|
|
7
|
+
return "contents" in result && Array.isArray(result.contents);
|
|
8
|
+
}
|
|
9
|
+
__name(isReadResourceResult, "isReadResourceResult");
|
|
10
|
+
function extractMimeType(result) {
|
|
11
|
+
if (result._meta && typeof result._meta === "object") {
|
|
12
|
+
const meta = result._meta;
|
|
13
|
+
if (meta.mimeType && typeof meta.mimeType === "string") {
|
|
14
|
+
return meta.mimeType;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (result.content && result.content.length > 0) {
|
|
18
|
+
const firstContent = result.content[0];
|
|
19
|
+
if (firstContent.type === "image") {
|
|
20
|
+
return firstContent.mimeType || "image/png";
|
|
21
|
+
}
|
|
22
|
+
if (firstContent.type === "text") {
|
|
23
|
+
return "text/plain";
|
|
24
|
+
}
|
|
25
|
+
if (firstContent.type === "resource") {
|
|
26
|
+
const resourceData = firstContent.resource;
|
|
27
|
+
return resourceData?.mimeType || "application/octet-stream";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return "text/plain";
|
|
31
|
+
}
|
|
32
|
+
__name(extractMimeType, "extractMimeType");
|
|
33
|
+
function isBinaryContent(result) {
|
|
34
|
+
if (result._meta && typeof result._meta === "object") {
|
|
35
|
+
const meta = result._meta;
|
|
36
|
+
return meta.isBinary === true || meta.isImage === true;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
__name(isBinaryContent, "isBinaryContent");
|
|
41
|
+
function convertToolResultToResourceResult(uri, result) {
|
|
42
|
+
if (isReadResourceResult(result)) {
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
const mimeType = extractMimeType(result);
|
|
46
|
+
const isBinary = isBinaryContent(result);
|
|
47
|
+
const contents = [];
|
|
48
|
+
if (result.content && result.content.length > 0) {
|
|
49
|
+
for (const content of result.content) {
|
|
50
|
+
if (content.type === "text") {
|
|
51
|
+
const textContent = content;
|
|
52
|
+
if (isBinary) {
|
|
53
|
+
contents.push({
|
|
54
|
+
uri,
|
|
55
|
+
mimeType,
|
|
56
|
+
blob: textContent.text
|
|
57
|
+
});
|
|
58
|
+
} else {
|
|
59
|
+
contents.push({
|
|
60
|
+
uri,
|
|
61
|
+
mimeType,
|
|
62
|
+
text: textContent.text
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
} else if (content.type === "image") {
|
|
66
|
+
const imageContent = content;
|
|
67
|
+
contents.push({
|
|
68
|
+
uri,
|
|
69
|
+
mimeType: imageContent.mimeType || mimeType,
|
|
70
|
+
blob: imageContent.data
|
|
71
|
+
});
|
|
72
|
+
} else if (content.type === "resource") {
|
|
73
|
+
const resourceContent = content;
|
|
74
|
+
const resourceData = resourceContent.resource;
|
|
75
|
+
if (resourceData.text !== void 0) {
|
|
76
|
+
contents.push({
|
|
77
|
+
uri: resourceData.uri,
|
|
78
|
+
mimeType: resourceData.mimeType || mimeType,
|
|
79
|
+
text: resourceData.text
|
|
80
|
+
});
|
|
81
|
+
} else if (resourceData.blob !== void 0) {
|
|
82
|
+
contents.push({
|
|
83
|
+
uri: resourceData.uri,
|
|
84
|
+
mimeType: resourceData.mimeType || mimeType,
|
|
85
|
+
blob: resourceData.blob
|
|
86
|
+
});
|
|
87
|
+
} else {
|
|
88
|
+
contents.push({
|
|
89
|
+
uri: resourceData.uri,
|
|
90
|
+
mimeType: resourceData.mimeType || mimeType,
|
|
91
|
+
text: ""
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (contents.length === 0) {
|
|
98
|
+
contents.push({
|
|
99
|
+
uri,
|
|
100
|
+
mimeType: "text/plain",
|
|
101
|
+
text: ""
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return { contents };
|
|
105
|
+
}
|
|
106
|
+
__name(convertToolResultToResourceResult, "convertToolResultToResourceResult");
|
|
107
|
+
|
|
108
|
+
export {
|
|
109
|
+
convertToolResultToResourceResult
|
|
110
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./chunk-3GQAWCBQ.js";
|
|
4
|
+
|
|
5
|
+
// src/server/context-storage.ts
|
|
6
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
7
|
+
var requestContextStorage = new AsyncLocalStorage();
|
|
8
|
+
async function runWithContext(context, fn, sessionId) {
|
|
9
|
+
return requestContextStorage.run({ honoContext: context, sessionId }, fn);
|
|
10
|
+
}
|
|
11
|
+
__name(runWithContext, "runWithContext");
|
|
12
|
+
function getRequestContext() {
|
|
13
|
+
return requestContextStorage.getStore()?.honoContext;
|
|
14
|
+
}
|
|
15
|
+
__name(getRequestContext, "getRequestContext");
|
|
16
|
+
function getSessionId() {
|
|
17
|
+
return requestContextStorage.getStore()?.sessionId;
|
|
18
|
+
}
|
|
19
|
+
__name(getSessionId, "getSessionId");
|
|
20
|
+
function hasRequestContext() {
|
|
21
|
+
return requestContextStorage.getStore() !== void 0;
|
|
22
|
+
}
|
|
23
|
+
__name(hasRequestContext, "hasRequestContext");
|
|
24
|
+
|
|
25
|
+
export {
|
|
26
|
+
runWithContext,
|
|
27
|
+
getRequestContext,
|
|
28
|
+
getSessionId,
|
|
29
|
+
hasRequestContext
|
|
30
|
+
};
|
|
@@ -15,6 +15,7 @@ import type { Context } from "hono";
|
|
|
15
15
|
*
|
|
16
16
|
* @param context - Hono Context object to store
|
|
17
17
|
* @param fn - Function to execute within this context
|
|
18
|
+
* @param sessionId - Optional session ID to store with the context
|
|
18
19
|
* @returns Promise resolving to the function's return value
|
|
19
20
|
*
|
|
20
21
|
* @example
|
|
@@ -28,7 +29,7 @@ import type { Context } from "hono";
|
|
|
28
29
|
* });
|
|
29
30
|
* ```
|
|
30
31
|
*/
|
|
31
|
-
export declare function runWithContext<T>(context: Context, fn: () => Promise<T
|
|
32
|
+
export declare function runWithContext<T>(context: Context, fn: () => Promise<T>, sessionId?: string): Promise<T>;
|
|
32
33
|
/**
|
|
33
34
|
* Get the current request context from AsyncLocalStorage
|
|
34
35
|
*
|
|
@@ -45,6 +46,12 @@ export declare function runWithContext<T>(context: Context, fn: () => Promise<T>
|
|
|
45
46
|
* ```
|
|
46
47
|
*/
|
|
47
48
|
export declare function getRequestContext(): Context | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* Get the current session ID from AsyncLocalStorage
|
|
51
|
+
*
|
|
52
|
+
* @returns The session ID for the current async operation, or undefined if not in a request context
|
|
53
|
+
*/
|
|
54
|
+
export declare function getSessionId(): string | undefined;
|
|
48
55
|
/**
|
|
49
56
|
* Check if currently executing within a request context
|
|
50
57
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../../src/server/context-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"context-storage.d.ts","sourceRoot":"","sources":["../../../src/server/context-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAgBpC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,GAAG,SAAS,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/endpoints/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Endpoint Mounting
|
|
3
|
+
*
|
|
4
|
+
* Main orchestration function for mounting MCP endpoints at /mcp and /sse.
|
|
5
|
+
* Uses a single native SDK transport instance to handle all sessions.
|
|
6
|
+
*/
|
|
7
|
+
import type { Hono as HonoType } from "hono";
|
|
8
|
+
import type { SessionData } from "../sessions/index.js";
|
|
9
|
+
import type { ServerConfig } from "../types/index.js";
|
|
10
|
+
/**
|
|
11
|
+
* Mount MCP server endpoints at /mcp and /sse
|
|
12
|
+
*
|
|
13
|
+
* Uses FetchStreamableHTTPServerTransport (Web Standard APIs) for proper bidirectional communication.
|
|
14
|
+
* Follows the official Hono example from PR #1209.
|
|
15
|
+
*/
|
|
16
|
+
export declare function mountMcp(app: HonoType, mcpServerInstance: any, // The McpServer instance with getServerForSession() method
|
|
17
|
+
sessions: Map<string, SessionData>, config: ServerConfig, isProductionMode: boolean): Promise<{
|
|
18
|
+
mcpMounted: boolean;
|
|
19
|
+
idleCleanupInterval?: NodeJS.Timeout;
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=mount-mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mount-mcp.d.ts","sourceRoot":"","sources":["../../../../src/server/endpoints/mount-mcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,QAAQ,EACb,iBAAiB,EAAE,GAAG,EAAE,2DAA2D;AACnF,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;CAAE,CAAC,CAkFxE"}
|