内容
<div align="center">

[](https://opensource.org/licenses/Apache-2.0)
[](https://python.org/)
</div>
MCP(模型上下文协议)是由Anthropic引入的开放协议,它标准化了大型语言模型与外部工具、资源或远程服务之间的通信方式。
> [!CAUTION]
> **测试软件通知:该软件目前处于测试阶段,仅提供AS IS,不提供任何保证。**
>
> - 功能、API和功能性可能会在任何时候发生变化而无需通知
> - 不建议用于生产环境或关键工作负载
> - 测试期间的支持有限
> - 问题和反馈可以通过 [GitHub问题跟踪器](https://github.com/okta/okta-mcp-server/issues) 报告
>
> 通过使用此测试软件,您承认并接受这些条件。
Okta MCP Server与LLM和AI代理集成,允许您使用自然语言执行各种Okta管理操作。例如,您可以简单地要求Claude Desktop执行Okta管理操作:
- > 创建一个新用户并将其添加到工程组
- > 显示我过去24小时内所有失败的登录尝试
- > 列出过去一个月未使用的所有应用程序
**赋予LLM代理管理Okta组织的能力**
该服务器是一个MCP(模型上下文协议)服务器,提供与Okta管理API的无缝集成。它允许LLM代理以编程方式与Okta交互,实现自动化和增强的管理功能。
## 关键功能
* **LLM驱动的Okta管理:** 允许您的LLM代理根据自然语言指令在Okta环境中执行管理任务。
* **安全认证:** 支持交互式使用的设备授权许可和安全、自动的服务器到服务器通信的私有密钥JWT。
* **与Okta管理API集成:** 利用官方Okta API,确保与您的Okta组织的安全和可靠交互。
* **可扩展的架构:** 设计为易于扩展新的功能和支持其他Okta API端点。
* **全面的工具支持:** 对用户、组、应用程序、策略等提供完整的CRUD操作。
该MCP服务器利用Okta的Python SDK与Okta API通信,确保集成稳健且得到充分支持。
## 🚀 入门指南
**前提条件:**
- [Python 3.8+](https://python.org/downloads)
- [uv](https://docs.astral.sh/uv/getting-started/installation/) 包管理器
- [Claude Desktop](https://claude.ai/download) 或其他 [MCP客户端](https://modelcontextprotocol.io/clients)
- 具有适当权限的 [Okta](https://okta.com/) 账户
<br/>
### 安装Okta MCP服务器
安装Okta MCP服务器,并配置它与您首选的MCP客户端一起工作。
**适用于所有工具的Claude Desktop**
1. 克隆并安装服务器:
```bash
git clone https://github.com/okta/okta-mcp-server.git
cd okta-mcp-server
uv sync
```
2. 通过将以下内容添加到您的 `claude_desktop_config.json` 配置文件中来配置Claude Desktop:
```json
{
"mcpServers": {
"okta-mcp-server": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_ORG_URL": "<OKTA_ORG_URL>",
"OKTA_CLIENT_ID": "<OKTA_CLIENT_ID>",
"OKTA_SCOPES": "<OKTA_SCOPES>",
"OKTA_PRIVATE_KEY": "<PRIVATE_KEY_IF_NEEDED>",
"OKTA_KEY_ID": "<KEY_ID_IF_NEEDED>"
}
}
}
}
```
**VS Code**
将以下内容添加到您的VS Code `settings.json`文件中:
```json
{
"mcp": {
"inputs": [
{
"type": "promptString",
"description": "Okta组织URL(例如:https://dev-123456.okta.com)",
"id": "OKTA_ORG_URL"
},
{
"type": "promptString",
"description": "Okta客户端ID",
"id": "OKTA_CLIENT_ID",
"password": true
},
{
"type": "promptString",
"description": "Okta作用域(用空格分隔,例如:'okta.users.read okta.groups.manage')",
"id": "OKTA_SCOPES"
},
{
"type": "promptString",
"description": "Okta私钥。浏览器认证方式必填。",
"id": "OKTA_PRIVATE_KEY",
"password": true
},
{
"type": "promptString",
"description": "私钥的Okta密钥ID(KID)。浏览器认证方式必填。",
"id": "OKTA_KEY_ID",
"password": true
}
],
"servers": {
"okta-mcp-server": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/the/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_ORG_URL": "${input:OKTA_ORG_URL}",
"OKTA_CLIENT_ID": "${input:OKTA_CLIENT_ID}",
"OKTA_SCOPES": "${input:OKTA_SCOPES}",
"OKTA_PRIVATE_KEY": "${input:OKTA_PRIVATE_KEY}",
"OKTA_KEY_ID": "${input:OKTA_KEY_ID}"
}
}
}
}
}
```
**其他MCP客户端**
要将Okta MCP服务器与其他MCP客户端一起使用,您可以手动添加此配置并重启客户端以使更改生效:
```json
{
"mcpServers": {
"okta-mcp-server": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_ORG_URL": "<OKTA_ORG_URL>",
"OKTA_CLIENT_ID": "<OKTA_CLIENT_ID>",
"OKTA_SCOPES": "<OKTA_SCOPES>",
"OKTA_PRIVATE_KEY": "<PRIVATE_KEY_IF_NEEDED>",
"OKTA_KEY_ID": "<KEY_ID_IF_NEEDED>"
}
}
}
}
```
### 与Okta认证
服务器支持两种认证方法。请根据您的使用场景选择最合适的一种。
**方法1:设备授权许可(交互式)**
1. 在您的Okta组织中,创建一个新的应用程序集成。
2. 选择 **OIDC - OpenID Connect** 和 **Native Application**。
3. 在 **授权类型**下,确保选中 **设备授权**。
4. 进入Okta API作用域选项卡,并为所需的API授予权限(例如,okta.users.read,okta.groups.manage)。
5. 保存应用程序并复制 **客户端ID**。
6. **文档:** [Okta设备授权许可指南](https://developer.okta.com/docs/guides/device-authorization-grant/main/)
**方法2:私有密钥JWT(无浏览器)**
1. **创建应用程序:** 在您的Okta组织中,创建一个新的应用程序集成。选择 **API服务**。保存应用程序并复制 **客户端ID**。
2. **配置客户端身份验证:**
* 在应用程序的 **常规**选项卡中,找到 **客户端凭证**部分并点击 **编辑**。
* 禁用 **在令牌请求中需要证明私钥存在(DPoP)头部**。
* 选择 **公钥/私钥**作为身份验证方法。
3. **添加公钥:** 您有两个选项可以添加密钥。
* **选项A:Okta生成密钥(推荐)**
1. 在 **公钥**部分,点击 **添加密钥**。
2. 在对话框中,选择 **生成新密钥**。
3. Okta将立即生成一对密钥。**下载或保存私钥**(`private.pem`)并安全存储。
4. 复制新生成的密钥的 **密钥ID(KID)**。
* **选项B:使用您自己的密钥**
1. 使用以下 `openssl`命令本地生成一对密钥:
```bash
# 生成一个2048位的RSA私钥
openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048
# 从私钥中提取公钥
openssl rsa -in private.pem -pubout -out public.pem
```
2. 点击 **添加密钥**并粘贴您的 **公钥** (`public.pem`) 内容到对话框中。
3. 复制您添加的密钥的 **密钥ID(KID)**。
4. **授予API作用域:** 进入 **Okta API作用域**选项卡并授予所需的API权限。
5. **分配管理员角色:** 为避免 `403 Forbidden` 错误,进入 **管理员角色**选项卡并为此应用程序分配 **超级管理员** 角色。
### 验证您的集成
重新启动您的MCP客户端(Claude Desktop、VS Code等)并要求它帮助您管理您的Okta租户:
> 显示我Okta组织中的用户
## 🛠️ 支持的工具
Okta MCP服务器为LLM提供以下工具,以与您的Okta租户交互:
### 用户
| 工具 | 描述 | 用例示例 |
| ------------------------------- | -------------------------------------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `list_users` | 列出Okta组织中的所有用户 | - `显示我Okta组织中的用户` <br> - `查找姓名中包含 'john' 的用户` <br> - `我有哪些用户在工程部门?` |
| `get_user` | 获取特定用户的详细信息 | - `显示用户 john.doe@company.com 的详细信息` <br> - `获取用户 ID 00u1234567890 的信息` <br> - `Jane Smith 属于哪些组?` |
| `create_user` | 在Okta组织中创建新用户 | - `创建一个名为 John Doe 的新用户,邮箱为 john.doe@company.com` <br> - `向销售部门添加一名新员工` <br> - `设置一个承包商账户` |
| `update_user` | 更新现有用户的配置文件信息 | - `将 John Doe 的部门更新为工程部门` <br> - `更改用户 jane.smith@company.com 的电话号码` <br> - `更新用户的经理信息` |
| `deactivate_user` | 停用用户,使其变为非活动状态 | - `停用用户 john.doe@company.com` <br> - `禁用前员工 Jane Smith 的访问权限` <br> - `暂时暂停承包商账户` |
| `delete_deactivated_user` | 永久删除停用的用户 | - `删除停用的用户 john.doe@company.com` <br> - `永久移除前员工 Jane Smith` <br> - `清理旧的承包商账户` |
| `get_user_profile_attributes` | 检索所有支持的用户配置文件属性 | - `有哪些用户配置文件字段可用?` <br> - `显示我们可以设置的自定义属性` <br> - `列出标准Okta用户属性` |
### 组
| 工具 | 描述 | 用例示例 |
| ----------------------- | ------------------------------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `list_groups` | 列出Okta组织中的所有组 | - `显示我Okta组织中的组` <br> - `查找名称中包含 '工程' 的组` <br> - `我们有哪些安全组?` |
| `get_group` | 获取特定组的详细信息 | - `显示工程组的详细信息` <br> - `管理员组有多少成员?` <br> - `销售组有权访问哪些应用程序?` |
| `create_group` | 创建一个新组 | - `创建一个名为 DevOps Team 的新组` <br> - `为财务部门设置一个安全组` <br> - `添加一个临时承包商组` |
| `update_group` | 更新现有组的信息 | - `更新工程组的描述` <br> - `将销售组的名称更改为收入团队` <br> - `修改财务组设置` |
| `delete_group` | 删除一个组(需要确认) | - `删除旧的营销组` <br> - `移除临时项目组` <br> - `清理未使用的安全组` |
| `list_group_users` | 列出属于特定组的所有用户 | - `工程组有哪些成员?` <br> - `显示所有管理员` <br> - `列出财务部门的用户` |
| `list_group_apps` | 列出分配给特定组的所有应用程序 | - `工程组可以访问哪些应用程序?` <br> - `显示分配给销售团队的应用` <br> - `列出管理员的所有应用程序` |
| `add_user_to_group` | 将用户添加到组 | - `将 john.doe@company.com 添加到工程组` <br> - `给 Jane Smith 授予财务应用程序的访问权限` <br> - `将新员工添加到销售团队` |
| `remove_user_from_group`| 从组中移除用户 | - `从工程组中移除 john.doe@company.com` <br> - `撤销 Jane 的管理员权限` <br> - `从财务组中移除承包商` |
### 应用程序
| 工具 | 描述 | 用例示例 |
| ----------------------------- | ------------------------------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `list_applications` | 列出Okta组织中的所有应用程序 | - `显示我Okta组织中的应用程序` <br> - `查找名称中包含 'API' 的应用程序` <br> - `我们配置了哪些SSO应用程序?` |
| `get_application` | 获取特定应用程序的详细信息 | - `显示Salesforce应用程序的详细信息` <br> - `我们的移动应用程序的回调URL是什么?` <br> - `获取我们Web应用程序的客户端ID` |
| `create_application` | 创建一个新应用程序 | - `为我们的HR系统创建一个新的SAML应用程序` <br> - `设置一个新的API服务应用程序` <br> - `添加移动应用程序集成` |
| `update_application` | 更新现有应用程序的信息 | - `更新我们Web应用程序的回调URL` <br> - `更改Salesforce应用程序的徽标` <br> - `修改我们的HR系统的SAML设置` |
| `delete_application` | 删除一个应用程序(需要确认) | - `删除旧的旧应用程序` <br> - `移除未使用的测试应用程序` <br> - `清理已弃用的集成` |
| `activate_application` | 激活一个应用程序 | - `激活新的HR应用程序` <br> - `启用Salesforce集成` <br> - `为用户打开移动应用程序` |
| `deactivate_application` | 停用一个应用程序 | - `停用旧的CRM应用程序` <br> - `暂时禁用移动应用程序` <br> - `关闭测试环境访问权限` |
### 策略
| 工具 | 描述 | 使用示例 |
| --------------------------- | ---------------------------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `list_policies` | 列出 Okta 组织中的所有策略 | - `显示安全策略` <br> - `我们有哪些密码策略?` <br> - `列出所有 MFA 注册策略` |
| `get_policy` | 获取策略的详细信息 | - `显示我们的密码策略的详细信息` <br> - `MFA 要求是什么?` <br> - `显示承包商的登录策略` |
| `create_policy` | 创建新策略 | - `为承包商创建新的密码策略` <br> - `为高风险应用程序设置 MFA 要求` <br> - `为远程工人添加登录策略` |
| `update_policy` | 更新现有策略 | - `更新密码复杂性要求` <br> - `修改高管的 MFA 策略` <br> - `更改承包商的会话超时` |
| `delete_policy` | 删除策略 | - `删除旧密码策略` <br> - `删除已弃用的 MFA 策略` <br> - `清理未使用的安全策略` |
| `activate_policy` | 激活策略 | - `激活新的密码策略` <br> - `启用 MFA 要求` <br> - `启用承包商登录策略` |
| `deactivate_policy` | 停用策略 | - `停用旧安全策略` <br> - `暂时禁用 MFA 进行测试` <br> - `关闭严格的密码要求` |
| `list_policy_rules` | 列出特定策略的所有规则 | - `显示密码策略的所有规则` <br> - `配置了哪些 MFA 规则?` <br> - `列出登录策略中的例外` |
| `get_policy_rule` | 获取策略规则的详细信息 | - `显示承包商 MFA 规则的详细信息` <br> - `VPN 访问规则的条件是什么?` <br> - `显示紧急访问规则` |
| `create_policy_rule` | 为策略创建新规则 | - `为高管添加例外规则` <br> - `为承包商访问创建规则` <br> - `为 IT 管理员设置紧急访问规则` |
| `update_policy_rule` | 更新现有策略规则 | - `更新远程工人的位置限制` <br> - `修改设备信任要求` <br> - `更改基于风险的身份验证设置` |
| `delete_policy_rule` | 从策略中删除规则 | - `删除旧承包商例外` <br> - `删除已弃用的 VPN 规则` <br> - `清理未使用的策略例外` |
| `activate_policy_rule` | 激活策略规则 | - `激活新的紧急访问规则` <br> - `启用承包商限制` <br> - `启用基于位置的访问规则` |
| `deactivate_policy_rule` | 停用策略规则 | - `停用旧紧急规则` <br> - `暂时禁用位置限制` <br> - `关闭设备信任要求进行测试` |
### 日志
| 工具 | 描述 | 使用示例 |
| ----------- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `get_logs` | 从 Okta 组织中检索系统日志 | - `显示最近的登录尝试` <br> - `查找过去 24 小时的登录失败` <br> - `获取用户 john.doe@company.com 的身份验证日志` |
## 🔐 身份验证
Okta MCP 服务器使用 Okta 管理 API,并需要身份验证才能访问您的 Okta 租户。
### 身份验证流程
服务器使用 OAuth 2.0 设备授权流程与 Okta 进行安全身份验证,或使用私有密钥 JWT 进行无浏览器身份验证。您的凭证由安全流程管理,绝不会以明文形式暴露。
### 初始设置
MCP 服务器将根据您的配置自动启动适当的身份验证流程:
- **设备授权许可**: 基于浏览器的交互式身份验证
- **私有密钥 JWT**: 使用客户端凭证的无浏览器身份验证
> [!NOTE]
> 设备授权流程不支持**私有云**租户。私有云用户应使用具有客户端凭证的私有密钥 JWT 身份验证。
> [!IMPORTANT]
> 使用 MCP 服务器将根据您的订阅计划消耗管理 API 速率限制。有关更多信息,请参阅 [速率限制策略](https://developer.okta.com/docs/reference/rate-limits/)。
## 🩺 故障排除
在遇到 Okta MCP 服务器问题时,可以使用多种故障排除选项来帮助诊断和解决问题。
### 🐞 调试模式
启用调试模式以获得更详细的日志记录:
```bash
export OKTA_LOG_LEVEL=DEBUG
```
> [!TIP]
> 调试模式在解决连接或身份验证问题时特别有用。
### 🚨 常见问题
1. **身份验证失败**
- 确保您在 Okta 租户中具有正确的权限
- 验证您的 `OKTA_ORG_URL`、`OKTA_CLIENT_ID` 和 `OKTA_SCOPES` 是否正确
- 检查您的应用程序是否已授予必要的 API 范围
2. **MCP 客户端无法连接到服务器**
- 在安装后重启您的 MCP 客户端
- 验证您的配置中服务器路径是否正确
- 检查 `uv` 是否已安装并在您的 PATH 中可访问
3. **API 错误或权限问题**
- 使用 `export OKTA_LOG_LEVEL=DEBUG` 启用调试模式
- 验证您的 Okta 应用程序是否具有所需的范围
- 确保您的应用程序已分配适当的管理员角色
- 在 Okta 系统日志中检查详细错误信息
4. **“Claude 的响应被中断...”错误**
- 通常,当 Claude 达到其上下文长度限制时会发生这种情况
- 尝试更具体并保持查询简洁
- 将大型请求分解为较小、集中的操作
> [!TIP]
> 大多数连接问题都可以通过重启服务器和 MCP 客户端来解决。
## 📋 调试日志
启用调试模式以查看详细日志:
```bash
export OKTA_LOG_LEVEL=DEBUG
```
您还可以指定日志文件:
```bash
export OKTA_LOG_FILE="/path/to/okta-mcp.log"
```
## 👨💻 开发
### 从源代码构建
```bash
# 克隆仓库
git clone https://github.com/okta/okta-mcp-server.git
cd okta-mcp-server
# 安装依赖项
uv sync
# 直接运行服务器
uv run okta-mcp-server
```
### 开发脚本
```bash
# 运行并启用调试日志
OKTA_LOG_LEVEL=DEBUG uv run okta-mcp-server
# 运行测试
uv run pytest
# 以开发模式安装
uv pip install -e .
```
> [!NOTE]
> 此服务器需要 [Python 3.8 或更高版本](https://python.org/downloads) 和 [uv](https://docs.astral.sh/uv/)。
## 🔒 安全
Okta MCP 服务器优先考虑安全:
- 通过安全身份验证流程管理凭证
- 不以明文存储敏感信息
- 身份验证使用 OAuth 2.0 设备授权流程或私有密钥 JWT
- 支持细粒度 API 范围权限
- 通过环境变量轻松进行凭证管理
> [!IMPORTANT]
> 出于安全最佳实践,请始终审查身份验证过程中请求的权限,以确保它们符合您的安全要求。
> [!CAUTION]
> 在授予 Okta 应用程序 API 范围时,请始终使用最小特权原则。
## 🧪 安全扫描
我们建议定期使用社区工具扫描此服务器和您部署的任何其他 MCP 兼容服务器,以发现协议级风险和错误配置。
这些扫描器有助于识别关键漏洞类别中的问题,包括:服务器实现错误、工具定义和生命周期风险、交互和数据流弱点以及配置或环境漏洞。
如果您发现漏洞,请遵循我们的 [责任披露流程](https://www.okta.com/security/)。
## 💬 反馈和贡献
我们感谢对该项目的反馈和贡献!在开始之前,请参阅:
- [Okta 的通用贡献指南](CONTRIBUTING.md)
### 报告问题
要提供反馈或报告错误,请 [在我们的错误跟踪器上提出问题](https://github.com/okta/okta-mcp-server/issues)。
### 漏洞报告
请不要在公共 GitHub 问题跟踪器上报告安全漏洞。请遵循 [责任披露流程](https://www.okta.com/security/)。
## 📄 许可证
该项目根据 Apache 2.0 许可证获得许可。有关更多信息,请参见 [LICENSE](LICENSE) 文件。
---
## 什么是 Okta?
<p align="center">
<picture>
<img alt="Okta Logo" src="assets/logo.png" width="150">
</picture>
</p>
<p align="center">
Okta 是领先的独立身份提供商。欲了解更多信息,请访问 <a href="https://www.okta.com/why-okta/">为什么选择 Okta?</a>
</p>
版权所有 © 2025-至今,Okta, Inc.
根据 Apache 许可证版本 2.0(“许可证”)授权;您不得在遵守许可证的情况下使用此文件。您可以在 http://www.apache.org/licenses/LICENSE-2.0 处获取许可证的副本。除非法律要求或书面协议另有约定,否则根据许可证分发的软件按“原样”分发,不附带任何明示或暗示的保证。有关权限和限制的详细信息,请参阅许可证。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器