mcp-use 1.9.1-canary.1 → 1.10.0-canary.10
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-6EYDSXO6.js +942 -0
- package/dist/{chunk-D22NUQTL.js → chunk-BFSVTG6G.js} +213 -12
- package/dist/{chunk-33U4IA4N.js → chunk-BPP5XYP6.js} +99 -5
- package/dist/{chunk-3R5PDYIN.js → chunk-J75I2C26.js} +39 -11
- package/dist/{chunk-MUZ5WYE3.js → chunk-NBSNYHID.js} +22 -13
- package/dist/{chunk-U5BX3ISQ.js → chunk-NRALSDBH.js} +22 -408
- package/dist/{chunk-ZQUCGISK.js → chunk-PL645KUX.js} +21 -5
- package/dist/{chunk-QREDNTLS.js → chunk-ZMA4JG4C.js} +1 -1
- package/dist/index.cjs +854 -122
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -23
- package/dist/src/adapters/langchain_adapter.d.ts +1 -1
- package/dist/src/adapters/langchain_adapter.d.ts.map +1 -1
- package/dist/src/agents/index.cjs +2071 -1620
- package/dist/src/agents/index.js +4 -4
- package/dist/src/agents/mcp_agent.d.ts +5 -0
- package/dist/src/agents/mcp_agent.d.ts.map +1 -1
- package/dist/src/auth/browser-provider.d.ts +2 -2
- package/dist/src/auth/browser-provider.d.ts.map +1 -1
- package/dist/src/auth/callback.d.ts.map +1 -1
- package/dist/src/auth/index.cjs +39 -11
- package/dist/src/auth/index.js +1 -1
- package/dist/src/auth/types.d.ts +1 -1
- package/dist/src/auth/types.d.ts.map +1 -1
- package/dist/src/browser.cjs +3299 -2601
- package/dist/src/browser.d.ts +2 -1
- package/dist/src/browser.d.ts.map +1 -1
- package/dist/src/browser.js +10 -5
- package/dist/src/client/browser.d.ts +5 -0
- package/dist/src/client/browser.d.ts.map +1 -1
- package/dist/src/client/connectors/codeMode.d.ts +1 -1
- package/dist/src/client/connectors/codeMode.d.ts.map +1 -1
- package/dist/src/client/executors/base.d.ts +1 -1
- package/dist/src/client/executors/base.d.ts.map +1 -1
- package/dist/src/client/prompts.cjs +13 -4
- package/dist/src/client/prompts.js +3 -2
- package/dist/src/client.d.ts +7 -1
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/connectors/base.d.ts +56 -6
- package/dist/src/connectors/base.d.ts.map +1 -1
- package/dist/src/connectors/http.d.ts.map +1 -1
- package/dist/src/connectors/stdio.d.ts.map +1 -1
- package/dist/src/connectors/websocket.d.ts +1 -1
- package/dist/src/connectors/websocket.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 +1098 -47
- package/dist/src/react/index.d.ts +1 -1
- package/dist/src/react/index.d.ts.map +1 -1
- package/dist/src/react/index.js +5 -5
- package/dist/src/react/types.d.ts +1 -1
- package/dist/src/react/types.d.ts.map +1 -1
- 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 +1723 -274
- package/dist/src/server/index.d.ts +3 -2
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +488 -245
- package/dist/src/server/mcp-server.d.ts +77 -27
- 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/providers.d.ts +27 -9
- package/dist/src/server/oauth/providers.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/conversion.d.ts +1 -1
- package/dist/src/server/prompts/conversion.d.ts.map +1 -1
- package/dist/src/server/prompts/index.d.ts +6 -5
- package/dist/src/server/prompts/index.d.ts.map +1 -1
- package/dist/src/server/resources/conversion.d.ts +1 -1
- package/dist/src/server/resources/conversion.d.ts.map +1 -1
- package/dist/src/server/resources/index.d.ts +44 -25
- package/dist/src/server/resources/index.d.ts.map +1 -1
- package/dist/src/server/resources/subscriptions.d.ts +1 -1
- package/dist/src/server/resources/subscriptions.d.ts.map +1 -1
- package/dist/src/server/sessions/session-manager.d.ts +11 -5
- package/dist/src/server/sessions/session-manager.d.ts.map +1 -1
- package/dist/src/server/tools/tool-execution-helpers.d.ts +31 -8
- 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 +25 -9
- 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 +3 -2
- package/dist/src/server/types/prompt.d.ts.map +1 -1
- package/dist/src/server/types/resource.d.ts +60 -10
- package/dist/src/server/types/resource.d.ts.map +1 -1
- package/dist/src/server/types/tool-context.d.ts +116 -1
- package/dist/src/server/types/tool-context.d.ts.map +1 -1
- package/dist/src/server/types/tool.d.ts +43 -2
- 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 +17 -29
- package/dist/src/server/utils/response-helpers.d.ts.map +1 -1
- package/dist/src/server/widgets/index.d.ts +3 -3
- 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 +372 -2
- package/dist/src/session.d.ts.map +1 -1
- package/dist/src/task_managers/sse.d.ts +2 -2
- package/dist/src/task_managers/sse.d.ts.map +1 -1
- package/dist/src/task_managers/stdio.d.ts +2 -2
- package/dist/src/task_managers/stdio.d.ts.map +1 -1
- package/dist/src/task_managers/streamable_http.d.ts +2 -2
- package/dist/src/task_managers/streamable_http.d.ts.map +1 -1
- package/dist/src/telemetry/events.d.ts +219 -0
- package/dist/src/telemetry/events.d.ts.map +1 -1
- package/dist/src/telemetry/index.d.ts +2 -2
- package/dist/src/telemetry/index.d.ts.map +1 -1
- package/dist/src/telemetry/telemetry.d.ts +56 -1
- package/dist/src/telemetry/telemetry.d.ts.map +1 -1
- package/dist/src/telemetry/utils.d.ts +1 -1
- package/dist/src/telemetry/utils.d.ts.map +1 -1
- package/dist/src/version.d.ts +8 -0
- package/dist/src/version.d.ts.map +1 -0
- package/dist/{tool-execution-helpers-BQJTPWPN.js → tool-execution-helpers-XFVBSRXM.js} +3 -2
- package/dist/tsup.config.d.ts.map +1 -1
- package/package.json +6 -5
- package/dist/chunk-MTHLLDCX.js +0 -97
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-BPP5XYP6.js";
|
|
11
11
|
import {
|
|
12
12
|
convertToolResultToResourceResult
|
|
13
13
|
} from "../../chunk-362PI25Z.js";
|
|
@@ -16,13 +16,17 @@ import {
|
|
|
16
16
|
} from "../../chunk-2EYAMIT3.js";
|
|
17
17
|
import "../../chunk-KUEVOU4M.js";
|
|
18
18
|
import {
|
|
19
|
+
Telemetry,
|
|
20
|
+
VERSION,
|
|
19
21
|
fsHelpers,
|
|
20
22
|
generateUUID,
|
|
21
23
|
getCwd,
|
|
22
24
|
getEnv,
|
|
25
|
+
getPackageVersion,
|
|
23
26
|
isDeno,
|
|
24
27
|
pathHelpers
|
|
25
|
-
} from "../../chunk-
|
|
28
|
+
} from "../../chunk-6EYDSXO6.js";
|
|
29
|
+
import "../../chunk-34R6SIER.js";
|
|
26
30
|
import {
|
|
27
31
|
__name
|
|
28
32
|
} from "../../chunk-3GQAWCBQ.js";
|
|
@@ -31,8 +35,11 @@ import {
|
|
|
31
35
|
import {
|
|
32
36
|
McpServer as OfficialMcpServer,
|
|
33
37
|
ResourceTemplate as ResourceTemplate2
|
|
34
|
-
} from "@modelcontextprotocol
|
|
35
|
-
import {
|
|
38
|
+
} from "@mcp-use/modelcontextprotocol-sdk/server/mcp.js";
|
|
39
|
+
import {
|
|
40
|
+
McpError,
|
|
41
|
+
ErrorCode
|
|
42
|
+
} from "@mcp-use/modelcontextprotocol-sdk/types.js";
|
|
36
43
|
import { z as z2 } from "zod";
|
|
37
44
|
|
|
38
45
|
// src/server/utils/response-helpers.ts
|
|
@@ -307,37 +314,12 @@ function binary(base64Data, mimeType) {
|
|
|
307
314
|
}
|
|
308
315
|
__name(binary, "binary");
|
|
309
316
|
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}`;
|
|
317
|
+
const { data, message } = config;
|
|
335
318
|
return {
|
|
336
|
-
_meta: metadata,
|
|
337
319
|
content: [
|
|
338
320
|
{
|
|
339
321
|
type: "text",
|
|
340
|
-
text:
|
|
322
|
+
text: message || ""
|
|
341
323
|
}
|
|
342
324
|
],
|
|
343
325
|
// structuredContent will be injected as window.openai.toolOutput by Apps SDK
|
|
@@ -1006,6 +988,7 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
|
|
|
1006
988
|
const props = metadata.inputs || {};
|
|
1007
989
|
const description = metadata.description || `Widget: ${widgetName}`;
|
|
1008
990
|
const title = metadata.title || widgetName;
|
|
991
|
+
const exposeAsTool = metadata.exposeAsTool !== void 0 ? metadata.exposeAsTool : true;
|
|
1009
992
|
const mcp_connect_domain = serverConfig.serverBaseUrl ? new URL(serverConfig.serverBaseUrl || "").origin : null;
|
|
1010
993
|
return {
|
|
1011
994
|
name: widgetName,
|
|
@@ -1021,7 +1004,8 @@ function createWidgetRegistration(widgetName, metadata, html2, serverConfig, isD
|
|
|
1021
1004
|
type: "appsSdk",
|
|
1022
1005
|
props,
|
|
1023
1006
|
html: html2,
|
|
1024
|
-
dev: isDev
|
|
1007
|
+
dev: isDev,
|
|
1008
|
+
exposeAsTool
|
|
1025
1009
|
},
|
|
1026
1010
|
...metadata._meta || {}
|
|
1027
1011
|
},
|
|
@@ -1301,10 +1285,42 @@ if (container && Component) {
|
|
|
1301
1285
|
console.log(`[WIDGETS] Watching resources directory: ${resourcesPath}`);
|
|
1302
1286
|
}
|
|
1303
1287
|
};
|
|
1288
|
+
const nodeStubsPlugin = {
|
|
1289
|
+
name: "node-stubs",
|
|
1290
|
+
enforce: "pre",
|
|
1291
|
+
resolveId(id) {
|
|
1292
|
+
if (id === "posthog-node" || id.startsWith("posthog-node/")) {
|
|
1293
|
+
return "\0virtual:posthog-node-stub";
|
|
1294
|
+
}
|
|
1295
|
+
return null;
|
|
1296
|
+
},
|
|
1297
|
+
load(id) {
|
|
1298
|
+
if (id === "\0virtual:posthog-node-stub") {
|
|
1299
|
+
return `
|
|
1300
|
+
export class PostHog {
|
|
1301
|
+
constructor() {}
|
|
1302
|
+
capture() {}
|
|
1303
|
+
identify() {}
|
|
1304
|
+
alias() {}
|
|
1305
|
+
flush() { return Promise.resolve(); }
|
|
1306
|
+
shutdown() { return Promise.resolve(); }
|
|
1307
|
+
}
|
|
1308
|
+
export default PostHog;
|
|
1309
|
+
`;
|
|
1310
|
+
}
|
|
1311
|
+
return null;
|
|
1312
|
+
}
|
|
1313
|
+
};
|
|
1304
1314
|
const viteServer = await createServer({
|
|
1305
1315
|
root: tempDir,
|
|
1306
1316
|
base: baseRoute + "/",
|
|
1307
|
-
plugins: [
|
|
1317
|
+
plugins: [
|
|
1318
|
+
nodeStubsPlugin,
|
|
1319
|
+
ssrCssPlugin,
|
|
1320
|
+
watchResourcesPlugin,
|
|
1321
|
+
tailwindcss(),
|
|
1322
|
+
react()
|
|
1323
|
+
],
|
|
1308
1324
|
resolve: {
|
|
1309
1325
|
alias: {
|
|
1310
1326
|
"@": pathHelpers.join(getCwd(), resourcesDir)
|
|
@@ -1325,12 +1341,15 @@ if (container && Component) {
|
|
|
1325
1341
|
// Explicitly tell Vite to watch files outside root
|
|
1326
1342
|
// This is needed because widget entry files import from resources directory
|
|
1327
1343
|
optimizeDeps: {
|
|
1328
|
-
//
|
|
1329
|
-
|
|
1344
|
+
// Exclude Node.js-only packages from browser bundling
|
|
1345
|
+
// posthog-node is for server-side telemetry and doesn't work in browser
|
|
1346
|
+
exclude: ["posthog-node"]
|
|
1330
1347
|
},
|
|
1331
1348
|
ssr: {
|
|
1332
1349
|
// Force Vite to transform these packages in SSR instead of using external requires
|
|
1333
|
-
noExternal: ["@openai/apps-sdk-ui", "react-router"]
|
|
1350
|
+
noExternal: ["@openai/apps-sdk-ui", "react-router"],
|
|
1351
|
+
// Mark Node.js-only packages as external in SSR mode
|
|
1352
|
+
external: ["posthog-node"]
|
|
1334
1353
|
},
|
|
1335
1354
|
define: {
|
|
1336
1355
|
// Define process.env for SSR context
|
|
@@ -1587,25 +1606,31 @@ function setupWidgetRoutes(app, serverConfig) {
|
|
|
1587
1606
|
__name(setupWidgetRoutes, "setupWidgetRoutes");
|
|
1588
1607
|
|
|
1589
1608
|
// src/server/widgets/ui-resource-registration.ts
|
|
1590
|
-
function uiResourceRegistration(definition) {
|
|
1609
|
+
function uiResourceRegistration(server, definition) {
|
|
1591
1610
|
const displayName = definition.title || definition.name;
|
|
1611
|
+
if (definition.type === "appsSdk" && definition._meta) {
|
|
1612
|
+
server.widgetDefinitions.set(
|
|
1613
|
+
definition.name,
|
|
1614
|
+
definition._meta
|
|
1615
|
+
);
|
|
1616
|
+
}
|
|
1592
1617
|
let resourceUri;
|
|
1593
1618
|
let mimeType;
|
|
1594
1619
|
switch (definition.type) {
|
|
1595
1620
|
case "externalUrl":
|
|
1596
|
-
resourceUri = generateWidgetUri(definition.widget,
|
|
1621
|
+
resourceUri = generateWidgetUri(definition.widget, server.buildId);
|
|
1597
1622
|
mimeType = "text/uri-list";
|
|
1598
1623
|
break;
|
|
1599
1624
|
case "rawHtml":
|
|
1600
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
1625
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId);
|
|
1601
1626
|
mimeType = "text/html";
|
|
1602
1627
|
break;
|
|
1603
1628
|
case "remoteDom":
|
|
1604
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
1629
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId);
|
|
1605
1630
|
mimeType = "application/vnd.mcp-ui.remote-dom+javascript";
|
|
1606
1631
|
break;
|
|
1607
1632
|
case "appsSdk":
|
|
1608
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
1633
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId, ".html");
|
|
1609
1634
|
mimeType = "text/html+skybridge";
|
|
1610
1635
|
break;
|
|
1611
1636
|
default:
|
|
@@ -1614,12 +1639,12 @@ function uiResourceRegistration(definition) {
|
|
|
1614
1639
|
);
|
|
1615
1640
|
}
|
|
1616
1641
|
const serverConfig = {
|
|
1617
|
-
serverHost:
|
|
1618
|
-
serverPort:
|
|
1619
|
-
serverBaseUrl:
|
|
1620
|
-
buildId:
|
|
1642
|
+
serverHost: server.serverHost,
|
|
1643
|
+
serverPort: server.serverPort || 3e3,
|
|
1644
|
+
serverBaseUrl: server.serverBaseUrl,
|
|
1645
|
+
buildId: server.buildId
|
|
1621
1646
|
};
|
|
1622
|
-
|
|
1647
|
+
server.resource({
|
|
1623
1648
|
name: definition.name,
|
|
1624
1649
|
uri: resourceUri,
|
|
1625
1650
|
title: definition.title,
|
|
@@ -1641,9 +1666,9 @@ function uiResourceRegistration(definition) {
|
|
|
1641
1666
|
}, "readCallback")
|
|
1642
1667
|
});
|
|
1643
1668
|
if (definition.type === "appsSdk") {
|
|
1644
|
-
const buildIdPart =
|
|
1669
|
+
const buildIdPart = server.buildId ? `-${server.buildId}` : "";
|
|
1645
1670
|
const uriTemplate = `ui://widget/${definition.name}${buildIdPart}-{id}.html`;
|
|
1646
|
-
|
|
1671
|
+
server.resourceTemplate({
|
|
1647
1672
|
name: `${definition.name}-dynamic`,
|
|
1648
1673
|
resourceTemplate: {
|
|
1649
1674
|
uriTemplate,
|
|
@@ -1668,70 +1693,77 @@ function uiResourceRegistration(definition) {
|
|
|
1668
1693
|
}, "readCallback")
|
|
1669
1694
|
});
|
|
1670
1695
|
}
|
|
1671
|
-
const
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
const
|
|
1675
|
-
|
|
1676
|
-
"openai/
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1696
|
+
const widgetMetadata = definition._meta?.["mcp-use/widget"];
|
|
1697
|
+
const exposeAsTool = definition.exposeAsTool ?? widgetMetadata?.exposeAsTool ?? true;
|
|
1698
|
+
if (exposeAsTool) {
|
|
1699
|
+
const toolMetadata = definition._meta || {};
|
|
1700
|
+
if (definition.type === "appsSdk" && definition.appsSdkMetadata) {
|
|
1701
|
+
toolMetadata["openai/outputTemplate"] = resourceUri;
|
|
1702
|
+
const toolMetadataFields = [
|
|
1703
|
+
"openai/toolInvocation/invoking",
|
|
1704
|
+
"openai/toolInvocation/invoked",
|
|
1705
|
+
"openai/widgetAccessible",
|
|
1706
|
+
"openai/resultCanProduceWidget"
|
|
1707
|
+
];
|
|
1708
|
+
for (const field of toolMetadataFields) {
|
|
1709
|
+
if (definition.appsSdkMetadata[field] !== void 0) {
|
|
1710
|
+
toolMetadata[field] = definition.appsSdkMetadata[field];
|
|
1711
|
+
}
|
|
1683
1712
|
}
|
|
1684
1713
|
}
|
|
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
|
|
1714
|
+
server.tool(
|
|
1715
|
+
{
|
|
1716
|
+
name: definition.name,
|
|
1717
|
+
title: definition.title,
|
|
1718
|
+
description: definition.description,
|
|
1719
|
+
inputs: convertPropsToInputs(definition.props),
|
|
1720
|
+
annotations: definition.toolAnnotations,
|
|
1721
|
+
_meta: Object.keys(toolMetadata).length > 0 ? toolMetadata : void 0
|
|
1722
|
+
},
|
|
1723
|
+
async (params) => {
|
|
1724
|
+
const uiResource = await createWidgetUIResource(
|
|
1725
|
+
definition,
|
|
1726
|
+
params,
|
|
1727
|
+
serverConfig
|
|
1705
1728
|
);
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1729
|
+
if (definition.type === "appsSdk") {
|
|
1730
|
+
const randomId = Math.random().toString(36).substring(2, 15);
|
|
1731
|
+
const uniqueUri = generateWidgetUri(
|
|
1732
|
+
definition.name,
|
|
1733
|
+
server.buildId,
|
|
1734
|
+
".html",
|
|
1735
|
+
randomId
|
|
1736
|
+
);
|
|
1737
|
+
const uniqueToolMetadata = {
|
|
1738
|
+
...toolMetadata,
|
|
1739
|
+
"openai/outputTemplate": uniqueUri
|
|
1740
|
+
};
|
|
1741
|
+
return {
|
|
1742
|
+
_meta: uniqueToolMetadata,
|
|
1743
|
+
content: [
|
|
1744
|
+
{
|
|
1745
|
+
type: "text",
|
|
1746
|
+
text: `Displaying ${displayName}`
|
|
1747
|
+
}
|
|
1748
|
+
],
|
|
1749
|
+
// structuredContent will be injected as window.openai.toolOutput by Apps SDK
|
|
1750
|
+
structuredContent: params
|
|
1751
|
+
};
|
|
1752
|
+
}
|
|
1710
1753
|
return {
|
|
1711
|
-
_meta: uniqueToolMetadata,
|
|
1712
1754
|
content: [
|
|
1713
1755
|
{
|
|
1714
1756
|
type: "text",
|
|
1715
|
-
text: `Displaying ${displayName}
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1757
|
+
text: `Displaying ${displayName}`,
|
|
1758
|
+
description: `Show MCP-UI widget for ${displayName}`
|
|
1759
|
+
},
|
|
1760
|
+
uiResource
|
|
1761
|
+
]
|
|
1720
1762
|
};
|
|
1721
1763
|
}
|
|
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;
|
|
1764
|
+
);
|
|
1765
|
+
}
|
|
1766
|
+
return server;
|
|
1735
1767
|
}
|
|
1736
1768
|
__name(uiResourceRegistration, "uiResourceRegistration");
|
|
1737
1769
|
|
|
@@ -1867,7 +1899,7 @@ function toolRegistration(toolDefinition, callback) {
|
|
|
1867
1899
|
const initialRequestContext = getRequestContext();
|
|
1868
1900
|
const extraProgressToken = extra?._meta?.progressToken;
|
|
1869
1901
|
const extraSendNotification = extra?.sendNotification;
|
|
1870
|
-
const { requestContext, progressToken, sendNotification: sendNotification2 } = findSessionContext(
|
|
1902
|
+
const { requestContext, session, progressToken, sendNotification: sendNotification2 } = findSessionContext(
|
|
1871
1903
|
this.sessions,
|
|
1872
1904
|
initialRequestContext,
|
|
1873
1905
|
extraProgressToken,
|
|
@@ -1878,7 +1910,9 @@ function toolRegistration(toolDefinition, callback) {
|
|
|
1878
1910
|
this.createMessage.bind(this),
|
|
1879
1911
|
this.server.server.elicitInput.bind(this.server.server),
|
|
1880
1912
|
progressToken,
|
|
1881
|
-
sendNotification2
|
|
1913
|
+
sendNotification2,
|
|
1914
|
+
session?.logLevel,
|
|
1915
|
+
session?.clientCapabilities
|
|
1882
1916
|
);
|
|
1883
1917
|
const executeCallback = /* @__PURE__ */ __name(async () => {
|
|
1884
1918
|
if (actualCallback.length >= 2) {
|
|
@@ -1898,13 +1932,13 @@ function toolRegistration(toolDefinition, callback) {
|
|
|
1898
1932
|
__name(toolRegistration, "toolRegistration");
|
|
1899
1933
|
|
|
1900
1934
|
// src/server/resources/index.ts
|
|
1901
|
-
import { ResourceTemplate } from "@modelcontextprotocol
|
|
1935
|
+
import { ResourceTemplate } from "@mcp-use/modelcontextprotocol-sdk/server/mcp.js";
|
|
1902
1936
|
|
|
1903
1937
|
// src/server/resources/subscriptions.ts
|
|
1904
1938
|
import {
|
|
1905
1939
|
SubscribeRequestSchema,
|
|
1906
1940
|
UnsubscribeRequestSchema
|
|
1907
|
-
} from "@modelcontextprotocol
|
|
1941
|
+
} from "@mcp-use/modelcontextprotocol-sdk/types.js";
|
|
1908
1942
|
var ResourceSubscriptionManager = class {
|
|
1909
1943
|
static {
|
|
1910
1944
|
__name(this, "ResourceSubscriptionManager");
|
|
@@ -2057,7 +2091,7 @@ function registerResource(resourceDefinition, callback) {
|
|
|
2057
2091
|
const explicitMimeType = resourceDefinition.mimeType;
|
|
2058
2092
|
const wrappedCallback = /* @__PURE__ */ __name(async () => {
|
|
2059
2093
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2060
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2094
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-XFVBSRXM.js");
|
|
2061
2095
|
const initialRequestContext = getRequestContext2();
|
|
2062
2096
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2063
2097
|
const { requestContext } = findSessionContext2(
|
|
@@ -2105,24 +2139,25 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
|
|
|
2105
2139
|
`Resource template '${resourceTemplateDefinition.name}' must have either a readCallback property or a callback parameter`
|
|
2106
2140
|
);
|
|
2107
2141
|
}
|
|
2108
|
-
const
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2142
|
+
const isFlatStructure = "uriTemplate" in resourceTemplateDefinition;
|
|
2143
|
+
const uriTemplate = isFlatStructure ? resourceTemplateDefinition.uriTemplate : resourceTemplateDefinition.resourceTemplate.uriTemplate;
|
|
2144
|
+
const mimeType = isFlatStructure ? resourceTemplateDefinition.mimeType : resourceTemplateDefinition.resourceTemplate.mimeType;
|
|
2145
|
+
const templateDescription = isFlatStructure ? void 0 : resourceTemplateDefinition.resourceTemplate.description;
|
|
2146
|
+
const template = new ResourceTemplate(uriTemplate, {
|
|
2147
|
+
list: void 0,
|
|
2148
|
+
// Optional: callback to list all matching resources
|
|
2149
|
+
complete: void 0
|
|
2150
|
+
// Optional: callback for auto-completion
|
|
2151
|
+
});
|
|
2117
2152
|
const metadata = {};
|
|
2118
2153
|
if (resourceTemplateDefinition.title) {
|
|
2119
2154
|
metadata.title = resourceTemplateDefinition.title;
|
|
2120
2155
|
}
|
|
2121
|
-
if (resourceTemplateDefinition.description ||
|
|
2122
|
-
metadata.description = resourceTemplateDefinition.description ||
|
|
2156
|
+
if (resourceTemplateDefinition.description || templateDescription) {
|
|
2157
|
+
metadata.description = resourceTemplateDefinition.description || templateDescription;
|
|
2123
2158
|
}
|
|
2124
|
-
if (
|
|
2125
|
-
metadata.mimeType =
|
|
2159
|
+
if (mimeType) {
|
|
2160
|
+
metadata.mimeType = mimeType;
|
|
2126
2161
|
}
|
|
2127
2162
|
if (resourceTemplateDefinition.annotations) {
|
|
2128
2163
|
metadata.annotations = resourceTemplateDefinition.annotations;
|
|
@@ -2132,12 +2167,9 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
|
|
|
2132
2167
|
template,
|
|
2133
2168
|
metadata,
|
|
2134
2169
|
async (uri) => {
|
|
2135
|
-
const params = this.parseTemplateUri(
|
|
2136
|
-
resourceTemplateDefinition.resourceTemplate.uriTemplate,
|
|
2137
|
-
uri.toString()
|
|
2138
|
-
);
|
|
2170
|
+
const params = this.parseTemplateUri(uriTemplate, uri.toString());
|
|
2139
2171
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2140
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2172
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-XFVBSRXM.js");
|
|
2141
2173
|
const initialRequestContext = getRequestContext2();
|
|
2142
2174
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2143
2175
|
const { requestContext } = findSessionContext2(
|
|
@@ -2150,8 +2182,12 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
|
|
|
2150
2182
|
const executeCallback = /* @__PURE__ */ __name(async () => {
|
|
2151
2183
|
if (actualCallback.length >= 3) {
|
|
2152
2184
|
return await actualCallback(uri, params, enhancedContext);
|
|
2185
|
+
} else if (actualCallback.length === 2) {
|
|
2186
|
+
return await actualCallback(uri, params);
|
|
2187
|
+
} else if (actualCallback.length === 1) {
|
|
2188
|
+
return await actualCallback(uri);
|
|
2153
2189
|
}
|
|
2154
|
-
return await actualCallback(
|
|
2190
|
+
return await actualCallback();
|
|
2155
2191
|
}, "executeCallback");
|
|
2156
2192
|
const result = requestContext ? await runWithContext2(requestContext, executeCallback) : await executeCallback();
|
|
2157
2193
|
if ("contents" in result && Array.isArray(result.contents)) {
|
|
@@ -2188,7 +2224,7 @@ function registerPrompt(promptDefinition, callback) {
|
|
|
2188
2224
|
}
|
|
2189
2225
|
const wrappedCallback = /* @__PURE__ */ __name(async (params, extra) => {
|
|
2190
2226
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2191
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2227
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-XFVBSRXM.js");
|
|
2192
2228
|
const initialRequestContext = getRequestContext2();
|
|
2193
2229
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2194
2230
|
const { requestContext } = findSessionContext2(
|
|
@@ -2486,7 +2522,7 @@ __name(startIdleCleanup, "startIdleCleanup");
|
|
|
2486
2522
|
|
|
2487
2523
|
// src/server/endpoints/mount-mcp.ts
|
|
2488
2524
|
async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMode2) {
|
|
2489
|
-
const { FetchStreamableHTTPServerTransport } = await import("@modelcontextprotocol
|
|
2525
|
+
const { FetchStreamableHTTPServerTransport } = await import("@mcp-use/modelcontextprotocol-sdk/experimental/fetch-streamable-http/index.js");
|
|
2490
2526
|
const idleTimeoutMs = config.sessionIdleTimeoutMs ?? 3e5;
|
|
2491
2527
|
const transports = /* @__PURE__ */ new Map();
|
|
2492
2528
|
let idleCleanupInterval;
|
|
@@ -2522,6 +2558,27 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
|
|
|
2522
2558
|
context: c,
|
|
2523
2559
|
honoContext: c
|
|
2524
2560
|
});
|
|
2561
|
+
server.server.oninitialized = () => {
|
|
2562
|
+
const clientCapabilities = server.server.getClientCapabilities();
|
|
2563
|
+
const clientInfo = server.server.getClientInfo?.() || {};
|
|
2564
|
+
const protocolVersion = server.server.getProtocolVersion?.() || "unknown";
|
|
2565
|
+
if (clientCapabilities && sessions.has(sid)) {
|
|
2566
|
+
const session = sessions.get(sid);
|
|
2567
|
+
session.clientCapabilities = clientCapabilities;
|
|
2568
|
+
console.log(
|
|
2569
|
+
`[MCP] Captured client capabilities for session ${sid}:`,
|
|
2570
|
+
Object.keys(clientCapabilities)
|
|
2571
|
+
);
|
|
2572
|
+
}
|
|
2573
|
+
Telemetry.getInstance().trackServerInitialize({
|
|
2574
|
+
protocolVersion: String(protocolVersion),
|
|
2575
|
+
clientInfo: clientInfo || {},
|
|
2576
|
+
clientCapabilities: clientCapabilities || {},
|
|
2577
|
+
sessionId: sid
|
|
2578
|
+
}).catch(
|
|
2579
|
+
(e) => console.debug(`Failed to track server initialize: ${e}`)
|
|
2580
|
+
);
|
|
2581
|
+
};
|
|
2525
2582
|
}, "onsessioninitialized"),
|
|
2526
2583
|
onsessionclosed: /* @__PURE__ */ __name((sid) => {
|
|
2527
2584
|
console.log(`[MCP] Session closed: ${sid}`);
|
|
@@ -2765,12 +2822,13 @@ function createBearerAuthMiddleware(provider, baseUrl) {
|
|
|
2765
2822
|
const result = await provider.verifyToken(token);
|
|
2766
2823
|
const payload = result.payload;
|
|
2767
2824
|
const user = provider.getUserInfo(payload);
|
|
2825
|
+
const scope = payload.scope;
|
|
2768
2826
|
const authInfo = {
|
|
2769
2827
|
user,
|
|
2770
2828
|
payload,
|
|
2771
2829
|
accessToken: token,
|
|
2772
2830
|
// Extract scopes from scope claim (OAuth standard)
|
|
2773
|
-
scopes:
|
|
2831
|
+
scopes: scope ? scope.split(" ") : [],
|
|
2774
2832
|
// Extract permissions (Auth0 style, or custom)
|
|
2775
2833
|
permissions: payload.permissions || []
|
|
2776
2834
|
};
|
|
@@ -2818,9 +2876,16 @@ async function setupOAuthForServer(app, oauthProvider, baseUrl, state) {
|
|
|
2818
2876
|
__name(setupOAuthForServer, "setupOAuthForServer");
|
|
2819
2877
|
|
|
2820
2878
|
// src/server/mcp-server.ts
|
|
2821
|
-
var
|
|
2879
|
+
var MCPServerClass = class {
|
|
2822
2880
|
static {
|
|
2823
|
-
__name(this, "
|
|
2881
|
+
__name(this, "MCPServerClass");
|
|
2882
|
+
}
|
|
2883
|
+
/**
|
|
2884
|
+
* Get the mcp-use package version.
|
|
2885
|
+
* Works in all environments (Node.js, browser, Cloudflare Workers, Deno, etc.)
|
|
2886
|
+
*/
|
|
2887
|
+
static getPackageVersion() {
|
|
2888
|
+
return getPackageVersion();
|
|
2824
2889
|
}
|
|
2825
2890
|
/**
|
|
2826
2891
|
* Native MCP server instance from @modelcontextprotocol/sdk
|
|
@@ -2844,8 +2909,6 @@ var McpServer = class {
|
|
|
2844
2909
|
buildId;
|
|
2845
2910
|
sessions = /* @__PURE__ */ new Map();
|
|
2846
2911
|
idleCleanupInterval;
|
|
2847
|
-
oauthConfig;
|
|
2848
|
-
// Store OAuth config for lazy initialization
|
|
2849
2912
|
oauthSetupState = {
|
|
2850
2913
|
complete: false,
|
|
2851
2914
|
provider: void 0,
|
|
@@ -2854,15 +2917,21 @@ var McpServer = class {
|
|
|
2854
2917
|
oauthProvider;
|
|
2855
2918
|
oauthMiddleware;
|
|
2856
2919
|
/**
|
|
2857
|
-
* Storage for
|
|
2920
|
+
* Storage for registrations that can be replayed on new server instances
|
|
2858
2921
|
* Following the official SDK pattern where each session gets its own server instance
|
|
2922
|
+
* @internal Exposed for telemetry purposes
|
|
2859
2923
|
*/
|
|
2860
|
-
|
|
2924
|
+
registrations = {
|
|
2861
2925
|
tools: /* @__PURE__ */ new Map(),
|
|
2862
2926
|
prompts: /* @__PURE__ */ new Map(),
|
|
2863
2927
|
resources: /* @__PURE__ */ new Map(),
|
|
2864
2928
|
resourceTemplates: /* @__PURE__ */ new Map()
|
|
2865
2929
|
};
|
|
2930
|
+
/**
|
|
2931
|
+
* Storage for widget definitions, used to inject metadata into tool responses
|
|
2932
|
+
* when using the widget() helper with returnsWidget option
|
|
2933
|
+
*/
|
|
2934
|
+
widgetDefinitions = /* @__PURE__ */ new Map();
|
|
2866
2935
|
/**
|
|
2867
2936
|
* Resource subscription manager for tracking and notifying resource updates
|
|
2868
2937
|
*/
|
|
@@ -2887,7 +2956,7 @@ var McpServer = class {
|
|
|
2887
2956
|
* access to Hono methods while preserving MCP server functionality.
|
|
2888
2957
|
*
|
|
2889
2958
|
* @param config - Server configuration including name, version, and description
|
|
2890
|
-
* @returns A proxied
|
|
2959
|
+
* @returns A proxied MCPServer instance that supports both MCP and Hono methods
|
|
2891
2960
|
*/
|
|
2892
2961
|
constructor(config) {
|
|
2893
2962
|
this.config = config;
|
|
@@ -2909,12 +2978,12 @@ var McpServer = class {
|
|
|
2909
2978
|
}
|
|
2910
2979
|
);
|
|
2911
2980
|
this.app = createHonoApp(requestLogger);
|
|
2912
|
-
this.
|
|
2981
|
+
this.oauthProvider = config.oauth;
|
|
2913
2982
|
this.wrapRegistrationMethods();
|
|
2914
2983
|
return createHonoProxy(this, this.app);
|
|
2915
2984
|
}
|
|
2916
2985
|
/**
|
|
2917
|
-
* Wrap registration methods to capture
|
|
2986
|
+
* Wrap registration methods to capture registrations following official SDK pattern.
|
|
2918
2987
|
* Each session will get a fresh server instance with all registrations replayed.
|
|
2919
2988
|
*/
|
|
2920
2989
|
wrapRegistrationMethods() {
|
|
@@ -2924,38 +2993,94 @@ var McpServer = class {
|
|
|
2924
2993
|
const originalResourceTemplate = registerResourceTemplate;
|
|
2925
2994
|
const self = this;
|
|
2926
2995
|
this.tool = ((toolDefinition, callback) => {
|
|
2927
|
-
const
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2996
|
+
const widgetConfig = toolDefinition.widget;
|
|
2997
|
+
const widgetName = widgetConfig?.name;
|
|
2998
|
+
if (widgetConfig && widgetName) {
|
|
2999
|
+
const buildIdPart = self.buildId ? `-${self.buildId}` : "";
|
|
3000
|
+
const outputTemplate = `ui://widget/${widgetName}${buildIdPart}.html`;
|
|
3001
|
+
toolDefinition._meta = {
|
|
3002
|
+
...toolDefinition._meta,
|
|
3003
|
+
"openai/outputTemplate": outputTemplate,
|
|
3004
|
+
"openai/toolInvocation/invoking": widgetConfig.invoking ?? `Loading ${widgetName}...`,
|
|
3005
|
+
"openai/toolInvocation/invoked": widgetConfig.invoked ?? `${widgetName} ready`,
|
|
3006
|
+
"openai/widgetAccessible": widgetConfig.widgetAccessible ?? true,
|
|
3007
|
+
"openai/resultCanProduceWidget": widgetConfig.resultCanProduceWidget ?? true
|
|
3008
|
+
};
|
|
3009
|
+
}
|
|
3010
|
+
let actualCallback = callback || toolDefinition.cb;
|
|
3011
|
+
if (widgetConfig && widgetName && actualCallback) {
|
|
3012
|
+
const originalCallback = actualCallback;
|
|
3013
|
+
actualCallback = /* @__PURE__ */ __name((async (params, ctx) => {
|
|
3014
|
+
const result = await originalCallback(params, ctx);
|
|
3015
|
+
const widgetDef = self.widgetDefinitions.get(widgetName);
|
|
3016
|
+
if (result && typeof result === "object") {
|
|
3017
|
+
const randomId = Math.random().toString(36).substring(2, 15);
|
|
3018
|
+
const buildIdPart = self.buildId ? `-${self.buildId}` : "";
|
|
3019
|
+
const uniqueUri = `ui://widget/${widgetName}${buildIdPart}-${randomId}.html`;
|
|
3020
|
+
const responseMeta = {
|
|
3021
|
+
...widgetDef || {},
|
|
3022
|
+
// Include mcp-use/widget and other widget metadata
|
|
3023
|
+
"openai/outputTemplate": uniqueUri,
|
|
3024
|
+
"openai/toolInvocation/invoking": widgetConfig.invoking ?? `Loading ${widgetName}...`,
|
|
3025
|
+
"openai/toolInvocation/invoked": widgetConfig.invoked ?? `${widgetName} ready`,
|
|
3026
|
+
"openai/widgetAccessible": widgetConfig.widgetAccessible ?? true,
|
|
3027
|
+
"openai/resultCanProduceWidget": widgetConfig.resultCanProduceWidget ?? true
|
|
3028
|
+
};
|
|
3029
|
+
result._meta = responseMeta;
|
|
3030
|
+
if (result.content?.[0]?.type === "text" && !result.content[0].text) {
|
|
3031
|
+
result.content[0].text = `Displaying ${widgetName}`;
|
|
3032
|
+
}
|
|
3033
|
+
}
|
|
3034
|
+
return result;
|
|
3035
|
+
}), "actualCallback");
|
|
3036
|
+
}
|
|
3037
|
+
if (actualCallback) {
|
|
3038
|
+
self.registrations.tools.set(toolDefinition.name, {
|
|
3039
|
+
config: toolDefinition,
|
|
3040
|
+
handler: actualCallback
|
|
3041
|
+
});
|
|
3042
|
+
}
|
|
3043
|
+
return originalTool.call(self, toolDefinition, actualCallback);
|
|
2933
3044
|
});
|
|
2934
|
-
this.prompt =
|
|
3045
|
+
this.prompt = ((promptDefinition, callback) => {
|
|
2935
3046
|
const actualCallback = callback || promptDefinition.cb;
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
3047
|
+
if (actualCallback) {
|
|
3048
|
+
self.registrations.prompts.set(promptDefinition.name, {
|
|
3049
|
+
config: promptDefinition,
|
|
3050
|
+
handler: actualCallback
|
|
3051
|
+
});
|
|
3052
|
+
}
|
|
3053
|
+
return originalPrompt.call(
|
|
3054
|
+
self,
|
|
3055
|
+
promptDefinition,
|
|
3056
|
+
callback
|
|
3057
|
+
);
|
|
3058
|
+
});
|
|
3059
|
+
this.resource = ((resourceDefinition, callback) => {
|
|
2943
3060
|
const actualCallback = callback || resourceDefinition.readCallback;
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
3061
|
+
if (actualCallback) {
|
|
3062
|
+
const resourceKey = `${resourceDefinition.name}:${resourceDefinition.uri}`;
|
|
3063
|
+
self.registrations.resources.set(resourceKey, {
|
|
3064
|
+
config: resourceDefinition,
|
|
3065
|
+
handler: actualCallback
|
|
3066
|
+
});
|
|
3067
|
+
}
|
|
2949
3068
|
return originalResource.call(self, resourceDefinition, callback);
|
|
2950
|
-
};
|
|
2951
|
-
this.resourceTemplate =
|
|
3069
|
+
});
|
|
3070
|
+
this.resourceTemplate = ((templateDefinition, callback) => {
|
|
2952
3071
|
const actualCallback = callback || templateDefinition.readCallback;
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
3072
|
+
if (actualCallback) {
|
|
3073
|
+
self.registrations.resourceTemplates.set(templateDefinition.name, {
|
|
3074
|
+
config: templateDefinition,
|
|
3075
|
+
handler: actualCallback
|
|
3076
|
+
});
|
|
3077
|
+
}
|
|
3078
|
+
return originalResourceTemplate.call(
|
|
3079
|
+
self,
|
|
3080
|
+
templateDefinition,
|
|
3081
|
+
callback
|
|
3082
|
+
);
|
|
3083
|
+
});
|
|
2959
3084
|
}
|
|
2960
3085
|
/**
|
|
2961
3086
|
* Create a new server instance for a session following official SDK pattern.
|
|
@@ -2973,8 +3098,8 @@ var McpServer = class {
|
|
|
2973
3098
|
}
|
|
2974
3099
|
}
|
|
2975
3100
|
);
|
|
2976
|
-
for (const [name,
|
|
2977
|
-
const { config, handler: actualCallback } =
|
|
3101
|
+
for (const [name, registration] of this.registrations.tools) {
|
|
3102
|
+
const { config, handler: actualCallback } = registration;
|
|
2978
3103
|
let inputSchema;
|
|
2979
3104
|
if (config.schema) {
|
|
2980
3105
|
inputSchema = this.convertZodSchemaToParams(config.schema);
|
|
@@ -2993,6 +3118,15 @@ var McpServer = class {
|
|
|
2993
3118
|
extraProgressToken,
|
|
2994
3119
|
extraSendNotification
|
|
2995
3120
|
);
|
|
3121
|
+
let sessionId;
|
|
3122
|
+
if (session) {
|
|
3123
|
+
for (const [id, s] of this.sessions.entries()) {
|
|
3124
|
+
if (s === session) {
|
|
3125
|
+
sessionId = id;
|
|
3126
|
+
break;
|
|
3127
|
+
}
|
|
3128
|
+
}
|
|
3129
|
+
}
|
|
2996
3130
|
const createMessageWithLogging = /* @__PURE__ */ __name(async (params2, options) => {
|
|
2997
3131
|
console.log("[createMessage] About to call server.createMessage");
|
|
2998
3132
|
console.log("[createMessage] Has server:", !!newServer);
|
|
@@ -3004,11 +3138,12 @@ var McpServer = class {
|
|
|
3004
3138
|
console.log("[createMessage] Got result successfully");
|
|
3005
3139
|
return result;
|
|
3006
3140
|
} catch (err) {
|
|
3141
|
+
const error2 = err;
|
|
3007
3142
|
console.error(
|
|
3008
3143
|
"[createMessage] Error:",
|
|
3009
|
-
|
|
3144
|
+
error2.message,
|
|
3010
3145
|
"Code:",
|
|
3011
|
-
|
|
3146
|
+
error2.code
|
|
3012
3147
|
);
|
|
3013
3148
|
throw err;
|
|
3014
3149
|
}
|
|
@@ -3019,7 +3154,10 @@ var McpServer = class {
|
|
|
3019
3154
|
newServer.server.elicitInput.bind(newServer.server),
|
|
3020
3155
|
progressToken,
|
|
3021
3156
|
sendNotification2,
|
|
3022
|
-
session?.logLevel
|
|
3157
|
+
session?.logLevel,
|
|
3158
|
+
session?.clientCapabilities,
|
|
3159
|
+
sessionId,
|
|
3160
|
+
this.sessions
|
|
3023
3161
|
);
|
|
3024
3162
|
const executeCallback = /* @__PURE__ */ __name(async () => {
|
|
3025
3163
|
if (actualCallback.length >= 2) {
|
|
@@ -3027,10 +3165,26 @@ var McpServer = class {
|
|
|
3027
3165
|
}
|
|
3028
3166
|
return await actualCallback(params);
|
|
3029
3167
|
}, "executeCallback");
|
|
3030
|
-
|
|
3031
|
-
|
|
3168
|
+
const startTime = Date.now();
|
|
3169
|
+
let success = true;
|
|
3170
|
+
let errorType = null;
|
|
3171
|
+
try {
|
|
3172
|
+
const result = requestContext ? await runWithContext(requestContext, executeCallback) : await executeCallback();
|
|
3173
|
+
return result;
|
|
3174
|
+
} catch (err) {
|
|
3175
|
+
success = false;
|
|
3176
|
+
errorType = err instanceof Error ? err.name : "unknown_error";
|
|
3177
|
+
throw err;
|
|
3178
|
+
} finally {
|
|
3179
|
+
const executionTimeMs = Date.now() - startTime;
|
|
3180
|
+
Telemetry.getInstance().trackServerToolCall({
|
|
3181
|
+
toolName: name,
|
|
3182
|
+
lengthInputArgument: JSON.stringify(params).length,
|
|
3183
|
+
success,
|
|
3184
|
+
errorType,
|
|
3185
|
+
executionTimeMs
|
|
3186
|
+
}).catch((e) => console.debug(`Failed to track tool call: ${e}`));
|
|
3032
3187
|
}
|
|
3033
|
-
return await executeCallback();
|
|
3034
3188
|
}, "wrappedHandler");
|
|
3035
3189
|
newServer.registerTool(
|
|
3036
3190
|
name,
|
|
@@ -3044,8 +3198,8 @@ var McpServer = class {
|
|
|
3044
3198
|
wrappedHandler
|
|
3045
3199
|
);
|
|
3046
3200
|
}
|
|
3047
|
-
for (const [name,
|
|
3048
|
-
const { config, handler } =
|
|
3201
|
+
for (const [name, registration] of this.registrations.prompts) {
|
|
3202
|
+
const { config, handler } = registration;
|
|
3049
3203
|
let argsSchema;
|
|
3050
3204
|
if (config.schema) {
|
|
3051
3205
|
argsSchema = this.convertZodSchemaToParams(config.schema);
|
|
@@ -3054,13 +3208,28 @@ var McpServer = class {
|
|
|
3054
3208
|
} else {
|
|
3055
3209
|
argsSchema = void 0;
|
|
3056
3210
|
}
|
|
3057
|
-
const wrappedHandler = /* @__PURE__ */ __name(async (params) => {
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
|
|
3211
|
+
const wrappedHandler = /* @__PURE__ */ __name(async (params, extra) => {
|
|
3212
|
+
let success = true;
|
|
3213
|
+
let errorType = null;
|
|
3214
|
+
try {
|
|
3215
|
+
const result = await handler(params, extra);
|
|
3216
|
+
if ("messages" in result && Array.isArray(result.messages)) {
|
|
3217
|
+
return result;
|
|
3218
|
+
}
|
|
3219
|
+
const { convertToolResultToPromptResult: convertToolResultToPromptResult2 } = await import("../../conversion-OTRZZBUU.js");
|
|
3220
|
+
return convertToolResultToPromptResult2(result);
|
|
3221
|
+
} catch (err) {
|
|
3222
|
+
success = false;
|
|
3223
|
+
errorType = err instanceof Error ? err.name : "unknown_error";
|
|
3224
|
+
throw err;
|
|
3225
|
+
} finally {
|
|
3226
|
+
Telemetry.getInstance().trackServerPromptCall({
|
|
3227
|
+
name,
|
|
3228
|
+
description: config.description ?? null,
|
|
3229
|
+
success,
|
|
3230
|
+
errorType
|
|
3231
|
+
}).catch((e) => console.debug(`Failed to track prompt call: ${e}`));
|
|
3061
3232
|
}
|
|
3062
|
-
const { convertToolResultToPromptResult: convertToolResultToPromptResult2 } = await import("../../conversion-OTRZZBUU.js");
|
|
3063
|
-
return convertToolResultToPromptResult2(result);
|
|
3064
3233
|
}, "wrappedHandler");
|
|
3065
3234
|
newServer.registerPrompt(
|
|
3066
3235
|
name,
|
|
@@ -3072,15 +3241,42 @@ var McpServer = class {
|
|
|
3072
3241
|
wrappedHandler
|
|
3073
3242
|
);
|
|
3074
3243
|
}
|
|
3075
|
-
for (const [_key,
|
|
3076
|
-
const { config, handler } =
|
|
3077
|
-
const wrappedHandler = /* @__PURE__ */ __name(async () => {
|
|
3078
|
-
|
|
3079
|
-
|
|
3080
|
-
|
|
3244
|
+
for (const [_key, registration] of this.registrations.resources) {
|
|
3245
|
+
const { config, handler } = registration;
|
|
3246
|
+
const wrappedHandler = /* @__PURE__ */ __name(async (extra) => {
|
|
3247
|
+
let success = true;
|
|
3248
|
+
let errorType = null;
|
|
3249
|
+
let contents = [];
|
|
3250
|
+
try {
|
|
3251
|
+
const result = await handler(extra);
|
|
3252
|
+
if ("contents" in result && Array.isArray(result.contents)) {
|
|
3253
|
+
contents = result.contents;
|
|
3254
|
+
return result;
|
|
3255
|
+
}
|
|
3256
|
+
const { convertToolResultToResourceResult: convertToolResultToResourceResult2 } = await import("../../conversion-5MA4VY3B.js");
|
|
3257
|
+
const converted = convertToolResultToResourceResult2(
|
|
3258
|
+
config.uri,
|
|
3259
|
+
result
|
|
3260
|
+
);
|
|
3261
|
+
contents = converted.contents || [];
|
|
3262
|
+
return converted;
|
|
3263
|
+
} catch (err) {
|
|
3264
|
+
success = false;
|
|
3265
|
+
errorType = err instanceof Error ? err.name : "unknown_error";
|
|
3266
|
+
throw err;
|
|
3267
|
+
} finally {
|
|
3268
|
+
Telemetry.getInstance().trackServerResourceCall({
|
|
3269
|
+
name: config.name,
|
|
3270
|
+
description: config.description ?? null,
|
|
3271
|
+
contents: contents.map((c) => ({
|
|
3272
|
+
mime_type: c.mimeType ?? null,
|
|
3273
|
+
text: c.text ? `[text: ${c.text.length} chars]` : null,
|
|
3274
|
+
blob: c.blob ? `[blob: ${c.blob.length} bytes]` : null
|
|
3275
|
+
})),
|
|
3276
|
+
success,
|
|
3277
|
+
errorType
|
|
3278
|
+
}).catch((e) => console.debug(`Failed to track resource call: ${e}`));
|
|
3081
3279
|
}
|
|
3082
|
-
const { convertToolResultToResourceResult: convertToolResultToResourceResult2 } = await import("../../conversion-5MA4VY3B.js");
|
|
3083
|
-
return convertToolResultToResourceResult2(config.uri, result);
|
|
3084
3280
|
}, "wrappedHandler");
|
|
3085
3281
|
newServer.registerResource(
|
|
3086
3282
|
config.name,
|
|
@@ -3093,24 +3289,25 @@ var McpServer = class {
|
|
|
3093
3289
|
wrappedHandler
|
|
3094
3290
|
);
|
|
3095
3291
|
}
|
|
3096
|
-
for (const [_name,
|
|
3097
|
-
const { config, handler } =
|
|
3098
|
-
const
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3292
|
+
for (const [_name, registration] of this.registrations.resourceTemplates) {
|
|
3293
|
+
const { config, handler } = registration;
|
|
3294
|
+
const isFlatStructure = "uriTemplate" in config;
|
|
3295
|
+
const uriTemplate = isFlatStructure ? config.uriTemplate : config.resourceTemplate.uriTemplate;
|
|
3296
|
+
const mimeType = isFlatStructure ? config.mimeType : config.resourceTemplate.mimeType;
|
|
3297
|
+
const templateDescription = isFlatStructure ? void 0 : config.resourceTemplate.description;
|
|
3298
|
+
const template = new ResourceTemplate2(uriTemplate, {
|
|
3299
|
+
list: void 0,
|
|
3300
|
+
complete: void 0
|
|
3301
|
+
});
|
|
3105
3302
|
const metadata = {};
|
|
3106
3303
|
if (config.title) {
|
|
3107
3304
|
metadata.title = config.title;
|
|
3108
3305
|
}
|
|
3109
|
-
if (config.description ||
|
|
3110
|
-
metadata.description = config.description ||
|
|
3306
|
+
if (config.description || templateDescription) {
|
|
3307
|
+
metadata.description = config.description || templateDescription;
|
|
3111
3308
|
}
|
|
3112
|
-
if (
|
|
3113
|
-
metadata.mimeType =
|
|
3309
|
+
if (mimeType) {
|
|
3310
|
+
metadata.mimeType = mimeType;
|
|
3114
3311
|
}
|
|
3115
3312
|
if (config.annotations) {
|
|
3116
3313
|
metadata.annotations = config.annotations;
|
|
@@ -3119,23 +3316,49 @@ var McpServer = class {
|
|
|
3119
3316
|
config.name,
|
|
3120
3317
|
template,
|
|
3121
3318
|
metadata,
|
|
3122
|
-
async (uri) => {
|
|
3123
|
-
|
|
3124
|
-
|
|
3125
|
-
|
|
3126
|
-
|
|
3127
|
-
|
|
3128
|
-
|
|
3129
|
-
|
|
3319
|
+
async (uri, extra) => {
|
|
3320
|
+
let success = true;
|
|
3321
|
+
let errorType = null;
|
|
3322
|
+
let contents = [];
|
|
3323
|
+
try {
|
|
3324
|
+
const params = this.parseTemplateUri(uriTemplate, uri.toString());
|
|
3325
|
+
const result = await handler(uri, params, extra);
|
|
3326
|
+
if ("contents" in result && Array.isArray(result.contents)) {
|
|
3327
|
+
contents = result.contents;
|
|
3328
|
+
return result;
|
|
3329
|
+
}
|
|
3330
|
+
const { convertToolResultToResourceResult: convertToolResultToResourceResult2 } = await import("../../conversion-5MA4VY3B.js");
|
|
3331
|
+
const converted = convertToolResultToResourceResult2(
|
|
3332
|
+
uri.toString(),
|
|
3333
|
+
result
|
|
3334
|
+
);
|
|
3335
|
+
contents = converted.contents || [];
|
|
3336
|
+
return converted;
|
|
3337
|
+
} catch (err) {
|
|
3338
|
+
success = false;
|
|
3339
|
+
errorType = err instanceof Error ? err.name : "unknown_error";
|
|
3340
|
+
throw err;
|
|
3341
|
+
} finally {
|
|
3342
|
+
Telemetry.getInstance().trackServerResourceCall({
|
|
3343
|
+
name: config.name,
|
|
3344
|
+
description: config.description ?? null,
|
|
3345
|
+
contents: contents.map((c) => ({
|
|
3346
|
+
mimeType: c.mimeType ?? null,
|
|
3347
|
+
text: c.text ? `[text: ${c.text.length} chars]` : null,
|
|
3348
|
+
blob: c.blob ? `[blob: ${c.blob.length} bytes]` : null
|
|
3349
|
+
})),
|
|
3350
|
+
success,
|
|
3351
|
+
errorType
|
|
3352
|
+
}).catch(
|
|
3353
|
+
(e) => console.debug(`Failed to track resource template call: ${e}`)
|
|
3354
|
+
);
|
|
3130
3355
|
}
|
|
3131
|
-
const { convertToolResultToResourceResult: convertToolResultToResourceResult2 } = await import("../../conversion-5MA4VY3B.js");
|
|
3132
|
-
return convertToolResultToResourceResult2(uri.toString(), result);
|
|
3133
3356
|
}
|
|
3134
3357
|
);
|
|
3135
3358
|
}
|
|
3136
3359
|
newServer.server.setRequestHandler(
|
|
3137
3360
|
z2.object({ method: z2.literal("logging/setLevel") }).passthrough(),
|
|
3138
|
-
async (request) => {
|
|
3361
|
+
(async (request, extra) => {
|
|
3139
3362
|
const level = request.params?.level;
|
|
3140
3363
|
if (!level) {
|
|
3141
3364
|
throw new McpError(
|
|
@@ -3174,7 +3397,7 @@ var McpServer = class {
|
|
|
3174
3397
|
"[MCP] Could not find session for logging/setLevel request"
|
|
3175
3398
|
);
|
|
3176
3399
|
throw new McpError(ErrorCode.InternalError, "Could not find session");
|
|
3177
|
-
}
|
|
3400
|
+
})
|
|
3178
3401
|
);
|
|
3179
3402
|
this.subscriptionManager.registerHandlers(newServer, this.sessions);
|
|
3180
3403
|
return newServer;
|
|
@@ -3190,18 +3413,18 @@ var McpServer = class {
|
|
|
3190
3413
|
this.serverPort
|
|
3191
3414
|
);
|
|
3192
3415
|
}
|
|
3193
|
-
// Tool registration helper
|
|
3194
|
-
tool
|
|
3416
|
+
// Tool registration helper - type is set in wrapRegistrationMethods
|
|
3417
|
+
tool;
|
|
3195
3418
|
// Schema conversion helpers (used by tool registration)
|
|
3196
3419
|
convertZodSchemaToParams = convertZodSchemaToParams;
|
|
3197
3420
|
createParamsSchema = createParamsSchema;
|
|
3198
3421
|
// Template URI parsing helper (used by resource templates)
|
|
3199
3422
|
parseTemplateUri = parseTemplateUri;
|
|
3200
|
-
// Resource registration helpers
|
|
3201
|
-
resource
|
|
3202
|
-
resourceTemplate
|
|
3203
|
-
// Prompt registration helper
|
|
3204
|
-
prompt
|
|
3423
|
+
// Resource registration helpers - types are set in wrapRegistrationMethods
|
|
3424
|
+
resource;
|
|
3425
|
+
resourceTemplate;
|
|
3426
|
+
// Prompt registration helper - type is set in wrapRegistrationMethods
|
|
3427
|
+
prompt;
|
|
3205
3428
|
// Notification helpers
|
|
3206
3429
|
getActiveSessions = getActiveSessions;
|
|
3207
3430
|
sendNotification = sendNotification;
|
|
@@ -3224,7 +3447,9 @@ var McpServer = class {
|
|
|
3224
3447
|
async notifyResourceUpdated(uri) {
|
|
3225
3448
|
return this.subscriptionManager.notifyResourceUpdated(uri, this.sessions);
|
|
3226
3449
|
}
|
|
3227
|
-
uiResource =
|
|
3450
|
+
uiResource = /* @__PURE__ */ __name((definition) => {
|
|
3451
|
+
return uiResourceRegistration(this, definition);
|
|
3452
|
+
}, "uiResource");
|
|
3228
3453
|
/**
|
|
3229
3454
|
* Mount MCP server endpoints at /mcp and /sse
|
|
3230
3455
|
*
|
|
@@ -3249,7 +3474,7 @@ var McpServer = class {
|
|
|
3249
3474
|
const result = await mountMcp(
|
|
3250
3475
|
this.app,
|
|
3251
3476
|
this,
|
|
3252
|
-
// Pass the
|
|
3477
|
+
// Pass the MCPServer instance so mountMcp can call getServerForSession()
|
|
3253
3478
|
this.sessions,
|
|
3254
3479
|
this.config,
|
|
3255
3480
|
isProductionMode()
|
|
@@ -3312,7 +3537,7 @@ var McpServer = class {
|
|
|
3312
3537
|
this.serverHost,
|
|
3313
3538
|
this.serverPort
|
|
3314
3539
|
);
|
|
3315
|
-
if (this.
|
|
3540
|
+
if (this.oauthProvider && !this.oauthSetupState.complete) {
|
|
3316
3541
|
await setupOAuthForServer(
|
|
3317
3542
|
this.app,
|
|
3318
3543
|
this.oauthProvider,
|
|
@@ -3327,10 +3552,14 @@ var McpServer = class {
|
|
|
3327
3552
|
await this.mountMcp();
|
|
3328
3553
|
await this.mountInspector();
|
|
3329
3554
|
this.logRegisteredItems();
|
|
3555
|
+
this._trackServerRun("http");
|
|
3330
3556
|
await startServer(this.app, this.serverPort, this.serverHost, {
|
|
3331
3557
|
onDenoRequest: rewriteSupabaseRequest
|
|
3332
3558
|
});
|
|
3333
3559
|
}
|
|
3560
|
+
_trackServerRun(transport) {
|
|
3561
|
+
Telemetry.getInstance().trackServerRunFromServer(this, transport).catch((e) => console.debug(`Failed to track server run: ${e}`));
|
|
3562
|
+
}
|
|
3334
3563
|
/**
|
|
3335
3564
|
* Get the fetch handler for the server after mounting all endpoints
|
|
3336
3565
|
*
|
|
@@ -3349,7 +3578,7 @@ var McpServer = class {
|
|
|
3349
3578
|
* @example
|
|
3350
3579
|
* ```typescript
|
|
3351
3580
|
* // For Supabase Edge Functions (handles path rewriting automatically)
|
|
3352
|
-
* const server =
|
|
3581
|
+
* const server = new MCPServer({ name: 'my-server', version: '1.0.0' });
|
|
3353
3582
|
* server.tool({ ... });
|
|
3354
3583
|
* const handler = await server.getHandler({ provider: 'supabase' });
|
|
3355
3584
|
* Deno.serve(handler);
|
|
@@ -3358,14 +3587,14 @@ var McpServer = class {
|
|
|
3358
3587
|
* @example
|
|
3359
3588
|
* ```typescript
|
|
3360
3589
|
* // For Cloudflare Workers
|
|
3361
|
-
* const server =
|
|
3590
|
+
* const server = new MCPServer({ name: 'my-server', version: '1.0.0' });
|
|
3362
3591
|
* server.tool({ ... });
|
|
3363
3592
|
* const handler = await server.getHandler();
|
|
3364
3593
|
* export default { fetch: handler };
|
|
3365
3594
|
* ```
|
|
3366
3595
|
*/
|
|
3367
3596
|
async getHandler(options) {
|
|
3368
|
-
if (this.
|
|
3597
|
+
if (this.oauthProvider && !this.oauthSetupState.complete) {
|
|
3369
3598
|
await setupOAuthForServer(
|
|
3370
3599
|
this.app,
|
|
3371
3600
|
this.oauthProvider,
|
|
@@ -3384,6 +3613,8 @@ var McpServer = class {
|
|
|
3384
3613
|
console.log("[MCP] Mounting inspector");
|
|
3385
3614
|
await this.mountInspector();
|
|
3386
3615
|
console.log("[MCP] Mounted inspector");
|
|
3616
|
+
const provider = options?.provider || "fetch";
|
|
3617
|
+
this._trackServerRun(provider);
|
|
3387
3618
|
const fetchHandler = this.app.fetch.bind(this.app);
|
|
3388
3619
|
if (options?.provider === "supabase") {
|
|
3389
3620
|
return async (req) => {
|
|
@@ -3435,8 +3666,9 @@ var McpServer = class {
|
|
|
3435
3666
|
}
|
|
3436
3667
|
}
|
|
3437
3668
|
};
|
|
3669
|
+
var MCPServer = MCPServerClass;
|
|
3438
3670
|
function createMCPServer(name, config = {}) {
|
|
3439
|
-
const instance = new
|
|
3671
|
+
const instance = new MCPServerClass({
|
|
3440
3672
|
name,
|
|
3441
3673
|
version: config.version || "1.0.0",
|
|
3442
3674
|
description: config.description,
|
|
@@ -3520,12 +3752,13 @@ var SupabaseOAuthProvider = class {
|
|
|
3520
3752
|
}
|
|
3521
3753
|
}
|
|
3522
3754
|
getUserInfo(payload) {
|
|
3755
|
+
const userMetadata = payload.user_metadata;
|
|
3523
3756
|
return {
|
|
3524
3757
|
userId: payload.sub || payload.user_id,
|
|
3525
3758
|
email: payload.email,
|
|
3526
|
-
name:
|
|
3527
|
-
username:
|
|
3528
|
-
picture:
|
|
3759
|
+
name: userMetadata?.name || userMetadata?.full_name,
|
|
3760
|
+
username: userMetadata?.username,
|
|
3761
|
+
picture: userMetadata?.avatar_url,
|
|
3529
3762
|
roles: payload.role ? [payload.role] : [],
|
|
3530
3763
|
permissions: payload.aal ? [`aal:${payload.aal}`] : [],
|
|
3531
3764
|
// Include Supabase-specific claims
|
|
@@ -3598,6 +3831,7 @@ var Auth0OAuthProvider = class {
|
|
|
3598
3831
|
}
|
|
3599
3832
|
}
|
|
3600
3833
|
getUserInfo(payload) {
|
|
3834
|
+
const scope = payload.scope;
|
|
3601
3835
|
return {
|
|
3602
3836
|
userId: payload.sub,
|
|
3603
3837
|
email: payload.email,
|
|
@@ -3610,7 +3844,7 @@ var Auth0OAuthProvider = class {
|
|
|
3610
3844
|
// Auth0 can include roles (if configured)
|
|
3611
3845
|
roles: payload.roles || payload["https://your-app.com/roles"] || [],
|
|
3612
3846
|
// Include scope as well
|
|
3613
|
-
scopes:
|
|
3847
|
+
scopes: scope ? scope.split(" ") : [],
|
|
3614
3848
|
// Additional Auth0-specific claims
|
|
3615
3849
|
email_verified: payload.email_verified,
|
|
3616
3850
|
updated_at: payload.updated_at
|
|
@@ -3682,8 +3916,10 @@ var KeycloakOAuthProvider = class {
|
|
|
3682
3916
|
}
|
|
3683
3917
|
}
|
|
3684
3918
|
getUserInfo(payload) {
|
|
3685
|
-
const
|
|
3686
|
-
const
|
|
3919
|
+
const realmAccess = payload.realm_access;
|
|
3920
|
+
const realmRoles = realmAccess?.roles || [];
|
|
3921
|
+
const resourceAccess = payload.resource_access;
|
|
3922
|
+
const clientRoles = this.config.clientId && (resourceAccess?.[this.config.clientId]?.roles || []) || [];
|
|
3687
3923
|
const allRoles = [...realmRoles, ...clientRoles];
|
|
3688
3924
|
const permissions = [];
|
|
3689
3925
|
if (payload.resource_access) {
|
|
@@ -3697,6 +3933,7 @@ var KeycloakOAuthProvider = class {
|
|
|
3697
3933
|
}
|
|
3698
3934
|
);
|
|
3699
3935
|
}
|
|
3936
|
+
const scope = payload.scope;
|
|
3700
3937
|
return {
|
|
3701
3938
|
userId: payload.sub,
|
|
3702
3939
|
email: payload.email,
|
|
@@ -3707,7 +3944,7 @@ var KeycloakOAuthProvider = class {
|
|
|
3707
3944
|
roles: allRoles,
|
|
3708
3945
|
permissions,
|
|
3709
3946
|
// Include scope as well
|
|
3710
|
-
scopes:
|
|
3947
|
+
scopes: scope ? scope.split(" ") : [],
|
|
3711
3948
|
// Keycloak-specific claims
|
|
3712
3949
|
email_verified: payload.email_verified,
|
|
3713
3950
|
given_name: payload.given_name,
|
|
@@ -3836,7 +4073,7 @@ var CustomOAuthProvider = class {
|
|
|
3836
4073
|
async verifyToken(token) {
|
|
3837
4074
|
try {
|
|
3838
4075
|
const result = await this.config.verifyToken(token);
|
|
3839
|
-
return
|
|
4076
|
+
return result;
|
|
3840
4077
|
} catch (error2) {
|
|
3841
4078
|
throw new Error(`Custom OAuth verification failed: ${error2}`);
|
|
3842
4079
|
}
|
|
@@ -3845,16 +4082,19 @@ var CustomOAuthProvider = class {
|
|
|
3845
4082
|
if (this.config.getUserInfo) {
|
|
3846
4083
|
return this.config.getUserInfo(payload);
|
|
3847
4084
|
}
|
|
4085
|
+
const scope = payload.scope;
|
|
4086
|
+
const roles = payload.roles;
|
|
4087
|
+
const permissions = payload.permissions;
|
|
3848
4088
|
return {
|
|
3849
4089
|
userId: payload.sub || payload.user_id || payload.id,
|
|
3850
|
-
email: payload.email,
|
|
3851
|
-
name: payload.name,
|
|
3852
|
-
username: payload.username || payload.preferred_username,
|
|
3853
|
-
nickname: payload.nickname,
|
|
3854
|
-
picture: payload.picture || payload.avatar_url,
|
|
3855
|
-
roles:
|
|
3856
|
-
permissions:
|
|
3857
|
-
scopes:
|
|
4090
|
+
email: payload.email ? payload.email : void 0,
|
|
4091
|
+
name: payload.name ? payload.name : void 0,
|
|
4092
|
+
username: payload.username || payload.preferred_username ? payload.username || payload.preferred_username : void 0,
|
|
4093
|
+
nickname: payload.nickname ? payload.nickname : void 0,
|
|
4094
|
+
picture: payload.picture || payload.avatar_url ? payload.picture || payload.avatar_url : void 0,
|
|
4095
|
+
roles: Array.isArray(roles) ? roles : [],
|
|
4096
|
+
permissions: Array.isArray(permissions) ? permissions : [],
|
|
4097
|
+
scopes: scope ? scope.split(" ") : []
|
|
3858
4098
|
};
|
|
3859
4099
|
}
|
|
3860
4100
|
getIssuer() {
|
|
@@ -4039,6 +4279,8 @@ function requireAnyScope(needed) {
|
|
|
4039
4279
|
}
|
|
4040
4280
|
__name(requireAnyScope, "requireAnyScope");
|
|
4041
4281
|
export {
|
|
4282
|
+
MCPServer,
|
|
4283
|
+
VERSION,
|
|
4042
4284
|
adaptConnectMiddleware,
|
|
4043
4285
|
adaptMiddleware,
|
|
4044
4286
|
array,
|
|
@@ -4053,6 +4295,7 @@ export {
|
|
|
4053
4295
|
css,
|
|
4054
4296
|
error,
|
|
4055
4297
|
getAuth,
|
|
4298
|
+
getPackageVersion,
|
|
4056
4299
|
getRequestContext,
|
|
4057
4300
|
hasAnyScope,
|
|
4058
4301
|
hasRequestContext,
|