keycloak-mcp
Version:
MCP server for Keycloak
47 lines • 1.88 kB
JavaScript
import KcAdminClient from "@keycloak/keycloak-admin-client";
import { ServerError } from "@modelcontextprotocol/sdk/server/auth/errors.js";
import { KeycloakAdminCredentialSchema } from "../schemas/index.js";
import { getKeycloakAdminCredentials } from "../utils/keycloak-args.js";
class KeycloakConfig {
static instance;
kcAdminClient;
credentials;
constructor(credentials) {
this.credentials = KeycloakAdminCredentialSchema.parse(credentials);
this.kcAdminClient = new KcAdminClient({
baseUrl: this.credentials.baseUrl,
realmName: "master",
});
}
static async getInstance() {
if (!KeycloakConfig.instance) {
try {
const config = await getKeycloakAdminCredentials();
const adminCredentials = {
adminUsername: config.adminUsername || process.env.KEYCLOAK_ADMIN,
adminPassword: config.adminPassword || process.env.KEYCLOAK_ADMIN_PASSWORD,
baseUrl: config.baseUrl || process.env.KEYCLOAK_URL,
};
KeycloakConfig.instance = new KeycloakConfig(KeycloakAdminCredentialSchema.parse(adminCredentials));
}
catch (error) {
throw new ServerError(`Invalid configuration: ${error instanceof Error ? error.message : String(error)}`);
}
}
return KeycloakConfig.instance;
}
getAdminClient() {
return this.kcAdminClient;
}
async authenticate() {
console.log("Authentication");
await this.kcAdminClient.auth({
username: this.credentials.adminUsername,
password: this.credentials.adminPassword,
grantType: "password",
clientId: "admin-cli",
});
}
}
export default KeycloakConfig;
//# sourceMappingURL=keycloak.js.map