@conte777/db-view-mcp 1.1.0 → 1.2.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/config.example.json +15 -3
- package/dist/config/types.d.ts +33 -15
- package/dist/config/types.js +26 -14
- package/dist/config/types.js.map +1 -1
- package/dist/connectors/clickhouse.js +10 -0
- package/dist/connectors/clickhouse.js.map +1 -1
- package/dist/connectors/instrumented.js.map +1 -1
- package/dist/connectors/manager.d.ts +5 -0
- package/dist/connectors/manager.js +29 -6
- package/dist/connectors/manager.js.map +1 -1
- package/dist/connectors/postgresql.js +29 -11
- package/dist/connectors/postgresql.js.map +1 -1
- package/dist/index.js +68 -16
- package/dist/index.js.map +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/readonly/performance.js +1 -3
- package/dist/tools/readonly/performance.js.map +1 -1
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.js.map +1 -1
- package/dist/transport/http.d.ts +1 -0
- package/dist/transport/http.js +3 -2
- package/dist/transport/http.js.map +1 -1
- package/dist/utils/sql-validator.js +13 -4
- package/dist/utils/sql-validator.js.map +1 -1
- package/package.json +11 -2
package/config.example.json
CHANGED
|
@@ -24,18 +24,30 @@
|
|
|
24
24
|
"database": "myapp",
|
|
25
25
|
"user": "admin",
|
|
26
26
|
"password": "secret123",
|
|
27
|
-
"
|
|
27
|
+
"ssl": true,
|
|
28
|
+
"sslCa": "/path/to/ca-certificate.pem",
|
|
29
|
+
"description": "Main PostgreSQL (host-based)",
|
|
28
30
|
"lazyConnection": true,
|
|
29
31
|
"maxRows": 200
|
|
30
32
|
},
|
|
33
|
+
{
|
|
34
|
+
"id": "main_pg_connstr",
|
|
35
|
+
"type": "postgresql",
|
|
36
|
+
"connectionString": "postgresql://admin:secret123@localhost:5432/myapp?sslmode=require",
|
|
37
|
+
"description": "Main PostgreSQL (connection string)"
|
|
38
|
+
},
|
|
31
39
|
{
|
|
32
40
|
"id": "analytics",
|
|
33
41
|
"type": "clickhouse",
|
|
34
|
-
"url": "
|
|
42
|
+
"url": "https://localhost:8443",
|
|
35
43
|
"database": "analytics",
|
|
36
44
|
"user": "default",
|
|
37
45
|
"password": "",
|
|
38
|
-
"
|
|
46
|
+
"tls": {
|
|
47
|
+
"ca": "/path/to/ca-certificate.pem",
|
|
48
|
+
"rejectUnauthorized": true
|
|
49
|
+
},
|
|
50
|
+
"description": "ClickHouse analytics with TLS"
|
|
39
51
|
}
|
|
40
52
|
]
|
|
41
53
|
}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
declare const
|
|
2
|
+
declare const PostgresConfigBaseSchema: z.ZodObject<{
|
|
3
3
|
id: z.ZodString;
|
|
4
4
|
type: z.ZodLiteral<"postgresql">;
|
|
5
|
-
|
|
5
|
+
connectionString: z.ZodOptional<z.ZodString>;
|
|
6
|
+
host: z.ZodOptional<z.ZodString>;
|
|
6
7
|
port: z.ZodDefault<z.ZodNumber>;
|
|
7
|
-
database: z.ZodString
|
|
8
|
-
user: z.ZodString
|
|
8
|
+
database: z.ZodOptional<z.ZodString>;
|
|
9
|
+
user: z.ZodOptional<z.ZodString>;
|
|
9
10
|
password: z.ZodDefault<z.ZodString>;
|
|
10
11
|
ssl: z.ZodOptional<z.ZodBoolean>;
|
|
11
12
|
sslRejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
|
|
13
|
+
sslCa: z.ZodOptional<z.ZodString>;
|
|
12
14
|
description: z.ZodOptional<z.ZodString>;
|
|
13
15
|
lazyConnection: z.ZodOptional<z.ZodBoolean>;
|
|
14
16
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
@@ -21,21 +23,27 @@ declare const ClickHouseConfigSchema: z.ZodObject<{
|
|
|
21
23
|
database: z.ZodString;
|
|
22
24
|
user: z.ZodDefault<z.ZodString>;
|
|
23
25
|
password: z.ZodDefault<z.ZodString>;
|
|
26
|
+
tls: z.ZodOptional<z.ZodObject<{
|
|
27
|
+
ca: z.ZodOptional<z.ZodString>;
|
|
28
|
+
rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
|
|
29
|
+
}, z.core.$strip>>;
|
|
24
30
|
description: z.ZodOptional<z.ZodString>;
|
|
25
31
|
lazyConnection: z.ZodOptional<z.ZodBoolean>;
|
|
26
32
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
27
33
|
queryTimeout: z.ZodOptional<z.ZodNumber>;
|
|
28
34
|
}, z.core.$strip>;
|
|
29
|
-
declare const DatabaseConfigSchema: z.
|
|
35
|
+
declare const DatabaseConfigSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
30
36
|
id: z.ZodString;
|
|
31
37
|
type: z.ZodLiteral<"postgresql">;
|
|
32
|
-
|
|
38
|
+
connectionString: z.ZodOptional<z.ZodString>;
|
|
39
|
+
host: z.ZodOptional<z.ZodString>;
|
|
33
40
|
port: z.ZodDefault<z.ZodNumber>;
|
|
34
|
-
database: z.ZodString
|
|
35
|
-
user: z.ZodString
|
|
41
|
+
database: z.ZodOptional<z.ZodString>;
|
|
42
|
+
user: z.ZodOptional<z.ZodString>;
|
|
36
43
|
password: z.ZodDefault<z.ZodString>;
|
|
37
44
|
ssl: z.ZodOptional<z.ZodBoolean>;
|
|
38
45
|
sslRejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
|
|
46
|
+
sslCa: z.ZodOptional<z.ZodString>;
|
|
39
47
|
description: z.ZodOptional<z.ZodString>;
|
|
40
48
|
lazyConnection: z.ZodOptional<z.ZodBoolean>;
|
|
41
49
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
@@ -47,11 +55,15 @@ declare const DatabaseConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
47
55
|
database: z.ZodString;
|
|
48
56
|
user: z.ZodDefault<z.ZodString>;
|
|
49
57
|
password: z.ZodDefault<z.ZodString>;
|
|
58
|
+
tls: z.ZodOptional<z.ZodObject<{
|
|
59
|
+
ca: z.ZodOptional<z.ZodString>;
|
|
60
|
+
rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
|
|
61
|
+
}, z.core.$strip>>;
|
|
50
62
|
description: z.ZodOptional<z.ZodString>;
|
|
51
63
|
lazyConnection: z.ZodOptional<z.ZodBoolean>;
|
|
52
64
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
53
65
|
queryTimeout: z.ZodOptional<z.ZodNumber>;
|
|
54
|
-
}, z.core.$strip>]
|
|
66
|
+
}, z.core.$strip>]>;
|
|
55
67
|
declare const DefaultsSchema: z.ZodObject<{
|
|
56
68
|
maxRows: z.ZodDefault<z.ZodNumber>;
|
|
57
69
|
lazyConnection: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -126,16 +138,18 @@ export declare const AppConfigSchema: z.ZodObject<{
|
|
|
126
138
|
queryTimeout: number;
|
|
127
139
|
logLevel: "debug" | "info" | "warn" | "error";
|
|
128
140
|
} | undefined>>;
|
|
129
|
-
databases: z.ZodArray<z.
|
|
141
|
+
databases: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
130
142
|
id: z.ZodString;
|
|
131
143
|
type: z.ZodLiteral<"postgresql">;
|
|
132
|
-
|
|
144
|
+
connectionString: z.ZodOptional<z.ZodString>;
|
|
145
|
+
host: z.ZodOptional<z.ZodString>;
|
|
133
146
|
port: z.ZodDefault<z.ZodNumber>;
|
|
134
|
-
database: z.ZodString
|
|
135
|
-
user: z.ZodString
|
|
147
|
+
database: z.ZodOptional<z.ZodString>;
|
|
148
|
+
user: z.ZodOptional<z.ZodString>;
|
|
136
149
|
password: z.ZodDefault<z.ZodString>;
|
|
137
150
|
ssl: z.ZodOptional<z.ZodBoolean>;
|
|
138
151
|
sslRejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
|
|
152
|
+
sslCa: z.ZodOptional<z.ZodString>;
|
|
139
153
|
description: z.ZodOptional<z.ZodString>;
|
|
140
154
|
lazyConnection: z.ZodOptional<z.ZodBoolean>;
|
|
141
155
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
@@ -147,13 +161,17 @@ export declare const AppConfigSchema: z.ZodObject<{
|
|
|
147
161
|
database: z.ZodString;
|
|
148
162
|
user: z.ZodDefault<z.ZodString>;
|
|
149
163
|
password: z.ZodDefault<z.ZodString>;
|
|
164
|
+
tls: z.ZodOptional<z.ZodObject<{
|
|
165
|
+
ca: z.ZodOptional<z.ZodString>;
|
|
166
|
+
rejectUnauthorized: z.ZodDefault<z.ZodBoolean>;
|
|
167
|
+
}, z.core.$strip>>;
|
|
150
168
|
description: z.ZodOptional<z.ZodString>;
|
|
151
169
|
lazyConnection: z.ZodOptional<z.ZodBoolean>;
|
|
152
170
|
maxRows: z.ZodOptional<z.ZodNumber>;
|
|
153
171
|
queryTimeout: z.ZodOptional<z.ZodNumber>;
|
|
154
|
-
}, z.core.$strip>]
|
|
172
|
+
}, z.core.$strip>]>>;
|
|
155
173
|
}, z.core.$strip>;
|
|
156
|
-
export type PostgresConfig = z.infer<typeof
|
|
174
|
+
export type PostgresConfig = z.infer<typeof PostgresConfigBaseSchema>;
|
|
157
175
|
export type ClickHouseConfig = z.infer<typeof ClickHouseConfigSchema>;
|
|
158
176
|
export type DatabaseConfig = z.infer<typeof DatabaseConfigSchema>;
|
|
159
177
|
export type Defaults = z.infer<typeof DefaultsSchema>;
|
package/dist/config/types.js
CHANGED
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
const
|
|
2
|
+
const PostgresConfigBaseSchema = z.object({
|
|
3
3
|
id: z.string(),
|
|
4
4
|
type: z.literal("postgresql"),
|
|
5
|
-
|
|
5
|
+
connectionString: z.string().optional(),
|
|
6
|
+
host: z.string().optional(),
|
|
6
7
|
port: z.number().default(5432),
|
|
7
|
-
database: z.string(),
|
|
8
|
-
user: z.string(),
|
|
8
|
+
database: z.string().optional(),
|
|
9
|
+
user: z.string().optional(),
|
|
9
10
|
password: z.string().default(""),
|
|
10
11
|
ssl: z.boolean().optional(),
|
|
11
12
|
sslRejectUnauthorized: z.boolean().default(true),
|
|
13
|
+
sslCa: z.string().optional(),
|
|
12
14
|
description: z.string().optional(),
|
|
13
15
|
lazyConnection: z.boolean().optional(),
|
|
14
16
|
maxRows: z.number().optional(),
|
|
15
17
|
queryTimeout: z.number().optional(),
|
|
16
18
|
});
|
|
19
|
+
const PostgresConfigSchema = PostgresConfigBaseSchema.superRefine((data, ctx) => {
|
|
20
|
+
if (!data.connectionString && (!data.host || !data.database || !data.user)) {
|
|
21
|
+
ctx.addIssue({
|
|
22
|
+
code: "custom",
|
|
23
|
+
message: "Either 'connectionString' or 'host' + 'database' + 'user' must be provided",
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
});
|
|
17
27
|
const ClickHouseConfigSchema = z.object({
|
|
18
28
|
id: z.string(),
|
|
19
29
|
type: z.literal("clickhouse"),
|
|
@@ -21,15 +31,18 @@ const ClickHouseConfigSchema = z.object({
|
|
|
21
31
|
database: z.string(),
|
|
22
32
|
user: z.string().default("default"),
|
|
23
33
|
password: z.string().default(""),
|
|
34
|
+
tls: z
|
|
35
|
+
.object({
|
|
36
|
+
ca: z.string().optional(),
|
|
37
|
+
rejectUnauthorized: z.boolean().default(true),
|
|
38
|
+
})
|
|
39
|
+
.optional(),
|
|
24
40
|
description: z.string().optional(),
|
|
25
41
|
lazyConnection: z.boolean().optional(),
|
|
26
42
|
maxRows: z.number().optional(),
|
|
27
43
|
queryTimeout: z.number().optional(),
|
|
28
44
|
});
|
|
29
|
-
const DatabaseConfigSchema = z.
|
|
30
|
-
PostgresConfigSchema,
|
|
31
|
-
ClickHouseConfigSchema,
|
|
32
|
-
]);
|
|
45
|
+
const DatabaseConfigSchema = z.union([PostgresConfigSchema, ClickHouseConfigSchema]);
|
|
33
46
|
const LogLevelSchema = z.enum(["debug", "info", "warn", "error"]);
|
|
34
47
|
const DefaultsSchema = z.object({
|
|
35
48
|
maxRows: z.number().default(100),
|
|
@@ -44,18 +57,17 @@ const HttpTransportConfigSchema = z.object({
|
|
|
44
57
|
host: z.string().default("127.0.0.1"),
|
|
45
58
|
stateless: z.boolean().default(false),
|
|
46
59
|
sessionTimeout: z.number().default(30 * 60 * 1000), // 30 minutes
|
|
47
|
-
auth: z
|
|
60
|
+
auth: z
|
|
61
|
+
.object({
|
|
48
62
|
type: z.literal("bearer"),
|
|
49
63
|
token: z.string(),
|
|
50
|
-
})
|
|
64
|
+
})
|
|
65
|
+
.optional(),
|
|
51
66
|
});
|
|
52
67
|
const StdioTransportConfigSchema = z.object({
|
|
53
68
|
type: z.literal("stdio"),
|
|
54
69
|
});
|
|
55
|
-
const TransportConfigSchema = z.discriminatedUnion("type", [
|
|
56
|
-
StdioTransportConfigSchema,
|
|
57
|
-
HttpTransportConfigSchema,
|
|
58
|
-
]);
|
|
70
|
+
const TransportConfigSchema = z.discriminatedUnion("type", [StdioTransportConfigSchema, HttpTransportConfigSchema]);
|
|
59
71
|
export const AppConfigSchema = z.object({
|
|
60
72
|
transport: TransportConfigSchema.optional().default({ type: "stdio" }),
|
|
61
73
|
defaults: DefaultsSchema.optional().transform((v) => v ?? {
|
package/dist/config/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createClient } from "@clickhouse/client";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
2
3
|
export class ClickHouseConnector {
|
|
3
4
|
type = "clickhouse";
|
|
4
5
|
client = null;
|
|
@@ -11,12 +12,21 @@ export class ClickHouseConnector {
|
|
|
11
12
|
this.maxRows = maxRows;
|
|
12
13
|
}
|
|
13
14
|
async connect() {
|
|
15
|
+
const tlsConfig = this.config.tls?.ca
|
|
16
|
+
? {
|
|
17
|
+
ca_cert: this.config.tls.ca.startsWith("-----BEGIN")
|
|
18
|
+
? Buffer.from(this.config.tls.ca)
|
|
19
|
+
: readFileSync(this.config.tls.ca),
|
|
20
|
+
reject_unauthorized: this.config.tls.rejectUnauthorized,
|
|
21
|
+
}
|
|
22
|
+
: undefined;
|
|
14
23
|
this.client = createClient({
|
|
15
24
|
url: this.config.url,
|
|
16
25
|
database: this.config.database,
|
|
17
26
|
username: this.config.user,
|
|
18
27
|
password: this.config.password,
|
|
19
28
|
request_timeout: this.queryTimeout,
|
|
29
|
+
...(tlsConfig && { tls: tlsConfig }),
|
|
20
30
|
});
|
|
21
31
|
await this.client.ping();
|
|
22
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../src/connectors/clickhouse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAyB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../src/connectors/clickhouse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumented.js","sourceRoot":"","sources":["../../src/connectors/instrumented.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"instrumented.js","sourceRoot":"","sources":["../../src/connectors/instrumented.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,qBAAqB;IAItB;IACA;IACA;IALD,IAAI,CAA8B;IAE3C,YACU,KAAgB,EAChB,OAA2B,EAC3B,IAAY;QAFZ,UAAK,GAAL,KAAK,CAAW;QAChB,YAAO,GAAP,OAAO,CAAoB;QAC3B,SAAI,GAAJ,IAAI,CAAQ;QAEpB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAiB,EAAE,OAAgB;QAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAiB;QAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,UAAU,CAAC,MAAe;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,MAAe;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,CAAC,MAAe;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,OAAiB;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -15,6 +15,11 @@ export declare class ConnectorManager {
|
|
|
15
15
|
withConnector<T>(dbId: string, fn: (connector: Connector) => Promise<T>): Promise<T>;
|
|
16
16
|
invalidateConnector(dbId: string): void;
|
|
17
17
|
private createConnector;
|
|
18
|
+
updateDatabases(newConfigs: ResolvedDatabaseConfig[]): {
|
|
19
|
+
added: string[];
|
|
20
|
+
removed: string[];
|
|
21
|
+
changed: string[];
|
|
22
|
+
};
|
|
18
23
|
connectEager(): Promise<void>;
|
|
19
24
|
disconnectAll(): Promise<void>;
|
|
20
25
|
}
|
|
@@ -3,12 +3,7 @@ import { ClickHouseConnector } from "./clickhouse.js";
|
|
|
3
3
|
import { InstrumentedConnector } from "./instrumented.js";
|
|
4
4
|
import { PerformanceTracker } from "../tools/readonly/performance.js";
|
|
5
5
|
import { getLogger } from "../utils/logger.js";
|
|
6
|
-
const CONNECTION_ERROR_CODES = new Set([
|
|
7
|
-
"ECONNREFUSED",
|
|
8
|
-
"ECONNRESET",
|
|
9
|
-
"EPIPE",
|
|
10
|
-
"ETIMEDOUT",
|
|
11
|
-
]);
|
|
6
|
+
const CONNECTION_ERROR_CODES = new Set(["ECONNREFUSED", "ECONNRESET", "EPIPE", "ETIMEDOUT"]);
|
|
12
7
|
function isConnectionError(err) {
|
|
13
8
|
if (err instanceof Error) {
|
|
14
9
|
const code = err.code;
|
|
@@ -90,6 +85,34 @@ export class ConnectorManager {
|
|
|
90
85
|
}
|
|
91
86
|
throw new Error(`Unsupported database type: ${config.type}`);
|
|
92
87
|
}
|
|
88
|
+
updateDatabases(newConfigs) {
|
|
89
|
+
const newMap = new Map(newConfigs.map((c) => [c.id, c]));
|
|
90
|
+
const added = [];
|
|
91
|
+
const removed = [];
|
|
92
|
+
const changed = [];
|
|
93
|
+
// Removed databases
|
|
94
|
+
for (const id of this.configs.keys()) {
|
|
95
|
+
if (!newMap.has(id)) {
|
|
96
|
+
removed.push(id);
|
|
97
|
+
this.invalidateConnector(id);
|
|
98
|
+
this.configs.delete(id);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Added and changed databases
|
|
102
|
+
for (const [id, cfg] of newMap) {
|
|
103
|
+
const old = this.configs.get(id);
|
|
104
|
+
if (!old) {
|
|
105
|
+
added.push(id);
|
|
106
|
+
this.configs.set(id, cfg);
|
|
107
|
+
}
|
|
108
|
+
else if (JSON.stringify(old) !== JSON.stringify(cfg)) {
|
|
109
|
+
changed.push(id);
|
|
110
|
+
this.invalidateConnector(id);
|
|
111
|
+
this.configs.set(id, cfg);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { added, removed, changed };
|
|
115
|
+
}
|
|
93
116
|
async connectEager() {
|
|
94
117
|
const eagerDbs = Array.from(this.configs.values()).filter((c) => !c.lazyConnection);
|
|
95
118
|
await Promise.all(eagerDbs.map((db) => this.getConnector(db.id)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/connectors/manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/connectors/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import pg from "pg";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
3
4
|
export class PostgresConnector {
|
|
4
5
|
type = "postgresql";
|
|
5
6
|
pool = null;
|
|
@@ -12,17 +13,34 @@ export class PostgresConnector {
|
|
|
12
13
|
this.maxRows = maxRows;
|
|
13
14
|
}
|
|
14
15
|
async connect() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
16
|
+
const sslConfig = this.config.ssl
|
|
17
|
+
? {
|
|
18
|
+
rejectUnauthorized: this.config.sslRejectUnauthorized,
|
|
19
|
+
...(this.config.sslCa && {
|
|
20
|
+
ca: this.config.sslCa.startsWith("-----BEGIN")
|
|
21
|
+
? this.config.sslCa
|
|
22
|
+
: readFileSync(this.config.sslCa, "utf-8"),
|
|
23
|
+
}),
|
|
24
|
+
}
|
|
25
|
+
: undefined;
|
|
26
|
+
const poolOptions = this.config.connectionString
|
|
27
|
+
? {
|
|
28
|
+
connectionString: this.config.connectionString,
|
|
29
|
+
ssl: sslConfig,
|
|
30
|
+
max: 10,
|
|
31
|
+
query_timeout: this.queryTimeout,
|
|
32
|
+
}
|
|
33
|
+
: {
|
|
34
|
+
host: this.config.host,
|
|
35
|
+
port: this.config.port,
|
|
36
|
+
database: this.config.database,
|
|
37
|
+
user: this.config.user,
|
|
38
|
+
password: this.config.password,
|
|
39
|
+
ssl: sslConfig,
|
|
40
|
+
max: 10,
|
|
41
|
+
query_timeout: this.queryTimeout,
|
|
42
|
+
};
|
|
43
|
+
this.pool = new pg.Pool(poolOptions);
|
|
26
44
|
// Verify connection
|
|
27
45
|
const client = await this.pool.connect();
|
|
28
46
|
client.release();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/connectors/postgresql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"postgresql.js","sourceRoot":"","sources":["../../src/connectors/postgresql.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { watch } from "node:fs";
|
|
2
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
4
|
import { loadConfig, parseCliArgs } from "./config/loader.js";
|
|
5
|
+
import { resolveDbConfig } from "./config/types.js";
|
|
4
6
|
import { createServer } from "./server.js";
|
|
7
|
+
import { transactionStore } from "./tools/write/transaction.js";
|
|
5
8
|
import { startHttpTransport } from "./transport/http.js";
|
|
6
9
|
import { initLogger } from "./utils/logger.js";
|
|
7
|
-
import { transactionStore } from "./tools/write/transaction.js";
|
|
8
10
|
async function main() {
|
|
9
11
|
const { configPath, transport: cliTransport } = parseCliArgs(process.argv.slice(2));
|
|
10
12
|
const config = loadConfig(configPath);
|
|
@@ -12,36 +14,86 @@ async function main() {
|
|
|
12
14
|
logger.info("Starting db-view-mcp", { transport: config.transport.type });
|
|
13
15
|
// CLI --transport overrides config
|
|
14
16
|
const transportType = cliTransport ?? config.transport.type;
|
|
17
|
+
let manager;
|
|
18
|
+
let shutdown;
|
|
15
19
|
if (transportType === "http") {
|
|
16
20
|
const transportConfig = config.transport.type === "http"
|
|
17
21
|
? config.transport
|
|
18
22
|
: { type: "http", port: 3000, host: "127.0.0.1", stateless: false, sessionTimeout: 30 * 60 * 1000 };
|
|
19
|
-
const { httpServer, manager } = await startHttpTransport(config, transportConfig);
|
|
20
|
-
|
|
23
|
+
const { httpServer, manager: m, sessions, cleanupInterval } = await startHttpTransport(config, transportConfig);
|
|
24
|
+
manager = m;
|
|
25
|
+
shutdown = async () => {
|
|
21
26
|
logger.info("Shutting down HTTP server...");
|
|
27
|
+
await new Promise((resolve, reject) => {
|
|
28
|
+
httpServer.close((err) => (err ? reject(err) : resolve()));
|
|
29
|
+
});
|
|
30
|
+
for (const [sid, entry] of sessions) {
|
|
31
|
+
await entry.transport.close().catch(() => { });
|
|
32
|
+
await entry.server.close().catch(() => { });
|
|
33
|
+
sessions.delete(sid);
|
|
34
|
+
}
|
|
35
|
+
if (cleanupInterval)
|
|
36
|
+
clearInterval(cleanupInterval);
|
|
22
37
|
await transactionStore.cleanupAll();
|
|
23
|
-
httpServer.close();
|
|
24
38
|
await manager.disconnectAll();
|
|
25
|
-
process.exit(0);
|
|
26
39
|
};
|
|
27
|
-
process.on("SIGINT", shutdown);
|
|
28
|
-
process.on("SIGTERM", shutdown);
|
|
29
40
|
}
|
|
30
41
|
else {
|
|
31
|
-
const { server, manager } = await createServer(config);
|
|
42
|
+
const { server, manager: m } = await createServer(config);
|
|
43
|
+
manager = m;
|
|
32
44
|
const transport = new StdioServerTransport();
|
|
33
45
|
await server.connect(transport);
|
|
34
|
-
|
|
46
|
+
shutdown = async () => {
|
|
47
|
+
logger.info("Shutting down stdio server...");
|
|
48
|
+
await server.close();
|
|
49
|
+
await transport.close();
|
|
35
50
|
await transactionStore.cleanupAll();
|
|
36
51
|
await manager.disconnectAll();
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
process.on("SIGTERM", async () => {
|
|
40
|
-
await transactionStore.cleanupAll();
|
|
41
|
-
await manager.disconnectAll();
|
|
42
|
-
process.exit(0);
|
|
43
|
-
});
|
|
52
|
+
};
|
|
44
53
|
}
|
|
54
|
+
// Unified shutdown handler with timeout and duplicate protection
|
|
55
|
+
let shutdownInProgress = false;
|
|
56
|
+
const gracefulShutdown = async () => {
|
|
57
|
+
if (shutdownInProgress) {
|
|
58
|
+
logger.warn("Shutdown already in progress, forcing exit");
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
shutdownInProgress = true;
|
|
62
|
+
const timer = setTimeout(() => {
|
|
63
|
+
logger.error("Shutdown timed out after 10s, forcing exit");
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}, 10_000);
|
|
66
|
+
timer.unref();
|
|
67
|
+
try {
|
|
68
|
+
await shutdown();
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
logger.error("Error during shutdown", { error: String(err) });
|
|
72
|
+
}
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
process.exit(0);
|
|
75
|
+
};
|
|
76
|
+
process.on("SIGINT", gracefulShutdown);
|
|
77
|
+
process.on("SIGTERM", gracefulShutdown);
|
|
78
|
+
// Config hot reload via file watcher
|
|
79
|
+
let reloadTimeout = null;
|
|
80
|
+
const watcher = watch(configPath, () => {
|
|
81
|
+
if (reloadTimeout)
|
|
82
|
+
clearTimeout(reloadTimeout);
|
|
83
|
+
reloadTimeout = setTimeout(async () => {
|
|
84
|
+
logger.info("Config file changed, reloading...");
|
|
85
|
+
try {
|
|
86
|
+
const newConfig = loadConfig(configPath);
|
|
87
|
+
const newResolved = newConfig.databases.map((db) => resolveDbConfig(db, newConfig.defaults));
|
|
88
|
+
const diff = manager.updateDatabases(newResolved);
|
|
89
|
+
logger.info("Config reloaded", { added: diff.added, removed: diff.removed, changed: diff.changed });
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
logger.error("Failed to reload config", { error: String(err) });
|
|
93
|
+
}
|
|
94
|
+
}, 500);
|
|
95
|
+
});
|
|
96
|
+
watcher.unref();
|
|
45
97
|
}
|
|
46
98
|
main().catch((err) => {
|
|
47
99
|
console.error("Failed to start db-view-mcp:", err);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAC;AAEpE,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAC;AAEpE,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,OAAO,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAyB,EAAE,MAAiB;IAClF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IACH,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAiB;IAClD,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAExD,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC;IAE7B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -11,9 +11,7 @@ export class PerformanceTracker {
|
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
getSlowQueries(database, limit = 20) {
|
|
14
|
-
const filtered = database
|
|
15
|
-
? this.slowQueries.filter((q) => q.database === database)
|
|
16
|
-
: this.slowQueries;
|
|
14
|
+
const filtered = database ? this.slowQueries.filter((q) => q.database === database) : this.slowQueries;
|
|
17
15
|
return filtered.slice(-limit);
|
|
18
16
|
}
|
|
19
17
|
setThreshold(ms) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../../src/tools/readonly/performance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AASrE,MAAM,OAAO,kBAAkB;IACrB,WAAW,GAAgB,EAAE,CAAC;IAC9B,SAAS,GAAG,IAAI,CAAC,CAAC,KAAK;IAE/B,WAAW,CAAC,GAAW,EAAE,QAAgB,EAAE,QAAgB;QACzD,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG;gBAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,cAAc,CAAC,QAAiB,EAAE,KAAK,GAAG,EAAE;QAC1C,MAAM,QAAQ,GAAG,QAAQ
|
|
1
|
+
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../../src/tools/readonly/performance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AASrE,MAAM,OAAO,kBAAkB;IACrB,WAAW,GAAgB,EAAE,CAAC;IAC9B,SAAS,GAAG,IAAI,CAAC,CAAC,KAAK;IAE/B,WAAW,CAAC,GAAW,EAAE,QAAgB,EAAE,QAAgB;QACzD,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG;gBAAE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,cAAc,CAAC,QAAiB,EAAE,KAAK,GAAG,EAAE;QAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACvG,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,YAAY,CAAC,EAAU;QACrB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;CACF;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAe;IACrD,OAAO;QACL,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAA8B,CAAC,CAAC,QAAQ,CAAC,2BAA2B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxG,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACxG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC1F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAyB;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAChD,OAAO,KAAK,EAAE,MAAgF,EAAE,EAAE;QAChG,IAAI,CAAC;YACH,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;gBACtB,KAAK,gBAAgB;oBACnB,OAAO,aAAa,CAAC;wBACnB,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;wBAC3D,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBAC1B,CAAC,CAAC;gBACL,KAAK,YAAY;oBACf,OAAO,aAAa,CAAC;wBACnB,IAAI,EAAE;4BACJ,kBAAkB,EAAE,OAAO,CAAC,YAAY,EAAE;4BAC1C,kBAAkB,EAAE,OAAO,CAAC,cAAc,EAAE;yBAC7C;wBACD,QAAQ,EAAE,MAAM,CAAC,QAAQ;qBAC1B,CAAC,CAAC;gBACL,KAAK,OAAO;oBACV,OAAO,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO,aAAa,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,CAAC;gBAC9D,KAAK,cAAc;oBACjB,IAAI,CAAC,MAAM,CAAC,SAAS;wBAAE,OAAO,WAAW,CAAC,wCAAwC,CAAC,CAAC;oBACpF,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACvC,OAAO,aAAa,CAAC,EAAE,IAAI,EAAE,oBAAoB,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBAC3E;oBACE,OAAO,WAAW,CAAC,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/tools/registry.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import type { ConnectorManager } from "../connectors/manager.js";
|
|
3
3
|
import type { Defaults } from "../config/types.js";
|
|
4
4
|
export declare function registerTools(server: McpServer, manager: ConnectorManager, defaults: Defaults): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAErF,MAAM,UAAU,aAAa,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAErF,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,OAAyB,EAAE,QAAkB;IAC5F,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAEvC,IAAI,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC9B,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAiB,EAAE,OAAyB,EAAE,KAAe;IAC3F,MAAM,CAAC,IAAI,CACT,OAAO,EACP,uDAAuD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACzE,qBAAqB,CAAC,KAAK,CAAC,EAC5B,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,+BAA+B,EAAE,EAAE,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IAElG,MAAM,CAAC,IAAI,CACT,aAAa,EACb,mDAAmD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACrE,sBAAsB,CAAC,KAAK,CAAC,EAC7B,iBAAiB,CAAC,OAAO,CAAC,CAC3B,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,kDAAkD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACpE,yBAAyB,CAAC,KAAK,CAAC,EAChC,oBAAoB,CAAC,OAAO,CAAC,CAC9B,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,wDAAwD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC1E,kBAAkB,CAAC,KAAK,CAAC,EACzB,aAAa,CAAC,OAAO,CAAC,CACvB,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,wDAAwD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC1E,mBAAmB,CAAC,KAAK,CAAC,EAC1B,cAAc,CAAC,OAAO,CAAC,CACxB,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,mEAAmE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACrF,uBAAuB,CAAC,KAAK,CAAC,EAC9B,kBAAkB,CAAC,OAAO,CAAC,CAC5B,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,SAAS,EACT,qFAAqF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACvG,mBAAmB,CAAC,KAAK,CAAC,EAC1B,cAAc,CAAC,OAAO,CAAC,CACxB,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,yFAAyF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC3G,uBAAuB,CAAC,KAAK,CAAC,EAC9B,kBAAkB,CAAC,OAAO,CAAC,CAC5B,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAiB,EAAE,OAAyB,EAAE,KAAe;IAC7F,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAElE,MAAM,CAAC,IAAI,CACT,SAAS,IAAI,EAAE,EACf,oCAAoC,IAAI,GAAG,IAAI,EAAE,EACjD,EAAE,GAAG,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EACpG,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAC3E,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,eAAe,IAAI,EAAE,EACrB,kBAAkB,IAAI,GAAG,IAAI,EAAE,EAC/B,EAAE,MAAM,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EACtD,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAC5E,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,IAAI,EAAE,EACxB,+BAA+B,IAAI,GAAG,IAAI,EAAE,EAC5C,EAAE,KAAK,EAAE,yBAAyB,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,yBAAyB,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAC9G,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAC/E,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,UAAU,IAAI,EAAE,EAChB,sBAAsB,IAAI,GAAG,IAAI,EAAE,EACnC,EAAE,MAAM,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAClD,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CACxE,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,IAAI,EAAE,EACvB,kBAAkB,IAAI,GAAG,IAAI,EAAE,EAC/B,EAAE,GAAG,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAChG,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CACzE,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,eAAe,IAAI,EAAE,EACrB,2BAA2B,IAAI,GAAG,IAAI,EAAE,EACxC;YACE,MAAM,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC,MAAM;YACnD,SAAS,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC,SAAS;YACzD,KAAK,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC,KAAK;SAClD,EACD,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAC7E,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,WAAW,IAAI,EAAE,EACjB,wBAAwB,IAAI,GAAG,IAAI,EAAE,EACrC,EAAE,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,EAC1G,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CACzE,CAAC;QAEF,MAAM,CAAC,IAAI,CACT,eAAe,IAAI,EAAE,EACrB,0BAA0B,IAAI,GAAG,IAAI,EAAE,EACvC;YACE,MAAM,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC,MAAM;YACnD,aAAa,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC,aAAa;YACjE,SAAS,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC,SAAS;YACzD,MAAM,EAAE,uBAAuB,CAAC,WAAW,CAAC,CAAC,MAAM;SACpD,EACD,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAC7E,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,+BAA+B,EAAE,EAAE,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;AACpG,CAAC"}
|
package/dist/transport/http.d.ts
CHANGED
|
@@ -12,5 +12,6 @@ export declare function startHttpTransport(config: AppConfig, transportConfig: H
|
|
|
12
12
|
httpServer: Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>;
|
|
13
13
|
manager: ConnectorManager;
|
|
14
14
|
sessions: Map<string, SessionEntry>;
|
|
15
|
+
cleanupInterval: NodeJS.Timeout | undefined;
|
|
15
16
|
}>;
|
|
16
17
|
export {};
|
package/dist/transport/http.js
CHANGED
|
@@ -23,13 +23,14 @@ export async function startHttpTransport(config, transportConfig) {
|
|
|
23
23
|
next();
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
+
let cleanupInterval;
|
|
26
27
|
if (transportConfig.stateless) {
|
|
27
28
|
setupStatelessRoutes(app, manager, config);
|
|
28
29
|
}
|
|
29
30
|
else {
|
|
30
31
|
setupStatefulRoutes(app, manager, config, sessions);
|
|
31
32
|
const sessionTimeout = transportConfig.sessionTimeout;
|
|
32
|
-
|
|
33
|
+
cleanupInterval = setInterval(() => {
|
|
33
34
|
const now = Date.now();
|
|
34
35
|
for (const [sid, entry] of sessions) {
|
|
35
36
|
if (now - entry.lastAccessedAt > sessionTimeout) {
|
|
@@ -51,7 +52,7 @@ export async function startHttpTransport(config, transportConfig) {
|
|
|
51
52
|
logger.info(`HTTP server listening on http://${host}:${port}/mcp`);
|
|
52
53
|
logger.info(`Health check: http://${host}:${port}/health`);
|
|
53
54
|
logger.info(`Mode: ${transportConfig.stateless ? "stateless" : "stateful (session-based)"}`);
|
|
54
|
-
return { httpServer, manager, sessions };
|
|
55
|
+
return { httpServer, manager, sessions, cleanupInterval };
|
|
55
56
|
}
|
|
56
57
|
function setupStatelessRoutes(app, manager, config) {
|
|
57
58
|
app.all("/mcp", async (req, res) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAElF,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAG/E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAQ/C,MAAM,CAAC,KAAK,UAAU,kBAAkB,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
const WRITE_KEYWORDS = [
|
|
2
|
-
"INSERT",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
2
|
+
"INSERT",
|
|
3
|
+
"UPDATE",
|
|
4
|
+
"DELETE",
|
|
5
|
+
"DROP",
|
|
6
|
+
"ALTER",
|
|
7
|
+
"TRUNCATE",
|
|
8
|
+
"CREATE",
|
|
9
|
+
"GRANT",
|
|
10
|
+
"REVOKE",
|
|
11
|
+
"REPLACE",
|
|
12
|
+
"MERGE",
|
|
13
|
+
"COPY",
|
|
14
|
+
"CALL",
|
|
6
15
|
];
|
|
7
16
|
const WRITE_PATTERN = new RegExp(`\\b(${WRITE_KEYWORDS.join("|")})\\b`, "i");
|
|
8
17
|
function stripStringLiterals(sql) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-validator.js","sourceRoot":"","sources":["../../src/utils/sql-validator.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG;IACrB,QAAQ,
|
|
1
|
+
{"version":3,"file":"sql-validator.js","sourceRoot":"","sources":["../../src/utils/sql-validator.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG;IACrB,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,UAAU;IACV,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,OAAO;IACP,MAAM;IACN,MAAM;CACP,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,MAAM,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAO7E,SAAS,mBAAmB,CAAC,GAAW;IACtC,0DAA0D;IAC1D,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC;IAC1D,oCAAoC;IACpC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IACxD,qEAAqE;IACrE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,wBAAwB;IACxB,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IACnD,uBAAuB;IACvB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IACxD,CAAC;IAED,iEAAiE;IACjE,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEnD,iEAAiE;IACjE,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,uDAAuD;aAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,sDAAsD;IACtD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,oCAAoC;SAChF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@conte777/db-view-mcp",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "MCP server for database access (PostgreSQL + ClickHouse)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,6 +17,12 @@
|
|
|
17
17
|
"start": "node dist/index.js",
|
|
18
18
|
"test": "vitest run",
|
|
19
19
|
"test:watch": "vitest",
|
|
20
|
+
"test:coverage": "vitest run --coverage",
|
|
21
|
+
"lint": "biome lint src/ tests/",
|
|
22
|
+
"lint:fix": "biome lint --write src/ tests/",
|
|
23
|
+
"format": "biome format --write src/ tests/",
|
|
24
|
+
"format:check": "biome format src/ tests/",
|
|
25
|
+
"prepare": "lefthook install",
|
|
20
26
|
"prepublishOnly": "npm run build"
|
|
21
27
|
},
|
|
22
28
|
"keywords": [
|
|
@@ -34,11 +40,14 @@
|
|
|
34
40
|
"zod": "^4.3.6"
|
|
35
41
|
},
|
|
36
42
|
"devDependencies": {
|
|
43
|
+
"@biomejs/biome": "^2.4.2",
|
|
37
44
|
"@types/express": "^5.0.3",
|
|
38
45
|
"@types/node": "^25.2.3",
|
|
39
46
|
"@types/pg": "^8.16.0",
|
|
47
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
48
|
+
"lefthook": "^2.1.1",
|
|
40
49
|
"tsx": "^4.21.0",
|
|
41
50
|
"typescript": "^5.9.3",
|
|
42
51
|
"vitest": "^3.1.1"
|
|
43
52
|
}
|
|
44
|
-
}
|
|
53
|
+
}
|