Skip to main content

Open-source reference implementation of the IETF agent-identity stack — OAuth 2.1 + identity-chaining + transaction-tokens + DPoP + MCP

Project description

authgent-server

The open-source OAuth 2.1 Authorization Server for AI agents — MCP-native, delegation-aware, with DPoP sender-constrained tokens and human-in-the-loop step-up authorization.

PyPI Python 3.11+ License

Install

pip install authgent-server

# With PostgreSQL support
pip install authgent-server[postgres]

Quick Start

# Start the server (auto-initializes on first run)
authgent-server run

Server starts at http://localhost:8000:

  • GET /.well-known/oauth-authorization-server — server metadata
  • GET /.well-known/jwks.json — public signing keys
  • GET /docs — interactive Swagger UI

CLI Commands

authgent-server run             # Start server (auto-initializes on first run)
authgent-server init            # Explicitly init (custom DB URL, force-regenerate)
authgent-server create-agent    # Register an agent interactively
authgent-server migrate         # Run Alembic migrations
authgent-server migrate --dry-run  # Preview pending migrations

API Endpoints

OAuth 2.1 Core

Method Path Description
POST /register Dynamic client registration (RFC 7591)
POST /token Token endpoint — all grant types
GET /authorize Authorization code + PKCE (consent page)
POST /authorize Authorization code (consent submission)
POST /introspect Token introspection (RFC 7662)
POST /revoke Token revocation (RFC 7009)

Device Authorization (RFC 8628)

Method Path Description
POST /device/authorize Request device + user codes
POST /device/approve Human approves device code
POST /device/deny Human denies device code

Step-Up Authorization (HITL)

Method Path Description
POST /stepup Create step-up request
GET /stepup/{id} Poll step-up status
POST /stepup/{id}/approve Human approves
POST /stepup/{id}/deny Human denies

Agent Identity Registry

Method Path Description
POST /agents Register agent (auto-creates OAuth client)
GET /agents List agents (paginated, filterable)
GET /agents/{id} Get agent details
PATCH /agents/{id} Update agent
DELETE /agents/{id} Deactivate agent

Discovery & Health

Method Path Description
GET /.well-known/oauth-authorization-server Server metadata (RFC 8414)
GET /.well-known/openid-configuration OIDC-compatible alias
GET /.well-known/jwks.json Public signing keys
GET /.well-known/oauth-protected-resource Resource metadata (RFC 9728)
GET /health Liveness check
GET /ready Readiness (DB + signing keys)

Configuration

All settings via AUTHGENT_* environment variables. See .env.example for the full list.

Essential

Variable Default Description
AUTHGENT_SECRET_KEY generated Master secret for HKDF key derivation
AUTHGENT_DATABASE_URL sqlite+aiosqlite:///./authgent.db Database URL
AUTHGENT_HOST 0.0.0.0 Bind address
AUTHGENT_PORT 8000 Bind port

Token Lifetimes

Variable Default Description
AUTHGENT_ACCESS_TOKEN_TTL 900 Access token (15 min)
AUTHGENT_REFRESH_TOKEN_TTL 86400 Refresh token (24 hr)
AUTHGENT_EXCHANGE_TOKEN_TTL 300 Exchanged token (5 min)

Policy

Variable Default Description
AUTHGENT_MAX_DELEGATION_DEPTH 5 Max delegation chain hops
AUTHGENT_REQUIRE_DPOP false Require DPoP on all token requests
AUTHGENT_CONSENT_MODE auto_approve auto_approve, ui, headless
AUTHGENT_REGISTRATION_POLICY open open, token, admin

Pluggable Providers

Variable Default Description
AUTHGENT_ATTESTATION_PROVIDER null Dotted import path
AUTHGENT_POLICY_PROVIDER null Custom policy enforcement
AUTHGENT_HITL_PROVIDER webhook Step-up notification backend
AUTHGENT_KEY_PROVIDER database Signing key storage
AUTHGENT_EVENT_EMITTER database Audit event backend
AUTHGENT_CLAIM_ENRICHER null Custom token claim enrichment

Deployment

Docker

docker compose up -d

The included docker-compose.yml runs the server with PostgreSQL.

Docker (standalone)

docker build -t authgent-server .
docker run -p 8000:8000 \
  -e AUTHGENT_SECRET_KEY=your-secret-key \
  -e AUTHGENT_DATABASE_URL=sqlite+aiosqlite:///./authgent.db \
  authgent-server

Production Checklist

  • Set a strong AUTHGENT_SECRET_KEY (64+ characters)
  • Use PostgreSQL (AUTHGENT_DATABASE_URL=postgresql+asyncpg://...)
  • Run migrations: authgent-server migrate
  • Set AUTHGENT_REGISTRATION_POLICY=token or admin
  • Set AUTHGENT_CONSENT_MODE=ui for human-facing flows
  • Enable DPoP: AUTHGENT_REQUIRE_DPOP=true
  • Configure CORS origins: AUTHGENT_CORS_ORIGINS=["https://your-app.com"]
  • Put behind a reverse proxy (nginx/Caddy) with TLS
  • Set up log aggregation (structured JSON output)

Architecture

Endpoints → Services → Models → DB
  (thin)    (stateless)  (ORM)   (async)
  • Endpoints — FastAPI routers, HTTP validation, dependency injection
  • Services — All business logic, receive db: AsyncSession per call
  • Models — SQLAlchemy 2.0 async ORM, 9 tables
  • Providers — 7 pluggable Python Protocol interfaces (attestation, policy, HITL, keys, events, claim enricher, human auth)

See ARCHITECTURE.md for the full implementation design.

Development

# Setup
git clone https://github.com/authgent/authgent.git
cd authgent/server
pip install -e ".[dev,migrations]"
authgent-server init

# Test (192 tests)
pytest -v

# Lint + format
ruff check . && ruff format --check .

# Type check
mypy authgent_server/ --ignore-missing-imports

# Coverage
coverage run -m pytest tests/ && coverage report

License

Apache 2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

authgent_server-0.3.2.tar.gz (181.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

authgent_server-0.3.2-py3-none-any.whl (115.4 kB view details)

Uploaded Python 3

File details

Details for the file authgent_server-0.3.2.tar.gz.

File metadata

  • Download URL: authgent_server-0.3.2.tar.gz
  • Upload date:
  • Size: 181.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for authgent_server-0.3.2.tar.gz
Algorithm Hash digest
SHA256 ac9922f1715346545646951d9db208c0bcc99e5803b73b38a2a9ef8e2f0823e3
MD5 32817de02982711128d32ec1e149c4bc
BLAKE2b-256 2d72d0443c0c5a591289ed0402fe057ff11472e436a69bb5d3c2c05009c8ebc3

See more details on using hashes here.

File details

Details for the file authgent_server-0.3.2-py3-none-any.whl.

File metadata

File hashes

Hashes for authgent_server-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1d371bc5aaf6ad7ec96a9690c50d7858987238e45b4142bed11a7d1dcd1654a4
MD5 fb903e8b313b1dce9f52ffcfaf4729b3
BLAKE2b-256 fe5b145c28618d5c28f2fb30dedd0466fbda2c767ea96f032c24b40e7156175c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page