Apache-2.0 · one Go binary · no server-held key
Zerker sits in front of your agent traffic and turns raw calls — plain HTTP or MCP — into something you can catalog, route, guard, watch, and charge for. You run it. It never holds a key.
$ git clone https://github.com/zerkerlabs/gateway.git
$ cd gateway && make dev-auth
No signup. No account. Nothing phones home.
ingress → gateway → upstream simulated
The wire
One request. Six checkpoints. Nothing skipped.
A call enters the gateway and leaves as an invocation record. Every stage below is enforced in-process, at request time — not configured once and trusted forever.
Authenticate
The gateway refuses to start without an OIDC issuer and audience. Not a warning — the process exits.
$ ZERKER_OIDC_ISSUER= make run fatal: OIDC issuer and audience are required
There is no bypass flag and no dev-mode shortcut in the binary. Local development
gets a throwaway mock issuer instead, booted by make dev-auth.
Sovereignty
Two things a hosted gateway structurally can't give you.
Not features someone else will ship next quarter — consequences of where the software runs and who holds the key.
It runs where you run
One binary, one process, your hardware.
On-prem, inside your own VPC, or air-gapped. No JVM, no Python runtime, no sidecar, no agent to install next to it. Back it with Postgres when you want agents to survive a restart.
It never holds your key
Verify is not custody.
The payment gate checks that a valid authorization exists before it forwards a call. It does not hold a private key to do that. If you later want to actually settle on-chain, you run the facilitator yourself — with your own gas key, on your own hardware.
Your infrastructure ⚿ signing key
Someone else's cloud ⚿ signing key
The key never leaves. Zerker verifies the authorization a caller presents and forwards, or doesn't. Nothing to hand over, nothing to breach.
Self-host it. Charge for it. Hold no keys.
Nobody else does all three.
ContextForge and Lunar self-host but can't charge for a call. Cloudflare charges but cannot be self-hosted. MCPay does both — in TypeScript, with settlement delegated to a facilitator service. That's the whole field, and we show our working: vs MCPay, vs Cloudflare, vs ContextForge.
Payment required
What's free, and what isn't.
We put the answer behind the exact mechanism this page is selling. Present a payment authorization to read it. (It's a demo. Nothing is charged, and there is no wallet involved.)
HTTP/1.1 402 Payment Required GET /pricing
X-Payment-Required: x402 scheme: exact network: base amount: 0.00 USDC (demo) resource: /pricing
⌁ withheld pending payment the gateway is holding this response
That gate you just walked through is the open-source half, and so is the settle server behind it — you can run the whole path yourself. What we sell is not permission to take money. It's not having to run the part that holds the key.
Run it
Up in one command. Yours in two.
Local development boots a throwaway mock issuer alongside the gateway and writes you a bearer token. Production points at your own IdP — Auth0, Okta, Google, whatever you already run.
The stack
One of three parts. Each useful alone.
Zerker carries the traffic. The other two carry the trust and the memory.