Skip to main content

Authentication

All MCP requests and protected API endpoints require a JWT token in the Authorization: Bearer <token> header.

User Registration​

POST /api/auth/register
Content-Type: application/json

{"email": "admin@example.com", "password": "secure123"}

The first user to register automatically receives the admin role. Subsequent users get the user role.

Login​

POST /api/auth/login
Content-Type: application/json

{"email": "admin@example.com", "password": "secure123"}

Returns a JWT token and user info:

{
"user": {
"id": "...",
"email": "admin@example.com",
"role": "admin",
"groups": []
},
"token": "eyJ..."
}

JWT Claims​

The gateway extracts the following claims from every JWT:

ClaimDescription
subUser ID (UUID)
emailUser email
roleUser role (admin or user)
groupsArray of group names

These claims are used for authorization policy evaluation and credential resolution.

API Tokens​

For programmatic access (MCP clients like Claude, Cursor), create long-lived API tokens:

POST /api/auth/tokens
Authorization: Bearer <login-token>
Content-Type: application/json

{"name": "my-claude-token"}

Response:

{
"api_token": {
"id": "...",
"name": "my-claude-token",
"created_at": "..."
},
"token": "eyJ..."
}

API tokens:

  • Are tied to the creating user and inherit their role/groups
  • Never expire (until revoked)
  • Can be listed with GET /api/auth/tokens
  • Can be revoked with DELETE /api/auth/tokens/{id}

User Management​

Admins can manage users via the REST API:

# List all users
GET /api/users

# Update a user's role and groups
PUT /api/users/{id}
{"role": "developer", "groups": ["engineering", "platform"]}

Role and group changes take effect on the next MCP request (via automatic session recycle). See Session Management for details.