@zlash65/postgres-ssh-mcp 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/config.d.ts +3 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +122 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/connection/host-key-verifier.d.ts +13 -0
  8. package/dist/connection/host-key-verifier.d.ts.map +1 -0
  9. package/dist/connection/host-key-verifier.js +127 -0
  10. package/dist/connection/host-key-verifier.js.map +1 -0
  11. package/dist/connection/index.d.ts +7 -0
  12. package/dist/connection/index.d.ts.map +1 -0
  13. package/dist/connection/index.js +7 -0
  14. package/dist/connection/index.js.map +1 -0
  15. package/dist/connection/postgres-pool.d.ts +23 -0
  16. package/dist/connection/postgres-pool.d.ts.map +1 -0
  17. package/dist/connection/postgres-pool.js +295 -0
  18. package/dist/connection/postgres-pool.js.map +1 -0
  19. package/dist/connection/ssh-tunnel.d.ts +34 -0
  20. package/dist/connection/ssh-tunnel.d.ts.map +1 -0
  21. package/dist/connection/ssh-tunnel.js +295 -0
  22. package/dist/connection/ssh-tunnel.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +67 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lib/obfuscate.d.ts +2 -0
  28. package/dist/lib/obfuscate.d.ts.map +1 -0
  29. package/dist/lib/obfuscate.js +13 -0
  30. package/dist/lib/obfuscate.js.map +1 -0
  31. package/dist/lib/sql-validator.d.ts +6 -0
  32. package/dist/lib/sql-validator.d.ts.map +1 -0
  33. package/dist/lib/sql-validator.js +684 -0
  34. package/dist/lib/sql-validator.js.map +1 -0
  35. package/dist/lib/tool-response.d.ts +5 -0
  36. package/dist/lib/tool-response.d.ts.map +1 -0
  37. package/dist/lib/tool-response.js +30 -0
  38. package/dist/lib/tool-response.js.map +1 -0
  39. package/dist/server.d.ts +8 -0
  40. package/dist/server.d.ts.map +1 -0
  41. package/dist/server.js +24 -0
  42. package/dist/server.js.map +1 -0
  43. package/dist/tools/admin.d.ts +4 -0
  44. package/dist/tools/admin.d.ts.map +1 -0
  45. package/dist/tools/admin.js +184 -0
  46. package/dist/tools/admin.js.map +1 -0
  47. package/dist/tools/index.d.ts +8 -0
  48. package/dist/tools/index.d.ts.map +1 -0
  49. package/dist/tools/index.js +8 -0
  50. package/dist/tools/index.js.map +1 -0
  51. package/dist/tools/query.d.ts +4 -0
  52. package/dist/tools/query.d.ts.map +1 -0
  53. package/dist/tools/query.js +65 -0
  54. package/dist/tools/query.js.map +1 -0
  55. package/dist/tools/schema.d.ts +4 -0
  56. package/dist/tools/schema.d.ts.map +1 -0
  57. package/dist/tools/schema.js +189 -0
  58. package/dist/tools/schema.js.map +1 -0
  59. package/dist/types.d.ts +93 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +2 -0
  62. package/dist/types.js.map +1 -0
  63. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-validator.js","sourceRoot":"","sources":["../../src/lib/sql-validator.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,IAAI,0BAA0B,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAElD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,sFAAsF,CACvF,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,wBAAwB,CAAC,WAAW,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QAC5B,IAAI,qBAAqB,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QACD,MAAM,IAAI,KAAK,CACb,+DAA+D;YAC7D,sEAAsE,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,KAAK,CACb,gDAAgD;QAC9C,yFAAyF;QACzF,aAAa,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAEtC,IAAI,KAAK,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aACtB,IAAI,KAAK,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;QAEhC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAW;IAC3C,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAElE,IAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACnD,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAEnD,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;YAClE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;YACjD,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IAED,IACE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;QAChC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;QACjC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,EACjC,CAAC;QACD,UAAU,GAAG,IAAI,CAAC;QAClB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9C,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,YAAY,GAAG;QACnB,SAAS;QACT,OAAO;QACP,UAAU;QACV,SAAS;QACT,KAAK;QACL,QAAQ;QACR,SAAS;QACT,QAAQ;KACT,CAAC;IACF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,OAAO,EAAE,CAAC;QACf,OAAO,GAAG,KAAK,CAAC;QAChB,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,IACE,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,CAAC;gBAC9B,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC;gBAC/B,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,EAC/B,CAAC;gBACD,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;gBACvC,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnD,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,IACE,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,CAAC;gBAC9B,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC;gBAC/B,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC;gBAC/B,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,CAAC,EAC9B,CAAC;gBACD,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;gBACvC,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnD,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,SAAS,CAAC;IAEjC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,eAAe,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAElF,MAAM,cAAc,GAClB,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC;YACrC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC;YACtC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC;YACtC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC;YACpC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC;YACrC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC;YACrC,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC;YACnC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CACb,gFAAgF;gBAC9E,uEAAuE,CAC1E,CAAC;QACJ,CAAC;QAED,IAAI,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChF,MAAM,cAAc,GAAG,8BAA8B,CAAC,cAAc,CAAC,CAAC;YACtE,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,iDAAiD;oBAC/C,gCAAgC,CACnC,CAAC;YACJ,CAAC;YAED,MAAM,eAAe,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAElF,MAAM,oBAAoB,GACxB,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC;gBACrC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC;gBACtC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC;gBACtC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC;gBACpC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC;gBACrC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAExC,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CACb,iDAAiD;oBAC/C,qEAAqE;oBACrE,wCAAwC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAC5E,CAAC;YACJ,CAAC;YAED,IAAI,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,sDAAsD;oBACpD,uEAAuE,CAC1E,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACb,cAAc,MAAM,CAAC,IAAI,EAAE,iCAAiC,CAC7D,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,cAAc,GAAG,8BAA8B,CAAC,GAAG,CAAC,CAAC;IAC3D,IAAI,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IAElC,MAAM,UAAU,GAAG,oBAAoB,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE7E,MAAM,SAAS,GACb,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC;QAChC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC/B,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC;QAChC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAEnC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAW,EAAE,KAAa;IAC3D,IAAI,CAAC,GAAG,KAAK,CAAC;IAEd,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACrC,CAAC,IAAI,CAAC,CAAC;YACP,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACzC,CAAC,EAAE,CAAC;YACN,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM;gBAAE,CAAC,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACrC,CAAC,IAAI,CAAC,CAAC;YACP,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACzC,CAAC,IAAI,CAAC,CAAC;oBACP,MAAM;gBACR,CAAC;gBACD,CAAC,EAAE,CAAC;YACN,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM;IACR,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAEnC,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACpD,IAAI,OAAO,KAAK,CAAC,CAAC;YAAE,MAAM;QAE1B,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7D,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;QAC/C,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAChE,WAAW,GAAG,OAAO,GAAG,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QAE/D,IAAI,UAAU,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;YACxD,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;YAClE,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,2BAA2B,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC7D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,WAAW,GAAG,UAAU,GAAG,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAExE,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YAClC,IACE,KAAK,KAAK,QAAQ;gBAClB,KAAK,KAAK,QAAQ;gBAClB,KAAK,KAAK,QAAQ;gBAClB,KAAK,KAAK,OAAO,EACjB,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,2BAA2B,CAClC,GAAW,EACX,cAAsB;IAEtB,IAAI,GAAG,CAAC,cAAc,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAE7C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC;IAC3B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1E,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,aAAa,GAAG,IAAI,CAAC;gBACrB,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,IAAI,KAAK,IAAI;gBAAE,aAAa,GAAG,KAAK,CAAC;YACzC,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;YACvD,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,cAAc,GAAG,IAAI,CAAC;gBACtB,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,cAAc,GAAG,KAAK,CAAC;gBACvB,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YACD,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;YACrD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC5D,IAAI,QAAQ,EAAE,CAAC;oBACb,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACxB,aAAa,GAAG,IAAI,CAAC;oBACrB,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;oBACtB,SAAS;gBACX,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC5D,aAAa,GAAG,KAAK,CAAC;gBACtB,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;gBACtB,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,aAAa,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACtC,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YACD,aAAa,GAAG,CAAC,aAAa,CAAC;YAC/B,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,aAAa,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACtC,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YACD,aAAa,GAAG,CAAC,aAAa,CAAC;YAC/B,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;YACnC,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;aACrB,IAAI,IAAI,KAAK,GAAG;YAAE,KAAK,EAAE,CAAC;QAE/B,CAAC,EAAE,CAAC;IACN,CAAC;IAED,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7B,OAAO,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,GAAW;IACxD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;IACpB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,QAAQ,IAAI,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1E,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,aAAa,GAAG,IAAI,CAAC;gBACrB,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,IAAI,KAAK,IAAI;gBAAE,aAAa,GAAG,KAAK,CAAC;YACzC,SAAS;QACX,CAAC;QAED,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;YACvD,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,cAAc,GAAG,IAAI,CAAC;gBACtB,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,cAAc,GAAG,KAAK,CAAC;gBACvB,CAAC,EAAE,CAAC;YACN,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;YACvE,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC5D,IAAI,QAAQ,EAAE,CAAC;gBACb,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACxB,aAAa,GAAG,IAAI,CAAC;gBACrB,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC1B,SAAS;YACX,CAAC;QACH,CAAC;aAAM,IAAI,aAAa,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7E,aAAa,GAAG,KAAK,CAAC;YACtB,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,aAAa;YAAE,SAAS;QAE5B,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,aAAa,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACtC,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,aAAa,GAAG,CAAC,aAAa,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,aAAa,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACtC,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,aAAa,GAAG,CAAC,aAAa,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,aAAa,IAAI,aAAa;YAAE,SAAS;QAE7C,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,UAAU,GAAG,CAAC,CAAC;gBAEf,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAAE,CAAC,EAAE,CAAC;gBAEhD,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;oBACtB,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACjC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBAChC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBACpC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BAAE,CAAC,EAAE,CAAC;oBAClD,CAAC;yBAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACxC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBACjC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;wBACtC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BAAE,CAAC,EAAE,CAAC;oBAClD,CAAC;yBAAM,CAAC;wBACN,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACrC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;IAE7B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,YAAY,KAAK,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC;YACnC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACpD,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,QAAQ,KAAK,CAAC,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC/B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAChD,SAAS;QACX,CAAC;QAED,MAAM;IACR,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAW;IAC7C,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,kBAAkB,GAAG,CAAC,CAAC,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1E,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,aAAa,GAAG,IAAI,CAAC;gBACrB,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,IAAI,KAAK,IAAI;gBAAE,aAAa,GAAG,KAAK,CAAC;YACzC,SAAS;QACX,CAAC;QAED,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;YACzE,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,cAAc,GAAG,IAAI,CAAC;gBACtB,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,cAAc,GAAG,KAAK,CAAC;gBACvB,CAAC,EAAE,CAAC;YACN,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;YACrD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC5D,IAAI,QAAQ,EAAE,CAAC;oBACb,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACxB,aAAa,GAAG,IAAI,CAAC;oBACrB,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC1B,SAAS;gBACX,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC5D,aAAa,GAAG,KAAK,CAAC;gBACtB,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC1B,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,aAAa;YAAE,SAAS;QAE5B,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,aAAa,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACtC,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,aAAa,GAAG,CAAC,aAAa,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,aAAa,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACtC,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,aAAa,GAAG,CAAC,aAAa,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,aAAa,IAAI,aAAa;YAAE,SAAS;QAE7C,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,kBAAkB,GAAG,CAAC,CAAC;YACvB,IAAI,cAAc,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtC,CAAC;IACH,CAAC;IAED,IAAI,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5B,MAAM,cAAc,GAAG,oBAAoB,CACzC,GAAG,CAAC,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAClC,CAAC,IAAI,EAAE,CAAC;QACT,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACvF,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,GAAG,IAAI,CAAC;YACrB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,IAAI,KAAK,IAAI;gBAAE,aAAa,GAAG,KAAK,CAAC;YACzC,SAAS;QACX,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACtF,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,GAAG,EAAE,CAAC;YACb,cAAc,GAAG,IAAI,CAAC;YACtB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrC,cAAc,GAAG,KAAK,CAAC;gBACvB,CAAC,EAAE,CAAC;YACN,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACzD,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,OAAO;wBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAClC,OAAO,GAAG,EAAE,CAAC;oBACb,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrB,aAAa,GAAG,IAAI,CAAC;oBACrB,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC1B,SAAS;gBACX,CAAC;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC5D,aAAa,GAAG,KAAK,CAAC;gBACtB,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC1B,SAAS;YACX,CAAC;QACH,CAAC;QACD,IAAI,aAAa;YAAE,SAAS;QAE5B,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChD,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,GAAG,IAAI,CAAC;YAChB,UAAU,GAAG,IAAI,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;gBAC9B,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,QAAQ,GAAG,KAAK,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,QAAQ;YAAE,SAAS;QAEvB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,IAAI,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,GAAG,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,OAAO,IAAI,IAAI,CAAC;IAClB,CAAC;IAED,IAAI,OAAO;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ToolResponse } from '../types.js';
