organizations.ts•17.8 kB
import { Tool } from "@modelcontextprotocol/sdk/types.js";
/* Tool definitions */
export const EDUBASE_API_TOOLS_ORGANIZATIONS: Tool[] = [
	// GET /organizations - List owned and managed organizations
	{
		name: 'edubase_get_organizations',
		description: "List owned and managed organizations.",
		inputSchema: {
			type: 'object',
			properties: {
				search: {
					type: 'string',
					description: 'search string to filter results',
				},
				limit: {
					type: 'number',
					description: 'limit number of results (default: 16)',
				},
				page: {
					type: 'number',
					description: 'page number (default: 1), not used in search mode!',
				},
			},
			required: [],
		},
	},
	// GET /organization - Get/check organization
	{
		name: 'edubase_get_organization',
		description: "Get/check organization.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
			},
			required: ['organization'],
		},
	},
	// POST /organization - Create an organization
	{
		name: 'edubase_post_organization',
		description: "Create an organization.",
		inputSchema: {
			type: 'object',
			properties: {
				name: {
					type: 'string',
					description: 'title of the organization',
				},
				description: {
					type: 'string',
					description: 'optional short description',
				},
				domain: {
					type: 'string',
					description: 'domain name (FQDN) for the organization without www prefix, needs special privileges to set!',
				},
				website: {
					type: 'string',
					description: 'homepage URL',
				},
				email: {
					type: 'string',
					description: 'contact email address',
				},
				phone: {
					type: 'string',
					description: 'contact phone number',
				},
			},
			required: ['name'],
		},
	},
	// PATCH /organization - Update organization
	{
		name: 'edubase_patch_organization',
		description: "Update organization.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
			},
			required: ['organization'],
		},
	},
	// DELETE /organization - Remove organization
	{
		name: 'edubase_delete_organization',
		description: "Remove organization.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
			},
			required: ['organization'],
		},
	},
	// GET /organization:members - List all members in an organization
	{
		name: 'edubase_get_organization_members',
		description: "List all members in an organization.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
			},
			required: ['organization'],
		},
	},
	// POST /organization:members - Assign user(s) to an organization
	{
		name: 'edubase_post_organization_members',
		description: "Assign user(s) to an organization. Updates memberships if already member of the organization.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
				users: {
					type: 'string',
					description: 'comma-separated list of user identification strings',
				},
				department: {
					type: 'string',
					description: 'optional name of department',
				},
				permission_organization: {
					type: 'string',
					description: 'optional permission level to organization (member / teacher / reporter / supervisor / admin) (default: member)',
				},
				permission_content: {
					type: 'string',
					description: 'optional permission level to contents in organization (none / view / report / control / modify / grant / admin) (default: none)',
				},
				notify: {
					type: 'boolean',
					description: 'notify users (default: false)',
				},
			},
			required: ['organization', 'users'],
		},
	},
	// DELETE /organization:members - Remove user(s) from an organization
	{
		name: 'edubase_delete_organization_members',
		description: "Remove user(s) from an organization.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
				users: {
					type: 'string',
					description: 'comma-separated list of user identification strings',
				},
			},
			required: ['organization', 'users'],
		},
	},
	// POST /organizations:members - Assign user(s) to organization(s)
	{
		name: 'edubase_post_organizations_members',
		description: "Assign user(s) to organization(s). Updates memberships if already member of an organization.",
		inputSchema: {
			type: 'object',
			properties: {
				organizations: {
					type: 'string',
					description: 'comma-separated list of organization identification strings',
				},
				users: {
					type: 'string',
					description: 'comma-separated list of user identification strings',
				},
				department: {
					type: 'string',
					description: 'optional name of department',
				},
				permission_organization: {
					type: 'string',
					description: 'optional permission level to organization (member / teacher / reporter / supervisor / admin) (default: member)',
				},
				permission_content: {
					type: 'string',
					description: 'optional permission level to contents in organization (none / view / report / control / modify / grant / admin) (default: none)',
				},
				notify: {
					type: 'boolean',
					description: 'notify users (default: false)',
				},
			},
			required: ['organizations', 'users'],
		},
	},
	// GET /user:organizations - List all organizations a user is member of
	{
		name: 'edubase_get_user_organizations',
		description: "List all organizations a user is member of.",
		inputSchema: {
			type: 'object',
			properties: {
				user: {
					type: 'string',
					description: 'user identification string',
				},
			},
			required: ['user'],
		},
	},
	// POST /user:organizations - Assign user to organization(s)
	{
		name: 'edubase_post_user_organizations',
		description: "Assign user to organization(s). Updates membership if already member of an organization.",
		inputSchema: {
			type: 'object',
			properties: {
				user: {
					type: 'string',
					description: 'user identification string',
				},
				organizations: {
					type: 'string',
					description: 'comma-separated list of organization identification strings',
				},
				department: {
					type: 'string',
					description: 'optional name of department',
				},
				permission_organization: {
					type: 'string',
					description: 'optional permission level to organization (member / teacher / reporter / supervisor / admin) (default: member)',
				},
				permission_content: {
					type: 'string',
					description: 'optional permission level to contents in organization (none / view / report / control / modify / grant / admin) (default: none)',
				},
				notify: {
					type: 'boolean',
					description: 'notify user (default: false)',
				},
			},
			required: ['user', 'organizations'],
		},
	},
	// DELETE /user:organizations - Remove user from organization(s)
	{
		name: 'edubase_delete_user_organizations',
		description: "Remove user from organization(s).",
		inputSchema: {
			type: 'object',
			properties: {
				user: {
					type: 'string',
					description: 'user identification string',
				},
				organizations: {
					type: 'string',
					description: 'comma-separated list of organization identification strings',
				},
			},
			required: ['user', 'organizations'],
		},
	},
	// GET /organization:webhook - Get/check webhook configured in organization
	{
		name: 'edubase_get_organization_webhook',
		description: "Get/check webhook configured in organization.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
				webhook: {
					type: 'string',
					description: 'webhook identification string',
				},
			},
			required: ['organization', 'webhook'],
		},
	},
	// POST /organization:webhook - Create a webhook for an organization
	{
		name: 'edubase_post_organization_webhook',
		description: "Create a webhook for an organization.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
				name: {
					type: 'string',
					description: 'title of the webhook',
				},
				trigger_event: {
					type: 'string',
					description: "Type of event to trigger webhook:\n" +
						"- exam-play-result: triggers when a user (must be member of the organization) completes an exam in the organization\n" +
						"- quiz-play-result: triggers when a user (must be member of the organization) completes a quiz in practice mode in the organization\n" +
						"- api: triggers when a manual API call is made (useful for testing and debugging)",
				},
				endpoint: {
					type: 'string',
					description: 'URL to send webhook notifications to',
				},
				method: {
					type: 'string',
					description: "HTTP method to use for webhook notifications (default: POST)\n" +
						"- POST\n" +
						"- GET",
				},
				authentication: {
					type: 'string',
					description: "Type of authentication (default: none):\n" +
						"- none: no authentication\n" +
						"- key: use a secret key (or password) for authentication",
				},
				authentication_send: {
					type: 'string',
					description: "How to send authentication data (default: data):\n" +
						"- header: as header field\n" +
						"- bearer: as Bearer token in Authorization header\n" +
						"- data: as data field (in body or query string)",
				},
				authentication_send_header: {
					type: 'string',
					description: 'name of header field to send authentication data in, required if authentication is set to key and authentication_send is set to header',
				},
				authentication_send_data: {
					type: 'string',
					description: 'name of data field to send authentication data in, required if authentication is set to key and authentication_send is set to data',
				},
				authentication_key: {
					type: 'string',
					description: 'secret key (or password) to use for authentication, required if authentication is set to key',
				},
				authentication_key_custom: {
					type: 'string',
					description: 'custom field name to use as the authentication key, required if authentication is set to key, mutually exclusive with authentication_key',
				},
				extra_data: {
					type: 'string',
					description: 'additional data (as JSON encoded string) to send with the webhook notification',
				},
				retry: {
					type: 'string',
					description: "How to retry webhook notifications on failure (default: error):\n" +
						"- none: no retry\n" +
						"- error: delayed retry on any error",
				},
			},
			required: ['organization', 'name', 'trigger_event', 'endpoint'],
		},
	},
	// PATCH /organization:webhook - Update organizational webhook
	{
		name: 'edubase_patch_organization_webhook',
		description: "Update organizational webhook.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
				webhook: {
					type: 'string',
					description: 'webhook identification string',
				},
				active: {
					type: 'boolean',
					description: 'enable or disable webhook',
				},
			},
			required: ['organization', 'webhook'],
		},
	},
	// DELETE /organization:webhook - Remove webhook from organization
	{
		name: 'edubase_delete_organization_webhook',
		description: "Remove organizational webhook.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
				webhook: {
					type: 'string',
					description: 'webhook identification string',
				},
			},
			required: ['organization', 'webhook'],
		},
	},
	// POST /organization:webhook:trigger - Trigger an organizational webhook call with optional custom payload
	{
		name: 'edubase_post_organization_webhook_trigger',
		description: "Trigger an organizational webhook call with optional custom payload. Only triggers webhooks with **trigger_event** set to `api`!.",
		inputSchema: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
				webhook: {
					type: 'string',
					description: 'webhook identification string',
				},
				data: {
					type: 'string',
					description: 'custom payload data to be sent with the webhook call, must be a valid JSON string',
				},
			},
			required: ['organization', 'webhook'],
		},
	},
];
/* Output schema definitions */
export const EDUBASE_API_TOOLS_ORGANIZATIONS_OUTPUT_SCHEMA: object = {
	// GET /organizations - List owned and managed organizations
	edubase_get_organizations: {
		type: 'array',
		items: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
				id: {
					type: 'string',
					description: 'external unique organization identifier (if set for the organization)',
				},
				name: {
					type: 'string',
					description: 'title of the organization',
				},
			},
		},
	},
	// GET /organization - Get/check organization
	edubase_get_organization: {
		type: 'object',
		properties: {
			organization: {
				type: 'string',
				description: 'organization identification string',
			},
			id: {
				type: 'string',
				description: 'external unique organization identifier (if set for the organization)',
			},
			name: {
				type: 'string',
				description: 'title of the organization',
			},
		},
	},
	// POST /organization - Create an organization
	edubase_post_organization: {
		type: 'object',
		properties: {
			organization: {
				type: 'string',
				description: 'organization identification string',
			},
		},
	},
	// PATCH /organization - Update organization
	edubase_patch_organization: {},
	// DELETE /organization - Remove organization
	edubase_delete_organization: {},
	// GET /organization:members - List all members in an organization
	edubase_get_organization_members: {
		type: 'array',
		items: {
			type: 'object',
			properties: {
				user: {
					type: 'string',
					description: 'user identification string',
				},
				name: {
					type: 'string',
					description: 'name of the member',
				},
				department: {
					type: 'string',
					description: 'name of the department (if member)',
				},
				permission: {
					type: 'array',
					items: {
						organization: {
							type: 'string',
							description: 'permission level to organization',
						},
						content: {
							type: 'string',
							description: 'permission level to contents in organization',
						},
					},
				},
			},
		},
	},
	// POST /organization:members - Assign user(s) to an organization
	edubase_post_organization_members: {},
	// DELETE /organization:members - Remove user(s) from an organization
	edubase_delete_organization_members: {},
	// POST /organizations:members - Assign user(s) to organization(s)
	edubase_post_organizations_members: {},
	// GET /user:organizations - List all organizations a user is member of
	edubase_get_user_organizations: {
		type: 'array',
		items: {
			type: 'object',
			properties: {
				organization: {
					type: 'string',
					description: 'organization identification string',
				},
				id: {
					type: 'string',
					description: 'external unique organization identifier (if set for the organization)',
				},
				name: {
					type: 'string',
					description: 'title of the organization',
				},
				link: {
					type: 'string',
					description: 'link to the organization manager page',
				},
				department: {
					type: 'string',
					description: 'name of the department (if member)',
				},
				permission: {
					type: 'array',
					items: {
						type: 'object',
						properties: {
							organization: {
								type: 'string',
								description: 'permission level to organization',
							},
							content: {
								type: 'string',
								description: 'permission level to contents in organization',
							},
						},
					},
				},
			},
		},
	},
	// POST /user:organizations - Assign user to organization(s)
	edubase_post_user_organizations: {},
	// DELETE /user:organizations - Remove user from organization(s)
	edubase_delete_user_organizations: {},
	// GET /organization:webhook - Get/check webhook configured in organization
	edubase_get_organization_webhook: {
		type: 'object',
		properties: {
			organization: {
				type: 'string',
				description: 'organization identification string',
			},
			webhook: {
				type: 'string',
				description: 'webhook identification string',
			},
			name: {
				type: 'string',
				description: 'title of the webhook',
			},
			active: {
				type: 'boolean',
				description: 'webhook is active',
			},
		},
	},
	// POST /organization:webhook - Create a webhook for an organization
	edubase_post_organization_webhook: {
		type: 'object',
		properties: {
			organization: {
				type: 'string',
				description: 'organization identification string',
			},
			webhook: {
				type: 'string',
				description: 'webhook identification string',
			},
		},
	},
	// PATCH /organization:webhook - Update organizational webhook
	edubase_patch_organization_webhook: {},
	// DELETE /organization:webhook - Remove webhook from organization
	edubase_delete_organization_webhook: {},
	// POST /organization:webhook:trigger - Trigger an organizational webhook call with optional custom payload
	edubase_post_organization_webhook_trigger: {},
};