by kapilduraphe
Provides Claude with the ability to manage Okta users, groups, and onboarding processes via a Model Context Protocol server.
Enables Claude to perform full‑stack user and group management in an Okta tenant, plus experimental bulk onboarding workflows, through a dedicated MCP server.
npm install in the project directory.claude_desktop_config.json using the provided JSON snippet, inserting your Okta domain and token.eq, sw, ew, co, pr), pagination, sorting, and automatic client‑side fallback.Q: Which environment variables are required?
A: OKTA_ORG_URL (full URL, e.g., https://dev-123456.okta.com) and OKTA_API_TOKEN (admin API token).
Q: Do I need to build the project before running it?
A: Yes. After npm install, run npm run build (or npm run compile) to generate dist/index.js.
Q: Why are some search operators not supported for certain attributes? A: Okta’s native search limits operator support; the server falls back to client‑side filtering when needed.
Q: Can I use the onboarding tools in production? A: They are marked experimental; test in a non‑production tenant first and monitor API limits.
Q: Where are the server logs located?
A: On macOS/Linux: ~/Library/Logs/Claude/mcp*.log; on Windows: %AppData%\Claude\Logs\mcp*.log.
This MCP server enables Claude to interact with Okta's user management system, providing comprehensive user and group management capabilities along with onboarding automation.
dev-123456.okta.com)Install dependencies:
npm install
Open your Claude Desktop configuration file:
For MacOS:
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
For Windows:
code %AppData%\Claude\claude_desktop_config.json
Add or update the configuration:
{
"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"
}
}
}
}
Save the file and restart Claude Desktop.
The server provides the following tools:
Retrieves detailed user information from Okta, including:
Search users by any profile attribute with advanced filtering:
eq (exact match) - Works for all attributessw (starts with) - Works for all attributesew (ends with) - Works for most attributesco (contains) - Works for some attributes (firstName, lastName, email)pr (present/exists) - Works for all attributes (finds users with any value for that attribute)Lists users from Okta with optional filtering and pagination:
Activates a user in Okta:
Suspends a user in Okta
Unsuspends a previously suspended user in Okta
Deletes a user from Okta (note: user must be deactivated first)
Retrieves the last known location and login information for a user from Okta system logs
Lists user groups from Okta with optional filtering and pagination:
Creates a new group in Okta with a name and optional description
Retrieves detailed information about a specific group
Deletes a group from Okta
Assigns a user to a group in Okta
Removes a user from a group in Okta
Lists all users in a specific group with pagination support
Note: The onboarding automation tools are experimental and may be subject to changes or limitations based on Okta's API constraints. Use with caution in production environments.
Imports multiple users from a CSV string:
Assigns multiple users to groups based on attribute mappings:
Provisions application access for multiple users:
Runs a complete onboarding workflow for multiple users from CSV data:
After setup, you can use commands like:
find_users_by_attribute with department eq "Sales"email sw "admin"manager prlastName co "smith"The server includes robust error handling for:
Tools not appearing in Claude:
tail -f ~/Library/Logs/Claude/mcp*.logAuthentication Errors:
Server Connection Issues:
node /path/to/build/index.jsSearch Issues:
contains doesn't work for department)To view server logs:
For MacOS/Linux:
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
For Windows:
Get-Content -Path "$env:AppData\Claude\Logs\mcp*.log" -Wait -Tail 20
If you're getting environment variable errors, verify:
OKTA_ORG_URL: Should be complete URL (e.g., "https://dev-123456.okta.com")OKTA_API_TOKEN: Should be a valid API tokenDifferent Okta attributes support different search operators:
| Attribute Type | eq | sw | ew | co | pr |
|---|---|---|---|---|---|
| firstName, lastName | ✅ | ✅ | ✅ | ✅ | ✅ |
| email, login | ✅ | ✅ | ✅ | ✅ | ✅ |
| department, title | ✅ | ✅ | ❌ | ❌* | ✅ |
| division, organization | ✅ | ✅ | ❌ | ❌* | ✅ |
| All attributes | ✅ | ✅ | ⚠️ | ⚠️ | ✅ |
*❌ = Not supported, ⚠️ = May not be supported for all attributes
Note: When an operator is not supported, the server automatically falls back to client-side filtering for compatibility.
The server includes TypeScript interfaces for Okta user and group data:
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;
};
}
When using the bulk import or onboarding workflow tools, your CSV should include these headers:
firstName (required)lastName (required)email (required)department (optional)title (optional)mobilePhone (optional)Example:
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 License - See LICENSE file for details.
If you encounter any issues:
Note: PRs welcome!
Please log in to share your review and rating for this MCP.
Explore related MCPs that share similar capabilities and solve comparable challenges
by headroomlabs-ai
Compress tool outputs, logs, files, RAG chunks, and conversation history before they reach the LLM, keeping answers identical while saving up to 95% of tokens for JSON payloads.
by modelcontextprotocol
A Model Context Protocol server for Git repository interaction and automation.
by zed-industries
A high‑performance, multiplayer code editor designed for speed and collaboration.
by modelcontextprotocol
Model Context Protocol Servers
by modelcontextprotocol
A Model Context Protocol server that provides time and timezone conversion capabilities.
by cline
An autonomous coding assistant that can create and edit files, execute terminal commands, and interact with a browser directly from your IDE, operating step‑by‑step with explicit user permission.
by upstash
Provides up-to-date, version‑specific library documentation and code examples directly inside LLM prompts, eliminating outdated information and hallucinated APIs.
by daytonaio
Provides a secure, elastic infrastructure that creates isolated sandboxes for running AI‑generated code with sub‑90 ms startup, unlimited persistence, and OCI/Docker compatibility.
by continuedev
Enables faster shipping of code by integrating continuous AI agents across IDEs, terminals, and CI pipelines, offering chat, edit, autocomplete, and customizable agent workflows.
{
"mcpServers": {
"okta": {
"command": "node",
"args": [
"dist/index.js"
],
"env": {
"OKTA_ORG_URL": "<YOUR_OKTA_DOMAIN>",
"OKTA_API_TOKEN": "<YOUR_API_TOKEN>"
}
}
}
}claude mcp add okta node dist/index.js