mcp-server-db2i 1.2.1 → 1.3.1

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.
Files changed (62) hide show
  1. package/README.md +90 -308
  2. package/dist/auth/authMiddleware.d.ts +66 -0
  3. package/dist/auth/authMiddleware.d.ts.map +1 -0
  4. package/dist/auth/authMiddleware.js +217 -0
  5. package/dist/auth/authMiddleware.js.map +1 -0
  6. package/dist/auth/index.d.ts +9 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +10 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/tokenManager.d.ts +114 -0
  11. package/dist/auth/tokenManager.d.ts.map +1 -0
  12. package/dist/auth/tokenManager.js +255 -0
  13. package/dist/auth/tokenManager.js.map +1 -0
  14. package/dist/auth/types.d.ts +103 -0
  15. package/dist/auth/types.d.ts.map +1 -0
  16. package/dist/auth/types.js +10 -0
  17. package/dist/auth/types.js.map +1 -0
  18. package/dist/config.d.ts +128 -0
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/config.js +185 -0
  21. package/dist/config.js.map +1 -1
  22. package/dist/db/connection.d.ts +53 -3
  23. package/dist/db/connection.d.ts.map +1 -1
  24. package/dist/db/connection.js +154 -15
  25. package/dist/db/connection.js.map +1 -1
  26. package/dist/db/queries.d.ts +29 -6
  27. package/dist/db/queries.d.ts.map +1 -1
  28. package/dist/db/queries.js +35 -12
  29. package/dist/db/queries.js.map +1 -1
  30. package/dist/index.d.ts +9 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +97 -42
  33. package/dist/index.js.map +1 -1
  34. package/dist/openapi.d.ts +49 -0
  35. package/dist/openapi.d.ts.map +1 -0
  36. package/dist/openapi.js +634 -0
  37. package/dist/openapi.js.map +1 -0
  38. package/dist/server.d.ts +26 -2
  39. package/dist/server.d.ts.map +1 -1
  40. package/dist/server.js +68 -22
  41. package/dist/server.js.map +1 -1
  42. package/dist/tools/metadata.d.ts +10 -0
  43. package/dist/tools/metadata.d.ts.map +1 -1
  44. package/dist/tools/metadata.js +10 -6
  45. package/dist/tools/metadata.js.map +1 -1
  46. package/dist/tools/query.d.ts +4 -0
  47. package/dist/tools/query.d.ts.map +1 -1
  48. package/dist/tools/query.js +5 -3
  49. package/dist/tools/query.js.map +1 -1
  50. package/dist/transports/http.d.ts +26 -0
  51. package/dist/transports/http.d.ts.map +1 -0
  52. package/dist/transports/http.js +552 -0
  53. package/dist/transports/http.js.map +1 -0
  54. package/dist/transports/index.d.ts +8 -0
  55. package/dist/transports/index.d.ts.map +1 -0
  56. package/dist/transports/index.js +8 -0
  57. package/dist/transports/index.js.map +1 -0
  58. package/dist/transports/sessionManager.d.ts +106 -0
  59. package/dist/transports/sessionManager.d.ts.map +1 -0
  60. package/dist/transports/sessionManager.js +260 -0
  61. package/dist/transports/sessionManager.js.map +1 -0
  62. package/package.json +9 -5
