Kapil Duraphe/okta-mcp-server
Built by Metorial, the integration platform for agentic AI.
Kapil Duraphe/okta-mcp-server
Server Summary
Retrieve user profiles
Manage user statuses
Access account details
Automate onboarding processes
Integrate with Okta's API
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 pr
lastName co "smith"
The server includes robust error handling for:
Tools not appearing in Claude:
tail -f ~/Library/Logs/Claude/mcp*.log
Authentication Errors:
Server Connection Issues:
node /path/to/build/index.js
Search 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,[email protected],Engineering,Senior Developer,+1-555-123-4567
Jane,Smith,[email protected],Marketing,Director,+1-555-987-6543
MIT License - See LICENSE file for details.
If you encounter any issues:
Note: PRs welcome!