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.
- package/README.md +90 -308
- package/dist/auth/authMiddleware.d.ts +66 -0
- package/dist/auth/authMiddleware.d.ts.map +1 -0
- package/dist/auth/authMiddleware.js +217 -0
- package/dist/auth/authMiddleware.js.map +1 -0
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +10 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/tokenManager.d.ts +114 -0
- package/dist/auth/tokenManager.d.ts.map +1 -0
- package/dist/auth/tokenManager.js +255 -0
- package/dist/auth/tokenManager.js.map +1 -0
- package/dist/auth/types.d.ts +103 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +10 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/config.d.ts +128 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +185 -0
- package/dist/config.js.map +1 -1
- package/dist/db/connection.d.ts +53 -3
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +154 -15
- package/dist/db/connection.js.map +1 -1
- package/dist/db/queries.d.ts +29 -6
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +35 -12
- package/dist/db/queries.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +97 -42
- package/dist/index.js.map +1 -1
- package/dist/openapi.d.ts +49 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +634 -0
- package/dist/openapi.js.map +1 -0
- package/dist/server.d.ts +26 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +68 -22
- package/dist/server.js.map +1 -1
- package/dist/tools/metadata.d.ts +10 -0
- package/dist/tools/metadata.d.ts.map +1 -1
- package/dist/tools/metadata.js +10 -6
- package/dist/tools/metadata.js.map +1 -1
- package/dist/tools/query.d.ts +4 -0
- package/dist/tools/query.d.ts.map +1 -1
- package/dist/tools/query.js +5 -3
- package/dist/tools/query.js.map +1 -1
- package/dist/transports/http.d.ts +26 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +552 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +8 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +8 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/transports/sessionManager.d.ts +106 -0
- package/dist/transports/sessionManager.d.ts.map +1 -0
- package/dist/transports/sessionManager.js +260 -0
- package/dist/transports/sessionManager.js.map +1 -0
- package/package.json +9 -5
package/dist/server.d.ts
CHANGED
|
@@ -3,10 +3,25 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates and configures the MCP server with all tools registered.
|
|
5
5
|
* Extracted from index.ts for testability.
|
|
6
|
+
*
|
|
7
|
+
* Supports two modes:
|
|
8
|
+
* - Stdio mode: Uses global connection pool (no sessionConfig)
|
|
9
|
+
* - HTTP mode: Uses session-specific connection pool (with sessionConfig)
|
|
6
10
|
*/
|
|
7
11
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
12
|
+
import type { DB2iConfig } from './config.js';
|
|
8
13
|
export declare const SERVER_NAME: string;
|
|
9
14
|
export declare const SERVER_VERSION: string;
|
|
15
|
+
/**
|
|
16
|
+
* Session context for HTTP transport
|
|
17
|
+
* Contains the session-specific configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface SessionContext {
|
|
20
|
+
/** Session/token ID for looking up the connection pool */
|
|
21
|
+
sessionId: string;
|
|
22
|
+
/** DB2i configuration for this session */
|
|
23
|
+
config: DB2iConfig;
|
|
24
|
+
}
|
|
10
25
|
/**
|
|
11
26
|
* Standard tool result type
|
|
12
27
|
*/
|
|
@@ -28,12 +43,21 @@ export type McpToolResponse = {
|
|
|
28
43
|
/**
|
|
29
44
|
* Creates a tool handler wrapper that applies rate limiting and standardizes responses.
|
|
30
45
|
* Eliminates boilerplate code across all tool registrations.
|
|
46
|
+
*
|
|
47
|
+
* @param handler - The tool handler function
|
|
48
|
+
* @param errorMessage - Error message to use on failure
|
|
49
|
+
* @param sessionContext - Optional session context for HTTP transport
|
|
31
50
|
*/
|
|
32
|
-
export declare function withToolHandler<TArgs, TResult extends ToolResult>(handler: (args: TArgs) => Promise<TResult>, errorMessage: string): (args: TArgs) => Promise<McpToolResponse>;
|
|
51
|
+
export declare function withToolHandler<TArgs, TResult extends ToolResult>(handler: (args: TArgs, sessionId?: string) => Promise<TResult>, errorMessage: string, sessionContext?: SessionContext): (args: TArgs) => Promise<McpToolResponse>;
|
|
33
52
|
/**
|
|
34
53
|
* Create and configure the MCP server with all tools registered.
|
|
35
54
|
*
|
|
55
|
+
* @param sessionConfig - Optional session config for HTTP transport.
|
|
56
|
+
* When provided, tools use session-specific connection pool.
|
|
57
|
+
* When omitted, tools use global connection pool (stdio mode).
|
|
58
|
+
* @param sessionId - Optional session ID (auth token) for HTTP transport.
|
|
59
|
+
* Used to look up the session-specific connection pool.
|
|
36
60
|
* @returns Configured McpServer instance ready to connect to a transport
|
|
37
61
|
*/
|
|
38
|
-
export declare function createServer(): McpServer;
|
|
62
|
+
export declare function createServer(sessionConfig?: DB2iConfig, sessionId?: string): McpServer;
|
|
39
63
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAgB9C,eAAO,MAAM,WAAW,QAAmB,CAAC;AAC5C,eAAO,MAAM,cAAc,QAAsB,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,SAAS,UAAU,EAC/D,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAC9D,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,cAAc,GAC9B,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,eAAe,CAAC,CA4B3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAmLtF"}
|
package/dist/server.js
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Creates and configures the MCP server with all tools registered.
|
|
5
5
|
* Extracted from index.ts for testability.
|
|
6
|
+
*
|
|
7
|
+
* Supports two modes:
|
|
8
|
+
* - Stdio mode: Uses global connection pool (no sessionConfig)
|
|
9
|
+
* - HTTP mode: Uses session-specific connection pool (with sessionConfig)
|
|
6
10
|
*/
|
|
7
11
|
import { createRequire } from 'module';
|
|
8
12
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
@@ -18,8 +22,12 @@ export const SERVER_VERSION = packageJson.version;
|
|
|
18
22
|
/**
|
|
19
23
|
* Creates a tool handler wrapper that applies rate limiting and standardizes responses.
|
|
20
24
|
* Eliminates boilerplate code across all tool registrations.
|
|
25
|
+
*
|
|
26
|
+
* @param handler - The tool handler function
|
|
27
|
+
* @param errorMessage - Error message to use on failure
|
|
28
|
+
* @param sessionContext - Optional session context for HTTP transport
|
|
21
29
|
*/
|
|
22
|
-
export function withToolHandler(handler, errorMessage) {
|
|
30
|
+
export function withToolHandler(handler, errorMessage, sessionContext) {
|
|
23
31
|
return async (args) => {
|
|
24
32
|
// Check rate limit
|
|
25
33
|
const rateLimiter = getRateLimiter();
|
|
@@ -31,8 +39,8 @@ export function withToolHandler(handler, errorMessage) {
|
|
|
31
39
|
isError: true,
|
|
32
40
|
};
|
|
33
41
|
}
|
|
34
|
-
// Execute the tool
|
|
35
|
-
const result = await handler(args);
|
|
42
|
+
// Execute the tool with optional sessionId
|
|
43
|
+
const result = await handler(args, sessionContext?.sessionId);
|
|
36
44
|
if (!result.success) {
|
|
37
45
|
return {
|
|
38
46
|
content: [{ type: 'text', text: result.error ?? errorMessage }],
|
|
@@ -47,13 +55,30 @@ export function withToolHandler(handler, errorMessage) {
|
|
|
47
55
|
/**
|
|
48
56
|
* Create and configure the MCP server with all tools registered.
|
|
49
57
|
*
|
|
58
|
+
* @param sessionConfig - Optional session config for HTTP transport.
|
|
59
|
+
* When provided, tools use session-specific connection pool.
|
|
60
|
+
* When omitted, tools use global connection pool (stdio mode).
|
|
61
|
+
* @param sessionId - Optional session ID (auth token) for HTTP transport.
|
|
62
|
+
* Used to look up the session-specific connection pool.
|
|
50
63
|
* @returns Configured McpServer instance ready to connect to a transport
|
|
51
64
|
*/
|
|
52
|
-
export function createServer() {
|
|
65
|
+
export function createServer(sessionConfig, sessionId) {
|
|
53
66
|
const server = new McpServer({
|
|
54
67
|
name: SERVER_NAME,
|
|
55
68
|
version: SERVER_VERSION,
|
|
56
69
|
});
|
|
70
|
+
// Create session context if sessionConfig provided
|
|
71
|
+
const sessionContext = sessionConfig && sessionId ? {
|
|
72
|
+
sessionId,
|
|
73
|
+
config: sessionConfig,
|
|
74
|
+
} : undefined;
|
|
75
|
+
// Helper to get effective default schema
|
|
76
|
+
const getDefaultSchema = () => {
|
|
77
|
+
if (sessionConfig?.schema) {
|
|
78
|
+
return sessionConfig.schema;
|
|
79
|
+
}
|
|
80
|
+
return process.env.DB2I_SCHEMA || undefined;
|
|
81
|
+
};
|
|
57
82
|
// Register execute_query tool
|
|
58
83
|
server.registerTool('execute_query', {
|
|
59
84
|
title: 'Execute SQL Query',
|
|
@@ -64,11 +89,12 @@ export function createServer() {
|
|
|
64
89
|
params: z.array(z.unknown()).optional().describe('Query parameters for prepared statement'),
|
|
65
90
|
limit: z.number().optional().default(1000).describe('Maximum number of rows to return (default: 1000, max: configured via QUERY_MAX_LIMIT)'),
|
|
66
91
|
},
|
|
67
|
-
}, withToolHandler((args) => executeQueryTool({
|
|
92
|
+
}, withToolHandler((args, sessionId) => executeQueryTool({
|
|
68
93
|
sql: args.sql,
|
|
69
94
|
params: args.params,
|
|
70
95
|
limit: args.limit,
|
|
71
|
-
|
|
96
|
+
sessionId,
|
|
97
|
+
}), 'Query failed', sessionContext));
|
|
72
98
|
// Register list_schemas tool
|
|
73
99
|
server.registerTool('list_schemas', {
|
|
74
100
|
title: 'List Schemas',
|
|
@@ -77,57 +103,77 @@ export function createServer() {
|
|
|
77
103
|
inputSchema: {
|
|
78
104
|
filter: z.string().optional().describe('Filter pattern for schema names. Use * as wildcard. Example: "QSYS*" matches schemas starting with QSYS'),
|
|
79
105
|
},
|
|
80
|
-
}, withToolHandler((args) => listSchemasTool({ filter: args.filter }), 'Failed to list schemas'));
|
|
106
|
+
}, withToolHandler((args, sessionId) => listSchemasTool({ filter: args.filter, sessionId }), 'Failed to list schemas', sessionContext));
|
|
81
107
|
// Register list_tables tool
|
|
82
108
|
server.registerTool('list_tables', {
|
|
83
109
|
title: 'List Tables',
|
|
84
|
-
description:
|
|
110
|
+
description: `List all tables in a schema (library). ${sessionConfig ? 'Uses session default schema if not provided.' : 'Uses DB2I_SCHEMA env var if schema not provided.'} Optionally filter by name pattern using * as wildcard.`,
|
|
85
111
|
annotations: { readOnlyHint: true },
|
|
86
112
|
inputSchema: {
|
|
87
|
-
schema: z.string().optional().describe(
|
|
113
|
+
schema: z.string().optional().describe(`Schema (library) name to list tables from. ${sessionConfig ? 'Uses session default schema if not provided.' : 'Uses DB2I_SCHEMA env var if not provided.'}`),
|
|
88
114
|
filter: z.string().optional().describe('Filter pattern for table names. Use * as wildcard. Example: "CUST*" matches tables starting with CUST'),
|
|
89
115
|
},
|
|
90
|
-
}, withToolHandler((args) => listTablesTool({
|
|
116
|
+
}, withToolHandler((args, sessionId) => listTablesTool({
|
|
117
|
+
schema: args.schema ?? getDefaultSchema(),
|
|
118
|
+
filter: args.filter,
|
|
119
|
+
sessionId,
|
|
120
|
+
}), 'Failed to list tables', sessionContext));
|
|
91
121
|
// Register describe_table tool
|
|
92
122
|
server.registerTool('describe_table', {
|
|
93
123
|
title: 'Describe Table',
|
|
94
|
-
description:
|
|
124
|
+
description: `Get detailed column information for a specific table including data types, lengths, nullability, defaults, and CCSID. ${sessionConfig ? 'Uses session default schema if not provided.' : 'Uses DB2I_SCHEMA env var if schema not provided.'}`,
|
|
95
125
|
annotations: { readOnlyHint: true },
|
|
96
126
|
inputSchema: {
|
|
97
|
-
schema: z.string().optional().describe(
|
|
127
|
+
schema: z.string().optional().describe(`Schema (library) name containing the table. ${sessionConfig ? 'Uses session default schema if not provided.' : 'Uses DB2I_SCHEMA env var if not provided.'}`),
|
|
98
128
|
table: z.string().describe('Table name to describe'),
|
|
99
129
|
},
|
|
100
|
-
}, withToolHandler((args) => describeTableTool({
|
|
130
|
+
}, withToolHandler((args, sessionId) => describeTableTool({
|
|
131
|
+
schema: args.schema ?? getDefaultSchema(),
|
|
132
|
+
table: args.table,
|
|
133
|
+
sessionId,
|
|
134
|
+
}), 'Failed to describe table', sessionContext));
|
|
101
135
|
// Register list_views tool
|
|
102
136
|
server.registerTool('list_views', {
|
|
103
137
|
title: 'List Views',
|
|
104
|
-
description:
|
|
138
|
+
description: `List all views in a schema (library). ${sessionConfig ? 'Uses session default schema if not provided.' : 'Uses DB2I_SCHEMA env var if schema not provided.'} Optionally filter by name pattern using * as wildcard.`,
|
|
105
139
|
annotations: { readOnlyHint: true },
|
|
106
140
|
inputSchema: {
|
|
107
|
-
schema: z.string().optional().describe(
|
|
141
|
+
schema: z.string().optional().describe(`Schema (library) name to list views from. ${sessionConfig ? 'Uses session default schema if not provided.' : 'Uses DB2I_SCHEMA env var if not provided.'}`),
|
|
108
142
|
filter: z.string().optional().describe('Filter pattern for view names. Use * as wildcard.'),
|
|
109
143
|
},
|
|
110
|
-
}, withToolHandler((args) => listViewsTool({
|
|
144
|
+
}, withToolHandler((args, sessionId) => listViewsTool({
|
|
145
|
+
schema: args.schema ?? getDefaultSchema(),
|
|
146
|
+
filter: args.filter,
|
|
147
|
+
sessionId,
|
|
148
|
+
}), 'Failed to list views', sessionContext));
|
|
111
149
|
// Register list_indexes tool
|
|
112
150
|
server.registerTool('list_indexes', {
|
|
113
151
|
title: 'List Indexes',
|
|
114
|
-
description:
|
|
152
|
+
description: `List all indexes for a specific table including uniqueness and column information. ${sessionConfig ? 'Uses session default schema if not provided.' : 'Uses DB2I_SCHEMA env var if schema not provided.'}`,
|
|
115
153
|
annotations: { readOnlyHint: true },
|
|
116
154
|
inputSchema: {
|
|
117
|
-
schema: z.string().optional().describe(
|
|
155
|
+
schema: z.string().optional().describe(`Schema (library) name containing the table. ${sessionConfig ? 'Uses session default schema if not provided.' : 'Uses DB2I_SCHEMA env var if not provided.'}`),
|
|
118
156
|
table: z.string().describe('Table name to list indexes for'),
|
|
119
157
|
},
|
|
120
|
-
}, withToolHandler((args) => listIndexesTool({
|
|
158
|
+
}, withToolHandler((args, sessionId) => listIndexesTool({
|
|
159
|
+
schema: args.schema ?? getDefaultSchema(),
|
|
160
|
+
table: args.table,
|
|
161
|
+
sessionId,
|
|
162
|
+
}), 'Failed to list indexes', sessionContext));
|
|
121
163
|
// Register get_table_constraints tool
|
|
122
164
|
server.registerTool('get_table_constraints', {
|
|
123
165
|
title: 'Get Table Constraints',
|
|
124
|
-
description:
|
|
166
|
+
description: `Get all constraints (primary keys, foreign keys, unique constraints) for a specific table. ${sessionConfig ? 'Uses session default schema if not provided.' : 'Uses DB2I_SCHEMA env var if schema not provided.'}`,
|
|
125
167
|
annotations: { readOnlyHint: true },
|
|
126
168
|
inputSchema: {
|
|
127
|
-
schema: z.string().optional().describe(
|
|
169
|
+
schema: z.string().optional().describe(`Schema (library) name containing the table. ${sessionConfig ? 'Uses session default schema if not provided.' : 'Uses DB2I_SCHEMA env var if not provided.'}`),
|
|
128
170
|
table: z.string().describe('Table name to get constraints for'),
|
|
129
171
|
},
|
|
130
|
-
}, withToolHandler((args) => getTableConstraintsTool({
|
|
172
|
+
}, withToolHandler((args, sessionId) => getTableConstraintsTool({
|
|
173
|
+
schema: args.schema ?? getDefaultSchema(),
|
|
174
|
+
table: args.table,
|
|
175
|
+
sessionId,
|
|
176
|
+
}), 'Failed to get constraints', sessionContext));
|
|
131
177
|
return server;
|
|
132
178
|
}
|
|
133
179
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/metadata.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Metadata inspection tools for IBM DB2i MCP Server
|
|
3
|
+
*
|
|
4
|
+
* All tools support optional sessionId for HTTP transport.
|
|
5
|
+
* When sessionId is provided, uses session-specific connection pool.
|
|
6
|
+
* When omitted, uses global connection pool (stdio mode).
|
|
3
7
|
*/
|
|
4
8
|
/**
|
|
5
9
|
* Standard success/error result type for metadata tools
|
|
@@ -14,6 +18,7 @@ type ToolResult<T> = {
|
|
|
14
18
|
};
|
|
15
19
|
export declare function listSchemasTool(input: {
|
|
16
20
|
filter?: string;
|
|
21
|
+
sessionId?: string;
|
|
17
22
|
}): Promise<ToolResult<{
|
|
18
23
|
schema_name: string;
|
|
19
24
|
schema_text: string | null;
|
|
@@ -21,6 +26,7 @@ export declare function listSchemasTool(input: {
|
|
|
21
26
|
export declare function listTablesTool(input: {
|
|
22
27
|
schema?: string;
|
|
23
28
|
filter?: string;
|
|
29
|
+
sessionId?: string;
|
|
24
30
|
}): Promise<ToolResult<{
|
|
25
31
|
table_name: string;
|
|
26
32
|
table_type: string;
|
|
@@ -29,6 +35,7 @@ export declare function listTablesTool(input: {
|
|
|
29
35
|
export declare function describeTableTool(input: {
|
|
30
36
|
schema?: string;
|
|
31
37
|
table: string;
|
|
38
|
+
sessionId?: string;
|
|
32
39
|
}): Promise<ToolResult<{
|
|
33
40
|
column_name: string;
|
|
34
41
|
ordinal_position: number;
|
|
@@ -44,6 +51,7 @@ export declare function describeTableTool(input: {
|
|
|
44
51
|
export declare function listViewsTool(input: {
|
|
45
52
|
schema?: string;
|
|
46
53
|
filter?: string;
|
|
54
|
+
sessionId?: string;
|
|
47
55
|
}): Promise<ToolResult<{
|
|
48
56
|
view_name: string;
|
|
49
57
|
view_text: string | null;
|
|
@@ -51,6 +59,7 @@ export declare function listViewsTool(input: {
|
|
|
51
59
|
export declare function listIndexesTool(input: {
|
|
52
60
|
schema?: string;
|
|
53
61
|
table: string;
|
|
62
|
+
sessionId?: string;
|
|
54
63
|
}): Promise<ToolResult<{
|
|
55
64
|
index_name: string;
|
|
56
65
|
index_schema: string;
|
|
@@ -60,6 +69,7 @@ export declare function listIndexesTool(input: {
|
|
|
60
69
|
export declare function getTableConstraintsTool(input: {
|
|
61
70
|
schema?: string;
|
|
62
71
|
table: string;
|
|
72
|
+
sessionId?: string;
|
|
63
73
|
}): Promise<ToolResult<{
|
|
64
74
|
constraint_name: string;
|
|
65
75
|
constraint_type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/tools/metadata.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/tools/metadata.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/metadata.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Metadata inspection tools for IBM DB2i MCP Server
|
|
3
|
+
*
|
|
4
|
+
* All tools support optional sessionId for HTTP transport.
|
|
5
|
+
* When sessionId is provided, uses session-specific connection pool.
|
|
6
|
+
* When omitted, uses global connection pool (stdio mode).
|
|
3
7
|
*/
|
|
4
8
|
import { listSchemas, listTables, describeTable, listViews, listIndexes, getTableConstraints, } from '../db/queries.js';
|
|
5
9
|
import { loadConfig, getDefaultSchema } from '../config.js';
|
|
@@ -34,7 +38,7 @@ function resolveSchema(inputSchema) {
|
|
|
34
38
|
// List Schemas Tool
|
|
35
39
|
// ============================================================================
|
|
36
40
|
export function listSchemasTool(input) {
|
|
37
|
-
return withErrorHandling(() => listSchemas(input.filter));
|
|
41
|
+
return withErrorHandling(() => listSchemas(input.filter, input.sessionId));
|
|
38
42
|
}
|
|
39
43
|
// ============================================================================
|
|
40
44
|
// List Tables Tool
|
|
@@ -42,7 +46,7 @@ export function listSchemasTool(input) {
|
|
|
42
46
|
export function listTablesTool(input) {
|
|
43
47
|
return withErrorHandling(() => {
|
|
44
48
|
const schema = resolveSchema(input.schema);
|
|
45
|
-
return listTables(schema, input.filter);
|
|
49
|
+
return listTables(schema, input.filter, input.sessionId);
|
|
46
50
|
});
|
|
47
51
|
}
|
|
48
52
|
// ============================================================================
|
|
@@ -51,7 +55,7 @@ export function listTablesTool(input) {
|
|
|
51
55
|
export function describeTableTool(input) {
|
|
52
56
|
return withErrorHandling(() => {
|
|
53
57
|
const schema = resolveSchema(input.schema);
|
|
54
|
-
return describeTable(schema, input.table);
|
|
58
|
+
return describeTable(schema, input.table, input.sessionId);
|
|
55
59
|
});
|
|
56
60
|
}
|
|
57
61
|
// ============================================================================
|
|
@@ -60,7 +64,7 @@ export function describeTableTool(input) {
|
|
|
60
64
|
export function listViewsTool(input) {
|
|
61
65
|
return withErrorHandling(() => {
|
|
62
66
|
const schema = resolveSchema(input.schema);
|
|
63
|
-
return listViews(schema, input.filter);
|
|
67
|
+
return listViews(schema, input.filter, input.sessionId);
|
|
64
68
|
});
|
|
65
69
|
}
|
|
66
70
|
// ============================================================================
|
|
@@ -69,7 +73,7 @@ export function listViewsTool(input) {
|
|
|
69
73
|
export function listIndexesTool(input) {
|
|
70
74
|
return withErrorHandling(() => {
|
|
71
75
|
const schema = resolveSchema(input.schema);
|
|
72
|
-
return listIndexes(schema, input.table);
|
|
76
|
+
return listIndexes(schema, input.table, input.sessionId);
|
|
73
77
|
});
|
|
74
78
|
}
|
|
75
79
|
// ============================================================================
|
|
@@ -78,7 +82,7 @@ export function listIndexesTool(input) {
|
|
|
78
82
|
export function getTableConstraintsTool(input) {
|
|
79
83
|
return withErrorHandling(() => {
|
|
80
84
|
const schema = resolveSchema(input.schema);
|
|
81
|
-
return getTableConstraints(schema, input.table);
|
|
85
|
+
return getTableConstraints(schema, input.table, input.sessionId);
|
|
82
86
|
});
|
|
83
87
|
}
|
|
84
88
|
//# sourceMappingURL=metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/tools/metadata.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/tools/metadata.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/query.d.ts
CHANGED
|
@@ -8,9 +8,13 @@ export interface ExecuteQueryInput {
|
|
|
8
8
|
sql: string;
|
|
9
9
|
params?: unknown[];
|
|
10
10
|
limit?: number;
|
|
11
|
+
/** Optional session ID for HTTP transport (uses session-specific pool) */
|
|
12
|
+
sessionId?: string;
|
|
11
13
|
}
|
|
12
14
|
/**
|
|
13
15
|
* Execute a read-only SQL query
|
|
16
|
+
*
|
|
17
|
+
* @param input - Query input including SQL, params, limit, and optional sessionId
|
|
14
18
|
*/
|
|
15
19
|
export declare function executeQueryTool(input: ExecuteQueryInput): Promise<{
|
|
16
20
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IACxE,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC,CAkDD"}
|
package/dist/tools/query.js
CHANGED
|
@@ -8,12 +8,14 @@ import { applyQueryLimit, getQueryLimitConfig } from '../config.js';
|
|
|
8
8
|
const log = createChildLogger({ component: 'query-tool' });
|
|
9
9
|
/**
|
|
10
10
|
* Execute a read-only SQL query
|
|
11
|
+
*
|
|
12
|
+
* @param input - Query input including SQL, params, limit, and optional sessionId
|
|
11
13
|
*/
|
|
12
14
|
export async function executeQueryTool(input) {
|
|
13
|
-
const { sql, params = [] } = input;
|
|
15
|
+
const { sql, params = [], sessionId } = input;
|
|
14
16
|
const queryConfig = getQueryLimitConfig();
|
|
15
17
|
const effectiveLimit = applyQueryLimit(input.limit, queryConfig);
|
|
16
|
-
log.debug({ sqlPreview: sql.substring(0, 100), requestedLimit: input.limit, effectiveLimit }, 'Received query request');
|
|
18
|
+
log.debug({ sqlPreview: sql.substring(0, 100), requestedLimit: input.limit, effectiveLimit, sessionId: sessionId?.substring(0, 8) }, 'Received query request');
|
|
17
19
|
// Validate that query is read-only using enhanced security validator
|
|
18
20
|
const validationResult = validateQuery(sql);
|
|
19
21
|
if (!validationResult.isValid) {
|
|
@@ -35,7 +37,7 @@ export async function executeQueryTool(input) {
|
|
|
35
37
|
}
|
|
36
38
|
limitedSql = `${limitedSql} FETCH FIRST ${effectiveLimit} ROWS ONLY`;
|
|
37
39
|
}
|
|
38
|
-
const result = await executeQuery(limitedSql, params);
|
|
40
|
+
const result = await executeQuery(limitedSql, params, sessionId);
|
|
39
41
|
log.info({ rowCount: result.rows.length, effectiveLimit }, 'Query executed successfully');
|
|
40
42
|
return {
|
|
41
43
|
success: true,
|
package/dist/tools/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,GAAG,GAAG,iBAAiB,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Transport for MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Express-based HTTP server with:
|
|
5
|
+
* - OAuth-style token authentication (/auth)
|
|
6
|
+
* - MCP protocol endpoints (/mcp)
|
|
7
|
+
* - Health check endpoint (/health)
|
|
8
|
+
* - Stateful and stateless session modes
|
|
9
|
+
* - Optional TLS support
|
|
10
|
+
*/
|
|
11
|
+
import { type Express } from 'express';
|
|
12
|
+
import https from 'node:https';
|
|
13
|
+
import http from 'node:http';
|
|
14
|
+
/**
|
|
15
|
+
* Create the Express application
|
|
16
|
+
*/
|
|
17
|
+
export declare function createHttpApp(): Express;
|
|
18
|
+
/**
|
|
19
|
+
* Start the HTTP server
|
|
20
|
+
*/
|
|
21
|
+
export declare function startHttpServer(): Promise<http.Server | https.Server>;
|
|
22
|
+
/**
|
|
23
|
+
* Gracefully shutdown the HTTP server
|
|
24
|
+
*/
|
|
25
|
+
export declare function shutdownHttpServer(server: http.Server | https.Server): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAC;AAC7E,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,IAAI,MAAM,WAAW,CAAC;AAsF7B;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CA+avC;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAqE3E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B1F"}
|