mcp-use 1.10.0-canary.3 → 1.10.0-canary.4
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/index.js +5 -5
- package/dist/src/browser.js +4 -4
- package/dist/src/react/index.js +2 -2
- package/dist/src/server/index.cjs +133 -101
- package/dist/src/server/index.js +133 -101
- package/dist/src/server/mcp-server.d.ts +27 -13
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/types/resource.d.ts +5 -0
- package/dist/src/server/types/resource.d.ts.map +1 -1
- package/dist/src/server/types/tool.d.ts +41 -0
- package/dist/src/server/types/tool.d.ts.map +1 -1
- package/dist/src/server/types/widget.d.ts +11 -2
- package/dist/src/server/types/widget.d.ts.map +1 -1
- package/dist/src/server/utils/response-helpers.d.ts +16 -28
- package/dist/src/server/utils/response-helpers.d.ts.map +1 -1
- package/dist/src/server/widgets/ui-resource-registration.d.ts +2 -0
- package/dist/src/server/widgets/ui-resource-registration.d.ts.map +1 -1
- package/dist/src/server/widgets/widget-helpers.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
streamEventsToAISDK,
|
|
4
4
|
streamEventsToAISDKWithTools
|
|
5
5
|
} from "./chunk-EW4MJSHA.js";
|
|
6
|
+
import "./chunk-JQKKMUCT.js";
|
|
6
7
|
import "./chunk-ZFZPZ4GE.js";
|
|
7
8
|
import {
|
|
8
9
|
AcquireActiveMCPServerTool,
|
|
@@ -43,6 +44,10 @@ import {
|
|
|
43
44
|
MCPSession,
|
|
44
45
|
WebSocketConnector
|
|
45
46
|
} from "./chunk-QBTQXCAI.js";
|
|
47
|
+
import {
|
|
48
|
+
BrowserOAuthClientProvider,
|
|
49
|
+
onMcpAuthorization
|
|
50
|
+
} from "./chunk-3R5PDYIN.js";
|
|
46
51
|
import {
|
|
47
52
|
BaseConnector
|
|
48
53
|
} from "./chunk-LTA4LQTH.js";
|
|
@@ -50,11 +55,6 @@ import {
|
|
|
50
55
|
Logger,
|
|
51
56
|
logger
|
|
52
57
|
} from "./chunk-34R6SIER.js";
|
|
53
|
-
import "./chunk-JQKKMUCT.js";
|
|
54
|
-
import {
|
|
55
|
-
BrowserOAuthClientProvider,
|
|
56
|
-
onMcpAuthorization
|
|
57
|
-
} from "./chunk-3R5PDYIN.js";
|
|
58
58
|
import {
|
|
59
59
|
ElicitationDeclinedError,
|
|
60
60
|
ElicitationTimeoutError,
|
package/dist/src/browser.js
CHANGED
|
@@ -17,6 +17,10 @@ import {
|
|
|
17
17
|
MCPSession,
|
|
18
18
|
WebSocketConnector
|
|
19
19
|
} from "../chunk-QBTQXCAI.js";
|
|
20
|
+
import {
|
|
21
|
+
BrowserOAuthClientProvider,
|
|
22
|
+
onMcpAuthorization
|
|
23
|
+
} from "../chunk-3R5PDYIN.js";
|
|
20
24
|
import {
|
|
21
25
|
BaseConnector
|
|
22
26
|
} from "../chunk-LTA4LQTH.js";
|
|
@@ -24,10 +28,6 @@ import {
|
|
|
24
28
|
Logger,
|
|
25
29
|
logger
|
|
26
30
|
} from "../chunk-34R6SIER.js";
|
|
27
|
-
import {
|
|
28
|
-
BrowserOAuthClientProvider,
|
|
29
|
-
onMcpAuthorization
|
|
30
|
-
} from "../chunk-3R5PDYIN.js";
|
|
31
31
|
import "../chunk-MTHLLDCX.js";
|
|
32
32
|
import "../chunk-3GQAWCBQ.js";
|
|
33
33
|
export {
|
package/dist/src/react/index.js
CHANGED
|
@@ -11,11 +11,11 @@ import {
|
|
|
11
11
|
useWidgetTheme
|
|
12
12
|
} from "../../chunk-VPHP7ERH.js";
|
|
13
13
|
import "../../chunk-QBTQXCAI.js";
|
|
14
|
-
import "../../chunk-LTA4LQTH.js";
|
|
15
|
-
import "../../chunk-34R6SIER.js";
|
|
16
14
|
import {
|
|
17
15
|
onMcpAuthorization
|
|
18
16
|
} from "../../chunk-3R5PDYIN.js";
|
|
17
|
+
import "../../chunk-LTA4LQTH.js";
|
|
18
|
+
import "../../chunk-34R6SIER.js";
|
|
19
19
|
import "../../chunk-MTHLLDCX.js";
|
|
20
20
|
import "../../chunk-3GQAWCBQ.js";
|
|
21
21
|
export {
|
|
@@ -1108,37 +1108,12 @@ function binary(base64Data, mimeType) {
|
|
|
1108
1108
|
}
|
|
1109
1109
|
__name(binary, "binary");
|
|
1110
1110
|
function widget(config) {
|
|
1111
|
-
const {
|
|
1112
|
-
name,
|
|
1113
|
-
data,
|
|
1114
|
-
message,
|
|
1115
|
-
invoking,
|
|
1116
|
-
invoked,
|
|
1117
|
-
widgetAccessible = true,
|
|
1118
|
-
resultCanProduceWidget = true,
|
|
1119
|
-
buildId
|
|
1120
|
-
} = config;
|
|
1121
|
-
const randomId = Math.random().toString(36).substring(2, 15);
|
|
1122
|
-
const buildIdPart = buildId ? `-${buildId}` : "";
|
|
1123
|
-
const uniqueUri = `ui://widget/${name}${buildIdPart}-${randomId}.html`;
|
|
1124
|
-
const metadata = {
|
|
1125
|
-
"openai/outputTemplate": uniqueUri,
|
|
1126
|
-
"openai/widgetAccessible": widgetAccessible,
|
|
1127
|
-
"openai/resultCanProduceWidget": resultCanProduceWidget
|
|
1128
|
-
};
|
|
1129
|
-
if (invoking) {
|
|
1130
|
-
metadata["openai/toolInvocation/invoking"] = invoking;
|
|
1131
|
-
}
|
|
1132
|
-
if (invoked) {
|
|
1133
|
-
metadata["openai/toolInvocation/invoked"] = invoked;
|
|
1134
|
-
}
|
|
1135
|
-
const displayMessage = message || `Displaying ${name}`;
|
|
1111
|
+
const { data, message } = config;
|
|
1136
1112
|
return {
|
|
1137
|
-
_meta: metadata,
|
|
1138
1113
|
content: [
|
|
1139
1114
|
{
|
|
1140
1115
|
type: "text",
|
|
1141
|
-
text:
|
|
1116
|
+
text: message || ""
|
|
1142
1117
|
}
|
|
1143
1118
|
],
|
|
1144
1119
|
// structuredContent will be injected as window.openai.toolOutput by Apps SDK
|
|
@@ -1816,6 +1791,7 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
|
|
|
1816
1791
|
const props = metadata.inputs || {};
|
|
1817
1792
|
const description = metadata.description || `Widget: ${widgetName}`;
|
|
1818
1793
|
const title = metadata.title || widgetName;
|
|
1794
|
+
const exposeAsTool = metadata.exposeAsTool !== void 0 ? metadata.exposeAsTool : true;
|
|
1819
1795
|
const mcp_connect_domain = serverConfig.serverBaseUrl ? new URL(serverConfig.serverBaseUrl || "").origin : null;
|
|
1820
1796
|
return {
|
|
1821
1797
|
name: widgetName,
|
|
@@ -1831,7 +1807,8 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
|
|
|
1831
1807
|
type: "appsSdk",
|
|
1832
1808
|
props,
|
|
1833
1809
|
html: html2,
|
|
1834
|
-
dev: isDev
|
|
1810
|
+
dev: isDev,
|
|
1811
|
+
exposeAsTool
|
|
1835
1812
|
},
|
|
1836
1813
|
...metadata._meta || {}
|
|
1837
1814
|
},
|
|
@@ -2401,6 +2378,12 @@ __name(setupWidgetRoutes, "setupWidgetRoutes");
|
|
|
2401
2378
|
// src/server/widgets/ui-resource-registration.ts
|
|
2402
2379
|
function uiResourceRegistration(server, definition) {
|
|
2403
2380
|
const displayName = definition.title || definition.name;
|
|
2381
|
+
if (definition.type === "appsSdk" && definition._meta) {
|
|
2382
|
+
server.widgetDefinitions.set(
|
|
2383
|
+
definition.name,
|
|
2384
|
+
definition._meta
|
|
2385
|
+
);
|
|
2386
|
+
}
|
|
2404
2387
|
let resourceUri;
|
|
2405
2388
|
let mimeType;
|
|
2406
2389
|
switch (definition.type) {
|
|
@@ -2480,71 +2463,76 @@ function uiResourceRegistration(server, definition) {
|
|
|
2480
2463
|
}, "readCallback")
|
|
2481
2464
|
});
|
|
2482
2465
|
}
|
|
2483
|
-
const
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
const
|
|
2487
|
-
|
|
2488
|
-
"openai/
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2466
|
+
const widgetMetadata = definition._meta?.["mcp-use/widget"];
|
|
2467
|
+
const exposeAsTool = definition.exposeAsTool ?? widgetMetadata?.exposeAsTool ?? true;
|
|
2468
|
+
if (exposeAsTool) {
|
|
2469
|
+
const toolMetadata = definition._meta || {};
|
|
2470
|
+
if (definition.type === "appsSdk" && definition.appsSdkMetadata) {
|
|
2471
|
+
toolMetadata["openai/outputTemplate"] = resourceUri;
|
|
2472
|
+
const toolMetadataFields = [
|
|
2473
|
+
"openai/toolInvocation/invoking",
|
|
2474
|
+
"openai/toolInvocation/invoked",
|
|
2475
|
+
"openai/widgetAccessible",
|
|
2476
|
+
"openai/resultCanProduceWidget"
|
|
2477
|
+
];
|
|
2478
|
+
for (const field of toolMetadataFields) {
|
|
2479
|
+
if (definition.appsSdkMetadata[field] !== void 0) {
|
|
2480
|
+
toolMetadata[field] = definition.appsSdkMetadata[field];
|
|
2481
|
+
}
|
|
2495
2482
|
}
|
|
2496
2483
|
}
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
);
|
|
2512
|
-
if (definition.type === "appsSdk") {
|
|
2513
|
-
const randomId = Math.random().toString(36).substring(2, 15);
|
|
2514
|
-
const uniqueUri = generateWidgetUri(
|
|
2515
|
-
definition.name,
|
|
2516
|
-
server.buildId,
|
|
2517
|
-
".html",
|
|
2518
|
-
randomId
|
|
2484
|
+
server.tool(
|
|
2485
|
+
{
|
|
2486
|
+
name: definition.name,
|
|
2487
|
+
title: definition.title,
|
|
2488
|
+
description: definition.description,
|
|
2489
|
+
inputs: convertPropsToInputs(definition.props),
|
|
2490
|
+
annotations: definition.toolAnnotations,
|
|
2491
|
+
_meta: Object.keys(toolMetadata).length > 0 ? toolMetadata : void 0
|
|
2492
|
+
},
|
|
2493
|
+
async (params) => {
|
|
2494
|
+
const uiResource = await createWidgetUIResource(
|
|
2495
|
+
definition,
|
|
2496
|
+
params,
|
|
2497
|
+
serverConfig
|
|
2519
2498
|
);
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2499
|
+
if (definition.type === "appsSdk") {
|
|
2500
|
+
const randomId = Math.random().toString(36).substring(2, 15);
|
|
2501
|
+
const uniqueUri = generateWidgetUri(
|
|
2502
|
+
definition.name,
|
|
2503
|
+
server.buildId,
|
|
2504
|
+
".html",
|
|
2505
|
+
randomId
|
|
2506
|
+
);
|
|
2507
|
+
const uniqueToolMetadata = {
|
|
2508
|
+
...toolMetadata,
|
|
2509
|
+
"openai/outputTemplate": uniqueUri
|
|
2510
|
+
};
|
|
2511
|
+
return {
|
|
2512
|
+
_meta: uniqueToolMetadata,
|
|
2513
|
+
content: [
|
|
2514
|
+
{
|
|
2515
|
+
type: "text",
|
|
2516
|
+
text: `Displaying ${displayName}`
|
|
2517
|
+
}
|
|
2518
|
+
],
|
|
2519
|
+
// structuredContent will be injected as window.openai.toolOutput by Apps SDK
|
|
2520
|
+
structuredContent: params
|
|
2521
|
+
};
|
|
2522
|
+
}
|
|
2524
2523
|
return {
|
|
2525
|
-
_meta: uniqueToolMetadata,
|
|
2526
2524
|
content: [
|
|
2527
2525
|
{
|
|
2528
2526
|
type: "text",
|
|
2529
|
-
text: `Displaying ${displayName}
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2527
|
+
text: `Displaying ${displayName}`,
|
|
2528
|
+
description: `Show MCP-UI widget for ${displayName}`
|
|
2529
|
+
},
|
|
2530
|
+
uiResource
|
|
2531
|
+
]
|
|
2534
2532
|
};
|
|
2535
2533
|
}
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
{
|
|
2539
|
-
type: "text",
|
|
2540
|
-
text: `Displaying ${displayName}`,
|
|
2541
|
-
description: `Show MCP-UI widget for ${displayName}`
|
|
2542
|
-
},
|
|
2543
|
-
uiResource
|
|
2544
|
-
]
|
|
2545
|
-
};
|
|
2546
|
-
}
|
|
2547
|
-
);
|
|
2534
|
+
);
|
|
2535
|
+
}
|
|
2548
2536
|
return server;
|
|
2549
2537
|
}
|
|
2550
2538
|
__name(uiResourceRegistration, "uiResourceRegistration");
|
|
@@ -3662,9 +3650,9 @@ async function setupOAuthForServer(app, oauthProvider, baseUrl, state) {
|
|
|
3662
3650
|
__name(setupOAuthForServer, "setupOAuthForServer");
|
|
3663
3651
|
|
|
3664
3652
|
// src/server/mcp-server.ts
|
|
3665
|
-
var
|
|
3653
|
+
var MCPServerClass = class {
|
|
3666
3654
|
static {
|
|
3667
|
-
__name(this, "
|
|
3655
|
+
__name(this, "MCPServerClass");
|
|
3668
3656
|
}
|
|
3669
3657
|
/**
|
|
3670
3658
|
* Native MCP server instance from @modelcontextprotocol/sdk
|
|
@@ -3688,8 +3676,6 @@ var MCPServer = class {
|
|
|
3688
3676
|
buildId;
|
|
3689
3677
|
sessions = /* @__PURE__ */ new Map();
|
|
3690
3678
|
idleCleanupInterval;
|
|
3691
|
-
oauthConfig;
|
|
3692
|
-
// Store OAuth config for lazy initialization
|
|
3693
3679
|
oauthSetupState = {
|
|
3694
3680
|
complete: false,
|
|
3695
3681
|
provider: void 0,
|
|
@@ -3707,6 +3693,11 @@ var MCPServer = class {
|
|
|
3707
3693
|
resources: /* @__PURE__ */ new Map(),
|
|
3708
3694
|
resourceTemplates: /* @__PURE__ */ new Map()
|
|
3709
3695
|
};
|
|
3696
|
+
/**
|
|
3697
|
+
* Storage for widget definitions, used to inject metadata into tool responses
|
|
3698
|
+
* when using the widget() helper with returnsWidget option
|
|
3699
|
+
*/
|
|
3700
|
+
widgetDefinitions = /* @__PURE__ */ new Map();
|
|
3710
3701
|
/**
|
|
3711
3702
|
* Resource subscription manager for tracking and notifying resource updates
|
|
3712
3703
|
*/
|
|
@@ -3753,7 +3744,7 @@ var MCPServer = class {
|
|
|
3753
3744
|
}
|
|
3754
3745
|
);
|
|
3755
3746
|
this.app = createHonoApp(requestLogger);
|
|
3756
|
-
this.
|
|
3747
|
+
this.oauthProvider = config.oauth;
|
|
3757
3748
|
this.wrapRegistrationMethods();
|
|
3758
3749
|
return createHonoProxy(this, this.app);
|
|
3759
3750
|
}
|
|
@@ -3768,14 +3759,54 @@ var MCPServer = class {
|
|
|
3768
3759
|
const originalResourceTemplate = registerResourceTemplate;
|
|
3769
3760
|
const self = this;
|
|
3770
3761
|
this.tool = ((toolDefinition, callback) => {
|
|
3771
|
-
const
|
|
3762
|
+
const widgetConfig = toolDefinition.widget;
|
|
3763
|
+
const widgetName = widgetConfig?.name;
|
|
3764
|
+
if (widgetConfig && widgetName) {
|
|
3765
|
+
const buildIdPart = self.buildId ? `-${self.buildId}` : "";
|
|
3766
|
+
const outputTemplate = `ui://widget/${widgetName}${buildIdPart}.html`;
|
|
3767
|
+
toolDefinition._meta = {
|
|
3768
|
+
...toolDefinition._meta,
|
|
3769
|
+
"openai/outputTemplate": outputTemplate,
|
|
3770
|
+
"openai/toolInvocation/invoking": widgetConfig.invoking ?? `Loading ${widgetName}...`,
|
|
3771
|
+
"openai/toolInvocation/invoked": widgetConfig.invoked ?? `${widgetName} ready`,
|
|
3772
|
+
"openai/widgetAccessible": widgetConfig.widgetAccessible ?? true,
|
|
3773
|
+
"openai/resultCanProduceWidget": widgetConfig.resultCanProduceWidget ?? true
|
|
3774
|
+
};
|
|
3775
|
+
}
|
|
3776
|
+
let actualCallback = callback || toolDefinition.cb;
|
|
3777
|
+
if (widgetConfig && widgetName && actualCallback) {
|
|
3778
|
+
const originalCallback = actualCallback;
|
|
3779
|
+
actualCallback = /* @__PURE__ */ __name((async (params, ctx) => {
|
|
3780
|
+
const result = await originalCallback(params, ctx);
|
|
3781
|
+
const widgetDef = self.widgetDefinitions.get(widgetName);
|
|
3782
|
+
if (result && typeof result === "object") {
|
|
3783
|
+
const randomId = Math.random().toString(36).substring(2, 15);
|
|
3784
|
+
const buildIdPart = self.buildId ? `-${self.buildId}` : "";
|
|
3785
|
+
const uniqueUri = `ui://widget/${widgetName}${buildIdPart}-${randomId}.html`;
|
|
3786
|
+
const responseMeta = {
|
|
3787
|
+
...widgetDef || {},
|
|
3788
|
+
// Include mcp-use/widget and other widget metadata
|
|
3789
|
+
"openai/outputTemplate": uniqueUri,
|
|
3790
|
+
"openai/toolInvocation/invoking": widgetConfig.invoking ?? `Loading ${widgetName}...`,
|
|
3791
|
+
"openai/toolInvocation/invoked": widgetConfig.invoked ?? `${widgetName} ready`,
|
|
3792
|
+
"openai/widgetAccessible": widgetConfig.widgetAccessible ?? true,
|
|
3793
|
+
"openai/resultCanProduceWidget": widgetConfig.resultCanProduceWidget ?? true
|
|
3794
|
+
};
|
|
3795
|
+
result._meta = responseMeta;
|
|
3796
|
+
if (result.content?.[0]?.type === "text" && !result.content[0].text) {
|
|
3797
|
+
result.content[0].text = `Displaying ${widgetName}`;
|
|
3798
|
+
}
|
|
3799
|
+
}
|
|
3800
|
+
return result;
|
|
3801
|
+
}), "actualCallback");
|
|
3802
|
+
}
|
|
3772
3803
|
if (actualCallback) {
|
|
3773
3804
|
self.registrationRecipes.tools.set(toolDefinition.name, {
|
|
3774
3805
|
config: toolDefinition,
|
|
3775
3806
|
handler: actualCallback
|
|
3776
3807
|
});
|
|
3777
3808
|
}
|
|
3778
|
-
return originalTool.call(self, toolDefinition,
|
|
3809
|
+
return originalTool.call(self, toolDefinition, actualCallback);
|
|
3779
3810
|
});
|
|
3780
3811
|
this.prompt = ((promptDefinition, callback) => {
|
|
3781
3812
|
const actualCallback = callback || promptDefinition.cb;
|
|
@@ -4067,18 +4098,18 @@ var MCPServer = class {
|
|
|
4067
4098
|
this.serverPort
|
|
4068
4099
|
);
|
|
4069
4100
|
}
|
|
4070
|
-
// Tool registration helper
|
|
4071
|
-
tool
|
|
4101
|
+
// Tool registration helper - type is set in wrapRegistrationMethods
|
|
4102
|
+
tool;
|
|
4072
4103
|
// Schema conversion helpers (used by tool registration)
|
|
4073
4104
|
convertZodSchemaToParams = convertZodSchemaToParams;
|
|
4074
4105
|
createParamsSchema = createParamsSchema;
|
|
4075
4106
|
// Template URI parsing helper (used by resource templates)
|
|
4076
4107
|
parseTemplateUri = parseTemplateUri;
|
|
4077
|
-
// Resource registration helpers
|
|
4078
|
-
resource
|
|
4079
|
-
resourceTemplate
|
|
4080
|
-
// Prompt registration helper
|
|
4081
|
-
prompt
|
|
4108
|
+
// Resource registration helpers - types are set in wrapRegistrationMethods
|
|
4109
|
+
resource;
|
|
4110
|
+
resourceTemplate;
|
|
4111
|
+
// Prompt registration helper - type is set in wrapRegistrationMethods
|
|
4112
|
+
prompt;
|
|
4082
4113
|
// Notification helpers
|
|
4083
4114
|
getActiveSessions = getActiveSessions;
|
|
4084
4115
|
sendNotification = sendNotification;
|
|
@@ -4191,7 +4222,7 @@ var MCPServer = class {
|
|
|
4191
4222
|
this.serverHost,
|
|
4192
4223
|
this.serverPort
|
|
4193
4224
|
);
|
|
4194
|
-
if (this.
|
|
4225
|
+
if (this.oauthProvider && !this.oauthSetupState.complete) {
|
|
4195
4226
|
await setupOAuthForServer(
|
|
4196
4227
|
this.app,
|
|
4197
4228
|
this.oauthProvider,
|
|
@@ -4244,7 +4275,7 @@ var MCPServer = class {
|
|
|
4244
4275
|
* ```
|
|
4245
4276
|
*/
|
|
4246
4277
|
async getHandler(options) {
|
|
4247
|
-
if (this.
|
|
4278
|
+
if (this.oauthProvider && !this.oauthSetupState.complete) {
|
|
4248
4279
|
await setupOAuthForServer(
|
|
4249
4280
|
this.app,
|
|
4250
4281
|
this.oauthProvider,
|
|
@@ -4314,8 +4345,9 @@ var MCPServer = class {
|
|
|
4314
4345
|
}
|
|
4315
4346
|
}
|
|
4316
4347
|
};
|
|
4348
|
+
var MCPServer = MCPServerClass;
|
|
4317
4349
|
function createMCPServer(name, config = {}) {
|
|
4318
|
-
const instance = new
|
|
4350
|
+
const instance = new MCPServerClass({
|
|
4319
4351
|
name,
|
|
4320
4352
|
version: config.version || "1.0.0",
|
|
4321
4353
|
description: config.description,
|