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