@neverinfamous/postgres-mcp 2.0.0 → 2.2.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 (518) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +119 -46
  3. package/dist/__tests__/benchmarks/codemode.bench.js +3 -3
  4. package/dist/__tests__/benchmarks/codemode.bench.js.map +1 -1
  5. package/dist/__tests__/benchmarks/connection-pool.bench.js +3 -3
  6. package/dist/__tests__/benchmarks/connection-pool.bench.js.map +1 -1
  7. package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts +11 -0
  8. package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts.map +1 -0
  9. package/dist/__tests__/benchmarks/introspection-migration.bench.js +143 -0
  10. package/dist/__tests__/benchmarks/introspection-migration.bench.js.map +1 -0
  11. package/dist/__tests__/benchmarks/resource-prompts.bench.js +0 -64
  12. package/dist/__tests__/benchmarks/resource-prompts.bench.js.map +1 -1
  13. package/dist/__tests__/benchmarks/schema-parsing.bench.js +5 -5
  14. package/dist/__tests__/benchmarks/schema-parsing.bench.js.map +1 -1
  15. package/dist/__tests__/benchmarks/tool-filtering.bench.js +17 -8
  16. package/dist/__tests__/benchmarks/tool-filtering.bench.js.map +1 -1
  17. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  18. package/dist/__tests__/mocks/adapter.js +2 -1
  19. package/dist/__tests__/mocks/adapter.js.map +1 -1
  20. package/dist/adapters/DatabaseAdapter.d.ts +6 -5
  21. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  22. package/dist/adapters/DatabaseAdapter.js +11 -20
  23. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  24. package/dist/adapters/postgresql/PostgresAdapter.d.ts +5 -26
  25. package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
  26. package/dist/adapters/postgresql/PostgresAdapter.js +31 -526
  27. package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
  28. package/dist/adapters/postgresql/prompts/index.js +1 -1
  29. package/dist/adapters/postgresql/prompts/index.js.map +1 -1
  30. package/dist/adapters/postgresql/resources/index.d.ts +1 -1
  31. package/dist/adapters/postgresql/resources/index.js +3 -3
  32. package/dist/adapters/postgresql/resources/index.js.map +1 -1
  33. package/dist/adapters/postgresql/schema-operations.d.ts +71 -0
  34. package/dist/adapters/postgresql/schema-operations.d.ts.map +1 -0
  35. package/dist/adapters/postgresql/schema-operations.js +561 -0
  36. package/dist/adapters/postgresql/schema-operations.js.map +1 -0
  37. package/dist/adapters/postgresql/schemas/admin.d.ts +4 -4
  38. package/dist/adapters/postgresql/schemas/admin.js +4 -4
  39. package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
  40. package/dist/adapters/postgresql/schemas/backup.d.ts +2 -2
  41. package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
  42. package/dist/adapters/postgresql/schemas/backup.js +1 -3
  43. package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
  44. package/dist/adapters/postgresql/schemas/core/index.d.ts +6 -0
  45. package/dist/adapters/postgresql/schemas/core/index.d.ts.map +1 -0
  46. package/dist/adapters/postgresql/schemas/core/index.js +6 -0
  47. package/dist/adapters/postgresql/schemas/core/index.js.map +1 -0
  48. package/dist/adapters/postgresql/schemas/{core.d.ts → core/queries.d.ts} +16 -171
  49. package/dist/adapters/postgresql/schemas/core/queries.d.ts.map +1 -0
  50. package/dist/adapters/postgresql/schemas/{core.js → core/queries.js} +5 -213
  51. package/dist/adapters/postgresql/schemas/core/queries.js.map +1 -0
  52. package/dist/adapters/postgresql/schemas/core/transactions.d.ts +149 -0
  53. package/dist/adapters/postgresql/schemas/core/transactions.d.ts.map +1 -0
  54. package/dist/adapters/postgresql/schemas/core/transactions.js +239 -0
  55. package/dist/adapters/postgresql/schemas/core/transactions.js.map +1 -0
  56. package/dist/adapters/postgresql/schemas/cron.d.ts +12 -12
  57. package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
  58. package/dist/adapters/postgresql/schemas/cron.js +38 -10
  59. package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
  60. package/dist/adapters/postgresql/schemas/extensions/citext.d.ts +222 -0
  61. package/dist/adapters/postgresql/schemas/extensions/citext.d.ts.map +1 -0
  62. package/dist/adapters/postgresql/schemas/extensions/citext.js +306 -0
  63. package/dist/adapters/postgresql/schemas/extensions/citext.js.map +1 -0
  64. package/dist/adapters/postgresql/schemas/extensions/index.d.ts +15 -0
  65. package/dist/adapters/postgresql/schemas/extensions/index.d.ts.map +1 -0
  66. package/dist/adapters/postgresql/schemas/extensions/index.js +20 -0
  67. package/dist/adapters/postgresql/schemas/extensions/index.js.map +1 -0
  68. package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts +164 -0
  69. package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts.map +1 -0
  70. package/dist/adapters/postgresql/schemas/extensions/kcache.js +225 -0
  71. package/dist/adapters/postgresql/schemas/extensions/kcache.js.map +1 -0
  72. package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts +253 -0
  73. package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts.map +1 -0
  74. package/dist/adapters/postgresql/schemas/extensions/ltree.js +430 -0
  75. package/dist/adapters/postgresql/schemas/extensions/ltree.js.map +1 -0
  76. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts +251 -0
  77. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts.map +1 -0
  78. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js +294 -0
  79. package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js.map +1 -0
  80. package/dist/adapters/postgresql/schemas/extensions/shared.d.ts +10 -0
  81. package/dist/adapters/postgresql/schemas/extensions/shared.d.ts.map +1 -0
  82. package/dist/adapters/postgresql/schemas/extensions/shared.js +15 -0
  83. package/dist/adapters/postgresql/schemas/extensions/shared.js.map +1 -0
  84. package/dist/adapters/postgresql/schemas/index.d.ts +6 -6
  85. package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
  86. package/dist/adapters/postgresql/schemas/index.js +8 -8
  87. package/dist/adapters/postgresql/schemas/index.js.map +1 -1
  88. package/dist/adapters/postgresql/schemas/introspection.d.ts +19 -42
  89. package/dist/adapters/postgresql/schemas/introspection.d.ts.map +1 -1
  90. package/dist/adapters/postgresql/schemas/introspection.js +72 -27
  91. package/dist/adapters/postgresql/schemas/introspection.js.map +1 -1
  92. package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts +270 -0
  93. package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts.map +1 -0
  94. package/dist/adapters/postgresql/schemas/jsonb/advanced.js +371 -0
  95. package/dist/adapters/postgresql/schemas/jsonb/advanced.js.map +1 -0
  96. package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts +283 -0
  97. package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts.map +1 -0
  98. package/dist/adapters/postgresql/schemas/jsonb/basic.js +456 -0
  99. package/dist/adapters/postgresql/schemas/jsonb/basic.js.map +1 -0
  100. package/dist/adapters/postgresql/schemas/jsonb/index.d.ts +6 -0
  101. package/dist/adapters/postgresql/schemas/jsonb/index.d.ts.map +1 -0
  102. package/dist/adapters/postgresql/schemas/jsonb/index.js +6 -0
  103. package/dist/adapters/postgresql/schemas/jsonb/index.js.map +1 -0
  104. package/dist/adapters/postgresql/schemas/monitoring.d.ts +4 -4
  105. package/dist/adapters/postgresql/schemas/monitoring.js +2 -2
  106. package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
  107. package/dist/adapters/postgresql/schemas/partitioning.d.ts +14 -14
  108. package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
  109. package/dist/adapters/postgresql/schemas/partitioning.js +64 -46
  110. package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
  111. package/dist/adapters/postgresql/schemas/partman.d.ts +16 -14
  112. package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -1
  113. package/dist/adapters/postgresql/schemas/partman.js +9 -9
  114. package/dist/adapters/postgresql/schemas/partman.js.map +1 -1
  115. package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts +429 -0
  116. package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts.map +1 -0
  117. package/dist/adapters/postgresql/schemas/postgis/advanced.js +495 -0
  118. package/dist/adapters/postgresql/schemas/postgis/advanced.js.map +1 -0
  119. package/dist/adapters/postgresql/schemas/{postgis.d.ts → postgis/basic.d.ts} +1 -423
  120. package/dist/adapters/postgresql/schemas/postgis/basic.d.ts.map +1 -0
  121. package/dist/adapters/postgresql/schemas/{postgis.js → postgis/basic.js} +1 -486
  122. package/dist/adapters/postgresql/schemas/postgis/basic.js.map +1 -0
  123. package/dist/adapters/postgresql/schemas/postgis/index.d.ts +6 -0
  124. package/dist/adapters/postgresql/schemas/postgis/index.d.ts.map +1 -0
  125. package/dist/adapters/postgresql/schemas/postgis/index.js +6 -0
  126. package/dist/adapters/postgresql/schemas/postgis/index.js.map +1 -0
  127. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +35 -25
  128. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
  129. package/dist/adapters/postgresql/schemas/schema-mgmt.js +57 -19
  130. package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
  131. package/dist/adapters/postgresql/schemas/stats/index.d.ts +6 -0
  132. package/dist/adapters/postgresql/schemas/stats/index.d.ts.map +1 -0
  133. package/dist/adapters/postgresql/schemas/stats/index.js +6 -0
  134. package/dist/adapters/postgresql/schemas/stats/index.js.map +1 -0
  135. package/dist/adapters/postgresql/schemas/stats/input.d.ts +260 -0
  136. package/dist/adapters/postgresql/schemas/stats/input.d.ts.map +1 -0
  137. package/dist/adapters/postgresql/schemas/{stats.js → stats/input.js} +2 -331
  138. package/dist/adapters/postgresql/schemas/stats/input.js.map +1 -0
  139. package/dist/adapters/postgresql/schemas/{stats.d.ts → stats/output.d.ts} +3 -246
  140. package/dist/adapters/postgresql/schemas/stats/output.d.ts.map +1 -0
  141. package/dist/adapters/postgresql/schemas/stats/output.js +334 -0
  142. package/dist/adapters/postgresql/schemas/stats/output.js.map +1 -0
  143. package/dist/adapters/postgresql/schemas/text-search.d.ts +18 -18
  144. package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
  145. package/dist/adapters/postgresql/schemas/text-search.js +12 -27
  146. package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
  147. package/dist/adapters/postgresql/schemas/vector.d.ts +10 -10
  148. package/dist/adapters/postgresql/schemas/vector.d.ts.map +1 -1
  149. package/dist/adapters/postgresql/schemas/vector.js +9 -15
  150. package/dist/adapters/postgresql/schemas/vector.js.map +1 -1
  151. package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
  152. package/dist/adapters/postgresql/tools/backup/dump.js +95 -76
  153. package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
  154. package/dist/adapters/postgresql/tools/backup/planning.d.ts.map +1 -1
  155. package/dist/adapters/postgresql/tools/backup/planning.js +345 -287
  156. package/dist/adapters/postgresql/tools/backup/planning.js.map +1 -1
  157. package/dist/adapters/postgresql/tools/citext/analysis.d.ts +24 -0
  158. package/dist/adapters/postgresql/tools/citext/analysis.d.ts.map +1 -0
  159. package/dist/adapters/postgresql/tools/{citext.js → citext/analysis.js} +50 -232
  160. package/dist/adapters/postgresql/tools/citext/analysis.js.map +1 -0
  161. package/dist/adapters/postgresql/tools/citext/index.d.ts +15 -0
  162. package/dist/adapters/postgresql/tools/citext/index.d.ts.map +1 -0
  163. package/dist/adapters/postgresql/tools/citext/index.js +23 -0
  164. package/dist/adapters/postgresql/tools/citext/index.js.map +1 -0
  165. package/dist/adapters/postgresql/tools/citext/setup.d.ts +16 -0
  166. package/dist/adapters/postgresql/tools/citext/setup.d.ts.map +1 -0
  167. package/dist/adapters/postgresql/tools/citext/setup.js +193 -0
  168. package/dist/adapters/postgresql/tools/citext/setup.js.map +1 -0
  169. package/dist/adapters/postgresql/tools/codemode/index.js +1 -1
  170. package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -1
  171. package/dist/adapters/postgresql/tools/core/convenience.d.ts +12 -22
  172. package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
  173. package/dist/adapters/postgresql/tools/core/convenience.js +100 -210
  174. package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
  175. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts +1 -0
  176. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts.map +1 -1
  177. package/dist/adapters/postgresql/tools/core/error-helpers.js +8 -1
  178. package/dist/adapters/postgresql/tools/core/error-helpers.js.map +1 -1
  179. package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
  180. package/dist/adapters/postgresql/tools/core/health.js +124 -114
  181. package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
  182. package/dist/adapters/postgresql/tools/core/index.d.ts +2 -1
  183. package/dist/adapters/postgresql/tools/core/index.d.ts.map +1 -1
  184. package/dist/adapters/postgresql/tools/core/index.js +3 -2
  185. package/dist/adapters/postgresql/tools/core/index.js.map +1 -1
  186. package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
  187. package/dist/adapters/postgresql/tools/core/indexes.js +151 -127
  188. package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
  189. package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
  190. package/dist/adapters/postgresql/tools/core/objects.js +186 -161
  191. package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
  192. package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
  193. package/dist/adapters/postgresql/tools/core/query.js +37 -25
  194. package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
  195. package/dist/adapters/postgresql/tools/core/schemas.d.ts +6 -3
  196. package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
  197. package/dist/adapters/postgresql/tools/core/schemas.js +11 -2
  198. package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
  199. package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
  200. package/dist/adapters/postgresql/tools/core/tables.js +156 -129
  201. package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
  202. package/dist/adapters/postgresql/tools/core/utility.d.ts +26 -0
  203. package/dist/adapters/postgresql/tools/core/utility.d.ts.map +1 -0
  204. package/dist/adapters/postgresql/tools/core/utility.js +174 -0
  205. package/dist/adapters/postgresql/tools/core/utility.js.map +1 -0
  206. package/dist/adapters/postgresql/tools/cron.js +90 -43
  207. package/dist/adapters/postgresql/tools/cron.js.map +1 -1
  208. package/dist/adapters/postgresql/tools/introspection/analysis.d.ts +12 -0
  209. package/dist/adapters/postgresql/tools/introspection/analysis.d.ts.map +1 -0
  210. package/dist/adapters/postgresql/tools/introspection/analysis.js +605 -0
  211. package/dist/adapters/postgresql/tools/introspection/analysis.js.map +1 -0
  212. package/dist/adapters/postgresql/tools/introspection/graph.d.ts +55 -0
  213. package/dist/adapters/postgresql/tools/introspection/graph.d.ts.map +1 -0
  214. package/dist/adapters/postgresql/tools/introspection/graph.js +621 -0
  215. package/dist/adapters/postgresql/tools/introspection/graph.js.map +1 -0
  216. package/dist/adapters/postgresql/tools/introspection/index.d.ts +21 -0
  217. package/dist/adapters/postgresql/tools/introspection/index.d.ts.map +1 -0
  218. package/dist/adapters/postgresql/tools/introspection/index.js +31 -0
  219. package/dist/adapters/postgresql/tools/introspection/index.js.map +1 -0
  220. package/dist/adapters/postgresql/tools/introspection/migration.d.ts +15 -0
  221. package/dist/adapters/postgresql/tools/introspection/migration.d.ts.map +1 -0
  222. package/dist/adapters/postgresql/tools/introspection/migration.js +575 -0
  223. package/dist/adapters/postgresql/tools/introspection/migration.js.map +1 -0
  224. package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts +20 -0
  225. package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts.map +1 -0
  226. package/dist/adapters/postgresql/tools/jsonb/analytics.js +367 -0
  227. package/dist/adapters/postgresql/tools/jsonb/analytics.js.map +1 -0
  228. package/dist/adapters/postgresql/tools/jsonb/index.d.ts +4 -2
  229. package/dist/adapters/postgresql/tools/jsonb/index.d.ts.map +1 -1
  230. package/dist/adapters/postgresql/tools/jsonb/index.js +8 -4
  231. package/dist/adapters/postgresql/tools/jsonb/index.js.map +1 -1
  232. package/dist/adapters/postgresql/tools/jsonb/read.d.ts +38 -0
  233. package/dist/adapters/postgresql/tools/jsonb/read.d.ts.map +1 -0
  234. package/dist/adapters/postgresql/tools/jsonb/{basic.js → read.js} +41 -482
  235. package/dist/adapters/postgresql/tools/jsonb/read.js.map +1 -0
  236. package/dist/adapters/postgresql/tools/jsonb/{advanced.d.ts → transform.d.ts} +1 -13
  237. package/dist/adapters/postgresql/tools/jsonb/transform.d.ts.map +1 -0
  238. package/dist/adapters/postgresql/tools/jsonb/{advanced.js → transform.js} +26 -357
  239. package/dist/adapters/postgresql/tools/jsonb/transform.js.map +1 -0
  240. package/dist/adapters/postgresql/tools/jsonb/write.d.ts +14 -0
  241. package/dist/adapters/postgresql/tools/jsonb/write.d.ts.map +1 -0
  242. package/dist/adapters/postgresql/tools/jsonb/write.js +468 -0
  243. package/dist/adapters/postgresql/tools/jsonb/write.js.map +1 -0
  244. package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
  245. package/dist/adapters/postgresql/tools/kcache.js +116 -51
  246. package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
  247. package/dist/adapters/postgresql/tools/ltree.js +346 -260
  248. package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
  249. package/dist/adapters/postgresql/tools/migration/index.d.ts +15 -0
  250. package/dist/adapters/postgresql/tools/migration/index.d.ts.map +1 -0
  251. package/dist/adapters/postgresql/tools/migration/index.js +23 -0
  252. package/dist/adapters/postgresql/tools/migration/index.js.map +1 -0
  253. package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts +15 -0
  254. package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts.map +1 -0
  255. package/dist/adapters/postgresql/tools/{monitoring.js → monitoring/analysis.js} +24 -359
  256. package/dist/adapters/postgresql/tools/monitoring/analysis.js.map +1 -0
  257. package/dist/adapters/postgresql/tools/monitoring/basic.d.ts +17 -0
  258. package/dist/adapters/postgresql/tools/monitoring/basic.d.ts.map +1 -0
  259. package/dist/adapters/postgresql/tools/monitoring/basic.js +432 -0
  260. package/dist/adapters/postgresql/tools/monitoring/basic.js.map +1 -0
  261. package/dist/adapters/postgresql/tools/monitoring/index.d.ts +16 -0
  262. package/dist/adapters/postgresql/tools/monitoring/index.d.ts.map +1 -0
  263. package/dist/adapters/postgresql/tools/monitoring/index.js +31 -0
  264. package/dist/adapters/postgresql/tools/monitoring/index.js.map +1 -0
  265. package/dist/adapters/postgresql/tools/partitioning/index.d.ts +15 -0
  266. package/dist/adapters/postgresql/tools/partitioning/index.d.ts.map +1 -0
  267. package/dist/adapters/postgresql/tools/partitioning/index.js +23 -0
  268. package/dist/adapters/postgresql/tools/partitioning/index.js.map +1 -0
  269. package/dist/adapters/postgresql/tools/partitioning/info.d.ts +11 -0
  270. package/dist/adapters/postgresql/tools/partitioning/info.d.ts.map +1 -0
  271. package/dist/adapters/postgresql/tools/partitioning/info.js +302 -0
  272. package/dist/adapters/postgresql/tools/partitioning/info.js.map +1 -0
  273. package/dist/adapters/postgresql/tools/partitioning/management.d.ts +28 -0
  274. package/dist/adapters/postgresql/tools/partitioning/management.d.ts.map +1 -0
  275. package/dist/adapters/postgresql/tools/{partitioning.js → partitioning/management.js} +48 -307
  276. package/dist/adapters/postgresql/tools/partitioning/management.js.map +1 -0
  277. package/dist/adapters/postgresql/tools/partman/helpers.d.ts +29 -0
  278. package/dist/adapters/postgresql/tools/partman/helpers.d.ts.map +1 -0
  279. package/dist/adapters/postgresql/tools/partman/helpers.js +59 -0
  280. package/dist/adapters/postgresql/tools/partman/helpers.js.map +1 -0
  281. package/dist/adapters/postgresql/tools/partman/index.d.ts +2 -1
  282. package/dist/adapters/postgresql/tools/partman/index.d.ts.map +1 -1
  283. package/dist/adapters/postgresql/tools/partman/index.js +4 -2
  284. package/dist/adapters/postgresql/tools/partman/index.js.map +1 -1
  285. package/dist/adapters/postgresql/tools/partman/maintenance.d.ts +20 -0
  286. package/dist/adapters/postgresql/tools/partman/maintenance.d.ts.map +1 -0
  287. package/dist/adapters/postgresql/tools/partman/maintenance.js +496 -0
  288. package/dist/adapters/postgresql/tools/partman/maintenance.js.map +1 -0
  289. package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
  290. package/dist/adapters/postgresql/tools/partman/management.js +438 -383
  291. package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
  292. package/dist/adapters/postgresql/tools/partman/operations.d.ts +1 -13
  293. package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
  294. package/dist/adapters/postgresql/tools/partman/operations.js +171 -652
  295. package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
  296. package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
  297. package/dist/adapters/postgresql/tools/performance/analysis.js +69 -42
  298. package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
  299. package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts +18 -0
  300. package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts.map +1 -0
  301. package/dist/adapters/postgresql/tools/performance/anomaly-detection.js +533 -0
  302. package/dist/adapters/postgresql/tools/performance/anomaly-detection.js.map +1 -0
  303. package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts +11 -0
  304. package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts.map +1 -0
  305. package/dist/adapters/postgresql/tools/performance/diagnostics.js +332 -0
  306. package/dist/adapters/postgresql/tools/performance/diagnostics.js.map +1 -0
  307. package/dist/adapters/postgresql/tools/performance/index.d.ts +1 -1
  308. package/dist/adapters/postgresql/tools/performance/index.d.ts.map +1 -1
  309. package/dist/adapters/postgresql/tools/performance/index.js +7 -1
  310. package/dist/adapters/postgresql/tools/performance/index.js.map +1 -1
  311. package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
  312. package/dist/adapters/postgresql/tools/performance/monitoring.js +80 -55
  313. package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
  314. package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
  315. package/dist/adapters/postgresql/tools/performance/optimization.js +18 -11
  316. package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
  317. package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
  318. package/dist/adapters/postgresql/tools/performance/stats.js +439 -318
  319. package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
  320. package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
  321. package/dist/adapters/postgresql/tools/pgcrypto.js +45 -77
  322. package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
  323. package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
  324. package/dist/adapters/postgresql/tools/postgis/basic.js +121 -93
  325. package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
  326. package/dist/adapters/postgresql/tools/schema/index.d.ts +16 -0
  327. package/dist/adapters/postgresql/tools/schema/index.d.ts.map +1 -0
  328. package/dist/adapters/postgresql/tools/schema/index.js +32 -0
  329. package/dist/adapters/postgresql/tools/schema/index.js.map +1 -0
  330. package/dist/adapters/postgresql/tools/schema/objects.d.ts +15 -0
  331. package/dist/adapters/postgresql/tools/schema/objects.d.ts.map +1 -0
  332. package/dist/adapters/postgresql/tools/schema/objects.js +378 -0
  333. package/dist/adapters/postgresql/tools/schema/objects.js.map +1 -0
  334. package/dist/adapters/postgresql/tools/schema/views.d.ts +15 -0
  335. package/dist/adapters/postgresql/tools/schema/views.d.ts.map +1 -0
  336. package/dist/adapters/postgresql/tools/{schema.js → schema/views.js} +64 -386
  337. package/dist/adapters/postgresql/tools/schema/views.js.map +1 -0
  338. package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
  339. package/dist/adapters/postgresql/tools/stats/advanced.js +1 -218
  340. package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
  341. package/dist/adapters/postgresql/tools/stats/math-utils.d.ts +33 -0
  342. package/dist/adapters/postgresql/tools/stats/math-utils.d.ts.map +1 -0
  343. package/dist/adapters/postgresql/tools/stats/math-utils.js +225 -0
  344. package/dist/adapters/postgresql/tools/stats/math-utils.js.map +1 -0
  345. package/dist/adapters/postgresql/tools/text/index.d.ts +16 -0
  346. package/dist/adapters/postgresql/tools/text/index.d.ts.map +1 -0
  347. package/dist/adapters/postgresql/tools/text/index.js +33 -0
  348. package/dist/adapters/postgresql/tools/text/index.js.map +1 -0
  349. package/dist/adapters/postgresql/tools/text/matching.d.ts +17 -0
  350. package/dist/adapters/postgresql/tools/text/matching.d.ts.map +1 -0
  351. package/dist/adapters/postgresql/tools/text/matching.js +565 -0
  352. package/dist/adapters/postgresql/tools/text/matching.js.map +1 -0
  353. package/dist/adapters/postgresql/tools/text/search.d.ts +17 -0
  354. package/dist/adapters/postgresql/tools/text/search.d.ts.map +1 -0
  355. package/dist/adapters/postgresql/tools/text/search.js +653 -0
  356. package/dist/adapters/postgresql/tools/text/search.js.map +1 -0
  357. package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
  358. package/dist/adapters/postgresql/tools/transactions.js +11 -27
  359. package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
  360. package/dist/adapters/postgresql/tools/vector/{basic.d.ts → data.d.ts} +10 -8
  361. package/dist/adapters/postgresql/tools/vector/data.d.ts.map +1 -0
  362. package/dist/adapters/postgresql/tools/vector/data.js +540 -0
  363. package/dist/adapters/postgresql/tools/vector/data.js.map +1 -0
  364. package/dist/adapters/postgresql/tools/vector/index.d.ts.map +1 -1
  365. package/dist/adapters/postgresql/tools/vector/index.js +6 -2
  366. package/dist/adapters/postgresql/tools/vector/index.js.map +1 -1
  367. package/dist/adapters/postgresql/tools/vector/management.d.ts +11 -0
  368. package/dist/adapters/postgresql/tools/vector/management.d.ts.map +1 -0
  369. package/dist/adapters/postgresql/tools/vector/management.js +425 -0
  370. package/dist/adapters/postgresql/tools/vector/management.js.map +1 -0
  371. package/dist/adapters/postgresql/tools/vector/query.d.ts +14 -0
  372. package/dist/adapters/postgresql/tools/vector/query.d.ts.map +1 -0
  373. package/dist/adapters/postgresql/tools/vector/query.js +767 -0
  374. package/dist/adapters/postgresql/tools/vector/query.js.map +1 -0
  375. package/dist/adapters/postgresql/tools/vector/{advanced.d.ts → search-advanced.d.ts} +4 -5
  376. package/dist/adapters/postgresql/tools/vector/search-advanced.d.ts.map +1 -0
  377. package/dist/adapters/postgresql/tools/vector/search-advanced.js +626 -0
  378. package/dist/adapters/postgresql/tools/vector/search-advanced.js.map +1 -0
  379. package/dist/auth/scopes.d.ts.map +1 -1
  380. package/dist/auth/scopes.js +3 -1
  381. package/dist/auth/scopes.js.map +1 -1
  382. package/dist/cli/args.d.ts +3 -2
  383. package/dist/cli/args.d.ts.map +1 -1
  384. package/dist/cli/args.js +4 -3
  385. package/dist/cli/args.js.map +1 -1
  386. package/dist/cli.js +16 -4
  387. package/dist/cli.js.map +1 -1
  388. package/dist/codemode/api/aliases.d.ts +14 -0
  389. package/dist/codemode/api/aliases.d.ts.map +1 -0
  390. package/dist/codemode/api/aliases.js +503 -0
  391. package/dist/codemode/api/aliases.js.map +1 -0
  392. package/dist/codemode/api/group-api.d.ts +23 -0
  393. package/dist/codemode/api/group-api.d.ts.map +1 -0
  394. package/dist/codemode/api/group-api.js +179 -0
  395. package/dist/codemode/api/group-api.js.map +1 -0
  396. package/dist/codemode/{api.d.ts → api/index.d.ts} +5 -4
  397. package/dist/codemode/api/index.d.ts.map +1 -0
  398. package/dist/codemode/api/index.js +195 -0
  399. package/dist/codemode/api/index.js.map +1 -0
  400. package/dist/codemode/api/maps.d.ts +47 -0
  401. package/dist/codemode/api/maps.d.ts.map +1 -0
  402. package/dist/codemode/api/maps.js +529 -0
  403. package/dist/codemode/api/maps.js.map +1 -0
  404. package/dist/codemode/api/normalize.d.ts +13 -0
  405. package/dist/codemode/api/normalize.d.ts.map +1 -0
  406. package/dist/codemode/api/normalize.js +120 -0
  407. package/dist/codemode/api/normalize.js.map +1 -0
  408. package/dist/codemode/index.d.ts +1 -1
  409. package/dist/codemode/index.d.ts.map +1 -1
  410. package/dist/codemode/index.js +1 -1
  411. package/dist/codemode/index.js.map +1 -1
  412. package/dist/codemode/sandbox.d.ts.map +1 -1
  413. package/dist/codemode/sandbox.js +8 -25
  414. package/dist/codemode/sandbox.js.map +1 -1
  415. package/dist/filtering/ToolConstants.d.ts +11 -11
  416. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  417. package/dist/filtering/ToolConstants.js +28 -15
  418. package/dist/filtering/ToolConstants.js.map +1 -1
  419. package/dist/filtering/ToolFilter.d.ts +0 -32
  420. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  421. package/dist/filtering/ToolFilter.js +0 -43
  422. package/dist/filtering/ToolFilter.js.map +1 -1
  423. package/dist/server/McpServer.d.ts +1 -1
  424. package/dist/server/McpServer.d.ts.map +1 -1
  425. package/dist/server/McpServer.js +1 -2
  426. package/dist/server/McpServer.js.map +1 -1
  427. package/dist/transports/http.d.ts +55 -10
  428. package/dist/transports/http.d.ts.map +1 -1
  429. package/dist/transports/http.js +301 -50
  430. package/dist/transports/http.js.map +1 -1
  431. package/dist/types/filtering.d.ts +1 -1
  432. package/dist/types/filtering.d.ts.map +1 -1
  433. package/dist/types/index.d.ts +2 -2
  434. package/dist/types/index.d.ts.map +1 -1
  435. package/dist/types/index.js.map +1 -1
  436. package/dist/types/mcp.d.ts +0 -21
  437. package/dist/types/mcp.d.ts.map +1 -1
  438. package/dist/types/schema.d.ts +0 -79
  439. package/dist/types/schema.d.ts.map +1 -1
  440. package/dist/utils/fts-config.d.ts +0 -6
  441. package/dist/utils/fts-config.d.ts.map +1 -1
  442. package/dist/utils/fts-config.js +1 -1
  443. package/dist/utils/fts-config.js.map +1 -1
  444. package/dist/utils/icons.d.ts.map +1 -1
  445. package/dist/utils/icons.js +5 -0
  446. package/dist/utils/icons.js.map +1 -1
  447. package/dist/utils/identifiers.d.ts.map +1 -1
  448. package/dist/utils/identifiers.js +6 -6
  449. package/dist/utils/identifiers.js.map +1 -1
  450. package/dist/utils/logger.d.ts +6 -6
  451. package/dist/utils/logger.d.ts.map +1 -1
  452. package/dist/utils/logger.js +18 -15
  453. package/dist/utils/logger.js.map +1 -1
  454. package/dist/utils/progress-utils.d.ts +3 -14
  455. package/dist/utils/progress-utils.d.ts.map +1 -1
  456. package/dist/utils/progress-utils.js +2 -21
  457. package/dist/utils/progress-utils.js.map +1 -1
  458. package/dist/utils/version.d.ts +9 -0
  459. package/dist/utils/version.d.ts.map +1 -0
  460. package/dist/utils/version.js +12 -0
  461. package/dist/utils/version.js.map +1 -0
  462. package/dist/utils/where-clause.d.ts +4 -0
  463. package/dist/utils/where-clause.d.ts.map +1 -1
  464. package/dist/utils/where-clause.js +16 -0
  465. package/dist/utils/where-clause.js.map +1 -1
  466. package/package.json +6 -4
  467. package/dist/adapters/postgresql/schemas/core.d.ts.map +0 -1
  468. package/dist/adapters/postgresql/schemas/core.js.map +0 -1
  469. package/dist/adapters/postgresql/schemas/extensions.d.ts +0 -852
  470. package/dist/adapters/postgresql/schemas/extensions.d.ts.map +0 -1
  471. package/dist/adapters/postgresql/schemas/extensions.js +0 -1202
  472. package/dist/adapters/postgresql/schemas/extensions.js.map +0 -1
  473. package/dist/adapters/postgresql/schemas/jsonb.d.ts +0 -541
  474. package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +0 -1
  475. package/dist/adapters/postgresql/schemas/jsonb.js +0 -814
  476. package/dist/adapters/postgresql/schemas/jsonb.js.map +0 -1
  477. package/dist/adapters/postgresql/schemas/postgis.d.ts.map +0 -1
  478. package/dist/adapters/postgresql/schemas/postgis.js.map +0 -1
  479. package/dist/adapters/postgresql/schemas/stats.d.ts.map +0 -1
  480. package/dist/adapters/postgresql/schemas/stats.js.map +0 -1
  481. package/dist/adapters/postgresql/tools/citext.d.ts +0 -18
  482. package/dist/adapters/postgresql/tools/citext.d.ts.map +0 -1
  483. package/dist/adapters/postgresql/tools/citext.js.map +0 -1
  484. package/dist/adapters/postgresql/tools/introspection.d.ts +0 -15
  485. package/dist/adapters/postgresql/tools/introspection.d.ts.map +0 -1
  486. package/dist/adapters/postgresql/tools/introspection.js +0 -1682
  487. package/dist/adapters/postgresql/tools/introspection.js.map +0 -1
  488. package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +0 -1
  489. package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +0 -1
  490. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts +0 -20
  491. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +0 -1
  492. package/dist/adapters/postgresql/tools/jsonb/basic.js.map +0 -1
  493. package/dist/adapters/postgresql/tools/monitoring.d.ts +0 -13
  494. package/dist/adapters/postgresql/tools/monitoring.d.ts.map +0 -1
  495. package/dist/adapters/postgresql/tools/monitoring.js.map +0 -1
  496. package/dist/adapters/postgresql/tools/partitioning.d.ts +0 -13
  497. package/dist/adapters/postgresql/tools/partitioning.d.ts.map +0 -1
  498. package/dist/adapters/postgresql/tools/partitioning.js.map +0 -1
  499. package/dist/adapters/postgresql/tools/schema.d.ts +0 -13
  500. package/dist/adapters/postgresql/tools/schema.d.ts.map +0 -1
  501. package/dist/adapters/postgresql/tools/schema.js.map +0 -1
  502. package/dist/adapters/postgresql/tools/text.d.ts +0 -13
  503. package/dist/adapters/postgresql/tools/text.d.ts.map +0 -1
  504. package/dist/adapters/postgresql/tools/text.js +0 -1082
  505. package/dist/adapters/postgresql/tools/text.js.map +0 -1
  506. package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +0 -1
  507. package/dist/adapters/postgresql/tools/vector/advanced.js +0 -958
  508. package/dist/adapters/postgresql/tools/vector/advanced.js.map +0 -1
  509. package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +0 -1
  510. package/dist/adapters/postgresql/tools/vector/basic.js +0 -1165
  511. package/dist/adapters/postgresql/tools/vector/basic.js.map +0 -1
  512. package/dist/codemode/api.d.ts.map +0 -1
  513. package/dist/codemode/api.js +0 -1544
  514. package/dist/codemode/api.js.map +0 -1
  515. package/dist/utils/promptGenerator.d.ts +0 -20
  516. package/dist/utils/promptGenerator.d.ts.map +0 -1
  517. package/dist/utils/promptGenerator.js +0 -81
  518. package/dist/utils/promptGenerator.js.map +0 -1
