@modelcontextprotocol/sdk 1.23.0 → 1.24.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 +84 -1507
- package/dist/cjs/client/auth-extensions.d.ts +178 -0
- package/dist/cjs/client/auth-extensions.d.ts.map +1 -0
- package/dist/cjs/client/auth-extensions.js +300 -0
- package/dist/cjs/client/auth-extensions.js.map +1 -0
- package/dist/cjs/client/auth.d.ts +90 -2
- package/dist/cjs/client/auth.d.ts.map +1 -1
- package/dist/cjs/client/auth.js +131 -75
- package/dist/cjs/client/auth.js.map +1 -1
- package/dist/cjs/client/index.d.ts +122 -14
- package/dist/cjs/client/index.d.ts.map +1 -1
- package/dist/cjs/client/index.js +125 -3
- package/dist/cjs/client/index.js.map +1 -1
- package/dist/cjs/client/sse.d.ts.map +1 -1
- package/dist/cjs/client/sse.js +6 -2
- package/dist/cjs/client/sse.js.map +1 -1
- package/dist/cjs/client/stdio.d.ts +0 -1
- package/dist/cjs/client/stdio.d.ts.map +1 -1
- package/dist/cjs/client/stdio.js +36 -11
- package/dist/cjs/client/stdio.js.map +1 -1
- package/dist/cjs/client/streamableHttp.d.ts +1 -0
- package/dist/cjs/client/streamableHttp.d.ts.map +1 -1
- package/dist/cjs/client/streamableHttp.js +36 -15
- package/dist/cjs/client/streamableHttp.js.map +1 -1
- package/dist/cjs/examples/client/simpleClientCredentials.d.ts +20 -0
- package/dist/cjs/examples/client/simpleClientCredentials.d.ts.map +1 -0
- package/dist/cjs/examples/client/simpleClientCredentials.js +70 -0
- package/dist/cjs/examples/client/simpleClientCredentials.js.map +1 -0
- package/dist/cjs/examples/client/simpleOAuthClient.js +77 -1
- package/dist/cjs/examples/client/simpleOAuthClient.js.map +1 -1
- package/dist/cjs/examples/client/simpleStreamableHttp.js +74 -3
- package/dist/cjs/examples/client/simpleStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/client/simpleTaskInteractiveClient.d.ts +10 -0
- package/dist/cjs/examples/client/simpleTaskInteractiveClient.d.ts.map +1 -0
- package/dist/cjs/examples/client/simpleTaskInteractiveClient.js +158 -0
- package/dist/cjs/examples/client/simpleTaskInteractiveClient.js.map +1 -0
- package/dist/cjs/examples/server/elicitationFormExample.js +2 -12
- package/dist/cjs/examples/server/elicitationFormExample.js.map +1 -1
- package/dist/cjs/examples/server/elicitationUrlExample.js +4 -3
- package/dist/cjs/examples/server/elicitationUrlExample.js.map +1 -1
- package/dist/cjs/examples/server/jsonResponseStreamableHttp.js +2 -12
- package/dist/cjs/examples/server/jsonResponseStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/simpleSseServer.js +2 -6
- package/dist/cjs/examples/server/simpleSseServer.js.map +1 -1
- package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js +2 -12
- package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/simpleStreamableHttp.js +61 -21
- package/dist/cjs/examples/server/simpleStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/simpleTaskInteractive.d.ts +12 -0
- package/dist/cjs/examples/server/simpleTaskInteractive.d.ts.map +1 -0
- package/dist/cjs/examples/server/simpleTaskInteractive.js +603 -0
- package/dist/cjs/examples/server/simpleTaskInteractive.js.map +1 -0
- package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js +2 -12
- package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -1
- package/dist/cjs/examples/server/ssePollingExample.js +11 -25
- package/dist/cjs/examples/server/ssePollingExample.js.map +1 -1
- package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js +2 -6
- package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -1
- package/dist/cjs/examples/server/toolWithSampleServer.js +7 -5
- package/dist/cjs/examples/server/toolWithSampleServer.js.map +1 -1
- package/dist/cjs/experimental/index.d.ts +13 -0
- package/dist/cjs/experimental/index.d.ts.map +1 -0
- package/dist/cjs/experimental/index.js +29 -0
- package/dist/cjs/experimental/index.js.map +1 -0
- package/dist/cjs/experimental/tasks/client.d.ts +121 -0
- package/dist/cjs/experimental/tasks/client.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/client.js +189 -0
- package/dist/cjs/experimental/tasks/client.js.map +1 -0
- package/dist/cjs/experimental/tasks/helpers.d.ts +47 -0
- package/dist/cjs/experimental/tasks/helpers.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/helpers.js +70 -0
- package/dist/cjs/experimental/tasks/helpers.js.map +1 -0
- package/dist/cjs/experimental/tasks/index.d.ts +16 -0
- package/dist/cjs/experimental/tasks/index.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/index.js +39 -0
- package/dist/cjs/experimental/tasks/index.js.map +1 -0
- package/dist/cjs/experimental/tasks/interfaces.d.ts +232 -0
- package/dist/cjs/experimental/tasks/interfaces.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/interfaces.js +19 -0
- package/dist/cjs/experimental/tasks/interfaces.js.map +1 -0
- package/dist/cjs/experimental/tasks/mcp-server.d.ts +77 -0
- package/dist/cjs/experimental/tasks/mcp-server.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/mcp-server.js +36 -0
- package/dist/cjs/experimental/tasks/mcp-server.js.map +1 -0
- package/dist/cjs/experimental/tasks/server.d.ts +83 -0
- package/dist/cjs/experimental/tasks/server.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/server.js +93 -0
- package/dist/cjs/experimental/tasks/server.js.map +1 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.d.ts +94 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.js +253 -0
- package/dist/cjs/experimental/tasks/stores/in-memory.js.map +1 -0
- package/dist/cjs/experimental/tasks/types.d.ts +10 -0
- package/dist/cjs/experimental/tasks/types.d.ts.map +1 -0
- package/dist/cjs/experimental/tasks/types.js +28 -0
- package/dist/cjs/experimental/tasks/types.js.map +1 -0
- package/dist/cjs/server/auth/errors.d.ts +7 -0
- package/dist/cjs/server/auth/errors.d.ts.map +1 -1
- package/dist/cjs/server/auth/errors.js +11 -2
- package/dist/cjs/server/auth/errors.js.map +1 -1
- package/dist/cjs/server/auth/handlers/token.d.ts.map +1 -1
- package/dist/cjs/server/auth/handlers/token.js +2 -2
- package/dist/cjs/server/auth/handlers/token.js.map +1 -1
- package/dist/cjs/server/auth/middleware/clientAuth.d.ts.map +1 -1
- package/dist/cjs/server/auth/middleware/clientAuth.js +0 -4
- package/dist/cjs/server/auth/middleware/clientAuth.js.map +1 -1
- package/dist/cjs/server/auth/providers/proxyProvider.d.ts.map +1 -1
- package/dist/cjs/server/auth/providers/proxyProvider.js +8 -4
- package/dist/cjs/server/auth/providers/proxyProvider.js.map +1 -1
- package/dist/cjs/server/auth/router.d.ts.map +1 -1
- package/dist/cjs/server/auth/router.js +7 -1
- package/dist/cjs/server/auth/router.js.map +1 -1
- package/dist/cjs/server/index.d.ts +91 -168
- package/dist/cjs/server/index.d.ts.map +1 -1
- package/dist/cjs/server/index.js +162 -0
- package/dist/cjs/server/index.js.map +1 -1
- package/dist/cjs/server/mcp.d.ts +41 -6
- package/dist/cjs/server/mcp.d.ts.map +1 -1
- package/dist/cjs/server/mcp.js +203 -48
- package/dist/cjs/server/mcp.js.map +1 -1
- package/dist/cjs/server/middleware/hostHeaderValidation.d.ts +32 -0
- package/dist/cjs/server/middleware/hostHeaderValidation.d.ts.map +1 -0
- package/dist/cjs/server/middleware/hostHeaderValidation.js +80 -0
- package/dist/cjs/server/middleware/hostHeaderValidation.js.map +1 -0
- package/dist/cjs/server/sse.d.ts +6 -0
- package/dist/cjs/server/sse.d.ts.map +1 -1
- package/dist/cjs/server/sse.js +3 -3
- package/dist/cjs/server/sse.js.map +1 -1
- package/dist/cjs/server/stdio.d.ts +1 -1
- package/dist/cjs/server/stdio.js +1 -1
- package/dist/cjs/server/streamableHttp.d.ts +11 -0
- package/dist/cjs/server/streamableHttp.d.ts.map +1 -1
- package/dist/cjs/server/streamableHttp.js +30 -7
- package/dist/cjs/server/streamableHttp.js.map +1 -1
- package/dist/cjs/server/zod-compat.d.ts +1 -1
- package/dist/cjs/server/zod-compat.d.ts.map +1 -1
- package/dist/cjs/server/zod-compat.js +2 -2
- package/dist/cjs/server/zod-compat.js.map +1 -1
- package/dist/cjs/shared/auth.d.ts +1 -1
- package/dist/cjs/shared/auth.js +1 -1
- package/dist/cjs/shared/auth.js.map +1 -1
- package/dist/cjs/shared/protocol.d.ts +220 -3
- package/dist/cjs/shared/protocol.d.ts.map +1 -1
- package/dist/cjs/shared/protocol.js +699 -38
- package/dist/cjs/shared/protocol.js.map +1 -1
- package/dist/cjs/shared/responseMessage.d.ts +45 -0
- package/dist/cjs/shared/responseMessage.d.ts.map +1 -0
- package/dist/cjs/shared/responseMessage.js +23 -0
- package/dist/cjs/shared/responseMessage.js.map +1 -0
- package/dist/cjs/shared/transport.d.ts +1 -1
- package/dist/cjs/types.d.ts +2369 -73
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +310 -18
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/client/auth-extensions.d.ts +178 -0
- package/dist/esm/client/auth-extensions.d.ts.map +1 -0
- package/dist/esm/client/auth-extensions.js +270 -0
- package/dist/esm/client/auth-extensions.js.map +1 -0
- package/dist/esm/client/auth.d.ts +90 -2
- package/dist/esm/client/auth.d.ts.map +1 -1
- package/dist/esm/client/auth.js +129 -75
- package/dist/esm/client/auth.js.map +1 -1
- package/dist/esm/client/index.d.ts +122 -14
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/index.js +126 -4
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/client/sse.d.ts.map +1 -1
- package/dist/esm/client/sse.js +7 -3
- package/dist/esm/client/sse.js.map +1 -1
- package/dist/esm/client/stdio.d.ts +0 -1
- package/dist/esm/client/stdio.d.ts.map +1 -1
- package/dist/esm/client/stdio.js +36 -11
- package/dist/esm/client/stdio.js.map +1 -1
- package/dist/esm/client/streamableHttp.d.ts +1 -0
- package/dist/esm/client/streamableHttp.d.ts.map +1 -1
- package/dist/esm/client/streamableHttp.js +36 -15
- package/dist/esm/client/streamableHttp.js.map +1 -1
- package/dist/esm/examples/client/simpleClientCredentials.d.ts +20 -0
- package/dist/esm/examples/client/simpleClientCredentials.d.ts.map +1 -0
- package/dist/esm/examples/client/simpleClientCredentials.js +68 -0
- package/dist/esm/examples/client/simpleClientCredentials.js.map +1 -0
- package/dist/esm/examples/client/simpleOAuthClient.js +77 -1
- package/dist/esm/examples/client/simpleOAuthClient.js.map +1 -1
- package/dist/esm/examples/client/simpleStreamableHttp.js +75 -4
- package/dist/esm/examples/client/simpleStreamableHttp.js.map +1 -1
- package/dist/esm/examples/client/simpleTaskInteractiveClient.d.ts +10 -0
- package/dist/esm/examples/client/simpleTaskInteractiveClient.d.ts.map +1 -0
- package/dist/esm/examples/client/simpleTaskInteractiveClient.js +156 -0
- package/dist/esm/examples/client/simpleTaskInteractiveClient.js.map +1 -0
- package/dist/esm/examples/server/elicitationFormExample.js +2 -9
- package/dist/esm/examples/server/elicitationFormExample.js.map +1 -1
- package/dist/esm/examples/server/elicitationUrlExample.js +4 -3
- package/dist/esm/examples/server/elicitationUrlExample.js.map +1 -1
- package/dist/esm/examples/server/jsonResponseStreamableHttp.js +2 -9
- package/dist/esm/examples/server/jsonResponseStreamableHttp.js.map +1 -1
- package/dist/esm/examples/server/simpleSseServer.js +2 -3
- package/dist/esm/examples/server/simpleSseServer.js.map +1 -1
- package/dist/esm/examples/server/simpleStatelessStreamableHttp.js +2 -9
- package/dist/esm/examples/server/simpleStatelessStreamableHttp.js.map +1 -1
- package/dist/esm/examples/server/simpleStreamableHttp.js +62 -19
- package/dist/esm/examples/server/simpleStreamableHttp.js.map +1 -1
- package/dist/esm/examples/server/simpleTaskInteractive.d.ts +12 -0
- package/dist/esm/examples/server/simpleTaskInteractive.d.ts.map +1 -0
- package/dist/esm/examples/server/simpleTaskInteractive.js +601 -0
- package/dist/esm/examples/server/simpleTaskInteractive.js.map +1 -0
- package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js +2 -9
- package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -1
- package/dist/esm/examples/server/ssePollingExample.js +11 -25
- package/dist/esm/examples/server/ssePollingExample.js.map +1 -1
- package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js +2 -3
- package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -1
- package/dist/esm/examples/server/toolWithSampleServer.js +7 -5
- package/dist/esm/examples/server/toolWithSampleServer.js.map +1 -1
- package/dist/esm/experimental/index.d.ts +13 -0
- package/dist/esm/experimental/index.d.ts.map +1 -0
- package/dist/esm/experimental/index.js +13 -0
- package/dist/esm/experimental/index.js.map +1 -0
- package/dist/esm/experimental/tasks/client.d.ts +121 -0
- package/dist/esm/experimental/tasks/client.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/client.js +185 -0
- package/dist/esm/experimental/tasks/client.js.map +1 -0
- package/dist/esm/experimental/tasks/helpers.d.ts +47 -0
- package/dist/esm/experimental/tasks/helpers.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/helpers.js +66 -0
- package/dist/esm/experimental/tasks/helpers.js.map +1 -0
- package/dist/esm/experimental/tasks/index.d.ts +16 -0
- package/dist/esm/experimental/tasks/index.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/index.js +20 -0
- package/dist/esm/experimental/tasks/index.js.map +1 -0
- package/dist/esm/experimental/tasks/interfaces.d.ts +232 -0
- package/dist/esm/experimental/tasks/interfaces.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/interfaces.js +16 -0
- package/dist/esm/experimental/tasks/interfaces.js.map +1 -0
- package/dist/esm/experimental/tasks/mcp-server.d.ts +77 -0
- package/dist/esm/experimental/tasks/mcp-server.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/mcp-server.js +32 -0
- package/dist/esm/experimental/tasks/mcp-server.js.map +1 -0
- package/dist/esm/experimental/tasks/server.d.ts +83 -0
- package/dist/esm/experimental/tasks/server.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/server.js +89 -0
- package/dist/esm/experimental/tasks/server.js.map +1 -0
- package/dist/esm/experimental/tasks/stores/in-memory.d.ts +94 -0
- package/dist/esm/experimental/tasks/stores/in-memory.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/stores/in-memory.js +248 -0
- package/dist/esm/experimental/tasks/stores/in-memory.js.map +1 -0
- package/dist/esm/experimental/tasks/types.d.ts +10 -0
- package/dist/esm/experimental/tasks/types.d.ts.map +1 -0
- package/dist/esm/experimental/tasks/types.js +10 -0
- package/dist/esm/experimental/tasks/types.js.map +1 -0
- package/dist/esm/server/auth/errors.d.ts +7 -0
- package/dist/esm/server/auth/errors.d.ts.map +1 -1
- package/dist/esm/server/auth/errors.js +9 -1
- package/dist/esm/server/auth/errors.js.map +1 -1
- package/dist/esm/server/auth/handlers/token.d.ts.map +1 -1
- package/dist/esm/server/auth/handlers/token.js +2 -2
- package/dist/esm/server/auth/handlers/token.js.map +1 -1
- package/dist/esm/server/auth/middleware/clientAuth.d.ts.map +1 -1
- package/dist/esm/server/auth/middleware/clientAuth.js +0 -4
- package/dist/esm/server/auth/middleware/clientAuth.js.map +1 -1
- package/dist/esm/server/auth/providers/proxyProvider.d.ts.map +1 -1
- package/dist/esm/server/auth/providers/proxyProvider.js +8 -4
- package/dist/esm/server/auth/providers/proxyProvider.js.map +1 -1
- package/dist/esm/server/auth/router.d.ts.map +1 -1
- package/dist/esm/server/auth/router.js +7 -1
- package/dist/esm/server/auth/router.js.map +1 -1
- package/dist/esm/server/index.d.ts +91 -168
- package/dist/esm/server/index.d.ts.map +1 -1
- package/dist/esm/server/index.js +159 -1
- package/dist/esm/server/index.js.map +1 -1
- package/dist/esm/server/mcp.d.ts +41 -6
- package/dist/esm/server/mcp.d.ts.map +1 -1
- package/dist/esm/server/mcp.js +203 -48
- package/dist/esm/server/mcp.js.map +1 -1
- package/dist/esm/server/middleware/hostHeaderValidation.d.ts +32 -0
- package/dist/esm/server/middleware/hostHeaderValidation.d.ts.map +1 -0
- package/dist/esm/server/middleware/hostHeaderValidation.js +76 -0
- package/dist/esm/server/middleware/hostHeaderValidation.js.map +1 -0
- package/dist/esm/server/sse.d.ts +6 -0
- package/dist/esm/server/sse.d.ts.map +1 -1
- package/dist/esm/server/sse.js +2 -2
- package/dist/esm/server/sse.js.map +1 -1
- package/dist/esm/server/stdio.d.ts +1 -1
- package/dist/esm/server/stdio.js +1 -1
- package/dist/esm/server/streamableHttp.d.ts +11 -0
- package/dist/esm/server/streamableHttp.d.ts.map +1 -1
- package/dist/esm/server/streamableHttp.js +30 -7
- package/dist/esm/server/streamableHttp.js.map +1 -1
- package/dist/esm/server/zod-compat.d.ts +1 -1
- package/dist/esm/server/zod-compat.d.ts.map +1 -1
- package/dist/esm/server/zod-compat.js +2 -2
- package/dist/esm/server/zod-compat.js.map +1 -1
- package/dist/esm/shared/auth.d.ts +1 -1
- package/dist/esm/shared/auth.js +1 -1
- package/dist/esm/shared/auth.js.map +1 -1
- package/dist/esm/shared/protocol.d.ts +220 -3
- package/dist/esm/shared/protocol.d.ts.map +1 -1
- package/dist/esm/shared/protocol.js +700 -39
- package/dist/esm/shared/protocol.js.map +1 -1
- package/dist/esm/shared/responseMessage.d.ts +45 -0
- package/dist/esm/shared/responseMessage.d.ts.map +1 -0
- package/dist/esm/shared/responseMessage.js +19 -0
- package/dist/esm/shared/responseMessage.js.map +1 -0
- package/dist/esm/shared/transport.d.ts +1 -1
- package/dist/esm/types.d.ts +2369 -73
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js +306 -15
- package/dist/esm/types.js.map +1 -1
- package/package.json +12 -1
- package/dist/cjs/shared/zodTestMatrix.d.ts +0 -16
- package/dist/cjs/shared/zodTestMatrix.d.ts.map +0 -1
- package/dist/cjs/shared/zodTestMatrix.js +0 -43
- package/dist/cjs/shared/zodTestMatrix.js.map +0 -1
- package/dist/esm/shared/zodTestMatrix.d.ts +0 -16
- package/dist/esm/shared/zodTestMatrix.d.ts.map +0 -1
- package/dist/esm/shared/zodTestMatrix.js +0 -17
- package/dist/esm/shared/zodTestMatrix.js.map +0 -1
|
@@ -0,0 +1,601 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple interactive task server demonstrating elicitation and sampling.
|
|
3
|
+
*
|
|
4
|
+
* This server demonstrates the task message queue pattern from the MCP Tasks spec:
|
|
5
|
+
* - confirm_delete: Uses elicitation to ask the user for confirmation
|
|
6
|
+
* - write_haiku: Uses sampling to request an LLM to generate content
|
|
7
|
+
*
|
|
8
|
+
* Both tools use the "call-now, fetch-later" pattern where the initial call
|
|
9
|
+
* creates a task, and the result is fetched via tasks/result endpoint.
|
|
10
|
+
*/
|
|
11
|
+
import { randomUUID } from 'node:crypto';
|
|
12
|
+
import { createMcpExpressApp, Server } from '../../server/index.js';
|
|
13
|
+
import { StreamableHTTPServerTransport } from '../../server/streamableHttp.js';
|
|
14
|
+
import { RELATED_TASK_META_KEY, ListToolsRequestSchema, CallToolRequestSchema, GetTaskRequestSchema, GetTaskPayloadRequestSchema } from '../../types.js';
|
|
15
|
+
import { isTerminal } from '../../experimental/tasks/interfaces.js';
|
|
16
|
+
import { InMemoryTaskStore } from '../../experimental/tasks/stores/in-memory.js';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Resolver - Promise-like for passing results between async operations
|
|
19
|
+
// ============================================================================
|
|
20
|
+
class Resolver {
|
|
21
|
+
constructor() {
|
|
22
|
+
this._done = false;
|
|
23
|
+
this._promise = new Promise((resolve, reject) => {
|
|
24
|
+
this._resolve = resolve;
|
|
25
|
+
this._reject = reject;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
setResult(value) {
|
|
29
|
+
if (this._done)
|
|
30
|
+
return;
|
|
31
|
+
this._done = true;
|
|
32
|
+
this._resolve(value);
|
|
33
|
+
}
|
|
34
|
+
setException(error) {
|
|
35
|
+
if (this._done)
|
|
36
|
+
return;
|
|
37
|
+
this._done = true;
|
|
38
|
+
this._reject(error);
|
|
39
|
+
}
|
|
40
|
+
wait() {
|
|
41
|
+
return this._promise;
|
|
42
|
+
}
|
|
43
|
+
done() {
|
|
44
|
+
return this._done;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
class TaskMessageQueueWithResolvers {
|
|
48
|
+
constructor() {
|
|
49
|
+
this.queues = new Map();
|
|
50
|
+
this.waitResolvers = new Map();
|
|
51
|
+
}
|
|
52
|
+
getQueue(taskId) {
|
|
53
|
+
let queue = this.queues.get(taskId);
|
|
54
|
+
if (!queue) {
|
|
55
|
+
queue = [];
|
|
56
|
+
this.queues.set(taskId, queue);
|
|
57
|
+
}
|
|
58
|
+
return queue;
|
|
59
|
+
}
|
|
60
|
+
async enqueue(taskId, message, _sessionId, maxSize) {
|
|
61
|
+
const queue = this.getQueue(taskId);
|
|
62
|
+
if (maxSize !== undefined && queue.length >= maxSize) {
|
|
63
|
+
throw new Error(`Task message queue overflow: queue size (${queue.length}) exceeds maximum (${maxSize})`);
|
|
64
|
+
}
|
|
65
|
+
queue.push(message);
|
|
66
|
+
// Notify any waiters
|
|
67
|
+
this.notifyWaiters(taskId);
|
|
68
|
+
}
|
|
69
|
+
async enqueueWithResolver(taskId, message, resolver, originalRequestId) {
|
|
70
|
+
const queue = this.getQueue(taskId);
|
|
71
|
+
const queuedMessage = {
|
|
72
|
+
type: 'request',
|
|
73
|
+
message,
|
|
74
|
+
timestamp: Date.now(),
|
|
75
|
+
resolver,
|
|
76
|
+
originalRequestId
|
|
77
|
+
};
|
|
78
|
+
queue.push(queuedMessage);
|
|
79
|
+
this.notifyWaiters(taskId);
|
|
80
|
+
}
|
|
81
|
+
async dequeue(taskId, _sessionId) {
|
|
82
|
+
const queue = this.getQueue(taskId);
|
|
83
|
+
return queue.shift();
|
|
84
|
+
}
|
|
85
|
+
async dequeueAll(taskId, _sessionId) {
|
|
86
|
+
var _a;
|
|
87
|
+
const queue = (_a = this.queues.get(taskId)) !== null && _a !== void 0 ? _a : [];
|
|
88
|
+
this.queues.delete(taskId);
|
|
89
|
+
return queue;
|
|
90
|
+
}
|
|
91
|
+
async waitForMessage(taskId) {
|
|
92
|
+
// Check if there are already messages
|
|
93
|
+
const queue = this.getQueue(taskId);
|
|
94
|
+
if (queue.length > 0)
|
|
95
|
+
return;
|
|
96
|
+
// Wait for a message to be added
|
|
97
|
+
return new Promise(resolve => {
|
|
98
|
+
let waiters = this.waitResolvers.get(taskId);
|
|
99
|
+
if (!waiters) {
|
|
100
|
+
waiters = [];
|
|
101
|
+
this.waitResolvers.set(taskId, waiters);
|
|
102
|
+
}
|
|
103
|
+
waiters.push(resolve);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
notifyWaiters(taskId) {
|
|
107
|
+
const waiters = this.waitResolvers.get(taskId);
|
|
108
|
+
if (waiters) {
|
|
109
|
+
this.waitResolvers.delete(taskId);
|
|
110
|
+
for (const resolve of waiters) {
|
|
111
|
+
resolve();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
cleanup() {
|
|
116
|
+
this.queues.clear();
|
|
117
|
+
this.waitResolvers.clear();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// Extended task store with wait functionality
|
|
122
|
+
// ============================================================================
|
|
123
|
+
class TaskStoreWithNotifications extends InMemoryTaskStore {
|
|
124
|
+
constructor() {
|
|
125
|
+
super(...arguments);
|
|
126
|
+
this.updateResolvers = new Map();
|
|
127
|
+
}
|
|
128
|
+
async updateTaskStatus(taskId, status, statusMessage, sessionId) {
|
|
129
|
+
await super.updateTaskStatus(taskId, status, statusMessage, sessionId);
|
|
130
|
+
this.notifyUpdate(taskId);
|
|
131
|
+
}
|
|
132
|
+
async storeTaskResult(taskId, status, result, sessionId) {
|
|
133
|
+
await super.storeTaskResult(taskId, status, result, sessionId);
|
|
134
|
+
this.notifyUpdate(taskId);
|
|
135
|
+
}
|
|
136
|
+
async waitForUpdate(taskId) {
|
|
137
|
+
return new Promise(resolve => {
|
|
138
|
+
let waiters = this.updateResolvers.get(taskId);
|
|
139
|
+
if (!waiters) {
|
|
140
|
+
waiters = [];
|
|
141
|
+
this.updateResolvers.set(taskId, waiters);
|
|
142
|
+
}
|
|
143
|
+
waiters.push(resolve);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
notifyUpdate(taskId) {
|
|
147
|
+
const waiters = this.updateResolvers.get(taskId);
|
|
148
|
+
if (waiters) {
|
|
149
|
+
this.updateResolvers.delete(taskId);
|
|
150
|
+
for (const resolve of waiters) {
|
|
151
|
+
resolve();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// ============================================================================
|
|
157
|
+
// Task Result Handler - delivers queued messages and routes responses
|
|
158
|
+
// ============================================================================
|
|
159
|
+
class TaskResultHandler {
|
|
160
|
+
constructor(store, queue) {
|
|
161
|
+
this.store = store;
|
|
162
|
+
this.queue = queue;
|
|
163
|
+
this.pendingRequests = new Map();
|
|
164
|
+
}
|
|
165
|
+
async handle(taskId, server, _sessionId) {
|
|
166
|
+
while (true) {
|
|
167
|
+
// Get fresh task state
|
|
168
|
+
const task = await this.store.getTask(taskId);
|
|
169
|
+
if (!task) {
|
|
170
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
171
|
+
}
|
|
172
|
+
// Dequeue and send all pending messages
|
|
173
|
+
await this.deliverQueuedMessages(taskId, server, _sessionId);
|
|
174
|
+
// If task is terminal, return result
|
|
175
|
+
if (isTerminal(task.status)) {
|
|
176
|
+
const result = await this.store.getTaskResult(taskId);
|
|
177
|
+
// Add related-task metadata per spec
|
|
178
|
+
return {
|
|
179
|
+
...result,
|
|
180
|
+
_meta: {
|
|
181
|
+
...(result._meta || {}),
|
|
182
|
+
[RELATED_TASK_META_KEY]: { taskId }
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
// Wait for task update or new message
|
|
187
|
+
await this.waitForUpdate(taskId);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async deliverQueuedMessages(taskId, server, _sessionId) {
|
|
191
|
+
while (true) {
|
|
192
|
+
const message = await this.queue.dequeue(taskId);
|
|
193
|
+
if (!message)
|
|
194
|
+
break;
|
|
195
|
+
console.log(`[Server] Delivering queued ${message.type} message for task ${taskId}`);
|
|
196
|
+
if (message.type === 'request') {
|
|
197
|
+
const reqMessage = message;
|
|
198
|
+
// Send the request via the server
|
|
199
|
+
// Store the resolver so we can route the response back
|
|
200
|
+
if (reqMessage.resolver && reqMessage.originalRequestId) {
|
|
201
|
+
this.pendingRequests.set(reqMessage.originalRequestId, reqMessage.resolver);
|
|
202
|
+
}
|
|
203
|
+
// Send the message - for elicitation/sampling, we use the server's methods
|
|
204
|
+
// But since we're in tasks/result context, we need to send via transport
|
|
205
|
+
// This is simplified - in production you'd use proper message routing
|
|
206
|
+
try {
|
|
207
|
+
const request = reqMessage.message;
|
|
208
|
+
let response;
|
|
209
|
+
if (request.method === 'elicitation/create') {
|
|
210
|
+
// Send elicitation request to client
|
|
211
|
+
const params = request.params;
|
|
212
|
+
response = await server.elicitInput(params);
|
|
213
|
+
}
|
|
214
|
+
else if (request.method === 'sampling/createMessage') {
|
|
215
|
+
// Send sampling request to client
|
|
216
|
+
const params = request.params;
|
|
217
|
+
response = await server.createMessage(params);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
throw new Error(`Unknown request method: ${request.method}`);
|
|
221
|
+
}
|
|
222
|
+
// Route response back to resolver
|
|
223
|
+
if (reqMessage.resolver) {
|
|
224
|
+
reqMessage.resolver.setResult(response);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
if (reqMessage.resolver) {
|
|
229
|
+
reqMessage.resolver.setException(error instanceof Error ? error : new Error(String(error)));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// For notifications, we'd send them too but this example focuses on requests
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
async waitForUpdate(taskId) {
|
|
237
|
+
// Race between store update and queue message
|
|
238
|
+
await Promise.race([this.store.waitForUpdate(taskId), this.queue.waitForMessage(taskId)]);
|
|
239
|
+
}
|
|
240
|
+
routeResponse(requestId, response) {
|
|
241
|
+
const resolver = this.pendingRequests.get(requestId);
|
|
242
|
+
if (resolver && !resolver.done()) {
|
|
243
|
+
this.pendingRequests.delete(requestId);
|
|
244
|
+
resolver.setResult(response);
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
routeError(requestId, error) {
|
|
250
|
+
const resolver = this.pendingRequests.get(requestId);
|
|
251
|
+
if (resolver && !resolver.done()) {
|
|
252
|
+
this.pendingRequests.delete(requestId);
|
|
253
|
+
resolver.setException(error);
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// ============================================================================
|
|
260
|
+
// Task Session - wraps server to enqueue requests during task execution
|
|
261
|
+
// ============================================================================
|
|
262
|
+
class TaskSession {
|
|
263
|
+
constructor(server, taskId, store, queue) {
|
|
264
|
+
this.server = server;
|
|
265
|
+
this.taskId = taskId;
|
|
266
|
+
this.store = store;
|
|
267
|
+
this.queue = queue;
|
|
268
|
+
this.requestCounter = 0;
|
|
269
|
+
}
|
|
270
|
+
nextRequestId() {
|
|
271
|
+
return `task-${this.taskId}-${++this.requestCounter}`;
|
|
272
|
+
}
|
|
273
|
+
async elicit(message, requestedSchema) {
|
|
274
|
+
// Update task status to input_required
|
|
275
|
+
await this.store.updateTaskStatus(this.taskId, 'input_required');
|
|
276
|
+
const requestId = this.nextRequestId();
|
|
277
|
+
// Build the elicitation request with related-task metadata
|
|
278
|
+
const params = {
|
|
279
|
+
message,
|
|
280
|
+
requestedSchema,
|
|
281
|
+
mode: 'form',
|
|
282
|
+
_meta: {
|
|
283
|
+
[RELATED_TASK_META_KEY]: { taskId: this.taskId }
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
const jsonrpcRequest = {
|
|
287
|
+
jsonrpc: '2.0',
|
|
288
|
+
id: requestId,
|
|
289
|
+
method: 'elicitation/create',
|
|
290
|
+
params
|
|
291
|
+
};
|
|
292
|
+
// Create resolver to wait for response
|
|
293
|
+
const resolver = new Resolver();
|
|
294
|
+
// Enqueue the request
|
|
295
|
+
await this.queue.enqueueWithResolver(this.taskId, jsonrpcRequest, resolver, requestId);
|
|
296
|
+
try {
|
|
297
|
+
// Wait for response
|
|
298
|
+
const response = await resolver.wait();
|
|
299
|
+
// Update status back to working
|
|
300
|
+
await this.store.updateTaskStatus(this.taskId, 'working');
|
|
301
|
+
return response;
|
|
302
|
+
}
|
|
303
|
+
catch (error) {
|
|
304
|
+
await this.store.updateTaskStatus(this.taskId, 'working');
|
|
305
|
+
throw error;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
async createMessage(messages, maxTokens) {
|
|
309
|
+
// Update task status to input_required
|
|
310
|
+
await this.store.updateTaskStatus(this.taskId, 'input_required');
|
|
311
|
+
const requestId = this.nextRequestId();
|
|
312
|
+
// Build the sampling request with related-task metadata
|
|
313
|
+
const params = {
|
|
314
|
+
messages,
|
|
315
|
+
maxTokens,
|
|
316
|
+
_meta: {
|
|
317
|
+
[RELATED_TASK_META_KEY]: { taskId: this.taskId }
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
const jsonrpcRequest = {
|
|
321
|
+
jsonrpc: '2.0',
|
|
322
|
+
id: requestId,
|
|
323
|
+
method: 'sampling/createMessage',
|
|
324
|
+
params
|
|
325
|
+
};
|
|
326
|
+
// Create resolver to wait for response
|
|
327
|
+
const resolver = new Resolver();
|
|
328
|
+
// Enqueue the request
|
|
329
|
+
await this.queue.enqueueWithResolver(this.taskId, jsonrpcRequest, resolver, requestId);
|
|
330
|
+
try {
|
|
331
|
+
// Wait for response
|
|
332
|
+
const response = await resolver.wait();
|
|
333
|
+
// Update status back to working
|
|
334
|
+
await this.store.updateTaskStatus(this.taskId, 'working');
|
|
335
|
+
return response;
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
await this.store.updateTaskStatus(this.taskId, 'working');
|
|
339
|
+
throw error;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
// ============================================================================
|
|
344
|
+
// Server Setup
|
|
345
|
+
// ============================================================================
|
|
346
|
+
const PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : 8000;
|
|
347
|
+
// Create shared stores
|
|
348
|
+
const taskStore = new TaskStoreWithNotifications();
|
|
349
|
+
const messageQueue = new TaskMessageQueueWithResolvers();
|
|
350
|
+
const taskResultHandler = new TaskResultHandler(taskStore, messageQueue);
|
|
351
|
+
// Track active task executions
|
|
352
|
+
const activeTaskExecutions = new Map();
|
|
353
|
+
// Create the server
|
|
354
|
+
const createServer = () => {
|
|
355
|
+
const server = new Server({ name: 'simple-task-interactive', version: '1.0.0' }, {
|
|
356
|
+
capabilities: {
|
|
357
|
+
tools: {},
|
|
358
|
+
tasks: {
|
|
359
|
+
requests: {
|
|
360
|
+
tools: { call: {} }
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
// Register tools
|
|
366
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
367
|
+
return {
|
|
368
|
+
tools: [
|
|
369
|
+
{
|
|
370
|
+
name: 'confirm_delete',
|
|
371
|
+
description: 'Asks for confirmation before deleting (demonstrates elicitation)',
|
|
372
|
+
inputSchema: {
|
|
373
|
+
type: 'object',
|
|
374
|
+
properties: {
|
|
375
|
+
filename: { type: 'string' }
|
|
376
|
+
}
|
|
377
|
+
},
|
|
378
|
+
execution: { taskSupport: 'required' }
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
name: 'write_haiku',
|
|
382
|
+
description: 'Asks LLM to write a haiku (demonstrates sampling)',
|
|
383
|
+
inputSchema: {
|
|
384
|
+
type: 'object',
|
|
385
|
+
properties: {
|
|
386
|
+
topic: { type: 'string' }
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
execution: { taskSupport: 'required' }
|
|
390
|
+
}
|
|
391
|
+
]
|
|
392
|
+
};
|
|
393
|
+
});
|
|
394
|
+
// Handle tool calls
|
|
395
|
+
server.setRequestHandler(CallToolRequestSchema, async (request, extra) => {
|
|
396
|
+
var _a, _b, _c;
|
|
397
|
+
const { name, arguments: args } = request.params;
|
|
398
|
+
const taskParams = (((_a = request.params._meta) === null || _a === void 0 ? void 0 : _a.task) || request.params.task);
|
|
399
|
+
// Validate task mode - these tools require tasks
|
|
400
|
+
if (!taskParams) {
|
|
401
|
+
throw new Error(`Tool ${name} requires task mode`);
|
|
402
|
+
}
|
|
403
|
+
// Create task
|
|
404
|
+
const taskOptions = {
|
|
405
|
+
ttl: taskParams.ttl,
|
|
406
|
+
pollInterval: (_b = taskParams.pollInterval) !== null && _b !== void 0 ? _b : 1000
|
|
407
|
+
};
|
|
408
|
+
const task = await taskStore.createTask(taskOptions, extra.requestId, request, extra.sessionId);
|
|
409
|
+
console.log(`\n[Server] ${name} called, task created: ${task.taskId}`);
|
|
410
|
+
// Start background task execution
|
|
411
|
+
const taskExecution = (async () => {
|
|
412
|
+
var _a, _b;
|
|
413
|
+
try {
|
|
414
|
+
const taskSession = new TaskSession(server, task.taskId, taskStore, messageQueue);
|
|
415
|
+
if (name === 'confirm_delete') {
|
|
416
|
+
const filename = (_a = args === null || args === void 0 ? void 0 : args.filename) !== null && _a !== void 0 ? _a : 'unknown.txt';
|
|
417
|
+
console.log(`[Server] confirm_delete: asking about '${filename}'`);
|
|
418
|
+
console.log('[Server] Sending elicitation request to client...');
|
|
419
|
+
const result = await taskSession.elicit(`Are you sure you want to delete '${filename}'?`, {
|
|
420
|
+
type: 'object',
|
|
421
|
+
properties: {
|
|
422
|
+
confirm: { type: 'boolean' }
|
|
423
|
+
},
|
|
424
|
+
required: ['confirm']
|
|
425
|
+
});
|
|
426
|
+
console.log(`[Server] Received elicitation response: action=${result.action}, content=${JSON.stringify(result.content)}`);
|
|
427
|
+
let text;
|
|
428
|
+
if (result.action === 'accept' && result.content) {
|
|
429
|
+
const confirmed = result.content.confirm;
|
|
430
|
+
text = confirmed ? `Deleted '${filename}'` : 'Deletion cancelled';
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
text = 'Deletion cancelled';
|
|
434
|
+
}
|
|
435
|
+
console.log(`[Server] Completing task with result: ${text}`);
|
|
436
|
+
await taskStore.storeTaskResult(task.taskId, 'completed', {
|
|
437
|
+
content: [{ type: 'text', text }]
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
else if (name === 'write_haiku') {
|
|
441
|
+
const topic = (_b = args === null || args === void 0 ? void 0 : args.topic) !== null && _b !== void 0 ? _b : 'nature';
|
|
442
|
+
console.log(`[Server] write_haiku: topic '${topic}'`);
|
|
443
|
+
console.log('[Server] Sending sampling request to client...');
|
|
444
|
+
const result = await taskSession.createMessage([
|
|
445
|
+
{
|
|
446
|
+
role: 'user',
|
|
447
|
+
content: { type: 'text', text: `Write a haiku about ${topic}` }
|
|
448
|
+
}
|
|
449
|
+
], 50);
|
|
450
|
+
let haiku = 'No response';
|
|
451
|
+
if (result.content && 'text' in result.content) {
|
|
452
|
+
haiku = result.content.text;
|
|
453
|
+
}
|
|
454
|
+
console.log(`[Server] Received sampling response: ${haiku.substring(0, 50)}...`);
|
|
455
|
+
console.log('[Server] Completing task with haiku');
|
|
456
|
+
await taskStore.storeTaskResult(task.taskId, 'completed', {
|
|
457
|
+
content: [{ type: 'text', text: `Haiku:\n${haiku}` }]
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
catch (error) {
|
|
462
|
+
console.error(`[Server] Task ${task.taskId} failed:`, error);
|
|
463
|
+
await taskStore.storeTaskResult(task.taskId, 'failed', {
|
|
464
|
+
content: [{ type: 'text', text: `Error: ${error}` }],
|
|
465
|
+
isError: true
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
finally {
|
|
469
|
+
activeTaskExecutions.delete(task.taskId);
|
|
470
|
+
}
|
|
471
|
+
})();
|
|
472
|
+
activeTaskExecutions.set(task.taskId, {
|
|
473
|
+
promise: taskExecution,
|
|
474
|
+
server,
|
|
475
|
+
sessionId: (_c = extra.sessionId) !== null && _c !== void 0 ? _c : ''
|
|
476
|
+
});
|
|
477
|
+
return { task };
|
|
478
|
+
});
|
|
479
|
+
// Handle tasks/get
|
|
480
|
+
server.setRequestHandler(GetTaskRequestSchema, async (request) => {
|
|
481
|
+
const { taskId } = request.params;
|
|
482
|
+
const task = await taskStore.getTask(taskId);
|
|
483
|
+
if (!task) {
|
|
484
|
+
throw new Error(`Task ${taskId} not found`);
|
|
485
|
+
}
|
|
486
|
+
return task;
|
|
487
|
+
});
|
|
488
|
+
// Handle tasks/result
|
|
489
|
+
server.setRequestHandler(GetTaskPayloadRequestSchema, async (request, extra) => {
|
|
490
|
+
var _a;
|
|
491
|
+
const { taskId } = request.params;
|
|
492
|
+
console.log(`[Server] tasks/result called for task ${taskId}`);
|
|
493
|
+
return taskResultHandler.handle(taskId, server, (_a = extra.sessionId) !== null && _a !== void 0 ? _a : '');
|
|
494
|
+
});
|
|
495
|
+
return server;
|
|
496
|
+
};
|
|
497
|
+
// ============================================================================
|
|
498
|
+
// Express App Setup
|
|
499
|
+
// ============================================================================
|
|
500
|
+
const app = createMcpExpressApp();
|
|
501
|
+
// Map to store transports by session ID
|
|
502
|
+
const transports = {};
|
|
503
|
+
// Helper to check if request is initialize
|
|
504
|
+
const isInitializeRequest = (body) => {
|
|
505
|
+
return typeof body === 'object' && body !== null && 'method' in body && body.method === 'initialize';
|
|
506
|
+
};
|
|
507
|
+
// MCP POST endpoint
|
|
508
|
+
app.post('/mcp', async (req, res) => {
|
|
509
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
510
|
+
try {
|
|
511
|
+
let transport;
|
|
512
|
+
if (sessionId && transports[sessionId]) {
|
|
513
|
+
transport = transports[sessionId];
|
|
514
|
+
}
|
|
515
|
+
else if (!sessionId && isInitializeRequest(req.body)) {
|
|
516
|
+
transport = new StreamableHTTPServerTransport({
|
|
517
|
+
sessionIdGenerator: () => randomUUID(),
|
|
518
|
+
onsessioninitialized: sid => {
|
|
519
|
+
console.log(`Session initialized: ${sid}`);
|
|
520
|
+
transports[sid] = transport;
|
|
521
|
+
}
|
|
522
|
+
});
|
|
523
|
+
transport.onclose = () => {
|
|
524
|
+
const sid = transport.sessionId;
|
|
525
|
+
if (sid && transports[sid]) {
|
|
526
|
+
console.log(`Transport closed for session ${sid}`);
|
|
527
|
+
delete transports[sid];
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
const server = createServer();
|
|
531
|
+
await server.connect(transport);
|
|
532
|
+
await transport.handleRequest(req, res, req.body);
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
res.status(400).json({
|
|
537
|
+
jsonrpc: '2.0',
|
|
538
|
+
error: { code: -32000, message: 'Bad Request: No valid session ID' },
|
|
539
|
+
id: null
|
|
540
|
+
});
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
543
|
+
await transport.handleRequest(req, res, req.body);
|
|
544
|
+
}
|
|
545
|
+
catch (error) {
|
|
546
|
+
console.error('Error handling MCP request:', error);
|
|
547
|
+
if (!res.headersSent) {
|
|
548
|
+
res.status(500).json({
|
|
549
|
+
jsonrpc: '2.0',
|
|
550
|
+
error: { code: -32603, message: 'Internal server error' },
|
|
551
|
+
id: null
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
});
|
|
556
|
+
// Handle GET requests for SSE streams
|
|
557
|
+
app.get('/mcp', async (req, res) => {
|
|
558
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
559
|
+
if (!sessionId || !transports[sessionId]) {
|
|
560
|
+
res.status(400).send('Invalid or missing session ID');
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
const transport = transports[sessionId];
|
|
564
|
+
await transport.handleRequest(req, res);
|
|
565
|
+
});
|
|
566
|
+
// Handle DELETE requests for session termination
|
|
567
|
+
app.delete('/mcp', async (req, res) => {
|
|
568
|
+
const sessionId = req.headers['mcp-session-id'];
|
|
569
|
+
if (!sessionId || !transports[sessionId]) {
|
|
570
|
+
res.status(400).send('Invalid or missing session ID');
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
573
|
+
console.log(`Session termination request: ${sessionId}`);
|
|
574
|
+
const transport = transports[sessionId];
|
|
575
|
+
await transport.handleRequest(req, res);
|
|
576
|
+
});
|
|
577
|
+
// Start server
|
|
578
|
+
app.listen(PORT, () => {
|
|
579
|
+
console.log(`Starting server on http://localhost:${PORT}/mcp`);
|
|
580
|
+
console.log('\nAvailable tools:');
|
|
581
|
+
console.log(' - confirm_delete: Demonstrates elicitation (asks user y/n)');
|
|
582
|
+
console.log(' - write_haiku: Demonstrates sampling (requests LLM completion)');
|
|
583
|
+
});
|
|
584
|
+
// Handle shutdown
|
|
585
|
+
process.on('SIGINT', async () => {
|
|
586
|
+
console.log('\nShutting down server...');
|
|
587
|
+
for (const sessionId of Object.keys(transports)) {
|
|
588
|
+
try {
|
|
589
|
+
await transports[sessionId].close();
|
|
590
|
+
delete transports[sessionId];
|
|
591
|
+
}
|
|
592
|
+
catch (error) {
|
|
593
|
+
console.error(`Error closing session ${sessionId}:`, error);
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
taskStore.cleanup();
|
|
597
|
+
messageQueue.cleanup();
|
|
598
|
+
console.log('Server shutdown complete');
|
|
599
|
+
process.exit(0);
|
|
600
|
+
});
|
|
601
|
+
//# sourceMappingURL=simpleTaskInteractive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simpleTaskInteractive.js","sourceRoot":"","sources":["../../../../src/examples/server/simpleTaskInteractive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import express from 'express';
|
|
2
1
|
import { randomUUID } from 'node:crypto';
|
|
3
2
|
import { McpServer } from '../../server/mcp.js';
|
|
4
3
|
import { StreamableHTTPServerTransport } from '../../server/streamableHttp.js';
|
|
@@ -6,7 +5,7 @@ import { SSEServerTransport } from '../../server/sse.js';
|
|
|
6
5
|
import * as z from 'zod/v4';
|
|
7
6
|
import { isInitializeRequest } from '../../types.js';
|
|
8
7
|
import { InMemoryEventStore } from '../shared/inMemoryEventStore.js';
|
|
9
|
-
import
|
|
8
|
+
import { createMcpExpressApp } from '../../server/index.js';
|
|
10
9
|
/**
|
|
11
10
|
* This example server demonstrates backwards compatibility with both:
|
|
12
11
|
* 1. The deprecated HTTP+SSE transport (protocol version 2024-11-05)
|
|
@@ -55,13 +54,7 @@ const getServer = () => {
|
|
|
55
54
|
return server;
|
|
56
55
|
};
|
|
57
56
|
// Create Express application
|
|
58
|
-
const app =
|
|
59
|
-
app.use(express.json());
|
|
60
|
-
// Configure CORS to expose Mcp-Session-Id header for browser-based clients
|
|
61
|
-
app.use(cors({
|
|
62
|
-
origin: '*', // Allow all origins - adjust as needed for production
|
|
63
|
-
exposedHeaders: ['Mcp-Session-Id']
|
|
64
|
-
}));
|
|
57
|
+
const app = createMcpExpressApp();
|
|
65
58
|
// Store transports by session ID
|
|
66
59
|
const transports = {};
|
|
67
60
|
//=============================================================================
|