@zlash65/postgres-ssh-mcp 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/config.d.ts +3 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +122 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/connection/host-key-verifier.d.ts +13 -0
  8. package/dist/connection/host-key-verifier.d.ts.map +1 -0
  9. package/dist/connection/host-key-verifier.js +127 -0
  10. package/dist/connection/host-key-verifier.js.map +1 -0
  11. package/dist/connection/index.d.ts +7 -0
  12. package/dist/connection/index.d.ts.map +1 -0
  13. package/dist/connection/index.js +7 -0
  14. package/dist/connection/index.js.map +1 -0
  15. package/dist/connection/postgres-pool.d.ts +23 -0
  16. package/dist/connection/postgres-pool.d.ts.map +1 -0
  17. package/dist/connection/postgres-pool.js +295 -0
  18. package/dist/connection/postgres-pool.js.map +1 -0
  19. package/dist/connection/ssh-tunnel.d.ts +34 -0
  20. package/dist/connection/ssh-tunnel.d.ts.map +1 -0
  21. package/dist/connection/ssh-tunnel.js +295 -0
  22. package/dist/connection/ssh-tunnel.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +67 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lib/obfuscate.d.ts +2 -0
  28. package/dist/lib/obfuscate.d.ts.map +1 -0
  29. package/dist/lib/obfuscate.js +13 -0
  30. package/dist/lib/obfuscate.js.map +1 -0
  31. package/dist/lib/sql-validator.d.ts +6 -0
  32. package/dist/lib/sql-validator.d.ts.map +1 -0
  33. package/dist/lib/sql-validator.js +684 -0
  34. package/dist/lib/sql-validator.js.map +1 -0
  35. package/dist/lib/tool-response.d.ts +5 -0
  36. package/dist/lib/tool-response.d.ts.map +1 -0
  37. package/dist/lib/tool-response.js +30 -0
  38. package/dist/lib/tool-response.js.map +1 -0
  39. package/dist/server.d.ts +8 -0
  40. package/dist/server.d.ts.map +1 -0
  41. package/dist/server.js +24 -0
  42. package/dist/server.js.map +1 -0
  43. package/dist/tools/admin.d.ts +4 -0
  44. package/dist/tools/admin.d.ts.map +1 -0
  45. package/dist/tools/admin.js +184 -0
  46. package/dist/tools/admin.js.map +1 -0
  47. package/dist/tools/index.d.ts +8 -0
  48. package/dist/tools/index.d.ts.map +1 -0
  49. package/dist/tools/index.js +8 -0
  50. package/dist/tools/index.js.map +1 -0
  51. package/dist/tools/query.d.ts +4 -0
  52. package/dist/tools/query.d.ts.map +1 -0
  53. package/dist/tools/query.js +65 -0
  54. package/dist/tools/query.js.map +1 -0
  55. package/dist/tools/schema.d.ts +4 -0
  56. package/dist/tools/schema.d.ts.map +1 -0
  57. package/dist/tools/schema.js +189 -0
  58. package/dist/tools/schema.js.map +1 -0
  59. package/dist/types.d.ts +93 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +2 -0
  62. package/dist/types.js.map +1 -0
  63. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ export interface DatabaseConfig {
2
+ host: string;
3
+ port: number;
4
+ database: string;
5
+ user: string;
6
+ password: string;
7
+ }
8
+ export interface SSLPreference {
9
+ /** 'true' enables, 'false' disables, null means default behavior */
10
+ explicit: 'true' | 'false' | null;
11
+ ca?: string;
12
+ rejectUnauthorized: boolean;
13
+ }
14
+ export interface SSHTunnelConfig {
15
+ host: string;
16
+ port: number;
17
+ username: string;
18
+ privateKeyPath?: string;
19
+ privateKeyPassphrase?: string;
20
+ password?: string;
21
+ strictHostKey: boolean;
22
+ knownHostsPath?: string;
23
+ keepaliveInterval: number;
24
+ }
25
+ export interface TunnelTarget {
26
+ host: string;
27
+ port: number;
28
+ }
29
+ export type TunnelStatus = 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'failed';
30
+ export interface TunnelState {
31
+ status: TunnelStatus;
32
+ localPort: number | null;
33
+ uptime: number;
34
+ reconnectAttempts: number;
35
+ lastError?: string;
36
+ }
37
+ export interface ParsedConfig {
38
+ database: DatabaseConfig;
39
+ sslPreference: SSLPreference;
40
+ ssh?: SSHTunnelConfig;
41
+ readOnly: boolean;
42
+ queryTimeout: number;
43
+ maxRows: number;
44
+ }
45
+ export interface ConnectionStatus {
46
+ initialized: boolean;
47
+ reconnecting: boolean;
48
+ database: {
49
+ host: string;
50
+ port: number;
51
+ database: string;
52
+ user: string;
53
+ ssl: boolean;
54
+ };
55
+ tunnel?: TunnelState;
56
+ pool: {
57
+ totalCount: number;
58
+ idleCount: number;
59
+ waitingCount: number;
60
+ };
61
+ mode: 'read-only' | 'read-write';
62
+ maxRows: number;
63
+ queryTimeout: number;
64
+ }
65
+ export interface QueryField {
66
+ name: string;
67
+ dataTypeID: number;
68
+ }
69
+ export interface QueryResultWithMeta {
70
+ rows: Record<string, unknown>[];
71
+ rowCount: number;
72
+ truncated: boolean;
73
+ fields?: QueryField[];
74
+ command?: string;
75
+ }
76
+ export interface ToolResponse {
77
+ [key: string]: unknown;
78
+ content: Array<{
79
+ type: 'text';
80
+ text: string;
81
+ }>;
82
+ isError?: boolean;
83
+ }
84
+ export interface KnownHost {
85
+ hostname: string;
86
+ keyType: string;
87
+ publicKey: string;
88
+ }
89
+ export interface HostKeyVerificationResult {
90
+ verified: boolean;
91
+ reason: string;
92
+ }
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# 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,80 @@
1
+ {
2
+ "name": "@zlash65/postgres-ssh-mcp",
3
+ "version": "0.0.1",
4
+ "description": "PostgreSQL MCP Server with built-in SSH tunneling for secure database access through bastion hosts",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "postgres-ssh-mcp": "dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "scripts": {
17
+ "build": "tsc && shx chmod +x dist/index.js",
18
+ "prepack": "npm run build",
19
+ "start": "node dist/index.js",
20
+ "dev": "tsc --watch",
21
+ "lint": "eslint src/**/*.ts",
22
+ "test": "vitest run",
23
+ "test:docker": "bash scripts/test-docker.sh",
24
+ "test:unit": "vitest run --dir tests/unit",
25
+ "clean": "shx rm -rf dist",
26
+ "typecheck": "tsc --noEmit"
27
+ },
28
+ "keywords": [
29
+ "mcp",
30
+ "postgresql",
31
+ "postgres",
32
+ "ssh",
33
+ "tunnel",
34
+ "database",
35
+ "model-context-protocol",
36
+ "claude",
37
+ "ai",
38
+ "llm"
39
+ ],
40
+ "author": "",
41
+ "license": "MIT",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "git+https://github.com/Zlash65/postgres-ssh-mcp.git"
45
+ },
46
+ "bugs": {
47
+ "url": "https://github.com/Zlash65/postgres-ssh-mcp/issues"
48
+ },
49
+ "homepage": "https://github.com/Zlash65/postgres-ssh-mcp#readme",
50
+ "publishConfig": {
51
+ "access": "public"
52
+ },
53
+ "dependencies": {
54
+ "@modelcontextprotocol/sdk": "^1.25.1",
55
+ "pg": "^8.13.1",
56
+ "pg-connection-string": "^2.7.0",
57
+ "ssh2": "^1.16.0",
58
+ "zod": "^3.25.0"
59
+ },
60
+ "devDependencies": {
61
+ "@eslint/js": "^9.39.2",
62
+ "@semantic-release/changelog": "^6.0.3",
63
+ "@semantic-release/git": "^10.0.1",
64
+ "@types/node": "^22.10.2",
65
+ "@types/pg": "^8.11.10",
66
+ "@types/ssh2": "^1.15.1",
67
+ "@typescript-eslint/eslint-plugin": "^8.18.0",
68
+ "@typescript-eslint/parser": "^8.18.0",
69
+ "conventional-changelog-conventionalcommits": "^8.0.0",
70
+ "eslint": "^9.17.0",
71
+ "globals": "^16.5.0",
72
+ "semantic-release": "^24.2.9",
73
+ "shx": "^0.3.4",
74
+ "typescript": "^5.7.2",
75
+ "vitest": "^2.1.8"
76
+ },
77
+ "engines": {
78
+ "node": ">=18.0.0"
79
+ }
80
+ }