UNPKG

keycloak-mcp

Version:
97 lines 3.78 kB
import KeycloakConfig from "../config/keycloak.js"; import { AddUserToGroupSchema, AssignClientRoleSchema, CreateUserSchema, DeleteUserSchema, ListClientRolesSchema, ListClientsSchema, ListGroupsSchema, ListUsersSchema, } from "../schemas/index.js"; class KeycloakService { keycloakConfig; kcAdminClient; constructor(keycloakConfig) { this.keycloakConfig = keycloakConfig; this.kcAdminClient = this.keycloakConfig.getAdminClient(); } async createUser(args) { const { realm, username, email, firstName, lastName } = CreateUserSchema.parse(args); const user = await this.kcAdminClient.users.create({ realm, username, email, firstName, lastName, enabled: true, }); return `User created successfully. User ID: ${user.id}`; } async deleteUser(args) { const { realm, userId } = DeleteUserSchema.parse(args); await this.kcAdminClient.users.del({ id: userId, realm }); return `User ${userId} deleted successfully from realm ${realm}`; } async listRealms() { const realms = await this.kcAdminClient.realms.find(); return `Available realms:\n${realms .map((r) => `- ${r.realm} (${r.id})`) .join("\n")}`; } async listUsers(args) { const { realm } = ListUsersSchema.parse(args); const users = await this.kcAdminClient.users.find({ realm, }); return `Users in realm ${realm}:\n${users .map((u) => `- ${u.username} (${u.id})`) .join("\n")}`; } async assignClientRoleToUser(args) { const { realm, userId, clientUniqueId, roleName } = AssignClientRoleSchema.parse(args); const roles = await this.kcAdminClient.clients.listRoles({ id: clientUniqueId, realm, }); const role = roles.find((r) => r.name === roleName); if (!role || !role.id || !role.name) { throw new Error(`Role '${roleName}' not found or has no ID.`); } await this.kcAdminClient.users.addClientRoleMappings({ realm, id: userId, clientUniqueId, roles: [{ id: role.id, name: role.name }], }); return `Assigned role '${roleName}' to user ${userId} in client ${clientUniqueId}`; } async addUserToGroup(args) { const { realm, userId, groupId } = AddUserToGroupSchema.parse(args); await this.kcAdminClient.users.addToGroup({ realm, id: userId, groupId, }); return `User ${userId} added to group ${groupId} in realm ${realm}`; } async listClients(args) { const { realm } = ListClientsSchema.parse(args); const clients = await this.kcAdminClient.clients.find({ realm }); return `Clients in realm ${realm}:\n${clients .map((c) => `- ${c.clientId} (${c.id})`) .join("\n")}`; } async listGroups(args) { const { realm } = ListGroupsSchema.parse(args); const groups = await this.kcAdminClient.groups.find({ realm, }); return `Groups in realm ${realm}:\n${groups .map((g) => `- ${g.name} (${g.id})`) .join("\n")}`; } async listClientRoles(args) { const { realm, clientUniqueId } = ListClientRolesSchema.parse(args); const roles = await this.kcAdminClient.clients.listRoles({ id: clientUniqueId, realm, }); return `Roles in client ${clientUniqueId} in realm ${realm}:\n${roles .map((r) => `- ${r.name}`) .join("\n")}`; } } export default KeycloakService; //# sourceMappingURL=keycloak.js.map