pg-admin-mcp 0.1.0 → 0.1.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.
package/README.md CHANGED
@@ -199,7 +199,7 @@ All tool names are prefixed `postgres_`. "Capability flag" is the `PG_<ALIAS>_AL
199
199
 
200
200
  | Tool | What it does | Capability flag |
201
201
  |---|---|---|
202
- | `postgres_execute_sql` | Arbitrary parameterized SQL — reads always work; `INSERT`/`UPDATE`/`DELETE`/`MERGE` need `ALLOW_WRITE`, `CREATE`/`ALTER`/`DROP`/`TRUNCATE` additionally need `ALLOW_DDL`, `GRANT`/`REVOKE` need `ALLOW_ADMIN`. Mutating statements go through dry-run/confirm. | `ALLOW_WRITE` / `ALLOW_DDL` / `ALLOW_ADMIN` (statement-dependent) |
202
+ | `postgres_execute_sql` | Arbitrary parameterized SQL — reads always work; `INSERT`/`UPDATE`/`DELETE`/`MERGE` need `ALLOW_WRITE`, `CREATE`/`ALTER`/`DROP`/`TRUNCATE`, `COMMENT ON`, `SECURITY LABEL`, `REFRESH MATERIALIZED VIEW`, `CALL` and `DO` additionally need `ALLOW_DDL`, `GRANT`/`REVOKE` need `ALLOW_ADMIN`. `VACUUM` cannot run inside a transaction — use `postgres_admin`'s `maintenance_vacuum`. Mutating statements go through dry-run/confirm. | `ALLOW_WRITE` / `ALLOW_DDL` / `ALLOW_ADMIN` (statement-dependent) |
203
203
  | `postgres_insert_batch` | Bulk `INSERT` — set-based `INSERT … SELECT * FROM unnest()`, switching to a bulk strategy above a row threshold. Confirmed on row count alone (no pre-existing rows to checksum). | `ALLOW_WRITE` |
204
204
  | `postgres_update_batch` | Filtered bulk `UPDATE`. `where` is a structured, parameterized filter and is mandatory — an empty filter is refused before any SQL reaches the server. Dry-run/confirm. | `ALLOW_WRITE` |
205
205
  | `postgres_delete_batch` | Filtered bulk `DELETE`, same mandatory-`where` rule as update. Dry-run/confirm. | `ALLOW_WRITE` |
@@ -245,7 +245,7 @@ per-profile opt-in:
245
245
  | Flag | Unlocks |
246
246
  |---|---|
247
247
  | `PG_<ALIAS>_ALLOW_WRITE` | `INSERT`/`UPDATE`/`DELETE`/`MERGE` via `postgres_execute_sql`; `postgres_insert_batch` / `update_batch` / `delete_batch`; `postgres_copy` import direction |
248
- | `PG_<ALIAS>_ALLOW_DDL` | `CREATE`/`ALTER`/`DROP`/`TRUNCATE` via `postgres_execute_sql` |
248
+ | `PG_<ALIAS>_ALLOW_DDL` | `CREATE`/`ALTER`/`DROP`/`TRUNCATE`, `COMMENT ON`, `SECURITY LABEL`, `REFRESH MATERIALIZED VIEW`, `CALL` and `DO` via `postgres_execute_sql` |
249
249
  | `PG_<ALIAS>_ALLOW_ADMIN` | `postgres_admin`'s mutating sub-ops (roles, grants, extensions, sessions, maintenance) and `GRANT`/`REVOKE` via `postgres_execute_sql` |
250
250
  | `PG_<ALIAS>_ALLOW_EXPLAIN_ANALYZE` | `postgres_explain` with `analyze:true` (this actually executes the statement) |
251
251
  | `PG_<ALIAS>_ALLOW_BACKUP` | `postgres_backup` |
@@ -599,9 +599,9 @@ See [docs/releasing.md](docs/releasing.md) for how a tagged commit turns this in
599
599
 
600
600
  ## Status
601
601
 
602
- Personal project, version `0.1.0`. Distributed on npm as `pg-admin-mcp` (`npx -y pg-admin-mcp`) — if
603
- `npx` reports `404 Not Found`, no npm release has been cut yet; until then run it from a clone
604
- (`pnpm install && pnpm build`, then `node /absolute/path/to/dist/index.js` as the client `command`). Docker images are
602
+ Personal project. Distributed on npm as `pg-admin-mcp` (`npx -y pg-admin-mcp`); the current version is
603
+ the one in `package.json`. To run unreleased changes, use a clone (`pnpm install && pnpm build`, then
604
+ `node /absolute/path/to/dist/index.js` as the client `command`). Docker images are
605
605
  built and pushed to Docker Hub as `mrrainx/pg-admin-mcp` (`:pg17`, `:pg16`, `linux/amd64` only) by the
606
606
  release workflow described in [docs/releasing.md](docs/releasing.md), triggered by pushing a `v*` tag —
607
607
  if no such tag has been pushed yet, `docker pull` returns `manifest unknown` and
@@ -71,7 +71,15 @@ import { defineTool, profileParam } from './_shared.js';
71
71
  * - DDL (`CREATE`/`ALTER`/`DROP`/`TRUNCATE`) needs `ddl` **on top of** `write`.
72
72
  * `ALLOW_WRITE` is the master switch for this tool's write path; `ALLOW_DDL`
73
73
  * is the second key for the statements that can destroy a schema rather than
74
- * rows.
74
+ * rows. Catalog metadata (`COMMENT`, `SECURITY LABEL`) and
75
+ * `REFRESH MATERIALIZED VIEW` sit here too.
76
+ * - `CALL` and `DO` also need `ddl`: a procedure or an anonymous block can run
77
+ * any statement inside it, DDL included, and nothing short of executing it
78
+ * says which — so `ALLOW_WRITE` alone must not be the way around `ALLOW_DDL`.
79
+ * - Anything left off this table runs inside a read-only transaction, so a
80
+ * writing keyword missing from it is never a hole, only a statement that can
81
+ * never run (PostgreSQL answers 25006) — which is how the entries above got
82
+ * here.
75
83
  * - `GRANT`/`REVOKE` need `admin`, again on top of `write`. Changing who may
76
84
  * read a table is not DDL and is not an ordinary write.
77
85
  * - **Transaction control** (`BEGIN`, `COMMIT`, `ROLLBACK`, `END`, `ABORT`,
@@ -193,6 +201,11 @@ const WRITE_PATH_CAPABILITY = {
193
201
  ALTER: 'ddl',
194
202
  DROP: 'ddl',
195
203
  TRUNCATE: 'ddl',
204
+ COMMENT: 'ddl',
205
+ SECURITY: 'ddl',
206
+ REFRESH: 'ddl',
207
+ CALL: 'ddl',
208
+ DO: 'ddl',
196
209
  GRANT: 'admin',
197
210
  REVOKE: 'admin',
198
211
  ...Object.fromEntries(TX_CONTROL_KEYWORDS.map((keyword) => [keyword, 'write'])),
@@ -329,7 +342,8 @@ export const executeSqlTool = defineTool('postgres_execute_sql', {
329
342
  'hands out no cursor, so put LIMIT/OFFSET (with an ORDER BY) in your own SQL to read past the cap. WRITES: a ' +
330
343
  'statement whose leading keyword is INSERT/UPDATE/DELETE/MERGE takes the guarded write path when the profile ' +
331
344
  'sets PG_<ALIAS>_ALLOW_WRITE=true; UPDATE and DELETE must carry a WHERE clause that references a real column. ' +
332
- 'CREATE/ALTER/DROP/TRUNCATE additionally need PG_<ALIAS>_ALLOW_DDL=true, and GRANT/REVOKE need ' +
345
+ 'CREATE/ALTER/DROP/TRUNCATE, COMMENT ON, SECURITY LABEL, REFRESH MATERIALIZED VIEW, CALL and DO additionally ' +
346
+ 'need PG_<ALIAS>_ALLOW_DDL=true, and GRANT/REVOKE need ' +
333
347
  'PG_<ALIAS>_ALLOW_ADMIN=true. A DDL DRY RUN CANNOT REPORT A ROW COUNT — PostgreSQL returns none for DDL, so a ' +
334
348
  'dry-run "0 rows" on a DROP TABLE means "not applicable", never "nothing will happen"; the dry run proves only ' +
335
349
  'that the statement parses, resolves and is permitted, and says nothing about how many rows it destroys or ' +
@@ -1 +1 @@
1
- {"version":3,"file":"execute_sql.js","sourceRoot":"","sources":["../../src/tools/execute_sql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute_sql.js","sourceRoot":"","sources":["../../src/tools/execute_sql.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pg-admin-mcp",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "PostgreSQL administration MCP server (stdio) — run with npx or as a Docker image",
5
5
  "type": "module",
6
6
  "bin": {
@@ -45,4 +45,4 @@
45
45
  "typescript-eslint": "^8.65.0",
46
46
  "vitest": "^4.1.10"
47
47
  }
48
- }
48
+ }