2
+ export declare function successResponse(data: unknown): ToolResponse;
3
+ export declare function errorResponse(message: string): ToolResponse;
4
+ export declare function errorResponseFromError(error: unknown): ToolResponse;
5
+ //# sourceMappingURL=tool-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-response.d.ts","sourceRoot":"","sources":["../../src/lib/tool-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAS3D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAW3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAKnE"}
@@ -0,0 +1,30 @@
1
+ import { obfuscateConnectionString } from './obfuscate.js';
2
+ export function successResponse(data) {
3
+ return {
4
+ content: [
5
+ {
6
+ type: 'text',
7
+ text: typeof data === 'string' ? data : JSON.stringify(data, null, 2),
8
+ },
9
+ ],
10
+ };
11
+ }
12
+ export function errorResponse(message) {
13
+ const safeMessage = obfuscateConnectionString(message);
14
+ return {
15
+ content: [
16
+ {
17
+ type: 'text',
18
+ text: `Error: ${safeMessage}`,
19
+ },
20
+ ],
21
+ isError: true,
22
+ };
23
+ }
24
+ export function errorResponseFromError(error) {
25
+ if (error instanceof Error) {
26
+ return errorResponse(error.message);
27
+ }
28
+ return errorResponse(String(error));
29
+ }
30
+ //# sourceMappingURL=tool-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-response.js","sourceRoot":"","sources":["../../src/lib/tool-response.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACtE;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,WAAW,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU,WAAW,EAAE;aAC9B;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ConnectionManager } from './connection/postgres-pool.js';
3
+ export interface ServerFactoryResponse {
4
+ server: McpServer;
5
+ cleanup: () => Promise<void>;
6
+ }
7
+ export declare function createServer(connectionManager: ConnectionManager): ServerFactoryResponse;
8
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAKlE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAgB,YAAY,CAC1B,iBAAiB,EAAE,iBAAiB,GACnC,qBAAqB,CAuBvB"}
package/dist/server.js ADDED
@@ -0,0 +1,24 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { registerQueryTools } from './tools/query.js';
3
+ import { registerSchemaTools } from './tools/schema.js';
4
+ import { registerAdminTools } from './tools/admin.js';
5
+ export function createServer(connectionManager) {
6
+ const server = new McpServer({
7
+ name: 'postgres-ssh-mcp',
8
+ version: '1.0.0',
9
+ }, {
10
+ capabilities: {
11
+ tools: { listChanged: true },
12
+ },
13
+ });
14
+ registerQueryTools(server, connectionManager);
15
+ registerSchemaTools(server, connectionManager);
16
+ registerAdminTools(server, connectionManager);
17
+ return {
18
+ server,
19
+ cleanup: async () => {
20
+ await connectionManager.close();
21
+ },
22
+ };
23
+ }
24
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAOtD,MAAM,UAAU,YAAY,CAC1B,iBAAoC;IAEpC,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;SAC7B;KACF,CACF,CAAC;IAEF,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC9C,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/C,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAE9C,OAAO;QACL,MAAM;QACN,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ConnectionManager } from '../connection/postgres-pool.js';
3
+ export declare function registerAdminTools(server: McpServer, connectionManager: ConnectionManager): void;
4
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/tools/admin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,iBAAiB,EAAE,iBAAiB,GACnC,IAAI,CA0NN"}
@@ -0,0 +1,184 @@
1
+ import { z } from 'zod';
2
+ import { successResponse, errorResponseFromError } from '../lib/tool-response.js';
3
+ export function registerAdminTools(server, connectionManager) {
4
+ server.registerTool('get_connection_status', {
5
+ description: 'Get connection status, pool stats, and tunnel state.',
6
+ inputSchema: {},
7
+ }, async () => {
8
+ const status = connectionManager.getStatus();
9
+ return successResponse(status);
10
+ });
11
+ server.registerTool('list_active_connections', {
12
+ description: 'List active connections from pg_stat_activity.',
13
+ inputSchema: {
14
+ includeIdle: z
15
+ .boolean()
16
+ .optional()
17
+ .default(false)
18
+ .describe('Include idle connections in the listing'),
19
+ },
20
+ }, async ({ includeIdle }) => {
21
+ try {
22
+ let sql = `
23
+ SELECT
24
+ pid,
25
+ usename as username,
26
+ application_name,
27
+ client_addr,
28
+ state,
29
+ query_start,
30
+ EXTRACT(EPOCH FROM (now() - query_start))::integer as query_duration_seconds,
31
+ LEFT(query, 100) as query_preview
32
+ FROM pg_stat_activity
33
+ WHERE datname = current_database()
34
+ AND pid != pg_backend_pid()
35
+ `;
36
+ if (!includeIdle) {
37
+ sql += ` AND state != 'idle'`;
38
+ }
39
+ sql += ' ORDER BY query_start DESC NULLS LAST';
40
+ const result = await connectionManager.executeQuery(sql);
41
+ return successResponse(result.rows);
42
+ }
43
+ catch (error) {
44
+ return errorResponseFromError(error);
45
+ }
46
+ });
47
+ server.registerTool('list_long_running_queries', {
48
+ description: 'List queries running longer than a threshold.',
49
+ inputSchema: {
50
+ minDurationSeconds: z
51
+ .number()
52
+ .optional()
53
+ .default(5)
54
+ .describe('Minimum duration in seconds (default: 5)'),
55
+ },
56
+ }, async ({ minDurationSeconds }) => {
57
+ try {
58
+ const sql = `
59
+ SELECT
60
+ pid,
61
+ usename as username,
62
+ application_name,
63
+ state,
64
+ query_start,
65
+ EXTRACT(EPOCH FROM (now() - query_start))::integer as duration_seconds,
66
+ query
67
+ FROM pg_stat_activity
68
+ WHERE datname = current_database()
69
+ AND pid != pg_backend_pid()
70
+ AND state != 'idle'
71
+ AND query_start < now() - interval '1 second' * $1
72
+ ORDER BY query_start ASC
73
+ `;
74
+ const result = await connectionManager.executeQuery(sql, [
75
+ minDurationSeconds,
76
+ ]);
77
+ return successResponse(result.rows);
78
+ }
79
+ catch (error) {
80
+ return errorResponseFromError(error);
81
+ }
82
+ });
83
+ server.registerTool('get_database_version', {
84
+ description: 'Get PostgreSQL server version.',
85
+ inputSchema: {},
86
+ }, async () => {
87
+ try {
88
+ const result = await connectionManager.executeQuery('SELECT version()');
89
+ return successResponse(result.rows[0]?.version || 'Unknown');
90
+ }
91
+ catch (error) {
92
+ return errorResponseFromError(error);
93
+ }
94
+ });
95
+ server.registerTool('get_database_size', {
96
+ description: 'Get database size and largest tables.',
97
+ inputSchema: {
98
+ limit: z
99
+ .number()
100
+ .optional()
101
+ .default(10)
102
+ .describe('Number of largest tables to return (default: 10)'),
103
+ },
104
+ }, async ({ limit }) => {
105
+ try {
106
+ const dbSizeSql = `
107
+ SELECT
108
+ pg_size_pretty(pg_database_size(current_database())) as database_size,
109
+ current_database() as database_name
110
+ `;
111
+ const tablesSql = `
112
+ SELECT
113
+ schemaname || '.' || tablename as table_name,
114
+ pg_size_pretty(pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(tablename))) as total_size,
115
+ pg_size_pretty(pg_relation_size(quote_ident(schemaname) || '.' || quote_ident(tablename))) as table_size,
116
+ pg_size_pretty(pg_indexes_size(quote_ident(schemaname) || '.' || quote_ident(tablename))) as indexes_size
117
+ FROM pg_tables
118
+ WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
119
+ ORDER BY pg_total_relation_size(quote_ident(schemaname) || '.' || quote_ident(tablename)) DESC
120
+ LIMIT $1
121
+ `;
122
+ const [dbResult, tablesResult] = await Promise.all([
123
+ connectionManager.executeQuery(dbSizeSql),
124
+ connectionManager.executeQuery(tablesSql, [limit]),
125
+ ]);
126
+ return successResponse({
127
+ database: dbResult.rows[0],
128
+ largestTables: tablesResult.rows,
129
+ });
130
+ }
131
+ catch (error) {
132
+ return errorResponseFromError(error);
133
+ }
134
+ });
135
+ server.registerTool('get_table_stats', {
136
+ description: 'Get table statistics (rows, vacuum/analyze, scan counts).',
137
+ inputSchema: {
138
+ schema: z
139
+ .string()
140
+ .optional()
141
+ .default('public')
142
+ .describe('Schema name (default: public)'),
143
+ table: z.string().describe('Table name'),
144
+ },
145
+ }, async ({ schema, table }) => {
146
+ try {
147
+ const sql = `
148
+ SELECT
149
+ schemaname,
150
+ relname as table_name,
151
+ n_live_tup as live_rows,
152
+ n_dead_tup as dead_rows,
153
+ n_mod_since_analyze as rows_modified_since_analyze,
154
+ last_vacuum,
155
+ last_autovacuum,
156
+ last_analyze,
157
+ last_autoanalyze,
158
+ seq_scan,
159
+ seq_tup_read,
160
+ idx_scan,
161
+ idx_tup_fetch,
162
+ n_tup_ins as inserts,
163
+ n_tup_upd as updates,
164
+ n_tup_del as deletes
165
+ FROM pg_stat_user_tables
166
+ WHERE schemaname = $1 AND relname = $2
167
+ `;
168
+ const result = await connectionManager.executeQuery(sql, [
169
+ schema,
170
+ table,
171
+ ]);
172
+ if (result.rows.length === 0) {
173
+ return successResponse({
174
+ error: `Table ${schema}.${table} not found`,
175
+ });
176
+ }
177
+ return successResponse(result.rows[0]);
178
+ }
179
+ catch (error) {
180
+ return errorResponseFromError(error);
181
+ }
182
+ });
183
+ }
184
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/tools/admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tools module exports
3
+ * Central hub for all tool registrations
4
+ */
5
+ export { registerQueryTools } from './query.js';
6
+ export { registerSchemaTools } from './schema.js';
7
+ export { registerAdminTools } from './admin.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tools module exports
3
+ * Central hub for all tool registrations
4
+ */
5
+ export { registerQueryTools } from './query.js';
6
+ export { registerSchemaTools } from './schema.js';
7
+ export { registerAdminTools } from './admin.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ConnectionManager } from '../connection/postgres-pool.js';
3
+ export declare function registerQueryTools(server: McpServer, connectionManager: ConnectionManager): void;
4
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,iBAAiB,EAAE,iBAAiB,GACnC,IAAI,CA4EN"}
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+ import { successResponse, errorResponseFromError } from '../lib/tool-response.js';
3
+ export function registerQueryTools(server, connectionManager) {
4
+ server.registerTool('execute_query', {
5
+ description: 'Execute SQL with optional parameters. Results are capped by MAX_ROWS and include a truncated flag.',
6
+ inputSchema: {
7
+ sql: z.string().describe('SQL to execute'),
8
+ params: z
9
+ .array(z.any())
10
+ .optional()
11
+ .describe('Parameters for $1, $2, ...'),
12
+ },
13
+ }, async ({ sql, params }) => {
14
+ try {
15
+ const result = await connectionManager.executeQuery(sql, params);
16
+ const output = {
17
+ rows: result.rows,
18
+ rowCount: result.rowCount,
19
+ truncated: result.truncated,
20
+ fields: result.fields,
21
+ };
22
+ return successResponse(output);
23
+ }
24
+ catch (error) {
25
+ return errorResponseFromError(error);
26
+ }
27
+ });
28
+ server.registerTool('explain_query', {
29
+ description: 'Return an EXPLAIN plan for a query. ANALYZE executes the query.',
30
+ inputSchema: {
31
+ sql: z.string().describe('SQL query to explain'),
32
+ analyze: z
33
+ .boolean()
34
+ .optional()
35
+ .default(false)
36
+ .describe('Run EXPLAIN ANALYZE (executes the query). Limited in read-only mode.'),
37
+ format: z
38
+ .enum(['text', 'json', 'yaml', 'xml'])
39
+ .optional()
40
+ .default('text')
41
+ .describe('Output format for the execution plan'),
42
+ },
43
+ }, async ({ sql, analyze, format }) => {
44
+ try {
45
+ const options = [`FORMAT ${format.toUpperCase()}`];
46
+ if (analyze) {
47
+ options.push('ANALYZE');
48
+ }
49
+ const explainSql = `EXPLAIN (${options.join(', ')}) ${sql}`;
50
+ const result = await connectionManager.executeQuery(explainSql);
51
+ let output;
52
+ if (format === 'json') {
53
+ output = JSON.stringify(result.rows[0]?.['QUERY PLAN'], null, 2);
54
+ }
55
+ else {
56
+ output = result.rows.map((r) => r['QUERY PLAN']).join('\n');
57
+ }
58
+ return successResponse(output);
59
+ }
60
+ catch (error) {
61
+ return errorResponseFromError(error);
62
+ }
63
+ });
64
+ }
65
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAElF,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,iBAAoC;IAEpC,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,oGAAoG;QACtG,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC1C,MAAM,EAAE,CAAC;iBACN,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;iBACd,QAAQ,EAAE;iBACV,QAAQ,CAAC,4BAA4B,CAAC;SAC1C;KACF,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAEjE,MAAM,MAAM,GAAG;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC;YAEF,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,iEAAiE;QACnE,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAChD,OAAO,EAAE,CAAC;iBACP,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CACP,sEAAsE,CACvE;YACH,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;iBACrC,QAAQ,EAAE;iBACV,OAAO,CAAC,MAAM,CAAC;iBACf,QAAQ,CAAC,sCAAsC,CAAC;SACpD;KACF,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,UAAU,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;YAED,MAAM,UAAU,GAAG,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAEhE,IAAI,MAAc,CAAC;YACnB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC;YAED,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { ConnectionManager } from '../connection/postgres-pool.js';
3
+ export declare function registerSchemaTools(server: McpServer, connectionManager: ConnectionManager): void;
4
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,iBAAiB,EAAE,iBAAiB,GACnC,IAAI,CAgON"}
@@ -0,0 +1,189 @@
1
+ import { z } from 'zod';
2
+ import { successResponse, errorResponseFromError } from '../lib/tool-response.js';
3
+ export function registerSchemaTools(server, connectionManager) {
4
+ server.registerTool('list_schemas', {
5
+ description: 'List schemas (excludes system schemas by default).',
6
+ inputSchema: {
7
+ includeSystem: z
8
+ .boolean()
9
+ .optional()
10
+ .default(false)
11
+ .describe('Include system schemas (pg_*, information_schema)'),
12
+ },
13
+ }, async ({ includeSystem }) => {
14
+ try {
15
+ let sql = `
16
+ SELECT
17
+ schema_name,
18
+ schema_owner,
19
+ CASE
20
+ WHEN schema_name LIKE 'pg_%' THEN 'system'
21
+ WHEN schema_name = 'information_schema' THEN 'system'
22
+ ELSE 'user'
23
+ END as schema_type
24
+ FROM information_schema.schemata
25
+ `;
26
+ if (!includeSystem) {
27
+ sql += ` WHERE schema_name NOT LIKE 'pg_%'
28
+ AND schema_name != 'information_schema'`;
29
+ }
30
+ sql += ' ORDER BY schema_type, schema_name';
31
+ const result = await connectionManager.executeQuery(sql);
32
+ return successResponse(result.rows);
33
+ }
34
+ catch (error) {
35
+ return errorResponseFromError(error);
36
+ }
37
+ });
38
+ server.registerTool('list_tables', {
39
+ description: 'List tables in a schema with estimated row counts and sizes.',
40
+ inputSchema: {
41
+ schema: z
42
+ .string()
43
+ .optional()
44
+ .default('public')
45
+ .describe('Schema name (default: public)'),
46
+ includeViews: z
47
+ .boolean()
48
+ .optional()
49
+ .default(false)
50
+ .describe('Include views in the listing'),
51
+ },
52
+ }, async ({ schema, includeViews }) => {
53
+ try {
54
+ const tableTypes = includeViews
55
+ ? "'BASE TABLE', 'VIEW'"
56
+ : "'BASE TABLE'";
57
+ const sql = `
58
+ SELECT
59
+ t.table_name,
60
+ t.table_type,
61
+ COALESCE(pg_stat_user_tables.n_live_tup, 0) as estimated_row_count,
62
+ pg_size_pretty(pg_total_relation_size(quote_ident(t.table_schema) || '.' || quote_ident(t.table_name))) as total_size
63
+ FROM information_schema.tables t
64
+ LEFT JOIN pg_stat_user_tables
65
+ ON t.table_name = pg_stat_user_tables.relname
66
+ AND t.table_schema = pg_stat_user_tables.schemaname
67
+ WHERE t.table_schema = $1
68
+ AND t.table_type IN (${tableTypes})
69
+ ORDER BY t.table_name
70
+ `;
71
+ const result = await connectionManager.executeQuery(sql, [schema]);
72
+ return successResponse(result.rows);
73
+ }
74
+ catch (error) {
75
+ return errorResponseFromError(error);
76
+ }
77
+ });
78
+ server.registerTool('describe_table', {
79
+ description: 'Describe a table (columns, constraints, indexes).',
80
+ inputSchema: {
81
+ schema: z
82
+ .string()
83
+ .optional()
84
+ .default('public')
85
+ .describe('Schema name (default: public)'),
86
+ table: z.string().describe('Table name to describe'),
87
+ },
88
+ }, async ({ schema, table }) => {
89
+ try {
90
+ const columnsSql = `
91
+ SELECT
92
+ column_name,
93
+ data_type,
94
+ is_nullable,
95
+ column_default,
96
+ character_maximum_length,
97
+ numeric_precision,
98
+ numeric_scale
99
+ FROM information_schema.columns
100
+ WHERE table_schema = $1 AND table_name = $2
101
+ ORDER BY ordinal_position
102
+ `;
103
+ const constraintsSql = `
104
+ SELECT
105
+ tc.constraint_name,
106
+ tc.constraint_type,
107
+ kcu.column_name,
108
+ ccu.table_schema AS foreign_table_schema,
109
+ ccu.table_name AS foreign_table,
110
+ ccu.column_name AS foreign_column
111
+ FROM information_schema.table_constraints tc
112
+ LEFT JOIN information_schema.key_column_usage kcu
113
+ ON tc.constraint_name = kcu.constraint_name
114
+ AND tc.table_schema = kcu.table_schema
115
+ LEFT JOIN information_schema.constraint_column_usage ccu
116
+ ON tc.constraint_name = ccu.constraint_name
117
+ AND tc.table_schema = ccu.table_schema
118
+ WHERE tc.table_schema = $1 AND tc.table_name = $2
119
+ ORDER BY tc.constraint_name, kcu.ordinal_position
120
+ `;
121
+ const indexesSql = `
122
+ SELECT
123
+ indexname,
124
+ indexdef
125
+ FROM pg_indexes
126
+ WHERE schemaname = $1 AND tablename = $2
127
+ ORDER BY indexname
128
+ `;
129
+ const [columnsResult, constraintsResult, indexesResult] = await Promise.all([
130
+ connectionManager.executeQuery(columnsSql, [schema, table]),
131
+ connectionManager.executeQuery(constraintsSql, [schema, table]),
132
+ connectionManager.executeQuery(indexesSql, [schema, table]),
133
+ ]);
134
+ const constraints = {};
135
+ for (const row of constraintsResult.rows) {
136
+ const name = row.constraint_name;
137
+ if (!constraints[name]) {
138
+ constraints[name] = {
139
+ type: row.constraint_type,
140
+ columns: [],
141
+ foreignTable: row.foreign_table,
142
+ foreignSchema: row.foreign_table_schema,
143
+ foreignColumn: row.foreign_column,
144
+ };
145
+ }
146
+ if (row.column_name) {
147
+ constraints[name].columns.push(row.column_name);
148
+ }
149
+ }
150
+ const output = {
151
+ table: { schema, name: table },
152
+ columns: columnsResult.rows,
153
+ constraints: Object.entries(constraints).map(([name, data]) => ({
154
+ name,
155
+ ...data,
156
+ })),
157
+ indexes: indexesResult.rows,
158
+ };
159
+ return successResponse(output);
160
+ }
161
+ catch (error) {
162
+ return errorResponseFromError(error);
163
+ }
164
+ });
165
+ server.registerTool('list_databases', {
166
+ description: 'List databases with owner, encoding, and size.',
167
+ inputSchema: {},
168
+ }, async () => {
169
+ try {
170
+ const sql = `
171
+ SELECT
172
+ datname as name,
173
+ pg_catalog.pg_get_userbyid(datdba) as owner,
174
+ pg_catalog.pg_encoding_to_char(encoding) as encoding,
175
+ datcollate as collation,
176
+ pg_size_pretty(pg_database_size(datname)) as size
177
+ FROM pg_database
178
+ WHERE datistemplate = false
179
+ ORDER BY datname
180
+ `;
181
+ const result = await connectionManager.executeQuery(sql);
182
+ return successResponse(result.rows);
183
+ }
184
+ catch (error) {
185
+ return errorResponseFromError(error);
186
+ }
187
+ });
188
+ }
189
+ //# sourceMappingURL=schema.js.map