@neverinfamous/postgres-mcp 1.0.2 → 1.1.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 (224) hide show
  1. package/README.md +38 -19
  2. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  3. package/dist/__tests__/mocks/adapter.js.map +1 -1
  4. package/dist/adapters/DatabaseAdapter.d.ts +5 -6
  5. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  6. package/dist/adapters/DatabaseAdapter.js +73 -52
  7. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  8. package/dist/adapters/postgresql/PostgresAdapter.d.ts +13 -0
  9. package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
  10. package/dist/adapters/postgresql/PostgresAdapter.js +48 -3
  11. package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
  12. package/dist/adapters/postgresql/schemas/admin.d.ts +42 -0
  13. package/dist/adapters/postgresql/schemas/admin.d.ts.map +1 -1
  14. package/dist/adapters/postgresql/schemas/admin.js +61 -0
  15. package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
  16. package/dist/adapters/postgresql/schemas/backup.d.ts +119 -0
  17. package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
  18. package/dist/adapters/postgresql/schemas/backup.js +169 -0
  19. package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
  20. package/dist/adapters/postgresql/schemas/core.d.ts +27 -0
  21. package/dist/adapters/postgresql/schemas/core.d.ts.map +1 -1
  22. package/dist/adapters/postgresql/schemas/core.js +62 -0
  23. package/dist/adapters/postgresql/schemas/core.js.map +1 -1
  24. package/dist/adapters/postgresql/schemas/cron.d.ts +117 -0
  25. package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
  26. package/dist/adapters/postgresql/schemas/cron.js +148 -1
  27. package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
  28. package/dist/adapters/postgresql/schemas/extensions.d.ts +335 -0
  29. package/dist/adapters/postgresql/schemas/extensions.d.ts.map +1 -1
  30. package/dist/adapters/postgresql/schemas/extensions.js +453 -0
  31. package/dist/adapters/postgresql/schemas/extensions.js.map +1 -1
  32. package/dist/adapters/postgresql/schemas/index.d.ts +15 -15
  33. package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
  34. package/dist/adapters/postgresql/schemas/index.js +56 -16
  35. package/dist/adapters/postgresql/schemas/index.js.map +1 -1
  36. package/dist/adapters/postgresql/schemas/jsonb.d.ts +408 -21
  37. package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +1 -1
  38. package/dist/adapters/postgresql/schemas/jsonb.js +544 -23
  39. package/dist/adapters/postgresql/schemas/jsonb.js.map +1 -1
  40. package/dist/adapters/postgresql/schemas/monitoring.d.ts +179 -0
  41. package/dist/adapters/postgresql/schemas/monitoring.d.ts.map +1 -1
  42. package/dist/adapters/postgresql/schemas/monitoring.js +240 -0
  43. package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
  44. package/dist/adapters/postgresql/schemas/partitioning.d.ts +57 -0
  45. package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
  46. package/dist/adapters/postgresql/schemas/partitioning.js +84 -0
  47. package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
  48. package/dist/adapters/postgresql/schemas/partman.d.ts +156 -0
  49. package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -1
  50. package/dist/adapters/postgresql/schemas/partman.js +203 -0
  51. package/dist/adapters/postgresql/schemas/partman.js.map +1 -1
  52. package/dist/adapters/postgresql/schemas/performance.d.ts +123 -0
  53. package/dist/adapters/postgresql/schemas/performance.d.ts.map +1 -1
  54. package/dist/adapters/postgresql/schemas/performance.js +221 -0
  55. package/dist/adapters/postgresql/schemas/performance.js.map +1 -1
  56. package/dist/adapters/postgresql/schemas/postgis.d.ts +173 -0
  57. package/dist/adapters/postgresql/schemas/postgis.d.ts.map +1 -1
  58. package/dist/adapters/postgresql/schemas/postgis.js +279 -0
  59. package/dist/adapters/postgresql/schemas/postgis.js.map +1 -1
  60. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +100 -0
  61. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
  62. package/dist/adapters/postgresql/schemas/schema-mgmt.js +133 -0
  63. package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
  64. package/dist/adapters/postgresql/schemas/stats.d.ts +248 -4
  65. package/dist/adapters/postgresql/schemas/stats.d.ts.map +1 -1
  66. package/dist/adapters/postgresql/schemas/stats.js +362 -0
  67. package/dist/adapters/postgresql/schemas/stats.js.map +1 -1
  68. package/dist/adapters/postgresql/schemas/text-search.d.ts +47 -0
  69. package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
  70. package/dist/adapters/postgresql/schemas/text-search.js +62 -0
  71. package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
  72. package/dist/adapters/postgresql/schemas/vector.d.ts +252 -0
  73. package/dist/adapters/postgresql/schemas/vector.d.ts.map +1 -1
  74. package/dist/adapters/postgresql/schemas/vector.js +373 -0
  75. package/dist/adapters/postgresql/schemas/vector.js.map +1 -1
  76. package/dist/adapters/postgresql/tools/admin.d.ts.map +1 -1
  77. package/dist/adapters/postgresql/tools/admin.js +37 -7
  78. package/dist/adapters/postgresql/tools/admin.js.map +1 -1
  79. package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
  80. package/dist/adapters/postgresql/tools/backup/dump.js +14 -2
  81. package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
  82. package/dist/adapters/postgresql/tools/backup/planning.d.ts.map +1 -1
  83. package/dist/adapters/postgresql/tools/backup/planning.js +6 -0
  84. package/dist/adapters/postgresql/tools/backup/planning.js.map +1 -1
  85. package/dist/adapters/postgresql/tools/citext.d.ts.map +1 -1
  86. package/dist/adapters/postgresql/tools/citext.js +9 -1
  87. package/dist/adapters/postgresql/tools/citext.js.map +1 -1
  88. package/dist/adapters/postgresql/tools/codemode/index.d.ts +11 -0
  89. package/dist/adapters/postgresql/tools/codemode/index.d.ts.map +1 -1
  90. package/dist/adapters/postgresql/tools/codemode/index.js +33 -0
  91. package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -1
  92. package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
  93. package/dist/adapters/postgresql/tools/core/convenience.js +6 -0
  94. package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
  95. package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
  96. package/dist/adapters/postgresql/tools/core/health.js +7 -2
  97. package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
  98. package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
  99. package/dist/adapters/postgresql/tools/core/indexes.js +4 -0
  100. package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
  101. package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
  102. package/dist/adapters/postgresql/tools/core/objects.js +4 -1
  103. package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
  104. package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
  105. package/dist/adapters/postgresql/tools/core/query.js +3 -0
  106. package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
  107. package/dist/adapters/postgresql/tools/core/schemas.d.ts +164 -0
  108. package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
  109. package/dist/adapters/postgresql/tools/core/schemas.js +238 -0
  110. package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
  111. package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
  112. package/dist/adapters/postgresql/tools/core/tables.js +5 -0
  113. package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
  114. package/dist/adapters/postgresql/tools/cron.d.ts.map +1 -1
  115. package/dist/adapters/postgresql/tools/cron.js +12 -2
  116. package/dist/adapters/postgresql/tools/cron.js.map +1 -1
  117. package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +1 -1
  118. package/dist/adapters/postgresql/tools/jsonb/advanced.js +56 -46
  119. package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +1 -1
  120. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +1 -1
  121. package/dist/adapters/postgresql/tools/jsonb/basic.js +114 -72
  122. package/dist/adapters/postgresql/tools/jsonb/basic.js.map +1 -1
  123. package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
  124. package/dist/adapters/postgresql/tools/kcache.js +10 -1
  125. package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
  126. package/dist/adapters/postgresql/tools/ltree.d.ts.map +1 -1
  127. package/dist/adapters/postgresql/tools/ltree.js +11 -1
  128. package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
  129. package/dist/adapters/postgresql/tools/monitoring.d.ts.map +1 -1
  130. package/dist/adapters/postgresql/tools/monitoring.js +14 -1
  131. package/dist/adapters/postgresql/tools/monitoring.js.map +1 -1
  132. package/dist/adapters/postgresql/tools/partitioning.d.ts.map +1 -1
  133. package/dist/adapters/postgresql/tools/partitioning.js +9 -1
  134. package/dist/adapters/postgresql/tools/partitioning.js.map +1 -1
  135. package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
  136. package/dist/adapters/postgresql/tools/partman/management.js +8 -1
  137. package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
  138. package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
  139. package/dist/adapters/postgresql/tools/partman/operations.js +8 -1
  140. package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
  141. package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
  142. package/dist/adapters/postgresql/tools/performance/analysis.js +4 -0
  143. package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
  144. package/dist/adapters/postgresql/tools/performance/explain.d.ts.map +1 -1
  145. package/dist/adapters/postgresql/tools/performance/explain.js +4 -1
  146. package/dist/adapters/postgresql/tools/performance/explain.js.map +1 -1
  147. package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
  148. package/dist/adapters/postgresql/tools/performance/monitoring.js +10 -8
  149. package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
  150. package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
  151. package/dist/adapters/postgresql/tools/performance/optimization.js +4 -0
  152. package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
  153. package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
  154. package/dist/adapters/postgresql/tools/performance/stats.js +9 -0
  155. package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
  156. package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
  157. package/dist/adapters/postgresql/tools/pgcrypto.js +12 -3
  158. package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
  159. package/dist/adapters/postgresql/tools/postgis/advanced.d.ts.map +1 -1
  160. package/dist/adapters/postgresql/tools/postgis/advanced.js +7 -1
  161. package/dist/adapters/postgresql/tools/postgis/advanced.js.map +1 -1
  162. package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
  163. package/dist/adapters/postgresql/tools/postgis/basic.js +11 -1
  164. package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
  165. package/dist/adapters/postgresql/tools/postgis/standalone.d.ts.map +1 -1
  166. package/dist/adapters/postgresql/tools/postgis/standalone.js +6 -1
  167. package/dist/adapters/postgresql/tools/postgis/standalone.js.map +1 -1
  168. package/dist/adapters/postgresql/tools/schema.d.ts.map +1 -1
  169. package/dist/adapters/postgresql/tools/schema.js +15 -1
  170. package/dist/adapters/postgresql/tools/schema.js.map +1 -1
  171. package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
  172. package/dist/adapters/postgresql/tools/stats/advanced.js +59 -20
  173. package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
  174. package/dist/adapters/postgresql/tools/stats/basic.d.ts.map +1 -1
  175. package/dist/adapters/postgresql/tools/stats/basic.js +35 -13
  176. package/dist/adapters/postgresql/tools/stats/basic.js.map +1 -1
  177. package/dist/adapters/postgresql/tools/text.d.ts.map +1 -1
  178. package/dist/adapters/postgresql/tools/text.js +43 -26
  179. package/dist/adapters/postgresql/tools/text.js.map +1 -1
  180. package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
  181. package/dist/adapters/postgresql/tools/transactions.js +10 -1
  182. package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
  183. package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +1 -1
  184. package/dist/adapters/postgresql/tools/vector/advanced.js +29 -5
  185. package/dist/adapters/postgresql/tools/vector/advanced.js.map +1 -1
  186. package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +1 -1
  187. package/dist/adapters/postgresql/tools/vector/basic.js +81 -28
  188. package/dist/adapters/postgresql/tools/vector/basic.js.map +1 -1
  189. package/dist/codemode/api.d.ts.map +1 -1
  190. package/dist/codemode/api.js +4 -0
  191. package/dist/codemode/api.js.map +1 -1
  192. package/dist/constants/ServerInstructions.d.ts +1 -1
  193. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  194. package/dist/constants/ServerInstructions.js +13 -7
  195. package/dist/constants/ServerInstructions.js.map +1 -1
  196. package/dist/filtering/ToolConstants.d.ts +3 -3
  197. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  198. package/dist/filtering/ToolConstants.js +4 -3
  199. package/dist/filtering/ToolConstants.js.map +1 -1
  200. package/dist/types/adapters.d.ts +2 -0
  201. package/dist/types/adapters.d.ts.map +1 -1
  202. package/dist/types/oauth.d.ts +4 -0
  203. package/dist/types/oauth.d.ts.map +1 -1
  204. package/dist/utils/fts-config.d.ts +38 -0
  205. package/dist/utils/fts-config.d.ts.map +1 -0
  206. package/dist/utils/fts-config.js +64 -0
  207. package/dist/utils/fts-config.js.map +1 -0
  208. package/dist/utils/identifiers.d.ts +21 -0
  209. package/dist/utils/identifiers.d.ts.map +1 -1
  210. package/dist/utils/identifiers.js +48 -0
  211. package/dist/utils/identifiers.js.map +1 -1
  212. package/dist/utils/logger.d.ts +22 -1
  213. package/dist/utils/logger.d.ts.map +1 -1
  214. package/dist/utils/logger.js +71 -14
  215. package/dist/utils/logger.js.map +1 -1
  216. package/dist/utils/progress-utils.d.ts +44 -0
  217. package/dist/utils/progress-utils.d.ts.map +1 -0
  218. package/dist/utils/progress-utils.js +75 -0
  219. package/dist/utils/progress-utils.js.map +1 -0
  220. package/dist/utils/where-clause.d.ts +39 -0
  221. package/dist/utils/where-clause.d.ts.map +1 -0
  222. package/dist/utils/where-clause.js +123 -0
  223. package/dist/utils/where-clause.js.map +1 -0
  224. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"jsonb.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/schemas/jsonb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAYxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACjC,MAAM,EAAE,CAMV;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAC1C,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAcrB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACjC,MAAM,CAKR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASvD;AAGD,eAAO,MAAM,kBAAkB;;;;;;;iBAqB7B,CAAC;AAGH,eAAO,MAAM,cAAc;;;;;;;iBAuBzB,CAAC;AAGH,eAAO,MAAM,mBAAmB;;;;;;iBAW9B,CAAC;AAGH,eAAO,MAAM,oBAAoB;;;;;;iBAa/B,CAAC;AAGH,eAAO,MAAM,iBAAiB;;;;;;;iBAoB5B,CAAC;AAGH,eAAO,MAAM,iBAAiB;;;;;iBAa5B,CAAC"}
