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

Results / @modelcontextprotocol/server-postgres

@modelcontextprotocol/server-postgres

version tested 0.6.2npmtested 2026-10-13Sealmark 0.2.1methodology 0.3-draftSTANDARD run1 tools
A
Protocol4/4 points
D
Database4/7 pointscritical: mutating-sql

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

Protocol checks

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

Database checks

CheckVerdictWhat happened
read-only
Read-only by default
passplain writes blocked on all 1 SQL tool(s)
write-gate (advisory)
Write approval gate
n/ano write concept: no writer tool declared and every reader blocked writes
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: COMMIT then write (read-only transaction escape); 15 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 query
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:

npx -y @modelcontextprotocol/server-postgres@0.6.2

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.