mcp-use 1.10.0-canary.2 → 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/{chunk-QREDNTLS.js → chunk-F5MMLHUR.js} +1 -1
- package/dist/{chunk-Q3PFK7Y4.js → chunk-L6P6GBCW.js} +3 -2
- package/dist/{chunk-ZQUCGISK.js → chunk-LTA4LQTH.js} +6 -4
- package/dist/{chunk-HRWL2M2I.js → chunk-QBTQXCAI.js} +1 -1
- package/dist/{chunk-BFFS67JY.js → chunk-VPHP7ERH.js} +18 -9
- package/dist/{chunk-U5BX3ISQ.js → chunk-YMJL66MY.js} +10 -6
- package/dist/index.cjs +36 -20
- package/dist/index.js +9 -8
- package/dist/src/agents/index.cjs +10 -6
- package/dist/src/agents/index.js +3 -3
- package/dist/src/agents/mcp_agent.d.ts.map +1 -1
- package/dist/src/browser.cjs +16 -10
- package/dist/src/browser.js +3 -3
- package/dist/src/client/prompts.js +2 -2
- package/dist/src/connectors/base.d.ts +2 -2
- package/dist/src/connectors/base.d.ts.map +1 -1
- package/dist/src/oauth-helper.d.ts.map +1 -1
- package/dist/src/react/WidgetControls.d.ts.map +1 -1
- package/dist/src/react/index.cjs +23 -12
- package/dist/src/react/index.js +3 -3
- package/dist/src/react/useMcp.d.ts.map +1 -1
- package/dist/src/server/endpoints/mount-mcp.d.ts +4 -1
- package/dist/src/server/endpoints/mount-mcp.d.ts.map +1 -1
- package/dist/src/server/index.cjs +237 -168
- package/dist/src/server/index.js +238 -170
- package/dist/src/server/mcp-server.d.ts +28 -13
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/oauth/middleware.d.ts.map +1 -1
- package/dist/src/server/oauth/providers/auth0.d.ts +1 -1
- package/dist/src/server/oauth/providers/auth0.d.ts.map +1 -1
- package/dist/src/server/oauth/providers/custom.d.ts +4 -2
- package/dist/src/server/oauth/providers/custom.d.ts.map +1 -1
- package/dist/src/server/oauth/providers/keycloak.d.ts +1 -1
- package/dist/src/server/oauth/providers/keycloak.d.ts.map +1 -1
- package/dist/src/server/oauth/providers/supabase.d.ts +1 -1
- package/dist/src/server/oauth/providers/supabase.d.ts.map +1 -1
- package/dist/src/server/oauth/providers/types.d.ts +9 -5
- package/dist/src/server/oauth/providers/types.d.ts.map +1 -1
- package/dist/src/server/oauth/setup.d.ts +5 -4
- package/dist/src/server/oauth/setup.d.ts.map +1 -1
- package/dist/src/server/oauth/utils.d.ts +3 -2
- package/dist/src/server/oauth/utils.d.ts.map +1 -1
- package/dist/src/server/prompts/index.d.ts +5 -4
- package/dist/src/server/prompts/index.d.ts.map +1 -1
- package/dist/src/server/resources/index.d.ts +1 -1
- package/dist/src/server/resources/index.d.ts.map +1 -1
- package/dist/src/server/sessions/session-manager.d.ts +10 -6
- package/dist/src/server/sessions/session-manager.d.ts.map +1 -1
- package/dist/src/server/tools/tool-execution-helpers.d.ts +30 -7
- package/dist/src/server/tools/tool-execution-helpers.d.ts.map +1 -1
- package/dist/src/server/tools/tool-registration.d.ts +21 -7
- package/dist/src/server/tools/tool-registration.d.ts.map +1 -1
- package/dist/src/server/types/common.d.ts +1 -1
- package/dist/src/server/types/common.d.ts.map +1 -1
- package/dist/src/server/types/resource.d.ts +6 -1
- 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 -1
- 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/index.d.ts +1 -1
- package/dist/src/server/widgets/index.d.ts.map +1 -1
- package/dist/src/server/widgets/mount-widgets-dev.d.ts.map +1 -1
- package/dist/src/server/widgets/ui-resource-registration.d.ts +13 -25
- package/dist/src/server/widgets/ui-resource-registration.d.ts.map +1 -1
- package/dist/src/server/widgets/widget-helpers.d.ts +11 -6
- package/dist/src/server/widgets/widget-helpers.d.ts.map +1 -1
- package/dist/src/server/widgets/widget-types.d.ts +3 -3
- package/dist/src/server/widgets/widget-types.d.ts.map +1 -1
- package/dist/src/session.d.ts +1 -1
- package/dist/src/session.d.ts.map +1 -1
- package/dist/{tool-execution-helpers-RRMGLAHR.js → tool-execution-helpers-2LGVSS7L.js} +1 -1
- package/package.json +3 -3
|
@@ -403,9 +403,10 @@ function createElicitMethod(elicitInput) {
|
|
|
403
403
|
data: validatedData
|
|
404
404
|
};
|
|
405
405
|
} catch (error2) {
|
|
406
|
+
const err = error2;
|
|
406
407
|
throw new ElicitationValidationError(
|
|
407
|
-
`Elicitation data validation failed: ${
|
|
408
|
-
|
|
408
|
+
`Elicitation data validation failed: ${err.message}`,
|
|
409
|
+
err
|
|
409
410
|
);
|
|
410
411
|
}
|
|
411
412
|
}
|
|
@@ -1107,37 +1108,12 @@ function binary(base64Data, mimeType) {
|
|
|
1107
1108
|
}
|
|
1108
1109
|
__name(binary, "binary");
|
|
1109
1110
|
function widget(config) {
|
|
1110
|
-
const {
|
|
1111
|
-
name,
|
|
1112
|
-
data,
|
|
1113
|
-
message,
|
|
1114
|
-
invoking,
|
|
1115
|
-
invoked,
|
|
1116
|
-
widgetAccessible = true,
|
|
1117
|
-
resultCanProduceWidget = true,
|
|
1118
|
-
buildId
|
|
1119
|
-
} = config;
|
|
1120
|
-
const randomId = Math.random().toString(36).substring(2, 15);
|
|
1121
|
-
const buildIdPart = buildId ? `-${buildId}` : "";
|
|
1122
|
-
const uniqueUri = `ui://widget/${name}${buildIdPart}-${randomId}.html`;
|
|
1123
|
-
const metadata = {
|
|
1124
|
-
"openai/outputTemplate": uniqueUri,
|
|
1125
|
-
"openai/widgetAccessible": widgetAccessible,
|
|
1126
|
-
"openai/resultCanProduceWidget": resultCanProduceWidget
|
|
1127
|
-
};
|
|
1128
|
-
if (invoking) {
|
|
1129
|
-
metadata["openai/toolInvocation/invoking"] = invoking;
|
|
1130
|
-
}
|
|
1131
|
-
if (invoked) {
|
|
1132
|
-
metadata["openai/toolInvocation/invoked"] = invoked;
|
|
1133
|
-
}
|
|
1134
|
-
const displayMessage = message || `Displaying ${name}`;
|
|
1111
|
+
const { data, message } = config;
|
|
1135
1112
|
return {
|
|
1136
|
-
_meta: metadata,
|
|
1137
1113
|
content: [
|
|
1138
1114
|
{
|
|
1139
1115
|
type: "text",
|
|
1140
|
-
text:
|
|
1116
|
+
text: message || ""
|
|
1141
1117
|
}
|
|
1142
1118
|
],
|
|
1143
1119
|
// structuredContent will be injected as window.openai.toolOutput by Apps SDK
|
|
@@ -1815,6 +1791,7 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
|
|
|
1815
1791
|
const props = metadata.inputs || {};
|
|
1816
1792
|
const description = metadata.description || `Widget: ${widgetName}`;
|
|
1817
1793
|
const title = metadata.title || widgetName;
|
|
1794
|
+
const exposeAsTool = metadata.exposeAsTool !== void 0 ? metadata.exposeAsTool : true;
|
|
1818
1795
|
const mcp_connect_domain = serverConfig.serverBaseUrl ? new URL(serverConfig.serverBaseUrl || "").origin : null;
|
|
1819
1796
|
return {
|
|
1820
1797
|
name: widgetName,
|
|
@@ -1830,7 +1807,8 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
|
|
|
1830
1807
|
type: "appsSdk",
|
|
1831
1808
|
props,
|
|
1832
1809
|
html: html2,
|
|
1833
|
-
dev: isDev
|
|
1810
|
+
dev: isDev,
|
|
1811
|
+
exposeAsTool
|
|
1834
1812
|
},
|
|
1835
1813
|
...metadata._meta || {}
|
|
1836
1814
|
},
|
|
@@ -2398,25 +2376,31 @@ function setupWidgetRoutes(app, serverConfig) {
|
|
|
2398
2376
|
__name(setupWidgetRoutes, "setupWidgetRoutes");
|
|
2399
2377
|
|
|
2400
2378
|
// src/server/widgets/ui-resource-registration.ts
|
|
2401
|
-
function uiResourceRegistration(definition) {
|
|
2379
|
+
function uiResourceRegistration(server, definition) {
|
|
2402
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
|
+
}
|
|
2403
2387
|
let resourceUri;
|
|
2404
2388
|
let mimeType;
|
|
2405
2389
|
switch (definition.type) {
|
|
2406
2390
|
case "externalUrl":
|
|
2407
|
-
resourceUri = generateWidgetUri(definition.widget,
|
|
2391
|
+
resourceUri = generateWidgetUri(definition.widget, server.buildId);
|
|
2408
2392
|
mimeType = "text/uri-list";
|
|
2409
2393
|
break;
|
|
2410
2394
|
case "rawHtml":
|
|
2411
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
2395
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId);
|
|
2412
2396
|
mimeType = "text/html";
|
|
2413
2397
|
break;
|
|
2414
2398
|
case "remoteDom":
|
|
2415
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
2399
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId);
|
|
2416
2400
|
mimeType = "application/vnd.mcp-ui.remote-dom+javascript";
|
|
2417
2401
|
break;
|
|
2418
2402
|
case "appsSdk":
|
|
2419
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
2403
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId, ".html");
|
|
2420
2404
|
mimeType = "text/html+skybridge";
|
|
2421
2405
|
break;
|
|
2422
2406
|
default:
|
|
@@ -2425,12 +2409,12 @@ function uiResourceRegistration(definition) {
|
|
|
2425
2409
|
);
|
|
2426
2410
|
}
|
|
2427
2411
|
const serverConfig = {
|
|
2428
|
-
serverHost:
|
|
2429
|
-
serverPort:
|
|
2430
|
-
serverBaseUrl:
|
|
2431
|
-
buildId:
|
|
2412
|
+
serverHost: server.serverHost,
|
|
2413
|
+
serverPort: server.serverPort || 3e3,
|
|
2414
|
+
serverBaseUrl: server.serverBaseUrl,
|
|
2415
|
+
buildId: server.buildId
|
|
2432
2416
|
};
|
|
2433
|
-
|
|
2417
|
+
server.resource({
|
|
2434
2418
|
name: definition.name,
|
|
2435
2419
|
uri: resourceUri,
|
|
2436
2420
|
title: definition.title,
|
|
@@ -2452,9 +2436,9 @@ function uiResourceRegistration(definition) {
|
|
|
2452
2436
|
}, "readCallback")
|
|
2453
2437
|
});
|
|
2454
2438
|
if (definition.type === "appsSdk") {
|
|
2455
|
-
const buildIdPart =
|
|
2439
|
+
const buildIdPart = server.buildId ? `-${server.buildId}` : "";
|
|
2456
2440
|
const uriTemplate = `ui://widget/${definition.name}${buildIdPart}-{id}.html`;
|
|
2457
|
-
|
|
2441
|
+
server.resourceTemplate({
|
|
2458
2442
|
name: `${definition.name}-dynamic`,
|
|
2459
2443
|
resourceTemplate: {
|
|
2460
2444
|
uriTemplate,
|
|
@@ -2479,70 +2463,77 @@ function uiResourceRegistration(definition) {
|
|
|
2479
2463
|
}, "readCallback")
|
|
2480
2464
|
});
|
|
2481
2465
|
}
|
|
2482
|
-
const
|
|
2483
|
-
|
|
2484
|
-
|
|
2485
|
-
const
|
|
2486
|
-
|
|
2487
|
-
"openai/
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
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
|
+
}
|
|
2494
2482
|
}
|
|
2495
2483
|
}
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
const randomId = Math.random().toString(36).substring(2, 15);
|
|
2511
|
-
const uniqueUri = generateWidgetUri(
|
|
2512
|
-
definition.name,
|
|
2513
|
-
this.buildId,
|
|
2514
|
-
".html",
|
|
2515
|
-
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
|
|
2516
2498
|
);
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
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
|
+
}
|
|
2521
2523
|
return {
|
|
2522
|
-
_meta: uniqueToolMetadata,
|
|
2523
2524
|
content: [
|
|
2524
2525
|
{
|
|
2525
2526
|
type: "text",
|
|
2526
|
-
text: `Displaying ${displayName}
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2527
|
+
text: `Displaying ${displayName}`,
|
|
2528
|
+
description: `Show MCP-UI widget for ${displayName}`
|
|
2529
|
+
},
|
|
2530
|
+
uiResource
|
|
2531
|
+
]
|
|
2531
2532
|
};
|
|
2532
2533
|
}
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
type: "text",
|
|
2537
|
-
text: `Displaying ${displayName}`,
|
|
2538
|
-
description: `Show MCP-UI widget for ${displayName}`
|
|
2539
|
-
},
|
|
2540
|
-
uiResource
|
|
2541
|
-
]
|
|
2542
|
-
};
|
|
2543
|
-
}, "cb")
|
|
2544
|
-
});
|
|
2545
|
-
return this;
|
|
2534
|
+
);
|
|
2535
|
+
}
|
|
2536
|
+
return server;
|
|
2546
2537
|
}
|
|
2547
2538
|
__name(uiResourceRegistration, "uiResourceRegistration");
|
|
2548
2539
|
|
|
@@ -3605,12 +3596,13 @@ function createBearerAuthMiddleware(provider, baseUrl) {
|
|
|
3605
3596
|
const result = await provider.verifyToken(token);
|
|
3606
3597
|
const payload = result.payload;
|
|
3607
3598
|
const user = provider.getUserInfo(payload);
|
|
3599
|
+
const scope = payload.scope;
|
|
3608
3600
|
const authInfo = {
|
|
3609
3601
|
user,
|
|
3610
3602
|
payload,
|
|
3611
3603
|
accessToken: token,
|
|
3612
3604
|
// Extract scopes from scope claim (OAuth standard)
|
|
3613
|
-
scopes:
|
|
3605
|
+
scopes: scope ? scope.split(" ") : [],
|
|
3614
3606
|
// Extract permissions (Auth0 style, or custom)
|
|
3615
3607
|
permissions: payload.permissions || []
|
|
3616
3608
|
};
|
|
@@ -3658,9 +3650,9 @@ async function setupOAuthForServer(app, oauthProvider, baseUrl, state) {
|
|
|
3658
3650
|
__name(setupOAuthForServer, "setupOAuthForServer");
|
|
3659
3651
|
|
|
3660
3652
|
// src/server/mcp-server.ts
|
|
3661
|
-
var
|
|
3653
|
+
var MCPServerClass = class {
|
|
3662
3654
|
static {
|
|
3663
|
-
__name(this, "
|
|
3655
|
+
__name(this, "MCPServerClass");
|
|
3664
3656
|
}
|
|
3665
3657
|
/**
|
|
3666
3658
|
* Native MCP server instance from @modelcontextprotocol/sdk
|
|
@@ -3684,8 +3676,6 @@ var MCPServer = class {
|
|
|
3684
3676
|
buildId;
|
|
3685
3677
|
sessions = /* @__PURE__ */ new Map();
|
|
3686
3678
|
idleCleanupInterval;
|
|
3687
|
-
oauthConfig;
|
|
3688
|
-
// Store OAuth config for lazy initialization
|
|
3689
3679
|
oauthSetupState = {
|
|
3690
3680
|
complete: false,
|
|
3691
3681
|
provider: void 0,
|
|
@@ -3703,6 +3693,11 @@ var MCPServer = class {
|
|
|
3703
3693
|
resources: /* @__PURE__ */ new Map(),
|
|
3704
3694
|
resourceTemplates: /* @__PURE__ */ new Map()
|
|
3705
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();
|
|
3706
3701
|
/**
|
|
3707
3702
|
* Resource subscription manager for tracking and notifying resource updates
|
|
3708
3703
|
*/
|
|
@@ -3749,7 +3744,7 @@ var MCPServer = class {
|
|
|
3749
3744
|
}
|
|
3750
3745
|
);
|
|
3751
3746
|
this.app = createHonoApp(requestLogger);
|
|
3752
|
-
this.
|
|
3747
|
+
this.oauthProvider = config.oauth;
|
|
3753
3748
|
this.wrapRegistrationMethods();
|
|
3754
3749
|
return createHonoProxy(this, this.app);
|
|
3755
3750
|
}
|
|
@@ -3764,38 +3759,97 @@ var MCPServer = class {
|
|
|
3764
3759
|
const originalResourceTemplate = registerResourceTemplate;
|
|
3765
3760
|
const self = this;
|
|
3766
3761
|
this.tool = ((toolDefinition, callback) => {
|
|
3767
|
-
const
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
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
|
+
}
|
|
3803
|
+
if (actualCallback) {
|
|
3804
|
+
self.registrationRecipes.tools.set(toolDefinition.name, {
|
|
3805
|
+
config: toolDefinition,
|
|
3806
|
+
handler: actualCallback
|
|
3807
|
+
});
|
|
3808
|
+
}
|
|
3809
|
+
return originalTool.call(self, toolDefinition, actualCallback);
|
|
3773
3810
|
});
|
|
3774
|
-
this.prompt =
|
|
3811
|
+
this.prompt = ((promptDefinition, callback) => {
|
|
3775
3812
|
const actualCallback = callback || promptDefinition.cb;
|
|
3776
|
-
|
|
3777
|
-
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
|
|
3781
|
-
|
|
3782
|
-
|
|
3813
|
+
if (actualCallback) {
|
|
3814
|
+
self.registrationRecipes.prompts.set(promptDefinition.name, {
|
|
3815
|
+
config: promptDefinition,
|
|
3816
|
+
handler: actualCallback
|
|
3817
|
+
});
|
|
3818
|
+
}
|
|
3819
|
+
return originalPrompt.call(
|
|
3820
|
+
self,
|
|
3821
|
+
promptDefinition,
|
|
3822
|
+
callback
|
|
3823
|
+
);
|
|
3824
|
+
});
|
|
3825
|
+
this.resource = ((resourceDefinition, callback) => {
|
|
3783
3826
|
const actualCallback = callback || resourceDefinition.readCallback;
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3827
|
+
if (actualCallback) {
|
|
3828
|
+
const resourceKey = `${resourceDefinition.name}:${resourceDefinition.uri}`;
|
|
3829
|
+
self.registrationRecipes.resources.set(resourceKey, {
|
|
3830
|
+
config: resourceDefinition,
|
|
3831
|
+
handler: actualCallback
|
|
3832
|
+
});
|
|
3833
|
+
}
|
|
3789
3834
|
return originalResource.call(self, resourceDefinition, callback);
|
|
3790
|
-
};
|
|
3791
|
-
this.resourceTemplate =
|
|
3835
|
+
});
|
|
3836
|
+
this.resourceTemplate = ((templateDefinition, callback) => {
|
|
3792
3837
|
const actualCallback = callback || templateDefinition.readCallback;
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
|
|
3838
|
+
if (actualCallback) {
|
|
3839
|
+
self.registrationRecipes.resourceTemplates.set(
|
|
3840
|
+
templateDefinition.name,
|
|
3841
|
+
{
|
|
3842
|
+
config: templateDefinition,
|
|
3843
|
+
handler: actualCallback
|
|
3844
|
+
}
|
|
3845
|
+
);
|
|
3846
|
+
}
|
|
3847
|
+
return originalResourceTemplate.call(
|
|
3848
|
+
self,
|
|
3849
|
+
templateDefinition,
|
|
3850
|
+
callback
|
|
3851
|
+
);
|
|
3852
|
+
});
|
|
3799
3853
|
}
|
|
3800
3854
|
/**
|
|
3801
3855
|
* Create a new server instance for a session following official SDK pattern.
|
|
@@ -3853,11 +3907,12 @@ var MCPServer = class {
|
|
|
3853
3907
|
console.log("[createMessage] Got result successfully");
|
|
3854
3908
|
return result;
|
|
3855
3909
|
} catch (err) {
|
|
3910
|
+
const error2 = err;
|
|
3856
3911
|
console.error(
|
|
3857
3912
|
"[createMessage] Error:",
|
|
3858
|
-
|
|
3913
|
+
error2.message,
|
|
3859
3914
|
"Code:",
|
|
3860
|
-
|
|
3915
|
+
error2.code
|
|
3861
3916
|
);
|
|
3862
3917
|
throw err;
|
|
3863
3918
|
}
|
|
@@ -3906,8 +3961,8 @@ var MCPServer = class {
|
|
|
3906
3961
|
} else {
|
|
3907
3962
|
argsSchema = void 0;
|
|
3908
3963
|
}
|
|
3909
|
-
const wrappedHandler = /* @__PURE__ */ __name(async (params) => {
|
|
3910
|
-
const result = await handler(params);
|
|
3964
|
+
const wrappedHandler = /* @__PURE__ */ __name(async (params, extra) => {
|
|
3965
|
+
const result = await handler(params, extra);
|
|
3911
3966
|
if ("messages" in result && Array.isArray(result.messages)) {
|
|
3912
3967
|
return result;
|
|
3913
3968
|
}
|
|
@@ -3926,8 +3981,8 @@ var MCPServer = class {
|
|
|
3926
3981
|
}
|
|
3927
3982
|
for (const [_key, recipe] of this.registrationRecipes.resources) {
|
|
3928
3983
|
const { config, handler } = recipe;
|
|
3929
|
-
const wrappedHandler = /* @__PURE__ */ __name(async () => {
|
|
3930
|
-
const result = await handler();
|
|
3984
|
+
const wrappedHandler = /* @__PURE__ */ __name(async (extra) => {
|
|
3985
|
+
const result = await handler(extra);
|
|
3931
3986
|
if ("contents" in result && Array.isArray(result.contents)) {
|
|
3932
3987
|
return result;
|
|
3933
3988
|
}
|
|
@@ -3972,20 +4027,23 @@ var MCPServer = class {
|
|
|
3972
4027
|
config.name,
|
|
3973
4028
|
template,
|
|
3974
4029
|
metadata,
|
|
3975
|
-
async (uri) => {
|
|
4030
|
+
async (uri, extra) => {
|
|
3976
4031
|
const params = this.parseTemplateUri(uriTemplate, uri.toString());
|
|
3977
|
-
const result = await handler(uri, params);
|
|
4032
|
+
const result = await handler(uri, params, extra);
|
|
3978
4033
|
if ("contents" in result && Array.isArray(result.contents)) {
|
|
3979
4034
|
return result;
|
|
3980
4035
|
}
|
|
3981
4036
|
const { convertToolResultToResourceResult: convertToolResultToResourceResult2 } = await Promise.resolve().then(() => (init_conversion(), conversion_exports));
|
|
3982
|
-
return convertToolResultToResourceResult2(
|
|
4037
|
+
return convertToolResultToResourceResult2(
|
|
4038
|
+
uri.toString(),
|
|
4039
|
+
result
|
|
4040
|
+
);
|
|
3983
4041
|
}
|
|
3984
4042
|
);
|
|
3985
4043
|
}
|
|
3986
4044
|
newServer.server.setRequestHandler(
|
|
3987
4045
|
import_zod2.z.object({ method: import_zod2.z.literal("logging/setLevel") }).passthrough(),
|
|
3988
|
-
async (request) => {
|
|
4046
|
+
(async (request, extra) => {
|
|
3989
4047
|
const level = request.params?.level;
|
|
3990
4048
|
if (!level) {
|
|
3991
4049
|
throw new import_types2.McpError(
|
|
@@ -4024,7 +4082,7 @@ var MCPServer = class {
|
|
|
4024
4082
|
"[MCP] Could not find session for logging/setLevel request"
|
|
4025
4083
|
);
|
|
4026
4084
|
throw new import_types2.McpError(import_types2.ErrorCode.InternalError, "Could not find session");
|
|
4027
|
-
}
|
|
4085
|
+
})
|
|
4028
4086
|
);
|
|
4029
4087
|
this.subscriptionManager.registerHandlers(newServer, this.sessions);
|
|
4030
4088
|
return newServer;
|
|
@@ -4040,18 +4098,18 @@ var MCPServer = class {
|
|
|
4040
4098
|
this.serverPort
|
|
4041
4099
|
);
|
|
4042
4100
|
}
|
|
4043
|
-
// Tool registration helper
|
|
4044
|
-
tool
|
|
4101
|
+
// Tool registration helper - type is set in wrapRegistrationMethods
|
|
4102
|
+
tool;
|
|
4045
4103
|
// Schema conversion helpers (used by tool registration)
|
|
4046
4104
|
convertZodSchemaToParams = convertZodSchemaToParams;
|
|
4047
4105
|
createParamsSchema = createParamsSchema;
|
|
4048
4106
|
// Template URI parsing helper (used by resource templates)
|
|
4049
4107
|
parseTemplateUri = parseTemplateUri;
|
|
4050
|
-
// Resource registration helpers
|
|
4051
|
-
resource
|
|
4052
|
-
resourceTemplate
|
|
4053
|
-
// Prompt registration helper
|
|
4054
|
-
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;
|
|
4055
4113
|
// Notification helpers
|
|
4056
4114
|
getActiveSessions = getActiveSessions;
|
|
4057
4115
|
sendNotification = sendNotification;
|
|
@@ -4074,7 +4132,9 @@ var MCPServer = class {
|
|
|
4074
4132
|
async notifyResourceUpdated(uri) {
|
|
4075
4133
|
return this.subscriptionManager.notifyResourceUpdated(uri, this.sessions);
|
|
4076
4134
|
}
|
|
4077
|
-
uiResource =
|
|
4135
|
+
uiResource = /* @__PURE__ */ __name((definition) => {
|
|
4136
|
+
return uiResourceRegistration(this, definition);
|
|
4137
|
+
}, "uiResource");
|
|
4078
4138
|
/**
|
|
4079
4139
|
* Mount MCP server endpoints at /mcp and /sse
|
|
4080
4140
|
*
|
|
@@ -4162,7 +4222,7 @@ var MCPServer = class {
|
|
|
4162
4222
|
this.serverHost,
|
|
4163
4223
|
this.serverPort
|
|
4164
4224
|
);
|
|
4165
|
-
if (this.
|
|
4225
|
+
if (this.oauthProvider && !this.oauthSetupState.complete) {
|
|
4166
4226
|
await setupOAuthForServer(
|
|
4167
4227
|
this.app,
|
|
4168
4228
|
this.oauthProvider,
|
|
@@ -4215,7 +4275,7 @@ var MCPServer = class {
|
|
|
4215
4275
|
* ```
|
|
4216
4276
|
*/
|
|
4217
4277
|
async getHandler(options) {
|
|
4218
|
-
if (this.
|
|
4278
|
+
if (this.oauthProvider && !this.oauthSetupState.complete) {
|
|
4219
4279
|
await setupOAuthForServer(
|
|
4220
4280
|
this.app,
|
|
4221
4281
|
this.oauthProvider,
|
|
@@ -4285,8 +4345,9 @@ var MCPServer = class {
|
|
|
4285
4345
|
}
|
|
4286
4346
|
}
|
|
4287
4347
|
};
|
|
4348
|
+
var MCPServer = MCPServerClass;
|
|
4288
4349
|
function createMCPServer(name, config = {}) {
|
|
4289
|
-
const instance = new
|
|
4350
|
+
const instance = new MCPServerClass({
|
|
4290
4351
|
name,
|
|
4291
4352
|
version: config.version || "1.0.0",
|
|
4292
4353
|
description: config.description,
|
|
@@ -4368,12 +4429,13 @@ var SupabaseOAuthProvider = class {
|
|
|
4368
4429
|
}
|
|
4369
4430
|
}
|
|
4370
4431
|
getUserInfo(payload) {
|
|
4432
|
+
const userMetadata = payload.user_metadata;
|
|
4371
4433
|
return {
|
|
4372
4434
|
userId: payload.sub || payload.user_id,
|
|
4373
4435
|
email: payload.email,
|
|
4374
|
-
name:
|
|
4375
|
-
username:
|
|
4376
|
-
picture:
|
|
4436
|
+
name: userMetadata?.name || userMetadata?.full_name,
|
|
4437
|
+
username: userMetadata?.username,
|
|
4438
|
+
picture: userMetadata?.avatar_url,
|
|
4377
4439
|
roles: payload.role ? [payload.role] : [],
|
|
4378
4440
|
permissions: payload.aal ? [`aal:${payload.aal}`] : [],
|
|
4379
4441
|
// Include Supabase-specific claims
|
|
@@ -4446,6 +4508,7 @@ var Auth0OAuthProvider = class {
|
|
|
4446
4508
|
}
|
|
4447
4509
|
}
|
|
4448
4510
|
getUserInfo(payload) {
|
|
4511
|
+
const scope = payload.scope;
|
|
4449
4512
|
return {
|
|
4450
4513
|
userId: payload.sub,
|
|
4451
4514
|
email: payload.email,
|
|
@@ -4458,7 +4521,7 @@ var Auth0OAuthProvider = class {
|
|
|
4458
4521
|
// Auth0 can include roles (if configured)
|
|
4459
4522
|
roles: payload.roles || payload["https://your-app.com/roles"] || [],
|
|
4460
4523
|
// Include scope as well
|
|
4461
|
-
scopes:
|
|
4524
|
+
scopes: scope ? scope.split(" ") : [],
|
|
4462
4525
|
// Additional Auth0-specific claims
|
|
4463
4526
|
email_verified: payload.email_verified,
|
|
4464
4527
|
updated_at: payload.updated_at
|
|
@@ -4530,8 +4593,10 @@ var KeycloakOAuthProvider = class {
|
|
|
4530
4593
|
}
|
|
4531
4594
|
}
|
|
4532
4595
|
getUserInfo(payload) {
|
|
4533
|
-
const
|
|
4534
|
-
const
|
|
4596
|
+
const realmAccess = payload.realm_access;
|
|
4597
|
+
const realmRoles = realmAccess?.roles || [];
|
|
4598
|
+
const resourceAccess = payload.resource_access;
|
|
4599
|
+
const clientRoles = this.config.clientId && (resourceAccess?.[this.config.clientId]?.roles || []) || [];
|
|
4535
4600
|
const allRoles = [...realmRoles, ...clientRoles];
|
|
4536
4601
|
const permissions = [];
|
|
4537
4602
|
if (payload.resource_access) {
|
|
@@ -4545,6 +4610,7 @@ var KeycloakOAuthProvider = class {
|
|
|
4545
4610
|
}
|
|
4546
4611
|
);
|
|
4547
4612
|
}
|
|
4613
|
+
const scope = payload.scope;
|
|
4548
4614
|
return {
|
|
4549
4615
|
userId: payload.sub,
|
|
4550
4616
|
email: payload.email,
|
|
@@ -4555,7 +4621,7 @@ var KeycloakOAuthProvider = class {
|
|
|
4555
4621
|
roles: allRoles,
|
|
4556
4622
|
permissions,
|
|
4557
4623
|
// Include scope as well
|
|
4558
|
-
scopes:
|
|
4624
|
+
scopes: scope ? scope.split(" ") : [],
|
|
4559
4625
|
// Keycloak-specific claims
|
|
4560
4626
|
email_verified: payload.email_verified,
|
|
4561
4627
|
given_name: payload.given_name,
|
|
@@ -4684,7 +4750,7 @@ var CustomOAuthProvider = class {
|
|
|
4684
4750
|
async verifyToken(token) {
|
|
4685
4751
|
try {
|
|
4686
4752
|
const result = await this.config.verifyToken(token);
|
|
4687
|
-
return
|
|
4753
|
+
return result;
|
|
4688
4754
|
} catch (error2) {
|
|
4689
4755
|
throw new Error(`Custom OAuth verification failed: ${error2}`);
|
|
4690
4756
|
}
|
|
@@ -4693,16 +4759,19 @@ var CustomOAuthProvider = class {
|
|
|
4693
4759
|
if (this.config.getUserInfo) {
|
|
4694
4760
|
return this.config.getUserInfo(payload);
|
|
4695
4761
|
}
|
|
4762
|
+
const scope = payload.scope;
|
|
4763
|
+
const roles = payload.roles;
|
|
4764
|
+
const permissions = payload.permissions;
|
|
4696
4765
|
return {
|
|
4697
4766
|
userId: payload.sub || payload.user_id || payload.id,
|
|
4698
|
-
email: payload.email,
|
|
4699
|
-
name: payload.name,
|
|
4700
|
-
username: payload.username || payload.preferred_username,
|
|
4701
|
-
nickname: payload.nickname,
|
|
4702
|
-
picture: payload.picture || payload.avatar_url,
|
|
4703
|
-
roles:
|
|
4704
|
-
permissions:
|
|
4705
|
-
scopes:
|
|
4767
|
+
email: payload.email ? payload.email : void 0,
|
|
4768
|
+
name: payload.name ? payload.name : void 0,
|
|
4769
|
+
username: payload.username || payload.preferred_username ? payload.username || payload.preferred_username : void 0,
|
|
4770
|
+
nickname: payload.nickname ? payload.nickname : void 0,
|
|
4771
|
+
picture: payload.picture || payload.avatar_url ? payload.picture || payload.avatar_url : void 0,
|
|
4772
|
+
roles: Array.isArray(roles) ? roles : [],
|
|
4773
|
+
permissions: Array.isArray(permissions) ? permissions : [],
|
|
4774
|
+
scopes: scope ? scope.split(" ") : []
|
|
4706
4775
|
};
|
|
4707
4776
|
}
|
|
4708
4777
|
getIssuer() {
|