okta-mcp-server
Version:
Model Context Protocol (MCP) server for Okta API operations with support for bulk operations and caching
378 lines • 11.3 kB
JavaScript
import { z } from 'zod';
// Common schemas for application operations
export const AppSignOnModeSchema = z.enum([
'AUTO_LOGIN',
'BASIC_AUTH',
'BOOKMARK',
'BROWSER_PLUGIN',
'OPENID_CONNECT',
'SAML_1_1',
'SAML_2_0',
'SECURE_PASSWORD_STORE',
'WS_FEDERATION',
]);
export const AppStatusSchema = z.enum(['ACTIVE', 'INACTIVE']);
// SAML Settings Schema
export const SamlSettingsSchema = z.object({
signOn: z.object({
defaultRelayState: z.string().optional(),
ssoAcsUrl: z.string().url(),
idpIssuer: z.string().optional(),
audience: z.string(),
recipient: z.string().url(),
destination: z.string().url(),
subjectNameIdTemplate: z.string(),
subjectNameIdFormat: z.string(),
responseSigned: z.boolean().default(true),
assertionSigned: z.boolean().default(true),
signatureAlgorithm: z.enum(['RSA_SHA256', 'RSA_SHA1']).default('RSA_SHA256'),
digestAlgorithm: z.enum(['SHA256', 'SHA1']).default('SHA256'),
honorForceAuthn: z.boolean().optional(),
authnContextClassRef: z.string().optional(),
attributeStatements: z
.array(z.object({
type: z.enum(['EXPRESSION', 'GROUP']),
name: z.string(),
namespace: z.string().optional(),
values: z.array(z.string()),
}))
.optional(),
}),
});
// OIDC Settings Schema
export const OidcSettingsSchema = z.object({
oauthClient: z.object({
client_uri: z.string().url().optional(),
logo_uri: z.string().url().optional(),
redirect_uris: z.array(z.string().url()),
post_logout_redirect_uris: z.array(z.string().url()).optional(),
response_types: z.array(z.enum(['code', 'token', 'id_token'])),
grant_types: z.array(z.enum(['authorization_code', 'implicit', 'password', 'refresh_token', 'client_credentials'])),
application_type: z.enum(['web', 'native', 'browser', 'service']),
consent_method: z.enum(['REQUIRED', 'TRUSTED']).optional(),
issuer_mode: z.enum(['CUSTOM_URL', 'ORG_URL', 'DYNAMIC']).optional(),
initiate_login_uri: z.string().url().optional(),
wildcard_redirect: z.enum(['DISABLED', 'SUBDOMAIN']).optional(),
}),
});
// Basic Auth Settings Schema
export const BasicAuthSettingsSchema = z.object({
app: z.object({
url: z.string().url(),
authURL: z.string().url().optional(),
}),
});
// Bookmark Settings Schema
export const BookmarkSettingsSchema = z.object({
app: z.object({
requestIntegration: z.boolean().optional(),
url: z.string().url(),
}),
});
// Credentials Schema
export const AppCredentialsSchema = z.object({
scheme: z
.enum([
'SHARED_USERNAME_AND_PASSWORD',
'EXTERNAL_PASSWORD_SYNC',
'EDIT_USERNAME_AND_PASSWORD',
'EDIT_PASSWORD_ONLY',
'ADMIN_SETS_CREDENTIALS',
])
.optional(),
userNameTemplate: z
.object({
template: z.string(),
type: z.enum(['NONE', 'CUSTOM', 'BUILT_IN']),
})
.optional(),
signing: z
.object({
kid: z.string().optional(),
})
.optional(),
oauthClient: z
.object({
autoKeyRotation: z.boolean().optional(),
client_id: z.string().optional(),
client_secret: z.string().optional(),
token_endpoint_auth_method: z
.enum([
'client_secret_basic',
'client_secret_post',
'client_secret_jwt',
'private_key_jwt',
'none',
])
.optional(),
})
.optional(),
});
// App User Schema
export const AppUserSchema = z.object({
id: z.string().optional(),
externalId: z.string().optional(),
created: z.string().optional(),
lastUpdated: z.string().optional(),
scope: z.enum(['USER', 'GROUP']).optional(),
status: z.enum(['ACTIVE', 'INACTIVE', 'STAGED']).optional(),
statusChanged: z.string().optional(),
passwordChanged: z.string().optional(),
syncState: z.enum(['DISABLED', 'OUT_OF_SYNC', 'SYNCING', 'SYNCHRONIZED', 'ERROR']).optional(),
profile: z.record(z.unknown()).optional(),
credentials: z
.object({
userName: z.string().optional(),
password: z
.object({
value: z.string(),
})
.optional(),
})
.optional(),
});
// List Apps Schema
export const ListAppsSchema = z.object({
limit: z.number().min(1).max(200).default(20),
after: z.string().optional(),
filter: z.string().optional(),
q: z.string().optional(),
expand: z.string().optional(),
});
// Get App Schema
export const GetAppSchema = z.object({
appId: z.string(),
expand: z.string().optional(),
});
// Create App Schema
export const CreateAppSchema = z.object({
name: z.string(),
label: z.string(),
signOnMode: AppSignOnModeSchema,
status: AppStatusSchema.optional(),
accessibility: z
.object({
selfService: z.boolean().optional(),
errorRedirectUrl: z.string().url().optional(),
loginRedirectUrl: z.string().url().optional(),
})
.optional(),
visibility: z
.object({
autoSubmitToolbar: z.boolean().optional(),
hide: z
.object({
iOS: z.boolean().optional(),
web: z.boolean().optional(),
})
.optional(),
appLinks: z
.object({
mainLink: z.string().optional(),
})
.optional(),
})
.optional(),
features: z.array(z.string()).optional(),
settings: z
.union([
SamlSettingsSchema,
OidcSettingsSchema,
BasicAuthSettingsSchema,
BookmarkSettingsSchema,
z.object({}), // For apps without specific settings
])
.optional(),
credentials: AppCredentialsSchema.optional(),
licensing: z
.object({
seatCount: z.number().optional(),
})
.optional(),
});
// Update App Schema
export const UpdateAppSchema = z.object({
appId: z.string(),
name: z.string().optional(),
label: z.string().optional(),
status: AppStatusSchema.optional(),
accessibility: z
.object({
selfService: z.boolean().optional(),
errorRedirectUrl: z.string().url().optional(),
loginRedirectUrl: z.string().url().optional(),
})
.optional(),
visibility: z
.object({
autoSubmitToolbar: z.boolean().optional(),
hide: z
.object({
iOS: z.boolean().optional(),
web: z.boolean().optional(),
})
.optional(),
appLinks: z
.object({
mainLink: z.string().optional(),
})
.optional(),
})
.optional(),
features: z.array(z.string()).optional(),
settings: z
.union([
SamlSettingsSchema.partial(),
OidcSettingsSchema.partial(),
BasicAuthSettingsSchema.partial(),
BookmarkSettingsSchema.partial(),
z.object({}),
])
.optional(),
credentials: AppCredentialsSchema.optional(),
licensing: z
.object({
seatCount: z.number().optional(),
})
.optional(),
});
// Delete App Schema
export const DeleteAppSchema = z.object({
appId: z.string(),
});
// App Lifecycle Schema
export const AppLifecycleSchema = z.object({
appId: z.string(),
});
// Assign User to App Schema
export const AssignUserToAppSchema = z.object({
appId: z.string(),
userId: z.string(),
profile: z.record(z.unknown()).optional(),
credentials: z
.object({
userName: z.string().optional(),
password: z
.object({
value: z.string(),
})
.optional(),
})
.optional(),
});
// Assign Group to App Schema
export const AssignGroupToAppSchema = z.object({
appId: z.string(),
groupId: z.string(),
priority: z.number().optional(),
profile: z.record(z.unknown()).optional(),
});
// Remove User from App Schema
export const RemoveUserFromAppSchema = z.object({
appId: z.string(),
userId: z.string(),
sendEmail: z.boolean().default(false),
});
// Remove Group from App Schema
export const RemoveGroupFromAppSchema = z.object({
appId: z.string(),
groupId: z.string(),
});
// List App Users Schema
export const ListAppUsersSchema = z.object({
appId: z.string(),
limit: z.number().min(1).max(500).default(50),
after: z.string().optional(),
q: z.string().optional(),
filter: z.string().optional(),
expand: z.string().optional(),
});
// List App Groups Schema
export const ListAppGroupsSchema = z.object({
appId: z.string(),
limit: z.number().min(1).max(200).default(20),
after: z.string().optional(),
q: z.string().optional(),
expand: z.string().optional(),
});
// Update App User Schema
export const UpdateAppUserSchema = z.object({
appId: z.string(),
userId: z.string(),
profile: z.record(z.unknown()).optional(),
credentials: z
.object({
userName: z.string().optional(),
password: z
.object({
value: z.string(),
})
.optional(),
})
.optional(),
});
// Response Schemas
export const AppResponseSchema = z.object({
id: z.string(),
name: z.string(),
label: z.string(),
status: AppStatusSchema,
lastUpdated: z.string(),
created: z.string(),
accessibility: z
.object({
selfService: z.boolean().optional(),
errorRedirectUrl: z.string().nullable().optional(),
loginRedirectUrl: z.string().nullable().optional(),
})
.optional(),
visibility: z
.object({
autoSubmitToolbar: z.boolean().optional(),
hide: z
.object({
iOS: z.boolean().optional(),
web: z.boolean().optional(),
})
.optional(),
appLinks: z
.object({
mainLink: z.string().optional(),
})
.optional(),
})
.optional(),
features: z.array(z.string()).optional(),
signOnMode: AppSignOnModeSchema,
credentials: AppCredentialsSchema.optional(),
settings: z.record(z.unknown()).optional(),
_links: z.record(z.unknown()).optional(),
_embedded: z.record(z.unknown()).optional(),
});
export const AppUserResponseSchema = z.object({
id: z.string(),
externalId: z.string().optional(),
created: z.string(),
lastUpdated: z.string(),
scope: z.string(),
status: z.string(),
statusChanged: z.string().optional(),
passwordChanged: z.string().optional(),
syncState: z.string().optional(),
profile: z.record(z.unknown()).optional(),
credentials: z
.object({
userName: z.string().optional(),
})
.optional(),
_links: z.record(z.unknown()).optional(),
});
export const AppGroupResponseSchema = z.object({
id: z.string(),
lastUpdated: z.string(),
priority: z.number().optional(),
profile: z.record(z.unknown()).optional(),
_links: z.record(z.unknown()).optional(),
_embedded: z.record(z.unknown()).optional(),
});
//# sourceMappingURL=schemas.js.map