🚀 Octodet Keycloak MCP 服务器
Octodet Keycloak MCP 服务器是一款强大的用于 Keycloak 管理的模型上下文协议(MCP)服务器。它提供了一套全面的工具,可通过大语言模型(LLM)接口管理用户、领域、角色和其他 Keycloak 资源。

✨ 主要特性
- 用户管理:跨领域创建、删除和列出用户。
- 领域管理:具备全面的领域管理能力。
- 安全集成:使用管理员凭证进行身份验证。
- 轻松配置:通过环境变量进行简单设置。
- LLM 集成:可与 Claude、ChatGPT 等支持 MCP 的 AI 助手无缝协作。
📦 安装指南
通过 NPM(推荐)
该服务器以 NPM 包的形式提供:
npx -y @octodet/keycloak-mcp
npm install -g @octodet/keycloak-mcp
📚 详细文档
配置
环境变量
属性 |
详情 |
模型类型 |
无 |
训练数据 |
无 |
KEYCLOAK_URL |
Keycloak 服务器 URL,默认为 http://localhost:8080 |
KEYCLOAK_ADMIN |
管理员用户名,默认为 admin |
KEYCLOAK_ADMIN_PASSWORD |
管理员密码,默认为 admin |
KEYCLOAK_REALM |
默认领域,默认为 master |
MCP 客户端配置
VS Code
将以下内容添加到 settings.json
中:
{
"mcp.servers": {
"keycloak": {
"command": "npx",
"args": ["-y", "@octodet/keycloak-mcp"],
"env": {
"KEYCLOAK_URL": "http://localhost:8080",
"KEYCLOAK_ADMIN": "admin",
"KEYCLOAK_ADMIN_PASSWORD": "admin"
}
}
}
}
Claude Desktop
在 Claude Desktop 配置文件中进行配置:
{
"mcpServers": {
"keycloak": {
"command": "npx",
"args": ["-y", "@octodet/keycloak-mcp"],
"env": {
"KEYCLOAK_URL": "http://localhost:8080",
"KEYCLOAK_ADMIN": "admin",
"KEYCLOAK_ADMIN_PASSWORD": "admin"
}
}
}
}
本地开发
{
"mcpServers": {
"keycloak": {
"command": "node",
"args": ["path/to/build/index.js"],
"env": {
"KEYCLOAK_URL": "http://localhost:8080",
"KEYCLOAK_ADMIN": "admin",
"KEYCLOAK_ADMIN_PASSWORD": "admin"
}
}
}
}
可用工具
该服务器提供了一套全面的 MCP 工具,用于 Keycloak 管理。每个工具都旨在跨领域、用户和角色执行特定的管理任务。
📋 工具概述
工具 |
类别 |
描述 |
create-user |
用户管理 |
在指定领域中创建新用户 |
delete-user |
用户管理 |
从领域中删除现有用户 |
list-users |
用户管理 |
列出指定领域中的所有用户 |
list-realms |
领域管理 |
列出所有可用领域 |
list-roles |
角色管理 |
列出特定客户端的所有角色 |
update-user-roles |
角色管理 |
为用户添加或删除客户端角色 |
👥 用户管理
create-user
在指定领域中创建具有全面用户属性和可选凭证的新用户。
必需参数:
realm
(字符串):目标领域名称
username
(字符串):新用户的唯一用户名
email
(字符串):有效的电子邮件地址
firstName
(字符串):用户的名字
lastName
(字符串):用户的姓氏
可选参数:
enabled
(布尔值):启用/禁用用户账户(默认:true
)
emailVerified
(布尔值):将电子邮件标记为已验证
credentials
(数组):用于设置密码的凭证对象数组
凭证对象结构:
type
(字符串):凭证类型(例如,"password")
value
(字符串):凭证值
temporary
(布尔值):密码是否必须在首次登录时更改
使用示例:
{
"realm": "my-app-realm",
"username": "john.doe",
"email": "john.doe@company.com",
"firstName": "John",
"lastName": "Doe",
"enabled": true,
"emailVerified": true,
"credentials": [
{
"type": "password",
"value": "TempPassword123!",
"temporary": true
}
]
}
响应:返回创建的用户 ID 和确认消息。
delete-user
从指定领域中永久删除用户。此操作无法撤销。
必需参数:
realm
(字符串):目标领域名称
userId
(字符串):要删除的用户的唯一标识符
使用示例:
{
"realm": "my-app-realm",
"userId": "8f5c21e3-7c9d-4b5a-9f3e-8d4f6a2e7b1c"
}
响应:成功删除的确认消息。
⚠️ 重要提示
此操作不可逆。在执行之前,请确保您拥有正确的用户 ID。
list-users
检索指定领域中所有用户的基本信息列表。
必需参数:
使用示例:
{
"realm": "my-app-realm"
}
响应:返回该领域中所有用户的用户名和用户 ID 的格式化列表。
🏛️ 领域管理
list-realms
检索 Keycloak 实例中所有可用的领域。
参数:无需参数
使用示例:
{}
响应:返回 Keycloak 安装中所有领域名称的列表。
使用场景:
- 发现可用领域
- 在执行其他操作之前验证领域名称
- 对 Keycloak 设置进行管理概述
🔐 角色管理
list-roles
列出领域内特定客户端定义的所有角色。有助于在分配角色之前了解可用的权限和角色。
必需参数:
realm
(字符串):目标领域名称
clientId
(字符串):目标客户端的客户端 ID 或 UUID
使用示例:
{
"realm": "my-app-realm",
"clientId": "my-application"
}
使用客户端 UUID 的替代示例:
{
"realm": "my-app-realm",
"clientId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
响应:返回指定客户端可用的所有角色名称的格式化列表。
💡 使用建议
您可以使用客户端的可读 ID 或其 UUID 标识符。
update-user-roles
管理用户的客户端角色分配。允许在单个操作中添加和删除角色。
必需参数:
realm
(字符串):目标领域名称
userId
(字符串):用户的唯一标识符
clientId
(字符串):客户端 ID 或 UUID
可选参数:
rolesToAdd
(数组):要分配给用户的角色名称列表
rolesToRemove
(数组):要从用户中删除的角色名称列表
添加角色的使用示例:
{
"realm": "my-app-realm",
"userId": "8f5c21e3-7c9d-4b5a-9f3e-8d4f6a2e7b1c",
"clientId": "my-application",
"rolesToAdd": ["admin", "user-manager", "report-viewer"]
}
删除角色的使用示例:
{
"realm": "my-app-realm",
"userId": "8f5c21e3-7c9d-4b5a-9f3e-8d4f6a2e7b1c",
"clientId": "my-application",
"rolesToRemove": ["temporary-access", "beta-tester"]
}
组合操作的使用示例:
{
"realm": "my-app-realm",
"userId": "8f5c21e3-7c9d-4b5a-9f3e-8d4f6a2e7b1c",
"clientId": "my-application",
"rolesToAdd": ["senior-user"],
"rolesToRemove": ["junior-user", "trainee"]
}
响应:详细总结添加、删除的角色以及遇到的任何错误。
🔍 注意事项:
- 必须提供
rolesToAdd
或 rolesToRemove
中的至少一个
- 不存在的角色将被跳过并给出警告
- 每个角色列表的操作是原子性的(每种操作类型要么全部执行,要么全部不执行)
🚀 使用提示
- 用户 ID 与用户名:大多数操作需要用户 ID(UUID),而不是用户名。使用
list-users
查找正确的用户 ID。
- 客户端标识:
clientId
参数接受可读的客户端 ID 和 UUID 标识符。
- 领域验证:在执行操作之前,始终使用
list-realms
验证领域名称。
- 角色发现:在尝试分配角色之前,使用
list-roles
发现可用角色。
- 错误处理:所有工具都提供详细的错误消息,用于排查身份验证、权限或参数问题。
开发
设置开发环境
git clone <repository-url>
npm install
npm run watch
添加新工具
要向服务器添加新工具:
- 使用 Zod 在
src/index.ts
中定义工具模式
- 将工具定义添加到
ListToolsRequestSchema
处理程序中
- 在
CallToolRequestSchema
开关语句中实现工具处理程序
- 更新此 README 以记录新工具
测试
使用 MCP 检查器
MCP 检查器是测试 MCP 服务器的好工具:
npx -y @modelcontextprotocol/inspector npx -y @octodet/keycloak-mcp
集成测试
要使用本地 Keycloak 实例进行测试:
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:latest start-dev
npm run build
node build/index.js
部署
NPM 包
该项目已发布到 NPM,包名为 @octodet/keycloak-mcp。
自动部署
该项目使用 GitHub Actions 进行 CI/CD,在创建新版本时自动测试并发布到 NPM。
先决条件
- Node.js 18 或更高版本
- 运行中的 Keycloak 实例
📄 许可证
本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。
作者
Octodet - 为开发者构建智能工具