@@ -0,0 +1,106 @@
1
+ /**
2
+ * MCP Session Manager for HTTP Transport
3
+ *
4
+ * Manages stateful MCP sessions using the SDK's StreamableHTTPServerTransport.
5
+ * Each session maintains its own transport and server instance.
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
9
+ /**
10
+ * MCP Session state
11
+ */
12
+ export interface McpSession {
13
+ /** Unique session ID */
14
+ id: string;
15
+ /** The MCP server instance for this session */
16
+ server: McpServer;
17
+ /** The transport for this session */
18
+ transport: StreamableHTTPServerTransport;
19
+ /** Associated auth token */
20
+ authToken: string;
21
+ /** When the session was created */
22
+ createdAt: Date;
23
+ /** When the session was last accessed */
24
+ lastAccessedAt: Date;
25
+ /** Number of active requests */
26
+ activeRequests: number;
27
+ /** Whether the session is closing */
28
+ isClosing: boolean;
29
+ }
30
+ /**
31
+ * Session Manager singleton for managing MCP sessions
32
+ */
33
+ declare class SessionManager {
34
+ private static instance;
35
+ private sessions;
36
+ private cleanupTimer;
37
+ private readonly staleTimeoutMs;
38
+ private readonly cleanupIntervalMs;
39
+ private constructor();
40
+ /**
41
+ * Get the singleton instance
42
+ */
43
+ static getInstance(): SessionManager;
44
+ /**
45
+ * Create a new MCP session
46
+ *
47
+ * @param server - The MCP server instance
48
+ * @param authToken - The associated auth token
49
+ * @returns The session ID and transport
50
+ */
51
+ createSession(server: McpServer, authToken: string): Promise<{
52
+ sessionId: string;
53
+ transport: StreamableHTTPServerTransport;
54
+ }>;
55
+ /**
56
+ * Get a session by ID
57
+ */
58
+ getSession(sessionId: string): McpSession | undefined;
59
+ /**
60
+ * Get a session by auth token
61
+ */
62
+ getSessionByToken(authToken: string): McpSession | undefined;
63
+ /**
64
+ * Check if a session exists
65
+ */
66
+ hasSession(sessionId: string): boolean;
67
+ /**
68
+ * Increment active request count
69
+ */
70
+ incrementActiveRequests(sessionId: string): void;
71
+ /**
72
+ * Decrement active request count
73
+ */
74
+ decrementActiveRequests(sessionId: string): void;
75
+ /**
76
+ * Close a session
77
+ */
78
+ closeSession(sessionId: string): Promise<boolean>;
79
+ /**
80
+ * Close all sessions for a given auth token
81
+ */
82
+ closeSessionsByToken(authToken: string): Promise<number>;
83
+ /**
84
+ * Get session statistics
85
+ */
86
+ getStats(): {
87
+ totalSessions: number;
88
+ activeSessions: number;
89
+ staleSessions: number;
90
+ };
91
+ /**
92
+ * Clean up stale sessions
93
+ */
94
+ private cleanupStaleSessions;
95
+ /**
96
+ * Start the cleanup timer
97
+ */
98
+ private startCleanupTimer;
99
+ /**
100
+ * Shutdown the session manager
101
+ */
102
+ shutdown(): Promise<void>;
103
+ }
104
+ export declare function getSessionManager(): SessionManager;
105
+ export { SessionManager };
106
+ //# sourceMappingURL=sessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionManager.d.ts","sourceRoot":"","sources":["../../src/transports/sessionManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAKnG;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,MAAM,EAAE,SAAS,CAAC;IAClB,qCAAqC;IACrC,SAAS,EAAE,6BAA6B,CAAC;IACzC,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,SAAS,EAAE,IAAI,CAAC;IAChB,yCAAyC;IACzC,cAAc,EAAE,IAAI,CAAC;IACrB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,cAAM,cAAc;IAClB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAa;IAE/C,OAAO;IAKP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC;;;;;;OAMG;IACG,aAAa,CACjB,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,6BAA6B,CAAA;KAAE,CAAC;IAiD3E;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IASrD;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAU5D;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAKtC;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQhD;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQhD;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCvD;;OAEG;IACG,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB9D;;OAEG;IACH,QAAQ,IAAI;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB;IAuBD;;OAEG;YACW,oBAAoB;IAyBlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAehC;AAGD,wBAAgB,iBAAiB,IAAI,cAAc,CAElD;AAGD,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,260 @@
1
+ /**
2
+ * MCP Session Manager for HTTP Transport
3
+ *
4
+ * Manages stateful MCP sessions using the SDK's StreamableHTTPServerTransport.
5
+ * Each session maintains its own transport and server instance.
6
+ */
7
+ import { randomUUID } from 'node:crypto';
8
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
9
+ import { createChildLogger } from '../utils/logger.js';
10
+ const log = createChildLogger({ component: 'session-manager' });
11
+ /**
12
+ * Session Manager singleton for managing MCP sessions
13
+ */
14
+ class SessionManager {
15
+ static instance;
16
+ sessions = new Map();
17
+ cleanupTimer = null;
18
+ staleTimeoutMs = 30 * 60 * 1000; // 30 minutes
19
+ cleanupIntervalMs = 60 * 1000; // 1 minute
20
+ constructor() {
21
+ this.startCleanupTimer();
22
+ log.debug('Session manager initialized');
23
+ }
24
+ /**
25
+ * Get the singleton instance
26
+ */
27
+ static getInstance() {
28
+ if (!SessionManager.instance) {
29
+ SessionManager.instance = new SessionManager();
30
+ }
31
+ return SessionManager.instance;
32
+ }
33
+ /**
34
+ * Create a new MCP session
35
+ *
36
+ * @param server - The MCP server instance
37
+ * @param authToken - The associated auth token
38
+ * @returns The session ID and transport
39
+ */
40
+ async createSession(server, authToken) {
41
+ const sessionId = randomUUID();
42
+ const transport = new StreamableHTTPServerTransport({
43
+ sessionIdGenerator: () => sessionId,
44
+ onsessioninitialized: (id) => {
45
+ log.info({ sessionId: id }, 'MCP session initialized');
46
+ },
47
+ });
48
+ // Handle transport close
49
+ transport.onclose = () => {
50
+ log.debug({ sessionId }, 'Transport closed, cleaning up session');
51
+ this.closeSession(sessionId).catch((err) => {
52
+ log.error({ err, sessionId }, 'Error during transport close cleanup');
53
+ });
54
+ };
55
+ // Connect server to transport with cleanup on failure
56
+ try {
57
+ await server.connect(transport);
58
+ }
59
+ catch (err) {
60
+ // Clean up transport if connection fails to prevent resource leak
61
+ transport.onclose = undefined;
62
+ await transport.close().catch(() => { });
63
+ throw err;
64
+ }
65
+ const session = {
66
+ id: sessionId,
67
+ server,
68
+ transport,
69
+ authToken,
70
+ createdAt: new Date(),
71
+ lastAccessedAt: new Date(),
72
+ activeRequests: 0,
73
+ isClosing: false,
74
+ };
75
+ this.sessions.set(sessionId, session);
76
+ log.info({ sessionId, sessionCount: this.sessions.size }, 'MCP session created');
77
+ return { sessionId, transport };
78
+ }
79
+ /**
80
+ * Get a session by ID
81
+ */
82
+ getSession(sessionId) {
83
+ const session = this.sessions.get(sessionId);
84
+ if (session && !session.isClosing) {
85
+ session.lastAccessedAt = new Date();
86
+ return session;
87
+ }
88
+ return undefined;
89
+ }
90
+ /**
91
+ * Get a session by auth token
92
+ */
93
+ getSessionByToken(authToken) {
94
+ for (const session of this.sessions.values()) {
95
+ if (session.authToken === authToken && !session.isClosing) {
96
+ session.lastAccessedAt = new Date();
97
+ return session;
98
+ }
99
+ }
100
+ return undefined;
101
+ }
102
+ /**
103
+ * Check if a session exists
104
+ */
105
+ hasSession(sessionId) {
106
+ const session = this.sessions.get(sessionId);
107
+ return session !== undefined && !session.isClosing;
108
+ }
109
+ /**
110
+ * Increment active request count
111
+ */
112
+ incrementActiveRequests(sessionId) {
113
+ const session = this.sessions.get(sessionId);
114
+ if (session) {
115
+ session.activeRequests++;
116
+ session.lastAccessedAt = new Date();
117
+ }
118
+ }
119
+ /**
120
+ * Decrement active request count
121
+ */
122
+ decrementActiveRequests(sessionId) {
123
+ const session = this.sessions.get(sessionId);
124
+ if (session && session.activeRequests > 0) {
125
+ session.activeRequests--;
126
+ session.lastAccessedAt = new Date();
127
+ }
128
+ }
129
+ /**
130
+ * Close a session
131
+ */
132
+ async closeSession(sessionId) {
133
+ const session = this.sessions.get(sessionId);
134
+ if (!session) {
135
+ return false;
136
+ }
137
+ if (session.isClosing) {
138
+ log.debug({ sessionId }, 'Session already closing');
139
+ return false;
140
+ }
141
+ session.isClosing = true;
142
+ // Close transport and server independently to ensure both are attempted
143
+ try {
144
+ await session.transport.close();
145
+ }
146
+ catch (err) {
147
+ log.error({ err, sessionId }, 'Error closing session transport');
148
+ }
149
+ try {
150
+ await session.server.close();
151
+ }
152
+ catch (err) {
153
+ log.error({ err, sessionId }, 'Error closing session server');
154
+ }
155
+ this.sessions.delete(sessionId);
156
+ log.info({ sessionId, sessionCount: this.sessions.size }, 'MCP session closed');
157
+ return true;
158
+ }
159
+ /**
160
+ * Close all sessions for a given auth token
161
+ */
162
+ async closeSessionsByToken(authToken) {
163
+ const sessionsToClose = [];
164
+ for (const [id, session] of this.sessions.entries()) {
165
+ if (session.authToken === authToken) {
166
+ sessionsToClose.push(id);
167
+ }
168
+ }
169
+ let closedCount = 0;
170
+ for (const sessionId of sessionsToClose) {
171
+ if (await this.closeSession(sessionId)) {
172
+ closedCount++;
173
+ }
174
+ }
175
+ return closedCount;
176
+ }
177
+ /**
178
+ * Get session statistics
179
+ */
180
+ getStats() {
181
+ const now = Date.now();
182
+ let activeSessions = 0;
183
+ let staleSessions = 0;
184
+ for (const session of this.sessions.values()) {
185
+ if (session.isClosing)
186
+ continue;
187
+ const age = now - session.lastAccessedAt.getTime();
188
+ if (age > this.staleTimeoutMs) {
189
+ staleSessions++;
190
+ }
191
+ else {
192
+ activeSessions++;
193
+ }
194
+ }
195
+ return {
196
+ totalSessions: this.sessions.size,
197
+ activeSessions,
198
+ staleSessions,
199
+ };
200
+ }
201
+ /**
202
+ * Clean up stale sessions
203
+ */
204
+ async cleanupStaleSessions() {
205
+ const now = Date.now();
206
+ const staleSessionIds = [];
207
+ for (const [id, session] of this.sessions.entries()) {
208
+ if (session.isClosing)
209
+ continue;
210
+ const age = now - session.lastAccessedAt.getTime();
211
+ if (age > this.staleTimeoutMs && session.activeRequests === 0) {
212
+ staleSessionIds.push(id);
213
+ }
214
+ }
215
+ if (staleSessionIds.length > 0) {
216
+ log.info({ staleCount: staleSessionIds.length }, 'Cleaning up stale sessions');
217
+ for (const sessionId of staleSessionIds) {
218
+ await this.closeSession(sessionId);
219
+ }
220
+ }
221
+ }
222
+ /**
223
+ * Start the cleanup timer
224
+ */
225
+ startCleanupTimer() {
226
+ if (this.cleanupTimer) {
227
+ return;
228
+ }
229
+ this.cleanupTimer = setInterval(() => {
230
+ this.cleanupStaleSessions().catch((err) => {
231
+ log.error({ err }, 'Error during stale session cleanup');
232
+ });
233
+ }, this.cleanupIntervalMs);
234
+ // Don't block process exit
235
+ this.cleanupTimer.unref();
236
+ log.debug({ intervalMs: this.cleanupIntervalMs, staleTimeoutMs: this.staleTimeoutMs }, 'Session cleanup timer started');
237
+ }
238
+ /**
239
+ * Shutdown the session manager
240
+ */
241
+ async shutdown() {
242
+ if (this.cleanupTimer) {
243
+ clearInterval(this.cleanupTimer);
244
+ this.cleanupTimer = null;
245
+ }
246
+ const sessionIds = Array.from(this.sessions.keys());
247
+ log.info({ sessionCount: sessionIds.length }, 'Shutting down session manager');
248
+ for (const sessionId of sessionIds) {
249
+ await this.closeSession(sessionId);
250
+ }
251
+ log.info('Session manager shutdown complete');
252
+ }
253
+ }
254
+ // Export singleton getter
255
+ export function getSessionManager() {
256
+ return SessionManager.getInstance();
257
+ }
258
+ // Export the class type for testing
259
+ export { SessionManager };
260
+ //# sourceMappingURL=sessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionManager.js","sourceRoot":"","sources":["../../src/transports/sessionManager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-server-db2i",
3
- "version": "1.2.1",
3
+ "version": "1.3.1",
4
4
  "description": "MCP server for IBM DB2 for i (DB2i) database queries and metadata inspection",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -9,8 +9,8 @@
