UNPKG

coreto-mcp-glpi

Version:

MCP Server para integração CORETO AI com GLPI via tools de tickets

101 lines (87 loc) 3.05 kB
const { logger } = require('../utils/logger') /** * Get available ITIL categories from GLPI * @param {Object} args - Tool arguments (empty for this tool) * @param {Object} tenantContext - Tenant context with GLPI connector * @returns {Object} Tool execution result with categories */ async function getItilCategories(args, tenantContext) { const loggerInstance = logger.child({ tool: 'get_itil_categories' }) try { const { glpiConnector, tenant_id } = tenantContext loggerInstance.info('Fetching ITIL categories', { tenantId: tenant_id }) // Get categories via GLPI API const categories = await glpiConnector.request('GET', '/ITILCategory?range=0-100&expand_dropdowns=true') if (!Array.isArray(categories)) { return { success: false, error: 'Nenhuma categoria encontrada ou erro na consulta', code: 'NO_CATEGORIES_FOUND' } } // Process and format categories const processedCategories = categories .filter(cat => cat.is_active !== 0) // Only active categories .map(category => ({ id: category.id, name: category.name || 'Sem nome', completename: category.completename || category.name || 'Sem nome', comment: category.comment || '', level: category.level || 0, is_helpdeskvisible: category.is_helpdeskvisible || 0 })) .sort((a, b) => a.completename.localeCompare(b.completename)) loggerInstance.info('ITIL categories retrieved successfully', { tenantId: tenant_id, categoriesCount: processedCategories.length }) return { success: true, message: `Encontradas ${processedCategories.length} categorias ITIL ativas`, data: { categories: processedCategories, total_count: processedCategories.length, helpdesk_visible: processedCategories.filter(c => c.is_helpdeskvisible === 1).length } } } catch (error) { loggerInstance.error('Error fetching ITIL categories', { tenantId: tenantContext.tenant_id, error: error.message }) // Handle specific error cases if (error.message.includes('GLPI')) { return { success: false, error: `Erro de conexão com GLPI: ${error.message}`, code: 'GLPI_CONNECTION_ERROR' } } if (error.message.includes('Unauthorized') || error.message.includes('401')) { return { success: false, error: 'Erro de autenticação com GLPI - verifique as credenciais', code: 'GLPI_AUTH_ERROR' } } return { success: false, error: error.message, code: 'CATEGORIES_QUERY_ERROR' } } } // Tool configuration const getItilCategoriesTool = { name: 'get_itil_categories', description: 'Consultar categorias ITIL disponíveis no GLPI para classificação de chamados', inputSchema: { type: 'object', properties: {}, required: [] }, handler: getItilCategories } module.exports = getItilCategoriesTool