OAuth 2.1 · OpenID Connect · MCP
The authorization server for the agent era.
FoxAuth is built on OAuth-server.ts, a source-available OAuth 2.1 / OpenID Connect server you run yourself — with a built-in admin console, banking-grade profiles, and administration over MCP for AI agents.
22 specificationsBun + ElysiaFSL-1.1-ALv2
curl -O https://raw.githubusercontent.com/RedFox-Soft/OAuth-server.ts/main/docker-compose.yml
docker compose up
# open http://localhost:3000/adminWhat those two commands give you
- MongoDB started and provisioned, with indexes and a signing key
- Admin console at /admin, with first-run setup for the super administrator
- Discovery at /.well-known/openid-configuration, reflecting the flags you set
- No sign-up no tenant, no API key, no phone call
The console
Everything an operator needs, without a second product.
Projects, clients, user buckets, end-users, upstream providers, settings, SMTP, signing keys and an append-only audit trail — one console, signed in through the server's own OpenID Connect flow. The same API is what an AI agent uses over MCP.

Who runs it
Three teams, one server.
The same binary, the same admin API. What changes is which flags you set.
For TypeScript teams
Bun and Elysia, one command to run, and 31 named seams you replace with your own function instead of forking.
- Runs on Bun; the HTTP layer is Elysia
- MongoDB in production, in-memory for tests
- 31 override seams, resolved at call time
See all features
For AI-agent builders
The only authorization server where an agent administers the instance through the console’s own code path — no separate privileged API to keep in step.
- 60 MCP tools, off until you set mcp.enabled
- Two-call confirmation on destructive operations
- RFC 9728 protected-resource metadata
See all features
For regulated industries
The banking-grade profiles are implemented, not on a roadmap: turn on the flag your regulator asks for.
- FAPI, DPoP, PAR, mTLS, CIBA, RAR, JARM
- Append-only admin audit trail
- Per-identity brute-force throttle
See all features
Quick start
A token in five minutes.
No sign-up, no tenant, no API key. Three pages end with a token in your terminal.
Standards
Twenty-two specifications, implemented.
Every entry below is code in the repository, with tests. Each links to the spec it implements; the Reference names the flag that governs it.
Administration over MCP
An agent operates it, under the same rules you do.
Turn on mcp.enabled and the management API is served to an AI agent at POST /mcp as an OAuth 2.1 protected resource. Each of the 60 tools rebuilds the request the console would have sent and runs the console's own permission checks, validation and audit write — so there is no privileged back door to keep in step.
Destructive and instance-wide operations need two calls: the first returns a confirmation token, the second carries it. It is off by default.
agent → settings_update { "deviceFlow.enabled": false }
server ← Nothing has been changed. Change server settings. The merged
configuration is validated first …
Target: settings_update
To proceed, call settings_update again with
confirmationToken="<token from the first call>".
It is valid once, until 2026-09-03T14:12:04.000Z.
agent → settings_update { "deviceFlow.enabled": false,
"confirmationToken": "<token from the first call>" }
server ← { "restartRequired": true,
"changedKeys": ["deviceFlow.enabled"], … }
Audit: actor agent:ops-bot, action settings.update.Licensing
Source-available, honestly.
The code is public and you may read, modify, self-host and redistribute it — for anything except offering it to others as a competing hosted service. Two years after each version ships, that version converts to the Apache License 2.0.
Start
Run it yourself this afternoon.
Self-hosting is free and complete. The managed instance is next.