@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
@@ -25,7 +25,7 @@ export declare class PostgresMcpServer {
25
25
  /**
26
26
  * Register all tools, resources, and prompts
27
27
  */
28
- private registerComponents;
28
+ registerComponents(): void;
29
29
  /**
30
30
  * Start the server with stdio transport
31
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"McpServer.d.ts","sourceRoot":"","sources":["../../src/server/McpServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,SAAS,CAAqC;gBAE1C,MAAM,EAAE,YAAY;IA+BhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,UAAU,IAAI,eAAe;IAI7B;;OAEG;IACH,eAAe,IAAI,gBAAgB;CAGpC"}
1
+ {"version":3,"file":"McpServer.d.ts","sourceRoot":"","sources":["../../src/server/McpServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,SAAS,CAAqC;gBAE1C,MAAM,EAAE,YAAY;IA8BhC;;OAEG;IACI,kBAAkB,IAAI,IAAI;IAqBjC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,UAAU,IAAI,eAAe;IAI7B;;OAEG;IACH,eAAe,IAAI,gBAAgB;CAGpC"}
@@ -31,8 +31,7 @@ export class PostgresMcpServer {
31
31
  instructions: SERVER_INSTRUCTIONS,
32
32
  });
33
33
  // Connect the logger to the underlying MCP server for protocol logging
34
- // The McpServer.server property exposes the low-level Server instance
35
- logger.setMcpServer(this.mcpServer.server);
34
+ logger.setMcpServer(this.mcpServer);
36
35
  logger.setLoggerName(config.name);
37
36
  logger.info("MCP Server initialized", {
38
37
  name: config.name,
@@ -1 +1 @@
1
- {"version":3,"file":"McpServer.js","sourceRoot":"","sources":["../../src/server/McpServer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAGjF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AASzE;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACpB,SAAS,CAAY;IACrB,OAAO,CAAkB;IACzB,YAAY,CAAmB;IAC/B,SAAS,GAAgC,IAAI,CAAC;IAEtD,YAAY,MAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEvD,4EAA4E;QAC5E,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAC5B;YACE,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,EACD;YACE,YAAY,EAAE;gBACZ,OAAO,EAAE,EAAE;aACZ;YACD,YAAY,EAAE,mBAAmB;SAClC,CACF,CAAC;QAEF,uEAAuE;QACvE,sEAAsE;QACtE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE;YACpC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM;YACvC,YAAY,EAAE,CAAC,SAAS,CAAC;SAC1B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,kCAAkC;QAClC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAE3E,qBAAqB;QACrB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE/C,mBAAmB;QACnB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,MAAM,CAAC;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,MAAM,CAAC;QAE/D,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;YACnC,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,aAAa;YACxB,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,0BAA0B;QAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,+BAA+B;QAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAE5C,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7C,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAEtC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;gBACpC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"McpServer.js","sourceRoot":"","sources":["../../src/server/McpServer.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,15 @@
1
1
  /**
2
2
  * postgres-mcp - HTTP Transport
3
3
  *
4
- * HTTP/SSE transport with OAuth 2.0 support.
4
+ * Dual-protocol HTTP transport with backward compatibility:
5
+ * - `/mcp` — Streamable HTTP transport (MCP protocol 2025-11-25)
6
+ * - `/sse` + `/messages` — Legacy SSE transport (MCP protocol 2024-11-05)
7
+ *
8
+ * Includes OAuth 2.0 support, rate limiting, CORS, and security headers.
5
9
  */
6
10
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
11
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
12
+ import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
7
13
  import type { OAuthResourceServer } from "../auth/OAuthResourceServer.js";
8
14
  import type { TokenValidator } from "../auth/TokenValidator.js";
9
15
  /**
@@ -51,22 +57,33 @@ export interface HttpTransportConfig {
51
57
  * HSTS max-age in seconds (default: 31536000 = 1 year)
52
58
  */
53
59
  hstsMaxAge?: number;
60
+ /**
61
+ * Trust proxy headers for client IP extraction (default: false)
62
+ * When enabled, uses the leftmost IP from X-Forwarded-For for rate limiting.
63
+ * Only enable when running behind a trusted reverse proxy.
64
+ */
65
+ trustProxy?: boolean;
54
66
  }
