okta-mcp-server
Version:
Model Context Protocol (MCP) server for Okta API operations with support for bulk operations and caching
105 lines • 3.3 kB
JavaScript
import { z } from 'zod';
// Common schemas for user operations
export const UserProfileSchema = z
.object({
login: z.string().email().optional(),
email: z.string().email(),
firstName: z.string().optional(),
lastName: z.string().optional(),
mobilePhone: z.string().optional(),
secondEmail: z.string().email().optional(),
})
.passthrough(); // Allow additional profile attributes
export const UserCredentialsSchema = z.object({
password: z
.object({
value: z.string().min(8).optional(),
})
.optional(),
recovery_question: z
.object({
question: z.string(),
answer: z.string(),
})
.optional(),
provider: z
.object({
type: z.enum(['OKTA', 'ACTIVE_DIRECTORY', 'LDAP', 'FEDERATION', 'SOCIAL']),
name: z.string().optional(),
})
.optional(),
});
// List Users tool schema
export const ListUsersSchema = z.object({
limit: z.number().min(1).max(200).default(20),
after: z.string().optional(),
filter: z.string().optional(),
search: z.string().optional(),
sortBy: z.enum(['id', 'status', 'created', 'activated', 'lastLogin']).optional(),
sortOrder: z.enum(['asc', 'desc']).default('asc'),
});
// Get User tool schema
export const GetUserSchema = z.object({
userIdOrLogin: z.string(),
});
// Create User tool schema
export const CreateUserSchema = z.object({
profile: UserProfileSchema,
credentials: UserCredentialsSchema.optional(),
groupIds: z.array(z.string()).optional(),
activate: z.boolean().default(true),
provider: z.boolean().default(false),
nextLogin: z.enum(['changePassword']).optional(),
});
// Update User tool schema
export const UpdateUserSchema = z.object({
userId: z.string(),
profile: UserProfileSchema.partial(),
credentials: UserCredentialsSchema.optional(),
});
// Delete User tool schema
export const DeleteUserSchema = z.object({
userId: z.string(),
sendEmail: z.boolean().default(false),
});
// Get User Groups tool schema
export const GetUserGroupsSchema = z.object({
userId: z.string(),
limit: z.number().min(1).max(200).default(20),
after: z.string().optional(),
});
// Response schemas
export const UserResponseSchema = z.object({
id: z.string(),
status: z.string(),
created: z.string(),
activated: z.string().nullable().optional(),
statusChanged: z.string().nullable().optional(),
lastLogin: z.string().nullable().optional(),
lastUpdated: z.string(),
passwordChanged: z.string().nullable().optional(),
profile: z
.object({
login: z.string().email().nullable().optional(),
email: z.string().email(),
firstName: z.string().nullable().optional(),
lastName: z.string().nullable().optional(),
mobilePhone: z.string().nullable().optional(),
secondEmail: z.string().email().nullable().optional(),
})
.passthrough(),
_links: z.record(z.unknown()).optional(),
});
export const ListUsersResponseSchema = z.object({
users: z.array(UserResponseSchema),
_links: z
.object({
next: z
.object({
href: z.string(),
})
.optional(),
})
.optional(),
});
//# sourceMappingURL=schemas.js.map