Open source · MIT · Self-hosted
An open-source OAuth 2.1 gateway that replaces pasted API keys with scoped, expiring tokens — deployed on your infrastructure in one command.
No credit card. No cloud account. MIT licensed, forever.
➜ docker compose up -d
[+] Running 3/3
✔ postgres Healthy
✔ gateway Started · :8787
✔ dashboard Started · :3000
➜ curl localhost:8787/health
{ "status": "healthy" }gateway · dashboard · postgres — one command
400+
automated tests
OAuth 2.1
PKCE mandatory
RFC 7591
dynamic registration
MIT
licensed, no fees
The problem
Without a gateway
With MCP Gateway
What you get
Mandatory PKCE, refresh token rotation, RFC 7591 dynamic client registration, and RFC 8414 discovery. The standard, implemented properly.
Register your MCP servers once. The gateway authenticates every request, enforces scopes, and routes to the right upstream.
Tenants, clients, servers, and keys are isolated in every query. One gateway safely serves every team in your organization.
Every token issued and every request proxied is recorded with compliance tags. "Who accessed what?" always has an answer.
Manage tenants, OAuth clients, and MCP servers from a clean web UI — with analytics and audit logs built in.
One docker compose up on your own infrastructure. No vendor, no fees, no lock-in — the whole stack is yours.
How it works
MCP client
Claude · Cursor
MCP Gateway
OAuth 2.1 · PKCE
JWT · scopedYour MCP servers
untouched
Audit trail
✔ token issued · client mcp_client_9f2 · scope mcp:tools:read
✔ request proxied · server weather-api · 200 OK
✔ logged · tenant default · 12ms
1 · A client asks for access
Claude, Cursor, or any MCP client discovers your gateway and requests access — no API key involved.
2 · The gateway authenticates it
A full OAuth 2.1 handshake with mandatory PKCE. The client proves who it is, every single time.
3 · A scoped token reaches your server
The request is proxied to your MCP server with a short-lived JWT — only the scopes it needs, nothing more.
4 · Everything is on the record
Every token and every request lands in the audit trail. Revoke any client in one click.
docker compose up brings up the gateway, dashboard, and PostgreSQL. Migrations run themselves.
Add your MCP servers in the dashboard. Each gets a resource identifier and required scopes.
MCP clients discover the gateway and complete a PKCE flow. Every request from then on is a scoped, expiring token.
Yes. The entire stack is MIT licensed and self-hosted. There is no hosted tier, no usage meter, and no paid features — you run it on your own infrastructure.
No. The gateway sits in front of your existing servers as a reverse proxy. You register their endpoints; clients talk to the gateway instead of directly to them.
Any client that speaks OAuth 2.1 with PKCE — including Claude, Cursor, and other MCP clients. Clients can self-register via RFC 7591 dynamic registration.
Node.js and PostgreSQL, packaged as Docker images. It runs on any VPS, home server, or container platform — a Railway deployment guide is included.
The gateway ships with 400+ automated tests covering the OAuth flows, tenant isolation, and security paths, and the whole codebase is open for your own review.
One command to deploy. One evening to never worry about a pasted API key again.