mcp-use 1.9.1-canary.1 → 1.10.0-canary.3
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-QREDNTLS.js → chunk-F5MMLHUR.js} +1 -1
- package/dist/{chunk-33U4IA4N.js → chunk-L6P6GBCW.js} +84 -3
- package/dist/{chunk-ZQUCGISK.js → chunk-LTA4LQTH.js} +6 -4
- package/dist/{chunk-D22NUQTL.js → chunk-QBTQXCAI.js} +185 -1
- package/dist/{chunk-MUZ5WYE3.js → chunk-VPHP7ERH.js} +18 -9
- package/dist/{chunk-U5BX3ISQ.js → chunk-YMJL66MY.js} +10 -6
- package/dist/index.cjs +220 -20
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -12
- 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 +200 -10
- package/dist/src/browser.js +7 -7
- 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 +207 -12
- package/dist/src/react/index.js +4 -4
- 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 +268 -125
- package/dist/src/server/index.d.ts +2 -2
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +188 -126
- package/dist/src/server/mcp-server.d.ts +21 -10
- 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/index.d.ts +5 -4
- package/dist/src/server/prompts/index.d.ts.map +1 -1
- package/dist/src/server/resources/index.d.ts +43 -24
- package/dist/src/server/resources/index.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 +2 -1
- package/dist/src/server/types/prompt.d.ts.map +1 -1
- package/dist/src/server/types/resource.d.ts +54 -9
- package/dist/src/server/types/resource.d.ts.map +1 -1
- package/dist/src/server/types/tool-context.d.ts +115 -0
- package/dist/src/server/types/tool-context.d.ts.map +1 -1
- package/dist/src/server/types/tool.d.ts +1 -1
- package/dist/src/server/types/tool.d.ts.map +1 -1
- package/dist/src/server/types/widget.d.ts +2 -1
- package/dist/src/server/types/widget.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 +11 -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 +337 -2
- package/dist/src/session.d.ts.map +1 -1
- package/dist/{tool-execution-helpers-BQJTPWPN.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";
|
|
@@ -1587,25 +1587,25 @@ function setupWidgetRoutes(app, serverConfig) {
|
|
|
1587
1587
|
__name(setupWidgetRoutes, "setupWidgetRoutes");
|
|
1588
1588
|
|
|
1589
1589
|
// src/server/widgets/ui-resource-registration.ts
|
|
1590
|
-
function uiResourceRegistration(definition) {
|
|
1590
|
+
function uiResourceRegistration(server, definition) {
|
|
1591
1591
|
const displayName = definition.title || definition.name;
|
|
1592
1592
|
let resourceUri;
|
|
1593
1593
|
let mimeType;
|
|
1594
1594
|
switch (definition.type) {
|
|
1595
1595
|
case "externalUrl":
|
|
1596
|
-
resourceUri = generateWidgetUri(definition.widget,
|
|
1596
|
+
resourceUri = generateWidgetUri(definition.widget, server.buildId);
|
|
1597
1597
|
mimeType = "text/uri-list";
|
|
1598
1598
|
break;
|
|
1599
1599
|
case "rawHtml":
|
|
1600
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
1600
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId);
|
|
1601
1601
|
mimeType = "text/html";
|
|
1602
1602
|
break;
|
|
1603
1603
|
case "remoteDom":
|
|
1604
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
1604
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId);
|
|
1605
1605
|
mimeType = "application/vnd.mcp-ui.remote-dom+javascript";
|
|
1606
1606
|
break;
|
|
1607
1607
|
case "appsSdk":
|
|
1608
|
-
resourceUri = generateWidgetUri(definition.name,
|
|
1608
|
+
resourceUri = generateWidgetUri(definition.name, server.buildId, ".html");
|
|
1609
1609
|
mimeType = "text/html+skybridge";
|
|
1610
1610
|
break;
|
|
1611
1611
|
default:
|
|
@@ -1614,12 +1614,12 @@ function uiResourceRegistration(definition) {
|
|
|
1614
1614
|
);
|
|
1615
1615
|
}
|
|
1616
1616
|
const serverConfig = {
|
|
1617
|
-
serverHost:
|
|
1618
|
-
serverPort:
|
|
1619
|
-
serverBaseUrl:
|
|
1620
|
-
buildId:
|
|
1617
|
+
serverHost: server.serverHost,
|
|
1618
|
+
serverPort: server.serverPort || 3e3,
|
|
1619
|
+
serverBaseUrl: server.serverBaseUrl,
|
|
1620
|
+
buildId: server.buildId
|
|
1621
1621
|
};
|
|
1622
|
-
|
|
1622
|
+
server.resource({
|
|
1623
1623
|
name: definition.name,
|
|
1624
1624
|
uri: resourceUri,
|
|
1625
1625
|
title: definition.title,
|
|
@@ -1641,9 +1641,9 @@ function uiResourceRegistration(definition) {
|
|
|
1641
1641
|
}, "readCallback")
|
|
1642
1642
|
});
|
|
1643
1643
|
if (definition.type === "appsSdk") {
|
|
1644
|
-
const buildIdPart =
|
|
1644
|
+
const buildIdPart = server.buildId ? `-${server.buildId}` : "";
|
|
1645
1645
|
const uriTemplate = `ui://widget/${definition.name}${buildIdPart}-{id}.html`;
|
|
1646
|
-
|
|
1646
|
+
server.resourceTemplate({
|
|
1647
1647
|
name: `${definition.name}-dynamic`,
|
|
1648
1648
|
resourceTemplate: {
|
|
1649
1649
|
uriTemplate,
|
|
@@ -1683,13 +1683,15 @@ function uiResourceRegistration(definition) {
|
|
|
1683
1683
|
}
|
|
1684
1684
|
}
|
|
1685
1685
|
}
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1686
|
+
server.tool(
|
|
1687
|
+
{
|
|
1688
|
+
name: definition.name,
|
|
1689
|
+
title: definition.title,
|
|
1690
|
+
description: definition.description,
|
|
1691
|
+
inputs: convertPropsToInputs(definition.props),
|
|
1692
|
+
_meta: Object.keys(toolMetadata).length > 0 ? toolMetadata : void 0
|
|
1693
|
+
},
|
|
1694
|
+
async (params) => {
|
|
1693
1695
|
const uiResource = await createWidgetUIResource(
|
|
1694
1696
|
definition,
|
|
1695
1697
|
params,
|
|
@@ -1699,7 +1701,7 @@ function uiResourceRegistration(definition) {
|
|
|
1699
1701
|
const randomId = Math.random().toString(36).substring(2, 15);
|
|
1700
1702
|
const uniqueUri = generateWidgetUri(
|
|
1701
1703
|
definition.name,
|
|
1702
|
-
|
|
1704
|
+
server.buildId,
|
|
1703
1705
|
".html",
|
|
1704
1706
|
randomId
|
|
1705
1707
|
);
|
|
@@ -1729,9 +1731,9 @@ function uiResourceRegistration(definition) {
|
|
|
1729
1731
|
uiResource
|
|
1730
1732
|
]
|
|
1731
1733
|
};
|
|
1732
|
-
}
|
|
1733
|
-
|
|
1734
|
-
return
|
|
1734
|
+
}
|
|
1735
|
+
);
|
|
1736
|
+
return server;
|
|
1735
1737
|
}
|
|
1736
1738
|
__name(uiResourceRegistration, "uiResourceRegistration");
|
|
1737
1739
|
|
|
@@ -1867,7 +1869,7 @@ function toolRegistration(toolDefinition, callback) {
|
|
|
1867
1869
|
const initialRequestContext = getRequestContext();
|
|
1868
1870
|
const extraProgressToken = extra?._meta?.progressToken;
|
|
1869
1871
|
const extraSendNotification = extra?.sendNotification;
|
|
1870
|
-
const { requestContext, progressToken, sendNotification: sendNotification2 } = findSessionContext(
|
|
1872
|
+
const { requestContext, session, progressToken, sendNotification: sendNotification2 } = findSessionContext(
|
|
1871
1873
|
this.sessions,
|
|
1872
1874
|
initialRequestContext,
|
|
1873
1875
|
extraProgressToken,
|
|
@@ -1878,7 +1880,9 @@ function toolRegistration(toolDefinition, callback) {
|
|
|
1878
1880
|
this.createMessage.bind(this),
|
|
1879
1881
|
this.server.server.elicitInput.bind(this.server.server),
|
|
1880
1882
|
progressToken,
|
|
1881
|
-
sendNotification2
|
|
1883
|
+
sendNotification2,
|
|
1884
|
+
session?.logLevel,
|
|
1885
|
+
session?.clientCapabilities
|
|
1882
1886
|
);
|
|
1883
1887
|
const executeCallback = /* @__PURE__ */ __name(async () => {
|
|
1884
1888
|
if (actualCallback.length >= 2) {
|
|
@@ -2057,7 +2061,7 @@ function registerResource(resourceDefinition, callback) {
|
|
|
2057
2061
|
const explicitMimeType = resourceDefinition.mimeType;
|
|
2058
2062
|
const wrappedCallback = /* @__PURE__ */ __name(async () => {
|
|
2059
2063
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2060
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2064
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
|
|
2061
2065
|
const initialRequestContext = getRequestContext2();
|
|
2062
2066
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2063
2067
|
const { requestContext } = findSessionContext2(
|
|
@@ -2105,24 +2109,25 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
|
|
|
2105
2109
|
`Resource template '${resourceTemplateDefinition.name}' must have either a readCallback property or a callback parameter`
|
|
2106
2110
|
);
|
|
2107
2111
|
}
|
|
2108
|
-
const
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2112
|
+
const isFlatStructure = "uriTemplate" in resourceTemplateDefinition;
|
|
2113
|
+
const uriTemplate = isFlatStructure ? resourceTemplateDefinition.uriTemplate : resourceTemplateDefinition.resourceTemplate.uriTemplate;
|
|
2114
|
+
const mimeType = isFlatStructure ? resourceTemplateDefinition.mimeType : resourceTemplateDefinition.resourceTemplate.mimeType;
|
|
2115
|
+
const templateDescription = isFlatStructure ? void 0 : resourceTemplateDefinition.resourceTemplate.description;
|
|
2116
|
+
const template = new ResourceTemplate(uriTemplate, {
|
|
2117
|
+
list: void 0,
|
|
2118
|
+
// Optional: callback to list all matching resources
|
|
2119
|
+
complete: void 0
|
|
2120
|
+
// Optional: callback for auto-completion
|
|
2121
|
+
});
|
|
2117
2122
|
const metadata = {};
|
|
2118
2123
|
if (resourceTemplateDefinition.title) {
|
|
2119
2124
|
metadata.title = resourceTemplateDefinition.title;
|
|
2120
2125
|
}
|
|
2121
|
-
if (resourceTemplateDefinition.description ||
|
|
2122
|
-
metadata.description = resourceTemplateDefinition.description ||
|
|
2126
|
+
if (resourceTemplateDefinition.description || templateDescription) {
|
|
2127
|
+
metadata.description = resourceTemplateDefinition.description || templateDescription;
|
|
2123
2128
|
}
|
|
2124
|
-
if (
|
|
2125
|
-
metadata.mimeType =
|
|
2129
|
+
if (mimeType) {
|
|
2130
|
+
metadata.mimeType = mimeType;
|
|
2126
2131
|
}
|
|
2127
2132
|
if (resourceTemplateDefinition.annotations) {
|
|
2128
2133
|
metadata.annotations = resourceTemplateDefinition.annotations;
|
|
@@ -2132,12 +2137,9 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
|
|
|
2132
2137
|
template,
|
|
2133
2138
|
metadata,
|
|
2134
2139
|
async (uri) => {
|
|
2135
|
-
const params = this.parseTemplateUri(
|
|
2136
|
-
resourceTemplateDefinition.resourceTemplate.uriTemplate,
|
|
2137
|
-
uri.toString()
|
|
2138
|
-
);
|
|
2140
|
+
const params = this.parseTemplateUri(uriTemplate, uri.toString());
|
|
2139
2141
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2140
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2142
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
|
|
2141
2143
|
const initialRequestContext = getRequestContext2();
|
|
2142
2144
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2143
2145
|
const { requestContext } = findSessionContext2(
|
|
@@ -2150,8 +2152,12 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
|
|
|
2150
2152
|
const executeCallback = /* @__PURE__ */ __name(async () => {
|
|
2151
2153
|
if (actualCallback.length >= 3) {
|
|
2152
2154
|
return await actualCallback(uri, params, enhancedContext);
|
|
2155
|
+
} else if (actualCallback.length === 2) {
|
|
2156
|
+
return await actualCallback(uri, params);
|
|
2157
|
+
} else if (actualCallback.length === 1) {
|
|
2158
|
+
return await actualCallback(uri);
|
|
2153
2159
|
}
|
|
2154
|
-
return await actualCallback(
|
|
2160
|
+
return await actualCallback();
|
|
2155
2161
|
}, "executeCallback");
|
|
2156
2162
|
const result = requestContext ? await runWithContext2(requestContext, executeCallback) : await executeCallback();
|
|
2157
2163
|
if ("contents" in result && Array.isArray(result.contents)) {
|
|
@@ -2188,7 +2194,7 @@ function registerPrompt(promptDefinition, callback) {
|
|
|
2188
2194
|
}
|
|
2189
2195
|
const wrappedCallback = /* @__PURE__ */ __name(async (params, extra) => {
|
|
2190
2196
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2191
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2197
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-2LGVSS7L.js");
|
|
2192
2198
|
const initialRequestContext = getRequestContext2();
|
|
2193
2199
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2194
2200
|
const { requestContext } = findSessionContext2(
|
|
@@ -2522,6 +2528,17 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
|
|
|
2522
2528
|
context: c,
|
|
2523
2529
|
honoContext: c
|
|
2524
2530
|
});
|
|
2531
|
+
server.server.oninitialized = () => {
|
|
2532
|
+
const clientCapabilities = server.server.getClientCapabilities();
|
|
2533
|
+
if (clientCapabilities && sessions.has(sid)) {
|
|
2534
|
+
const session = sessions.get(sid);
|
|
2535
|
+
session.clientCapabilities = clientCapabilities;
|
|
2536
|
+
console.log(
|
|
2537
|
+
`[MCP] Captured client capabilities for session ${sid}:`,
|
|
2538
|
+
Object.keys(clientCapabilities)
|
|
2539
|
+
);
|
|
2540
|
+
}
|
|
2541
|
+
};
|
|
2525
2542
|
}, "onsessioninitialized"),
|
|
2526
2543
|
onsessionclosed: /* @__PURE__ */ __name((sid) => {
|
|
2527
2544
|
console.log(`[MCP] Session closed: ${sid}`);
|
|
@@ -2765,12 +2782,13 @@ function createBearerAuthMiddleware(provider, baseUrl) {
|
|
|
2765
2782
|
const result = await provider.verifyToken(token);
|
|
2766
2783
|
const payload = result.payload;
|
|
2767
2784
|
const user = provider.getUserInfo(payload);
|
|
2785
|
+
const scope = payload.scope;
|
|
2768
2786
|
const authInfo = {
|
|
2769
2787
|
user,
|
|
2770
2788
|
payload,
|
|
2771
2789
|
accessToken: token,
|
|
2772
2790
|
// Extract scopes from scope claim (OAuth standard)
|
|
2773
|
-
scopes:
|
|
2791
|
+
scopes: scope ? scope.split(" ") : [],
|
|
2774
2792
|
// Extract permissions (Auth0 style, or custom)
|
|
2775
2793
|
permissions: payload.permissions || []
|
|
2776
2794
|
};
|
|
@@ -2818,9 +2836,9 @@ async function setupOAuthForServer(app, oauthProvider, baseUrl, state) {
|
|
|
2818
2836
|
__name(setupOAuthForServer, "setupOAuthForServer");
|
|
2819
2837
|
|
|
2820
2838
|
// src/server/mcp-server.ts
|
|
2821
|
-
var
|
|
2839
|
+
var MCPServer = class {
|
|
2822
2840
|
static {
|
|
2823
|
-
__name(this, "
|
|
2841
|
+
__name(this, "MCPServer");
|
|
2824
2842
|
}
|
|
2825
2843
|
/**
|
|
2826
2844
|
* Native MCP server instance from @modelcontextprotocol/sdk
|
|
@@ -2887,7 +2905,7 @@ var McpServer = class {
|
|
|
2887
2905
|
* access to Hono methods while preserving MCP server functionality.
|
|
2888
2906
|
*
|
|
2889
2907
|
* @param config - Server configuration including name, version, and description
|
|
2890
|
-
* @returns A proxied
|
|
2908
|
+
* @returns A proxied MCPServer instance that supports both MCP and Hono methods
|
|
2891
2909
|
*/
|
|
2892
2910
|
constructor(config) {
|
|
2893
2911
|
this.config = config;
|
|
@@ -2925,37 +2943,56 @@ var McpServer = class {
|
|
|
2925
2943
|
const self = this;
|
|
2926
2944
|
this.tool = ((toolDefinition, callback) => {
|
|
2927
2945
|
const actualCallback = callback || toolDefinition.cb;
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2946
|
+
if (actualCallback) {
|
|
2947
|
+
self.registrationRecipes.tools.set(toolDefinition.name, {
|
|
2948
|
+
config: toolDefinition,
|
|
2949
|
+
handler: actualCallback
|
|
2950
|
+
});
|
|
2951
|
+
}
|
|
2932
2952
|
return originalTool.call(self, toolDefinition, callback);
|
|
2933
2953
|
});
|
|
2934
|
-
this.prompt =
|
|
2954
|
+
this.prompt = ((promptDefinition, callback) => {
|
|
2935
2955
|
const actualCallback = callback || promptDefinition.cb;
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2956
|
+
if (actualCallback) {
|
|
2957
|
+
self.registrationRecipes.prompts.set(promptDefinition.name, {
|
|
2958
|
+
config: promptDefinition,
|
|
2959
|
+
handler: actualCallback
|
|
2960
|
+
});
|
|
2961
|
+
}
|
|
2962
|
+
return originalPrompt.call(
|
|
2963
|
+
self,
|
|
2964
|
+
promptDefinition,
|
|
2965
|
+
callback
|
|
2966
|
+
);
|
|
2967
|
+
});
|
|
2968
|
+
this.resource = ((resourceDefinition, callback) => {
|
|
2943
2969
|
const actualCallback = callback || resourceDefinition.readCallback;
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2970
|
+
if (actualCallback) {
|
|
2971
|
+
const resourceKey = `${resourceDefinition.name}:${resourceDefinition.uri}`;
|
|
2972
|
+
self.registrationRecipes.resources.set(resourceKey, {
|
|
2973
|
+
config: resourceDefinition,
|
|
2974
|
+
handler: actualCallback
|
|
2975
|
+
});
|
|
2976
|
+
}
|
|
2949
2977
|
return originalResource.call(self, resourceDefinition, callback);
|
|
2950
|
-
};
|
|
2951
|
-
this.resourceTemplate =
|
|
2978
|
+
});
|
|
2979
|
+
this.resourceTemplate = ((templateDefinition, callback) => {
|
|
2952
2980
|
const actualCallback = callback || templateDefinition.readCallback;
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2981
|
+
if (actualCallback) {
|
|
2982
|
+
self.registrationRecipes.resourceTemplates.set(
|
|
2983
|
+
templateDefinition.name,
|
|
2984
|
+
{
|
|
2985
|
+
config: templateDefinition,
|
|
2986
|
+
handler: actualCallback
|
|
2987
|
+
}
|
|
2988
|
+
);
|
|
2989
|
+
}
|
|
2990
|
+
return originalResourceTemplate.call(
|
|
2991
|
+
self,
|
|
2992
|
+
templateDefinition,
|
|
2993
|
+
callback
|
|
2994
|
+
);
|
|
2995
|
+
});
|
|
2959
2996
|
}
|
|
2960
2997
|
/**
|
|
2961
2998
|
* Create a new server instance for a session following official SDK pattern.
|
|
@@ -2993,6 +3030,15 @@ var McpServer = class {
|
|
|
2993
3030
|
extraProgressToken,
|
|
2994
3031
|
extraSendNotification
|
|
2995
3032
|
);
|
|
3033
|
+
let sessionId;
|
|
3034
|
+
if (session) {
|
|
3035
|
+
for (const [id, s] of this.sessions.entries()) {
|
|
3036
|
+
if (s === session) {
|
|
3037
|
+
sessionId = id;
|
|
3038
|
+
break;
|
|
3039
|
+
}
|
|
3040
|
+
}
|
|
3041
|
+
}
|
|
2996
3042
|
const createMessageWithLogging = /* @__PURE__ */ __name(async (params2, options) => {
|
|
2997
3043
|
console.log("[createMessage] About to call server.createMessage");
|
|
2998
3044
|
console.log("[createMessage] Has server:", !!newServer);
|
|
@@ -3004,11 +3050,12 @@ var McpServer = class {
|
|
|
3004
3050
|
console.log("[createMessage] Got result successfully");
|
|
3005
3051
|
return result;
|
|
3006
3052
|
} catch (err) {
|
|
3053
|
+
const error2 = err;
|
|
3007
3054
|
console.error(
|
|
3008
3055
|
"[createMessage] Error:",
|
|
3009
|
-
|
|
3056
|
+
error2.message,
|
|
3010
3057
|
"Code:",
|
|
3011
|
-
|
|
3058
|
+
error2.code
|
|
3012
3059
|
);
|
|
3013
3060
|
throw err;
|
|
3014
3061
|
}
|
|
@@ -3019,7 +3066,10 @@ var McpServer = class {
|
|
|
3019
3066
|
newServer.server.elicitInput.bind(newServer.server),
|
|
3020
3067
|
progressToken,
|
|
3021
3068
|
sendNotification2,
|
|
3022
|
-
session?.logLevel
|
|
3069
|
+
session?.logLevel,
|
|
3070
|
+
session?.clientCapabilities,
|
|
3071
|
+
sessionId,
|
|
3072
|
+
this.sessions
|
|
3023
3073
|
);
|
|
3024
3074
|
const executeCallback = /* @__PURE__ */ __name(async () => {
|
|
3025
3075
|
if (actualCallback.length >= 2) {
|
|
@@ -3054,8 +3104,8 @@ var McpServer = class {
|
|
|
3054
3104
|
} else {
|
|
3055
3105
|
argsSchema = void 0;
|
|
3056
3106
|
}
|
|
3057
|
-
const wrappedHandler = /* @__PURE__ */ __name(async (params) => {
|
|
3058
|
-
const result = await handler(params);
|
|
3107
|
+
const wrappedHandler = /* @__PURE__ */ __name(async (params, extra) => {
|
|
3108
|
+
const result = await handler(params, extra);
|
|
3059
3109
|
if ("messages" in result && Array.isArray(result.messages)) {
|
|
3060
3110
|
return result;
|
|
3061
3111
|
}
|
|
@@ -3074,8 +3124,8 @@ var McpServer = class {
|
|
|
3074
3124
|
}
|
|
3075
3125
|
for (const [_key, recipe] of this.registrationRecipes.resources) {
|
|
3076
3126
|
const { config, handler } = recipe;
|
|
3077
|
-
const wrappedHandler = /* @__PURE__ */ __name(async () => {
|
|
3078
|
-
const result = await handler();
|
|
3127
|
+
const wrappedHandler = /* @__PURE__ */ __name(async (extra) => {
|
|
3128
|
+
const result = await handler(extra);
|
|
3079
3129
|
if ("contents" in result && Array.isArray(result.contents)) {
|
|
3080
3130
|
return result;
|
|
3081
3131
|
}
|
|
@@ -3095,22 +3145,23 @@ var McpServer = class {
|
|
|
3095
3145
|
}
|
|
3096
3146
|
for (const [_name, recipe] of this.registrationRecipes.resourceTemplates) {
|
|
3097
3147
|
const { config, handler } = recipe;
|
|
3098
|
-
const
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3148
|
+
const isFlatStructure = "uriTemplate" in config;
|
|
3149
|
+
const uriTemplate = isFlatStructure ? config.uriTemplate : config.resourceTemplate.uriTemplate;
|
|
3150
|
+
const mimeType = isFlatStructure ? config.mimeType : config.resourceTemplate.mimeType;
|
|
3151
|
+
const templateDescription = isFlatStructure ? void 0 : config.resourceTemplate.description;
|
|
3152
|
+
const template = new ResourceTemplate2(uriTemplate, {
|
|
3153
|
+
list: void 0,
|
|
3154
|
+
complete: void 0
|
|
3155
|
+
});
|
|
3105
3156
|
const metadata = {};
|
|
3106
3157
|
if (config.title) {
|
|
3107
3158
|
metadata.title = config.title;
|
|
3108
3159
|
}
|
|
3109
|
-
if (config.description ||
|
|
3110
|
-
metadata.description = config.description ||
|
|
3160
|
+
if (config.description || templateDescription) {
|
|
3161
|
+
metadata.description = config.description || templateDescription;
|
|
3111
3162
|
}
|
|
3112
|
-
if (
|
|
3113
|
-
metadata.mimeType =
|
|
3163
|
+
if (mimeType) {
|
|
3164
|
+
metadata.mimeType = mimeType;
|
|
3114
3165
|
}
|
|
3115
3166
|
if (config.annotations) {
|
|
3116
3167
|
metadata.annotations = config.annotations;
|
|
@@ -3119,23 +3170,23 @@ var McpServer = class {
|
|
|
3119
3170
|
config.name,
|
|
3120
3171
|
template,
|
|
3121
3172
|
metadata,
|
|
3122
|
-
async (uri) => {
|
|
3123
|
-
const params = this.parseTemplateUri(
|
|
3124
|
-
|
|
3125
|
-
uri.toString()
|
|
3126
|
-
);
|
|
3127
|
-
const result = await handler(uri, params);
|
|
3173
|
+
async (uri, extra) => {
|
|
3174
|
+
const params = this.parseTemplateUri(uriTemplate, uri.toString());
|
|
3175
|
+
const result = await handler(uri, params, extra);
|
|
3128
3176
|
if ("contents" in result && Array.isArray(result.contents)) {
|
|
3129
3177
|
return result;
|
|
3130
3178
|
}
|
|
3131
3179
|
const { convertToolResultToResourceResult: convertToolResultToResourceResult2 } = await import("../../conversion-5MA4VY3B.js");
|
|
3132
|
-
return convertToolResultToResourceResult2(
|
|
3180
|
+
return convertToolResultToResourceResult2(
|
|
3181
|
+
uri.toString(),
|
|
3182
|
+
result
|
|
3183
|
+
);
|
|
3133
3184
|
}
|
|
3134
3185
|
);
|
|
3135
3186
|
}
|
|
3136
3187
|
newServer.server.setRequestHandler(
|
|
3137
3188
|
z2.object({ method: z2.literal("logging/setLevel") }).passthrough(),
|
|
3138
|
-
async (request) => {
|
|
3189
|
+
(async (request, extra) => {
|
|
3139
3190
|
const level = request.params?.level;
|
|
3140
3191
|
if (!level) {
|
|
3141
3192
|
throw new McpError(
|
|
@@ -3174,7 +3225,7 @@ var McpServer = class {
|
|
|
3174
3225
|
"[MCP] Could not find session for logging/setLevel request"
|
|
3175
3226
|
);
|
|
3176
3227
|
throw new McpError(ErrorCode.InternalError, "Could not find session");
|
|
3177
|
-
}
|
|
3228
|
+
})
|
|
3178
3229
|
);
|
|
3179
3230
|
this.subscriptionManager.registerHandlers(newServer, this.sessions);
|
|
3180
3231
|
return newServer;
|
|
@@ -3224,7 +3275,9 @@ var McpServer = class {
|
|
|
3224
3275
|
async notifyResourceUpdated(uri) {
|
|
3225
3276
|
return this.subscriptionManager.notifyResourceUpdated(uri, this.sessions);
|
|
3226
3277
|
}
|
|
3227
|
-
uiResource =
|
|
3278
|
+
uiResource = /* @__PURE__ */ __name((definition) => {
|
|
3279
|
+
return uiResourceRegistration(this, definition);
|
|
3280
|
+
}, "uiResource");
|
|
3228
3281
|
/**
|
|
3229
3282
|
* Mount MCP server endpoints at /mcp and /sse
|
|
3230
3283
|
*
|
|
@@ -3249,7 +3302,7 @@ var McpServer = class {
|
|
|
3249
3302
|
const result = await mountMcp(
|
|
3250
3303
|
this.app,
|
|
3251
3304
|
this,
|
|
3252
|
-
// Pass the
|
|
3305
|
+
// Pass the MCPServer instance so mountMcp can call getServerForSession()
|
|
3253
3306
|
this.sessions,
|
|
3254
3307
|
this.config,
|
|
3255
3308
|
isProductionMode()
|
|
@@ -3312,7 +3365,7 @@ var McpServer = class {
|
|
|
3312
3365
|
this.serverHost,
|
|
3313
3366
|
this.serverPort
|
|
3314
3367
|
);
|
|
3315
|
-
if (this.oauthConfig && !this.oauthSetupState.complete) {
|
|
3368
|
+
if (this.oauthConfig && !this.oauthSetupState.complete && this.oauthProvider) {
|
|
3316
3369
|
await setupOAuthForServer(
|
|
3317
3370
|
this.app,
|
|
3318
3371
|
this.oauthProvider,
|
|
@@ -3349,7 +3402,7 @@ var McpServer = class {
|
|
|
3349
3402
|
* @example
|
|
3350
3403
|
* ```typescript
|
|
3351
3404
|
* // For Supabase Edge Functions (handles path rewriting automatically)
|
|
3352
|
-
* const server =
|
|
3405
|
+
* const server = new MCPServer({ name: 'my-server', version: '1.0.0' });
|
|
3353
3406
|
* server.tool({ ... });
|
|
3354
3407
|
* const handler = await server.getHandler({ provider: 'supabase' });
|
|
3355
3408
|
* Deno.serve(handler);
|
|
@@ -3358,14 +3411,14 @@ var McpServer = class {
|
|
|
3358
3411
|
* @example
|
|
3359
3412
|
* ```typescript
|
|
3360
3413
|
* // For Cloudflare Workers
|
|
3361
|
-
* const server =
|
|
3414
|
+
* const server = new MCPServer({ name: 'my-server', version: '1.0.0' });
|
|
3362
3415
|
* server.tool({ ... });
|
|
3363
3416
|
* const handler = await server.getHandler();
|
|
3364
3417
|
* export default { fetch: handler };
|
|
3365
3418
|
* ```
|
|
3366
3419
|
*/
|
|
3367
3420
|
async getHandler(options) {
|
|
3368
|
-
if (this.oauthConfig && !this.oauthSetupState.complete) {
|
|
3421
|
+
if (this.oauthConfig && !this.oauthSetupState.complete && this.oauthProvider) {
|
|
3369
3422
|
await setupOAuthForServer(
|
|
3370
3423
|
this.app,
|
|
3371
3424
|
this.oauthProvider,
|
|
@@ -3436,7 +3489,7 @@ var McpServer = class {
|
|
|
3436
3489
|
}
|
|
3437
3490
|
};
|
|
3438
3491
|
function createMCPServer(name, config = {}) {
|
|
3439
|
-
const instance = new
|
|
3492
|
+
const instance = new MCPServer({
|
|
3440
3493
|
name,
|
|
3441
3494
|
version: config.version || "1.0.0",
|
|
3442
3495
|
description: config.description,
|
|
@@ -3520,12 +3573,13 @@ var SupabaseOAuthProvider = class {
|
|
|
3520
3573
|
}
|
|
3521
3574
|
}
|
|
3522
3575
|
getUserInfo(payload) {
|
|
3576
|
+
const userMetadata = payload.user_metadata;
|
|
3523
3577
|
return {
|
|
3524
3578
|
userId: payload.sub || payload.user_id,
|
|
3525
3579
|
email: payload.email,
|
|
3526
|
-
name:
|
|
3527
|
-
username:
|
|
3528
|
-
picture:
|
|
3580
|
+
name: userMetadata?.name || userMetadata?.full_name,
|
|
3581
|
+
username: userMetadata?.username,
|
|
3582
|
+
picture: userMetadata?.avatar_url,
|
|
3529
3583
|
roles: payload.role ? [payload.role] : [],
|
|
3530
3584
|
permissions: payload.aal ? [`aal:${payload.aal}`] : [],
|
|
3531
3585
|
// Include Supabase-specific claims
|
|
@@ -3598,6 +3652,7 @@ var Auth0OAuthProvider = class {
|
|
|
3598
3652
|
}
|
|
3599
3653
|
}
|
|
3600
3654
|
getUserInfo(payload) {
|
|
3655
|
+
const scope = payload.scope;
|
|
3601
3656
|
return {
|
|
3602
3657
|
userId: payload.sub,
|
|
3603
3658
|
email: payload.email,
|
|
@@ -3610,7 +3665,7 @@ var Auth0OAuthProvider = class {
|
|
|
3610
3665
|
// Auth0 can include roles (if configured)
|
|
3611
3666
|
roles: payload.roles || payload["https://your-app.com/roles"] || [],
|
|
3612
3667
|
// Include scope as well
|
|
3613
|
-
scopes:
|
|
3668
|
+
scopes: scope ? scope.split(" ") : [],
|
|
3614
3669
|
// Additional Auth0-specific claims
|
|
3615
3670
|
email_verified: payload.email_verified,
|
|
3616
3671
|
updated_at: payload.updated_at
|
|
@@ -3682,8 +3737,10 @@ var KeycloakOAuthProvider = class {
|
|
|
3682
3737
|
}
|
|
3683
3738
|
}
|
|
3684
3739
|
getUserInfo(payload) {
|
|
3685
|
-
const
|
|
3686
|
-
const
|
|
3740
|
+
const realmAccess = payload.realm_access;
|
|
3741
|
+
const realmRoles = realmAccess?.roles || [];
|
|
3742
|
+
const resourceAccess = payload.resource_access;
|
|
3743
|
+
const clientRoles = this.config.clientId && (resourceAccess?.[this.config.clientId]?.roles || []) || [];
|
|
3687
3744
|
const allRoles = [...realmRoles, ...clientRoles];
|
|
3688
3745
|
const permissions = [];
|
|
3689
3746
|
if (payload.resource_access) {
|
|
@@ -3697,6 +3754,7 @@ var KeycloakOAuthProvider = class {
|
|
|
3697
3754
|
}
|
|
3698
3755
|
);
|
|
3699
3756
|
}
|
|
3757
|
+
const scope = payload.scope;
|
|
3700
3758
|
return {
|
|
3701
3759
|
userId: payload.sub,
|
|
3702
3760
|
email: payload.email,
|
|
@@ -3707,7 +3765,7 @@ var KeycloakOAuthProvider = class {
|
|
|
3707
3765
|
roles: allRoles,
|
|
3708
3766
|
permissions,
|
|
3709
3767
|
// Include scope as well
|
|
3710
|
-
scopes:
|
|
3768
|
+
scopes: scope ? scope.split(" ") : [],
|
|
3711
3769
|
// Keycloak-specific claims
|
|
3712
3770
|
email_verified: payload.email_verified,
|
|
3713
3771
|
given_name: payload.given_name,
|
|
@@ -3836,7 +3894,7 @@ var CustomOAuthProvider = class {
|
|
|
3836
3894
|
async verifyToken(token) {
|
|
3837
3895
|
try {
|
|
3838
3896
|
const result = await this.config.verifyToken(token);
|
|
3839
|
-
return
|
|
3897
|
+
return result;
|
|
3840
3898
|
} catch (error2) {
|
|
3841
3899
|
throw new Error(`Custom OAuth verification failed: ${error2}`);
|
|
3842
3900
|
}
|
|
@@ -3845,16 +3903,19 @@ var CustomOAuthProvider = class {
|
|
|
3845
3903
|
if (this.config.getUserInfo) {
|
|
3846
3904
|
return this.config.getUserInfo(payload);
|
|
3847
3905
|
}
|
|
3906
|
+
const scope = payload.scope;
|
|
3907
|
+
const roles = payload.roles;
|
|
3908
|
+
const permissions = payload.permissions;
|
|
3848
3909
|
return {
|
|
3849
3910
|
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:
|
|
3911
|
+
email: payload.email ? payload.email : void 0,
|
|
3912
|
+
name: payload.name ? payload.name : void 0,
|
|
3913
|
+
username: payload.username || payload.preferred_username ? payload.username || payload.preferred_username : void 0,
|
|
3914
|
+
nickname: payload.nickname ? payload.nickname : void 0,
|
|
3915
|
+
picture: payload.picture || payload.avatar_url ? payload.picture || payload.avatar_url : void 0,
|
|
3916
|
+
roles: Array.isArray(roles) ? roles : [],
|
|
3917
|
+
permissions: Array.isArray(permissions) ? permissions : [],
|
|
3918
|
+
scopes: scope ? scope.split(" ") : []
|
|
3858
3919
|
};
|
|
3859
3920
|
}
|
|
3860
3921
|
getIssuer() {
|
|
@@ -4039,6 +4100,7 @@ function requireAnyScope(needed) {
|
|
|
4039
4100
|
}
|
|
4040
4101
|
__name(requireAnyScope, "requireAnyScope");
|
|
4041
4102
|
export {
|
|
4103
|
+
MCPServer,
|
|
4042
4104
|
adaptConnectMiddleware,
|
|
4043
4105
|
adaptMiddleware,
|
|
4044
4106
|
array,
|