Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Administer Keycloak via its Admin REST API: users, roles, clients, groups, IdP, events.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
KEYCLOAK_BASE_URL, KEYCLOAK_REALM, AUTH_MODE, KC_CLIENT_ID, KC_CLIENT_SECRET, KC_ADMIN_USERNAME, KC_ADMIN_PASSWORD, KC_ADMIN_REALM, READ_ONLY, ALLOWED_REALMSValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"keycloak-admin": {
"command": "npx",
"args": [
"-y",
"mcp-keycloak-admin"
],
"env": {
"KEYCLOAK_BASE_URL": "your-value",
"KEYCLOAK_REALM": "your-value",
"AUTH_MODE": "your-value",
"KC_CLIENT_ID": "your-value",
"KC_CLIENT_SECRET": "your-value",
"KC_ADMIN_USERNAME": "your-value",
"KC_ADMIN_PASSWORD": "your-value",
"KC_ADMIN_REALM": "your-value",
"READ_ONLY": "your-value",
"ALLOWED_REALMS": "your-value"
}
}
}
}Run this in your terminal
claude mcp add keycloak-admin --env KEYCLOAK_BASE_URL=your-value --env KEYCLOAK_REALM=your-value --env AUTH_MODE=your-value --env KC_CLIENT_ID=your-value --env KC_CLIENT_SECRET=your-value --env KC_ADMIN_USERNAME=your-value --env KC_ADMIN_PASSWORD=your-value --env KC_ADMIN_REALM=your-value --env READ_ONLY=your-value --env ALLOWED_REALMS=your-value -- npx -y mcp-keycloak-adminFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"keycloak-admin": {
"command": "npx",
"args": [
"-y",
"mcp-keycloak-admin"
],
"env": {
"KEYCLOAK_BASE_URL": "your-value",
"KEYCLOAK_REALM": "your-value",
"AUTH_MODE": "your-value",
"KC_CLIENT_ID": "your-value",
"KC_CLIENT_SECRET": "your-value",
"KC_ADMIN_USERNAME": "your-value",
"KC_ADMIN_PASSWORD": "your-value",
"KC_ADMIN_REALM": "your-value",
"READ_ONLY": "your-value",
"ALLOWED_REALMS": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"keycloak-admin": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-keycloak-admin"
],
"env": {
"KEYCLOAK_BASE_URL": "your-value",
"KEYCLOAK_REALM": "your-value",
"AUTH_MODE": "your-value",
"KC_CLIENT_ID": "your-value",
"KC_CLIENT_SECRET": "your-value",
"KC_ADMIN_USERNAME": "your-value",
"KC_ADMIN_PASSWORD": "your-value",
"KC_ADMIN_REALM": "your-value",
"READ_ONLY": "your-value",
"ALLOWED_REALMS": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
KC_CLIENT_ID envKC_ADMIN_USERNAME envKC_ADMIN_REALM envREAD_ONLY envALLOWED_REALMS envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
The registry name was verified with the GitHub account mrz1880, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: KEYCLOAK_BASE_URL, KEYCLOAK_REALM, AUTH_MODE, KC_CLIENT_SECRET, KC_ADMIN_PASSWORD
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.2.3) reached the registry 4 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, ProAgentStore
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
MCP-first control plane for ProAgentStore agents and private instances.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
A Model Context Protocol (MCP) server to administer a Keycloak instance through its Admin REST API. Safe by default, configurable, and built with a clean, test-driven architecture.
Compatible with Keycloak 26.x (validated against 26.0.5).
No install needed — run it straight from npm with npx:
npx -y mcp-keycloak-admin
The server speaks MCP over stdio, so you normally wire it into an MCP client rather than running it by hand — see Usage with an MCP client. New to it? The Quickstart spins up a local Keycloak and a client config in a couple of minutes.
Administering Keycloak from an MCP client (an assistant, an IDE, a custom agent) means exposing day-to-day operations — searching users, managing roles, reading events — as MCP tools, without handing over a raw admin console. This server does that with strong guardrails so destructive actions never happen silently.
service_account — a confidential client with a service account (recommended; no admin password stored).password — the admin-cli client with an admin username/password.READ_ONLY mode hides every write/destructive tool.ALLOWED_REALMS restricts which realms the server may operate on.confirm: true parameter fallback for clients that do not support elicitation).Add the server to your MCP client configuration:
{
"mcpServers": { "keycloak-admin": { "command": "npx", "args": ["-y", "mcp-keycloak-admin"], "env": { "KEYCLOAK_BASE_URL": "http://localhost:8080", "KEYCLOAK_REALM": "demo-realm", "AUTH_MODE": "service_account", "KC_CLIENT_ID": "mcp-admin", "KC_CLIENT_SECRET": "your-secret" } } } }
See docs/setup-keycloak.md to create the mcp-admin client and grant it the least-privilege roles it needs.
Each server entry targets one Keycloak (one base URL + realm + auth). To manage several environments, add one entry per instance — each fully isolated, with its own credentials and guardrails:
{
"mcpServers": { "kc-preprod": { "command": "npx", "args": ["-y", "mcp-keycloak-admin"], "env": { "KEYCLOAK_BASE_URL": "https://preprod.example.com", "KEYCLOAK_REALM": "preprod-realm", "AUTH_MODE": "service_account", "KC_CLIENT_ID": "mcp-admin", "KC_CLIENT_SECRET": "…", "ALLOWED_REALMS": "preprod-realm" } }, "kc-prod": { "command": "npx", "args": ["-y", "mcp-keycloak-admin"], "env": { "KEYCLOAK_BASE_URL": "https://auth.example.com", "KEYCLOAK_REALM": "prod-realm", "AUTH_MODE": "service_account", "KC_CLIENT_ID": "mcp-admin", "KC_CLIENT_SECRET": "…", "READ_ONLY": "true", "ALLOWED_REALMS": "prod-realm" } } } }
The client namespaces the tools per server (e.g. kc-prod:keycloak_user_delete), so there's no risk of running an operation against the wrong environment. This is the recommended pattern: you can, for example, keep production READ_ONLY while preprod stays writable.
| Variable | Required | Description |
|---|---|---|
KEYCLOAK_BASE_URL | yes | Base URL of the Keycloak server (no trailing slash). |
KEYCLOAK_REALM | yes | Realm the server operates on. |
AUTH_MODE | yes | service_account or password. |
KC_CLIENT_ID | if service_account | Confidential client id (e.g. mcp-admin). |
KC_CLIENT_SECRET | if service_account | Client secret. |
KC_ADMIN_USERNAME | if password | Admin username. |
KC_ADMIN_PASSWORD | if password | Admin password. |
KC_ADMIN_REALM | no (default master) | Realm holding the admin user (password mode). |
READ_ONLY | no (default false) | When true, write/destructive tools are not registered. |
ALLOWED_REALMS | no | Comma-separated allow-list of realms. Empty = all. |
A full example lives in .env.example.
Levels: [R] read-only · [W] write · [D] destructive (requires confirmation). Every tool carries the matching MCP annotations (readOnlyHint / destructiveHint / idempotentHint).
Currently implemented:
Note: this table tracks the
mainbranch, which can run ahead of the
latest npm release shown by the version badge above. To confirm what's
available in your install, check
npm view mcp-keycloak-admin versionand pin
mcp-keycloak-admin@latest.
| Tool | Level | Description |
|---|---|---|
keycloak_user_search | R | Search realm users by email, username or free text. |
keycloak_user_get | R | Fetch a single user by id. |
keycloak_user_sessions_list | R | List a user's active sessions. |
keycloak_user_create | W | Create a realm user. |
keycloak_user_update | W | Update a user's email, name or enabled flag. |
keycloak_user_set_enabled | W | Enable or disable a user. |
keycloak_user_send_action_email | W | Send a required-actions email. |
keycloak_user_reset_password | D | Set a new password for a user. |
keycloak_user_logout | D | Revoke all of a user's sessions. |
keycloak_user_delete | D | Permanently delete a user (id + username must match). |
keycloak_role_list | R | List realm roles. |
keycloak_user_roles_get | R | List a user's realm roles. |
keycloak_user_role_assign | W | Grant a realm role to a user. |
keycloak_user_role_unassign | D | Revoke a realm role from a user. |
keycloak_client_roles_list | R | List the roles defined on a client. |
keycloak_user_client_roles_get | R | List a user's client roles. |
keycloak_user_client_role_assign | W | Grant a client role to a user. |
keycloak_user_client_role_unassign | D | Revoke a client role from a user. |
keycloak_client_list | R | List the realm clients. |
keycloak_client_create | W | Create a realm client. |
keycloak_client_update | W | Update a client (enabled, public, redirect URIs, CORS web origins). |
keycloak_client_delete | D | Delete a client. |
keycloak_client_get | R | Fetch a client by its clientId. |
keycloak_client_get_secret | R | Read a client secret (masked unless reveal). |
keycloak_client_scopes_list | R | List the realm's client scopes. |
keycloak_client_default_scopes_get | R | List a client's default scopes. |
keycloak_client_mappers_list | R | List a client's protocol mappers. |
keycloak_client_scope_assign | W | Add a default scope to a client. |
keycloak_client_scope_unassign | D | Remove a default scope from a client. |
keycloak_client_regenerate_secret | D | Regenerate a client secret (old one stops working). |
keycloak_group_list | R | List the realm's top-level groups. |
keycloak_group_members_list | R | List the members of a group. |
keycloak_user_groups_list | R | List the groups a user belongs to. |
keycloak_group_create | W | Create a top-level group. |
keycloak_group_member_add | W | Add a user to a group. |
keycloak_group_role_assign | W | Grant a realm role to a group. |
keycloak_group_member_remove | D | Remove a user from a group. |
keycloak_group_delete | D | Delete a group. |
keycloak_idp_list | R | List identity providers. |
keycloak_idp_get | R | Fetch an identity provider by alias. |
keycloak_idp_mappers_list | R | List an identity provider's mappers. |
keycloak_idp_create | W | Create an identity provider. |
keycloak_idp_delete | D | Delete an identity provider. |
keycloak_federation_list | R | List user federation (LDAP/Kerberos) providers. |
| `keyclo
Only the beginning is shown; read the rest in the repo