Okta用户管理系统

Okta MCP服务器为Claude提供与Okta用户管理系统的交互能力,包括全面的用户和组管理功能以及自动化入职流程。

  • by kapilduraphe
  • TypeScript
  • 本地部署
  • 21 星标
  • 更新于
在 GitHub 查看 kapilduraphe/okta-mcp-server

使用说明

Okta MCP服务器

此MCP服务器使Claude能够与Okta的用户管理系统进行交互,提供全面的用户和组管理功能以及入职自动化。

先决条件

  • Node.js(v16或更高版本)
  • Claude桌面应用程序
  • Okta开发者账户
  • Okta的管理员API令牌

安装说明

1.创建Okta开发者帐户

  • 转到 Okta开发者控制台
  • 创建新帐户或登录现有帐户
  • 注意你的Okta域名(例如。, dev-123456.okta.com)

2.创建API令牌

  • 在Okta开发人员控制台中,转到安全>API>令牌
  • 点击“创建令牌”
  • 为您的令牌命名(例如“MCP服务器令牌”)
  • 复制令牌值(您将无法再次看到它)

3.初始项目设置

安装依赖项:

npm install

4.配置克劳德桌面

打开您的Claude Desktop配置文件:

对于MacOS:

code ~/Library/Application\ Support/Claude/claude_desktop_config.json

对于Windows:

code %AppData%\Claude\claude_desktop_config.json

添加或更新配置:

{
    "mcpServers": {
        "okta": {
            "command": "node",
            "args": [
                "PATH_TO_PROJECT_DIRECTORY/dist/index.js"
            ],
            "env": {
                "OKTA_ORG_URL": "https://your-domain.okta.com",
                "OKTA_API_TOKEN": "your-api-token"
            }
        }
    }
}

保存文件并重新启动Claude Desktop。

可用工具

服务器提供以下工具:

用户管理

get_user

从Okta检索详细的用户信息,包括:

  • 用户详细信息(ID、状态)
  • 帐户日期(创建、激活、上次登录等)
  • 个人信息(姓名、电子邮件)
  • 雇用详情
  • 联系方式
  • 地址
  • 偏好设置

find_users_by_attribute

使用高级筛选按任何配置文件属性搜索用户:

  • 支持的属性:名字、姓氏、电子邮件、经理、部门、职务、部门、组织、员工编号、成本中心、用户类型、城市、州
  • 搜索运算符:
    • eq (完全匹配)-适用于所有属性
    • sw (以开头)-适用于所有属性
    • ew (以结尾)-适用于大多数属性
    • co (包含)-适用于某些属性(名字、姓氏、电子邮件)
    • pr (存在/存在)-适用于所有属性(查找具有该属性任何值的用户)
  • 特性:
    • 使用Okta的本地搜索以获得最佳性能
    • 自动回退到客户端筛选不受支持的运算符
    • 敏感属性搜索结果中的PII屏蔽
    • 状态筛选(包括/排除非活动用户)
    • 分页支持,可自定义限制

list_users

列出Okta的用户,并可选择过滤和分页:

  • 支持SCIM筛选器表达式(例如,'profile.firstNameeq“John”')
  • 跨多个字段的自由形式文本搜索
  • 排序选项(按状态、创建日期等)
  • 分页支持,可自定义限制

activate_user

在Okta中激活用户:

  • 发送激活电子邮件的选项
  • 将用户状态更新为活动

suspend_user

在Okta暂停用户

未暂停用户

取消Okta中先前被暂停的用户的订阅

删除用户

从Okta中删除用户(注意:必须先停用用户)

get_user_last_location

从Okta系统日志中检索用户的最后已知位置和登录信息

组管理

list_groups

列出Okta中具有可选过滤和分页功能的用户组:

  • 组的筛选表达式(例如,“键入eq”OKTA_GROUP“”)
  • 跨组字段的自由形式文本搜索
  • 排序选项(按名称、类型等)
  • 分页支持,可自定义限制

创建组

在Okta中创建一个具有名称和可选描述的新组

get_group

检索特定组的详细信息

删除组

从Okta删除组

assign_user_to_group

将用户分配到Okta中的组

remove_user_from_group

从Okta的组中删除用户

list_group_users

列出具有分页支持的特定组中的所有用户

车载自动化(实验)

注: 入职自动化工具是实验性的,可能会根据Okta的API限制条件进行更改或限制。在生产环境中小心使用。

bulk_user_import

从CSV字符串导入多个用户:

  • 基于CSV数据创建用户帐户
  • 用户的可选激活
  • 可选电子邮件通知
  • 分配给默认组

assign_users_to_groups

根据属性映射将多个用户分配到组:

  • 将用户属性(部门、职务等)映射到特定组
  • 基于属性的用户批量分配

供应_应用

为多个用户提供应用程序访问权限:

  • 将用户分配给应用程序
  • 支持批量资源调配

运行登机工作流程

从CSV数据为多个用户运行完整的入职流程:

  • 用户从CSV导入
  • 自动激活
  • 基于属性的组分配
  • 应用供应
  • 欢迎电子邮件配置

Claude中的示例用法

设置后,您可以使用以下命令:

用户管理

  • “显示用户ID为XXXX的用户的详细信息”
  • “查找工程部门的所有用户”
  • “搜索名字以‘John’开头的用户”
  • “查找电子邮件中包含‘gmail’的用户”
  • “显示分配了部门的所有用户”
  • “列出标题为“经理”的用户”
  • “用户的状态是什么john.doe@company.com"
  • “用户上次登录是什么时候jane.smith@organization.com"
  • “查找上个月创建的用户”
  • “激活ID为XXXX的用户”
  • “暂停ID为XXXX的用户”
  • “删除ID为XXXX的已停用用户”
  • “用户XXXX上次从哪里登录的?”

