coreto-mcp-glpi
Version:
MCP Server para integração CORETO AI com GLPI via tools de tickets
101 lines (87 loc) • 3.05 kB
JavaScript
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