Lets agents manage users, groups, applications and policies in an Okta org with natural language, with confirmation for destructive actions.
Setup
Choose your client, copy the config, then fill in any required environment variables.
claude mcp add okta --env OKTA_CLIENT_ID='<OKTA_CLIENT_ID>' --env OKTA_KEY_ID='<OKTA_KEY_ID>' --env OKTA_ORG_URL='<OKTA_ORG_URL>' --env OKTA_PRIVATE_KEY='<OKTA_PRIVATE_KEY>' --env OKTA_SCOPES='<OKTA_SCOPES>' -- uv run --directory /path/to/okta-mcp-server okta-mcp-server~/.codex/config.toml
[mcp_servers.okta]
command = "uv"
args = ["run", "--directory", "/path/to/okta-mcp-server", "okta-mcp-server"]
env = { OKTA_CLIENT_ID = "<OKTA_CLIENT_ID>", OKTA_KEY_ID = "<OKTA_KEY_ID>", OKTA_ORG_URL = "<OKTA_ORG_URL>", OKTA_PRIVATE_KEY = "<OKTA_PRIVATE_KEY>", OKTA_SCOPES = "<OKTA_SCOPES>" }
# codex mcp add okta --env OKTA_CLIENT_ID='<OKTA_CLIENT_ID>' --env OKTA_KEY_ID='<OKTA_KEY_ID>' --env OKTA_ORG_URL='<OKTA_ORG_URL>' --env OKTA_PRIVATE_KEY='<OKTA_PRIVATE_KEY>' --env OKTA_SCOPES='<OKTA_SCOPES>' -- uv run --directory /path/to/okta-mcp-server okta-mcp-server~/.cursor/mcp.json
{
"mcpServers": {
"okta": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_CLIENT_ID": "<OKTA_CLIENT_ID>",
"OKTA_KEY_ID": "<OKTA_KEY_ID>",
"OKTA_ORG_URL": "<OKTA_ORG_URL>",
"OKTA_PRIVATE_KEY": "<OKTA_PRIVATE_KEY>",
"OKTA_SCOPES": "<OKTA_SCOPES>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"okta": {
"type": "stdio",
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_CLIENT_ID": "<OKTA_CLIENT_ID>",
"OKTA_KEY_ID": "<OKTA_KEY_ID>",
"OKTA_ORG_URL": "<OKTA_ORG_URL>",
"OKTA_PRIVATE_KEY": "<OKTA_PRIVATE_KEY>",
"OKTA_SCOPES": "<OKTA_SCOPES>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"okta": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_CLIENT_ID": "<OKTA_CLIENT_ID>",
"OKTA_KEY_ID": "<OKTA_KEY_ID>",
"OKTA_ORG_URL": "<OKTA_ORG_URL>",
"OKTA_PRIVATE_KEY": "<OKTA_PRIVATE_KEY>",
"OKTA_SCOPES": "<OKTA_SCOPES>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"okta": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_CLIENT_ID": "<OKTA_CLIENT_ID>",
"OKTA_KEY_ID": "<OKTA_KEY_ID>",
"OKTA_ORG_URL": "<OKTA_ORG_URL>",
"OKTA_PRIVATE_KEY": "<OKTA_PRIVATE_KEY>",
"OKTA_SCOPES": "<OKTA_SCOPES>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"okta": {
"command": "uv",
"args": [
"run",
"--directory",
"/path/to/okta-mcp-server",
"okta-mcp-server"
],
"env": {
"OKTA_CLIENT_ID": "<OKTA_CLIENT_ID>",
"OKTA_KEY_ID": "<OKTA_KEY_ID>",
"OKTA_ORG_URL": "<OKTA_ORG_URL>",
"OKTA_PRIVATE_KEY": "<OKTA_PRIVATE_KEY>",
"OKTA_SCOPES": "<OKTA_SCOPES>"
}
}
}
}Environment variables
OKTA_CLIENT_IDOKTA_KEY_IDOKTA_ORG_URLOKTA_PRIVATE_KEYOKTA_SCOPES
Replace the placeholders with your own credentials and keep them out of version control.