高级用户搜索

  • “查找销售部门的所有用户”→ Uses find_users_by_attribute 随着 department eq "Sales"
  • “显示电子邮件以“admin”开头的用户”→ Uses email sw "admin"
  • “查找分配了任何经理的用户”→ Uses manager pr
  • “列出姓氏包含'smith'的用户”→ Uses lastName co "smith"

组管理

  • “显示我Okta组织中的所有组”
  • “列出包含单词‘admin’的组”
  • “创建一个名为“营销团队”的新组”
  • “获取ID为XXXX的组的详细信息”
  • “删除ID为XXXX的组”
  • “将用户XXXX添加到组YYYY”
  • “从组YYYY中删除用户XXXX”
  • “列出“财务”组中的所有用户”

车载自动化

  • “从CSV数据导入这些用户:[CSV内容]”
  • “根据部门属性将用户分配到组”
  • “为这5个用户提供应用程序访问权限”
  • “为这些新员工运行完整的入职流程:[CSV内容]”

错误处理

该服务器包括强大的错误处理功能,用于:

  • 未找到用户或组(404错误)
  • API身份验证问题
  • 用户配置文件缺失或无效
  • API一般错误
  • CSV解析问题
  • 用户属性映射失败
  • 应用程序配置错误
  • 不支持的搜索运算符(自动回退到其他方法)

故障排除

常见问题

Claude中未出现的工具:

  • 检查克劳德桌面日志: tail -f ~/Library/Logs/Claude/mcp*.log
  • 验证所有环境变量是否设置正确
  • 确保index.js的路径是绝对正确的

身份验证错误:

  • 验证您的API令牌是否有效
  • 检查OKTA_ORG_URL是否包含带https的完整URL://
  • 确保您的Okta域名正确

服务器连接问题:

  • 检查服务器是否已成功构建
  • 验证build/index.js上的文件权限(应该是755)
  • 尝试直接运行服务器: node /path/to/build/index.js

搜索问题:

  • 一些搜索运算符不支持所有属性(例如。, contains 不起作用 department)
  • 需要时,服务器会自动回退到其他搜索方法
  • 检查使用了哪种搜索方法的响应消息

查看日志

要查看服务器日志,请执行以下操作:

对于MacOS/Linux:

tail -n 20 -f ~/Library/Logs/Claude/mcp*.log

对于Windows:

Get-Content -Path "$env:AppData\Claude\Logs\mcp*.log" -Wait -Tail 20

环境变量

如果您遇到环境变量错误,请验证:

  • OKTA_ORG_URL:应该是完整的URL(例如,“https://dev-123456.okta.com")
  • OKTA_API_TOKEN:应为有效的API令牌

安全考虑

  • 确保API代币的安全
  • 不将凭据提交到版本控制
  • 对敏感数据使用环境变量
  • 定期轮换API代币
  • 在Okta管理控制台中监控API的使用情况
  • 为API调用实现速率限制
  • 使用API令牌所需的最低权限
  • 对敏感搜索参数启用PII屏蔽

搜索运营商兼容性

不同的Okta属性支持不同的搜索运算符:

属性类型 eq sw ew co pr
名字,姓氏 ✅ ✅ ✅ ✅ ✅
电子邮件,登录 ✅ ✅ ✅ ✅ ✅
部门、职务 ✅ ✅ ❌ ❌* ✅
部门、组织 ✅ ✅ ❌ ❌* ✅
所有属性 ✅ ✅ ⚠️ ⚠️ ✅

*❌ = 不支持,⚠️ = 可能并非所有属性都支持

注: 当操作员不受支持时,服务器会自动回退到客户端过滤以实现兼容性。

类型

服务器包括Okta用户和组数据的TypeScript接口:

interface OktaUserProfile {
  login: string;
  email: string;
  secondEmail?: string;
  firstName: string;
  lastName: string;
  displayName: string;
  nickName?: string;
  organization: string;
  title: string;
  division: string;
  department: string;
  employeeNumber: string;
  userType: string;
  costCenter: string;
  mobilePhone?: string;
  primaryPhone?: string;
  streetAddress: string;
  city: string;
  state: string;
  zipCode: string;
  countryCode: string;
  preferredLanguage: string;
  profileUrl?: string;
}

interface OktaUser {
  id: string;
  status: string;
  created: string;
  activated: string;
  lastLogin: string;
  lastUpdated: string;
  statusChanged: string;
  passwordChanged: string;
  profile: OktaUserProfile;
}

interface OktaGroup {
  id: string;
  created: string;
  lastUpdated: string;
  lastMembershipUpdated: string;
  type: string;
  objectClass: string[];
  profile: {
    name: string;
    description: string;
  };
}

CSV格式用于登机

使用批量导入或入职工作流工具时,CSV应包含以下标题:

  • firstName (必填)
  • lastName (必填)
  • email (必填)
  • department (可选)
  • title (可选)
  • mobilePhone (可选)

例子:

firstName,lastName,email,department,title,mobilePhone
John,Doe,john.doe@example.com,Engineering,Senior Developer,+1-555-123-4567
Jane,Smith,jane.smith@example.com,Marketing,Director,+1-555-987-6543

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

支持

如果您遇到任何问题:

  • 检查上面的故障排除部分
  • 查看克劳德桌面日志
  • 检查服务器的错误输出
  • 查看Okta的开发人员文档

注意:欢迎PR!