okta-mcp-server
Version:
Model Context Protocol (MCP) server for Okta API operations with support for bulk operations and caching
187 lines • 6.1 kB
JavaScript
import { z } from 'zod';
// Bulk Create Users Schemas
export const BulkCreateUsersSchema = z.object({
format: z.enum(['json', 'csv']),
data: z.string(),
options: z
.object({
batchSize: z.number().min(1).max(50).default(10).optional(),
activate: z.boolean().default(true).optional(),
dryRun: z.boolean().default(false).optional(),
continueOnError: z.boolean().default(true).optional(),
csvMapping: z
.object({
email: z.string().optional(),
firstName: z.string().optional(),
lastName: z.string().optional(),
login: z.string().optional(),
mobilePhone: z.string().optional(),
department: z.string().optional(),
title: z.string().optional(),
manager: z.string().optional(),
customAttributes: z.record(z.string()).optional(),
})
.optional(),
})
.optional(),
});
// Bulk Update Users Schemas
export const BulkUpdateUsersSchema = z.object({
updateMode: z.enum(['filter', 'list', 'csv']),
filter: z.string().optional(),
userIds: z.array(z.string()).optional(),
csvData: z.string().optional(),
updates: z
.object({
profile: z.record(z.unknown()).optional(),
credentials: z.record(z.unknown()).optional(),
})
.optional(),
options: z
.object({
batchSize: z.number().min(1).max(50).default(10).optional(),
dryRun: z.boolean().default(false).optional(),
continueOnError: z.boolean().default(true).optional(),
csvMapping: z
.object({
identifier: z.string().optional(),
identifierType: z.enum(['email', 'id', 'login']).optional(),
fields: z.record(z.string()).optional(),
})
.optional(),
})
.optional(),
});
// Bulk Delete Users Schemas
export const BulkDeleteUsersSchema = z.object({
selectionMode: z.enum(['filter', 'list', 'csv']),
filter: z.string().optional(),
userIds: z.array(z.string()).optional(),
csvData: z.string().optional(),
action: z.enum(['deactivate', 'delete']).default('deactivate'),
options: z
.object({
batchSize: z.number().min(1).max(50).default(10).optional(),
dryRun: z.boolean().default(true).optional(),
requireConfirmation: z.boolean().default(true).optional(),
sendEmail: z.boolean().default(false).optional(),
csvMapping: z
.object({
identifier: z.string().optional(),
identifierType: z.enum(['email', 'id', 'login']).optional(),
})
.optional(),
})
.optional(),
});
// Export Users Schema
export const ExportUsersSchema = z.object({
format: z.enum(['csv', 'json']),
filter: z.string().optional(),
search: z.string().optional(),
fields: z
.array(z.string())
.default([
'id',
'status',
'created',
'activated',
'lastLogin',
'profile.email',
'profile.login',
'profile.firstName',
'profile.lastName',
'profile.mobilePhone',
'profile.department',
'profile.title',
'profile.manager',
])
.optional(),
options: z
.object({
includeGroups: z.boolean().default(false).optional(),
includeApps: z.boolean().default(false).optional(),
limit: z.number().min(0).default(0).optional(),
filename: z.string().optional(),
})
.optional(),
});
// Generate Import Template Schema
export const GenerateImportTemplateSchema = z.object({
format: z.enum(['csv', 'json']),
includeOptionalFields: z.boolean().default(false).optional(),
includeCustomAttributes: z.array(z.string()).optional(),
sampleRows: z.number().min(0).max(10).default(3).optional(),
});
// Get Bulk Operation Status Schema
export const GetBulkOperationStatusSchema = z.object({
operationId: z.string(),
});
// Bulk Operation Progress Schema
export const BulkOperationProgressSchema = z.object({
operationId: z.string(),
type: z.enum(['create', 'update', 'delete', 'export']),
status: z.enum(['pending', 'running', 'completed', 'failed', 'cancelled']),
total: z.number(),
processed: z.number(),
succeeded: z.number(),
failed: z.number(),
startTime: z.string(),
endTime: z.string().optional(),
errors: z
.array(z.object({
index: z.number(),
identifier: z.string().optional(),
error: z.string(),
details: z.unknown().optional(),
}))
.optional(),
results: z.array(z.unknown()).optional(),
});
// CSV User Input Schema
export const CSVUserInputSchema = z
.object({
email: z.string().email(),
firstName: z.string().optional(),
lastName: z.string().optional(),
login: z.string().optional(),
mobilePhone: z.string().optional(),
department: z.string().optional(),
title: z.string().optional(),
manager: z.string().optional(),
// Allow additional properties for custom attributes
})
.passthrough();
// JSON User Input Schema
export const JSONUserInputSchema = z.object({
profile: z
.object({
email: z.string().email(),
login: z.string().optional(),
firstName: z.string().optional(),
lastName: z.string().optional(),
mobilePhone: z.string().optional(),
secondEmail: z.string().email().optional(),
department: z.string().optional(),
title: z.string().optional(),
manager: z.string().optional(),
})
.passthrough(),
credentials: z
.object({
password: z
.object({
value: z.string().min(8).optional(),
})
.optional(),
recovery_question: z
.object({
question: z.string().optional(),
answer: z.string().optional(),
})
.optional(),
})
.optional(),
groupIds: z.array(z.string()).optional(),
});
//# sourceMappingURL=schemas.js.map