keycloak-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| KEYCLOAK_URL | Yes | The base URL of your Keycloak instance | http://localhost:8080 |
| KEYCLOAK_ADMIN | Yes | Admin username | admin |
| KEYCLOAK_ADMIN_PASSWORD | Yes | Admin password | admin |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create-userB | Create a new user in a specific realm |
| delete-userA | Delete a user from a specific realm |
| list-usersB | List users in a specific realm |
| update-userC | Update user information in a specific realm |
| get-userA | Get user details by ID from a specific realm |
| reset-user-passwordB | Reset a user's password in a specific realm |
| search-usersC | Search users in a specific realm with filters |
| logout-userB | Logout all sessions for a specific user |
| list-realmsB | List all available realms |
| create-realmB | Create a new realm with configurable settings |
| update-realmC | Update realm settings and configurations |
| delete-realmB | Delete an existing realm |
| get-realm-settingsA | Retrieve detailed settings of a realm |
| create-clientB | Register a new client/application in a realm |
| update-clientC | Update client settings (redirect URIs, protocol mappers, etc.) |
| delete-clientB | Remove a client from a realm |
| list-clientsB | List all clients in a realm |
| list-rolesB | List all roles in a specific realm |
| create-roleA | Create roles at realm or client level |
| update-roleC | Modify role attributes |
| delete-roleC | Delete roles |
| assign-role-to-userA | Assign a realm role, or a client role when clientId is given, to a user |
| remove-role-from-userA | Remove a realm role, or a client role when clientId is given, from a user |
| get-user-rolesA | Get all roles directly assigned to a user, returned as { realmMappings, clientMappings } |
| list-client-rolesA | List all roles defined on a client |
| create-groupB | Create user groups |
| update-groupD | Update group attributes |
| delete-groupC | Delete groups |
| list-groupsA | List all groups in a realm |
| manage-user-groupsB | Add or remove users from groups |
| list-sessionsA | List all active sessions in a realm |
| get-user-sessionsC | List active sessions for a user |
| list-eventsA | Retrieve authentication and admin events |
| clear-eventsC | Clear event logs |
| create-protocol-mapperA | Create a protocol mapper for a client (CRITICAL for JWT organization claims) |
| create-client-scope-protocol-mapperC | Create a protocol mapper for a client scope |
| list-protocol-mappersA | List protocol mappers for a client |
| list-client-scope-protocol-mappersA | List protocol mappers for a client scope |
| update-protocol-mapperC | Update a protocol mapper for a client |
| update-client-scope-protocol-mapperB | Update a protocol mapper for a client scope |
| delete-protocol-mapperA | Delete a protocol mapper from a client |
| delete-client-scope-protocol-mapperB | Delete a protocol mapper from a client scope |
| set-user-attributesB | Set user attributes (CRITICAL for storing organization data) |
| get-user-attributesA | Get user attributes including unmanaged attributes |
| create-client-scopeB | Create a new client scope (CRITICAL for managing token scopes) |
| update-client-scopeB | Update an existing client scope |
| delete-client-scopeC | Delete a client scope |
| list-client-scopesA | List all client scopes in a realm |
| get-client-scopeB | Get details of a specific client scope |
| create-organizationB | Create a new organization (CRITICAL for organization management) |
| update-organizationB | Update an existing organization |
| delete-organizationB | Delete an organization |
| list-organizationsB | List all organizations in a realm |
| get-organizationA | Get details of a specific organization |
| add-organization-memberC | Add a user to an organization |
| remove-organization-memberB | Remove a user from an organization |
| list-organization-membersC | List all members of an organization |
| create-composite-roleC | Create composite roles (role hierarchies) |
| get-composite-rolesC | Get composite roles for a role |
| delete-composite-rolesC | Delete composite roles from a role |
| get-role-by-idC | Get role details by ID |
| update-role-by-idC | Update role by ID |
| delete-role-by-idB | Delete role by ID |
| find-users-with-roleA | Find users with a realm role, or with a client role when clientId is given |
| assign-role-to-groupA | Assign a realm role, or a client role when clientId is given, to a group |
| remove-role-from-groupA | Remove a realm role, or a client role when clientId is given, from a group |
| get-group-rolesA | Get roles assigned to a group, returned as { realmMappings, clientMappings } |
| list-available-group-rolesA | List roles a group could still be granted -- realm roles, or a client's roles when clientId is given |
| list-composite-group-rolesB | List composite roles for a group |
| set-group-attributesC | Set group attributes (organization metadata) |
| get-group-attributesC | Get group attributes |
| create-child-groupC | Create a child group (subgroup) |
| list-sub-groupsA | List subgroups of a parent group |
| list-group-membersB | List members of a group |
| create-identity-providerC | Create a new identity provider for SSO integration |
| update-identity-providerB | Update an existing identity provider |
| delete-identity-providerC | Delete an identity provider |
| list-identity-providersB | List all identity providers in a realm |
| get-identity-providerA | Get details of a specific identity provider |
| create-identity-provider-mapperC | Create a mapper for identity provider (external user mapping) |
| update-identity-provider-mapperC | Update an identity provider mapper |
| delete-identity-provider-mapperC | Delete an identity provider mapper |
| list-identity-provider-mappersB | List all mappers for an identity provider |
| get-identity-provider-mapperA | Get details of a specific identity provider mapper |
| list-identity-provider-mapper-typesB | List available mapper types for an identity provider |
| import-identity-provider-from-urlB | Import identity provider configuration from URL |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 86 tools
While most tools map to distinct resources, the large number of role-related tools (create-role, create-composite-role, update-role, update-role-by-id, delete-role, delete-role-by-id) and similar mapper tools create potential confusion. Some tools like manage-user-groups and find-users-with-role could also be misselected without careful reading.
All tool names consistently follow a verb-noun hyphenated pattern (e.g., create-user, list-clients, delete-identity-provider-mapper). The style is uniform and predictable, making it easy to infer function from the name.
With 86 tools, this server far exceeds the reasonable scope for a coherent toolset, even for a complex system like Keycloak. The count is in the extreme range and will overwhelm agents, increasing selection difficulty and cognitive load.
The toolset covers most core Keycloak admin operations across realms, users, clients, roles, groups, organizations, identity providers, and mappers. However, notable gaps exist such as get-client and get-group (by ID), which are standard CRUD operations agents would expect.