@neverinfamous/postgres-mcp 1.1.0 → 1.3.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.
Files changed (243) hide show
  1. package/README.md +95 -81
  2. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  3. package/dist/__tests__/mocks/adapter.js +0 -1
  4. package/dist/__tests__/mocks/adapter.js.map +1 -1
  5. package/dist/__tests__/mocks/pool.d.ts.map +1 -1
  6. package/dist/__tests__/mocks/pool.js +0 -1
  7. package/dist/__tests__/mocks/pool.js.map +1 -1
  8. package/dist/adapters/DatabaseAdapter.js +1 -1
  9. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  10. package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
  11. package/dist/adapters/postgresql/PostgresAdapter.js +78 -8
  12. package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
  13. package/dist/adapters/postgresql/prompts/backup.d.ts.map +1 -1
  14. package/dist/adapters/postgresql/prompts/backup.js +2 -3
  15. package/dist/adapters/postgresql/prompts/backup.js.map +1 -1
  16. package/dist/adapters/postgresql/prompts/citext.d.ts.map +1 -1
  17. package/dist/adapters/postgresql/prompts/citext.js +3 -4
  18. package/dist/adapters/postgresql/prompts/citext.js.map +1 -1
  19. package/dist/adapters/postgresql/prompts/extensionSetup.d.ts.map +1 -1
  20. package/dist/adapters/postgresql/prompts/extensionSetup.js +2 -3
  21. package/dist/adapters/postgresql/prompts/extensionSetup.js.map +1 -1
  22. package/dist/adapters/postgresql/prompts/health.d.ts.map +1 -1
  23. package/dist/adapters/postgresql/prompts/health.js +2 -3
  24. package/dist/adapters/postgresql/prompts/health.js.map +1 -1
  25. package/dist/adapters/postgresql/prompts/index.js +20 -27
  26. package/dist/adapters/postgresql/prompts/index.js.map +1 -1
  27. package/dist/adapters/postgresql/prompts/indexTuning.d.ts.map +1 -1
  28. package/dist/adapters/postgresql/prompts/indexTuning.js +2 -3
  29. package/dist/adapters/postgresql/prompts/indexTuning.js.map +1 -1
  30. package/dist/adapters/postgresql/prompts/kcache.d.ts.map +1 -1
  31. package/dist/adapters/postgresql/prompts/kcache.js +3 -4
  32. package/dist/adapters/postgresql/prompts/kcache.js.map +1 -1
  33. package/dist/adapters/postgresql/prompts/ltree.d.ts.map +1 -1
  34. package/dist/adapters/postgresql/prompts/ltree.js +5 -6
  35. package/dist/adapters/postgresql/prompts/ltree.js.map +1 -1
  36. package/dist/adapters/postgresql/prompts/partman.d.ts.map +1 -1
  37. package/dist/adapters/postgresql/prompts/partman.js +2 -3
  38. package/dist/adapters/postgresql/prompts/partman.js.map +1 -1
  39. package/dist/adapters/postgresql/prompts/pgcron.d.ts.map +1 -1
  40. package/dist/adapters/postgresql/prompts/pgcron.js +2 -3
  41. package/dist/adapters/postgresql/prompts/pgcron.js.map +1 -1
  42. package/dist/adapters/postgresql/prompts/pgcrypto.d.ts.map +1 -1
  43. package/dist/adapters/postgresql/prompts/pgcrypto.js +3 -4
  44. package/dist/adapters/postgresql/prompts/pgcrypto.js.map +1 -1
  45. package/dist/adapters/postgresql/prompts/pgvector.d.ts.map +1 -1
  46. package/dist/adapters/postgresql/prompts/pgvector.js +3 -4
  47. package/dist/adapters/postgresql/prompts/pgvector.js.map +1 -1
  48. package/dist/adapters/postgresql/prompts/postgis.d.ts.map +1 -1
  49. package/dist/adapters/postgresql/prompts/postgis.js +2 -3
  50. package/dist/adapters/postgresql/prompts/postgis.js.map +1 -1
  51. package/dist/adapters/postgresql/schemas/admin.d.ts +10 -5
  52. package/dist/adapters/postgresql/schemas/admin.d.ts.map +1 -1
  53. package/dist/adapters/postgresql/schemas/admin.js +10 -5
  54. package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
  55. package/dist/adapters/postgresql/schemas/backup.d.ts +8 -4
  56. package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
  57. package/dist/adapters/postgresql/schemas/backup.js +11 -4
  58. package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
  59. package/dist/adapters/postgresql/schemas/core.d.ts +54 -19
  60. package/dist/adapters/postgresql/schemas/core.d.ts.map +1 -1
  61. package/dist/adapters/postgresql/schemas/core.js +65 -17
  62. package/dist/adapters/postgresql/schemas/core.js.map +1 -1
  63. package/dist/adapters/postgresql/schemas/cron.d.ts +51 -32
  64. package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
  65. package/dist/adapters/postgresql/schemas/cron.js +64 -44
  66. package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
  67. package/dist/adapters/postgresql/schemas/extensions.d.ts +168 -73
  68. package/dist/adapters/postgresql/schemas/extensions.d.ts.map +1 -1
  69. package/dist/adapters/postgresql/schemas/extensions.js +179 -62
  70. package/dist/adapters/postgresql/schemas/extensions.js.map +1 -1
  71. package/dist/adapters/postgresql/schemas/index.d.ts +5 -5
  72. package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
  73. package/dist/adapters/postgresql/schemas/index.js +9 -7
  74. package/dist/adapters/postgresql/schemas/index.js.map +1 -1
  75. package/dist/adapters/postgresql/schemas/jsonb.d.ts +94 -42
  76. package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +1 -1
  77. package/dist/adapters/postgresql/schemas/jsonb.js +101 -30
  78. package/dist/adapters/postgresql/schemas/jsonb.js.map +1 -1
  79. package/dist/adapters/postgresql/schemas/monitoring.d.ts +28 -11
  80. package/dist/adapters/postgresql/schemas/monitoring.d.ts.map +1 -1
  81. package/dist/adapters/postgresql/schemas/monitoring.js +49 -24
  82. package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
  83. package/dist/adapters/postgresql/schemas/partitioning.d.ts +15 -11
  84. package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
  85. package/dist/adapters/postgresql/schemas/partitioning.js +17 -13
  86. package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
  87. package/dist/adapters/postgresql/schemas/performance.d.ts +62 -31
  88. package/dist/adapters/postgresql/schemas/performance.d.ts.map +1 -1
  89. package/dist/adapters/postgresql/schemas/performance.js +86 -24
  90. package/dist/adapters/postgresql/schemas/performance.js.map +1 -1
  91. package/dist/adapters/postgresql/schemas/postgis.d.ts +20 -0
  92. package/dist/adapters/postgresql/schemas/postgis.d.ts.map +1 -1
  93. package/dist/adapters/postgresql/schemas/postgis.js +20 -3
  94. package/dist/adapters/postgresql/schemas/postgis.js.map +1 -1
  95. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +35 -23
  96. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
  97. package/dist/adapters/postgresql/schemas/schema-mgmt.js +69 -26
  98. package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
  99. package/dist/adapters/postgresql/schemas/stats.d.ts +33 -20
  100. package/dist/adapters/postgresql/schemas/stats.d.ts.map +1 -1
  101. package/dist/adapters/postgresql/schemas/stats.js +36 -20
  102. package/dist/adapters/postgresql/schemas/stats.js.map +1 -1
  103. package/dist/adapters/postgresql/schemas/text-search.d.ts +8 -5
  104. package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
  105. package/dist/adapters/postgresql/schemas/text-search.js +15 -5
  106. package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
  107. package/dist/adapters/postgresql/tools/admin.d.ts.map +1 -1
  108. package/dist/adapters/postgresql/tools/admin.js +211 -140
  109. package/dist/adapters/postgresql/tools/admin.js.map +1 -1
  110. package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
  111. package/dist/adapters/postgresql/tools/backup/dump.js +410 -387
  112. package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
  113. package/dist/adapters/postgresql/tools/backup/planning.d.ts.map +1 -1
  114. package/dist/adapters/postgresql/tools/backup/planning.js +175 -172
  115. package/dist/adapters/postgresql/tools/backup/planning.js.map +1 -1
  116. package/dist/adapters/postgresql/tools/citext.d.ts.map +1 -1
  117. package/dist/adapters/postgresql/tools/citext.js +221 -163
  118. package/dist/adapters/postgresql/tools/citext.js.map +1 -1
  119. package/dist/adapters/postgresql/tools/core/convenience.d.ts +9 -1
  120. package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
  121. package/dist/adapters/postgresql/tools/core/convenience.js +96 -9
  122. package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
  123. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts +48 -0
  124. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts.map +1 -0
  125. package/dist/adapters/postgresql/tools/core/error-helpers.js +256 -0
  126. package/dist/adapters/postgresql/tools/core/error-helpers.js.map +1 -0
  127. package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
  128. package/dist/adapters/postgresql/tools/core/health.js +23 -6
  129. package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
  130. package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
  131. package/dist/adapters/postgresql/tools/core/indexes.js +45 -4
  132. package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
  133. package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
  134. package/dist/adapters/postgresql/tools/core/objects.js +104 -85
  135. package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
  136. package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
  137. package/dist/adapters/postgresql/tools/core/query.js +100 -42
  138. package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
  139. package/dist/adapters/postgresql/tools/core/schemas.d.ts +52 -25
  140. package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
  141. package/dist/adapters/postgresql/tools/core/schemas.js +55 -25
  142. package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
  143. package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
  144. package/dist/adapters/postgresql/tools/core/tables.js +74 -30
  145. package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
  146. package/dist/adapters/postgresql/tools/cron.d.ts.map +1 -1
  147. package/dist/adapters/postgresql/tools/cron.js +274 -179
  148. package/dist/adapters/postgresql/tools/cron.js.map +1 -1
  149. package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +1 -1
  150. package/dist/adapters/postgresql/tools/jsonb/advanced.js +372 -284
  151. package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +1 -1
  152. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +1 -1
  153. package/dist/adapters/postgresql/tools/jsonb/basic.js +617 -398
  154. package/dist/adapters/postgresql/tools/jsonb/basic.js.map +1 -1
  155. package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
  156. package/dist/adapters/postgresql/tools/kcache.js +282 -220
  157. package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
  158. package/dist/adapters/postgresql/tools/ltree.d.ts.map +1 -1
  159. package/dist/adapters/postgresql/tools/ltree.js +126 -35
  160. package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
  161. package/dist/adapters/postgresql/tools/monitoring.d.ts.map +1 -1
  162. package/dist/adapters/postgresql/tools/monitoring.js +59 -40
  163. package/dist/adapters/postgresql/tools/monitoring.js.map +1 -1
  164. package/dist/adapters/postgresql/tools/partitioning.d.ts.map +1 -1
  165. package/dist/adapters/postgresql/tools/partitioning.js +150 -15
  166. package/dist/adapters/postgresql/tools/partitioning.js.map +1 -1
  167. package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
  168. package/dist/adapters/postgresql/tools/partman/management.js +12 -5
  169. package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
  170. package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
  171. package/dist/adapters/postgresql/tools/partman/operations.js +135 -22
  172. package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
  173. package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
  174. package/dist/adapters/postgresql/tools/performance/analysis.js +264 -160
  175. package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
  176. package/dist/adapters/postgresql/tools/performance/explain.d.ts.map +1 -1
  177. package/dist/adapters/postgresql/tools/performance/explain.js +61 -21
  178. package/dist/adapters/postgresql/tools/performance/explain.js.map +1 -1
  179. package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
  180. package/dist/adapters/postgresql/tools/performance/monitoring.js +44 -7
  181. package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
  182. package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
  183. package/dist/adapters/postgresql/tools/performance/optimization.js +92 -81
  184. package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
  185. package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
  186. package/dist/adapters/postgresql/tools/performance/stats.js +128 -37
  187. package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
  188. package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
  189. package/dist/adapters/postgresql/tools/pgcrypto.js +242 -87
  190. package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
  191. package/dist/adapters/postgresql/tools/postgis/advanced.d.ts.map +1 -1
  192. package/dist/adapters/postgresql/tools/postgis/advanced.js +293 -201
  193. package/dist/adapters/postgresql/tools/postgis/advanced.js.map +1 -1
  194. package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
  195. package/dist/adapters/postgresql/tools/postgis/basic.js +359 -249
  196. package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
  197. package/dist/adapters/postgresql/tools/postgis/standalone.d.ts.map +1 -1
  198. package/dist/adapters/postgresql/tools/postgis/standalone.js +135 -51
  199. package/dist/adapters/postgresql/tools/postgis/standalone.js.map +1 -1
  200. package/dist/adapters/postgresql/tools/schema.d.ts.map +1 -1
  201. package/dist/adapters/postgresql/tools/schema.js +515 -226
  202. package/dist/adapters/postgresql/tools/schema.js.map +1 -1
  203. package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
  204. package/dist/adapters/postgresql/tools/stats/advanced.js +515 -476
  205. package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
  206. package/dist/adapters/postgresql/tools/stats/basic.d.ts.map +1 -1
  207. package/dist/adapters/postgresql/tools/stats/basic.js +302 -293
  208. package/dist/adapters/postgresql/tools/stats/basic.js.map +1 -1
  209. package/dist/adapters/postgresql/tools/text.d.ts.map +1 -1
  210. package/dist/adapters/postgresql/tools/text.js +398 -220
  211. package/dist/adapters/postgresql/tools/text.js.map +1 -1
  212. package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
  213. package/dist/adapters/postgresql/tools/transactions.js +157 -50
  214. package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
  215. package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +1 -1
  216. package/dist/adapters/postgresql/tools/vector/advanced.js +70 -38
  217. package/dist/adapters/postgresql/tools/vector/advanced.js.map +1 -1
  218. package/dist/adapters/postgresql/tools/vector/basic.d.ts +8 -0
  219. package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +1 -1
  220. package/dist/adapters/postgresql/tools/vector/basic.js +194 -82
  221. package/dist/adapters/postgresql/tools/vector/basic.js.map +1 -1
  222. package/dist/cli/args.d.ts +2 -0
  223. package/dist/cli/args.d.ts.map +1 -1
  224. package/dist/cli/args.js +15 -0
  225. package/dist/cli/args.js.map +1 -1
  226. package/dist/cli.js +7 -6
  227. package/dist/cli.js.map +1 -1
  228. package/dist/codemode/api.d.ts.map +1 -1
  229. package/dist/codemode/api.js +4 -3
  230. package/dist/codemode/api.js.map +1 -1
  231. package/dist/constants/ServerInstructions.d.ts +1 -1
  232. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  233. package/dist/constants/ServerInstructions.js +76 -34
  234. package/dist/constants/ServerInstructions.js.map +1 -1
  235. package/dist/filtering/ToolConstants.d.ts +29 -13
  236. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  237. package/dist/filtering/ToolConstants.js +44 -27
  238. package/dist/filtering/ToolConstants.js.map +1 -1
  239. package/dist/utils/logger.js +2 -2
  240. package/dist/utils/logger.js.map +1 -1
  241. package/dist/utils/progress-utils.js +1 -1
  242. package/dist/utils/progress-utils.js.map +1 -1
  243. package/package.json +13 -9
