MCP server

Limen ships an MCP server — @auth/mcp — that exposes tenant operations as tools an AI agent can call. Connect it to a host like Claude Desktop and manage users, invites, and keys in natural language, with the host gating anything destructive.

What it exposes

The server authenticates as a single tenant using an API key, and offers eight tools:

ToolKindDoes
limen_get_tenantreadFetch the current tenant.
limen_list_usersreadList users (with an emailContains filter).
limen_list_invitesreadList pending invites.
limen_list_auditreadRead recent audit events.
limen_list_api_keysreadList API keys.
limen_invite_userwriteInvite a user by email.
limen_revoke_userdestructiveRevoke a user's access.
limen_revoke_invitedestructiveRevoke a pending invite.

The write and destructive tools carry the right MCP annotations, so a host can prompt for confirmation before running them.

Configure it

The server reads two environment variables and speaks JSON-RPC over stdio:

LIMEN_API_BASE_URL=https://api.limen.eu
LIMEN_API_KEY=ak_live_…

The API key scopes the server to exactly one tenant — mint a key for it in the Console.

Connect from Claude Desktop

Add the server to Claude Desktop's MCP config:

{
  "mcpServers": {
    "limen": {
      "command": "/absolute/path/to/node",
      "args": ["/absolute/path/to/@auth/mcp/dist/index.js"],
      "env": {
        "LIMEN_API_BASE_URL": "https://api.limen.eu",
        "LIMEN_API_KEY": "ak_live_…"
      }
    }
  }
}
Use an absolute node path

Claude Desktop launches servers with a minimal environment, so a bare node from a version manager (fnm, nvm) won't resolve. Point command at an absolute node binary. Once connected, the server appears under Settings → Developer, not "Connectors".

Scope

v1 is deliberately small — the differentiator is that it exists and works. It covers reads plus invite and revoke; it does not expose session listing or tenant switching. Everything runs against the same REST API documented in the reference.