@@ -0,0 +1,17 @@
1
+ /**
2
+ * PostgreSQL Text Tools - Full-Text Search
3
+ *
4
+ * FTS, ranking, headlines, indexing, normalization, vectors, queries, and configs.
5
+ * 8 tools total.
6
+ */
7
+ import type { PostgresAdapter } from "../../PostgresAdapter.js";
8
+ import type { ToolDefinition } from "../../../../types/index.js";
9
+ export declare function createTextSearchTool(adapter: PostgresAdapter): ToolDefinition;
10
+ export declare function createTextRankTool(adapter: PostgresAdapter): ToolDefinition;
11
+ export declare function createTextHeadlineTool(adapter: PostgresAdapter): ToolDefinition;
12
+ export declare function createFtsIndexTool(adapter: PostgresAdapter): ToolDefinition;
13
+ export declare function createTextNormalizeTool(adapter: PostgresAdapter): ToolDefinition;
14
+ export declare function createTextToVectorTool(adapter: PostgresAdapter): ToolDefinition;
15
+ export declare function createTextToQueryTool(adapter: PostgresAdapter): ToolDefinition;
16
+ export declare function createTextSearchConfigTool(adapter: PostgresAdapter): ToolDefinition;
17
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/text/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,4BAA4B,CAAC;AA4BpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAiG7E;AAMD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAuH3E;AAMD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,GACvB,cAAc,CAoJhB;AAMD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CA0F3E;AAMD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,eAAe,GACvB,cAAc,CA8ChB;AAMD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,eAAe,GACvB,cAAc,CAoDhB;AAMD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,GACvB,cAAc,CA6EhB;AAMD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,eAAe,GACvB,cAAc,CAmChB"}
@@ -0,0 +1,653 @@
1
+ /**
2
+ * PostgreSQL Text Tools - Full-Text Search
3
+ *
4
+ * FTS, ranking, headlines, indexing, normalization, vectors, queries, and configs.
5
+ * 8 tools total.
6
+ */
7
+ import { z, ZodError } from "zod";
8
+ import { readOnly, write } from "../../../../utils/annotations.js";
9
+ import { getToolIcons } from "../../../../utils/icons.js";
10
+ import { formatPostgresError } from "../core/error-helpers.js";
11
+ import { sanitizeIdentifier, sanitizeIdentifiers, sanitizeTableName, } from "../../../../utils/identifiers.js";
12
+ import { sanitizeFtsConfig } from "../../../../utils/fts-config.js";
13
+ import { TextSearchSchema, TextSearchSchemaBase, preprocessTextParams,
14
+ // Output schemas
15
+ TextRowsOutputSchema, FtsIndexOutputSchema, TextNormalizeOutputSchema, TextToVectorOutputSchema, TextToQueryOutputSchema, TextSearchConfigOutputSchema, } from "../../schemas/index.js";
16
+ // =============================================================================
17
+ // pg_text_search
18
+ // =============================================================================
19
+ export function createTextSearchTool(adapter) {
20
+ return {
21
+ name: "pg_text_search",
22
+ description: "Full-text search using tsvector and tsquery.",
23
+ group: "text",
24
+ inputSchema: TextSearchSchemaBase, // Base schema for MCP visibility
25
+ outputSchema: TextRowsOutputSchema,
26
+ annotations: readOnly("Full-Text Search"),
27
+ icons: getToolIcons("text", readOnly("Full-Text Search")),
28
+ handler: async (params, _context) => {
29
+ try {
30
+ const parsed = TextSearchSchema.parse(params);
31
+ const cfg = sanitizeFtsConfig(parsed.config ?? "english");
32
+ // Handle both column (string) and columns (array) parameters
33
+ // The preprocessor converts column → columns, but we handle both for safety
34
+ let cols;
35
+ if (parsed.columns !== undefined && parsed.columns.length > 0) {
36
+ cols = parsed.columns;
37
+ }
38
+ else if (parsed.column !== undefined) {
39
+ cols = [parsed.column];
40
+ }
41
+ else {
42
+ return {
43
+ success: false,
44
+ error: "Either 'columns' (array) or 'column' (string) is required",
45
+ };
46
+ }
47
+ // Build qualified table name with schema support
48
+ // The preprocessor guarantees table is set (converts tableName → table)
49
+ const resolvedTable = parsed.table ?? parsed.tableName;
50
+ if (!resolvedTable) {
51
+ return {
52
+ success: false,
53
+ error: "Either 'table' or 'tableName' is required",
54
+ };
55
+ }
56
+ const tableName = sanitizeTableName(resolvedTable, parsed.schema);
57
+ const sanitizedCols = sanitizeIdentifiers(cols);
58
+ const selectCols = parsed.select !== undefined && parsed.select.length > 0
59
+ ? sanitizeIdentifiers(parsed.select).join(", ")
60
+ : "*";
61
+ const tsvector = sanitizedCols
62
+ .map((c) => `coalesce(${c}, '')`)
63
+ .join(" || ' ' || ");
64
+ // Coerce limit with NaN fallback (z.any() passes through strings)
65
+ const rawLimit = Number(parsed.limit);
66
+ const limitRaw = parsed.limit === undefined
67
+ ? undefined
68
+ : isNaN(rawLimit)
69
+ ? undefined
70
+ : rawLimit;
71
+ const limitVal = limitRaw === 0
72
+ ? null
73
+ : limitRaw !== undefined && limitRaw > 0
74
+ ? limitRaw
75
+ : 100;
76
+ const limitClause = limitVal !== null ? ` LIMIT ${String(limitVal)}` : "";
77
+ const sql = `SELECT ${selectCols}, ts_rank_cd(to_tsvector('${cfg}', ${tsvector}), plainto_tsquery('${cfg}', $1)) as rank
78
+ FROM ${tableName}
79
+ WHERE to_tsvector('${cfg}', ${tsvector}) @@ plainto_tsquery('${cfg}', $1)
80
+ ORDER BY rank DESC${limitClause}`;
81
+ const result = await adapter.executeQuery(sql, [parsed.query]);
82
+ const count = result.rows?.length ?? 0;
83
+ const truncated = limitVal !== null && count === limitVal;
84
+ return {
85
+ rows: result.rows,
86
+ count,
87
+ ...(truncated
88
+ ? {
89
+ truncated: true,
90
+ hint: `Results limited to ${String(limitVal)}. Use limit: 0 for all rows.`,
91
+ }
92
+ : {}),
93
+ };
94
+ }
95
+ catch (error) {
96
+ if (error instanceof ZodError) {
97
+ return {
98
+ success: false,
99
+ error: `pg_text_search validation error: ${error.issues.map((e) => e.message).join(", ")}`,
100
+ };
101
+ }
102
+ return {
103
+ success: false,
104
+ error: formatPostgresError(error, {
105
+ tool: "pg_text_search",
106
+ }),
107
+ };
108
+ }
109
+ },
110
+ };
111
+ }
112
+ // =============================================================================
113
+ // pg_text_rank
114
+ // =============================================================================
115
+ export function createTextRankTool(adapter) {
116
+ // Base schema for MCP visibility (no preprocess)
117
+ const TextRankSchemaBase = z.object({
118
+ table: z.string().optional().describe("Table name"),
119
+ tableName: z.string().optional().describe("Table name (alias for table)"),
120
+ column: z.string().optional().describe("Single column to search"),
121
+ columns: z
122
+ .array(z.string())
123
+ .optional()
124
+ .describe("Multiple columns to search (alternative to column)"),
125
+ query: z.string().optional(),
126
+ config: z.string().optional(),
127
+ normalization: z.any().optional(),
128
+ select: z.array(z.string()).optional().describe("Columns to return"),
129
+ limit: z.any().optional().describe("Max results"),
130
+ schema: z.string().optional().describe("Schema name (default: public)"),
131
+ });
132
+ // Full schema with preprocess for handler parsing
133
+ const TextRankSchema = z.preprocess(preprocessTextParams, TextRankSchemaBase);
134
+ return {
135
+ name: "pg_text_rank",
136
+ description: "Get relevance ranking for full-text search results. Returns matching rows only with rank score.",
137
+ group: "text",
138
+ inputSchema: TextRankSchemaBase, // Base schema for MCP visibility
139
+ outputSchema: TextRowsOutputSchema,
140
+ annotations: readOnly("Text Rank"),
141
+ icons: getToolIcons("text", readOnly("Text Rank")),
142
+ handler: async (params, _context) => {
143
+ try {
144
+ const parsed = TextRankSchema.parse(params);
145
+ const cfg = sanitizeFtsConfig(parsed.config ?? "english");
146
+ const rawNorm = Number(parsed.normalization);
147
+ const norm = parsed.normalization === undefined ? 0 : isNaN(rawNorm) ? 0 : rawNorm;
148
+ // Handle both column (string) and columns (array) parameters
149
+ let cols;
150
+ if (parsed.columns !== undefined && parsed.columns.length > 0) {
151
+ cols = parsed.columns;
152
+ }
153
+ else if (parsed.column !== undefined) {
154
+ cols = [parsed.column];
155
+ }
156
+ else {
157
+ return {
158
+ success: false,
159
+ error: "Either column or columns parameter is required",
160
+ };
161
+ }
162
+ // The preprocessor guarantees table is set (converts tableName → table)
163
+ const resolvedTable = parsed.table ?? parsed.tableName;
164
+ if (!resolvedTable) {
165
+ return {
166
+ success: false,
167
+ error: "Either 'table' or 'tableName' is required",
168
+ };
169
+ }
170
+ const tableName = sanitizeTableName(resolvedTable, parsed.schema);
171
+ const sanitizedCols = sanitizeIdentifiers(cols);
172
+ const selectCols = parsed.select !== undefined && parsed.select.length > 0
173
+ ? sanitizeIdentifiers(parsed.select).join(", ")
174
+ : "*";
175
+ const tsvector = sanitizedCols
176
+ .map((c) => `coalesce(${c}, '')`)
177
+ .join(" || ' ' || ");
178
+ // Coerce limit with NaN fallback (z.any() passes through strings)
179
+ const rawLimit = Number(parsed.limit);
180
+ const limitRaw = parsed.limit === undefined
181
+ ? undefined
182
+ : isNaN(rawLimit)
183
+ ? undefined
184
+ : rawLimit;
185
+ const limitVal = limitRaw === 0
186
+ ? null
187
+ : limitRaw !== undefined && limitRaw > 0
188
+ ? limitRaw
189
+ : 100;
190
+ const limitClause = limitVal !== null ? ` LIMIT ${String(limitVal)}` : "";
191
+ const sql = `SELECT ${selectCols}, ts_rank_cd(to_tsvector('${cfg}', ${tsvector}), plainto_tsquery('${cfg}', $1), ${String(norm)}) as rank
192
+ FROM ${tableName}
193
+ WHERE to_tsvector('${cfg}', ${tsvector}) @@ plainto_tsquery('${cfg}', $1)
194
+ ORDER BY rank DESC${limitClause}`;
195
+ const result = await adapter.executeQuery(sql, [parsed.query]);
196
+ const count = result.rows?.length ?? 0;
197
+ const truncated = limitVal !== null && count === limitVal;
198
+ return {
199
+ rows: result.rows,
200
+ count,
201
+ ...(truncated
202
+ ? {
203
+ truncated: true,
204
+ hint: `Results limited to ${String(limitVal)}. Use limit: 0 for all rows.`,
205
+ }
206
+ : {}),
207
+ };
208
+ }
209
+ catch (error) {
210
+ if (error instanceof ZodError) {
211
+ return {
212
+ success: false,
213
+ error: `pg_text_rank validation error: ${error.issues.map((e) => e.message).join(", ")}`,
214
+ };
215
+ }
216
+ return {
217
+ success: false,
218
+ error: formatPostgresError(error, {
219
+ tool: "pg_text_rank",
220
+ }),
221
+ };
222
+ }
223
+ },
224
+ };
225
+ }
226
+ // =============================================================================
227
+ // pg_text_headline
228
+ // =============================================================================
229
+ export function createTextHeadlineTool(adapter) {
230
+ // Base schema for MCP visibility (no preprocess)
231
+ const HeadlineSchemaBase = z.object({
232
+ table: z.string().optional().describe("Table name"),
233
+ tableName: z.string().optional().describe("Table name (alias for table)"),
234
+ column: z.string().optional(),
235
+ query: z.string().optional(),
236
+ config: z.string().optional(),
237
+ options: z
238
+ .string()
239
+ .optional()
240
+ .describe('Headline options (e.g., "MaxWords=20, MinWords=5"). Note: MinWords must be < MaxWords.'),
241
+ startSel: z
242
+ .string()
243
+ .optional()
244
+ .describe("Start selection marker (default: <b>)"),
245
+ stopSel: z
246
+ .string()
247
+ .optional()
248
+ .describe("Stop selection marker (default: </b>)"),
249
+ maxWords: z.any().optional().describe("Maximum words in headline"),
250
+ minWords: z.any().optional().describe("Minimum words in headline"),
251
+ select: z
252
+ .array(z.string())
253
+ .optional()
254
+ .describe('Columns to return for row identification (e.g., ["id"])'),
255
+ limit: z.any().optional().describe("Max results"),
256
+ schema: z.string().optional().describe("Schema name (default: public)"),
257
+ });
258
+ // Full schema with preprocess for handler parsing
259
+ const HeadlineSchema = z.preprocess(preprocessTextParams, HeadlineSchemaBase);
260
+ return {
261
+ name: "pg_text_headline",
262
+ description: "Generate highlighted snippets from full-text search matches. Use select param for stable row identification (e.g., primary key).",
263
+ group: "text",
264
+ inputSchema: HeadlineSchemaBase, // Base schema for MCP visibility
265
+ outputSchema: TextRowsOutputSchema,
266
+ annotations: readOnly("Text Headline"),
267
+ icons: getToolIcons("text", readOnly("Text Headline")),
268
+ handler: async (params, _context) => {
269
+ try {
270
+ const parsed = HeadlineSchema.parse(params);
271
+ const cfg = sanitizeFtsConfig(parsed.config ?? "english");
272
+ // Build options string from individual params or use provided options
273
+ let opts;
274
+ if (parsed.options) {
275
+ opts = parsed.options;
276
+ }
277
+ else {
278
+ const optParts = [];
279
+ optParts.push(`StartSel=${parsed.startSel ?? "<b>"}`);
280
+ optParts.push(`StopSel=${parsed.stopSel ?? "</b>"}`);
281
+ // Coerce maxWords/minWords with NaN fallback
282
+ const rawMaxWords = Number(parsed.maxWords);
283
+ const maxWords = parsed.maxWords === undefined
284
+ ? 35
285
+ : isNaN(rawMaxWords)
286
+ ? 35
287
+ : rawMaxWords;
288
+ const rawMinWords = Number(parsed.minWords);
289
+ const minWords = parsed.minWords === undefined
290
+ ? 15
291
+ : isNaN(rawMinWords)
292
+ ? 15
293
+ : rawMinWords;
294
+ optParts.push(`MaxWords=${String(maxWords)}`);
295
+ optParts.push(`MinWords=${String(minWords)}`);
296
+ opts = optParts.join(", ");
297
+ }
298
+ // The preprocessor guarantees table is set (converts tableName → table)
299
+ const resolvedTable = parsed.table ?? parsed.tableName;
300
+ if (!resolvedTable) {
301
+ return {
302
+ success: false,
303
+ error: "Either 'table' or 'tableName' is required",
304
+ };
305
+ }
306
+ const tableName = sanitizeTableName(resolvedTable, parsed.schema);
307
+ if (!parsed.column || !parsed.query) {
308
+ return {
309
+ success: false,
310
+ error: "column and query are required",
311
+ };
312
+ }
313
+ const columnName = sanitizeIdentifier(parsed.column);
314
+ // Use provided select columns, or default to * (user should specify PK for stable identification)
315
+ const selectCols = parsed.select !== undefined && parsed.select.length > 0
316
+ ? sanitizeIdentifiers(parsed.select).join(", ") + ", "
317
+ : "";
318
+ // Coerce limit with NaN fallback (z.any() passes through strings)
319
+ const rawLimit = Number(parsed.limit);
320
+ const limitRaw = parsed.limit === undefined
321
+ ? undefined
322
+ : isNaN(rawLimit)
323
+ ? undefined
324
+ : rawLimit;
325
+ const limitVal = limitRaw === 0
326
+ ? null
327
+ : limitRaw !== undefined && limitRaw > 0
328
+ ? limitRaw
329
+ : 100;
330
+ const limitClause = limitVal !== null ? ` LIMIT ${String(limitVal)}` : "";
331
+ const sql = `SELECT ${selectCols}ts_headline('${cfg}', ${columnName}, plainto_tsquery('${cfg}', $1), '${opts}') as headline
332
+ FROM ${tableName}
333
+ WHERE to_tsvector('${cfg}', ${columnName}) @@ plainto_tsquery('${cfg}', $1)${limitClause}`;
334
+ const result = await adapter.executeQuery(sql, [parsed.query]);
335
+ const count = result.rows?.length ?? 0;
336
+ const truncated = limitVal !== null && count === limitVal;
337
+ return {
338
+ rows: result.rows,
339
+ count,
340
+ ...(truncated
341
+ ? {
342
+ truncated: true,
343
+ hint: `Results limited to ${String(limitVal)}. Use limit: 0 for all rows.`,
344
+ }
345
+ : {}),
346
+ };
347
+ }
348
+ catch (error) {
349
+ if (error instanceof ZodError) {
350
+ return {
351
+ success: false,
352
+ error: `pg_text_headline validation error: ${error.issues.map((e) => e.message).join(", ")}`,
353
+ };
354
+ }
355
+ return {
356
+ success: false,
357
+ error: formatPostgresError(error, {
358
+ tool: "pg_text_headline",
359
+ }),
360
+ };
361
+ }
362
+ },
363
+ };
364
+ }
365
+ // =============================================================================
366
+ // pg_create_fts_index
367
+ // =============================================================================
368
+ export function createFtsIndexTool(adapter) {
369
+ // Base schema for MCP visibility (no preprocess)
370
+ const FtsIndexSchemaBase = z.object({
371
+ table: z.string().optional().describe("Table name"),
372
+ tableName: z.string().optional().describe("Table name (alias for table)"),
373
+ column: z.string().optional(),
374
+ name: z.string().optional(),
375
+ config: z.string().optional(),
376
+ ifNotExists: z
377
+ .boolean()
378
+ .optional()
379
+ .describe("Skip if index already exists (default: true)"),
380
+ schema: z.string().optional().describe("Schema name (default: public)"),
381
+ });
382
+ // Full schema with preprocess for handler parsing
383
+ const FtsIndexSchema = z.preprocess(preprocessTextParams, FtsIndexSchemaBase);
384
+ return {
385
+ name: "pg_create_fts_index",
386
+ description: "Create a GIN index for full-text search on a column.",
387
+ group: "text",
388
+ inputSchema: FtsIndexSchemaBase, // Base schema for MCP visibility
389
+ outputSchema: FtsIndexOutputSchema,
390
+ annotations: write("Create FTS Index"),
391
+ icons: getToolIcons("text", write("Create FTS Index")),
392
+ handler: async (params, _context) => {
393
+ try {
394
+ const parsed = FtsIndexSchema.parse(params);
395
+ const cfg = sanitizeFtsConfig(parsed.config ?? "english");
396
+ // The preprocessor guarantees table is set (converts tableName → table)
397
+ const resolvedTable = parsed.table ?? parsed.tableName;
398
+ if (!resolvedTable) {
399
+ return {
400
+ success: false,
401
+ error: "Either 'table' or 'tableName' is required",
402
+ };
403
+ }
404
+ if (!parsed.column) {
405
+ return {
406
+ success: false,
407
+ error: "column is required",
408
+ };
409
+ }
410
+ const defaultIndexName = `idx_${resolvedTable}_${parsed.column}_fts`;
411
+ const resolvedIndexName = parsed.name ?? defaultIndexName;
412
+ const indexName = sanitizeIdentifier(resolvedIndexName);
413
+ // Default to IF NOT EXISTS for safer operation (skip existing indexes)
414
+ const useIfNotExists = parsed.ifNotExists !== false;
415
+ const ifNotExists = useIfNotExists ? "IF NOT EXISTS " : "";
416
+ // Build qualified table name with schema support
417
+ const tableName = sanitizeTableName(resolvedTable, parsed.schema);
418
+ const columnName = sanitizeIdentifier(parsed.column);
419
+ // Check if index exists before creation (to accurately report 'skipped')
420
+ let existedBefore = false;
421
+ if (useIfNotExists) {
422
+ const checkResult = await adapter.executeQuery(`SELECT 1 FROM pg_indexes WHERE indexname = $1 LIMIT 1`, [resolvedIndexName]);
423
+ existedBefore = (checkResult.rows?.length ?? 0) > 0;
424
+ }
425
+ const sql = `CREATE INDEX ${ifNotExists}${indexName} ON ${tableName} USING gin(to_tsvector('${cfg}', ${columnName}))`;
426
+ await adapter.executeQuery(sql);
427
+ return {
428
+ success: true,
429
+ index: resolvedIndexName,
430
+ config: cfg,
431
+ skipped: existedBefore,
432
+ };
433
+ }
434
+ catch (error) {
435
+ if (error instanceof ZodError) {
436
+ return {
437
+ success: false,
438
+ error: `pg_create_fts_index validation error: ${error.issues.map((e) => e.message).join(", ")}`,
439
+ };
440
+ }
441
+ return {
442
+ success: false,
443
+ error: formatPostgresError(error, {
444
+ tool: "pg_create_fts_index",
445
+ }),
446
+ };
447
+ }
448
+ },
449
+ };
450
+ }
451
+ // =============================================================================
452
+ // pg_text_normalize
453
+ // =============================================================================
454
+ export function createTextNormalizeTool(adapter) {
455
+ const NormalizeSchemaBase = z.object({
456
+ text: z.string().optional().describe("Text to remove accent marks from"),
457
+ });
458
+ const NormalizeSchema = z.object({
459
+ text: z.string().describe("Text to remove accent marks from"),
460
+ });
461
+ return {
462
+ name: "pg_text_normalize",
463
+ description: "Remove accent marks (diacritics) from text using PostgreSQL unaccent extension. Note: Does NOT lowercase or trim—use LOWER()/TRIM() in a query for those operations.",
464
+ group: "text",
465
+ inputSchema: NormalizeSchemaBase,
466
+ outputSchema: TextNormalizeOutputSchema,
467
+ annotations: readOnly("Text Normalize"),
468
+ icons: getToolIcons("text", readOnly("Text Normalize")),
469
+ handler: async (params, _context) => {
470
+ try {
471
+ const parsed = NormalizeSchema.parse(params ?? {});
472
+ // Ensure unaccent extension is available
473
+ await adapter.executeQuery("CREATE EXTENSION IF NOT EXISTS unaccent");
474
+ const result = await adapter.executeQuery(`SELECT unaccent($1) as normalized`, [parsed.text]);
475
+ return { normalized: result.rows?.[0]?.["normalized"] };
476
+ }
477
+ catch (error) {
478
+ if (error instanceof ZodError) {
479
+ return {
480
+ success: false,
481
+ error: `pg_text_normalize validation error: ${error.issues.map((e) => e.message).join(", ")}`,
482
+ };
483
+ }
484
+ return {
485
+ success: false,
486
+ error: formatPostgresError(error, {
487
+ tool: "pg_text_normalize",
488
+ }),
489
+ };
490
+ }
491
+ },
492
+ };
493
+ }
494
+ // =============================================================================
495
+ // pg_text_to_vector
496
+ // =============================================================================
497
+ export function createTextToVectorTool(adapter) {
498
+ const ToVectorSchemaBase = z.object({
499
+ text: z.string().optional().describe("Text to convert to tsvector"),
500
+ config: z
501
+ .string()
502
+ .optional()
503
+ .describe("Text search configuration (default: english)"),
504
+ });
505
+ const ToVectorSchema = z.object({
506
+ text: z.string().describe("Text to convert to tsvector"),
507
+ config: z
508
+ .string()
509
+ .optional()
510
+ .describe("Text search configuration (default: english)"),
511
+ });
512
+ return {
513
+ name: "pg_text_to_vector",
514
+ description: "Convert text to tsvector representation for full-text search operations.",
515
+ group: "text",
516
+ inputSchema: ToVectorSchemaBase,
517
+ outputSchema: TextToVectorOutputSchema,
518
+ annotations: readOnly("Text to Vector"),
519
+ icons: getToolIcons("text", readOnly("Text to Vector")),
520
+ handler: async (params, _context) => {
521
+ try {
522
+ const parsed = ToVectorSchema.parse(params ?? {});
523
+ const cfg = parsed.config ?? "english";
524
+ const result = await adapter.executeQuery(`SELECT to_tsvector($1, $2) as vector`, [cfg, parsed.text]);
525
+ return { vector: result.rows?.[0]?.["vector"] };
526
+ }
527
+ catch (error) {
528
+ if (error instanceof ZodError) {
529
+ return {
530
+ success: false,
531
+ error: `pg_text_to_vector validation error: ${error.issues.map((e) => e.message).join(", ")}`,
532
+ };
533
+ }
534
+ return {
535
+ success: false,
536
+ error: formatPostgresError(error, {
537
+ tool: "pg_text_to_vector",
538
+ }),
539
+ };
540
+ }
541
+ },
542
+ };
543
+ }
544
+ // =============================================================================
545
+ // pg_text_to_query
546
+ // =============================================================================
547
+ export function createTextToQueryTool(adapter) {
548
+ const ToQuerySchemaBase = z.object({
549
+ text: z.string().optional().describe("Text to convert to tsquery"),
550
+ config: z
551
+ .string()
552
+ .optional()
553
+ .describe("Text search configuration (default: english)"),
554
+ mode: z
555
+ .string()
556
+ .optional()
557
+ .describe("Query parsing mode: plain (default), phrase (proximity), websearch (Google-like)"),
558
+ });
559
+ const ToQuerySchema = z.object({
560
+ text: z.string().describe("Text to convert to tsquery"),
561
+ config: z
562
+ .string()
563
+ .optional()
564
+ .describe("Text search configuration (default: english)"),
565
+ mode: z
566
+ .enum(["plain", "phrase", "websearch"])
567
+ .optional()
568
+ .describe("Query parsing mode: plain (default), phrase (proximity), websearch (Google-like)"),
569
+ });
570
+ return {
571
+ name: "pg_text_to_query",
572
+ description: "Convert text to tsquery for full-text search. Modes: plain (default), phrase (proximity matching), websearch (Google-like syntax with AND/OR/-).",
573
+ group: "text",
574
+ inputSchema: ToQuerySchemaBase,
575
+ outputSchema: TextToQueryOutputSchema,
576
+ annotations: readOnly("Text to Query"),
577
+ icons: getToolIcons("text", readOnly("Text to Query")),
578
+ handler: async (params, _context) => {
579
+ try {
580
+ const parsed = ToQuerySchema.parse(params ?? {});
581
+ const cfg = parsed.config ?? "english";
582
+ const mode = parsed.mode ?? "plain";
583
+ let fn;
584
+ switch (mode) {
585
+ case "phrase":
586
+ fn = "phraseto_tsquery";
587
+ break;
588
+ case "websearch":
589
+ fn = "websearch_to_tsquery";
590
+ break;
591
+ default:
592
+ fn = "plainto_tsquery";
593
+ }
594
+ const result = await adapter.executeQuery(`SELECT ${fn}($1, $2) as query`, [cfg, parsed.text]);
595
+ return { query: result.rows?.[0]?.["query"], mode };
596
+ }
597
+ catch (error) {
598
+ if (error instanceof ZodError) {
599
+ return {
600
+ success: false,
601
+ error: `pg_text_to_query validation error: ${error.issues.map((e) => e.message).join(", ")}`,
602
+ };
603
+ }
604
+ return {
605
+ success: false,
606
+ error: formatPostgresError(error, {
607
+ tool: "pg_text_to_query",
608
+ }),
609
+ };
610
+ }
611
+ },
612
+ };
613
+ }
614
+ // =============================================================================
615
+ // pg_text_search_config
616
+ // =============================================================================
617
+ export function createTextSearchConfigTool(adapter) {
618
+ return {
619
+ name: "pg_text_search_config",
620
+ description: "List available full-text search configurations (e.g., english, german, simple).",
621
+ group: "text",
622
+ inputSchema: z.object({}).default({}),
623
+ outputSchema: TextSearchConfigOutputSchema,
624
+ annotations: readOnly("Search Configurations"),
625
+ icons: getToolIcons("text", readOnly("Search Configurations")),
626
+ handler: async (_params, _context) => {
627
+ try {
628
+ const result = await adapter.executeQuery(`
629
+ SELECT
630
+ c.cfgname as name,
631
+ n.nspname as schema,
632
+ obj_description(c.oid, 'pg_ts_config') as description
633
+ FROM pg_ts_config c
634
+ JOIN pg_namespace n ON n.oid = c.cfgnamespace
635
+ ORDER BY c.cfgname
636
+ `);
637
+ return {
638
+ configs: result.rows ?? [],
639
+ count: result.rows?.length ?? 0,
640
+ };
641
+ }
642
+ catch (error) {
643
+ return {
644
+ success: false,
645
+ error: formatPostgresError(error, {
646
+ tool: "pg_text_search_config",
647
+ }),
648
+ };
649
+ }
650
+ },
651
+ };
652
+ }
653
+ //# sourceMappingURL=search.js.map