integrations.ts•6.53 kB
import { Tool } from "@modelcontextprotocol/sdk/types.js";
/* Tool definitions */
export const EDUBASE_API_TOOLS_INTEGRATIONS: Tool[] = [
	// GET /integrations - List owned and managed integrations
	{
		name: 'edubase_get_integrations',
		description: "List owned and managed integrations.",
		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 /integration - Get/check integration
	{
		name: 'edubase_get_integration',
		description: "Get/check integration.",
		inputSchema: {
			type: 'object',
			properties: {
				integration: {
					type: 'string',
					description: 'integration identification string',
				},
			},
			required: ['integration'],
		},
	},
	// POST /integration - Create a new API or LMS integration
	{
		name: 'edubase_post_integration',
		description: "Create a new API or LMS integration.",
		inputSchema: {
			type: 'object',
			properties: {
				title: {
					type: 'string',
					description: 'title of the integration',
				},
				description: {
					type: 'string',
					description: 'optional short description',
				},
				type: {
					type: 'string',
					description: 'type of the integration (api / moodle / canvas / d2l / schoology / lms)',
				},
				lti: {
					type: 'string',
					description: 'LTI version (1.0/1.1 / 1.3), only necessary for LMS integrations!',
				},
				platform: {
					type: 'string',
					description: 'LMS platform URL, only necessary for LMS integrations!',
				},
			},
			required: ['title'],
		},
	},
	// PATCH /integration - Update integration
	{
		name: 'edubase_patch_integration',
		description: "Update integration.",
		inputSchema: {
			type: 'object',
			properties: {
				integration: {
					type: 'string',
					description: 'integration identification string',
				},
				active: {
					type: 'boolean',
					description: 'enable or disable the integration',
				},
			},
			required: ['integration'],
		},
	},
	// DELETE /integration - Remove integration
	{
		name: 'edubase_delete_integration',
		description: "Remove integration.",
		inputSchema: {
			type: 'object',
			properties: {
				integration: {
					type: 'string',
					description: 'integration identification string',
				},
			},
			required: ['integration'],
		},
	},
	// GET /integration:keys - Get integration keys/secrets
	{
		name: 'edubase_get_integration_keys',
		description: "Get integration keys/secrets.",
		inputSchema: {
			type: 'object',
			properties: {
				integration: {
					type: 'string',
					description: 'integration identification string',
				},
			},
			required: ['integration'],
		},
	},
	// POST /integration:keys - Rotate integration keys/secrets
	{
		name: 'edubase_post_integration_keys',
		description: "Rotate integration keys/secrets.",
		inputSchema: {
			type: 'object',
			properties: {
				integration: {
					type: 'string',
					description: 'integration identification string',
				},
			},
			required: ['integration'],
		},
	},
];
/* Output schema definitions */
export const EDUBASE_API_TOOLS_INTEGRATIONS_OUTPUT_SCHEMA: object = {
	// GET /integrations - List owned and managed integrations
	edubase_get_integrations: {
		type: 'array',
		items: {
			type: 'object',
			properties: {
				integration: {
					type: 'string',
					description: 'integration identification string',
				},
				id: {
					type: 'string',
					description: 'external unique integration identifier (if set for the integration)',
				},
				name: {
					type: 'string',
					description: 'title of the integration',
				},
			},
		},
	},
	// GET /integrations - Get/check integration
	edubase_get_integration: {
		type: 'object',
		properties: {
			integration: {
				type: 'string',
				description: 'integration identification string',
			},
			id: {
				type: 'string',
				description: 'external unique integration identifier (if set for the integration)',
			},
			name: {
				type: 'string',
				description: 'title of the integration',
			},
			type: {
				type: 'string',
				description: 'type of the integration',
			},
			active: {
				type: 'boolean',
				description: 'integration is active',
			},
			lti: {
				type: 'string',
				description: 'LTI version, only present if the integration is an LMS',
			},
		},
	},
	// PATCH /integration - Update integration
	edubase_patch_integration: {},
	// DELETE /integration - Remove integration
	edubase_delete_integration: {},
	// GET /integration:keys - Get integration keys/secrets
	edubase_get_integration_keys: {
		type: 'object',
		properties: {
			app: {
				type: 'string',
				description: 'API application identification string, only present if the integration is an API integration',
			},
			consumer: {
				type: 'string',
				description: 'consumer key, only present if the integration is an LMS integration using LTI 1.0/1.1',
			},
			secret: {
				type: 'string',
				description: 'secret key, only present if the integration is an API integration or an LMS integration using LTI 1.0/1.1',
			},
			jwk: {
				type: 'string',
				description: 'URL for the JWK (JSON Web Key) set, only present if the integration is an LMS integration using LTI 1.3',
			},
			pem: {
				type: 'string',
				description: 'PEM formatted public key, only present if the integration is an LMS integration using LTI 1.3',
			},
		},
	},
	// POST /integration:keys - Rotate integration keys/secrets
	edubase_post_integration_keys: {
		type: 'object',
		properties: {
			app: {
				type: 'string',
				description: 'API application identification string, only present if the integration is an API integration',
			},
			consumer: {
				type: 'string',
				description: 'consumer key, only present if the integration is an LMS integration using LTI 1.0/1.1',
			},
			secret: {
				type: 'string',
				description: 'secret key, only present if the integration is an API integration or an LMS integration using LTI 1.0/1.1',
			},
			jwk: {
				type: 'string',
				description: 'URL for the JWK (JSON Web Key) set, only present if the integration is an LMS integration using LTI 1.3',
			},
			pem: {
				type: 'string',
				description: 'PEM formatted public key, only present if the integration is an LMS integration using LTI 1.3',
			},
		},
	},
};