invoice-processor-mcp
Version:
MCP server para procesar facturas en formato Excel
101 lines (92 loc) • 3.26 kB
JavaScript
// index.js - Punto de entrada para nuestro MCP server de procesamiento de facturas
import { MCPServer } from './mcp/server.js';
import { ModelRequest, FunctionDefinition } from './mcp/protocol.js';
import { processInvoice } from './invoiceProcessor.js';
// Definición de las funciones que expondremos a través del MCP
const functionDefinitions = [
new FunctionDefinition({
name: 'process_invoice',
description: 'Procesa un archivo Excel de factura y extrae la información relevante',
parameters: {
type: 'object',
properties: {
filePath: {
type: 'string',
description: 'Ruta al archivo Excel de la factura'
}
},
required: ['filePath']
},
implementation: async (params) => {
try {
const result = await processInvoice(params.filePath);
return { success: true, data: result };
} catch (error) {
return { success: false, error: error.message };
}
}
}),
new FunctionDefinition({
name: 'summarize_invoices',
description: 'Genera un resumen de múltiples facturas en Excel',
parameters: {
type: 'object',
properties: {
filePaths: {
type: 'array',
items: { type: 'string' },
description: 'Lista de rutas a los archivos Excel de facturas'
},
outputPath: {
type: 'string',
description: 'Ruta donde guardar el archivo de resumen'
}
},
required: ['filePaths', 'outputPath']
},
implementation: async (params) => {
try {
// Procesar cada factura y generar un resumen
const results = await Promise.all(params.filePaths.map(filePath => processInvoice(filePath)));
// En una implementación completa, aquí agregaríamos la lógica para generar
// el Excel de resumen en outputPath
return {
success: true,
message: `Resumen generado en ${params.outputPath}`,
summaryData: results
};
} catch (error) {
return { success: false, error: error.message };
}
}
})
];
// Función para manejar mensajes que llegan al MCP
async function handleRequest(request) {
// Esta es la función que procesará los mensajes recibidos por el MCP
// En una implementación real, aquí manejaríamos la lógica específica
// para diferentes tipos de consultas sobre facturas
return {
model_response: {
content: [
{
text: "He recibido tu consulta sobre facturas. Puedes usar las funciones 'process_invoice' o 'summarize_invoices' para procesar tus archivos Excel."
}
]
}
};
}
// Configuración e inicio del servidor MCP
const server = new MCPServer({
functions: functionDefinitions,
handleRequest
});
// Configuración para Cloud Functions - exportamos la función que será el punto de entrada
export const invoiceProcessorMCP = server.createExpressMiddleware();
// Si ejecutamos directamente (no como Cloud Function)
if (process.env.NODE_ENV !== 'production') {
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
console.log(`Servidor MCP de procesamiento de facturas ejecutándose en el puerto ${PORT}`);
});
}