Skip to main content
Glama
Okta MCP Server

Okta MCP Server

by csenguttuvan

Okta MCP Server

License: MIT Python: >=3.10 MCP

A production-grade Model Context Protocol (MCP) server that connects AI assistants like Claude Desktop, Cursor, and Claude Code to the Okta API.

Empower your LLMs to automate user provisioning, audit group memberships, troubleshoot access policies, query system logs, and inspect applications with built-in safety guardrails.


โœจ Features

  • 69+ Okta Tools: Full coverage across Users, Groups, Applications, Policies, Group Rules, and System Logs.

  • Dual Authentication:

    • API Token (SSWS): Simple 30-second setup for individual developers and desktop AI clients.

    • OAuth 2.0 Private Key JWT: Enterprise-grade service app authentication with automatic token rotation.

  • Built-In Safety Guardrails:

    • Dry-run by default: All bulk operations and attribute-based assignments preview changes before execution.

    • Confirmation flags: Single-target destructive actions (deactivation, deletion, MFA reset) require explicit confirm_* confirmation.

    • Safety caps: Prevents accidental mass updates (capped by default to 50 users unless explicitly overridden).

  • Flexible Modes:

    • Full Admin Mode: Full read/write management across all tools.

    • Read-Only Mode: Safety-first mode that only exposes inspection and search tools (OKTA_READ_ONLY=true).

  • Standard I/O (stdio) & HTTP/SSE: Runs natively as a subprocess inside your AI editor, or as a standalone container.


Related MCP server: TAKO MCP Server for Okta

๐Ÿš€ Quick Start

The fastest way to use Okta MCP server is with uv / uvx without needing to install anything permanently.

1. Claude Desktop

Add the following to your Claude Desktop configuration file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "okta": {
      "command": "uvx",
      "args": ["okta-mcp-server"],
      "env": {
        "OKTA_API_BASE_URL": "https://your-org.okta.com",
        "OKTA_API_TOKEN": "00your_okta_api_token"
      }
    }
  }
}

2. Cursor

Add to .cursor/mcp.json in your project or global Cursor settings:

{
  "mcpServers": {
    "okta": {
      "command": "uvx",
      "args": ["okta-mcp-server"],
      "env": {
        "OKTA_API_BASE_URL": "https://your-org.okta.com",
        "OKTA_API_TOKEN": "00your_okta_api_token"
      }
    }
  }
}

3. Claude Code CLI

Add Okta MCP server directly using the Claude Code CLI:

claude mcp add okta -- uvx okta-mcp-server \
  -e OKTA_API_BASE_URL="https://your-org.okta.com" \
  -e OKTA_API_TOKEN="00your_okta_api_token"

๐Ÿ”‘ Authentication

  1. Log in to your Okta Admin Console.

  2. Navigate to Security โ†’ API โ†’ Tokens.

  3. Click Create Token, name it (e.g. claude-okta-mcp), and copy the generated token.

  4. Set the environment variables:

    OKTA_API_BASE_URL=https://your-org.okta.com
    OKTA_API_TOKEN=00your_api_token_here

Method B: OAuth 2.0 Private Key JWT โ€” For Teams & Enterprise

For zero static secrets, Okta supports service app authentication using public/private key pairs:

  1. In Okta Admin Console, go to Applications โ†’ Applications โ†’ Create App Integration.

  2. Select API Services and create an app.

  3. Under General โ†’ Client Credentials, add a Public Key (PEM) and keep your private key (private_key.pem).

  4. Under Okta API Scopes, grant the desired scopes (e.g., okta.users.manage, okta.groups.manage, okta.apps.read).

  5. Configure your environment:

    OKTA_API_BASE_URL=https://your-org.okta.com
    OKTA_CLIENT_ID=0oayourclientid
    OKTA_PRIVATE_KEY_PATH=/path/to/private_key.pem
    OKTA_SCOPES="okta.users.manage okta.groups.manage okta.apps.manage okta.policies.manage okta.logs.read"

