Skip to main content
Glama

run_onboarding_workflow

Automate user onboarding by processing CSV data, assigning default groups, mapping attributes to specific groups, provisioning applications, and optionally activating users and sending welcome emails.

Instructions

Run a complete onboarding workflow for multiple users from CSV data

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
activateUsersNoWhether to activate users immediately (default: true)
applicationIdsNoApplication IDs to provision for all users
csvDataYesCSV string with user information
defaultGroupsNoDefault group IDs to assign all users to
groupMappingsNoMapping of user attributes to group IDs (e.g., {"department": {"Engineering": "group1Id"}})
sendWelcomeEmailNoWhether to send welcome emails (default: true)

Implementation Reference

  • The handler function for 'run_onboarding_workflow' that orchestrates bulk user import, group assignments based on attributes, and application provisioning from CSV data.
    run_onboarding_workflow: async (request: { parameters: unknown }) => { const { csvData, activateUsers, defaultGroups, groupMappings, applicationIds, sendWelcomeEmail } = onboardingSchemas.runOnboardingWorkflow.parse(request.parameters); try { // Step 1: Import users const importResults = await onboardingHandlers.bulk_user_import({ parameters: { csvData, activateUsers, sendEmail: sendWelcomeEmail, defaultGroups } }); if (!importResults.data || !importResults.data.success || importResults.data.success.length === 0) { return { content: [{ type: 'text', text: 'No users were successfully created during the onboarding workflow.' }], data: { userImport: importResults.data } }; } const createdUserIds = importResults.data.success.map((user: any) => user.id); // Step 2: Assign to groups based on attributes (if mappings provided) let groupResults: any = { data: { success: [], failed: [] } }; if (Object.keys(groupMappings).length > 0) { groupResults = await onboardingHandlers.assign_users_to_groups({ parameters: { userIds: createdUserIds, attributeMapping: groupMappings } }); } // Step 3: Provision applications (if any provided) let appResults: any = { data: { success: [], failed: [] } }; if (applicationIds.length > 0) { appResults = await onboardingHandlers.provision_applications({ parameters: { userIds: createdUserIds, applicationIds } }); } // Compile workflow results const workflow = { userImport: importResults.data, groupAssignment: groupResults.data, applicationProvisioning: appResults.data, summary: { totalProcessed: importResults.data.success.length + importResults.data.failed.length, successfullyOnboarded: importResults.data.success.length, failedUsers: importResults.data.failed.length, groupsAssigned: groupResults.data.success.length, applicationsProvisioned: appResults.data.success.length } }; // Format response with detailed summary const summary = `Onboarding Workflow Complete: - User Import: - Processed ${workflow.summary.totalProcessed} users - Successfully created: ${workflow.summary.successfullyOnboarded} - Failed: ${workflow.summary.failedUsers} ${Object.keys(groupMappings).length > 0 ? `• Group Assignment: - Users assigned to groups: ${workflow.groupAssignment.success.length} - Failed group assignments: ${workflow.groupAssignment.failed.length}` : '• Group Assignment: Not configured'} ${applicationIds.length > 0 ? `• Application Provisioning: - Users provisioned with applications: ${workflow.applicationProvisioning.success.length} - Failed application provisioning: ${workflow.applicationProvisioning.failed.length}` : '• Application Provisioning: Not configured'} Overall, successfully onboarded ${workflow.summary.successfullyOnboarded} out of ${workflow.summary.totalProcessed} users with ${Object.keys(groupMappings).length > 0 ? 'attribute-based group assignment' : 'default groups only'} and ${applicationIds.length > 0 ? 'application provisioning' : 'no application provisioning'}.`; return { content: [{ type: 'text', text: summary }], data: workflow }; } catch (error) { console.error("Error during onboarding workflow:", error); return { content: [ { type: "text", text: `Failed to complete onboarding workflow: ${error instanceof Error ? error.message : String(error)}`, }, ], isError: true, }; } }
  • Zod schema definition for validating the input parameters of runOnboardingWorkflow.
    runOnboardingWorkflow: z.object({ csvData: z.string().min(1, "CSV data is required"), activateUsers: z.boolean().optional().default(true), defaultGroups: z.array(z.string()).optional().default([]), groupMappings: z.record(z.record(z.string())).optional().default({}), applicationIds: z.array(z.string()).optional().default([]), sendWelcomeEmail: z.boolean().optional().default(true), }),
  • Tool registration entry in the onboardingTools array, including name, description, and JSON input schema.
    { name: "run_onboarding_workflow", description: "Run a complete onboarding workflow for multiple users from CSV data", inputSchema: { type: "object", properties: { csvData: { type: "string", description: "CSV string with user information" }, activateUsers: { type: "boolean", description: "Whether to activate users immediately (default: true)", default: true }, defaultGroups: { type: "array", items: { type: "string" }, description: "Default group IDs to assign all users to", default: [] }, groupMappings: { type: "object", description: "Mapping of user attributes to group IDs (e.g., {\"department\": {\"Engineering\": \"group1Id\"}})", default: {} }, applicationIds: { type: "array", items: { type: "string" }, description: "Application IDs to provision for all users", default: [] }, sendWelcomeEmail: { type: "boolean", description: "Whether to send welcome emails (default: true)", default: true } }, required: ["csvData"] }, }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kapilduraphe/okta-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server