@@ -15,21 +15,22 @@ import { z } from "zod";
15
15
  * Schema for querying enhanced statistics with kcache data.
16
16
  * Joins pg_stat_statements with pg_stat_kcache for full picture.
17
17
  */
18
- export const KcacheQueryStatsSchema = z.preprocess(normalizeOptionalParams, z.object({
18
+ export const KcacheQueryStatsSchemaBase = z.object({
19
19
  limit: z
20
20
  .number()
21
21
  .optional()
22
- .describe("Maximum number of queries to return (default: 50)"),
22
+ .describe("Maximum number of queries to return (default: 20)"),
23
23
  orderBy: z
24
- .enum(["total_time", "cpu_time", "reads", "writes"])
24
+ .string()
25
25
  .optional()
26
- .describe("Order results by metric (default: total_time)"),
26
+ .describe("Order results by metric (default: total_time). Valid: total_time, cpu_time, reads, writes"),
27
27
  minCalls: z.number().optional().describe("Minimum call count to include"),
28
28
  queryPreviewLength: z
29
29
  .number()
30
30
  .optional()
31
31
  .describe("Characters for query preview (default: 100, max: 500, 0 for full)"),
32
- }));
32
+ });
33
+ export const KcacheQueryStatsSchema = z.preprocess(normalizeOptionalParams, KcacheQueryStatsSchemaBase);
33
34
  /**
34
35
  * Schema for top resource consumers query.
35
36
  */
