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
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-L6P6GBCW.js";
|
|
11
11
|
import {
|
|
12
12
|
convertToolResultToResourceResult
|
|
13
13
|
} from "../../chunk-362PI25Z.js";
|
|
@@ -307,37 +307,12 @@ function binary(base64Data, mimeType) {
|
|
|
307
307
|
}
|
|
308
308
|
__name(binary, "binary");
|
|
309
309
|
function widget(config) {
|
|
310
|
-
const {
|
|
311
|
-
name,
|
|
312
|
-
data,
|
|
313
|
-
message,
|
|
314
|
-
invoking,
|
|
315
|
-
invoked,
|
|
316
|
-
widgetAccessible = true,
|
|
317
|
-
resultCanProduceWidget = true,
|
|
318
|
-
buildId
|
|
319
|
-
} = config;
|
|
320
|
-
const randomId = Math.random().toString(36).substring(2, 15);
|
|
321
|
-
const buildIdPart = buildId ? `-${buildId}` : "";
|
|
322
|
-
const uniqueUri = `ui://widget/${name}${buildIdPart}-${randomId}.html`;
|
|
323
|
-
const metadata = {
|
|
324
|
-
"openai/outputTemplate": uniqueUri,
|
|
325
|
-
"openai/widgetAccessible": widgetAccessible,
|
|
326
|
-
"openai/resultCanProduceWidget": resultCanProduceWidget
|
|
327
|
-
};
|
|
328
|
-
if (invoking) {
|
|
329
|
-
metadata["openai/toolInvocation/invoking"] = invoking;
|
|
330
|
-
}
|
|
331
|
-
if (invoked) {
|
|
332
|
-
metadata["openai/toolInvocation/invoked"] = invoked;
|
|
333
|
-
}
|
|
334
|
-
const displayMessage = message || `Displaying ${name}`;
|
|
310
|
+
const { data, message } = config;
|
|
335
311
|
return {
|
|
336
|
-
_meta: metadata,
|
|
337
312
|
content: [
|
|
338
313
|
{
|
|
339
314
|
type: "text",
|
|
340
|
-
text:
|
|
315
|
+
text: message || ""
|
|
341
316
|
}
|
|
342
317
|
],
|
|
343
318
|
// structuredContent will be injected as window.openai.toolOutput by Apps SDK
|
|
@@ -1006,6 +981,7 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
|
|
|
1006
981
|
const props = metadata.inputs || {};
|
|
1007
982
|
const description = metadata.description || `Widget: ${widgetName}`;
|
|
1008
983
|
const title = metadata.title || widgetName;
|
|
984
|
+
const exposeAsTool = metadata.exposeAsTool !== void 0 ? metadata.exposeAsTool : true;
|
|
1009
985
|
const mcp_connect_domain = serverConfig.serverBaseUrl ? new URL(serverConfig.serverBaseUrl || "").origin : null;
|
|
1010
986
|
return {
|
|
1011
987
|
name: widgetName,
|
|
@@ -1021,7 +997,8 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
|
|
|
1021
997
|
type: "appsSdk",
|
|
1022
998
|
props,
|
|
1023
999
|
html: html2,
|
|
1024
|
-
dev: isDev
|
|
1000
|
+
dev: isDev,
|
|
1001
|
+
exposeAsTool
|
|
1025
1002
|
},
|
|
1026
1003
|
...metadata._meta || {}
|
|
1027
1004
|
},
|
|
@@ -1587,25 +1564,31 @@ function setupWidgetRoutes(app, serverConfig) {
|
|
|
1587
1564
|
__name(setupWidgetRoutes, "setupWidgetRoutes");
|
|
1588
1565
|
|
|
1589
1566
|
// src/server/widgets/ui-resource-registration.ts
|
|
1590
|
-
function uiResourceRegistration(definition) {
|
|
1567
|
+
function uiResourceRegistration(server, definition) {
|
|
1591
1568
|
const displayName = definition.title || definition.name;
|
|
1569
|
+
if (definition.type === "appsSdk" && definition._meta) {
|
|
1570
|
+
server.widgetDefinitions.set(
|
|
1571
|
+
definition.name,
|
|
1572
|
+
definition._meta
|
|
1573
|
+
);
|
|
1574
|
+
}
|
|
1592
1575
|
let resourceUri;
|
|
1593
1576
|
let mimeType;
|
|
1594
1577
|
switch (definition.type) {
|
|
1595
1578
|
case "externalUrl":
|
|
1596
|
-
resourceUri = generateWidgetUri(definition.widget,
|
|
1579
|
+
resourceUri = generateWidgetUri(definition.widget, server.buildId);
|
|
1597
1580
|
mimeType = "text/uri-list";
|
|
1598
1581
|
break;
|
|
1599
1582
|
case "rawHtml":
|
|
1600
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
1583
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId);
|
|
1601
1584
|
mimeType = "text/html";
|
|
1602
1585
|
break;
|
|
1603
1586
|
case "remoteDom":
|
|
1604
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
1587
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId);
|
|
1605
1588
|
mimeType = "application/vnd.mcp-ui.remote-dom+javascript";
|
|
1606
1589
|
break;
|
|
1607
1590
|
case "appsSdk":
|
|
1608
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
1591
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId, ".html");
|
|
1609
1592
|
mimeType = "text/html+skybridge";
|
|
1610
1593
|
break;
|
|
1611
1594
|
default:
|
|
@@ -1614,12 +1597,12 @@ function uiResourceRegistration(definition) {
|
|
|
1614
1597
|
);
|
|
1615
1598
|
}
|
|
1616
1599
|
const serverConfig = {
|
|
1617
|
-
serverHost:
|
|
1618
|
-
serverPort:
|
|
1619
|
-
serverBaseUrl:
|
|
1620
|
-
buildId:
|
|
1600
|
+
serverHost: server.serverHost,
|
|
1601
|
+
serverPort: server.serverPort || 3e3,
|
|
1602
|
+
serverBaseUrl: server.serverBaseUrl,
|
|
1603
|
+
buildId: server.buildId
|
|
1621
1604
|
};
|
|
1622
|
-
|
|
1605
|
+
server.resource({
|
|
1623
1606
|
name: definition.name,
|
|
1624
1607
|
uri: resourceUri,
|
|
1625
1608
|
title: definition.title,
|
|
@@ -1641,9 +1624,9 @@ function uiResourceRegistration(definition) {
|
|
|
1641
1624
|
}, "readCallback")
|
|
1642
1625
|
});
|
|
1643
1626
|
if (definition.type === "appsSdk") {
|
|
1644
|
-
const buildIdPart =
|
|
1627
|
+
const buildIdPart = server.buildId ? `-${server.buildId}` : "";
|
|
1645
1628
|
const uriTemplate = `ui://widget/${definition.name}${buildIdPart}-{id}.html`;
|
|
1646
|
-
|
|
1629
|
+
server.resourceTemplate({
|
|
1647
1630
|
name: `${definition.name}-dynamic`,
|
|
1648
1631
|
resourceTemplate: {
|
|
1649
1632
|
uriTemplate,
|
|
@@ -1668,70 +1651,77 @@ function uiResourceRegistration(definition) {
|
|
|
1668
1651
|
}, "readCallback")
|
|
1669
1652
|
});
|
|
1670
1653
|
}
|
|
1671
|
-
const
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
const
|
|
1675
|
-
|
|
1676
|
-
"openai/
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1654
|
+
const widgetMetadata = definition._meta?.["mcp-use/widget"];
|
|
1655
|
+
const exposeAsTool = definition.exposeAsTool ?? widgetMetadata?.exposeAsTool ?? true;
|
|
1656
|
+
if (exposeAsTool) {
|
|
1657
|
+
const toolMetadata = definition._meta || {};
|
|
1658
|
+
if (definition.type === "appsSdk" && definition.appsSdkMetadata) {
|
|
1659
|
+
toolMetadata["openai/outputTemplate"] = resourceUri;
|
|
1660
|
+
const toolMetadataFields = [
|
|
1661
|
+
"openai/toolInvocation/invoking",
|
|
1662
|
+
"openai/toolInvocation/invoked",
|
|
1663
|
+
"openai/widgetAccessible",
|
|
1664
|
+
"openai/resultCanProduceWidget"
|
|
1665
|
+
];
|
|
1666
|
+
for (const field of toolMetadataFields) {
|
|
1667
|
+
if (definition.appsSdkMetadata[field] !== void 0) {
|
|
1668
|
+
toolMetadata[field] = definition.appsSdkMetadata[field];
|
|
1669
|
+
}
|
|
1683
1670
|
}
|
|
1684
1671
|
}
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
const randomId = Math.random().toString(36).substring(2, 15);
|
|
1700
|
-
const uniqueUri = generateWidgetUri(
|
|
1701
|
-
definition.name,
|
|
1702
|
-
this.buildId,
|
|
1703
|
-
".html",
|
|
1704
|
-
randomId
|
|
1672
|
+
server.tool(
|
|
1673
|
+
{
|
|
1674
|
+
name: definition.name,
|
|
1675
|
+
title: definition.title,
|
|
1676
|
+
description: definition.description,
|
|
1677
|
+
inputs: convertPropsToInputs(definition.props),
|
|
1678
|
+
annotations: definition.toolAnnotations,
|
|
1679
|
+
_meta: Object.keys(toolMetadata).length > 0 ? toolMetadata : void 0
|
|
1680
|
+
},
|
|
1681
|
+
async (params) => {
|
|
1682
|
+
const uiResource = await createWidgetUIResource(
|
|
1683
|
+
definition,
|
|
1684
|
+
params,
|
|
1685
|
+
serverConfig
|
|
1705
1686
|
);
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1687
|
+
if (definition.type === "appsSdk") {
|
|
1688
|
+
const randomId = Math.random().toString(36).substring(2, 15);
|
|
1689
|
+
const uniqueUri = generateWidgetUri(
|
|
1690
|
+
definition.name,
|
|
1691
|
+
server.buildId,
|
|
1692
|
+
".html",
|
|
1693
|
+
randomId
|
|
1694
|
+
);
|
|
1695
|
+
const uniqueToolMetadata = {
|
|
1696
|
+
...toolMetadata,
|
|
1697
|
+
"openai/outputTemplate": uniqueUri
|
|
1698
|
+
};
|
|
1699
|
+
return {
|
|
1700
|
+
_meta: uniqueToolMetadata,
|
|
1701
|
+
content: [
|
|
1702
|
+
{
|
|
1703
|
+
type: "text",
|
|
1704
|
+
text: `Displaying ${displayName}`
|
|
1705
|
+
}
|
|
1706
|
+
],
|
|
1707
|
+
// structuredContent will be injected as window.openai.toolOutput by Apps SDK
|
|
1708
|
+
structuredContent: params
|
|
1709
|
+
};
|
|
1710
|
+
}
|
|
1710
1711
|
return {
|
|
1711
|
-
_meta: uniqueToolMetadata,
|
|
1712
1712
|
content: [
|
|
1713
1713
|
{
|
|
1714
1714
|
type: "text",
|
|
1715
|
-
text: `Displaying ${displayName}
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1715
|
+
text: `Displaying ${displayName}`,
|
|
1716
|
+
description: `Show MCP-UI widget for ${displayName}`
|
|
1717
|
+
},
|
|
1718
|
+
uiResource
|
|
1719
|
+
]
|
|
1720
1720
|
};
|
|
1721
1721
|
}
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
type: "text",
|
|
1726
|
-
text: `Displaying ${displayName}`,
|
|
1727
|
-
description: `Show MCP-UI widget for ${displayName}`
|
|
1728
|
-
},
|
|
1729
|
-
uiResource
|
|
1730
|
-
]
|
|
1731
|
-
};
|
|
1732
|
-
}, "cb")
|
|
1733
|
-
});
|
|
1734
|
-
return this;
|
|
1722
|
+
);
|
|
1723
|
+
}
|
|
1724
|
+
return server;
|
|
1735
1725
|
}
|
|
1736
1726
|
__name(uiResourceRegistration, "uiResourceRegistration");
|
|
1737
1727
|
|
|
@@ -2059,7 +2049,7 @@ function registerResource(resourceDefinition, callback) {
|
|
|
2059
2049
|
const explicitMimeType = resourceDefinition.mimeType;
|
|
2060
2050
|
const wrappedCallback = /* @__PURE__ */ __name(async () => {
|
|
2061
2051
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2062
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2052
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
|
|
2063
2053
|
const initialRequestContext = getRequestContext2();
|
|
2064
2054
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2065
2055
|
const { requestContext } = findSessionContext2(
|
|
@@ -2137,7 +2127,7 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
|
|
|
2137
2127
|
async (uri) => {
|
|
2138
2128
|
const params = this.parseTemplateUri(uriTemplate, uri.toString());
|
|
2139
2129
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2140
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2130
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
|
|
2141
2131
|
const initialRequestContext = getRequestContext2();
|
|
2142
2132
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2143
2133
|
const { requestContext } = findSessionContext2(
|
|
@@ -2192,7 +2182,7 @@ function registerPrompt(promptDefinition, callback) {
|
|
|
2192
2182
|
}
|
|
2193
2183
|
const wrappedCallback = /* @__PURE__ */ __name(async (params, extra) => {
|
|
2194
2184
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2195
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2185
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
|
|
2196
2186
|
const initialRequestContext = getRequestContext2();
|
|
2197
2187
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2198
2188
|
const { requestContext } = findSessionContext2(
|
|
@@ -2780,12 +2770,13 @@ function createBearerAuthMiddleware(provider, baseUrl) {
|
|
|
2780
2770
|
const result = await provider.verifyToken(token);
|
|
2781
2771
|
const payload = result.payload;
|
|
2782
2772
|
const user = provider.getUserInfo(payload);
|
|
2773
|
+
const scope = payload.scope;
|
|
2783
2774
|
const authInfo = {
|
|
2784
2775
|
user,
|
|
2785
2776
|
payload,
|
|
2786
2777
|
accessToken: token,
|
|
2787
2778
|
// Extract scopes from scope claim (OAuth standard)
|
|
2788
|
-
scopes:
|
|
2779
|
+
scopes: scope ? scope.split(" ") : [],
|
|
2789
2780
|
// Extract permissions (Auth0 style, or custom)
|
|
2790
2781
|
permissions: payload.permissions || []
|
|
2791
2782
|
};
|
|
@@ -2833,9 +2824,9 @@ async function setupOAuthForServer(app, oauthProvider, baseUrl, state) {
|
|
|
2833
2824
|
__name(setupOAuthForServer, "setupOAuthForServer");
|
|
2834
2825
|
|
|
2835
2826
|
// src/server/mcp-server.ts
|
|
2836
|
-
var
|
|
2827
|
+
var MCPServerClass = class {
|
|
2837
2828
|
static {
|
|
2838
|
-
__name(this, "
|
|
2829
|
+
__name(this, "MCPServerClass");
|
|
2839
2830
|
}
|
|
2840
2831
|
/**
|
|
2841
2832
|
* Native MCP server instance from @modelcontextprotocol/sdk
|
|
@@ -2859,8 +2850,6 @@ var MCPServer = class {
|
|
|
2859
2850
|
buildId;
|
|
2860
2851
|
sessions = /* @__PURE__ */ new Map();
|
|
2861
2852
|
idleCleanupInterval;
|
|
2862
|
-
oauthConfig;
|
|
2863
|
-
// Store OAuth config for lazy initialization
|
|
2864
2853
|
oauthSetupState = {
|
|
2865
2854
|
complete: false,
|
|
2866
2855
|
provider: void 0,
|
|
@@ -2878,6 +2867,11 @@ var MCPServer = class {
|
|
|
2878
2867
|
resources: /* @__PURE__ */ new Map(),
|
|
2879
2868
|
resourceTemplates: /* @__PURE__ */ new Map()
|
|
2880
2869
|
};
|
|
2870
|
+
/**
|
|
2871
|
+
* Storage for widget definitions, used to inject metadata into tool responses
|
|
2872
|
+
* when using the widget() helper with returnsWidget option
|
|
2873
|
+
*/
|
|
2874
|
+
widgetDefinitions = /* @__PURE__ */ new Map();
|
|
2881
2875
|
/**
|
|
2882
2876
|
* Resource subscription manager for tracking and notifying resource updates
|
|
2883
2877
|
*/
|
|
@@ -2924,7 +2918,7 @@ var MCPServer = class {
|
|
|
2924
2918
|
}
|
|
2925
2919
|
);
|
|
2926
2920
|
this.app = createHonoApp(requestLogger);
|
|
2927
|
-
this.
|
|
2921
|
+
this.oauthProvider = config.oauth;
|
|
2928
2922
|
this.wrapRegistrationMethods();
|
|
2929
2923
|
return createHonoProxy(this, this.app);
|
|
2930
2924
|
}
|
|
@@ -2939,38 +2933,97 @@ var MCPServer = class {
|
|
|
2939
2933
|
const originalResourceTemplate = registerResourceTemplate;
|
|
2940
2934
|
const self = this;
|
|
2941
2935
|
this.tool = ((toolDefinition, callback) => {
|
|
2942
|
-
const
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2936
|
+
const widgetConfig = toolDefinition.widget;
|
|
2937
|
+
const widgetName = widgetConfig?.name;
|
|
2938
|
+
if (widgetConfig && widgetName) {
|
|
2939
|
+
const buildIdPart = self.buildId ? `-${self.buildId}` : "";
|
|
2940
|
+
const outputTemplate = `ui://widget/${widgetName}${buildIdPart}.html`;
|
|
2941
|
+
toolDefinition._meta = {
|
|
2942
|
+
...toolDefinition._meta,
|
|
2943
|
+
"openai/outputTemplate": outputTemplate,
|
|
2944
|
+
"openai/toolInvocation/invoking": widgetConfig.invoking ?? `Loading ${widgetName}...`,
|
|
2945
|
+
"openai/toolInvocation/invoked": widgetConfig.invoked ?? `${widgetName} ready`,
|
|
2946
|
+
"openai/widgetAccessible": widgetConfig.widgetAccessible ?? true,
|
|
2947
|
+
"openai/resultCanProduceWidget": widgetConfig.resultCanProduceWidget ?? true
|
|
2948
|
+
};
|
|
2949
|
+
}
|
|
2950
|
+
let actualCallback = callback || toolDefinition.cb;
|
|
2951
|
+
if (widgetConfig && widgetName && actualCallback) {
|
|
2952
|
+
const originalCallback = actualCallback;
|
|
2953
|
+
actualCallback = /* @__PURE__ */ __name((async (params, ctx) => {
|
|
2954
|
+
const result = await originalCallback(params, ctx);
|
|
2955
|
+
const widgetDef = self.widgetDefinitions.get(widgetName);
|
|
2956
|
+
if (result && typeof result === "object") {
|
|
2957
|
+
const randomId = Math.random().toString(36).substring(2, 15);
|
|
2958
|
+
const buildIdPart = self.buildId ? `-${self.buildId}` : "";
|
|
2959
|
+
const uniqueUri = `ui://widget/${widgetName}${buildIdPart}-${randomId}.html`;
|
|
2960
|
+
const responseMeta = {
|
|
2961
|
+
...widgetDef || {},
|
|
2962
|
+
// Include mcp-use/widget and other widget metadata
|
|
2963
|
+
"openai/outputTemplate": uniqueUri,
|
|
2964
|
+
"openai/toolInvocation/invoking": widgetConfig.invoking ?? `Loading ${widgetName}...`,
|
|
2965
|
+
"openai/toolInvocation/invoked": widgetConfig.invoked ?? `${widgetName} ready`,
|
|
2966
|
+
"openai/widgetAccessible": widgetConfig.widgetAccessible ?? true,
|
|
2967
|
+
"openai/resultCanProduceWidget": widgetConfig.resultCanProduceWidget ?? true
|
|
2968
|
+
};
|
|
2969
|
+
result._meta = responseMeta;
|
|
2970
|
+
if (result.content?.[0]?.type === "text" && !result.content[0].text) {
|
|
2971
|
+
result.content[0].text = `Displaying ${widgetName}`;
|
|
2972
|
+
}
|
|
2973
|
+
}
|
|
2974
|
+
return result;
|
|
2975
|
+
}), "actualCallback");
|
|
2976
|
+
}
|
|
2977
|
+
if (actualCallback) {
|
|
2978
|
+
self.registrationRecipes.tools.set(toolDefinition.name, {
|
|
2979
|
+
config: toolDefinition,
|
|
2980
|
+
handler: actualCallback
|
|
2981
|
+
});
|
|
2982
|
+
}
|
|
2983
|
+
return originalTool.call(self, toolDefinition, actualCallback);
|
|
2948
2984
|
});
|
|
2949
|
-
this.prompt =
|
|
2985
|
+
this.prompt = ((promptDefinition, callback) => {
|
|
2950
2986
|
const actualCallback = callback || promptDefinition.cb;
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2987
|
+
if (actualCallback) {
|
|
2988
|
+
self.registrationRecipes.prompts.set(promptDefinition.name, {
|
|
2989
|
+
config: promptDefinition,
|
|
2990
|
+
handler: actualCallback
|
|
2991
|
+
});
|
|
2992
|
+
}
|
|
2993
|
+
return originalPrompt.call(
|
|
2994
|
+
self,
|
|
2995
|
+
promptDefinition,
|
|
2996
|
+
callback
|
|
2997
|
+
);
|
|
2998
|
+
});
|
|
2999
|
+
this.resource = ((resourceDefinition, callback) => {
|
|
2958
3000
|
const actualCallback = callback || resourceDefinition.readCallback;
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
3001
|
+
if (actualCallback) {
|
|
3002
|
+
const resourceKey = `${resourceDefinition.name}:${resourceDefinition.uri}`;
|
|
3003
|
+
self.registrationRecipes.resources.set(resourceKey, {
|
|
3004
|
+
config: resourceDefinition,
|
|
3005
|
+
handler: actualCallback
|
|
3006
|
+
});
|
|
3007
|
+
}
|
|
2964
3008
|
return originalResource.call(self, resourceDefinition, callback);
|
|
2965
|
-
};
|
|
2966
|
-
this.resourceTemplate =
|
|
3009
|
+
});
|
|
3010
|
+
this.resourceTemplate = ((templateDefinition, callback) => {
|
|
2967
3011
|
const actualCallback = callback || templateDefinition.readCallback;
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
|
|
3012
|
+
if (actualCallback) {
|
|
3013
|
+
self.registrationRecipes.resourceTemplates.set(
|
|
3014
|
+
templateDefinition.name,
|
|
3015
|
+
{
|
|
3016
|
+
config: templateDefinition,
|
|
3017
|
+
handler: actualCallback
|
|
3018
|
+
}
|
|
3019
|
+
);
|
|
3020
|
+
}
|
|
3021
|
+
return originalResourceTemplate.call(
|
|
3022
|
+
self,
|
|
3023
|
+
templateDefinition,
|
|
3024
|
+
callback
|
|
3025
|
+
);
|
|
3026
|
+
});
|
|
2974
3027
|
}
|
|
2975
3028
|
/**
|
|
2976
3029
|
* Create a new server instance for a session following official SDK pattern.
|
|
@@ -3028,11 +3081,12 @@ var MCPServer = class {
|
|
|
3028
3081
|
console.log("[createMessage] Got result successfully");
|
|
3029
3082
|
return result;
|
|
3030
3083
|
} catch (err) {
|
|
3084
|
+
const error2 = err;
|
|
3031
3085
|
console.error(
|
|
3032
3086
|
"[createMessage] Error:",
|
|
3033
|
-
|
|
3087
|
+
error2.message,
|
|
3034
3088
|
"Code:",
|
|
3035
|
-
|
|
3089
|
+
error2.code
|
|
3036
3090
|
);
|
|
3037
3091
|
throw err;
|
|
3038
3092
|
}
|
|
@@ -3081,8 +3135,8 @@ var MCPServer = class {
|
|
|
3081
3135
|
} else {
|
|
3082
3136
|
argsSchema = void 0;
|
|
3083
3137
|
}
|
|
3084
|
-
const wrappedHandler = /* @__PURE__ */ __name(async (params) => {
|
|
3085
|
-
const result = await handler(params);
|
|
3138
|
+
const wrappedHandler = /* @__PURE__ */ __name(async (params, extra) => {
|
|
3139
|
+
const result = await handler(params, extra);
|
|
3086
3140
|
if ("messages" in result && Array.isArray(result.messages)) {
|
|
3087
3141
|
return result;
|
|
3088
3142
|
}
|
|
@@ -3101,8 +3155,8 @@ var MCPServer = class {
|
|
|
3101
3155
|
}
|
|
3102
3156
|
for (const [_key, recipe] of this.registrationRecipes.resources) {
|
|
3103
3157
|
const { config, handler } = recipe;
|
|
3104
|
-
const wrappedHandler = /* @__PURE__ */ __name(async () => {
|
|
3105
|
-
const result = await handler();
|
|
3158
|
+
const wrappedHandler = /* @__PURE__ */ __name(async (extra) => {
|
|
3159
|
+
const result = await handler(extra);
|
|
3106
3160
|
if ("contents" in result && Array.isArray(result.contents)) {
|
|
3107
3161
|
return result;
|
|
3108
3162
|
}
|
|
@@ -3147,20 +3201,23 @@ var MCPServer = class {
|
|
|
3147
3201
|
config.name,
|
|
3148
3202
|
template,
|
|
3149
3203
|
metadata,
|
|
3150
|
-
async (uri) => {
|
|
3204
|
+
async (uri, extra) => {
|
|
3151
3205
|
const params = this.parseTemplateUri(uriTemplate, uri.toString());
|
|
3152
|
-
const result = await handler(uri, params);
|
|
3206
|
+
const result = await handler(uri, params, extra);
|
|
3153
3207
|
if ("contents" in result && Array.isArray(result.contents)) {
|
|
3154
3208
|
return result;
|
|
3155
3209
|
}
|
|
3156
3210
|
const { convertToolResultToResourceResult: convertToolResultToResourceResult2 } = await import("../../conversion-5MA4VY3B.js");
|
|
3157
|
-
return convertToolResultToResourceResult2(
|
|
3211
|
+
return convertToolResultToResourceResult2(
|
|
3212
|
+
uri.toString(),
|
|
3213
|
+
result
|
|
3214
|
+
);
|
|
3158
3215
|
}
|
|
3159
3216
|
);
|
|
3160
3217
|
}
|
|
3161
3218
|
newServer.server.setRequestHandler(
|
|
3162
3219
|
z2.object({ method: z2.literal("logging/setLevel") }).passthrough(),
|
|
3163
|
-
async (request) => {
|
|
3220
|
+
(async (request, extra) => {
|
|
3164
3221
|
const level = request.params?.level;
|
|
3165
3222
|
if (!level) {
|
|
3166
3223
|
throw new McpError(
|
|
@@ -3199,7 +3256,7 @@ var MCPServer = class {
|
|
|
3199
3256
|
"[MCP] Could not find session for logging/setLevel request"
|
|
3200
3257
|
);
|
|
3201
3258
|
throw new McpError(ErrorCode.InternalError, "Could not find session");
|
|
3202
|
-
}
|
|
3259
|
+
})
|
|
3203
3260
|
);
|
|
3204
3261
|
this.subscriptionManager.registerHandlers(newServer, this.sessions);
|
|
3205
3262
|
return newServer;
|
|
@@ -3215,18 +3272,18 @@ var MCPServer = class {
|
|
|
3215
3272
|
this.serverPort
|
|
3216
3273
|
);
|
|
3217
3274
|
}
|
|
3218
|
-
// Tool registration helper
|
|
3219
|
-
tool
|
|
3275
|
+
// Tool registration helper - type is set in wrapRegistrationMethods
|
|
3276
|
+
tool;
|
|
3220
3277
|
// Schema conversion helpers (used by tool registration)
|
|
3221
3278
|
convertZodSchemaToParams = convertZodSchemaToParams;
|
|
3222
3279
|
createParamsSchema = createParamsSchema;
|
|
3223
3280
|
// Template URI parsing helper (used by resource templates)
|
|
3224
3281
|
parseTemplateUri = parseTemplateUri;
|
|
3225
|
-
// Resource registration helpers
|
|
3226
|
-
resource
|
|
3227
|
-
resourceTemplate
|
|
3228
|
-
// Prompt registration helper
|
|
3229
|
-
prompt
|
|
3282
|
+
// Resource registration helpers - types are set in wrapRegistrationMethods
|
|
3283
|
+
resource;
|
|
3284
|
+
resourceTemplate;
|
|
3285
|
+
// Prompt registration helper - type is set in wrapRegistrationMethods
|
|
3286
|
+
prompt;
|
|
3230
3287
|
// Notification helpers
|
|
3231
3288
|
getActiveSessions = getActiveSessions;
|
|
3232
3289
|
sendNotification = sendNotification;
|
|
@@ -3249,7 +3306,9 @@ var MCPServer = class {
|
|
|
3249
3306
|
async notifyResourceUpdated(uri) {
|
|
3250
3307
|
return this.subscriptionManager.notifyResourceUpdated(uri, this.sessions);
|
|
3251
3308
|
}
|
|
3252
|
-
uiResource =
|
|
3309
|
+
uiResource = /* @__PURE__ */ __name((definition) => {
|
|
3310
|
+
return uiResourceRegistration(this, definition);
|
|
3311
|
+
}, "uiResource");
|
|
3253
3312
|
/**
|
|
3254
3313
|
* Mount MCP server endpoints at /mcp and /sse
|
|
3255
3314
|
*
|
|
@@ -3337,7 +3396,7 @@ var MCPServer = class {
|
|
|
3337
3396
|
this.serverHost,
|
|
3338
3397
|
this.serverPort
|
|
3339
3398
|
);
|
|
3340
|
-
if (this.
|
|
3399
|
+
if (this.oauthProvider && !this.oauthSetupState.complete) {
|
|
3341
3400
|
await setupOAuthForServer(
|
|
3342
3401
|
this.app,
|
|
3343
3402
|
this.oauthProvider,
|
|
@@ -3390,7 +3449,7 @@ var MCPServer = class {
|
|
|
3390
3449
|
* ```
|
|
3391
3450
|
*/
|
|
3392
3451
|
async getHandler(options) {
|
|
3393
|
-
if (this.
|
|
3452
|
+
if (this.oauthProvider && !this.oauthSetupState.complete) {
|
|
3394
3453
|
await setupOAuthForServer(
|
|
3395
3454
|
this.app,
|
|
3396
3455
|
this.oauthProvider,
|
|
@@ -3460,8 +3519,9 @@ var MCPServer = class {
|
|
|
3460
3519
|
}
|
|
3461
3520
|
}
|
|
3462
3521
|
};
|
|
3522
|
+
var MCPServer = MCPServerClass;
|
|
3463
3523
|
function createMCPServer(name, config = {}) {
|
|
3464
|
-
const instance = new
|
|
3524
|
+
const instance = new MCPServerClass({
|
|
3465
3525
|
name,
|
|
3466
3526
|
version: config.version || "1.0.0",
|
|
3467
3527
|
description: config.description,
|
|
@@ -3545,12 +3605,13 @@ var SupabaseOAuthProvider = class {
|
|
|
3545
3605
|
}
|
|
3546
3606
|
}
|
|
3547
3607
|
getUserInfo(payload) {
|
|
3608
|
+
const userMetadata = payload.user_metadata;
|
|
3548
3609
|
return {
|
|
3549
3610
|
userId: payload.sub || payload.user_id,
|
|
3550
3611
|
email: payload.email,
|
|
3551
|
-
name:
|
|
3552
|
-
username:
|
|
3553
|
-
picture:
|
|
3612
|
+
name: userMetadata?.name || userMetadata?.full_name,
|
|
3613
|
+
username: userMetadata?.username,
|
|
3614
|
+
picture: userMetadata?.avatar_url,
|
|
3554
3615
|
roles: payload.role ? [payload.role] : [],
|
|
3555
3616
|
permissions: payload.aal ? [`aal:${payload.aal}`] : [],
|
|
3556
3617
|
// Include Supabase-specific claims
|
|
@@ -3623,6 +3684,7 @@ var Auth0OAuthProvider = class {
|
|
|
3623
3684
|
}
|
|
3624
3685
|
}
|
|
3625
3686
|
getUserInfo(payload) {
|
|
3687
|
+
const scope = payload.scope;
|
|
3626
3688
|
return {
|
|
3627
3689
|
userId: payload.sub,
|
|
3628
3690
|
email: payload.email,
|
|
@@ -3635,7 +3697,7 @@ var Auth0OAuthProvider = class {
|
|
|
3635
3697
|
// Auth0 can include roles (if configured)
|
|
3636
3698
|
roles: payload.roles || payload["https://your-app.com/roles"] || [],
|
|
3637
3699
|
// Include scope as well
|
|
3638
|
-
scopes:
|
|
3700
|
+
scopes: scope ? scope.split(" ") : [],
|
|
3639
3701
|
// Additional Auth0-specific claims
|
|
3640
3702
|
email_verified: payload.email_verified,
|
|
3641
3703
|
updated_at: payload.updated_at
|
|
@@ -3707,8 +3769,10 @@ var KeycloakOAuthProvider = class {
|
|
|
3707
3769
|
}
|
|
3708
3770
|
}
|
|
3709
3771
|
getUserInfo(payload) {
|
|
3710
|
-
const
|
|
3711
|
-
const
|
|
3772
|
+
const realmAccess = payload.realm_access;
|
|
3773
|
+
const realmRoles = realmAccess?.roles || [];
|
|
3774
|
+
const resourceAccess = payload.resource_access;
|
|
3775
|
+
const clientRoles = this.config.clientId && (resourceAccess?.[this.config.clientId]?.roles || []) || [];
|
|
3712
3776
|
const allRoles = [...realmRoles, ...clientRoles];
|
|
3713
3777
|
const permissions = [];
|
|
3714
3778
|
if (payload.resource_access) {
|
|
@@ -3722,6 +3786,7 @@ var KeycloakOAuthProvider = class {
|
|
|
3722
3786
|
}
|
|
3723
3787
|
);
|
|
3724
3788
|
}
|
|
3789
|
+
const scope = payload.scope;
|
|
3725
3790
|
return {
|
|
3726
3791
|
userId: payload.sub,
|
|
3727
3792
|
email: payload.email,
|
|
@@ -3732,7 +3797,7 @@ var KeycloakOAuthProvider = class {
|
|
|
3732
3797
|
roles: allRoles,
|
|
3733
3798
|
permissions,
|
|
3734
3799
|
// Include scope as well
|
|
3735
|
-
scopes:
|
|
3800
|
+
scopes: scope ? scope.split(" ") : [],
|
|
3736
3801
|
// Keycloak-specific claims
|
|
3737
3802
|
email_verified: payload.email_verified,
|
|
3738
3803
|
given_name: payload.given_name,
|
|
@@ -3861,7 +3926,7 @@ var CustomOAuthProvider = class {
|
|
|
3861
3926
|
async verifyToken(token) {
|
|
3862
3927
|
try {
|
|
3863
3928
|
const result = await this.config.verifyToken(token);
|
|
3864
|
-
return
|
|
3929
|
+
return result;
|
|
3865
3930
|
} catch (error2) {
|
|
3866
3931
|
throw new Error(`Custom OAuth verification failed: ${error2}`);
|
|
3867
3932
|
}
|
|
@@ -3870,16 +3935,19 @@ var CustomOAuthProvider = class {
|
|
|
3870
3935
|
if (this.config.getUserInfo) {
|
|
3871
3936
|
return this.config.getUserInfo(payload);
|
|
3872
3937
|
}
|
|
3938
|
+
const scope = payload.scope;
|
|
3939
|
+
const roles = payload.roles;
|
|
3940
|
+
const permissions = payload.permissions;
|
|
3873
3941
|
return {
|
|
3874
3942
|
userId: payload.sub || payload.user_id || payload.id,
|
|
3875
|
-
email: payload.email,
|
|
3876
|
-
name: payload.name,
|
|
3877
|
-
username: payload.username || payload.preferred_username,
|
|
3878
|
-
nickname: payload.nickname,
|
|
3879
|
-
picture: payload.picture || payload.avatar_url,
|
|
3880
|
-
roles:
|
|
3881
|
-
permissions:
|
|
3882
|
-
scopes:
|
|
3943
|
+
email: payload.email ? payload.email : void 0,
|
|
3944
|
+
name: payload.name ? payload.name : void 0,
|
|
3945
|
+
username: payload.username || payload.preferred_username ? payload.username || payload.preferred_username : void 0,
|
|
3946
|
+
nickname: payload.nickname ? payload.nickname : void 0,
|
|
3947
|
+
picture: payload.picture || payload.avatar_url ? payload.picture || payload.avatar_url : void 0,
|
|
3948
|
+
roles: Array.isArray(roles) ? roles : [],
|
|
3949
|
+
permissions: Array.isArray(permissions) ? permissions : [],
|
|
3950
|
+
scopes: scope ? scope.split(" ") : []
|
|
3883
3951
|
};
|
|
3884
3952
|
}
|
|
3885
3953
|
getIssuer() {
|