55
67
  /**
56
68
  * HTTP Transport for MCP
69
+ *
70
+ * Supports two transport protocols simultaneously:
71
+ * 1. Streamable HTTP (2025-11-25) via `/mcp` — preferred for modern clients
72
+ * 2. Legacy SSE (2024-11-05) via `/sse` + `/messages` — backward compatibility
57
73
  */
58
74
  export declare class HttpTransport {
59
75
  private server;
60
76
  private readonly config;
61
- private transport;
62
77
  private readonly onConnect?;
78
+ /** Active transports by session ID (supports both transport types) */
79
+ private readonly transports;
63
80
  private readonly rateLimitMap;
64
81
  private rateLimitCleanupInterval;
65
82
  private static readonly DEFAULT_RATE_LIMIT_WINDOW_MS;
66
83
  private static readonly DEFAULT_RATE_LIMIT_MAX_REQUESTS;
67
84
  private static readonly DEFAULT_MAX_BODY_SIZE;
68
85
  private static readonly DEFAULT_HSTS_MAX_AGE;
69
- constructor(config: HttpTransportConfig, onConnect?: (transport: StreamableHTTPServerTransport) => void);
86
+ constructor(config: HttpTransportConfig, onConnect?: (transport: Transport) => void | Promise<void>);
70
87
  /**
71
88
  * Start the HTTP server
72
89
  */
@@ -84,18 +101,42 @@ export declare class HttpTransport {
84
101
  * @returns true if request should be allowed, false if rate limited
85
102
  */
86
103
  private checkRateLimit;
104
+ /**
105
+ * Extract the client IP address from the request.
106
+ * When trustProxy is enabled, uses the leftmost IP from X-Forwarded-For.
107
+ * Falls back to req.socket.remoteAddress.
108
+ */
109
+ private getClientIp;
110
+ /**
111
+ * Read and parse JSON body from an incoming request.
112
+ * Returns undefined for GET/DELETE/OPTIONS (no body expected).
113
+ * Enforces maxBodySize limit while streaming to prevent memory exhaustion.
114
+ */
115
+ private readBody;
87
116
  /**
88
117
  * Handle incoming HTTP request
89
118
  */
90
119
  private handleRequest;
91
120
  /**
92
- * Handle SSE connection request
121
+ * Handle Streamable HTTP requests on `/mcp`.
122
+ *
123
+ * Supports GET (SSE stream), POST (initialize + messages), DELETE (terminate).
124
+ * Session management is handled via the `Mcp-Session-Id` header.
93
125
  */
94
- private handleSSERequest;
126
+ private handleStreamableRequest;
95
127
  /**
96
- * Handle MCP message request
128
+ * Handle legacy SSE connection request (GET /sse).
129
+ *
130
+ * Creates an SSEServerTransport that establishes an event stream and
131
+ * directs the client to POST messages to `/messages?sessionId=<id>`.
97
132
  */
98
- private handleMessageRequest;
133
+ private handleLegacySSERequest;
134
+ /**
135
+ * Handle legacy message request (POST /messages?sessionId=<id>).
136
+ *
137
+ * Routes the message to the correct SSEServerTransport instance.
138
+ */
139
+ private handleLegacyMessageRequest;
99
140
  /**
100
141
  * Handle protected resource metadata endpoint
101
142
  */
@@ -104,6 +145,10 @@ export declare class HttpTransport {
104
145
  * Handle health check endpoint
105
146
  */
106
147
  private handleHealthCheck;
148
+ /**
149
+ * Handle root info endpoint — helpful for browser visitors and debugging
150
+ */
151
+ private handleRootInfo;
107
152
  /**
108
153
  * Set security headers for all responses
109
154
  */
@@ -116,12 +161,12 @@ export declare class HttpTransport {
116
161
  */
117
162
  private setCorsHeaders;
118
163
  /**
119
- * Get the underlying transport
164
+ * Get all active transports (for testing/introspection)
120
165
  */
121
- getTransport(): StreamableHTTPServerTransport | null;
166
+ getTransports(): Map<string, StreamableHTTPServerTransport | SSEServerTransport>;
122
167
  }
123
168
  /**
124
169
  * Create an HTTP transport instance
125
170
  */
126
- export declare function createHttpTransport(config: HttpTransportConfig, onConnect?: (transport: StreamableHTTPServerTransport) => void): HttpTransport;
171
+ export declare function createHttpTransport(config: HttpTransportConfig, onConnect?: (transport: Transport) => void): HttpTransport;
127
172
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAShE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,uCAAuC;IACvC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAErC,yEAAyE;IACzE,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAEvB,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAMvB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAUD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAEjB;IAGV,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,wBAAwB,CAA+B;IAG/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,4BAA4B,CAAS;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAO;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAW;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAY;gBAGtD,MAAM,EAAE,mBAAmB,EAC3B,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,6BAA6B,KAAK,IAAI;IAqBhE;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAgCtB;;OAEG;YACW,aAAa;IAmI3B;;OAEG;YACW,gBAAgB;IAkB9B;;OAEG;YACW,oBAAoB;IAalC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAYvC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,YAAY,IAAI,6BAA6B,GAAG,IAAI;CAGrD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,EAC3B,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,6BAA6B,KAAK,IAAI,GAC7D,aAAa,CAEf"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,33 @@
1
1
  /**
2
2
  * postgres-mcp - HTTP Transport
3
3
  *
4
- * HTTP/SSE transport with OAuth 2.0 support.
4
+ * Dual-protocol HTTP transport with backward compatibility:
5
+ * - `/mcp` — Streamable HTTP transport (MCP protocol 2025-11-25)
6
+ * - `/sse` + `/messages` — Legacy SSE transport (MCP protocol 2024-11-05)
7
+ *
8
+ * Includes OAuth 2.0 support, rate limiting, CORS, and security headers.
5
9
  */
10
+ import { randomUUID } from "node:crypto";
6
11
  import { createServer, } from "node:http";
7
12
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
13
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
14
+ import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
8
15
  import { validateAuth, formatOAuthError, } from "../auth/middleware.js";
9
16
  import { runWithAuthContext } from "../auth/auth-context.js";
10
17
  import { logger } from "../utils/logger.js";
11
18
  /**
12
19
  * HTTP Transport for MCP
20
+ *
21
+ * Supports two transport protocols simultaneously:
22
+ * 1. Streamable HTTP (2025-11-25) via `/mcp` — preferred for modern clients
23
+ * 2. Legacy SSE (2024-11-05) via `/sse` + `/messages` — backward compatibility
13
24
  */
14
25
  export class HttpTransport {
15
26
  server = null;
16
27
  config;
17
- transport = null;
18
28
  onConnect;
29
+ /** Active transports by session ID (supports both transport types) */
30
+ transports = new Map();
19
31
  // Rate limiting state
20
32
  rateLimitMap = new Map();
21
33
  rateLimitCleanupInterval = null;
@@ -36,6 +48,7 @@ export class HttpTransport {
36
48
  maxBodySize: config.maxBodySize ?? HttpTransport.DEFAULT_MAX_BODY_SIZE,
37
49
  enableHSTS: config.enableHSTS ?? false,
38
50
  hstsMaxAge: config.hstsMaxAge ?? HttpTransport.DEFAULT_HSTS_MAX_AGE,
51
+ trustProxy: config.trustProxy ?? false,
39
52
  };
40
53
  if (onConnect) {
41
54
  this.onConnect = onConnect;
@@ -81,6 +94,16 @@ export class HttpTransport {
81
94
  clearInterval(this.rateLimitCleanupInterval);
82
95
  this.rateLimitCleanupInterval = null;
83
96
  }
97
+ // Close all active transports
98
+ for (const [sessionId, transport] of this.transports) {
99
+ try {
100
+ await transport.close();
101
+ }
102
+ catch {
103
+ logger.warn("Error closing transport during shutdown", { sessionId });
104
+ }
105
+ }
106
+ this.transports.clear();
84
107
  return new Promise((resolve) => {
85
108
  if (this.server) {
86
109
  this.server.close(() => {
@@ -120,7 +143,7 @@ export class HttpTransport {
120
143
  if (!this.config.enableRateLimit) {
121
144
  return true;
122
145
  }
123
- const clientIp = req.socket.remoteAddress ?? "unknown";
146
+ const clientIp = this.getClientIp(req);
124
147
  const now = Date.now();
125
148
  const windowMs = this.config.rateLimitWindowMs ??
126
149
  HttpTransport.DEFAULT_RATE_LIMIT_WINDOW_MS;
@@ -139,6 +162,75 @@ export class HttpTransport {
139
162
  entry.count++;
140
163
  return true;
141
164
  }
165
+ /**
166
+ * Extract the client IP address from the request.
167
+ * When trustProxy is enabled, uses the leftmost IP from X-Forwarded-For.
168
+ * Falls back to req.socket.remoteAddress.
169
+ */
170
+ getClientIp(req) {
171
+ if (this.config.trustProxy) {
172
+ const forwarded = req.headers["x-forwarded-for"];
173
+ if (typeof forwarded === "string") {
174
+ const firstIp = forwarded.split(",")[0]?.trim();
175
+ if (firstIp)
176
+ return firstIp;
177
+ }
178
+ }
179
+ return req.socket.remoteAddress ?? "unknown";
180
+ }
181
+ /**
182
+ * Read and parse JSON body from an incoming request.
183
+ * Returns undefined for GET/DELETE/OPTIONS (no body expected).
184
+ * Enforces maxBodySize limit while streaming to prevent memory exhaustion.
185
+ */
186
+ async readBody(req, res) {
187
+ if (req.method === "GET" ||
188
+ req.method === "DELETE" ||
189
+ req.method === "OPTIONS") {
190
+ return undefined;
191
+ }
192
+ const maxBodySize = this.config.maxBodySize ?? HttpTransport.DEFAULT_MAX_BODY_SIZE;
193
+ return new Promise((resolve, reject) => {
194
+ const chunks = [];
195
+ let receivedBytes = 0;
196
+ let limitExceeded = false;
197
+ req.on("data", (chunk) => {
198
+ if (limitExceeded)
199
+ return;
200
+ receivedBytes += chunk.length;
201
+ if (receivedBytes > maxBodySize) {
202
+ limitExceeded = true;
203
+ req.destroy();
204
+ if (!res.headersSent) {
205
+ res.writeHead(413, { "Content-Type": "application/json" });
206
+ res.end(JSON.stringify({
207
+ error: "payload_too_large",
208
+ error_description: `Request body exceeds maximum size of ${String(maxBodySize)} bytes.`,
209
+ }));
210
+ }
211
+ reject(new Error("Payload too large"));
212
+ return;
213
+ }
214
+ chunks.push(chunk);
215
+ });
216
+ req.on("end", () => {
217
+ if (limitExceeded)
218
+ return;
219
+ const raw = Buffer.concat(chunks).toString("utf-8");
220
+ if (!raw) {
221
+ resolve(undefined);
222
+ return;
223
+ }
224
+ try {
225
+ resolve(JSON.parse(raw));
226
+ }
227
+ catch {
228
+ reject(new Error("Invalid JSON in request body"));
229
+ }
230
+ });
231
+ req.on("error", reject);
232
+ });
233
+ }
142
234
  /**
143
235
  * Handle incoming HTTP request
144
236
  */
@@ -162,10 +254,9 @@ export class HttpTransport {
162
254
  }));
163
255
  return;
164
256
  }
165
- // Check body size — two-layer enforcement:
166
- // 1. Content-Length header for fast rejection of well-behaved clients
167
- // 2. Streaming byte tracking for missing/spoofed headers and chunked encoding
168
- const maxBodySize = this.config.maxBodySize ?? 1048576;
257
+ // Check body size — fast rejection via Content-Length header.
258
+ // Streaming byte tracking for spoofed/missing headers is handled inside readBody().
259
+ const maxBodySize = this.config.maxBodySize ?? HttpTransport.DEFAULT_MAX_BODY_SIZE;
169
260
  const contentLength = parseInt(req.headers["content-length"] ?? "0", 10);
170
261
  if (contentLength > maxBodySize) {
171
262
  res.writeHead(413, { "Content-Type": "application/json" });
@@ -175,28 +266,6 @@ export class HttpTransport {
175
266
  }));
176
267
  return;
177
268
  }
178
- // Streaming body size enforcement — track actual received bytes
179
- // Guard: only attach if req supports event listeners (real IncomingMessage)
180
- let receivedBytes = 0;
181
- let bodyLimitExceeded = false;
182
- if (typeof req.on === "function") {
183
- req.on("data", (chunk) => {
184
- receivedBytes += chunk.length;
185
- if (receivedBytes > maxBodySize && !bodyLimitExceeded) {
186
- bodyLimitExceeded = true;
187
- req.destroy();
188
- if (!res.headersSent) {
189
- res.writeHead(413, { "Content-Type": "application/json" });
190
- res.end(JSON.stringify({
191
- error: "payload_too_large",
192
- error_description: `Request body exceeds maximum size of ${String(maxBodySize)} bytes.`,
193
- }));
194
- }
195
- }
196
- });
197
- }
198
- if (bodyLimitExceeded)
199
- return;
200
269
  const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
201
270
  // Handle well-known endpoints
202
271
  if (url.pathname === "/.well-known/oauth-protected-resource") {
@@ -208,6 +277,11 @@ export class HttpTransport {
208
277
  this.handleHealthCheck(res);
209
278
  return;
210
279
  }
280
+ // Root info endpoint
281
+ if (url.pathname === "/" && req.method === "GET") {
282
+ this.handleRootInfo(res);
283
+ return;
284
+ }
211
285
  // Authenticate if OAuth is configured and path is not public
212
286
  let authCtx;
213
287
  if (this.config.resourceServer && this.config.tokenValidator) {
@@ -231,12 +305,22 @@ export class HttpTransport {
231
305
  }
232
306
  // Dispatch MCP requests — wrap in auth context if OAuth is active
233
307
  const dispatch = async () => {
308
+ // =====================================================================
309
+ // Streamable HTTP Transport (Protocol 2025-11-25) — canonical endpoint
310
+ // =====================================================================
311
+ if (url.pathname === "/mcp") {
312
+ await this.handleStreamableRequest(req, res);
313
+ return;
314
+ }
315
+ // =====================================================================
316
+ // Legacy SSE Transport (Protocol 2024-11-05) — backward compatibility
317
+ // =====================================================================
234
318
  if (url.pathname === "/sse") {
235
- await this.handleSSERequest(req, res);
319
+ this.handleLegacySSERequest(req, res);
236
320
  return;
237
321
  }
238
322
  if (url.pathname === "/messages") {
239
- await this.handleMessageRequest(req, res);
323
+ await this.handleLegacyMessageRequest(req, res, url);
240
324
  return;
241
325
  }
242
326
  res.writeHead(404);
@@ -249,32 +333,171 @@ export class HttpTransport {
249
333
  await dispatch();
250
334
  }
251
335
  }
336
+ // ===========================================================================
337
+ // Streamable HTTP Transport (Protocol 2025-11-25)
338
+ // ===========================================================================
339
+ /**
340
+ * Handle Streamable HTTP requests on `/mcp`.
341
+ *
342
+ * Supports GET (SSE stream), POST (initialize + messages), DELETE (terminate).
343
+ * Session management is handled via the `Mcp-Session-Id` header.
344
+ */
345
+ async handleStreamableRequest(req, res) {
346
+ const sessionId = req.headers["mcp-session-id"];
347
+ // For non-POST requests (GET for SSE stream, DELETE for session termination),
348
+ // delegate directly to the transport if we have a valid session
349
+ if (req.method !== "POST") {
350
+ if (sessionId && this.transports.has(sessionId)) {
351
+ const existing = this.transports.get(sessionId);
352
+ if (existing instanceof StreamableHTTPServerTransport) {
353
+ await existing.handleRequest(req, res);
354
+ return;
355
+ }
356
+ }
357
+ res.writeHead(400, { "Content-Type": "application/json" });
358
+ res.end(JSON.stringify({
359
+ jsonrpc: "2.0",
360
+ error: {
361
+ code: -32000,
362
+ message: "Bad Request: No valid session ID provided",
363
+ },
364
+ id: null,
365
+ }));
366
+ return;
367
+ }
368
+ // POST requests — pre-parse the body so the SDK receives parsed JSON
369
+ let body;
370
+ try {
371
+ body = await this.readBody(req, res);
372
+ }
373
+ catch (readError) {
374
+ // readBody rejects with "Payload too large" after sending 413 to client
375
+ if (readError instanceof Error &&
376
+ readError.message === "Payload too large") {
377
+ return;
378
+ }
379
+ res.writeHead(400, { "Content-Type": "application/json" });
380
+ res.end(JSON.stringify({
381
+ jsonrpc: "2.0",
382
+ error: { code: -32700, message: "Parse error: Invalid JSON" },
383
+ id: null,
384
+ }));
385
+ return;
386
+ }
387
+ // Existing session — route to the correct transport
388
+ if (sessionId && this.transports.has(sessionId)) {
389
+ const existing = this.transports.get(sessionId);
390
+ if (existing instanceof StreamableHTTPServerTransport) {
391
+ await existing.handleRequest(req, res, body);
392
+ return;
393
+ }
394
+ // Session exists but uses legacy SSE transport
395
+ res.writeHead(400, { "Content-Type": "application/json" });
396
+ res.end(JSON.stringify({
397
+ jsonrpc: "2.0",
398
+ error: {
399
+ code: -32000,
400
+ message: "Bad Request: Session exists but uses a different transport protocol",
401
+ },
402
+ id: null,
403
+ }));
404
+ return;
405
+ }
406
+ // No session ID — must be an initialization request
407
+ if (!sessionId && isInitializeRequest(body)) {
408
+ const newTransport = new StreamableHTTPServerTransport({
409
+ sessionIdGenerator: () => randomUUID(),
410
+ onsessioninitialized: (newSessionId) => {
411
+ logger.debug("Streamable HTTP session initialized", {
412
+ sessionId: newSessionId,
413
+ });
414
+ this.transports.set(newSessionId, newTransport);
415
+ },
416
+ });
417
+ // Clean up on close
418
+ newTransport.onclose = () => {
419
+ const sid = newTransport.sessionId;
420
+ if (sid && this.transports.has(sid)) {
421
+ logger.debug("Streamable HTTP transport closed", {
422
+ sessionId: sid,
423
+ });
424
+ this.transports.delete(sid);
425
+ }
426
+ };
427
+ // Connect MCP server to this transport (must complete before handling request)
428
+ if (this.onConnect) {
429
+ await this.onConnect(newTransport);
430
+ }
431
+ // Handle request with pre-parsed body
432
+ await newTransport.handleRequest(req, res, body);
433
+ return;
434
+ }
435
+ // POST without session ID and not an initialization request
436
+ res.writeHead(400, { "Content-Type": "application/json" });
437
+ res.end(JSON.stringify({
438
+ jsonrpc: "2.0",
439
+ error: {
440
+ code: -32000,
441
+ message: "Bad Request: No valid session ID provided",
442
+ },
443
+ id: null,
444
+ }));
445
+ }
446
+ // ===========================================================================
447
+ // Legacy SSE Transport (Protocol 2024-11-05)
448
+ // ===========================================================================
252
449
  /**
253
- * Handle SSE connection request
450
+ * Handle legacy SSE connection request (GET /sse).
451
+ *
452
+ * Creates an SSEServerTransport that establishes an event stream and
453
+ * directs the client to POST messages to `/messages?sessionId=<id>`.
254
454
  */
255
- async handleSSERequest(req, res) {
256
- // Create new transport for this connection
257
- // Note: Do NOT call transport.start() here - the MCP SDK's Server.connect()
258
- // calls start() internally, and calling it twice throws "Transport already started"
259
- const transport = new StreamableHTTPServerTransport();
260
- this.transport = transport;
455
+ handleLegacySSERequest(_req, res) {
456
+ logger.debug("Legacy SSE connection established");
457
+ const transport = new SSEServerTransport("/messages", res);
458
+ this.transports.set(transport.sessionId, transport);
459
+ // Clean up on disconnect
460
+ res.on("close", () => {
461
+ logger.debug("Legacy SSE transport closed", {
462
+ sessionId: transport.sessionId,
463
+ });
464
+ this.transports.delete(transport.sessionId);
465
+ });
466
+ // Connect MCP server to this transport
261
467
  if (this.onConnect) {
262
- this.onConnect(transport);
468
+ void this.onConnect(transport);
263
469
  }
264
- // Handle the request (keeps connection open for SSE)
265
- await transport.handleRequest(req, res);
266
470
  }
267
471
  /**
268
- * Handle MCP message request
472
+ * Handle legacy message request (POST /messages?sessionId=<id>).
473
+ *
474
+ * Routes the message to the correct SSEServerTransport instance.
269
475
  */
270
- async handleMessageRequest(req, res) {
271
- if (!this.transport) {
272
- res.writeHead(400);
273
- res.end(JSON.stringify({ error: "No active connection" }));
476
+ async handleLegacyMessageRequest(req, res, url) {
477
+ const sessionId = url.searchParams.get("sessionId");
478
+ if (!sessionId) {
479
+ res.writeHead(400, { "Content-Type": "application/json" });
480
+ res.end(JSON.stringify({ error: "Missing sessionId parameter" }));
481
+ return;
482
+ }
483
+ const transport = this.transports.get(sessionId);
484
+ if (!transport) {
485
+ res.writeHead(404, { "Content-Type": "application/json" });
486
+ res.end(JSON.stringify({ error: "No transport found for sessionId" }));
487
+ return;
488
+ }
489
+ if (!(transport instanceof SSEServerTransport)) {
490
+ res.writeHead(400, { "Content-Type": "application/json" });
491
+ res.end(JSON.stringify({
492
+ error: "Session exists but uses a different transport protocol. Use /mcp instead.",
493
+ }));
274
494
  return;
275
495
  }
276
- await this.transport.handleRequest(req, res);
496
+ await transport.handlePostMessage(req, res);
277
497
  }
498
+ // ===========================================================================
499
+ // Utility Endpoints
500
+ // ===========================================================================
278
501
  /**
279
502
  * Handle protected resource metadata endpoint
280
503
  */
@@ -296,8 +519,31 @@ export class HttpTransport {
296
519
  res.end(JSON.stringify({
297
520
  status: "healthy",
298
521
  timestamp: new Date().toISOString(),
522
+ oauthEnabled: !!this.config.resourceServer,
523
+ }));
524
+ }
525
+ /**
526
+ * Handle root info endpoint — helpful for browser visitors and debugging
527
+ */
528
+ handleRootInfo(res) {
529
+ res.writeHead(200, { "Content-Type": "application/json" });
530
+ res.end(JSON.stringify({
531
+ name: "postgres-mcp",
532
+ description: "PostgreSQL MCP Server with dual HTTP transport",
533
+ endpoints: {
534
+ "POST /mcp": "JSON-RPC requests (Streamable HTTP, MCP 2025-11-25)",
535
+ "GET /mcp": "SSE stream for server-to-client notifications",
536
+ "DELETE /mcp": "Session termination",
537
+ "GET /sse": "Legacy SSE connection (MCP 2024-11-05)",
538
+ "POST /messages": "Legacy SSE message endpoint",
539
+ "GET /health": "Health check",
540
+ },
541
+ documentation: "https://github.com/neverinfamous/postgres-mcp",
299
542
  }));
300
543
  }
544
+ // ===========================================================================
545
+ // Security Headers
546
+ // ===========================================================================
301
547
  /**
302
548
  * Set security headers for all responses
303
549
  */
@@ -312,6 +558,8 @@ export class HttpTransport {
312
558
  res.setHeader("Content-Security-Policy", "default-src 'none'; frame-ancestors 'none'");
313
559
  // Restrict browser features not needed by an API server
314
560
  res.setHeader("Permissions-Policy", "camera=(), microphone=(), geolocation=()");
561
+ // Prevent referrer leakage — API server does not need referrers
562
+ res.setHeader("Referrer-Policy", "no-referrer");
315
563
  // HTTP Strict Transport Security (for HTTPS deployments)
316
564
  if (this.config.enableHSTS) {
317
565
  const maxAge = this.config.hstsMaxAge ?? HttpTransport.DEFAULT_HSTS_MAX_AGE;
@@ -341,11 +589,14 @@ export class HttpTransport {
341
589
  }
342
590
  }
343
591
  }
592
+ // ===========================================================================
593
+ // Accessors
594
+ // ===========================================================================
344
595
  /**
345
- * Get the underlying transport
596
+ * Get all active transports (for testing/introspection)
346
597
  */
347
- getTransport() {
348
- return this.transport;
598
+ getTransports() {
599
+ return this.transports;
349
600
  }
350
601
  }
351
602
  /**