@@ -42,19 +43,54 @@ export const KcacheTopConsumersSchema = z.object({
42
43
  .optional()
43
44
  .describe("Number of top queries to return (default: 10)"),
44
45
  });
46
+ /**
47
+ * Base schema for MCP visibility - pg_kcache_top_cpu parameters.
48
+ */
49
+ export const KcacheTopCpuSchemaBase = z.object({
50
+ limit: z
51
+ .number()
52
+ .optional()
53
+ .describe("Number of top queries to return (default: 10)"),
54
+ queryPreviewLength: z
55
+ .number()
56
+ .optional()
57
+ .describe("Characters for query preview (default: 100, max: 500, 0 for full)"),
58
+ });
59
+ /**
60
+ * Base schema for MCP visibility - pg_kcache_top_io parameters.
61
+ */
62
+ export const KcacheTopIoSchemaBase = z.object({
63
+ type: z
64
+ .enum(["reads", "writes", "both"])
65
+ .optional()
66
+ .describe("I/O type to rank by (default: both)"),
67
+ ioType: z
68
+ .enum(["reads", "writes", "both"])
69
+ .optional()
70
+ .describe("Alias for type"),
71
+ limit: z
72
+ .number()
73
+ .optional()
74
+ .describe("Number of top queries to return (default: 10)"),
75
+ queryPreviewLength: z
76
+ .number()
77
+ .optional()
78
+ .describe("Characters for query preview (default: 100, max: 500, 0 for full)"),
79
+ });
45
80
  /**
46
81
  * Schema for database-level aggregation.
47
82
  */
