@tejasanik/postgres-mcp-server 1.0.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.
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listSchemas = listSchemas;
4
+ exports.listObjects = listObjects;
5
+ exports.getObjectDetails = getObjectDetails;
6
+ const db_manager_js_1 = require("../db-manager.js");
7
+ async function listSchemas(args) {
8
+ const dbManager = (0, db_manager_js_1.getDbManager)();
9
+ let query = `
10
+ SELECT
11
+ schema_name,
12
+ schema_owner as owner
13
+ FROM information_schema.schemata
14
+ `;
15
+ if (!args.includeSystemSchemas) {
16
+ query += `
17
+ WHERE schema_name NOT IN ('pg_catalog', 'information_schema', 'pg_toast', 'pg_temp_1', 'pg_toast_temp_1')
18
+ AND schema_name NOT LIKE 'pg_%'
19
+ `;
20
+ }
21
+ query += ' ORDER BY schema_name';
22
+ const result = await dbManager.query(query);
23
+ return result.rows;
24
+ }
25
+ async function listObjects(args) {
26
+ const dbManager = (0, db_manager_js_1.getDbManager)();
27
+ const objectType = args.objectType || 'all';
28
+ const objects = [];
29
+ // List tables
30
+ if (objectType === 'all' || objectType === 'table') {
31
+ const tablesQuery = `
32
+ SELECT
33
+ table_name as name,
34
+ 'table' as type,
35
+ tableowner as owner,
36
+ schemaname as schema
37
+ FROM pg_catalog.pg_tables
38
+ WHERE schemaname = $1
39
+ ${args.filter ? "AND table_name ILIKE '%' || $2 || '%'" : ''}
40
+ ORDER BY table_name
41
+ `;
42
+ const params = args.filter ? [args.schema, args.filter] : [args.schema];
43
+ const tables = await dbManager.query(tablesQuery, params);
44
+ objects.push(...tables.rows);
45
+ }
46
+ // List views
47
+ if (objectType === 'all' || objectType === 'view') {
48
+ const viewsQuery = `
49
+ SELECT
50
+ table_name as name,
51
+ 'view' as type,
52
+ table_schema as schema,
53
+ '' as owner
54
+ FROM information_schema.views
55
+ WHERE table_schema = $1
56
+ ${args.filter ? "AND table_name ILIKE '%' || $2 || '%'" : ''}
57
+ ORDER BY table_name
58
+ `;
59
+ const params = args.filter ? [args.schema, args.filter] : [args.schema];
60
+ const views = await dbManager.query(viewsQuery, params);
61
+ objects.push(...views.rows);
62
+ }
63
+ // List sequences
64
+ if (objectType === 'all' || objectType === 'sequence') {
65
+ const sequencesQuery = `
66
+ SELECT
67
+ sequence_name as name,
68
+ 'sequence' as type,
69
+ sequence_schema as schema,
70
+ '' as owner
71
+ FROM information_schema.sequences
72
+ WHERE sequence_schema = $1
73
+ ${args.filter ? "AND sequence_name ILIKE '%' || $2 || '%'" : ''}
74
+ ORDER BY sequence_name
75
+ `;
76
+ const params = args.filter ? [args.schema, args.filter] : [args.schema];
77
+ const sequences = await dbManager.query(sequencesQuery, params);
78
+ objects.push(...sequences.rows);
79
+ }
80
+ // List extensions (schema-independent but we can filter)
81
+ if (objectType === 'all' || objectType === 'extension') {
82
+ const extensionsQuery = `
83
+ SELECT
84
+ extname as name,
85
+ 'extension' as type,
86
+ n.nspname as schema,
87
+ '' as owner
88
+ FROM pg_extension e
89
+ JOIN pg_namespace n ON e.extnamespace = n.oid
90
+ WHERE n.nspname = $1
91
+ ${args.filter ? "AND extname ILIKE '%' || $2 || '%'" : ''}
92
+ ORDER BY extname
93
+ `;
94
+ const params = args.filter ? [args.schema, args.filter] : [args.schema];
95
+ const extensions = await dbManager.query(extensionsQuery, params);
96
+ objects.push(...extensions.rows);
97
+ }
98
+ return objects;
99
+ }
100
+ async function getObjectDetails(args) {
101
+ const dbManager = (0, db_manager_js_1.getDbManager)();
102
+ const result = {};
103
+ // Get columns
104
+ const columnsQuery = `
105
+ SELECT
106
+ column_name,
107
+ data_type,
108
+ is_nullable,
109
+ column_default,
110
+ character_maximum_length
111
+ FROM information_schema.columns
112
+ WHERE table_schema = $1 AND table_name = $2
113
+ ORDER BY ordinal_position
114
+ `;
115
+ const columns = await dbManager.query(columnsQuery, [args.schema, args.objectName]);
116
+ result.columns = columns.rows;
117
+ // Get constraints
118
+ const constraintsQuery = `
119
+ SELECT
120
+ tc.constraint_name,
121
+ tc.constraint_type,
122
+ tc.table_name,
123
+ kcu.column_name,
124
+ ccu.table_name as foreign_table_name,
125
+ ccu.column_name as foreign_column_name
126
+ FROM information_schema.table_constraints tc
127
+ LEFT JOIN information_schema.key_column_usage kcu
128
+ ON tc.constraint_name = kcu.constraint_name
129
+ AND tc.table_schema = kcu.table_schema
130
+ LEFT JOIN information_schema.constraint_column_usage ccu
131
+ ON tc.constraint_name = ccu.constraint_name
132
+ AND tc.table_schema = ccu.table_schema
133
+ WHERE tc.table_schema = $1 AND tc.table_name = $2
134
+ ORDER BY tc.constraint_type, tc.constraint_name
135
+ `;
136
+ const constraints = await dbManager.query(constraintsQuery, [args.schema, args.objectName]);
137
+ result.constraints = constraints.rows;
138
+ // Get indexes
139
+ const indexesQuery = `
140
+ SELECT
141
+ i.relname as index_name,
142
+ pg_get_indexdef(i.oid) as index_definition,
143
+ ix.indisunique as is_unique,
144
+ ix.indisprimary as is_primary
145
+ FROM pg_class t
146
+ JOIN pg_index ix ON t.oid = ix.indrelid
147
+ JOIN pg_class i ON i.oid = ix.indexrelid
148
+ JOIN pg_namespace n ON n.oid = t.relnamespace
149
+ WHERE n.nspname = $1 AND t.relname = $2
150
+ ORDER BY i.relname
151
+ `;
152
+ const indexes = await dbManager.query(indexesQuery, [args.schema, args.objectName]);
153
+ result.indexes = indexes.rows;
154
+ // Get table size and row count (approximate)
155
+ try {
156
+ const sizeQuery = `
157
+ SELECT
158
+ pg_size_pretty(pg_total_relation_size($1::regclass)) as size,
159
+ (SELECT reltuples::bigint FROM pg_class WHERE oid = $1::regclass) as row_count
160
+ `;
161
+ const fullName = `"${args.schema}"."${args.objectName}"`;
162
+ const sizeResult = await dbManager.query(sizeQuery, [fullName]);
163
+ if (sizeResult.rows.length > 0) {
164
+ result.size = sizeResult.rows[0].size;
165
+ result.rowCount = sizeResult.rows[0].row_count;
166
+ }
167
+ }
168
+ catch (error) {
169
+ // Size query might fail for views
170
+ }
171
+ // Get view definition if it's a view
172
+ if (args.objectType === 'view') {
173
+ try {
174
+ const viewDefQuery = `
175
+ SELECT pg_get_viewdef($1::regclass, true) as definition
176
+ `;
177
+ const fullName = `"${args.schema}"."${args.objectName}"`;
178
+ const viewDef = await dbManager.query(viewDefQuery, [fullName]);
179
+ if (viewDef.rows.length > 0) {
180
+ result.definition = viewDef.rows[0].definition;
181
+ }
182
+ }
183
+ catch (error) {
184
+ // Might fail if not a view
185
+ }
186
+ }
187
+ return result;
188
+ }
189
+ //# sourceMappingURL=schema-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-tools.js","sourceRoot":"","sources":["../../src/tools/schema-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { DatabaseInfo } from '../types.js';
2
+ interface ListServersResult {
3
+ servers: {
4
+ name: string;
5
+ host: string;
6
+ port: string;
7
+ isConnected: boolean;
8
+ databases?: DatabaseInfo[];
9
+ }[];
10
+ currentServer: string | null;
11
+ currentDatabase: string | null;
12
+ }
13
+ export declare function listServersAndDbs(args: {
14
+ filter?: string;
15
+ includeSystemDbs?: boolean;
16
+ fetchDatabases?: boolean;
17
+ }): Promise<ListServersResult>;
18
+ export declare function switchServerDb(args: {
19
+ server: string;
20
+ database?: string;
21
+ }): Promise<{
22
+ success: boolean;
23
+ message: string;
24
+ currentServer: string;
25
+ currentDatabase: string;
26
+ }>;
27
+ export {};
28
+ //# sourceMappingURL=server-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-tools.d.ts","sourceRoot":"","sources":["../../src/tools/server-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,UAAU,iBAAiB;IACzB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;KAC5B,EAAE,CAAC;IACJ,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8D7B;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBjG"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listServersAndDbs = listServersAndDbs;
4
+ exports.switchServerDb = switchServerDb;
5
+ const db_manager_js_1 = require("../db-manager.js");
6
+ async function listServersAndDbs(args) {
7
+ const dbManager = (0, db_manager_js_1.getDbManager)();
8
+ const serversConfig = dbManager.getServersConfig();
9
+ const currentState = dbManager.getCurrentState();
10
+ let serverNames = Object.keys(serversConfig);
11
+ // Apply filter if provided
12
+ if (args.filter) {
13
+ const filterLower = args.filter.toLowerCase();
14
+ serverNames = serverNames.filter(name => name.toLowerCase().includes(filterLower) ||
15
+ serversConfig[name].host.toLowerCase().includes(filterLower));
16
+ }
17
+ const servers = [];
18
+ for (const name of serverNames) {
19
+ const config = serversConfig[name];
20
+ const isConnected = currentState.currentServer === name;
21
+ const serverInfo = {
22
+ name,
23
+ host: config.host,
24
+ port: config.port || '5432',
25
+ isConnected
26
+ };
27
+ // Fetch databases only if requested and connected to this server
28
+ if (args.fetchDatabases && isConnected) {
29
+ try {
30
+ let databases = await dbManager.listDatabases();
31
+ // Filter system databases unless explicitly included
32
+ if (!args.includeSystemDbs) {
33
+ const systemDbs = ['template0', 'template1'];
34
+ databases = databases.filter(db => !systemDbs.includes(db.name));
35
+ }
36
+ // Apply database filter
37
+ if (args.filter) {
38
+ const filterLower = args.filter.toLowerCase();
39
+ databases = databases.filter(db => db.name.toLowerCase().includes(filterLower));
40
+ }
41
+ serverInfo.databases = databases;
42
+ }
43
+ catch (error) {
44
+ // If we can't fetch databases, just skip
45
+ }
46
+ }
47
+ servers.push(serverInfo);
48
+ }
49
+ return {
50
+ servers,
51
+ currentServer: currentState.currentServer,
52
+ currentDatabase: currentState.currentDatabase
53
+ };
54
+ }
55
+ async function switchServerDb(args) {
56
+ const dbManager = (0, db_manager_js_1.getDbManager)();
57
+ try {
58
+ await dbManager.switchServer(args.server, args.database);
59
+ const state = dbManager.getCurrentState();
60
+ return {
61
+ success: true,
62
+ message: `Successfully connected to server '${args.server}'${args.database ? ` and database '${args.database}'` : ''}`,
63
+ currentServer: state.currentServer,
64
+ currentDatabase: state.currentDatabase
65
+ };
66
+ }
67
+ catch (error) {
68
+ throw new Error(`Failed to switch: ${error}`);
69
+ }
70
+ }
71
+ //# sourceMappingURL=server-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-tools.js","sourceRoot":"","sources":["../../src/tools/server-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ExecuteSqlResult, QueryPlan } from '../types.js';
2
+ export declare function executeSql(args: {
3
+ sql: string;
4
+ maxRows?: number;
5
+ }): Promise<ExecuteSqlResult>;
6
+ export declare function explainQuery(args: {
7
+ sql: string;
8
+ analyze?: boolean;
9
+ buffers?: boolean;
10
+ format?: 'text' | 'json' | 'yaml' | 'xml';
11
+ hypotheticalIndexes?: Array<{
12
+ table: string;
13
+ columns: string[];
14
+ indexType?: string;
15
+ }>;
16
+ }): Promise<QueryPlan>;
17
+ //# sourceMappingURL=sql-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-tools.d.ts","sourceRoot":"","sources":["../../src/tools/sql-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS1D,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0C5B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAC1C,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAC1B,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ,GAAG,OAAO,CAAC,SAAS,CAAC,CA2DrB"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.executeSql = executeSql;
37
+ exports.explainQuery = explainQuery;
38
+ const db_manager_js_1 = require("../db-manager.js");
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ const os = __importStar(require("os"));
42
+ const uuid_1 = require("uuid");
43
+ const MAX_OUTPUT_CHARS = 50000; // Maximum characters before writing to file
44
+ const MAX_ROWS_IN_RESPONSE = 1000; // Maximum rows to include in direct response
45
+ async function executeSql(args) {
46
+ const dbManager = (0, db_manager_js_1.getDbManager)();
47
+ const maxRows = args.maxRows || MAX_ROWS_IN_RESPONSE;
48
+ const result = await dbManager.query(args.sql);
49
+ const fields = result.fields?.map(f => f.name) || [];
50
+ const totalRows = result.rows.length;
51
+ // Serialize the result to check size
52
+ const serialized = JSON.stringify(result.rows, null, 2);
53
+ if (serialized.length > MAX_OUTPUT_CHARS || totalRows > maxRows) {
54
+ // Write to temp file
55
+ const tempDir = os.tmpdir();
56
+ const fileName = `postgres-mcp-output-${(0, uuid_1.v4)()}.json`;
57
+ const filePath = path.join(tempDir, fileName);
58
+ const outputData = {
59
+ totalRows,
60
+ fields,
61
+ rows: result.rows,
62
+ generatedAt: new Date().toISOString(),
63
+ query: args.sql
64
+ };
65
+ fs.writeFileSync(filePath, JSON.stringify(outputData, null, 2));
66
+ return {
67
+ rows: [],
68
+ rowCount: totalRows,
69
+ fields,
70
+ outputFile: filePath,
71
+ truncated: true
72
+ };
73
+ }
74
+ return {
75
+ rows: result.rows,
76
+ rowCount: totalRows,
77
+ fields
78
+ };
79
+ }
80
+ async function explainQuery(args) {
81
+ const dbManager = (0, db_manager_js_1.getDbManager)();
82
+ const client = await dbManager.getClient();
83
+ try {
84
+ // If hypothetical indexes are specified, create them as hypothetical
85
+ if (args.hypotheticalIndexes && args.hypotheticalIndexes.length > 0) {
86
+ // Check if hypopg extension is available
87
+ const hypopgCheck = await client.query(`
88
+ SELECT EXISTS (
89
+ SELECT 1 FROM pg_extension WHERE extname = 'hypopg'
90
+ ) as has_hypopg
91
+ `);
92
+ if (hypopgCheck.rows[0].has_hypopg) {
93
+ // Create hypothetical indexes
94
+ for (const idx of args.hypotheticalIndexes) {
95
+ const indexType = idx.indexType || 'btree';
96
+ const columns = idx.columns.join(', ');
97
+ await client.query(`SELECT hypopg_create_index('CREATE INDEX ON ${idx.table} USING ${indexType} (${columns})')`);
98
+ }
99
+ }
100
+ }
101
+ // Build EXPLAIN query
102
+ const format = args.format || 'json';
103
+ const options = [`FORMAT ${format.toUpperCase()}`];
104
+ if (args.analyze) {
105
+ options.push('ANALYZE');
106
+ }
107
+ if (args.buffers) {
108
+ options.push('BUFFERS');
109
+ }
110
+ const explainQuery = `EXPLAIN (${options.join(', ')}) ${args.sql}`;
111
+ const result = await client.query(explainQuery);
112
+ // Clean up hypothetical indexes if created
113
+ if (args.hypotheticalIndexes && args.hypotheticalIndexes.length > 0) {
114
+ try {
115
+ await client.query('SELECT hypopg_reset()');
116
+ }
117
+ catch (e) {
118
+ // Ignore if hypopg not available
119
+ }
120
+ }
121
+ if (format === 'json') {
122
+ return {
123
+ plan: result.rows[0]['QUERY PLAN'][0]
124
+ };
125
+ }
126
+ return {
127
+ plan: result.rows.map((r) => r['QUERY PLAN']).join('\n')
128
+ };
129
+ }
130
+ finally {
131
+ client.release();
132
+ }
133
+ }
134
+ //# sourceMappingURL=sql-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-tools.js","sourceRoot":"","sources":["../../src/tools/sql-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ export interface ServerConfig {
2
+ host: string;
3
+ port: string;
4
+ username: string;
5
+ password: string;
6
+ }
7
+ export interface ServersConfig {
8
+ [serverName: string]: ServerConfig;
9
+ }
10
+ export interface ConnectionState {
11
+ currentServer: string | null;
12
+ currentDatabase: string | null;
13
+ }
14
+ export interface DatabaseInfo {
15
+ name: string;
16
+ owner: string;
17
+ encoding: string;
18
+ size: string;
19
+ }
20
+ export interface SchemaInfo {
21
+ schema_name: string;
22
+ owner: string;
23
+ }
24
+ export interface TableInfo {
25
+ name: string;
26
+ type: 'table' | 'view' | 'sequence' | 'extension';
27
+ owner: string;
28
+ schema: string;
29
+ }
30
+ export interface ColumnInfo {
31
+ column_name: string;
32
+ data_type: string;
33
+ is_nullable: string;
34
+ column_default: string | null;
35
+ character_maximum_length: number | null;
36
+ }
37
+ export interface ConstraintInfo {
38
+ constraint_name: string;
39
+ constraint_type: string;
40
+ table_name: string;
41
+ column_name: string;
42
+ foreign_table_name: string | null;
43
+ foreign_column_name: string | null;
44
+ }
45
+ export interface IndexInfo {
46
+ index_name: string;
47
+ index_definition: string;
48
+ is_unique: boolean;
49
+ is_primary: boolean;
50
+ }
51
+ export interface QueryPlan {
52
+ plan: object | string;
53
+ planning_time?: number;
54
+ execution_time?: number;
55
+ }
56
+ export interface SlowQuery {
57
+ query: string;
58
+ calls: number;
59
+ total_time: number;
60
+ mean_time: number;
61
+ rows: number;
62
+ }
63
+ export interface IndexRecommendation {
64
+ table: string;
65
+ columns: string[];
66
+ index_type: string;
67
+ reason: string;
68
+ estimated_improvement: string;
69
+ }
70
+ export interface HealthCheckResult {
71
+ category: string;
72
+ status: 'healthy' | 'warning' | 'critical';
73
+ message: string;
74
+ details?: object;
75
+ }
76
+ export interface ExecuteSqlResult {
77
+ rows: any[];
78
+ rowCount: number;
79
+ fields: string[];
80
+ outputFile?: string;
81
+ truncated?: boolean;
82
+ }
83
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@tejasanik/postgres-mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "A Model Context Protocol (MCP) server for PostgreSQL database management and analysis",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "postgres-mcp-server": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "start": "node dist/index.js",
13
+ "dev": "ts-node src/index.ts",
14
+ "prepare": "npm run build",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "keywords": [
18
+ "mcp",
19
+ "postgres",
20
+ "postgresql",
21
+ "database",
22
+ "model-context-protocol",
23
+ "anthropic",
24
+ "claude"
25
+ ],
26
+ "author": "",
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "@modelcontextprotocol/sdk": "^1.0.0",
30
+ "pg": "^8.13.1",
31
+ "uuid": "^11.0.3"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^22.10.2",
35
+ "@types/pg": "^8.11.10",
36
+ "@types/uuid": "^10.0.0",
37
+ "typescript": "^5.7.2"
38
+ },
39
+ "engines": {
40
+ "node": ">=18.0.0"
41
+ },
42
+ "files": [
43
+ "dist",
44
+ "README.md"
45
+ ],
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "git+https://github.com/Teja-sudo/postgres-mcp-server.git"
49
+ },
50
+ "publishConfig": {
51
+ "access": "public"
52
+ }
53
+ }