๐Ÿ›ก๏ธ Read-Only Mode

If you want your AI assistant to only inspect, audit, and troubleshoot without making any modifications:

Set OKTA_READ_ONLY=true:

{
  "mcpServers": {
    "okta": {
      "command": "uvx",
      "args": ["okta-mcp-server"],
      "env": {
        "OKTA_API_BASE_URL": "https://your-org.okta.com",
        "OKTA_API_TOKEN": "00your_okta_api_token",
        "OKTA_READ_ONLY": "true"
      }
    }
  }
}

In read-only mode, all 44 state-mutating tools (create_*, update_*, delete_*, assign_*, deactivate_*) are disabled, and only the 25 inspection tools (get_*, list_*, search_*, find_*) are registered.


๐Ÿงฐ Available Tools Summary

Category

Tools

Capabilities

Users

find_user, get_user, list_users, search_users, search_users_fuzzy, search_users_by_attribute, create_user, update_user, deactivate_user, reactivate_user, delete_user, reset_user_password, reset_user_mfa_and_password

Full user lifecycle, profile updates, credential resets, and fuzzy search

Groups

get_group, list_groups, search_groups_fuzzy, list_group_users, get_user_groups, bulk_get_groups, create_group, update_group, delete_group, add_user_to_group, add_users_to_group, remove_user_from_group, add_users_to_group_by_attribute, remove_users_from_group_by_attribute

Group administration, bulk membership automation, attribute matching

Applications

find_application, get_application, list_applications, search_applications_fuzzy, list_application_users, list_application_groups, list_application_available_roles, search_aws_applications_by_account, create_application, assign_user_to_application, assign_group_to_application, assign_user_to_application_with_role, batch_assign_users_to_application, unassign_user_from_application, unassign_users_from_application_by_attribute

SAML/OIDC/Bookmark apps, AWS IAM role assignments, bulk user provisioning

Policies

get_policy, list_policies, get_policy_rule, list_policy_rules, create_policy, update_policy, activate_policy, deactivate_policy, delete_policy, create_policy_rule, update_policy_rule, activate_policy_rule, deactivate_policy_rule, delete_policy_rule

Sign-on, MFA, Password, and Access policies

Group Rules

get_group_rule, list_group_rules, create_group_rule, update_group_rule, activate_group_rule, deactivate_group_rule, delete_group_rule

Dynamic, rule-based group membership automation

System Logs

get_logs

Real-time Okta audit log queries with filtering and time windows


๐Ÿณ Docker Usage

A lightweight multi-platform Dockerfile is included:

docker build -t okta-mcp-server .

Running stdio in Docker:

docker run -i --rm \
  -e OKTA_API_BASE_URL="https://your-org.okta.com" \
  -e OKTA_API_TOKEN="00your_token" \
  okta-mcp-server

Running as an HTTP / SSE Server:

docker run -d --name okta-mcp \
  -p 8000:8000 \
  -e MCP_TRANSPORT="sse" \
  -e MCP_HOST="0.0.0.0" \
  -e MCP_PORT="8000" \
  -e OKTA_API_BASE_URL="https://your-org.okta.com" \
  -e OKTA_API_TOKEN="00your_token" \
  okta-mcp-server

๐Ÿงช Development & Testing

Clone the repository and install dependencies with uv:

git clone https://github.com/csenguttuvan/okta-mcp-server.git
cd okta-mcp-server
uv sync

# Run the test suite
uv run pytest -v

# Run lint and code checks
uv run ruff check .
uv run ruff format --check .

๐Ÿ“„ License

This project is licensed under the MIT License.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables LLM agents to manage Okta organizations through natural language, providing full CRUD operations for users, groups, applications, policies, and system logs via Okta's Admin Management APIs.
    958 PyPI
    76
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Okta users, groups, applications, policies, and logs through natural language commands.
    Apache 2.0