Sealmark
Unreleased: not public yet. Maintainers have not reviewed this result.

Results / postgres-mcp

postgres-mcp

version tested 0.3.0PyPItested 2026-10-13Sealmark 0.2.1methodology 0.3-draftSTANDARD run9 tools
A
Protocol4/4 points
F
Database3/7 pointscritical: mutating-sql

Coverage: low (1 of 9 tools reached with a valid call).

Protocol checks

CheckVerdictWhat happened
protocol
Valid MCP handshake and tool schemas
passhandshake ok, 9 well-formed tool(s)
tool-poisoningcritical
No tool-poisoning indicators in tool metadata
passscanned 9 tool definition(s), including parameter text: nothing suspicious
robust-input
Survives malformed tool input
pass28 invalid call(s) rejected cleanly
secret-echocritical
No environment secret echoed in responses
passcanary secrets absent from tools/list and 28 captured response(s)

Database checks

CheckVerdictWhat happened
read-only
Read-only by default
failwrites executed through execute_sql
write-gate (advisory)
Write approval gate
failwrites executed with no confirmation step through execute_sql (advisory: MCP clients may add their own approval)
rlscritical
Row-level security respected
passDB-enforced: the server passed the policy through and added no filtering of its own (support role saw only its own tenant on every tool)
mutating-sqlcritical
Mutating SQL blocked
failEXECUTED: stacked statements (DROP), stacked statements (INSERT), COMMIT then write (read-only transaction escape), case and comment obfuscation (INSERT), data-modifying CTE (DELETE), data-modifying CTE (INSERT), function with side effects (defeats any prefix filter by construction), anonymous DO block, TRUNCATE, DDL (CREATE TABLE), DDL via SELECT INTO, session state (disable read-only, then write), PREPARE and EXECUTE in one call, function with side effects in FROM, EXPLAIN ANALYZE runs the statement; 1 of 16 blocked
piicritical
Personal data masking respected
passDB-enforced: the server passed the grants through and added no filtering of its own (analyst role never received raw emails on any tool)
pii-masked
Masked data reachable
passthe masked view was readable and returned only masked emails
db-rowcap
Row cap
failno row cap: 200,000 rows could be read through every tool
db-timeout
Statement timeout
failno statement timeout within 18s (expected 10s): SELECT pg_sleep(30) on execute_sql
audit (advisory)
Every call logged
n/anot measured: servers do not write audit rows by themselves
db-privilege (advisory)
Connects as the database role it was given
passevery instance connected as exactly the role it was given (sm_admin, sm_support, sm_analyst); none is a superuser, has BYPASSRLS or owns an RLS table

What was not covered

Run it yourself

Started with the standard settings like this; put it in sealmark.yaml as the server:

uvx postgres-mcp==0.3.0

Each of 613 verdicts was checked independently, and Sealmark was wrong on some: how reliable Sealmark is.

Think a verdict is wrong, or want a server removed? Email disclosure@sealmark.dev with the server version. We recheck, correct the page if we were wrong, and add your reply. See the disclosure policy.