@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.
- package/LICENSE +1 -1
- package/README.md +119 -46
- package/dist/__tests__/benchmarks/codemode.bench.js +3 -3
- package/dist/__tests__/benchmarks/codemode.bench.js.map +1 -1
- package/dist/__tests__/benchmarks/connection-pool.bench.js +3 -3
- package/dist/__tests__/benchmarks/connection-pool.bench.js.map +1 -1
- package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts +11 -0
- package/dist/__tests__/benchmarks/introspection-migration.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/introspection-migration.bench.js +143 -0
- package/dist/__tests__/benchmarks/introspection-migration.bench.js.map +1 -0
- package/dist/__tests__/benchmarks/resource-prompts.bench.js +0 -64
- package/dist/__tests__/benchmarks/resource-prompts.bench.js.map +1 -1
- package/dist/__tests__/benchmarks/schema-parsing.bench.js +5 -5
- package/dist/__tests__/benchmarks/schema-parsing.bench.js.map +1 -1
- package/dist/__tests__/benchmarks/tool-filtering.bench.js +17 -8
- package/dist/__tests__/benchmarks/tool-filtering.bench.js.map +1 -1
- package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
- package/dist/__tests__/mocks/adapter.js +2 -1
- package/dist/__tests__/mocks/adapter.js.map +1 -1
- package/dist/adapters/DatabaseAdapter.d.ts +6 -5
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
- package/dist/adapters/DatabaseAdapter.js +11 -20
- package/dist/adapters/DatabaseAdapter.js.map +1 -1
- package/dist/adapters/postgresql/PostgresAdapter.d.ts +5 -26
- package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
- package/dist/adapters/postgresql/PostgresAdapter.js +31 -526
- package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
- package/dist/adapters/postgresql/prompts/index.js +1 -1
- package/dist/adapters/postgresql/prompts/index.js.map +1 -1
- package/dist/adapters/postgresql/resources/index.d.ts +1 -1
- package/dist/adapters/postgresql/resources/index.js +3 -3
- package/dist/adapters/postgresql/resources/index.js.map +1 -1
- package/dist/adapters/postgresql/schema-operations.d.ts +71 -0
- package/dist/adapters/postgresql/schema-operations.d.ts.map +1 -0
- package/dist/adapters/postgresql/schema-operations.js +561 -0
- package/dist/adapters/postgresql/schema-operations.js.map +1 -0
- package/dist/adapters/postgresql/schemas/admin.d.ts +4 -4
- package/dist/adapters/postgresql/schemas/admin.js +4 -4
- package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
- package/dist/adapters/postgresql/schemas/backup.d.ts +2 -2
- package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/backup.js +1 -3
- package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
- package/dist/adapters/postgresql/schemas/core/index.d.ts +6 -0
- package/dist/adapters/postgresql/schemas/core/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/core/index.js +6 -0
- package/dist/adapters/postgresql/schemas/core/index.js.map +1 -0
- package/dist/adapters/postgresql/schemas/{core.d.ts → core/queries.d.ts} +16 -171
- package/dist/adapters/postgresql/schemas/core/queries.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/{core.js → core/queries.js} +5 -213
- package/dist/adapters/postgresql/schemas/core/queries.js.map +1 -0
- package/dist/adapters/postgresql/schemas/core/transactions.d.ts +149 -0
- package/dist/adapters/postgresql/schemas/core/transactions.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/core/transactions.js +239 -0
- package/dist/adapters/postgresql/schemas/core/transactions.js.map +1 -0
- package/dist/adapters/postgresql/schemas/cron.d.ts +12 -12
- package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/cron.js +38 -10
- package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
- package/dist/adapters/postgresql/schemas/extensions/citext.d.ts +222 -0
- package/dist/adapters/postgresql/schemas/extensions/citext.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/citext.js +306 -0
- package/dist/adapters/postgresql/schemas/extensions/citext.js.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/index.d.ts +15 -0
- package/dist/adapters/postgresql/schemas/extensions/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/index.js +20 -0
- package/dist/adapters/postgresql/schemas/extensions/index.js.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts +164 -0
- package/dist/adapters/postgresql/schemas/extensions/kcache.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/kcache.js +225 -0
- package/dist/adapters/postgresql/schemas/extensions/kcache.js.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts +253 -0
- package/dist/adapters/postgresql/schemas/extensions/ltree.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/ltree.js +430 -0
- package/dist/adapters/postgresql/schemas/extensions/ltree.js.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts +251 -0
- package/dist/adapters/postgresql/schemas/extensions/pgcrypto.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js +294 -0
- package/dist/adapters/postgresql/schemas/extensions/pgcrypto.js.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/shared.d.ts +10 -0
- package/dist/adapters/postgresql/schemas/extensions/shared.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/extensions/shared.js +15 -0
- package/dist/adapters/postgresql/schemas/extensions/shared.js.map +1 -0
- package/dist/adapters/postgresql/schemas/index.d.ts +6 -6
- package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/index.js +8 -8
- package/dist/adapters/postgresql/schemas/index.js.map +1 -1
- package/dist/adapters/postgresql/schemas/introspection.d.ts +19 -42
- package/dist/adapters/postgresql/schemas/introspection.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/introspection.js +72 -27
- package/dist/adapters/postgresql/schemas/introspection.js.map +1 -1
- package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts +270 -0
- package/dist/adapters/postgresql/schemas/jsonb/advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/jsonb/advanced.js +371 -0
- package/dist/adapters/postgresql/schemas/jsonb/advanced.js.map +1 -0
- package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts +283 -0
- package/dist/adapters/postgresql/schemas/jsonb/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/jsonb/basic.js +456 -0
- package/dist/adapters/postgresql/schemas/jsonb/basic.js.map +1 -0
- package/dist/adapters/postgresql/schemas/jsonb/index.d.ts +6 -0
- package/dist/adapters/postgresql/schemas/jsonb/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/jsonb/index.js +6 -0
- package/dist/adapters/postgresql/schemas/jsonb/index.js.map +1 -0
- package/dist/adapters/postgresql/schemas/monitoring.d.ts +4 -4
- package/dist/adapters/postgresql/schemas/monitoring.js +2 -2
- package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
- package/dist/adapters/postgresql/schemas/partitioning.d.ts +14 -14
- package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/partitioning.js +64 -46
- package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
- package/dist/adapters/postgresql/schemas/partman.d.ts +16 -14
- package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/partman.js +9 -9
- package/dist/adapters/postgresql/schemas/partman.js.map +1 -1
- package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts +429 -0
- package/dist/adapters/postgresql/schemas/postgis/advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/postgis/advanced.js +495 -0
- package/dist/adapters/postgresql/schemas/postgis/advanced.js.map +1 -0
- package/dist/adapters/postgresql/schemas/{postgis.d.ts → postgis/basic.d.ts} +1 -423
- package/dist/adapters/postgresql/schemas/postgis/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/{postgis.js → postgis/basic.js} +1 -486
- package/dist/adapters/postgresql/schemas/postgis/basic.js.map +1 -0
- package/dist/adapters/postgresql/schemas/postgis/index.d.ts +6 -0
- package/dist/adapters/postgresql/schemas/postgis/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/postgis/index.js +6 -0
- package/dist/adapters/postgresql/schemas/postgis/index.js.map +1 -0
- package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +35 -25
- package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/schema-mgmt.js +57 -19
- package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
- package/dist/adapters/postgresql/schemas/stats/index.d.ts +6 -0
- package/dist/adapters/postgresql/schemas/stats/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/stats/index.js +6 -0
- package/dist/adapters/postgresql/schemas/stats/index.js.map +1 -0
- package/dist/adapters/postgresql/schemas/stats/input.d.ts +260 -0
- package/dist/adapters/postgresql/schemas/stats/input.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/{stats.js → stats/input.js} +2 -331
- package/dist/adapters/postgresql/schemas/stats/input.js.map +1 -0
- package/dist/adapters/postgresql/schemas/{stats.d.ts → stats/output.d.ts} +3 -246
- package/dist/adapters/postgresql/schemas/stats/output.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/stats/output.js +334 -0
- package/dist/adapters/postgresql/schemas/stats/output.js.map +1 -0
- package/dist/adapters/postgresql/schemas/text-search.d.ts +18 -18
- package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/text-search.js +12 -27
- package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
- package/dist/adapters/postgresql/schemas/vector.d.ts +10 -10
- package/dist/adapters/postgresql/schemas/vector.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/vector.js +9 -15
- package/dist/adapters/postgresql/schemas/vector.js.map +1 -1
- package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/backup/dump.js +95 -76
- package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
- package/dist/adapters/postgresql/tools/backup/planning.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/backup/planning.js +345 -287
- package/dist/adapters/postgresql/tools/backup/planning.js.map +1 -1
- package/dist/adapters/postgresql/tools/citext/analysis.d.ts +24 -0
- package/dist/adapters/postgresql/tools/citext/analysis.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/{citext.js → citext/analysis.js} +50 -232
- package/dist/adapters/postgresql/tools/citext/analysis.js.map +1 -0
- package/dist/adapters/postgresql/tools/citext/index.d.ts +15 -0
- package/dist/adapters/postgresql/tools/citext/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/citext/index.js +23 -0
- package/dist/adapters/postgresql/tools/citext/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/citext/setup.d.ts +16 -0
- package/dist/adapters/postgresql/tools/citext/setup.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/citext/setup.js +193 -0
- package/dist/adapters/postgresql/tools/citext/setup.js.map +1 -0
- package/dist/adapters/postgresql/tools/codemode/index.js +1 -1
- package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/convenience.d.ts +12 -22
- package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/convenience.js +100 -210
- package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/error-helpers.d.ts +1 -0
- package/dist/adapters/postgresql/tools/core/error-helpers.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/error-helpers.js +8 -1
- package/dist/adapters/postgresql/tools/core/error-helpers.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/health.js +124 -114
- package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/index.d.ts +2 -1
- package/dist/adapters/postgresql/tools/core/index.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/index.js +3 -2
- package/dist/adapters/postgresql/tools/core/index.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/indexes.js +151 -127
- package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/objects.js +186 -161
- package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/query.js +37 -25
- package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/schemas.d.ts +6 -3
- package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/schemas.js +11 -2
- package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/tables.js +156 -129
- package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/utility.d.ts +26 -0
- package/dist/adapters/postgresql/tools/core/utility.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/core/utility.js +174 -0
- package/dist/adapters/postgresql/tools/core/utility.js.map +1 -0
- package/dist/adapters/postgresql/tools/cron.js +90 -43
- package/dist/adapters/postgresql/tools/cron.js.map +1 -1
- package/dist/adapters/postgresql/tools/introspection/analysis.d.ts +12 -0
- package/dist/adapters/postgresql/tools/introspection/analysis.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/introspection/analysis.js +605 -0
- package/dist/adapters/postgresql/tools/introspection/analysis.js.map +1 -0
- package/dist/adapters/postgresql/tools/introspection/graph.d.ts +55 -0
- package/dist/adapters/postgresql/tools/introspection/graph.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/introspection/graph.js +621 -0
- package/dist/adapters/postgresql/tools/introspection/graph.js.map +1 -0
- package/dist/adapters/postgresql/tools/introspection/index.d.ts +21 -0
- package/dist/adapters/postgresql/tools/introspection/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/introspection/index.js +31 -0
- package/dist/adapters/postgresql/tools/introspection/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/introspection/migration.d.ts +15 -0
- package/dist/adapters/postgresql/tools/introspection/migration.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/introspection/migration.js +575 -0
- package/dist/adapters/postgresql/tools/introspection/migration.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts +20 -0
- package/dist/adapters/postgresql/tools/jsonb/analytics.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/analytics.js +367 -0
- package/dist/adapters/postgresql/tools/jsonb/analytics.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/index.d.ts +4 -2
- package/dist/adapters/postgresql/tools/jsonb/index.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/jsonb/index.js +8 -4
- package/dist/adapters/postgresql/tools/jsonb/index.js.map +1 -1
- package/dist/adapters/postgresql/tools/jsonb/read.d.ts +38 -0
- package/dist/adapters/postgresql/tools/jsonb/read.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/{basic.js → read.js} +41 -482
- package/dist/adapters/postgresql/tools/jsonb/read.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/{advanced.d.ts → transform.d.ts} +1 -13
- package/dist/adapters/postgresql/tools/jsonb/transform.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/{advanced.js → transform.js} +26 -357
- package/dist/adapters/postgresql/tools/jsonb/transform.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/write.d.ts +14 -0
- package/dist/adapters/postgresql/tools/jsonb/write.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/write.js +468 -0
- package/dist/adapters/postgresql/tools/jsonb/write.js.map +1 -0
- package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/kcache.js +116 -51
- package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
- package/dist/adapters/postgresql/tools/ltree.js +346 -260
- package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
- package/dist/adapters/postgresql/tools/migration/index.d.ts +15 -0
- package/dist/adapters/postgresql/tools/migration/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/migration/index.js +23 -0
- package/dist/adapters/postgresql/tools/migration/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts +15 -0
- package/dist/adapters/postgresql/tools/monitoring/analysis.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/{monitoring.js → monitoring/analysis.js} +24 -359
- package/dist/adapters/postgresql/tools/monitoring/analysis.js.map +1 -0
- package/dist/adapters/postgresql/tools/monitoring/basic.d.ts +17 -0
- package/dist/adapters/postgresql/tools/monitoring/basic.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/monitoring/basic.js +432 -0
- package/dist/adapters/postgresql/tools/monitoring/basic.js.map +1 -0
- package/dist/adapters/postgresql/tools/monitoring/index.d.ts +16 -0
- package/dist/adapters/postgresql/tools/monitoring/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/monitoring/index.js +31 -0
- package/dist/adapters/postgresql/tools/monitoring/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/partitioning/index.d.ts +15 -0
- package/dist/adapters/postgresql/tools/partitioning/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partitioning/index.js +23 -0
- package/dist/adapters/postgresql/tools/partitioning/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/partitioning/info.d.ts +11 -0
- package/dist/adapters/postgresql/tools/partitioning/info.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partitioning/info.js +302 -0
- package/dist/adapters/postgresql/tools/partitioning/info.js.map +1 -0
- package/dist/adapters/postgresql/tools/partitioning/management.d.ts +28 -0
- package/dist/adapters/postgresql/tools/partitioning/management.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/{partitioning.js → partitioning/management.js} +48 -307
- package/dist/adapters/postgresql/tools/partitioning/management.js.map +1 -0
- package/dist/adapters/postgresql/tools/partman/helpers.d.ts +29 -0
- package/dist/adapters/postgresql/tools/partman/helpers.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partman/helpers.js +59 -0
- package/dist/adapters/postgresql/tools/partman/helpers.js.map +1 -0
- package/dist/adapters/postgresql/tools/partman/index.d.ts +2 -1
- package/dist/adapters/postgresql/tools/partman/index.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/partman/index.js +4 -2
- package/dist/adapters/postgresql/tools/partman/index.js.map +1 -1
- package/dist/adapters/postgresql/tools/partman/maintenance.d.ts +20 -0
- package/dist/adapters/postgresql/tools/partman/maintenance.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/partman/maintenance.js +496 -0
- package/dist/adapters/postgresql/tools/partman/maintenance.js.map +1 -0
- package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/partman/management.js +438 -383
- package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
- package/dist/adapters/postgresql/tools/partman/operations.d.ts +1 -13
- package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/partman/operations.js +171 -652
- package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
- package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/performance/analysis.js +69 -42
- package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
- package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts +18 -0
- package/dist/adapters/postgresql/tools/performance/anomaly-detection.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/anomaly-detection.js +533 -0
- package/dist/adapters/postgresql/tools/performance/anomaly-detection.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts +11 -0
- package/dist/adapters/postgresql/tools/performance/diagnostics.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/performance/diagnostics.js +332 -0
- package/dist/adapters/postgresql/tools/performance/diagnostics.js.map +1 -0
- package/dist/adapters/postgresql/tools/performance/index.d.ts +1 -1
- package/dist/adapters/postgresql/tools/performance/index.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/performance/index.js +7 -1
- package/dist/adapters/postgresql/tools/performance/index.js.map +1 -1
- package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/performance/monitoring.js +80 -55
- package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
- package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/performance/optimization.js +18 -11
- package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
- package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/performance/stats.js +439 -318
- package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
- package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/pgcrypto.js +45 -77
- package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
- package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/postgis/basic.js +121 -93
- package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
- package/dist/adapters/postgresql/tools/schema/index.d.ts +16 -0
- package/dist/adapters/postgresql/tools/schema/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/schema/index.js +32 -0
- package/dist/adapters/postgresql/tools/schema/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/schema/objects.d.ts +15 -0
- package/dist/adapters/postgresql/tools/schema/objects.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/schema/objects.js +378 -0
- package/dist/adapters/postgresql/tools/schema/objects.js.map +1 -0
- package/dist/adapters/postgresql/tools/schema/views.d.ts +15 -0
- package/dist/adapters/postgresql/tools/schema/views.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/{schema.js → schema/views.js} +64 -386
- package/dist/adapters/postgresql/tools/schema/views.js.map +1 -0
- package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/stats/advanced.js +1 -218
- package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
- package/dist/adapters/postgresql/tools/stats/math-utils.d.ts +33 -0
- package/dist/adapters/postgresql/tools/stats/math-utils.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/stats/math-utils.js +225 -0
- package/dist/adapters/postgresql/tools/stats/math-utils.js.map +1 -0
- package/dist/adapters/postgresql/tools/text/index.d.ts +16 -0
- package/dist/adapters/postgresql/tools/text/index.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/text/index.js +33 -0
- package/dist/adapters/postgresql/tools/text/index.js.map +1 -0
- package/dist/adapters/postgresql/tools/text/matching.d.ts +17 -0
- package/dist/adapters/postgresql/tools/text/matching.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/text/matching.js +565 -0
- package/dist/adapters/postgresql/tools/text/matching.js.map +1 -0
- package/dist/adapters/postgresql/tools/text/search.d.ts +17 -0
- package/dist/adapters/postgresql/tools/text/search.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/text/search.js +653 -0
- package/dist/adapters/postgresql/tools/text/search.js.map +1 -0
- package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/transactions.js +11 -27
- package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
- package/dist/adapters/postgresql/tools/vector/{basic.d.ts → data.d.ts} +10 -8
- package/dist/adapters/postgresql/tools/vector/data.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/vector/data.js +540 -0
- package/dist/adapters/postgresql/tools/vector/data.js.map +1 -0
- package/dist/adapters/postgresql/tools/vector/index.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/vector/index.js +6 -2
- package/dist/adapters/postgresql/tools/vector/index.js.map +1 -1
- package/dist/adapters/postgresql/tools/vector/management.d.ts +11 -0
- package/dist/adapters/postgresql/tools/vector/management.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/vector/management.js +425 -0
- package/dist/adapters/postgresql/tools/vector/management.js.map +1 -0
- package/dist/adapters/postgresql/tools/vector/query.d.ts +14 -0
- package/dist/adapters/postgresql/tools/vector/query.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/vector/query.js +767 -0
- package/dist/adapters/postgresql/tools/vector/query.js.map +1 -0
- package/dist/adapters/postgresql/tools/vector/{advanced.d.ts → search-advanced.d.ts} +4 -5
- package/dist/adapters/postgresql/tools/vector/search-advanced.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/vector/search-advanced.js +626 -0
- package/dist/adapters/postgresql/tools/vector/search-advanced.js.map +1 -0
- package/dist/auth/scopes.d.ts.map +1 -1
- package/dist/auth/scopes.js +3 -1
- package/dist/auth/scopes.js.map +1 -1
- package/dist/cli/args.d.ts +3 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +4 -3
- package/dist/cli/args.js.map +1 -1
- package/dist/cli.js +16 -4
- package/dist/cli.js.map +1 -1
- package/dist/codemode/api/aliases.d.ts +14 -0
- package/dist/codemode/api/aliases.d.ts.map +1 -0
- package/dist/codemode/api/aliases.js +503 -0
- package/dist/codemode/api/aliases.js.map +1 -0
- package/dist/codemode/api/group-api.d.ts +23 -0
- package/dist/codemode/api/group-api.d.ts.map +1 -0
- package/dist/codemode/api/group-api.js +179 -0
- package/dist/codemode/api/group-api.js.map +1 -0
- package/dist/codemode/{api.d.ts → api/index.d.ts} +5 -4
- package/dist/codemode/api/index.d.ts.map +1 -0
- package/dist/codemode/api/index.js +195 -0
- package/dist/codemode/api/index.js.map +1 -0
- package/dist/codemode/api/maps.d.ts +47 -0
- package/dist/codemode/api/maps.d.ts.map +1 -0
- package/dist/codemode/api/maps.js +529 -0
- package/dist/codemode/api/maps.js.map +1 -0
- package/dist/codemode/api/normalize.d.ts +13 -0
- package/dist/codemode/api/normalize.d.ts.map +1 -0
- package/dist/codemode/api/normalize.js +120 -0
- package/dist/codemode/api/normalize.js.map +1 -0
- package/dist/codemode/index.d.ts +1 -1
- package/dist/codemode/index.d.ts.map +1 -1
- package/dist/codemode/index.js +1 -1
- package/dist/codemode/index.js.map +1 -1
- package/dist/codemode/sandbox.d.ts.map +1 -1
- package/dist/codemode/sandbox.js +8 -25
- package/dist/codemode/sandbox.js.map +1 -1
- package/dist/filtering/ToolConstants.d.ts +11 -11
- package/dist/filtering/ToolConstants.d.ts.map +1 -1
- package/dist/filtering/ToolConstants.js +28 -15
- package/dist/filtering/ToolConstants.js.map +1 -1
- package/dist/filtering/ToolFilter.d.ts +0 -32
- package/dist/filtering/ToolFilter.d.ts.map +1 -1
- package/dist/filtering/ToolFilter.js +0 -43
- package/dist/filtering/ToolFilter.js.map +1 -1
- package/dist/server/McpServer.d.ts +1 -1
- package/dist/server/McpServer.d.ts.map +1 -1
- package/dist/server/McpServer.js +1 -2
- package/dist/server/McpServer.js.map +1 -1
- package/dist/transports/http.d.ts +55 -10
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +301 -50
- package/dist/transports/http.js.map +1 -1
- package/dist/types/filtering.d.ts +1 -1
- package/dist/types/filtering.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/mcp.d.ts +0 -21
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/schema.d.ts +0 -79
- package/dist/types/schema.d.ts.map +1 -1
- package/dist/utils/fts-config.d.ts +0 -6
- package/dist/utils/fts-config.d.ts.map +1 -1
- package/dist/utils/fts-config.js +1 -1
- package/dist/utils/fts-config.js.map +1 -1
- package/dist/utils/icons.d.ts.map +1 -1
- package/dist/utils/icons.js +5 -0
- package/dist/utils/icons.js.map +1 -1
- package/dist/utils/identifiers.d.ts.map +1 -1
- package/dist/utils/identifiers.js +6 -6
- package/dist/utils/identifiers.js.map +1 -1
- package/dist/utils/logger.d.ts +6 -6
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +18 -15
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/progress-utils.d.ts +3 -14
- package/dist/utils/progress-utils.d.ts.map +1 -1
- package/dist/utils/progress-utils.js +2 -21
- package/dist/utils/progress-utils.js.map +1 -1
- package/dist/utils/version.d.ts +9 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +12 -0
- package/dist/utils/version.js.map +1 -0
- package/dist/utils/where-clause.d.ts +4 -0
- package/dist/utils/where-clause.d.ts.map +1 -1
- package/dist/utils/where-clause.js +16 -0
- package/dist/utils/where-clause.js.map +1 -1
- package/package.json +6 -4
- package/dist/adapters/postgresql/schemas/core.d.ts.map +0 -1
- package/dist/adapters/postgresql/schemas/core.js.map +0 -1
- package/dist/adapters/postgresql/schemas/extensions.d.ts +0 -852
- package/dist/adapters/postgresql/schemas/extensions.d.ts.map +0 -1
- package/dist/adapters/postgresql/schemas/extensions.js +0 -1202
- package/dist/adapters/postgresql/schemas/extensions.js.map +0 -1
- package/dist/adapters/postgresql/schemas/jsonb.d.ts +0 -541
- package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +0 -1
- package/dist/adapters/postgresql/schemas/jsonb.js +0 -814
- package/dist/adapters/postgresql/schemas/jsonb.js.map +0 -1
- package/dist/adapters/postgresql/schemas/postgis.d.ts.map +0 -1
- package/dist/adapters/postgresql/schemas/postgis.js.map +0 -1
- package/dist/adapters/postgresql/schemas/stats.d.ts.map +0 -1
- package/dist/adapters/postgresql/schemas/stats.js.map +0 -1
- package/dist/adapters/postgresql/tools/citext.d.ts +0 -18
- package/dist/adapters/postgresql/tools/citext.d.ts.map +0 -1
- package/dist/adapters/postgresql/tools/citext.js.map +0 -1
- package/dist/adapters/postgresql/tools/introspection.d.ts +0 -15
- package/dist/adapters/postgresql/tools/introspection.d.ts.map +0 -1
- package/dist/adapters/postgresql/tools/introspection.js +0 -1682
- package/dist/adapters/postgresql/tools/introspection.js.map +0 -1
- package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +0 -1
- package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +0 -1
- package/dist/adapters/postgresql/tools/jsonb/basic.d.ts +0 -20
- package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +0 -1
- package/dist/adapters/postgresql/tools/jsonb/basic.js.map +0 -1
- package/dist/adapters/postgresql/tools/monitoring.d.ts +0 -13
- package/dist/adapters/postgresql/tools/monitoring.d.ts.map +0 -1
- package/dist/adapters/postgresql/tools/monitoring.js.map +0 -1
- package/dist/adapters/postgresql/tools/partitioning.d.ts +0 -13
- package/dist/adapters/postgresql/tools/partitioning.d.ts.map +0 -1
- package/dist/adapters/postgresql/tools/partitioning.js.map +0 -1
- package/dist/adapters/postgresql/tools/schema.d.ts +0 -13
- package/dist/adapters/postgresql/tools/schema.d.ts.map +0 -1
- package/dist/adapters/postgresql/tools/schema.js.map +0 -1
- package/dist/adapters/postgresql/tools/text.d.ts +0 -13
- package/dist/adapters/postgresql/tools/text.d.ts.map +0 -1
- package/dist/adapters/postgresql/tools/text.js +0 -1082
- package/dist/adapters/postgresql/tools/text.js.map +0 -1
- package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +0 -1
- package/dist/adapters/postgresql/tools/vector/advanced.js +0 -958
- package/dist/adapters/postgresql/tools/vector/advanced.js.map +0 -1
- package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +0 -1
- package/dist/adapters/postgresql/tools/vector/basic.js +0 -1165
- package/dist/adapters/postgresql/tools/vector/basic.js.map +0 -1
- package/dist/codemode/api.d.ts.map +0 -1
- package/dist/codemode/api.js +0 -1544
- package/dist/codemode/api.js.map +0 -1
- package/dist/utils/promptGenerator.d.ts +0 -20
- package/dist/utils/promptGenerator.d.ts.map +0 -1
- package/dist/utils/promptGenerator.js +0 -81
- package/dist/utils/promptGenerator.js.map +0 -1
|
@@ -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;
|
|
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"}
|
package/dist/server/McpServer.js
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
126
|
+
private handleStreamableRequest;
|
|
95
127
|
/**
|
|
96
|
-
* Handle
|
|
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
|
|
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
|
|
164
|
+
* Get all active transports (for testing/introspection)
|
|
120
165
|
*/
|
|
121
|
-
|
|
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:
|
|
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
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,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;IAEpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAUD;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAiD;IAE5E,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGvB;IAGJ,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,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB5D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmC5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAgCtB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAWnB;;;;OAIG;YACW,QAAQ;IAyDtB;;OAEG;YACW,aAAa;IA+H3B;;;;;OAKG;YACW,uBAAuB;IA+HrC;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;;;OAIG;YACW,0BAA0B;IAuCxC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAYvC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IA+BtB;;OAEG;IACH,aAAa,IAAI,GAAG,CAClB,MAAM,EACN,6BAA6B,GAAG,kBAAkB,CACnD;CAGF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,EAC3B,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GACzC,aAAa,CAEf"}
|
package/dist/transports/http.js
CHANGED
|
@@ -1,21 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* postgres-mcp - HTTP Transport
|
|
3
3
|
*
|
|
4
|
-
* HTTP
|
|
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
|
|
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 —
|
|
166
|
-
//
|
|
167
|
-
|
|
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
|
-
|
|
319
|
+
this.handleLegacySSERequest(req, res);
|
|
236
320
|
return;
|
|
237
321
|
}
|
|
238
322
|
if (url.pathname === "/messages") {
|
|
239
|
-
await this.
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
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
|
|
472
|
+
* Handle legacy message request (POST /messages?sessionId=<id>).
|
|
473
|
+
*
|
|
474
|
+
* Routes the message to the correct SSEServerTransport instance.
|
|
269
475
|
*/
|
|
270
|
-
async
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
res.
|
|
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
|
|
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
|
|
596
|
+
* Get all active transports (for testing/introspection)
|
|
346
597
|
*/
|
|
347
|
-
|
|
348
|
-
return this.
|
|
598
|
+
getTransports() {
|
|
599
|
+
return this.transports;
|
|
349
600
|
}
|
|
350
601
|
}
|
|
351
602
|
/**
|