mcp-keycloak
mcp-keycloak
Keycloak용 Model Context Protocol 서버입니다. MCP를 지원하는 클라이언트(Claude Desktop, Claude Code 등)가 Keycloak의 realm, 사용자, 클라이언트, 역할, 그룹을 조회하고 관리할 수 있게 하며, 보안은 전적으로 플래그에 의해 제어됩니다.
설계 목표는 안전이 기본값이라는 것입니다. 읽기 전용으로 시작하고, Realm 허용 목록으로 범위를 제한하며, 민감한 Realm은 변경으로부터 보호하고, 파괴적인 작업은 명시적인 옵트인을 거쳐야만 허용됩니다.
기능
멀티 Realm — 모든 도구는
realm인자를 받습니다. 허용 목록으로 범위를 제한할 수 있습니다.접근 모드 —
read-only→read-write→admin순서로 계층화되어, 각 모드는 현재 수준보다 높은 도구를 절대 노출하지 않습니다.보안 플래그 — Realm 허용 목록, 보호되는 Realm, 삭제 통제, dry-run, JSON 감사 로깅(아래 참조)
두 가지 인증 방식 — 기밀 클라이언트 서비스 계정(권장) 또는 관리자 사용자 이름/비밀번호.
무거운 의존성 없음 — 가벼운 fetch 기반 Admin REST 클라이언트와 MCP SDK 및 zod만 사용합니다.
Related MCP server: keycloak-mcp
보안 모델
제어 항목 | 플래그 | 기본값 | 효과 |
서버가 어떤 작업을 수행할 수 있는가? |
|
|
|
어떤 Realm이 작업 대상인가? |
| (전체) | 쉼표로 구분됩니다. 이 값이 설정되면 목록에 없는 Realm에 대한 모든 작업이 거부됩니다. |
어떤 Realm이 영구적으로 읽기 전용인가? |
|
| 보호된 Realm은 모드와 관계없이 읽기만 가능하고 변경 또는 삭제할 수 없습니다. |
삭제를 허용할 것인가? |
|
|
|
Keycloak에 실작업 없이 미리 보기 |
|
| 쓰기/관리 도구는 의도를 검증하고 로그로 남긴 뒤 Keycloak을 호출하지 않고 반환합니다. |
감사 추적 |
|
| 통제되는 작업마다 JSON 한 줄을 stderr에 출력합니다( |
이 계층들은 서로 독립적입니다. 예를 들어 KEYCLOAK_ALLOW_DELETE=false인 admin 모드는 사용자를 생성하고 업데이트할 수 있지만 삭제할 수는 없습니다.
도구
읽기 (read-only+): list_realms, get_realm, list_users, get_user, count_users, list_clients, list_realm_roles, list_groups
쓰기 (read-write+): create_user, update_user, reset_password, logout_user
관리자 (admin): delete_user
MCP 클라이언트와 함께 사용하기
Claude Code, Claude Desktop, Cursor, OpenAI Codex CLI, Windsurf, VS Code(Copilot) 등 모든 MCP 클라이언트에서 동작합니다. 클라이언트별 설정은 docs/CLIENTS.md 를 참조하세요.
설치
npm install
npm run build설정
.env.example을 복사하고 값을 채우거나, MCP 클라이언트 설정에 변수를 직접 넣으세요. 필요한 realm-management 역할을 가진 기밀 클라이언트가 권장되는 자격 증명입니다.
Claude Desktop / Claude Code에서 실행하기
claude_desktop_config.json 또는 claude mcp add 명령으로 MCP 클라이언트 설정에 추가하세요:
{
"mcpServers": {
"keycloak": {
"command": "node",
"args": ["/absolute/path/to/mcp-keycloak/dist/index.js"],
"env": {
"KEYCLOAK_URL": "https://keycloak.example.com",
"KEYCLOAK_CLIENT_ID": "admin-cli",
"KEYCLOAK_CLIENT_SECRET": "your-secret",
"KEYCLOAK_MODE": "read-only",
"KEYCLOAK_REALM_ALLOWLIST": "app,customers"
}
}
}
}모델이 변경 작업을 실제로 수행하게 하려는 경우에만 KEYCLOAK_MODE를 read-write로 올리고(삭제 작업은 admin + KEYCLOAK_ALLOW_DELETE=true) 설정하세요.
개발
npm run dev # watch mode
npm test # unit tests for the security policy
npm run typecheck배포
이 서버는 공식 MCP 레지스트리용으로 server.json을, npm 소유권 인증용으로 mcpName을 제공합니다. npm 배포와 MCP 레지스트리, Smithery, Glama, Cursor, PulseMCP 등록 방법은 PUBLISHING.md 를 참조하세요.
라이선스
MIT
Available Tools
8 toolscount_usersCount usersARead-onlyIdempotent
Return the number of users in a realm, optionally matching a search term.
| Name | Required | Description | Default |
|---|---|---|---|
| realm | Yes | Realm name | |
| search | No | Optional search term |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, covering the safety profile. The description adds that the result is a count rather than a collection, which is useful, but says nothing about performance, limits, or response shape beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no redundant or filler content; the scope (realm) precedes the optional modifier (search term).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only counting tool with full schema coverage and rich annotations, the description covers what an agent needs. A brief note that the return value is an integer count would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both realm and search are already documented in the schema. The description restates them (realm scope, optional search term) without adding format or matching semantics, which is the baseline case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Return the number of") and resource ("users in a realm"), which clearly distinguishes counting from retrieval. It does not explicitly name the sibling list_users as the alternative for full records, so it falls short of the 5 tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Optionally matching a search term" implies when to narrow the count, giving some usage context. However, it never states when to prefer this over list_users or get_user, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_realmGet realm settingsCRead-onlyIdempotent
Fetch the configuration of a single realm.
| Name | Required | Description | Default |
|---|---|---|---|
| realm | Yes | Realm name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured fields. The description adds nothing beyond that: it doesn't say what 'configuration' includes, whether the realm must exist, or what happens for an unknown realm name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the action front-loaded and zero filler. It is appropriately sized, though its brevity stems partly from under-specification rather than economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with rich annotations, this is minimally adequate. But with no output schema, the description does not indicate what the returned 'configuration' comprises, leaving a gap the structured fields don't fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only one parameter and 100% schema description coverage, the schema already documents the 'realm' name parameter. The description adds no format, naming-convention, or default details beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch') and resource ('configuration of a single realm'), which is clear and unambiguous. However, it offers no differentiation from the sibling list_realms tool, leaving the agent to infer why a singular realm fetch exists alongside a list operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus list_realms or other siblings, no prerequisites, and no exclusions. The word 'single' weakly implies targeting one realm, but no usage condition is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userGet user by idBRead-onlyIdempotent
Fetch a single user representation by their Keycloak id.
| Name | Required | Description | Default |
|---|---|---|---|
| realm | Yes | Realm name | |
| userId | Yes | Keycloak user id (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds only that the result is a single user 'representation' looked up by id; it says nothing about behavior when the id is unknown (error vs empty) or about realm scoping. Some added value, but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with zero filler, and the identifying constraint (by their Keycloak id) is front-loaded. Nothing needs trimming or reordering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only lookup with full schema coverage, complete annotations, and no output schema to explain, the description is nearly sufficient. It could have noted the not-found behavior or the realm scoping requirement, but nothing essential blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema fully documents both realm and userId (UUID). The description only echoes the Keycloak id concept already stated in the schema, adding no format, casing, or realm-relationship detail beyond it. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch), resource (user), and scope (a single user) keyed by Keycloak id, which cleanly separates it from the list_users/count_users siblings. It stops short of naming those siblings explicitly, so it is clear but not maximally differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no routing to alternatives such as list_users for enumeration or searching by attribute. The agent must infer from context that this is the point-lookup path rather than a filter path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_clientsList clientsARead-onlyIdempotent
List OAuth/OIDC clients configured in a realm. Client secrets are not included.
| Name | Required | Description | Default |
|---|---|---|---|
| realm | Yes | Realm name | |
| clientId | No | Filter by clientId |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is handled. The description adds a genuinely useful behavioral note beyond them: that client secrets are excluded from the results, which is security-relevant output context. It omits pagination/result-size behavior, keeping it out of the top score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with the scope stated first and the exclusion note second; every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema, the description adequately tells the agent what is returned and what is withheld. Only minor gaps remain (ordering, pagination, or whether an empty realm yields an empty list).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both realm and clientId are already documented in the schema and the baseline is 3. The description adds no syntax, format, or matching semantics (e.g., exact vs partial match for clientId) beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (OAuth/OIDC clients configured in a realm), which is unambiguous and distinct from sibling resources like users, groups, and roles. It stops short of explicitly contrasting with any sibling (e.g., a hypothetical get_client), but no such sibling exists here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance and names no alternatives. The only implicit scoping is the required realm parameter, which the schema already communicates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsList groupsCRead-onlyIdempotent
List groups in a realm.
| Name | Required | Description | Default |
|---|---|---|---|
| realm | Yes | Realm name | |
| search | No | Optional search term |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds only the realm scoping, which the schema already enforces as required, and says nothing about pagination, ordering, or result size limits for a list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero filler. It is efficient, though the brevity comes at the cost of the guidance the tool is missing rather than through tight editing of a richer description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema coverage and annotation coverage, the description is minimally adequate. It omits pagination/limit behavior and any note on result shape, which matters for a list endpoint with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (realm, search) are documented in the schema, so the baseline is 3. The description adds no extra meaning about how 'search' matches or how results are scoped beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb (List) and resource (groups) plus its scope (in a realm), so an agent knows what it returns. It does not, however, differentiate itself from the many sibling list tools (list_users, list_clients, list_realm_roles) beyond the noun, which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites or permissions, and no reference to alternatives or follow-up tools among the siblings. The agent is left to infer that this is the right list tool purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_realm_rolesList realm rolesCRead-onlyIdempotent
List the realm-level roles defined in a realm.
| Name | Required | Description | Default |
|---|---|---|---|
| realm | Yes | Realm name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered. The description adds only the scoping phrase 'defined in a realm' and says nothing about return size, ordering, or pagination, so it contributes little beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single lean sentence with the resource front-loaded after the verb and no filler. It is efficient, though bordering on under-specified rather than tightly packaged information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter list tool with rich annotations and no output schema, the definition is minimally viable. It omits whether the result is filtered, sorted, or paginated, which an agent might reasonably want to know before listing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and schema description coverage is 100% ('Realm name'), so the schema fully documents it. Baseline 3 applies; the description adds no format, casing, or defaulting detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (List) and resource (realm-level roles), scoped to a realm. It is distinguishable from list_users/list_groups/list_clients by resource noun, though it does not explicitly contrast itself with any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives such as get_user or list_users, nor any condition or prerequisite. The realm parameter is required but nothing tells the agent when this listing is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_realmsList realmsARead-onlyIdempotent
List all realms visible to the configured credentials. Realms outside the allowlist are filtered out.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnly, openWorld, idempotent, and non-destructive signals. The description adds useful context beyond those annotations by clarifying that only realms visible to credentials are returned and that the allowlist filters results. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the core action and resource, and every clause earns its place. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with strong annotations, the description is complete: it names the resource, states the visibility constraint, and explains allowlist filtering. No additional information is required for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema fully covers inputs, so the baseline of 4 applies. The description adds no parameter-specific detail because there are no parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a clear resource ('realms visible to the configured credentials'), while also noting the allowlist filtering behavior. This distinguishes it cleanly from get_realm and the other list_* sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames when the tool is appropriate: when listing all realms visible to the configured credentials. It does not explicitly name alternatives like get_realm or state when not to use it, but the context is clear enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersList / search usersBRead-onlyIdempotent
List users in a realm. Supports free-text search and pagination. Passwords and secrets are never returned by Keycloak.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Max results (default 50) | |
| first | No | Pagination offset | |
| realm | Yes | Realm name | |
| search | No | Free-text search across username, email, first and last name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered by structured data. The description adds one genuinely useful behavioral fact – that passwords and secrets are never returned – but says nothing about pagination defaults, result ordering, or empty-result behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler, and the core purpose is front-loaded ahead of the search/pagination note and the security caveat. Efficient, though the final sentence is somewhat tangential to tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return values, and it only partially does so (it states what is never returned, not what a user record contains). For a simple read-only list tool with fully documented parameters, this is adequate but leaves the response shape unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (realm, max, first, search) are already documented with defaults and bounds in the schema. The description's mention of search and pagination adds no syntax, default, or format detail beyond that, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List users in a realm') plus the capabilities (free-text search, pagination), which is enough to separate it from get_user (single user) and count_users (aggregate count). It does not, however, explicitly name those siblings, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description asserts capabilities ('Supports free-text search and pagination') but never says when to use this tool instead of get_user or count_users, nor any exclusions or prerequisites. An agent must infer the routing decision from the names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.2.2- Changed
count_users1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_realm1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_user1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
list_clients1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
list_groups1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
list_realm_roles1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
list_users2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / first / maximumAdded value: +9007199254740991
8 tool updates
v0.1.0- First observed
count_users - First observed
get_realm - First observed
get_user - First observed
list_clients - First observed
list_groups - First observed
list_realm_roles - First observed
list_realms - First observed
list_users
TDQS
Scored across 8 tools
Each tool targets a clearly distinct resource and action: get_realm vs list_realms, list_users vs get_user vs count_users, and list_clients/list_realm_roles/list_groups all have separate scopes. Descriptions make the boundaries explicit, so an agent should not confuse them.
All tool names use snake_case with a consistent verb_noun pattern: get_realm, list_users, get_user, count_users, list_clients, list_realm_roles, list_groups, list_realms. There are no mixed conventions or vague verbs.
The server exposes 8 tools, which is well-scoped for a focused Keycloak read/inspection surface. No tool feels redundant, and the count avoids both bloat and a thin single-tool interface.
The surface is read-only and omits all create, update, and delete operations for realms, users, clients, roles, and groups. Even read coverage is incomplete, since there is no get_client, get_group, or get_role, leaving significant gaps for typical Keycloak administration.
Maintenance
Related MCP Connectors
Managed Keycloak from any MCP client: clusters, realms, apps, SSO, users, domains, audit events.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Hosted remote MCP for protected account access, permissions, activity history and supported undo.
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server for Keycloak Admin REST API, enabling user, group, event, and security management through service account authentication.3382 PyPIMIT
- AlicenseAqualityDmaintenanceAn MCP server that lets an AI assistant inspect and modify Keycloak realm, client, and protocol-mapper configuration across multiple Keycloak hosts.779 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables administration of Keycloak identity and access management through MCP, allowing management of realms, clients, users, roles, groups, identity providers, and sessions from any MCP client.42 npmApache 2.0
- AlicenseCqualityDmaintenanceA comprehensive MCP server for Keycloak administration, offering 80+ tools to manage users, realms, clients, roles, groups, sessions, events, organizations, and more directly from AI assistants.8642 npmMIT