1
+ {"version":3,"file":"jsonb.d.ts","sourceRoot":"","sources":["../../../../src/adapters/postgresql/schemas/jsonb.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ import { z } from "zod";
18
18
  * Convert a string path to array format
19
19
  * 'a.b[0].c' → ['a', 'b', '0', 'c']
20
20
  * 'a.b.0' → ['a', 'b', '0']
21
+ * '[-1]' → ['-1'] (supports negative indices)
21
22
  */
22
23
  export function stringPathToArray(path) {
23
24
  // Handle JSONPath format ($.a.b) - strip leading $. if present
@@ -27,8 +28,8 @@ export function stringPathToArray(path) {
27
28
  normalized = normalized.slice(1);
28
29
  if (normalized.startsWith("."))
29
30
  normalized = normalized.slice(1);
30
- // Replace array notation [0] with .0
31
- normalized = normalized.replace(/\[(\d+)\]/g, ".$1");
31
+ // Replace array notation [0] or [-1] with .0 or .-1 (supports negative indices)
32
+ normalized = normalized.replace(/\[(-?\d+)\]/g, ".$1");
32
33
  // Split by dot and filter empty strings
33
34
  return normalized.split(".").filter((p) => p !== "");
34
35
  }
@@ -94,10 +95,57 @@ export function parseJsonbValue(value) {
94
95
  }
95
96
  return value;
96
97
  }
98
+ /**
99
+ * Preprocess JSONB tool parameters to normalize common input patterns.
100
+ * Handles aliases and schema.table format parsing.
101
+ * Exported so tools can apply it in their handlers.
102
+ *
103
+ * SPLIT SCHEMA PATTERN:
104
+ * - Base schemas use optional table/tableName with .refine() for MCP visibility
105
+ * - Handlers use z.preprocess(preprocessJsonbParams, BaseSchema) for alias resolution
106
+ */
107
+ export function preprocessJsonbParams(input) {
108
+ if (typeof input !== "object" || input === null) {
109
+ return input;
110
+ }
111
+ const result = { ...input };
112
+ // Alias: tableName → table
113
+ if (result["tableName"] !== undefined && result["table"] === undefined) {
114
+ result["table"] = result["tableName"];
115
+ }
116
+ // Alias: name → table (for consistency with other tool groups)
117
+ if (result["name"] !== undefined && result["table"] === undefined) {
118
+ result["table"] = result["name"];
119
+ }
120
+ // Alias: col → column
121
+ if (result["col"] !== undefined && result["column"] === undefined) {
122
+ result["column"] = result["col"];
123
+ }
124
+ // Alias: filter → where
125
+ if (result["filter"] !== undefined && result["where"] === undefined) {
126
+ result["where"] = result["filter"];
127
+ }
128
+ // Parse schema.table format (embedded schema takes priority)
129
+ if (typeof result["table"] === "string" && result["table"].includes(".")) {
130
+ const parts = result["table"].split(".");
131
+ if (parts.length === 2 && parts[0] && parts[1]) {
132
+ // Only override schema if not already explicitly set
133
+ if (result["schema"] === undefined) {
134
+ result["schema"] = parts[0];
135
+ }
136
+ result["table"] = parts[1];
137
+ }
138
+ }
139
+ return result;
140
+ }
97
141
  // ============== EXTRACT SCHEMA ==============
98
- export const JsonbExtractSchema = z.object({
99
- table: z.string().describe("Table name"),
100
- column: z.string().describe("JSONB column name"),
142
+ // Base schema (for MCP inputSchema visibility - no preprocess)
143
+ export const JsonbExtractSchemaBase = z
144
+ .object({
145
+ table: z.string().optional().describe("Table name"),
146
+ tableName: z.string().optional().describe("Table name (alias for table)"),
147
+ column: z.string().optional().describe("JSONB column name"),
148
+ col: z.string().optional().describe("JSONB column name (alias for column)"),
101
149
  path: z
102
150
  .union([
103
151
  z.string().describe('Path as string (e.g., "a.b.c" or "a[0].b")'),
@@ -111,12 +159,26 @@ export const JsonbExtractSchema = z.object({
111
159
  .optional()
112
160
  .describe('Additional columns to include in result for row identification (e.g., ["id"])'),
113
161
  where: z.string().optional().describe("WHERE clause"),
162
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
114
163
  limit: z.number().optional().describe("Maximum number of rows to return"),
164
+ schema: z.string().optional().describe("Schema name (default: public)"),
165
+ })
166
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
167
+ message: "Either 'table' or 'tableName' is required",
168
+ })
169
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
170
+ message: "Either 'column' or 'col' is required",
115
171
  });
172
+ // Full schema with preprocess (for handler parsing)
173
+ export const JsonbExtractSchema = z.preprocess(preprocessJsonbParams, JsonbExtractSchemaBase);
116
174
  // ============== SET SCHEMA ==============
117
- export const JsonbSetSchema = z.object({
118
- table: z.string().describe("Table name"),
119
- column: z.string().describe("JSONB column name"),
175
+ // Base schema (for MCP inputSchema visibility - no preprocess)
176
+ export const JsonbSetSchemaBase = z
177
+ .object({
178
+ table: z.string().optional().describe("Table name"),
179
+ tableName: z.string().optional().describe("Table name (alias for table)"),
180
+ column: z.string().optional().describe("JSONB column name"),
181
+ col: z.string().optional().describe("JSONB column name (alias for column)"),
120
182
  path: z
121
183
  .union([
122
184
  z.string().describe('Path as string (e.g., "a.b.c" or "a[0].b")'),
@@ -128,16 +190,36 @@ export const JsonbSetSchema = z.object({
128
190
  value: z
129
191
  .unknown()
130
192
  .describe("New value to set at the path (will be converted to JSONB)"),
131
- where: z.string().describe("WHERE clause to identify rows to update"),
193
+ where: z
194
+ .string()
195
+ .optional()
196
+ .describe("WHERE clause to identify rows to update"),
197
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
132
198
  createMissing: z
133
199
  .boolean()
134
200
  .optional()
135
201
  .describe("Create intermediate keys if path does not exist (default: true)"),
202
+ schema: z.string().optional().describe("Schema name (default: public)"),
203
+ })
204
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
205
+ message: "Either 'table' or 'tableName' is required",
206
+ })
207
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
208
+ message: "Either 'column' or 'col' is required",
209
+ })
210
+ .refine((data) => data.where !== undefined || data.filter !== undefined, {
211
+ message: "Either 'where' or 'filter' is required",
136
212
  });
213
+ // Full schema with preprocess (for handler parsing)
214
+ export const JsonbSetSchema = z.preprocess(preprocessJsonbParams, JsonbSetSchemaBase);
137
215
  // ============== CONTAINS SCHEMA ==============
138
- export const JsonbContainsSchema = z.object({
139
- table: z.string().describe("Table name"),
140
- column: z.string().describe("JSONB column name"),
216
+ // Base schema (for MCP inputSchema visibility - no preprocess)
217
+ export const JsonbContainsSchemaBase = z
218
+ .object({
219
+ table: z.string().optional().describe("Table name"),
220
+ tableName: z.string().optional().describe("Table name (alias for table)"),
221
+ column: z.string().optional().describe("JSONB column name"),
222
+ col: z.string().optional().describe("JSONB column name (alias for column)"),
141
223
  value: z
142
224
  .unknown()
143
225
  .describe('JSON value to check if contained (e.g., {"status": "active"})'),
@@ -146,11 +228,25 @@ export const JsonbContainsSchema = z.object({
146
228
  .optional()
147
229
  .describe("Columns to select in result"),
148
230
  where: z.string().optional().describe("Additional WHERE clause filter"),
231
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
232
+ schema: z.string().optional().describe("Schema name (default: public)"),
233
+ })
234
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
235
+ message: "Either 'table' or 'tableName' is required",
236
+ })
237
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
238
+ message: "Either 'column' or 'col' is required",
149
239
  });
240
+ // Full schema with preprocess (for handler parsing)
241
+ export const JsonbContainsSchema = z.preprocess(preprocessJsonbParams, JsonbContainsSchemaBase);
150
242
  // ============== PATH QUERY SCHEMA ==============
151
- export const JsonbPathQuerySchema = z.object({
152
- table: z.string().describe("Table name"),
153
- column: z.string().describe("JSONB column name"),
243
+ // Base schema (for MCP inputSchema visibility - no preprocess)
244
+ export const JsonbPathQuerySchemaBase = z
245
+ .object({
246
+ table: z.string().optional().describe("Table name"),
247
+ tableName: z.string().optional().describe("Table name (alias for table)"),
248
+ column: z.string().optional().describe("JSONB column name"),
249
+ col: z.string().optional().describe("JSONB column name (alias for column)"),
154
250
  path: z
155
251
  .string()
156
252
  .describe('JSONPath expression (e.g., "$.items[*].name" or "$.* ? (@.price > 10)")'),
@@ -159,11 +255,25 @@ export const JsonbPathQuerySchema = z.object({
159
255
  .optional()
160
256
  .describe("Variables for JSONPath (access with $var_name)"),
161
257
  where: z.string().optional().describe("WHERE clause"),
258
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
259
+ schema: z.string().optional().describe("Schema name (default: public)"),
260
+ })
261
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
262
+ message: "Either 'table' or 'tableName' is required",
263
+ })
264
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
265
+ message: "Either 'column' or 'col' is required",
162
266
  });
267
+ // Full schema with preprocess (for handler parsing)
268
+ export const JsonbPathQuerySchema = z.preprocess(preprocessJsonbParams, JsonbPathQuerySchemaBase);
163
269
  // ============== INSERT SCHEMA ==============
164
- export const JsonbInsertSchema = z.object({
165
- table: z.string().describe("Table name"),
166
- column: z.string().describe("JSONB column name"),
270
+ // Base schema (for MCP inputSchema visibility - no preprocess)
271
+ export const JsonbInsertSchemaBase = z
272
+ .object({
273
+ table: z.string().optional().describe("Table name"),
274
+ tableName: z.string().optional().describe("Table name (alias for table)"),
275
+ column: z.string().optional().describe("JSONB column name"),
276
+ col: z.string().optional().describe("JSONB column name (alias for column)"),
167
277
  path: z
168
278
  .union([
169
279
  z.string().describe('Path as string (e.g., "tags.0")'),
@@ -174,16 +284,33 @@ export const JsonbInsertSchema = z.object({
174
284
  ])
175
285
  .describe("Path to insert at (for arrays). Accepts both string and array formats."),
176
286
  value: z.unknown().describe("Value to insert"),
177
- where: z.string().describe("WHERE clause"),
287
+ where: z.string().optional().describe("WHERE clause"),
288
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
178
289
  insertAfter: z
179
290
  .boolean()
180
291
  .optional()
181
292
  .describe("Insert after the specified position (default: false)"),
293
+ schema: z.string().optional().describe("Schema name (default: public)"),
294
+ })
295
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
296
+ message: "Either 'table' or 'tableName' is required",
297
+ })
298
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
299
+ message: "Either 'column' or 'col' is required",
300
+ })
301
+ .refine((data) => data.where !== undefined || data.filter !== undefined, {
302
+ message: "Either 'where' or 'filter' is required",
182
303
  });
304
+ // Full schema with preprocess (for handler parsing)
305
+ export const JsonbInsertSchema = z.preprocess(preprocessJsonbParams, JsonbInsertSchemaBase);
183
306
  // ============== DELETE SCHEMA ==============
184
- export const JsonbDeleteSchema = z.object({
185
- table: z.string().describe("Table name"),
186
- column: z.string().describe("JSONB column name"),
307
+ // Base schema (for MCP inputSchema visibility - no preprocess)
308
+ export const JsonbDeleteSchemaBase = z
309
+ .object({
310
+ table: z.string().optional().describe("Table name"),
311
+ tableName: z.string().optional().describe("Table name (alias for table)"),
312
+ column: z.string().optional().describe("JSONB column name"),
313
+ col: z.string().optional().describe("JSONB column name (alias for column)"),
187
314
  path: z
188
315
  .union([
189
316
  z.string().describe("Key to delete (single key) or dot-notation path"),
@@ -193,6 +320,400 @@ export const JsonbDeleteSchema = z.object({
193
320
  .describe('Path as array (e.g., ["nested", 0])'),
194
321
  ])
195
322
  .describe("Key or path to delete. Supports numeric indices for arrays."),
196
- where: z.string().describe("WHERE clause"),
323
+ where: z.string().optional().describe("WHERE clause"),
324
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
325
+ schema: z.string().optional().describe("Schema name (default: public)"),
326
+ })
327
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
328
+ message: "Either 'table' or 'tableName' is required",
329
+ })
330
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
331
+ message: "Either 'column' or 'col' is required",
332
+ })
333
+ .refine((data) => data.where !== undefined || data.filter !== undefined, {
334
+ message: "Either 'where' or 'filter' is required",
335
+ });
336
+ // Full schema with preprocess (for handler parsing)
337
+ export const JsonbDeleteSchema = z.preprocess(preprocessJsonbParams, JsonbDeleteSchemaBase);
338
+ // ============== TYPEOF SCHEMA ==============
339
+ // Base schema (for MCP inputSchema visibility - no preprocess)
340
+ export const JsonbTypeofSchemaBase = z
341
+ .object({
342
+ table: z.string().optional().describe("Table name"),
343
+ tableName: z.string().optional().describe("Table name (alias for table)"),
344
+ column: z.string().optional().describe("JSONB column name"),
345
+ col: z.string().optional().describe("JSONB column name (alias for column)"),
346
+ path: z
347
+ .union([z.string(), z.array(z.union([z.string(), z.number()]))])
348
+ .optional()
349
+ .describe("Path to check type of nested value (string or array format)"),
350
+ where: z.string().optional().describe("WHERE clause"),
351
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
352
+ })
353
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
354
+ message: "Either 'table' or 'tableName' is required",
355
+ })
356
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
357
+ message: "Either 'column' or 'col' is required",
358
+ });
359
+ // Full schema with preprocess (for handler parsing)
360
+ export const JsonbTypeofSchema = z.preprocess(preprocessJsonbParams, JsonbTypeofSchemaBase);
361
+ // ============== KEYS SCHEMA ==============
362
+ // Base schema (for MCP inputSchema visibility - no preprocess)
363
+ export const JsonbKeysSchemaBase = z
364
+ .object({
365
+ table: z.string().optional().describe("Table name"),
366
+ tableName: z.string().optional().describe("Table name (alias for table)"),
367
+ column: z.string().optional().describe("JSONB column name"),
368
+ col: z.string().optional().describe("JSONB column name (alias for column)"),
369
+ where: z.string().optional().describe("WHERE clause"),
370
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
371
+ })
372
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
373
+ message: "Either 'table' or 'tableName' is required",
374
+ })
375
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
376
+ message: "Either 'column' or 'col' is required",
377
+ });
378
+ // Full schema with preprocess (for handler parsing)
379
+ export const JsonbKeysSchema = z.preprocess(preprocessJsonbParams, JsonbKeysSchemaBase);
380
+ // ============== STRIP NULLS SCHEMA ==============
381
+ // Base schema (for MCP inputSchema visibility - no preprocess)
382
+ export const JsonbStripNullsSchemaBase = z
383
+ .object({
384
+ table: z.string().optional().describe("Table name"),
385
+ tableName: z.string().optional().describe("Table name (alias for table)"),
386
+ column: z.string().optional().describe("JSONB column name"),
387
+ col: z.string().optional().describe("JSONB column name (alias for column)"),
388
+ where: z.string().optional().describe("WHERE clause"),
389
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
390
+ preview: z
391
+ .boolean()
392
+ .optional()
393
+ .describe("Preview what would be stripped without modifying data"),
394
+ })
395
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
396
+ message: "Either 'table' or 'tableName' is required",
397
+ })
398
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
399
+ message: "Either 'column' or 'col' is required",
400
+ })
401
+ .refine((data) => data.where !== undefined || data.filter !== undefined, {
402
+ message: "Either 'where' or 'filter' is required",
403
+ });
404
+ // Full schema with preprocess (for handler parsing)
405
+ export const JsonbStripNullsSchema = z.preprocess(preprocessJsonbParams, JsonbStripNullsSchemaBase);
406
+ // ============== AGG SCHEMA ==============
407
+ // Base schema (for MCP inputSchema visibility - no preprocess)
408
+ export const JsonbAggSchemaBase = z
409
+ .object({
410
+ table: z.string().optional().describe("Table name"),
411
+ tableName: z.string().optional().describe("Table name (alias for table)"),
412
+ select: z
413
+ .array(z.string())
414
+ .optional()
415
+ .describe('Columns or expressions to include. Supports AS aliases: ["id", "metadata->\'name\' AS name"]'),
416
+ where: z.string().optional().describe("WHERE clause"),
417
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
418
+ groupBy: z
419
+ .string()
420
+ .optional()
421
+ .describe("Column or expression to group by. Returns {result: [{group_key, items}], count, grouped: true}"),
422
+ orderBy: z
423
+ .string()
424
+ .optional()
425
+ .describe('ORDER BY clause (e.g., "id DESC", "name ASC")'),
426
+ limit: z
427
+ .number()
428
+ .optional()
429
+ .describe("Maximum number of rows to aggregate"),
430
+ })
431
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
432
+ message: "Either 'table' or 'tableName' is required",
433
+ });
434
+ // Full schema with preprocess (for handler parsing)
435
+ export const JsonbAggSchema = z.preprocess(preprocessJsonbParams, JsonbAggSchemaBase);
436
+ // ============== NORMALIZE SCHEMA ==============
437
+ // Base schema (for MCP inputSchema visibility - no preprocess)
438
+ export const JsonbNormalizeSchemaBase = z
439
+ .object({
440
+ table: z.string().optional().describe("Table name"),
441
+ tableName: z.string().optional().describe("Table name (alias for table)"),
442
+ column: z.string().optional().describe("JSONB column"),
443
+ col: z.string().optional().describe("JSONB column (alias for column)"),
444
+ mode: z
445
+ .enum(["keys", "array", "pairs", "flatten"])
446
+ .optional()
447
+ .describe("keys: text values (all converted to string). pairs: JSONB types preserved. array: for arrays. flatten: recursive."),
448
+ where: z.string().optional().describe("WHERE clause"),
449
+ filter: z.string().optional().describe("WHERE clause (alias for where)"),
450
+ idColumn: z
451
+ .string()
452
+ .optional()
453
+ .describe('Column to use for row identification (e.g., "id"). If omitted, defaults to "id" if it exists, else uses ctid.'),
454
+ })
455
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
456
+ message: "Either 'table' or 'tableName' is required",
457
+ })
458
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
459
+ message: "Either 'column' or 'col' is required",
460
+ });
461
+ // Full schema with preprocess (for handler parsing)
462
+ export const JsonbNormalizeSchema = z.preprocess(preprocessJsonbParams, JsonbNormalizeSchemaBase);
463
+ // ============== STATS SCHEMA ==============
464
+ // Base schema (for MCP inputSchema visibility - no preprocess)
465
+ export const JsonbStatsSchemaBase = z
466
+ .object({
467
+ table: z.string().optional().describe("Table name"),
468
+ tableName: z.string().optional().describe("Table name (alias for table)"),
469
+ column: z.string().optional().describe("JSONB column"),
470
+ col: z.string().optional().describe("JSONB column (alias for column)"),
471
+ sampleSize: z.number().optional().describe("Sample rows to analyze"),
472
+ where: z.string().optional().describe("WHERE clause to filter rows"),
473
+ filter: z
474
+ .string()
475
+ .optional()
476
+ .describe("WHERE clause to filter rows (alias for where)"),
477
+ topKeysLimit: z
478
+ .number()
479
+ .optional()
480
+ .describe("Maximum number of top keys to return (default: 20)"),
481
+ })
482
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
483
+ message: "Either 'table' or 'tableName' is required",
484
+ })
485
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
486
+ message: "Either 'column' or 'col' is required",
487
+ });
488
+ // Full schema with preprocess (for handler parsing)
489
+ export const JsonbStatsSchema = z.preprocess(preprocessJsonbParams, JsonbStatsSchemaBase);
490
+ // ============== INDEX SUGGEST SCHEMA ==============
491
+ // Base schema (for MCP inputSchema visibility - no preprocess)
492
+ export const JsonbIndexSuggestSchemaBase = z
493
+ .object({
494
+ table: z.string().optional().describe("Table name"),
495
+ tableName: z.string().optional().describe("Table name (alias for table)"),
496
+ column: z.string().optional().describe("JSONB column"),
497
+ col: z.string().optional().describe("JSONB column (alias for column)"),
498
+ sampleSize: z.number().optional().describe("Sample rows to analyze"),
499
+ where: z.string().optional().describe("WHERE clause to filter rows"),
500
+ filter: z
501
+ .string()
502
+ .optional()
503
+ .describe("WHERE clause to filter rows (alias for where)"),
504
+ })
505
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
506
+ message: "Either 'table' or 'tableName' is required",
507
+ })
508
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
509
+ message: "Either 'column' or 'col' is required",
510
+ });
511
+ // Full schema with preprocess (for handler parsing)
512
+ export const JsonbIndexSuggestSchema = z.preprocess(preprocessJsonbParams, JsonbIndexSuggestSchemaBase);
513
+ // ============== SECURITY SCAN SCHEMA ==============
514
+ // Base schema (for MCP inputSchema visibility - no preprocess)
515
+ export const JsonbSecurityScanSchemaBase = z
516
+ .object({
517
+ table: z.string().optional().describe("Table name"),
518
+ tableName: z.string().optional().describe("Table name (alias for table)"),
519
+ column: z.string().optional().describe("JSONB column"),
520
+ col: z.string().optional().describe("JSONB column (alias for column)"),
521
+ sampleSize: z.number().optional().describe("Sample rows to scan"),
522
+ where: z.string().optional().describe("WHERE clause to filter rows"),
523
+ filter: z
524
+ .string()
525
+ .optional()
526
+ .describe("WHERE clause to filter rows (alias for where)"),
527
+ })
528
+ .refine((data) => data.table !== undefined || data.tableName !== undefined, {
529
+ message: "Either 'table' or 'tableName' is required",
530
+ })
531
+ .refine((data) => data.column !== undefined || data.col !== undefined, {
532
+ message: "Either 'column' or 'col' is required",
533
+ });
534
+ // Full schema with preprocess (for handler parsing)
535
+ export const JsonbSecurityScanSchema = z.preprocess(preprocessJsonbParams, JsonbSecurityScanSchemaBase);
536
+ // ============== OUTPUT SCHEMAS (MCP 2025-11-25 structuredContent) ==============
537
+ // Output schema for pg_jsonb_extract
538
+ export const JsonbExtractOutputSchema = z.object({
539
+ rows: z
540
+ .array(z.record(z.string(), z.unknown()))
541
+ .describe("Extracted values with optional identifying columns"),
542
+ count: z.number().describe("Number of rows returned"),
543
+ hint: z.string().optional().describe("Hint when all values are null"),
544
+ });
545
+ // Output schema for pg_jsonb_set
546
+ export const JsonbSetOutputSchema = z.object({
547
+ rowsAffected: z.number().describe("Number of rows updated"),
548
+ hint: z.string().optional().describe("Additional information"),
549
+ });
550
+ // Output schema for pg_jsonb_insert
551
+ export const JsonbInsertOutputSchema = z.object({
552
+ rowsAffected: z.number().describe("Number of rows updated"),
553
+ });
554
+ // Output schema for pg_jsonb_delete
555
+ export const JsonbDeleteOutputSchema = z.object({
556
+ rowsAffected: z.number().describe("Number of rows updated"),
557
+ hint: z.string().describe("Note about rowsAffected semantics"),
558
+ });
559
+ // Output schema for pg_jsonb_contains
560
+ export const JsonbContainsOutputSchema = z.object({
561
+ rows: z.array(z.record(z.string(), z.unknown())).describe("Matching rows"),
562
+ count: z.number().describe("Number of matching rows"),
563
+ warning: z
564
+ .string()
565
+ .optional()
566
+ .describe("Warning for empty object containment"),
567
+ });
568
+ // Output schema for pg_jsonb_path_query
569
+ export const JsonbPathQueryOutputSchema = z.object({
570
+ results: z.array(z.unknown()).describe("Query results"),
571
+ count: z.number().describe("Number of results"),
572
+ });
573
+ // Output schema for pg_jsonb_agg
574
+ export const JsonbAggOutputSchema = z.object({
575
+ result: z.unknown().describe("Aggregated JSONB array or grouped results"),
576
+ count: z.number().describe("Number of items or groups"),
577
+ grouped: z.boolean().describe("Whether results are grouped"),
578
+ hint: z.string().optional().describe("Empty result hint"),
579
+ });
580
+ // Output schema for pg_jsonb_object
581
+ export const JsonbObjectOutputSchema = z.object({
582
+ object: z.record(z.string(), z.unknown()).describe("Built JSONB object"),
583
+ });
584
+ // Output schema for pg_jsonb_array
585
+ export const JsonbArrayOutputSchema = z.object({
586
+ array: z.array(z.unknown()).describe("Built JSONB array"),
587
+ });
588
+ // Output schema for pg_jsonb_keys
589
+ export const JsonbKeysOutputSchema = z.object({
590
+ keys: z.array(z.string()).describe("Unique keys from JSONB column"),
591
+ count: z.number().describe("Number of unique keys"),
592
+ hint: z.string().describe("Deduplication note"),
593
+ });
594
+ // Output schema for pg_jsonb_strip_nulls (two modes: update or preview)
595
+ // Uses combined schema with optional fields instead of union with z.literal() to avoid Zod validation issues
596
+ export const JsonbStripNullsOutputSchema = z.object({
597
+ // Update mode fields
598
+ rowsAffected: z.number().optional().describe("Number of rows updated"),
599
+ // Preview mode fields
600
+ preview: z.boolean().optional().describe("Preview mode indicator"),
601
+ rows: z
602
+ .array(z.record(z.string(), z.unknown()))
603
+ .optional()
604
+ .describe("Before/after comparison"),
605
+ count: z.number().optional().describe("Number of rows"),
606
+ hint: z.string().optional().describe("Preview mode note"),
607
+ });
608
+ // Output schema for pg_jsonb_typeof
609
+ export const JsonbTypeofOutputSchema = z.object({
610
+ types: z
611
+ .array(z.string().nullable())
612
+ .describe("JSONB types for each row (null if path doesn't exist)"),
613
+ count: z.number().describe("Number of rows"),
614
+ columnNull: z
615
+ .boolean()
616
+ .describe("Whether any column was NULL (uses .some() aggregation)"),
617
+ hint: z.string().optional().describe("Additional information"),
618
+ });
619
+ // ============== ADVANCED JSONB OUTPUT SCHEMAS ==============
620
+ // Output schema for pg_jsonb_validate_path
621
+ export const JsonbValidatePathOutputSchema = z.object({
622
+ valid: z.boolean().describe("Whether path is valid"),
623
+ error: z.string().optional().describe("Error message if invalid"),
624
+ results: z
625
+ .array(z.unknown())
626
+ .optional()
627
+ .describe("Test results if testValue provided"),
628
+ count: z.number().optional().describe("Number of results"),
629
+ });
630
+ // Output schema for pg_jsonb_merge
631
+ export const JsonbMergeOutputSchema = z.object({
632
+ merged: z.unknown().describe("Merged JSONB document"),
633
+ deep: z.boolean().describe("Whether deep merge was used"),
634
+ mergeArrays: z
635
+ .boolean()
636
+ .optional()
637
+ .describe("Whether arrays were concatenated"),
638
+ });
639
+ // Output schema for pg_jsonb_normalize
640
+ export const JsonbNormalizeOutputSchema = z.object({
641
+ rows: z.array(z.record(z.string(), z.unknown())).describe("Normalized rows"),
642
+ count: z.number().describe("Number of rows"),
643
+ mode: z.string().optional().describe("Normalization mode used"),
644
+ hint: z.string().optional().describe("Additional information"),
645
+ });
646
+ // Output schema for pg_jsonb_diff
647
+ export const JsonbDiffOutputSchema = z.object({
648
+ differences: z
649
+ .array(z.object({
650
+ key: z.string().describe("Key that differs"),
651
+ status: z
652
+ .enum(["added", "removed", "modified"])
653
+ .describe("Type of difference"),
654
+ value1: z.unknown().optional().describe("Value in doc1"),
655
+ value2: z.unknown().optional().describe("Value in doc2"),
656
+ }))
657
+ .describe("List of differences"),
658
+ hasDifferences: z.boolean().describe("Whether any differences exist"),
659
+ comparison: z.string().describe("Comparison type performed"),
660
+ hint: z.string().describe("Explanation of comparison scope"),
661
+ });
662
+ // Output schema for pg_jsonb_index_suggest
663
+ export const JsonbIndexSuggestOutputSchema = z.object({
664
+ recommendations: z
665
+ .array(z.string())
666
+ .describe("Index creation SQL recommendations"),
667
+ analyzed: z
668
+ .object({
669
+ topKeys: z.number().optional().describe("Number of top keys analyzed"),
670
+ existingIndexes: z.number().optional().describe("Existing indexes found"),
671
+ })
672
+ .optional()
673
+ .describe("Analysis details"),
674
+ });
675
+ // Output schema for pg_jsonb_security_scan
676
+ export const JsonbSecurityScanOutputSchema = z.object({
677
+ issues: z
678
+ .array(z.object({
679
+ type: z.string().describe("Issue type"),
680
+ key: z.string().optional().describe("Affected key"),
681
+ count: z.number().optional().describe("Occurrence count"),
682
+ severity: z.string().optional().describe("Issue severity"),
683
+ }))
684
+ .describe("Security issues found"),
685
+ riskLevel: z.enum(["low", "medium", "high"]).describe("Overall risk level"),
686
+ scannedRows: z.number().describe("Number of rows scanned"),
687
+ });
688
+ // Output schema for pg_jsonb_stats
689
+ export const JsonbStatsOutputSchema = z.object({
690
+ basics: z
691
+ .object({
692
+ total_rows: z.number().describe("Total rows"),
693
+ non_null_count: z.number().optional().describe("Non-null values"),
694
+ avg_size_bytes: z.number().optional().describe("Average size"),
695
+ max_size_bytes: z.number().optional().describe("Maximum size"),
696
+ })
697
+ .describe("Basic statistics"),
698
+ topKeys: z
699
+ .array(z.object({
700
+ key: z.string().describe("Key name"),
701
+ frequency: z.number().describe("Occurrence count"),
702
+ }))
703
+ .describe("Most common keys"),
704
+ typeDistribution: z
705
+ .array(z.object({
706
+ type: z
707
+ .string()
708
+ .nullable()
709
+ .describe("JSONB type (null = SQL NULL column)"),
710
+ count: z.number().describe("Count"),
711
+ }))
712
+ .describe("Type distribution"),
713
+ sqlNullCount: z
714
+ .number()
715
+ .optional()
716
+ .describe("Count of rows with SQL NULL in the JSONB column"),
717
+ hint: z.string().optional().describe("Usage hints or notes"),
197
718
  });
198
719
  //# sourceMappingURL=jsonb.js.map