mcp-use 1.0.4 → 1.0.5
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 +98 -1
- package/dist/index.cjs +0 -640
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -5
- package/dist/src/agents/mcp_agent.d.ts.map +1 -1
- package/dist/src/server/adapters/mcp-ui-adapter.d.ts +66 -0
- package/dist/src/server/adapters/mcp-ui-adapter.d.ts.map +1 -0
- package/dist/src/server/index.cjs +292 -14
- package/dist/src/server/index.d.ts +4 -2
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +913 -4
- package/dist/src/server/mcp-server.d.ts +91 -2
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/types/common.d.ts +27 -0
- package/dist/src/server/types/common.d.ts.map +1 -0
- package/dist/src/server/types/index.d.ts +8 -0
- package/dist/src/server/types/index.d.ts.map +1 -0
- package/dist/src/server/types/prompt.d.ts +14 -0
- package/dist/src/server/types/prompt.d.ts.map +1 -0
- package/dist/src/server/types/resource.d.ts +155 -0
- package/dist/src/server/types/resource.d.ts.map +1 -0
- package/dist/src/server/types/tool.d.ts +14 -0
- package/dist/src/server/types/tool.d.ts.map +1 -0
- package/dist/src/server/types.d.ts +3 -76
- package/dist/src/server/types.d.ts.map +1 -1
- package/dist/tests/helpers/widget-generators.d.ts +24 -0
- package/dist/tests/helpers/widget-generators.d.ts.map +1 -0
- package/dist/tests/mcp-ui-adapter.test.d.ts +8 -0
- package/dist/tests/mcp-ui-adapter.test.d.ts.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +33 -36
- package/dist/chunk-MZPKOZE4.js +0 -644
package/dist/index.js
CHANGED
@@ -5,9 +5,6 @@ import {
|
|
5
5
|
BrowserOAuthClientProvider,
|
6
6
|
onMcpAuthorization
|
7
7
|
} from "./chunk-TJXUCAST.js";
|
8
|
-
import {
|
9
|
-
createMCPServer
|
10
|
-
} from "./chunk-MZPKOZE4.js";
|
11
8
|
import {
|
12
9
|
Logger,
|
13
10
|
logger
|
@@ -2085,7 +2082,6 @@ var MCPAgent = class {
|
|
2085
2082
|
totalResponseLength += event.data.chunk.content.length;
|
2086
2083
|
}
|
2087
2084
|
yield event;
|
2088
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
2089
2085
|
if (event.event === "on_chain_end" && event.data?.output) {
|
2090
2086
|
const output = event.data.output;
|
2091
2087
|
if (Array.isArray(output) && output.length > 0 && output[0]?.text) {
|
@@ -3878,7 +3874,6 @@ export {
|
|
3878
3874
|
Telemetry,
|
3879
3875
|
ToolMessage2 as ToolMessage,
|
3880
3876
|
WebSocketConnector,
|
3881
|
-
createMCPServer,
|
3882
3877
|
createOAuthMCPConfig,
|
3883
3878
|
createReadableStreamFromGenerator,
|
3884
3879
|
loadConfigFile,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mcp_agent.d.ts","sourceRoot":"","sources":["../../../src/agents/mcp_agent.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"mcp_agent.d.ts","sourceRoot":"","sources":["../../../src/agents/mcp_agent.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
/**
|
2
|
+
* MCP-UI Adapter Utilities
|
3
|
+
*
|
4
|
+
* Pure functions to convert mcp-use high-level UIResource definitions
|
5
|
+
* into @mcp-ui/server compatible resource objects.
|
6
|
+
*
|
7
|
+
* Ref: https://mcpui.dev/guide/server/typescript/usage-examples
|
8
|
+
*/
|
9
|
+
import type { UIResourceContent, UIResourceDefinition, UIEncoding } from '../types/resource.js';
|
10
|
+
/**
|
11
|
+
* Configuration for building widget URLs
|
12
|
+
*/
|
13
|
+
export interface UrlConfig {
|
14
|
+
baseUrl: string;
|
15
|
+
port: number | string;
|
16
|
+
}
|
17
|
+
/**
|
18
|
+
* Build the full URL for a widget including query parameters
|
19
|
+
*
|
20
|
+
* @param widget - Widget identifier
|
21
|
+
* @param props - Parameters to pass as query params
|
22
|
+
* @param config - URL configuration (baseUrl and port)
|
23
|
+
* @returns Complete widget URL with encoded parameters
|
24
|
+
*/
|
25
|
+
export declare function buildWidgetUrl(widget: string, props: Record<string, any> | undefined, config: UrlConfig): string;
|
26
|
+
/**
|
27
|
+
* Create a UIResource for an external URL (iframe)
|
28
|
+
*
|
29
|
+
* @param uri - Resource URI (must start with ui://)
|
30
|
+
* @param iframeUrl - URL to load in iframe
|
31
|
+
* @param encoding - Encoding type ('text' or 'blob')
|
32
|
+
* @returns UIResourceContent object
|
33
|
+
*/
|
34
|
+
export declare function createExternalUrlResource(uri: string, iframeUrl: string, encoding?: UIEncoding): UIResourceContent;
|
35
|
+
/**
|
36
|
+
* Create a UIResource for raw HTML content
|
37
|
+
*
|
38
|
+
* @param uri - Resource URI (must start with ui://)
|
39
|
+
* @param htmlString - HTML content to render
|
40
|
+
* @param encoding - Encoding type ('text' or 'blob')
|
41
|
+
* @returns UIResourceContent object
|
42
|
+
*/
|
43
|
+
export declare function createRawHtmlResource(uri: string, htmlString: string, encoding?: UIEncoding): UIResourceContent;
|
44
|
+
/**
|
45
|
+
* Create a UIResource for Remote DOM scripting
|
46
|
+
*
|
47
|
+
* @param uri - Resource URI (must start with ui://)
|
48
|
+
* @param script - JavaScript code for remote DOM manipulation
|
49
|
+
* @param framework - Framework for remote DOM ('react' or 'webcomponents')
|
50
|
+
* @param encoding - Encoding type ('text' or 'blob')
|
51
|
+
* @returns UIResourceContent object
|
52
|
+
*/
|
53
|
+
export declare function createRemoteDomResource(uri: string, script: string, framework?: 'react' | 'webcomponents', encoding?: UIEncoding): UIResourceContent;
|
54
|
+
/**
|
55
|
+
* Create a UIResource from a high-level definition
|
56
|
+
*
|
57
|
+
* This is the main function that routes to the appropriate resource creator
|
58
|
+
* based on the discriminated union type.
|
59
|
+
*
|
60
|
+
* @param definition - UIResource definition (discriminated union)
|
61
|
+
* @param params - Runtime parameters for the widget (for externalUrl type)
|
62
|
+
* @param config - URL configuration for building widget URLs
|
63
|
+
* @returns UIResourceContent object
|
64
|
+
*/
|
65
|
+
export declare function createUIResourceFromDefinition(definition: UIResourceDefinition, params: Record<string, any>, config: UrlConfig): UIResourceContent;
|
66
|
+
//# sourceMappingURL=mcp-ui-adapter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mcp-ui-adapter.d.ts","sourceRoot":"","sources":["../../../../src/server/adapters/mcp-ui-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACX,MAAM,sBAAsB,CAAA;AAE7B;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EACtC,MAAM,EAAE,SAAS,GAChB,MAAM,CAkBR;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,UAAmB,GAC5B,iBAAiB,CAMnB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,UAAmB,GAC5B,iBAAiB,CAMnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAO,GAAG,eAAyB,EAC9C,QAAQ,GAAE,UAAmB,GAC5B,iBAAiB,CAMnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,oBAAoB,EAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,SAAS,GAChB,iBAAiB,CAyBnB"}
|
@@ -31,7 +31,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
31
31
|
// src/server/index.ts
|
32
32
|
var server_exports = {};
|
33
33
|
__export(server_exports, {
|
34
|
-
|
34
|
+
buildWidgetUrl: () => buildWidgetUrl,
|
35
|
+
createExternalUrlResource: () => createExternalUrlResource,
|
36
|
+
createMCPServer: () => createMCPServer,
|
37
|
+
createRawHtmlResource: () => createRawHtmlResource,
|
38
|
+
createRemoteDomResource: () => createRemoteDomResource,
|
39
|
+
createUIResourceFromDefinition: () => createUIResourceFromDefinition
|
35
40
|
});
|
36
41
|
module.exports = __toCommonJS(server_exports);
|
37
42
|
|
@@ -72,6 +77,71 @@ function requestLogger(req, res, next) {
|
|
72
77
|
}
|
73
78
|
__name(requestLogger, "requestLogger");
|
74
79
|
|
80
|
+
// src/server/adapters/mcp-ui-adapter.ts
|
81
|
+
var import_server = require("@mcp-ui/server");
|
82
|
+
function buildWidgetUrl(widget, props, config) {
|
83
|
+
const url = new URL(
|
84
|
+
`/mcp-use/widgets/${widget}`,
|
85
|
+
`${config.baseUrl}:${config.port}`
|
86
|
+
);
|
87
|
+
if (props) {
|
88
|
+
Object.entries(props).forEach(([key, value]) => {
|
89
|
+
if (value !== void 0 && value !== null) {
|
90
|
+
const stringValue = typeof value === "object" ? JSON.stringify(value) : String(value);
|
91
|
+
url.searchParams.set(key, stringValue);
|
92
|
+
}
|
93
|
+
});
|
94
|
+
}
|
95
|
+
return url.toString();
|
96
|
+
}
|
97
|
+
__name(buildWidgetUrl, "buildWidgetUrl");
|
98
|
+
function createExternalUrlResource(uri, iframeUrl, encoding = "text") {
|
99
|
+
return (0, import_server.createUIResource)({
|
100
|
+
uri,
|
101
|
+
content: { type: "externalUrl", iframeUrl },
|
102
|
+
encoding
|
103
|
+
});
|
104
|
+
}
|
105
|
+
__name(createExternalUrlResource, "createExternalUrlResource");
|
106
|
+
function createRawHtmlResource(uri, htmlString, encoding = "text") {
|
107
|
+
return (0, import_server.createUIResource)({
|
108
|
+
uri,
|
109
|
+
content: { type: "rawHtml", htmlString },
|
110
|
+
encoding
|
111
|
+
});
|
112
|
+
}
|
113
|
+
__name(createRawHtmlResource, "createRawHtmlResource");
|
114
|
+
function createRemoteDomResource(uri, script, framework = "react", encoding = "text") {
|
115
|
+
return (0, import_server.createUIResource)({
|
116
|
+
uri,
|
117
|
+
content: { type: "remoteDom", script, framework },
|
118
|
+
encoding
|
119
|
+
});
|
120
|
+
}
|
121
|
+
__name(createRemoteDomResource, "createRemoteDomResource");
|
122
|
+
function createUIResourceFromDefinition(definition, params, config) {
|
123
|
+
const uri = `ui://widget/${definition.name}`;
|
124
|
+
const encoding = definition.encoding || "text";
|
125
|
+
switch (definition.type) {
|
126
|
+
case "externalUrl": {
|
127
|
+
const widgetUrl = buildWidgetUrl(definition.widget, params, config);
|
128
|
+
return createExternalUrlResource(uri, widgetUrl, encoding);
|
129
|
+
}
|
130
|
+
case "rawHtml": {
|
131
|
+
return createRawHtmlResource(uri, definition.htmlContent, encoding);
|
132
|
+
}
|
133
|
+
case "remoteDom": {
|
134
|
+
const framework = definition.framework || "react";
|
135
|
+
return createRemoteDomResource(uri, definition.script, framework, encoding);
|
136
|
+
}
|
137
|
+
default: {
|
138
|
+
const _exhaustive = definition;
|
139
|
+
throw new Error(`Unknown UI resource type: ${_exhaustive.type}`);
|
140
|
+
}
|
141
|
+
}
|
142
|
+
}
|
143
|
+
__name(createUIResourceFromDefinition, "createUIResourceFromDefinition");
|
144
|
+
|
75
145
|
// src/server/mcp-server.ts
|
76
146
|
var McpServer = class {
|
77
147
|
static {
|
@@ -104,7 +174,7 @@ var McpServer = class {
|
|
104
174
|
this.app.use((req, res, next) => {
|
105
175
|
res.header("Access-Control-Allow-Origin", "*");
|
106
176
|
res.header("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
|
107
|
-
res.header("Access-Control-Allow-Headers", "Content-Type");
|
177
|
+
res.header("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization, mcp-protocol-version, mcp-session-id, X-Proxy-Token, X-Target-URL");
|
108
178
|
next();
|
109
179
|
});
|
110
180
|
this.app.use(requestLogger);
|
@@ -335,12 +405,196 @@ var McpServer = class {
|
|
335
405
|
);
|
336
406
|
return this;
|
337
407
|
}
|
408
|
+
/**
|
409
|
+
* Register a UI widget as both a tool and a resource
|
410
|
+
*
|
411
|
+
* Creates a unified interface for MCP-UI compatible widgets that can be accessed
|
412
|
+
* either as tools (with parameters) or as resources (static access). The tool
|
413
|
+
* allows dynamic parameter passing while the resource provides discoverable access.
|
414
|
+
*
|
415
|
+
* @param definition - Configuration for the UI widget
|
416
|
+
* @param definition.name - Unique identifier for the resource
|
417
|
+
* @param definition.widget - Widget name (matches directory in dist/resources/mcp-use/widgets)
|
418
|
+
* @param definition.title - Human-readable title for the widget
|
419
|
+
* @param definition.description - Description of the widget's functionality
|
420
|
+
* @param definition.props - Widget properties configuration with types and defaults
|
421
|
+
* @param definition.size - Preferred iframe size [width, height] (e.g., ['800px', '600px'])
|
422
|
+
* @param definition.annotations - Resource annotations for discovery
|
423
|
+
* @returns The server instance for method chaining
|
424
|
+
*
|
425
|
+
* @example
|
426
|
+
* ```typescript
|
427
|
+
* server.uiResource({
|
428
|
+
* name: 'kanban-board',
|
429
|
+
* widget: 'kanban-board',
|
430
|
+
* title: 'Kanban Board',
|
431
|
+
* description: 'Interactive task management board',
|
432
|
+
* props: {
|
433
|
+
* initialTasks: {
|
434
|
+
* type: 'array',
|
435
|
+
* description: 'Initial tasks to display',
|
436
|
+
* required: false
|
437
|
+
* },
|
438
|
+
* theme: {
|
439
|
+
* type: 'string',
|
440
|
+
* default: 'light'
|
441
|
+
* }
|
442
|
+
* },
|
443
|
+
* size: ['900px', '600px']
|
444
|
+
* })
|
445
|
+
* ```
|
446
|
+
*/
|
447
|
+
uiResource(definition) {
|
448
|
+
const toolName = definition.type === "externalUrl" ? `ui_${definition.widget}` : `ui_${definition.name}`;
|
449
|
+
const displayName = definition.title || definition.name;
|
450
|
+
let resourceUri;
|
451
|
+
let mimeType;
|
452
|
+
switch (definition.type) {
|
453
|
+
case "externalUrl":
|
454
|
+
resourceUri = `ui://widget/${definition.widget}`;
|
455
|
+
mimeType = "text/uri-list";
|
456
|
+
break;
|
457
|
+
case "rawHtml":
|
458
|
+
resourceUri = `ui://widget/${definition.name}`;
|
459
|
+
mimeType = "text/html";
|
460
|
+
break;
|
461
|
+
case "remoteDom":
|
462
|
+
resourceUri = `ui://widget/${definition.name}`;
|
463
|
+
mimeType = "application/vnd.mcp-ui.remote-dom+javascript";
|
464
|
+
break;
|
465
|
+
default:
|
466
|
+
throw new Error(`Unsupported UI resource type. Must be one of: externalUrl, rawHtml, remoteDom`);
|
467
|
+
}
|
468
|
+
this.resource({
|
469
|
+
name: definition.name,
|
470
|
+
uri: resourceUri,
|
471
|
+
title: definition.title,
|
472
|
+
description: definition.description,
|
473
|
+
mimeType,
|
474
|
+
annotations: definition.annotations,
|
475
|
+
fn: /* @__PURE__ */ __name(async () => {
|
476
|
+
const params = definition.type === "externalUrl" ? this.applyDefaultProps(definition.props) : {};
|
477
|
+
const uiResource = this.createWidgetUIResource(definition, params);
|
478
|
+
return {
|
479
|
+
contents: [uiResource.resource]
|
480
|
+
};
|
481
|
+
}, "fn")
|
482
|
+
});
|
483
|
+
this.tool({
|
484
|
+
name: toolName,
|
485
|
+
description: definition.description || `Display ${displayName}`,
|
486
|
+
inputs: this.convertPropsToInputs(definition.props),
|
487
|
+
fn: /* @__PURE__ */ __name(async (params) => {
|
488
|
+
const uiResource = this.createWidgetUIResource(definition, params);
|
489
|
+
return {
|
490
|
+
content: [
|
491
|
+
{
|
492
|
+
type: "text",
|
493
|
+
text: `Displaying ${displayName}`,
|
494
|
+
description: `Show MCP-UI widget for ${displayName}`
|
495
|
+
},
|
496
|
+
uiResource
|
497
|
+
]
|
498
|
+
};
|
499
|
+
}, "fn")
|
500
|
+
});
|
501
|
+
return this;
|
502
|
+
}
|
503
|
+
/**
|
504
|
+
* Create a UIResource object for a widget with the given parameters
|
505
|
+
*
|
506
|
+
* This method is shared between tool and resource handlers to avoid duplication.
|
507
|
+
* It creates a consistent UIResource structure that can be rendered by MCP-UI
|
508
|
+
* compatible clients.
|
509
|
+
*
|
510
|
+
* @private
|
511
|
+
* @param definition - UIResource definition
|
512
|
+
* @param params - Parameters to pass to the widget via URL
|
513
|
+
* @returns UIResource object compatible with MCP-UI
|
514
|
+
*/
|
515
|
+
createWidgetUIResource(definition, params) {
|
516
|
+
const urlConfig = {
|
517
|
+
baseUrl: "http://localhost",
|
518
|
+
port: this.serverPort || 3001
|
519
|
+
};
|
520
|
+
return createUIResourceFromDefinition(definition, params, urlConfig);
|
521
|
+
}
|
522
|
+
/**
|
523
|
+
* Build a complete URL for a widget including query parameters
|
524
|
+
*
|
525
|
+
* Constructs the full URL to access a widget's iframe, encoding any provided
|
526
|
+
* parameters as query string parameters. Complex objects are JSON-stringified
|
527
|
+
* for transmission.
|
528
|
+
*
|
529
|
+
* @private
|
530
|
+
* @param widget - Widget name/identifier
|
531
|
+
* @param params - Parameters to encode in the URL
|
532
|
+
* @returns Complete URL with encoded parameters
|
533
|
+
*/
|
534
|
+
buildWidgetUrl(widget, params) {
|
535
|
+
const baseUrl = `http://localhost:${this.serverPort}/mcp-use/widgets/${widget}`;
|
536
|
+
if (Object.keys(params).length === 0) {
|
537
|
+
return baseUrl;
|
538
|
+
}
|
539
|
+
const queryParams = new URLSearchParams();
|
540
|
+
for (const [key, value] of Object.entries(params)) {
|
541
|
+
if (value !== void 0 && value !== null) {
|
542
|
+
if (typeof value === "object") {
|
543
|
+
queryParams.append(key, JSON.stringify(value));
|
544
|
+
} else {
|
545
|
+
queryParams.append(key, String(value));
|
546
|
+
}
|
547
|
+
}
|
548
|
+
}
|
549
|
+
return `${baseUrl}?${queryParams.toString()}`;
|
550
|
+
}
|
551
|
+
/**
|
552
|
+
* Convert widget props definition to tool input schema
|
553
|
+
*
|
554
|
+
* Transforms the widget props configuration into the format expected by
|
555
|
+
* the tool registration system, mapping types and handling defaults.
|
556
|
+
*
|
557
|
+
* @private
|
558
|
+
* @param props - Widget props configuration
|
559
|
+
* @returns Array of InputDefinition objects for tool registration
|
560
|
+
*/
|
561
|
+
convertPropsToInputs(props) {
|
562
|
+
if (!props) return [];
|
563
|
+
return Object.entries(props).map(([name, prop]) => ({
|
564
|
+
name,
|
565
|
+
type: prop.type,
|
566
|
+
description: prop.description,
|
567
|
+
required: prop.required,
|
568
|
+
default: prop.default
|
569
|
+
}));
|
570
|
+
}
|
571
|
+
/**
|
572
|
+
* Apply default values to widget props
|
573
|
+
*
|
574
|
+
* Extracts default values from the props configuration to use when
|
575
|
+
* the resource is accessed without parameters.
|
576
|
+
*
|
577
|
+
* @private
|
578
|
+
* @param props - Widget props configuration
|
579
|
+
* @returns Object with default values for each prop
|
580
|
+
*/
|
581
|
+
applyDefaultProps(props) {
|
582
|
+
if (!props) return {};
|
583
|
+
const defaults = {};
|
584
|
+
for (const [key, prop] of Object.entries(props)) {
|
585
|
+
if (prop.default !== void 0) {
|
586
|
+
defaults[key] = prop.default;
|
587
|
+
}
|
588
|
+
}
|
589
|
+
return defaults;
|
590
|
+
}
|
338
591
|
/**
|
339
592
|
* Mount MCP server endpoints at /mcp
|
340
593
|
*
|
341
594
|
* Sets up the HTTP transport layer for the MCP server, creating endpoints for
|
342
595
|
* Server-Sent Events (SSE) streaming, POST message handling, and DELETE session cleanup.
|
343
|
-
*
|
596
|
+
* Each request gets its own transport instance to prevent state conflicts between
|
597
|
+
* concurrent client connections.
|
344
598
|
*
|
345
599
|
* This method is called automatically when the server starts listening and ensures
|
346
600
|
* that MCP clients can communicate with the server over HTTP.
|
@@ -357,20 +611,39 @@ var McpServer = class {
|
|
357
611
|
async mountMcp() {
|
358
612
|
if (this.mcpMounted) return;
|
359
613
|
const { StreamableHTTPServerTransport } = await import("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
360
|
-
const httpTransport = new StreamableHTTPServerTransport({
|
361
|
-
sessionIdGenerator: void 0
|
362
|
-
// Stateless mode
|
363
|
-
});
|
364
|
-
await this.server.connect(httpTransport);
|
365
614
|
const endpoint = "/mcp";
|
366
|
-
this.app.get(endpoint, async (req, res) => {
|
367
|
-
await httpTransport.handleRequest(req, res);
|
368
|
-
});
|
369
615
|
this.app.post(endpoint, import_express.default.json(), async (req, res) => {
|
370
|
-
|
616
|
+
const transport = new StreamableHTTPServerTransport({
|
617
|
+
sessionIdGenerator: void 0,
|
618
|
+
enableJsonResponse: true
|
619
|
+
});
|
620
|
+
res.on("close", () => {
|
621
|
+
transport.close();
|
622
|
+
});
|
623
|
+
await this.server.connect(transport);
|
624
|
+
await transport.handleRequest(req, res, req.body);
|
625
|
+
});
|
626
|
+
this.app.get(endpoint, async (req, res) => {
|
627
|
+
const transport = new StreamableHTTPServerTransport({
|
628
|
+
sessionIdGenerator: void 0,
|
629
|
+
enableJsonResponse: true
|
630
|
+
});
|
631
|
+
res.on("close", () => {
|
632
|
+
transport.close();
|
633
|
+
});
|
634
|
+
await this.server.connect(transport);
|
635
|
+
await transport.handleRequest(req, res);
|
371
636
|
});
|
372
637
|
this.app.delete(endpoint, async (req, res) => {
|
373
|
-
|
638
|
+
const transport = new StreamableHTTPServerTransport({
|
639
|
+
sessionIdGenerator: void 0,
|
640
|
+
enableJsonResponse: true
|
641
|
+
});
|
642
|
+
res.on("close", () => {
|
643
|
+
transport.close();
|
644
|
+
});
|
645
|
+
await this.server.connect(transport);
|
646
|
+
await transport.handleRequest(req, res);
|
374
647
|
});
|
375
648
|
this.mcpMounted = true;
|
376
649
|
console.log(`[MCP] Server mounted at ${endpoint}`);
|
@@ -673,5 +946,10 @@ function createMCPServer(name, config = {}) {
|
|
673
946
|
__name(createMCPServer, "createMCPServer");
|
674
947
|
// Annotate the CommonJS export names for ESM import in node:
|
675
948
|
0 && (module.exports = {
|
676
|
-
|
949
|
+
buildWidgetUrl,
|
950
|
+
createExternalUrlResource,
|
951
|
+
createMCPServer,
|
952
|
+
createRawHtmlResource,
|
953
|
+
createRemoteDomResource,
|
954
|
+
createUIResourceFromDefinition
|
677
955
|
});
|
@@ -1,3 +1,5 @@
|
|
1
|
-
export { createMCPServer } from './mcp-server.js';
|
2
|
-
export
|
1
|
+
export { createMCPServer, type McpServerInstance } from './mcp-server.js';
|
2
|
+
export * from './types/index.js';
|
3
|
+
export { buildWidgetUrl, createExternalUrlResource, createRawHtmlResource, createRemoteDomResource, createUIResourceFromDefinition, type UrlConfig } from './adapters/mcp-ui-adapter.js';
|
4
|
+
export type { InputDefinition, PromptDefinition, PromptHandler, ResourceDefinition, ResourceHandler, ServerConfig, ToolDefinition, ToolHandler, UIResourceDefinition, ExternalUrlUIResource, RawHtmlUIResource, RemoteDomUIResource, WidgetProps, WidgetConfig, WidgetManifest, DiscoverWidgetsOptions, } from './types/index.js';
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAA;AAExB,cAAc,kBAAkB,CAAA;AAGhC,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,SAAS,EACf,MAAM,8BAA8B,CAAA;AAErC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,WAAW,EAEX,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,sBAAsB,GACvB,MAAM,kBAAkB,CAAA"}
|