Keycloak Model Context Protocol
io.github.ChristophEnglisch/keycloak-model-context-protocol ยท v1.1.0
Manage Keycloak users, groups, roles and realms through the Keycloak Admin REST API.
Connect Runs on your machine
claude mcp add keycloak-model-context-protocol -e KEYCLOAK_URL=<KEYCLOAK_URL> -e KEYCLOAK_AUTH_REALM=<KEYCLOAK_AUTH_REALM> -e KEYCLOAK_CLIENT_ID=<KEYCLOAK_CLIENT_ID> -e KEYCLOAK_CLIENT_SECRET=<KEYCLOAK_CLIENT_SECRET> -e KEYCLOAK_USERNAME=<KEYCLOAK_USERNAME> -e KEYCLOAK_PASSWORD=<KEYCLOAK_PASSWORD> -e KEYCLOAK_GRANT_TYPE=<KEYCLOAK_GRANT_TYPE> -e KEYCLOAK_MCP_READ_ONLY=<KEYCLOAK_MCP_READ_ONLY> -e KEYCLOAK_MCP_REALMS=<KEYCLOAK_MCP_REALMS> -e KEYCLOAK_MCP_ALLOW_MASTER_WRITE=<KEYCLOAK_MCP_ALLOW_MASTER_WRITE> -e KEYCLOAK_MCP_TOOLSETS=<KEYCLOAK_MCP_TOOLSETS> -e KEYCLOAK_MCP_REQUIRE_CONFIRMATION=<KEYCLOAK_MCP_REQUIRE_CONFIRMATION> -e KEYCLOAK_MCP_TIMEOUT_MS=<KEYCLOAK_MCP_TIMEOUT_MS> -e KEYCLOAK_MCP_LOG_LEVEL=<KEYCLOAK_MCP_LOG_LEVEL> -- npx -y [email protected]
{
"mcpServers": {
"keycloak-model-context-protocol": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"KEYCLOAK_URL": "<KEYCLOAK_URL>",
"KEYCLOAK_AUTH_REALM": "<KEYCLOAK_AUTH_REALM>",
"KEYCLOAK_CLIENT_ID": "<KEYCLOAK_CLIENT_ID>",
"KEYCLOAK_CLIENT_SECRET": "<KEYCLOAK_CLIENT_SECRET>",
"KEYCLOAK_USERNAME": "<KEYCLOAK_USERNAME>",
"KEYCLOAK_PASSWORD": "<KEYCLOAK_PASSWORD>",
"KEYCLOAK_GRANT_TYPE": "<KEYCLOAK_GRANT_TYPE>",
"KEYCLOAK_MCP_READ_ONLY": "<KEYCLOAK_MCP_READ_ONLY>",
"KEYCLOAK_MCP_REALMS": "<KEYCLOAK_MCP_REALMS>",
"KEYCLOAK_MCP_ALLOW_MASTER_WRITE": "<KEYCLOAK_MCP_ALLOW_MASTER_WRITE>",
"KEYCLOAK_MCP_TOOLSETS": "<KEYCLOAK_MCP_TOOLSETS>",
"KEYCLOAK_MCP_REQUIRE_CONFIRMATION": "<KEYCLOAK_MCP_REQUIRE_CONFIRMATION>",
"KEYCLOAK_MCP_TIMEOUT_MS": "<KEYCLOAK_MCP_TIMEOUT_MS>",
"KEYCLOAK_MCP_LOG_LEVEL": "<KEYCLOAK_MCP_LOG_LEVEL>"
}
}
}
}
{
"mcpServers": {
"keycloak-model-context-protocol": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"KEYCLOAK_URL": "<KEYCLOAK_URL>",
"KEYCLOAK_AUTH_REALM": "<KEYCLOAK_AUTH_REALM>",
"KEYCLOAK_CLIENT_ID": "<KEYCLOAK_CLIENT_ID>",
"KEYCLOAK_CLIENT_SECRET": "<KEYCLOAK_CLIENT_SECRET>",
"KEYCLOAK_USERNAME": "<KEYCLOAK_USERNAME>",
"KEYCLOAK_PASSWORD": "<KEYCLOAK_PASSWORD>",
"KEYCLOAK_GRANT_TYPE": "<KEYCLOAK_GRANT_TYPE>",
"KEYCLOAK_MCP_READ_ONLY": "<KEYCLOAK_MCP_READ_ONLY>",
"KEYCLOAK_MCP_REALMS": "<KEYCLOAK_MCP_REALMS>",
"KEYCLOAK_MCP_ALLOW_MASTER_WRITE": "<KEYCLOAK_MCP_ALLOW_MASTER_WRITE>",
"KEYCLOAK_MCP_TOOLSETS": "<KEYCLOAK_MCP_TOOLSETS>",
"KEYCLOAK_MCP_REQUIRE_CONFIRMATION": "<KEYCLOAK_MCP_REQUIRE_CONFIRMATION>",
"KEYCLOAK_MCP_TIMEOUT_MS": "<KEYCLOAK_MCP_TIMEOUT_MS>",
"KEYCLOAK_MCP_LOG_LEVEL": "<KEYCLOAK_MCP_LOG_LEVEL>"
}
}
}
}
{
"servers": {
"keycloak-model-context-protocol": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"KEYCLOAK_URL": "<KEYCLOAK_URL>",
"KEYCLOAK_AUTH_REALM": "<KEYCLOAK_AUTH_REALM>",
"KEYCLOAK_CLIENT_ID": "<KEYCLOAK_CLIENT_ID>",
"KEYCLOAK_CLIENT_SECRET": "<KEYCLOAK_CLIENT_SECRET>",
"KEYCLOAK_USERNAME": "<KEYCLOAK_USERNAME>",
"KEYCLOAK_PASSWORD": "<KEYCLOAK_PASSWORD>",
"KEYCLOAK_GRANT_TYPE": "<KEYCLOAK_GRANT_TYPE>",
"KEYCLOAK_MCP_READ_ONLY": "<KEYCLOAK_MCP_READ_ONLY>",
"KEYCLOAK_MCP_REALMS": "<KEYCLOAK_MCP_REALMS>",
"KEYCLOAK_MCP_ALLOW_MASTER_WRITE": "<KEYCLOAK_MCP_ALLOW_MASTER_WRITE>",
"KEYCLOAK_MCP_TOOLSETS": "<KEYCLOAK_MCP_TOOLSETS>",
"KEYCLOAK_MCP_REQUIRE_CONFIRMATION": "<KEYCLOAK_MCP_REQUIRE_CONFIRMATION>",
"KEYCLOAK_MCP_TIMEOUT_MS": "<KEYCLOAK_MCP_TIMEOUT_MS>",
"KEYCLOAK_MCP_LOG_LEVEL": "<KEYCLOAK_MCP_LOG_LEVEL>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
KEYCLOAK_URLRequired | Base URL of the Keycloak server, e.g. https://keycloak.example.com |
KEYCLOAK_AUTH_REALMOptional | Realm used to obtain the admin token |
KEYCLOAK_CLIENT_IDOptional | Client ID used for login (default admin-cli for the password grant, required for client_credentials) |
KEYCLOAK_CLIENT_SECRETOptional, secret | Client secret for the client_credentials grant (recommended: a dedicated service account) |
KEYCLOAK_USERNAMEOptional | Username for the password grant (alternative to client credentials) |
KEYCLOAK_PASSWORDOptional, secret | Password for the password grant |
KEYCLOAK_GRANT_TYPEOptional | Grant type; auto-detected if unset (client_credentials when a secret is set, else password) |
KEYCLOAK_MCP_READ_ONLYOptional | If true, only read-only tools are registered |
KEYCLOAK_MCP_REALMSOptional | Comma-separated allowlist of target realms; empty means all realms |
KEYCLOAK_MCP_ALLOW_MASTER_WRITEOptional | If true, write tools may modify the master realm |
KEYCLOAK_MCP_TOOLSETSOptional | Comma-separated enabled toolsets (core, groups, roles, clients, sessions, events, security) or all |
KEYCLOAK_MCP_REQUIRE_CONFIRMATIONOptional | If true, destructive tools require confirm=true |
KEYCLOAK_MCP_TIMEOUT_MSOptional | HTTP timeout for Keycloak requests in milliseconds |
KEYCLOAK_MCP_LOG_LEVELOptional | Log level written to stderr |
Details
| Package | [email protected] (NPM, stdio) |
| First published | 26 Oct 2026 |
| Last updated | 26 Oct 2026 |
| Registry name | io.github.ChristophEnglisch/keycloak-model-context-protocol |
More ai and media servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
