@modelcontextprotocol/sdk 1.10.1 → 1.11.0
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 +21 -23
- package/dist/cjs/client/index.d.ts +57 -0
- package/dist/cjs/client/index.d.ts.map +1 -1
- package/dist/cjs/client/stdio.d.ts +4 -1
- package/dist/cjs/client/stdio.d.ts.map +1 -1
- package/dist/cjs/client/stdio.js +14 -1
- package/dist/cjs/client/stdio.js.map +1 -1
- package/dist/cjs/examples/client/multipleClientsParallel.d.ts +2 -0
- package/dist/cjs/examples/client/multipleClientsParallel.d.ts.map +1 -0
- package/dist/cjs/examples/client/multipleClientsParallel.js +134 -0
- package/dist/cjs/examples/client/multipleClientsParallel.js.map +1 -0
- package/dist/cjs/examples/client/parallelToolCallsClient.d.ts +2 -0
- package/dist/cjs/examples/client/parallelToolCallsClient.d.ts.map +1 -0
- package/dist/cjs/examples/client/parallelToolCallsClient.js +175 -0
- package/dist/cjs/examples/client/parallelToolCallsClient.js.map +1 -0
- package/dist/cjs/examples/server/jsonResponseStreamableHttp.js +50 -47
- package/dist/cjs/examples/server/jsonResponseStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/simpleSseServer.js +46 -46
- package/dist/cjs/examples/server/simpleSseServer.js.map +1 -1
- package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js +78 -87
- package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/simpleStreamableHttp.js +108 -101
- package/dist/cjs/examples/server/simpleStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js +42 -38
- package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -1
- package/dist/cjs/server/mcp.d.ts +24 -5
- package/dist/cjs/server/mcp.d.ts.map +1 -1
- package/dist/cjs/server/mcp.js +31 -1
- package/dist/cjs/server/mcp.js.map +1 -1
- package/dist/cjs/server/streamableHttp.d.ts +3 -3
- package/dist/cjs/server/streamableHttp.d.ts.map +1 -1
- package/dist/cjs/server/streamableHttp.js +11 -11
- package/dist/cjs/server/streamableHttp.js.map +1 -1
- package/dist/cjs/shared/protocol.d.ts +10 -1
- package/dist/cjs/shared/protocol.d.ts.map +1 -1
- package/dist/cjs/shared/protocol.js +3 -1
- package/dist/cjs/shared/protocol.js.map +1 -1
- package/dist/cjs/types.d.ts +2645 -24
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +67 -10
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/client/index.d.ts +57 -0
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/stdio.d.ts +4 -1
- package/dist/esm/client/stdio.d.ts.map +1 -1
- package/dist/esm/client/stdio.js +14 -1
- package/dist/esm/client/stdio.js.map +1 -1
- package/dist/esm/examples/client/multipleClientsParallel.d.ts +2 -0
- package/dist/esm/examples/client/multipleClientsParallel.d.ts.map +1 -0
- package/dist/esm/examples/client/multipleClientsParallel.js +132 -0
- package/dist/esm/examples/client/multipleClientsParallel.js.map +1 -0
- package/dist/esm/examples/client/parallelToolCallsClient.d.ts +2 -0
- package/dist/esm/examples/client/parallelToolCallsClient.d.ts.map +1 -0
- package/dist/esm/examples/client/parallelToolCallsClient.js +173 -0
- package/dist/esm/examples/client/parallelToolCallsClient.js.map +1 -0
- package/dist/esm/examples/server/jsonResponseStreamableHttp.js +50 -47
- package/dist/esm/examples/server/jsonResponseStreamableHttp.js.map +1 -1
- package/dist/esm/examples/server/simpleSseServer.js +46 -46
- package/dist/esm/examples/server/simpleSseServer.js.map +1 -1
- package/dist/esm/examples/server/simpleStatelessStreamableHttp.js +78 -87
- package/dist/esm/examples/server/simpleStatelessStreamableHttp.js.map +1 -1
- package/dist/esm/examples/server/simpleStreamableHttp.js +108 -101
- package/dist/esm/examples/server/simpleStreamableHttp.js.map +1 -1
- package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js +42 -38
- package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -1
- package/dist/esm/server/mcp.d.ts +24 -5
- package/dist/esm/server/mcp.d.ts.map +1 -1
- package/dist/esm/server/mcp.js +32 -2
- package/dist/esm/server/mcp.js.map +1 -1
- package/dist/esm/server/streamableHttp.d.ts +3 -3
- package/dist/esm/server/streamableHttp.d.ts.map +1 -1
- package/dist/esm/server/streamableHttp.js +11 -11
- package/dist/esm/server/streamableHttp.js.map +1 -1
- package/dist/esm/shared/protocol.d.ts +10 -1
- package/dist/esm/shared/protocol.d.ts.map +1 -1
- package/dist/esm/shared/protocol.js +3 -1
- package/dist/esm/shared/protocol.js.map +1 -1
- package/dist/esm/types.d.ts +2645 -24
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js +66 -9
- package/dist/esm/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,55 +10,58 @@ const streamableHttp_js_1 = require("../../server/streamableHttp.js");
|
|
|
10
10
|
const zod_1 = require("zod");
|
|
11
11
|
const types_js_1 = require("../../types.js");
|
|
12
12
|
// Create an MCP server with implementation details
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
// Register a simple tool that returns a greeting
|
|
22
|
-
server.tool('greet', 'A simple greeting tool', {
|
|
23
|
-
name: zod_1.z.string().describe('Name to greet'),
|
|
24
|
-
}, async ({ name }) => {
|
|
25
|
-
return {
|
|
26
|
-
content: [
|
|
27
|
-
{
|
|
28
|
-
type: 'text',
|
|
29
|
-
text: `Hello, ${name}!`,
|
|
30
|
-
},
|
|
31
|
-
],
|
|
32
|
-
};
|
|
33
|
-
});
|
|
34
|
-
// Register a tool that sends multiple greetings with notifications
|
|
35
|
-
server.tool('multi-greet', 'A tool that sends different greetings with delays between them', {
|
|
36
|
-
name: zod_1.z.string().describe('Name to greet'),
|
|
37
|
-
}, async ({ name }, { sendNotification }) => {
|
|
38
|
-
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
39
|
-
await sendNotification({
|
|
40
|
-
method: "notifications/message",
|
|
41
|
-
params: { level: "debug", data: `Starting multi-greet for ${name}` }
|
|
13
|
+
const getServer = () => {
|
|
14
|
+
const server = new mcp_js_1.McpServer({
|
|
15
|
+
name: 'json-response-streamable-http-server',
|
|
16
|
+
version: '1.0.0',
|
|
17
|
+
}, {
|
|
18
|
+
capabilities: {
|
|
19
|
+
logging: {},
|
|
20
|
+
}
|
|
42
21
|
});
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
22
|
+
// Register a simple tool that returns a greeting
|
|
23
|
+
server.tool('greet', 'A simple greeting tool', {
|
|
24
|
+
name: zod_1.z.string().describe('Name to greet'),
|
|
25
|
+
}, async ({ name }) => {
|
|
26
|
+
return {
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
type: 'text',
|
|
30
|
+
text: `Hello, ${name}!`,
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
};
|
|
47
34
|
});
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
35
|
+
// Register a tool that sends multiple greetings with notifications
|
|
36
|
+
server.tool('multi-greet', 'A tool that sends different greetings with delays between them', {
|
|
37
|
+
name: zod_1.z.string().describe('Name to greet'),
|
|
38
|
+
}, async ({ name }, { sendNotification }) => {
|
|
39
|
+
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
40
|
+
await sendNotification({
|
|
41
|
+
method: "notifications/message",
|
|
42
|
+
params: { level: "debug", data: `Starting multi-greet for ${name}` }
|
|
43
|
+
});
|
|
44
|
+
await sleep(1000); // Wait 1 second before first greeting
|
|
45
|
+
await sendNotification({
|
|
46
|
+
method: "notifications/message",
|
|
47
|
+
params: { level: "info", data: `Sending first greeting to ${name}` }
|
|
48
|
+
});
|
|
49
|
+
await sleep(1000); // Wait another second before second greeting
|
|
50
|
+
await sendNotification({
|
|
51
|
+
method: "notifications/message",
|
|
52
|
+
params: { level: "info", data: `Sending second greeting to ${name}` }
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
content: [
|
|
56
|
+
{
|
|
57
|
+
type: 'text',
|
|
58
|
+
text: `Good morning, ${name}!`,
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
};
|
|
52
62
|
});
|
|
53
|
-
return
|
|
54
|
-
|
|
55
|
-
{
|
|
56
|
-
type: 'text',
|
|
57
|
-
text: `Good morning, ${name}!`,
|
|
58
|
-
}
|
|
59
|
-
],
|
|
60
|
-
};
|
|
61
|
-
});
|
|
63
|
+
return server;
|
|
64
|
+
};
|
|
62
65
|
const app = (0, express_1.default)();
|
|
63
66
|
app.use(express_1.default.json());
|
|
64
67
|
// Map to store transports by session ID
|
|
@@ -86,6 +89,7 @@ app.post('/mcp', async (req, res) => {
|
|
|
86
89
|
}
|
|
87
90
|
});
|
|
88
91
|
// Connect the transport to the MCP server BEFORE handling the request
|
|
92
|
+
const server = getServer();
|
|
89
93
|
await server.connect(transport);
|
|
90
94
|
await transport.handleRequest(req, res, req.body);
|
|
91
95
|
return; // Already handled
|
|
@@ -133,7 +137,6 @@ app.listen(PORT, () => {
|
|
|
133
137
|
// Handle server shutdown
|
|
134
138
|
process.on('SIGINT', async () => {
|
|
135
139
|
console.log('Shutting down server...');
|
|
136
|
-
await server.close();
|
|
137
140
|
process.exit(0);
|
|
138
141
|
});
|
|
139
142
|
//# sourceMappingURL=jsonResponseStreamableHttp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonResponseStreamableHttp.js","sourceRoot":"","sources":["../../../../src/examples/server/jsonResponseStreamableHttp.ts"],"names":[],"mappings":";;;;;AAAA,sDAAqD;AACrD,6CAAyC;AACzC,gDAAgD;AAChD,sEAA+E;AAC/E,6BAAwB;AACxB,6CAAqE;
|
|
1
|
+
{"version":3,"file":"jsonResponseStreamableHttp.js","sourceRoot":"","sources":["../../../../src/examples/server/jsonResponseStreamableHttp.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,50 +17,53 @@ const zod_1 = require("zod");
|
|
|
17
17
|
*
|
|
18
18
|
*/
|
|
19
19
|
// Create an MCP server instance
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
20
|
+
const getServer = () => {
|
|
21
|
+
const server = new mcp_js_1.McpServer({
|
|
22
|
+
name: 'simple-sse-server',
|
|
23
|
+
version: '1.0.0',
|
|
24
|
+
}, { capabilities: { logging: {} } });
|
|
25
|
+
server.tool('start-notification-stream', 'Starts sending periodic notifications', {
|
|
26
|
+
interval: zod_1.z.number().describe('Interval in milliseconds between notifications').default(1000),
|
|
27
|
+
count: zod_1.z.number().describe('Number of notifications to send').default(10),
|
|
28
|
+
}, async ({ interval, count }, { sendNotification }) => {
|
|
29
|
+
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
30
|
+
let counter = 0;
|
|
31
|
+
// Send the initial notification
|
|
32
|
+
await sendNotification({
|
|
33
|
+
method: "notifications/message",
|
|
34
|
+
params: {
|
|
35
|
+
level: "info",
|
|
36
|
+
data: `Starting notification stream with ${count} messages every ${interval}ms`
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
// Send periodic notifications
|
|
40
|
+
while (counter < count) {
|
|
41
|
+
counter++;
|
|
42
|
+
await sleep(interval);
|
|
43
|
+
try {
|
|
44
|
+
await sendNotification({
|
|
45
|
+
method: "notifications/message",
|
|
46
|
+
params: {
|
|
47
|
+
level: "info",
|
|
48
|
+
data: `Notification #${counter} at ${new Date().toISOString()}`
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error("Error sending notification:", error);
|
|
54
|
+
}
|
|
36
55
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
try {
|
|
43
|
-
await sendNotification({
|
|
44
|
-
method: "notifications/message",
|
|
45
|
-
params: {
|
|
46
|
-
level: "info",
|
|
47
|
-
data: `Notification #${counter} at ${new Date().toISOString()}`
|
|
56
|
+
return {
|
|
57
|
+
content: [
|
|
58
|
+
{
|
|
59
|
+
type: 'text',
|
|
60
|
+
text: `Completed sending ${count} notifications every ${interval}ms`,
|
|
48
61
|
}
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
content: [
|
|
57
|
-
{
|
|
58
|
-
type: 'text',
|
|
59
|
-
text: `Completed sending ${count} notifications every ${interval}ms`,
|
|
60
|
-
}
|
|
61
|
-
],
|
|
62
|
-
};
|
|
63
|
-
});
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
return server;
|
|
66
|
+
};
|
|
64
67
|
const app = (0, express_1.default)();
|
|
65
68
|
app.use(express_1.default.json());
|
|
66
69
|
// Store transports by session ID
|
|
@@ -81,10 +84,8 @@ app.get('/mcp', async (req, res) => {
|
|
|
81
84
|
delete transports[sessionId];
|
|
82
85
|
};
|
|
83
86
|
// Connect the transport to the MCP server
|
|
87
|
+
const server = getServer();
|
|
84
88
|
await server.connect(transport);
|
|
85
|
-
// Start the SSE transport to begin streaming
|
|
86
|
-
// This sends an initial 'endpoint' event with the session ID in the URL
|
|
87
|
-
await transport.start();
|
|
88
89
|
console.log(`Established SSE stream with session ID: ${sessionId}`);
|
|
89
90
|
}
|
|
90
91
|
catch (error) {
|
|
@@ -141,7 +142,6 @@ process.on('SIGINT', async () => {
|
|
|
141
142
|
console.error(`Error closing transport for session ${sessionId}:`, error);
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
|
-
await server.close();
|
|
145
145
|
console.log('Server shutdown complete');
|
|
146
146
|
process.exit(0);
|
|
147
147
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simpleSseServer.js","sourceRoot":"","sources":["../../../../src/examples/server/simpleSseServer.ts"],"names":[],"mappings":";;;;;AAAA,sDAAqD;AACrD,gDAAgD;AAChD,gDAAyD;AACzD,6BAAwB;AAGxB;;;;;;;;GAQG;AAEH,gCAAgC;AAChC,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"simpleSseServer.js","sourceRoot":"","sources":["../../../../src/examples/server/simpleSseServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,84 +7,89 @@ const express_1 = __importDefault(require("express"));
|
|
|
7
7
|
const mcp_js_1 = require("../../server/mcp.js");
|
|
8
8
|
const streamableHttp_js_1 = require("../../server/streamableHttp.js");
|
|
9
9
|
const zod_1 = require("zod");
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
10
|
+
const getServer = () => {
|
|
11
|
+
// Create an MCP server with implementation details
|
|
12
|
+
const server = new mcp_js_1.McpServer({
|
|
13
|
+
name: 'stateless-streamable-http-server',
|
|
14
|
+
version: '1.0.0',
|
|
15
|
+
}, { capabilities: { logging: {} } });
|
|
16
|
+
// Register a simple prompt
|
|
17
|
+
server.prompt('greeting-template', 'A simple greeting prompt template', {
|
|
18
|
+
name: zod_1.z.string().describe('Name to include in greeting'),
|
|
19
|
+
}, async ({ name }) => {
|
|
20
|
+
return {
|
|
21
|
+
messages: [
|
|
22
|
+
{
|
|
23
|
+
role: 'user',
|
|
24
|
+
content: {
|
|
25
|
+
type: 'text',
|
|
26
|
+
text: `Please greet ${name} in a friendly manner.`,
|
|
27
|
+
},
|
|
26
28
|
},
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
console.error("Error sending notification:", error);
|
|
51
|
-
}
|
|
52
|
-
// Wait for the specified interval
|
|
53
|
-
await sleep(interval);
|
|
54
|
-
}
|
|
55
|
-
return {
|
|
56
|
-
content: [
|
|
57
|
-
{
|
|
58
|
-
type: 'text',
|
|
59
|
-
text: `Started sending periodic notifications every ${interval}ms`,
|
|
29
|
+
],
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
// Register a tool specifically for testing resumability
|
|
33
|
+
server.tool('start-notification-stream', 'Starts sending periodic notifications for testing resumability', {
|
|
34
|
+
interval: zod_1.z.number().describe('Interval in milliseconds between notifications').default(100),
|
|
35
|
+
count: zod_1.z.number().describe('Number of notifications to send (0 for 100)').default(10),
|
|
36
|
+
}, async ({ interval, count }, { sendNotification }) => {
|
|
37
|
+
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
38
|
+
let counter = 0;
|
|
39
|
+
while (count === 0 || counter < count) {
|
|
40
|
+
counter++;
|
|
41
|
+
try {
|
|
42
|
+
await sendNotification({
|
|
43
|
+
method: "notifications/message",
|
|
44
|
+
params: {
|
|
45
|
+
level: "info",
|
|
46
|
+
data: `Periodic notification #${counter} at ${new Date().toISOString()}`
|
|
47
|
+
}
|
|
48
|
+
});
|
|
60
49
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error("Error sending notification:", error);
|
|
52
|
+
}
|
|
53
|
+
// Wait for the specified interval
|
|
54
|
+
await sleep(interval);
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
content: [
|
|
58
|
+
{
|
|
59
|
+
type: 'text',
|
|
60
|
+
text: `Started sending periodic notifications every ${interval}ms`,
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
// Create a simple resource at a fixed URI
|
|
66
|
+
server.resource('greeting-resource', 'https://example.com/greetings/default', { mimeType: 'text/plain' }, async () => {
|
|
67
|
+
return {
|
|
68
|
+
contents: [
|
|
69
|
+
{
|
|
70
|
+
uri: 'https://example.com/greetings/default',
|
|
71
|
+
text: 'Hello, world!',
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
return server;
|
|
77
|
+
};
|
|
75
78
|
const app = (0, express_1.default)();
|
|
76
79
|
app.use(express_1.default.json());
|
|
77
|
-
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
78
|
-
sessionIdGenerator: undefined,
|
|
79
|
-
});
|
|
80
|
-
// Setup routes for the server
|
|
81
|
-
const setupServer = async () => {
|
|
82
|
-
await server.connect(transport);
|
|
83
|
-
};
|
|
84
80
|
app.post('/mcp', async (req, res) => {
|
|
85
|
-
|
|
81
|
+
const server = getServer();
|
|
86
82
|
try {
|
|
83
|
+
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
84
|
+
sessionIdGenerator: undefined,
|
|
85
|
+
});
|
|
86
|
+
await server.connect(transport);
|
|
87
87
|
await transport.handleRequest(req, res, req.body);
|
|
88
|
+
res.on('close', () => {
|
|
89
|
+
console.log('Request closed');
|
|
90
|
+
transport.close();
|
|
91
|
+
server.close();
|
|
92
|
+
});
|
|
88
93
|
}
|
|
89
94
|
catch (error) {
|
|
90
95
|
console.error('Error handling MCP request:', error);
|
|
@@ -124,26 +129,12 @@ app.delete('/mcp', async (req, res) => {
|
|
|
124
129
|
});
|
|
125
130
|
// Start the server
|
|
126
131
|
const PORT = 3000;
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
console.log(`MCP Streamable HTTP Server listening on port ${PORT}`);
|
|
130
|
-
});
|
|
131
|
-
}).catch(error => {
|
|
132
|
-
console.error('Failed to set up the server:', error);
|
|
133
|
-
process.exit(1);
|
|
132
|
+
app.listen(PORT, () => {
|
|
133
|
+
console.log(`MCP Stateless Streamable HTTP Server listening on port ${PORT}`);
|
|
134
134
|
});
|
|
135
135
|
// Handle server shutdown
|
|
136
136
|
process.on('SIGINT', async () => {
|
|
137
137
|
console.log('Shutting down server...');
|
|
138
|
-
try {
|
|
139
|
-
console.log(`Closing transport`);
|
|
140
|
-
await transport.close();
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
console.error(`Error closing transport:`, error);
|
|
144
|
-
}
|
|
145
|
-
await server.close();
|
|
146
|
-
console.log('Server shutdown complete');
|
|
147
138
|
process.exit(0);
|
|
148
139
|
});
|
|
149
140
|
//# sourceMappingURL=simpleStatelessStreamableHttp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simpleStatelessStreamableHttp.js","sourceRoot":"","sources":["../../../../src/examples/server/simpleStatelessStreamableHttp.ts"],"names":[],"mappings":";;;;;AAAA,sDAAqD;AACrD,gDAAgD;AAChD,sEAA+E;AAC/E,6BAAwB;AAGxB,mDAAmD;
|
|
1
|
+
{"version":3,"file":"simpleStatelessStreamableHttp.js","sourceRoot":"","sources":["../../../../src/examples/server/simpleStatelessStreamableHttp.ts"],"names":[],"mappings":"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"}
|