Skip to main content
The Certior MCP firewall is a transparent Model Context Protocol proxy. It sits between your MCP host (Claude Code, Cursor, Codex, …) and the upstream MCP servers you already use (filesystem, GitHub, Slack, Postgres, …), and checks every tools/call before it reaches the real tool:
  • out-of-policy or over-budget calls are blocked — they never run;
  • high-stakes calls pause for a human in the Studio;
  • PII in arguments is redacted;
  • and every decision emits a tamper-evident receipt you can stream to the Glass Box.
Your host sees the same tools as before. The firewall is invisible until something is gated — no code changes to your agent.

Install

1. Describe what to wrap

Create a certior-mcp.json next to your project. Pick a boundary profile and list the upstream servers to put behind it:
That’s the whole config for the common case. The profile decides the rules; you don’t hand-map a single tool.

2. See the verdicts (dry run)

check connects to each upstream, infers the capability for every tool, and shows exactly what the firewall would do — before you wire it into a host.

3. Install it into your host

This adds a certior entry to your host’s mcpServers config (.mcp.json by default) that launches the firewall. Restart the host and your agent now talks to the upstream tools through Certior. Point your host at a different file with --target.
Tip — stream receipts to the Studio. Run certior login (or set CERTIOR_DSN) first. Every blocked or approved tool call then shows up in your Glass Box: the graph, the alerts feed, and the pending-approvals queue. Without it, the firewall still enforces locally — the receipt comes back inline.

How a call is decided

For each tool call the firewall resolves a canonical capability like github:write or payments:transfer (from the MCP readOnlyHint / destructiveHint annotations, a verb heuristic over the tool name, and any explicit overrides), then applies three layers, hard to soft:
  1. Profile block globsblock outright (e.g. research blocks *:write).
  2. Capability ceiling + cumulative budget + content scan (the Certior Guard) → block over-budget or out-of-ceiling calls; redact PII in arguments.
  3. Profile approval globspause for a human (e.g. finance gates payments:*).
Reads are free; mutations accrue against the profile’s budget, so a runaway loop eventually trips the ceiling.

Capabilities are inferred — override when you want

Unknown tools are treated as mutating (fail safe), so a read-only profile gates anything it doesn’t recognise. To pin a specific tool, add an override:

Configuration reference

A few keys also read from the environment: CERTIOR_MCP_PROFILE, CERTIOR_MCP_BUDGET_CENTS, CERTIOR_MCP_REDACT_RESULTS, CERTIOR_MCP_APPROVAL_FALLBACK, and CERTIOR_REPORT=0 to silence streaming.

Commands

The firewall is also exposed as the certior-mcp console script, so a host entry can launch it directly without the top-level dispatcher.

Limitations

  • Structured tool output (outputSchema) is flattened to content blocks so the firewall can answer with a block message or redacted text.
  • The human-approval gate is synchronous (it blocks the call until a verdict), which is the right behaviour for the stdio tool-call model.