Quickstart
Point Sealmark at an MCP server, run it, and read the grade. About five minutes.
- Read sealmark.yaml: the command or URL that starts your server, and which packs to run.
- Start your server once for the core pack, and read its tool list.
- For the db pack, a seeded synthetic Postgres is started first. Then your server is started once per database role (analyst, support and admin), plus a fresh start for the timeout probe.
- Call the server's tools directly with fixed inputs. No language model is involved.
- Decide each verdict from what the harness sees: for database checks it reads the database itself, over a separate connection; otherwise it uses what the server returned.
- Apply the published formula to get one letter per pack. A failed critical check caps the grade at D.
- Write the result with the exact configuration and the evidence for every probe to sealmark.json. With --fail-under B the command exits 1 when a graded pack is below B.
1. Create a config. init finds the MCP servers your clients already use, asks which to grade, and writes sealmark.yaml (with a git-ignored sealmark.local.yaml for secrets, only when needed). To start from one client, a command line or a URL, see Import servers.
npx sealmark init
npx sealmark doctor # can Sealmark start your server? which packs would run?
2. Point it at your server. Edit the server block. Put {sandbox} where the server takes a directory it may use, and {dsn} where it takes a database connection string (the db pack fills it in once per database role).
name: my-server
version: 1.0.0
server:
command: node
args: ["./dist/server.js", "{sandbox}"]
env: { API_KEY: "${MY_API_KEY}" }
${MY_API_KEY} is read from your environment when the run starts and is never written to a report. Never put a real credential or a real database URL in this file; secrets can live in sealmark.local.yaml.
3. Run it.
npx sealmark run
The report goes to stdout and progress to stderr. Sealmark runs every pack that has something to test; core sends only schema-invalid arguments, so an A from core alone says nothing about what your tools do. A short, invented excerpt for Server A:
PACK db GRADE D (5/5 scored, 80%)
[FAIL] Personal data masking respected — customers.email returned unmasked to the analyst role.
[PASS] Row-level security respected — no other-tenant rows returned through any tool.
Capped at D: critical fail(s): Personal data masking respected. Without the cap this would be B (80%).
4. Read the result. Exit 0 passes and exit 1 fails the gate (the default is A); see the CLI reference. When a check fails, open the evidence under the failing line. Each piece says how it was established: see Observers.
Give your coding agent this prompt.
Run npx sealmark init in this repo and point sealmark.yaml at our MCP server. Then run npx sealmark run. For every check that is not a pass, open the evidence, explain the cause, and propose a fix. Do not weaken the checks or lower the gate.
init --ci prints a ready-to-paste job and writes nothing:
npx sealmark init --ci gitlab # or: github
Edit its --start command and --url. The full workflows and the gate are in Run in CI.