48
- export const KcacheDatabaseStatsSchema = z.preprocess(normalizeOptionalParams, z.object({
83
+ export const KcacheDatabaseStatsSchemaBase = z.object({
49
84
  database: z
50
85
  .string()
51
86
  .optional()
52
87
  .describe("Database name (current database if omitted)"),
53
- }));
88
+ });
89
+ export const KcacheDatabaseStatsSchema = z.preprocess(normalizeOptionalParams, KcacheDatabaseStatsSchemaBase);
54
90
  /**
55
91
  * Schema for identifying resource-bound queries.
56
92
  */
57
- export const KcacheResourceAnalysisSchema = z.preprocess(normalizeOptionalParams, z.object({
93
+ export const KcacheResourceAnalysisSchemaBase = z.object({
58
94
  queryId: z
59
95
  .string()
60
96
  .optional()
@@ -66,13 +102,14 @@ export const KcacheResourceAnalysisSchema = z.preprocess(normalizeOptionalParams
66
102
  limit: z
67
103
  .number()
68
104
  .optional()
69
- .describe("Maximum number of queries to return (default: 50)"),
105
+ .describe("Maximum number of queries to return (default: 20)"),
70
106
  minCalls: z.number().optional().describe("Minimum call count to include"),
71
107
  queryPreviewLength: z
72
108
  .number()
73
109
  .optional()
74
110
  .describe("Characters for query preview (default: 100, max: 500, 0 for full)"),
75
- }));
111
+ });
112
+ export const KcacheResourceAnalysisSchema = z.preprocess(normalizeOptionalParams, KcacheResourceAnalysisSchemaBase);
76
113
  // =============================================================================
77
114
  // citext Schemas
78
115
  // =============================================================================
@@ -183,7 +220,7 @@ export const CitextAnalyzeCandidatesSchemaBase = z.object({
183
220
  * Schema for analyzing candidate columns for citext conversion.
184
221
  * Preprocesses to handle empty/null params.
185
222
  */
186
- export const CitextAnalyzeCandidatesSchema = z.preprocess(normalizeOptionalParams, CitextAnalyzeCandidatesSchemaBase);
223
+ export const CitextAnalyzeCandidatesSchema = z.preprocess((input) => preprocessCitextTableParams(normalizeOptionalParams(input)), CitextAnalyzeCandidatesSchemaBase);
187
224
  /**
188
225
  * Base schema for MCP visibility (shows all parameters including aliases).
189
226
  */
@@ -449,12 +486,13 @@ export const LtreeMatchSchema = z.preprocess((input) => {
449
486
  /**
450
487
  * Schema for listing ltree columns in the database.
451
488
  */
452
- export const LtreeListColumnsSchema = z.preprocess(normalizeOptionalParams, z.object({
489
+ export const LtreeListColumnsSchemaBase = z.object({
453
490
  schema: z
454
491
  .string()
455
492
  .optional()
456
493
  .describe("Schema name to filter (all schemas if omitted)"),
457
- }));
494
+ });
495
+ export const LtreeListColumnsSchema = z.preprocess(normalizeOptionalParams, LtreeListColumnsSchemaBase);
458
496
  /**
459
497
  * Schema for converting a text column to ltree.
460
498
  * Accepts 'tableName'/'name' as aliases for 'table', 'col' as alias for 'column'.
@@ -480,6 +518,15 @@ export const LtreeIndexSchema = z.preprocess(preprocessLtreeTableParams, z.objec
480
518
  // =============================================================================
481
519
  // pgcrypto Schemas
482
520
  // =============================================================================
521
+ /**
522
+ * Base schema for MCP visibility — shows all parameters with relaxed validation.
523
+ * Valid algorithm values described in text for MCP clients.
524
+ */
525
+ export const PgcryptoHashSchemaBase = z.object({
526
+ data: z.string().describe("Data to hash"),
527
+ algorithm: z.string().describe("Hash algorithm"),
528
+ encoding: z.string().optional().describe("Output encoding (default: hex)"),
529
+ });
483
530
  /**
484
531
  * Schema for hashing data with digest().
485
532
  */
@@ -493,6 +540,15 @@ export const PgcryptoHashSchema = z.object({
493
540
  .optional()
494
541
  .describe("Output encoding (default: hex)"),
495
542
  });
543
+ /**
544
+ * Base schema for MCP visibility — shows all parameters with relaxed validation.
545
+ */
546
+ export const PgcryptoHmacSchemaBase = z.object({
547
+ data: z.string().describe("Data to authenticate"),
548
+ key: z.string().describe("Secret key for HMAC"),
549
+ algorithm: z.string().describe("Hash algorithm"),
550
+ encoding: z.string().optional().describe("Output encoding (default: hex)"),
551
+ });
496
552
  /**
497
553
  * Schema for HMAC authentication.
498
554
  */
@@ -562,6 +618,13 @@ export const PgcryptoDecryptSchema = PgcryptoDecryptSchemaBase.transform((data)
562
618
  .refine((data) => data.password !== undefined, {
563
619
  message: "password (or key alias) is required",
564
620
  });
621
+ /**
622
+ * Base schema for MCP visibility — shows all parameters with relaxed validation.
623
+ */
624
+ export const PgcryptoRandomBytesSchemaBase = z.object({
625
+ length: z.number().describe("Number of random bytes to generate (1-1024)"),
626
+ encoding: z.string().optional().describe("Output encoding (default: hex)"),
627
+ });
565
628
  /**
566
629
  * Schema for generating random bytes.
567
630
  */
@@ -576,6 +639,18 @@ export const PgcryptoRandomBytesSchema = z.object({
576
639
  .optional()
577
640
  .describe("Output encoding (default: hex)"),
578
641
  });
642
+ /**
643
+ * Base schema for MCP visibility — shows all parameters with relaxed validation.
644
+ */
645
+ export const PgcryptoGenSaltSchemaBase = z.object({
646
+ type: z
647
+ .string()
648
+ .describe("Salt type: bf (bcrypt, recommended), md5, xdes, or des"),
649
+ iterations: z
650
+ .number()
651
+ .optional()
652
+ .describe("Iteration count (for bf: 4-31, for xdes: odd 1-16777215)"),
653
+ });
579
654
  /**
580
655
  * Schema for generating password salt.
581
656
  */
@@ -617,13 +692,16 @@ export const KcacheCreateExtensionOutputSchema = z
617
692
  */
618
693
  export const KcacheQueryStatsOutputSchema = z
619
694
  .object({
695
+ success: z.boolean().optional().describe("Whether query succeeded"),
620
696
  queries: z
621
697
  .array(z.record(z.string(), z.unknown()))
698
+ .optional()
622
699
  .describe("Query statistics with CPU/IO metrics"),
623
- count: z.number().describe("Number of queries returned"),
624
- orderBy: z.string().describe("Order by metric"),
625
- truncated: z.boolean().describe("Results were truncated"),
626
- totalCount: z.number().describe("Total available count"),
700
+ count: z.number().optional().describe("Number of queries returned"),
701
+ orderBy: z.string().optional().describe("Order by metric"),
702
+ truncated: z.boolean().optional().describe("Results were truncated"),
703
+ totalCount: z.number().optional().describe("Total available count"),
704
+ error: z.string().optional().describe("Error message"),
627
705
  })
628
706
  .describe("Query statistics with OS-level metrics");
629
707
  /**
@@ -631,13 +709,16 @@ export const KcacheQueryStatsOutputSchema = z
631
709
  */
632
710
  export const KcacheTopCpuOutputSchema = z
633
711
  .object({
712
+ success: z.boolean().optional().describe("Whether query succeeded"),
634
713
  topCpuQueries: z
635
714
  .array(z.record(z.string(), z.unknown()))
715
+ .optional()
636
716
  .describe("Top CPU-consuming queries"),
637
- count: z.number().describe("Number of queries returned"),
638
- description: z.string().describe("Result description"),
639
- truncated: z.boolean().describe("Results were truncated"),
640
- totalCount: z.number().describe("Total available count"),
717
+ count: z.number().optional().describe("Number of queries returned"),
718
+ description: z.string().optional().describe("Result description"),
719
+ truncated: z.boolean().optional().describe("Results were truncated"),
720
+ totalCount: z.number().optional().describe("Total available count"),
721
+ error: z.string().optional().describe("Error message"),
641
722
  })
642
723
  .describe("Top CPU-consuming queries result");
643
724
  /**
@@ -645,14 +726,20 @@ export const KcacheTopCpuOutputSchema = z
645
726
  */
646
727
  export const KcacheTopIoOutputSchema = z
647
728
  .object({
729
+ success: z.boolean().optional().describe("Whether query succeeded"),
648
730
  topIoQueries: z
649
731
  .array(z.record(z.string(), z.unknown()))
732
+ .optional()
650
733
  .describe("Top I/O-consuming queries"),
651
- count: z.number().describe("Number of queries returned"),
652
- ioType: z.enum(["reads", "writes", "both"]).describe("I/O type ranked by"),
653
- description: z.string().describe("Result description"),
654
- truncated: z.boolean().describe("Results were truncated"),
655
- totalCount: z.number().describe("Total available count"),
734
+ count: z.number().optional().describe("Number of queries returned"),
735
+ ioType: z
736
+ .enum(["reads", "writes", "both"])
737
+ .optional()
738
+ .describe("I/O type ranked by"),
739
+ description: z.string().optional().describe("Result description"),
740
+ truncated: z.boolean().optional().describe("Results were truncated"),
741
+ totalCount: z.number().optional().describe("Total available count"),
742
+ error: z.string().optional().describe("Error message"),
656
743
  })
657
744
  .describe("Top I/O-consuming queries result");
658
745
  /**
@@ -660,10 +747,13 @@ export const KcacheTopIoOutputSchema = z
660
747
  */
661
748
  export const KcacheDatabaseStatsOutputSchema = z
662
749
  .object({
750
+ success: z.boolean().optional().describe("Whether query succeeded"),
663
751
  databaseStats: z
664
752
  .array(z.record(z.string(), z.unknown()))
753
+ .optional()
665
754
  .describe("Database-level statistics"),
666
- count: z.number().describe("Number of databases"),
755
+ count: z.number().optional().describe("Number of databases"),
756
+ error: z.string().optional().describe("Error message"),
667
757
  })
668
758
  .describe("Database-level aggregated statistics");
669
759
  /**
@@ -671,10 +761,12 @@ export const KcacheDatabaseStatsOutputSchema = z
671
761
  */
672
762
  export const KcacheResourceAnalysisOutputSchema = z
673
763
  .object({
764
+ success: z.boolean().optional().describe("Whether analysis succeeded"),
674
765
  queries: z
675
766
  .array(z.record(z.string(), z.unknown()))
767
+ .optional()
676
768
  .describe("Analyzed queries with resource classification"),
677
- count: z.number().describe("Number of queries analyzed"),
769
+ count: z.number().optional().describe("Number of queries analyzed"),
678
770
  summary: z
679
771
  .object({
680
772
  cpuBound: z.number().describe("CPU-bound query count"),
@@ -682,10 +774,12 @@ export const KcacheResourceAnalysisOutputSchema = z
682
774
  balanced: z.number().describe("Balanced query count"),
683
775
  threshold: z.number().describe("Classification threshold"),
684
776
  })
777
+ .optional()
685
778
  .describe("Resource classification summary"),
686
- recommendations: z.array(z.string()).describe("Recommendations"),
687
- truncated: z.boolean().describe("Results were truncated"),
688
- totalCount: z.number().describe("Total available count"),
779
+ recommendations: z.array(z.string()).optional().describe("Recommendations"),
780
+ truncated: z.boolean().optional().describe("Results were truncated"),
781
+ totalCount: z.number().optional().describe("Total available count"),
782
+ error: z.string().optional().describe("Error message"),
689
783
  })
690
784
  .describe("Resource classification analysis result");
691
785
  /**
@@ -694,8 +788,9 @@ export const KcacheResourceAnalysisOutputSchema = z
694
788
  export const KcacheResetOutputSchema = z
695
789
  .object({
696
790
  success: z.boolean().describe("Whether reset succeeded"),
697
- message: z.string().describe("Status message"),
698
- note: z.string().describe("Additional note"),
791
+ message: z.string().optional().describe("Status message"),
792
+ note: z.string().optional().describe("Additional note"),
793
+ error: z.string().optional().describe("Error message"),
699
794
  })
700
795
  .describe("pg_stat_kcache reset result");
701
796
  // ============================================================================
@@ -762,12 +857,14 @@ export const CitextListColumnsOutputSchema = z
762
857
  */
763
858
  export const CitextAnalyzeCandidatesOutputSchema = z
764
859
  .object({
860
+ success: z.boolean().optional().describe("Whether analysis succeeded"),
765
861
  candidates: z
766
862
  .array(z.record(z.string(), z.unknown()))
863
+ .optional()
767
864
  .describe("Candidate columns"),
768
- count: z.number().describe("Number of candidates returned"),
769
- totalCount: z.number().describe("Total available count"),
770
- truncated: z.boolean().describe("Results were truncated"),
865
+ count: z.number().optional().describe("Number of candidates returned"),
866
+ totalCount: z.number().optional().describe("Total available count"),
867
+ truncated: z.boolean().optional().describe("Results were truncated"),
771
868
  limit: z.number().optional().describe("Limit applied"),
772
869
  table: z.string().optional().describe("Table filter applied"),
773
870
  schema: z.string().optional().describe("Schema filter applied"),
@@ -776,13 +873,18 @@ export const CitextAnalyzeCandidatesOutputSchema = z
776
873
  highConfidence: z.number().describe("High confidence count"),
777
874
  mediumConfidence: z.number().describe("Medium confidence count"),
778
875
  })
876
+ .optional()
779
877
  .describe("Confidence summary"),
780
- recommendation: z.string().describe("Recommendation"),
878
+ recommendation: z.string().optional().describe("Recommendation"),
781
879
  excludedSchemas: z
782
880
  .array(z.string())
783
881
  .optional()
784
882
  .describe("Excluded schemas"),
785
- patternsUsed: z.array(z.string()).describe("Search patterns used"),
883
+ patternsUsed: z
884
+ .array(z.string())
885
+ .optional()
886
+ .describe("Search patterns used"),
887
+ error: z.string().optional().describe("Error message"),
786
888
  })
787
889
  .describe("Candidate analysis result");
788
890
  /**
@@ -804,7 +906,8 @@ export const CitextCompareOutputSchema = z
804
906
  */
805
907
  export const CitextSchemaAdvisorOutputSchema = z
806
908
  .object({
807
- table: z.string().describe("Analyzed table"),
909
+ success: z.boolean().optional().describe("Whether analysis succeeded"),
910
+ table: z.string().optional().describe("Analyzed table"),
808
911
  recommendations: z
809
912
  .array(z.object({
810
913
  column: z.string().describe("Column name"),
@@ -816,6 +919,7 @@ export const CitextSchemaAdvisorOutputSchema = z
816
919
  confidence: z.enum(["high", "medium", "low"]).describe("Confidence"),
817
920
  reason: z.string().describe("Reason for recommendation"),
818
921
  }))
922
+ .optional()
819
923
  .describe("Column recommendations"),
820
924
  summary: z
821
925
  .object({
@@ -824,8 +928,10 @@ export const CitextSchemaAdvisorOutputSchema = z
824
928
  highConfidence: z.number().describe("High confidence count"),
825
929
  alreadyCitext: z.number().describe("Already citext count"),
826
930
  })
931
+ .optional()
827
932
  .describe("Summary statistics"),
828
- nextSteps: z.array(z.string()).describe("Suggested next steps"),
933
+ nextSteps: z.array(z.string()).optional().describe("Suggested next steps"),
934
+ error: z.string().optional().describe("Error message"),
829
935
  })
830
936
  .describe("Schema advisor result");
831
937
  // ============================================================================
@@ -892,13 +998,16 @@ export const LtreeLcaOutputSchema = z
892
998
  */
893
999
  export const LtreeMatchOutputSchema = z
894
1000
  .object({
895
- pattern: z.string().describe("Query pattern"),
1001
+ success: z.boolean().optional().describe("Whether match succeeded"),
1002
+ pattern: z.string().optional().describe("Query pattern"),
896
1003
  results: z
897
1004
  .array(z.record(z.string(), z.unknown()))
1005
+ .optional()
898
1006
  .describe("Matching results"),
899
- count: z.number().describe("Number of results"),
1007
+ count: z.number().optional().describe("Number of results"),
900
1008
  truncated: z.boolean().optional().describe("Results were truncated"),
901
1009
  totalCount: z.number().optional().describe("Total available count"),
1010
+ error: z.string().optional().describe("Error message"),
902
1011
  })
903
1012
  .describe("Pattern match result");
904
1013
  /**
@@ -945,12 +1054,13 @@ export const LtreeConvertColumnOutputSchema = z
945
1054
  export const LtreeCreateIndexOutputSchema = z
946
1055
  .object({
947
1056
  success: z.boolean().describe("Whether index was created"),
948
- message: z.string().describe("Status message"),
949
- indexName: z.string().describe("Index name"),
1057
+ message: z.string().optional().describe("Status message"),
1058
+ indexName: z.string().optional().describe("Index name"),
950
1059
  alreadyExists: z.boolean().optional().describe("Index already existed"),
951
1060
  table: z.string().optional().describe("Qualified table name"),
952
1061
  column: z.string().optional().describe("Column name"),
953
1062
  indexType: z.string().optional().describe("Index type (gist)"),
1063
+ error: z.string().optional().describe("Error message"),
954
1064
  })
955
1065
  .describe("Index creation result");
956
1066
  // ============================================================================
@@ -971,10 +1081,11 @@ export const PgcryptoCreateExtensionOutputSchema = z
971
1081
  export const PgcryptoHashOutputSchema = z
972
1082
  .object({
973
1083
  success: z.boolean().describe("Whether hash succeeded"),
974
- algorithm: z.string().describe("Hash algorithm used"),
975
- encoding: z.string().describe("Output encoding"),
976
- hash: z.string().describe("Hash result"),
977
- inputLength: z.number().describe("Input data length"),
1084
+ algorithm: z.string().optional().describe("Hash algorithm used"),
1085
+ encoding: z.string().optional().describe("Output encoding"),
1086
+ hash: z.string().optional().describe("Hash result"),
1087
+ inputLength: z.number().optional().describe("Input data length"),
1088
+ error: z.string().optional().describe("Error message"),
978
1089
  })
979
1090
  .describe("Hash result");
980
1091
  /**
@@ -983,9 +1094,10 @@ export const PgcryptoHashOutputSchema = z
983
1094
  export const PgcryptoHmacOutputSchema = z
984
1095
  .object({
985
1096
  success: z.boolean().describe("Whether HMAC succeeded"),
986
- algorithm: z.string().describe("HMAC algorithm used"),
987
- encoding: z.string().describe("Output encoding"),
988
- hmac: z.string().describe("HMAC result"),
1097
+ algorithm: z.string().optional().describe("HMAC algorithm used"),
1098
+ encoding: z.string().optional().describe("Output encoding"),
1099
+ hmac: z.string().optional().describe("HMAC result"),
1100
+ error: z.string().optional().describe("Error message"),
989
1101
  })
990
1102
  .describe("HMAC result");
991
1103
  /**
@@ -994,8 +1106,9 @@ export const PgcryptoHmacOutputSchema = z
994
1106
  export const PgcryptoEncryptOutputSchema = z
995
1107
  .object({
996
1108
  success: z.boolean().describe("Whether encryption succeeded"),
997
- encrypted: z.string().describe("Encrypted data"),
998
- encoding: z.string().describe("Output encoding"),
1109
+ encrypted: z.string().optional().describe("Encrypted data"),
1110
+ encoding: z.string().optional().describe("Output encoding"),
1111
+ error: z.string().optional().describe("Error message"),
999
1112
  })
1000
1113
  .describe("Encryption result");
1001
1114
  /**
@@ -1004,8 +1117,9 @@ export const PgcryptoEncryptOutputSchema = z
1004
1117
  export const PgcryptoDecryptOutputSchema = z
1005
1118
  .object({
1006
1119
  success: z.boolean().describe("Whether decryption succeeded"),
1007
- decrypted: z.string().describe("Decrypted data"),
1008
- verified: z.boolean().describe("Whether decryption verified"),
1120
+ decrypted: z.string().optional().describe("Decrypted data"),
1121
+ verified: z.boolean().optional().describe("Whether decryption verified"),
1122
+ error: z.string().optional().describe("Error message"),
1009
1123
  })
1010
1124
  .describe("Decryption result");
1011
1125
  /**
@@ -1014,9 +1128,10 @@ export const PgcryptoDecryptOutputSchema = z
1014
1128
  export const PgcryptoGenRandomUuidOutputSchema = z
1015
1129
  .object({
1016
1130
  success: z.boolean().describe("Whether generation succeeded"),
1017
- uuids: z.array(z.string()).describe("Generated UUIDs"),
1018
- count: z.number().describe("Number of UUIDs generated"),
1131
+ uuids: z.array(z.string()).optional().describe("Generated UUIDs"),
1132
+ count: z.number().optional().describe("Number of UUIDs generated"),
1019
1133
  uuid: z.string().optional().describe("First UUID (for single requests)"),
1134
+ error: z.string().optional().describe("Error message"),
1020
1135
  })
1021
1136
  .describe("UUID generation result");
1022
1137
  /**
@@ -1025,9 +1140,10 @@ export const PgcryptoGenRandomUuidOutputSchema = z
1025
1140
  export const PgcryptoGenRandomBytesOutputSchema = z
1026
1141
  .object({
1027
1142
  success: z.boolean().describe("Whether generation succeeded"),
1028
- randomBytes: z.string().describe("Random bytes"),
1029
- length: z.number().describe("Number of bytes"),
1030
- encoding: z.string().describe("Output encoding"),
1143
+ randomBytes: z.string().optional().describe("Random bytes"),
1144
+ length: z.number().optional().describe("Number of bytes"),
1145
+ encoding: z.string().optional().describe("Output encoding"),
1146
+ error: z.string().optional().describe("Error message"),
1031
1147
  })
1032
1148
  .describe("Random bytes generation result");
1033
1149
  /**
@@ -1036,8 +1152,9 @@ export const PgcryptoGenRandomBytesOutputSchema = z
1036
1152
  export const PgcryptoGenSaltOutputSchema = z
1037
1153
  .object({
1038
1154
  success: z.boolean().describe("Whether salt generation succeeded"),
1039
- salt: z.string().describe("Generated salt"),
1040
- type: z.string().describe("Salt type"),
1155
+ salt: z.string().optional().describe("Generated salt"),
1156
+ type: z.string().optional().describe("Salt type"),
1157
+ error: z.string().optional().describe("Error message"),
1041
1158
  })
1042
1159
  .describe("Salt generation result");
1043
1160
  /**