@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.
- package/LICENSE +21 -0
- package/README.md +237 -0
- package/dist/db-manager.d.ts +25 -0
- package/dist/db-manager.d.ts.map +1 -0
- package/dist/db-manager.js +148 -0
- package/dist/db-manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +358 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/analysis-tools.d.ts +24 -0
- package/dist/tools/analysis-tools.d.ts.map +1 -0
- package/dist/tools/analysis-tools.js +449 -0
- package/dist/tools/analysis-tools.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +21 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/schema-tools.d.ts +22 -0
- package/dist/tools/schema-tools.d.ts.map +1 -0
- package/dist/tools/schema-tools.js +189 -0
- package/dist/tools/schema-tools.js.map +1 -0
- package/dist/tools/server-tools.d.ts +28 -0
- package/dist/tools/server-tools.d.ts.map +1 -0
- package/dist/tools/server-tools.js +71 -0
- package/dist/tools/server-tools.js.map +1 -0
- package/dist/tools/sql-tools.d.ts +17 -0
- package/dist/tools/sql-tools.d.ts.map +1 -0
- package/dist/tools/sql-tools.js +134 -0
- package/dist/tools/sql-tools.js.map +1 -0
- package/dist/types.d.ts +83 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
5
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
6
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
7
|
+
const index_js_2 = require("./tools/index.js");
|
|
8
|
+
// Tool definitions
|
|
9
|
+
const tools = [
|
|
10
|
+
{
|
|
11
|
+
name: 'list_servers_and_dbs',
|
|
12
|
+
description: 'Lists all configured PostgreSQL servers and their databases. Can filter servers and databases by name. Use fetchDatabases=true to list databases (requires connecting to the server first).',
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: 'object',
|
|
15
|
+
properties: {
|
|
16
|
+
filter: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
description: 'Filter servers and databases by name (case-insensitive partial match)'
|
|
19
|
+
},
|
|
20
|
+
includeSystemDbs: {
|
|
21
|
+
type: 'boolean',
|
|
22
|
+
description: 'Include system databases (template0, template1)',
|
|
23
|
+
default: false
|
|
24
|
+
},
|
|
25
|
+
fetchDatabases: {
|
|
26
|
+
type: 'boolean',
|
|
27
|
+
description: 'Fetch list of databases from connected server',
|
|
28
|
+
default: false
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'switch_server_db',
|
|
35
|
+
description: 'Switch to a different PostgreSQL server and optionally a specific database. Must be called before using other database tools.',
|
|
36
|
+
inputSchema: {
|
|
37
|
+
type: 'object',
|
|
38
|
+
properties: {
|
|
39
|
+
server: {
|
|
40
|
+
type: 'string',
|
|
41
|
+
description: 'Name of the server to connect to (from POSTGRES_SERVERS config)'
|
|
42
|
+
},
|
|
43
|
+
database: {
|
|
44
|
+
type: 'string',
|
|
45
|
+
description: 'Name of the database to connect to (defaults to "postgres")'
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
required: ['server']
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'list_schemas',
|
|
53
|
+
description: 'Lists all database schemas available in the current PostgreSQL database.',
|
|
54
|
+
inputSchema: {
|
|
55
|
+
type: 'object',
|
|
56
|
+
properties: {
|
|
57
|
+
includeSystemSchemas: {
|
|
58
|
+
type: 'boolean',
|
|
59
|
+
description: 'Include system schemas (pg_catalog, information_schema, etc.)',
|
|
60
|
+
default: false
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'list_objects',
|
|
67
|
+
description: 'Lists database objects (tables, views, sequences, extensions) within a specified schema.',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
properties: {
|
|
71
|
+
schema: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'Schema name to list objects from'
|
|
74
|
+
},
|
|
75
|
+
objectType: {
|
|
76
|
+
type: 'string',
|
|
77
|
+
enum: ['table', 'view', 'sequence', 'extension', 'all'],
|
|
78
|
+
description: 'Type of objects to list',
|
|
79
|
+
default: 'all'
|
|
80
|
+
},
|
|
81
|
+
filter: {
|
|
82
|
+
type: 'string',
|
|
83
|
+
description: 'Filter objects by name (case-insensitive partial match)'
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
required: ['schema']
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: 'get_object_details',
|
|
91
|
+
description: 'Provides detailed information about a specific database object including columns, constraints, indexes, size, and row count.',
|
|
92
|
+
inputSchema: {
|
|
93
|
+
type: 'object',
|
|
94
|
+
properties: {
|
|
95
|
+
schema: {
|
|
96
|
+
type: 'string',
|
|
97
|
+
description: 'Schema name containing the object'
|
|
98
|
+
},
|
|
99
|
+
objectName: {
|
|
100
|
+
type: 'string',
|
|
101
|
+
description: 'Name of the object to get details for'
|
|
102
|
+
},
|
|
103
|
+
objectType: {
|
|
104
|
+
type: 'string',
|
|
105
|
+
enum: ['table', 'view', 'sequence'],
|
|
106
|
+
description: 'Type of the object'
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
required: ['schema', 'objectName']
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'execute_sql',
|
|
114
|
+
description: 'Executes SQL statements on the database. Read-only mode prevents write operations (INSERT, UPDATE, DELETE, etc.). Large outputs are written to a temp file and the file path is returned.',
|
|
115
|
+
inputSchema: {
|
|
116
|
+
type: 'object',
|
|
117
|
+
properties: {
|
|
118
|
+
sql: {
|
|
119
|
+
type: 'string',
|
|
120
|
+
description: 'SQL statement to execute'
|
|
121
|
+
},
|
|
122
|
+
maxRows: {
|
|
123
|
+
type: 'number',
|
|
124
|
+
description: 'Maximum rows to return directly (default: 1000). Larger results are written to file.',
|
|
125
|
+
default: 1000
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
required: ['sql']
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'explain_query',
|
|
133
|
+
description: 'Gets the execution plan for a SQL query, showing how PostgreSQL will process it. Can simulate hypothetical indexes if hypopg extension is installed.',
|
|
134
|
+
inputSchema: {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
sql: {
|
|
138
|
+
type: 'string',
|
|
139
|
+
description: 'SQL query to explain'
|
|
140
|
+
},
|
|
141
|
+
analyze: {
|
|
142
|
+
type: 'boolean',
|
|
143
|
+
description: 'Actually execute the query to get real timing (default: false)',
|
|
144
|
+
default: false
|
|
145
|
+
},
|
|
146
|
+
buffers: {
|
|
147
|
+
type: 'boolean',
|
|
148
|
+
description: 'Include buffer usage statistics',
|
|
149
|
+
default: false
|
|
150
|
+
},
|
|
151
|
+
format: {
|
|
152
|
+
type: 'string',
|
|
153
|
+
enum: ['text', 'json', 'yaml', 'xml'],
|
|
154
|
+
description: 'Output format for the plan',
|
|
155
|
+
default: 'json'
|
|
156
|
+
},
|
|
157
|
+
hypotheticalIndexes: {
|
|
158
|
+
type: 'array',
|
|
159
|
+
description: 'Hypothetical indexes to simulate (requires hypopg extension)',
|
|
160
|
+
items: {
|
|
161
|
+
type: 'object',
|
|
162
|
+
properties: {
|
|
163
|
+
table: {
|
|
164
|
+
type: 'string',
|
|
165
|
+
description: 'Table name for the hypothetical index'
|
|
166
|
+
},
|
|
167
|
+
columns: {
|
|
168
|
+
type: 'array',
|
|
169
|
+
items: { type: 'string' },
|
|
170
|
+
description: 'Columns to include in the index'
|
|
171
|
+
},
|
|
172
|
+
indexType: {
|
|
173
|
+
type: 'string',
|
|
174
|
+
description: 'Index type (btree, hash, gist, etc.)',
|
|
175
|
+
default: 'btree'
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
required: ['table', 'columns']
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
required: ['sql']
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
name: 'get_top_queries',
|
|
187
|
+
description: 'Reports the slowest SQL queries based on total execution time using pg_stat_statements data. Requires pg_stat_statements extension.',
|
|
188
|
+
inputSchema: {
|
|
189
|
+
type: 'object',
|
|
190
|
+
properties: {
|
|
191
|
+
limit: {
|
|
192
|
+
type: 'number',
|
|
193
|
+
description: 'Number of queries to return',
|
|
194
|
+
default: 10
|
|
195
|
+
},
|
|
196
|
+
orderBy: {
|
|
197
|
+
type: 'string',
|
|
198
|
+
enum: ['total_time', 'mean_time', 'calls'],
|
|
199
|
+
description: 'How to order the results',
|
|
200
|
+
default: 'total_time'
|
|
201
|
+
},
|
|
202
|
+
minCalls: {
|
|
203
|
+
type: 'number',
|
|
204
|
+
description: 'Minimum number of calls to include a query',
|
|
205
|
+
default: 1
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
name: 'analyze_workload_indexes',
|
|
212
|
+
description: 'Analyzes the database workload (using pg_stat_statements) to identify resource-intensive queries and recommends optimal indexes for them.',
|
|
213
|
+
inputSchema: {
|
|
214
|
+
type: 'object',
|
|
215
|
+
properties: {
|
|
216
|
+
topQueriesCount: {
|
|
217
|
+
type: 'number',
|
|
218
|
+
description: 'Number of top queries to analyze',
|
|
219
|
+
default: 20
|
|
220
|
+
},
|
|
221
|
+
includeHypothetical: {
|
|
222
|
+
type: 'boolean',
|
|
223
|
+
description: 'Include hypothetical index analysis (requires hypopg)',
|
|
224
|
+
default: false
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
name: 'analyze_query_indexes',
|
|
231
|
+
description: 'Analyzes specific SQL queries (up to 10) and recommends optimal indexes for them.',
|
|
232
|
+
inputSchema: {
|
|
233
|
+
type: 'object',
|
|
234
|
+
properties: {
|
|
235
|
+
queries: {
|
|
236
|
+
type: 'array',
|
|
237
|
+
items: { type: 'string' },
|
|
238
|
+
description: 'List of SQL queries to analyze (max 10)',
|
|
239
|
+
maxItems: 10
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
required: ['queries']
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: 'analyze_db_health',
|
|
247
|
+
description: 'Performs comprehensive database health checks including: buffer cache hit rates, connection health, constraint validation, index health (duplicate/unused/invalid), sequence limits, and vacuum health.',
|
|
248
|
+
inputSchema: {
|
|
249
|
+
type: 'object',
|
|
250
|
+
properties: {}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
];
|
|
254
|
+
// Create MCP server
|
|
255
|
+
const server = new index_js_1.Server({
|
|
256
|
+
name: 'postgres-mcp-server',
|
|
257
|
+
version: '1.0.0',
|
|
258
|
+
}, {
|
|
259
|
+
capabilities: {
|
|
260
|
+
tools: {},
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
// Handle list_tools request
|
|
264
|
+
server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
265
|
+
return { tools };
|
|
266
|
+
});
|
|
267
|
+
// Handle tool calls
|
|
268
|
+
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
269
|
+
const { name, arguments: args } = request.params;
|
|
270
|
+
try {
|
|
271
|
+
let result;
|
|
272
|
+
switch (name) {
|
|
273
|
+
case 'list_servers_and_dbs':
|
|
274
|
+
result = await (0, index_js_2.listServersAndDbs)(args);
|
|
275
|
+
break;
|
|
276
|
+
case 'switch_server_db':
|
|
277
|
+
result = await (0, index_js_2.switchServerDb)(args);
|
|
278
|
+
break;
|
|
279
|
+
case 'list_schemas':
|
|
280
|
+
result = await (0, index_js_2.listSchemas)(args);
|
|
281
|
+
break;
|
|
282
|
+
case 'list_objects':
|
|
283
|
+
result = await (0, index_js_2.listObjects)(args);
|
|
284
|
+
break;
|
|
285
|
+
case 'get_object_details':
|
|
286
|
+
result = await (0, index_js_2.getObjectDetails)(args);
|
|
287
|
+
break;
|
|
288
|
+
case 'execute_sql':
|
|
289
|
+
result = await (0, index_js_2.executeSql)(args);
|
|
290
|
+
// Special handling for large output
|
|
291
|
+
if (result.outputFile) {
|
|
292
|
+
return {
|
|
293
|
+
content: [
|
|
294
|
+
{
|
|
295
|
+
type: 'text',
|
|
296
|
+
text: JSON.stringify({
|
|
297
|
+
message: `Output too large (${result.rowCount} rows). Results written to file.`,
|
|
298
|
+
outputFile: result.outputFile,
|
|
299
|
+
rowCount: result.rowCount,
|
|
300
|
+
fields: result.fields,
|
|
301
|
+
hint: 'Read the file optimally using offset/limit or run the query with filters to reduce output.'
|
|
302
|
+
}, null, 2)
|
|
303
|
+
}
|
|
304
|
+
]
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
break;
|
|
308
|
+
case 'explain_query':
|
|
309
|
+
result = await (0, index_js_2.explainQuery)(args);
|
|
310
|
+
break;
|
|
311
|
+
case 'get_top_queries':
|
|
312
|
+
result = await (0, index_js_2.getTopQueries)(args);
|
|
313
|
+
break;
|
|
314
|
+
case 'analyze_workload_indexes':
|
|
315
|
+
result = await (0, index_js_2.analyzeWorkloadIndexes)(args);
|
|
316
|
+
break;
|
|
317
|
+
case 'analyze_query_indexes':
|
|
318
|
+
result = await (0, index_js_2.analyzeQueryIndexes)(args);
|
|
319
|
+
break;
|
|
320
|
+
case 'analyze_db_health':
|
|
321
|
+
result = await (0, index_js_2.analyzeDbHealth)();
|
|
322
|
+
break;
|
|
323
|
+
default:
|
|
324
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
325
|
+
}
|
|
326
|
+
return {
|
|
327
|
+
content: [
|
|
328
|
+
{
|
|
329
|
+
type: 'text',
|
|
330
|
+
text: JSON.stringify(result, null, 2)
|
|
331
|
+
}
|
|
332
|
+
]
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
catch (error) {
|
|
336
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
337
|
+
return {
|
|
338
|
+
content: [
|
|
339
|
+
{
|
|
340
|
+
type: 'text',
|
|
341
|
+
text: JSON.stringify({ error: errorMessage }, null, 2)
|
|
342
|
+
}
|
|
343
|
+
],
|
|
344
|
+
isError: true
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
// Start server
|
|
349
|
+
async function main() {
|
|
350
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
351
|
+
await server.connect(transport);
|
|
352
|
+
console.error('PostgreSQL MCP Server started');
|
|
353
|
+
}
|
|
354
|
+
main().catch((error) => {
|
|
355
|
+
console.error('Fatal error:', error);
|
|
356
|
+
process.exit(1);
|
|
357
|
+
});
|
|
358
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SlowQuery, IndexRecommendation, HealthCheckResult } from '../types.js';
|
|
2
|
+
export declare function getTopQueries(args: {
|
|
3
|
+
limit?: number;
|
|
4
|
+
orderBy?: 'total_time' | 'mean_time' | 'calls';
|
|
5
|
+
minCalls?: number;
|
|
6
|
+
}): Promise<SlowQuery[]>;
|
|
7
|
+
export declare function analyzeWorkloadIndexes(args: {
|
|
8
|
+
topQueriesCount?: number;
|
|
9
|
+
includeHypothetical?: boolean;
|
|
10
|
+
}): Promise<{
|
|
11
|
+
queries: SlowQuery[];
|
|
12
|
+
recommendations: IndexRecommendation[];
|
|
13
|
+
}>;
|
|
14
|
+
export declare function analyzeQueryIndexes(args: {
|
|
15
|
+
queries: string[];
|
|
16
|
+
}): Promise<{
|
|
17
|
+
queryAnalysis: Array<{
|
|
18
|
+
query: string;
|
|
19
|
+
recommendations: IndexRecommendation[];
|
|
20
|
+
}>;
|
|
21
|
+
summary: IndexRecommendation[];
|
|
22
|
+
}>;
|
|
23
|
+
export declare function analyzeDbHealth(): Promise<HealthCheckResult[]>;
|
|
24
|
+
//# sourceMappingURL=analysis-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis-tools.d.ts","sourceRoot":"","sources":["../../src/tools/analysis-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhF,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAqDvB;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,GAAG,OAAO,CAAC;IACV,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,eAAe,EAAE,mBAAmB,EAAE,CAAC;CACxC,CAAC,CAsBD;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,OAAO,CAAC;IACV,aAAa,EAAE,KAAK,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,mBAAmB,EAAE,CAAC;KACxC,CAAC,CAAC;IACH,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC,CAAC,CAkBD;AAyGD,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA+QpE"}
|