9
9
  },
10
10
  "scripts": {
11
11
  "build": "tsc",
12
- "start": "node dist/index.js",
13
- "dev": "tsx src/index.ts",
12
+ "start": "node --env-file=.env dist/index.js",
13
+ "dev": "tsx --env-file=.env src/index.ts",
14
14
  "test": "vitest run",
15
15
  "test:watch": "vitest",
16
16
  "lint": "eslint src tests",
@@ -27,7 +27,9 @@
27
27
  "iseries",
28
28
  "ibm-i",
29
29
  "jt400",
30
- "jdbc"
30
+ "jdbc",
31
+ "http",
32
+ "rest"
31
33
  ],
32
34
  "author": "",
33
35
  "license": "MIT",
@@ -41,6 +43,7 @@
41
43
  "homepage": "https://github.com/Strom-Capital/mcp-server-db2i#readme",
42
44
  "dependencies": {
43
45
  "@modelcontextprotocol/sdk": "^1.25.2",
46
+ "express": "^5.2.1",
44
47
  "node-jt400": "^6.0.1",
45
48
  "node-sql-parser": "^5.4.0",
46
49
  "pino": "^10.2.0",
@@ -49,6 +52,7 @@
49
52
  },
50
53
  "devDependencies": {
51
54
  "@eslint/js": "^9.39.2",
55
+ "@types/express": "^5.0.6",
52
56
  "@types/node": "^25.0.9",
53
57
  "@vitest/coverage-v8": "^4.0.17",
54
58
  "eslint": "^9.39.2",
@@ -59,7 +63,7 @@
59
63
  "vitest": "^4.0.17"
60
64
  },
61
65
  "engines": {
62
- "node": ">=18"
66
+ "node": ">=20.6"
63
67
  },
64
68
  "publishConfig": {
65
69
  "access": "public"