Skip to main content
Glama

Office Word MCP Server

by franlealp1
EXPLICACION_REDUCCION_LLAMADAS.md10.5 kB
# Explicación Técnica: Cómo las Herramientas Batch Reducen las Llamadas MCP ## 🔍 **Análisis del Problema Original** ### Flujo Tradicional (INEFICIENTE) Cuando un usuario pide: *"Crea un informe técnico sobre Presa Rosarito"* El agente AI con herramientas **individuales** haría: ``` LLAMADA 1: list_available_documents() LLAMADA 2: create_document_with_download_link("presa_rosarito_report.docx") LLAMADA 3: add_heading("Resumen Ejecutivo", level=1) LLAMADA 4: add_paragraph("La Presa Rosarito es una infraestructura crítica...") LLAMADA 5: add_heading("1. Introducción", level=1) LLAMADA 6: add_paragraph("Contenido de introducción...") LLAMADA 7: add_heading("1.1 Antecedentes", level=2) LLAMADA 8: add_paragraph("Antecedentes del proyecto...") LLAMADA 9: add_heading("2. Metodología", level=1) LLAMADA 10: add_paragraph("Se utilizaron métodos de análisis...") LLAMADA 11: add_heading("2.1 Análisis Estructural", level=2) LLAMADA 12: add_paragraph("El análisis estructural incluye...") LLAMADA 13: add_heading("2.2 Evaluación Hidráulica", level=2) LLAMADA 14: add_paragraph("La evaluación hidráulica considera...") LLAMADA 15: add_heading("3. Resultados", level=1) LLAMADA 16: add_paragraph("Los resultados obtenidos muestran...") LLAMADA 17: add_table(data=tabla_resultados) LLAMADA 18: add_paragraph("Análisis de los datos de la tabla...") LLAMADA 19: add_heading("4. Conclusiones", level=1) LLAMADA 20: add_paragraph("Las conclusiones del estudio...") LLAMADA 21: add_heading("4.1 Recomendaciones", level=2) LLAMADA 22: add_paragraph("Las recomendaciones incluyen...") LLAMADA 23: add_heading("5. Anexos", level=1) LLAMADA 24: add_paragraph("Documentación complementaria...") LLAMADA 25: add_page_break() TOTAL: 25 LLAMADAS MCP ``` ### ❌ **Problemas de este Enfoque:** 1. **25 llamadas MCP secuenciales** - cada una espera respuesta 2. **n8n tiene límite de iteraciones** (típicamente 1000, pero depende) 3. **Latencia acumulativa:** 25 × 200ms = **5 segundos mínimo** 4. **Riesgo de timeout** en flujos complejos 5. **Consumo excesivo de tokens** en conversaciones 6. **Experiencia de usuario pobre** (espera larga) --- ## ✅ **Solución: Herramientas Batch Ultra-Eficientes** ### Flujo Nuevo (ULTRA-EFICIENTE) El mismo usuario pide: *"Crea un informe técnico sobre Presa Rosarito"* Con la herramienta batch **`create_technical_report_template`**: ``` LLAMADA ÚNICA: create_technical_report_template( filename="presa_rosarito_report.docx", report_data={ "title": "INFORME TÉCNICO - PRESA ROSARITO", "subtitle": "Evaluación Estructural Integral 2024", "metadata": {"author": "Departamento de Ingeniería"}, "introduction": { "content": "La Presa Rosarito es una infraestructura crítica...", "key_data": {"presa": "Rosarito", "año": "1987"} }, "methodology": { "content": "Se utilizaron métodos de análisis estructural...", "techniques": ["Análisis estructural", "Evaluación hidráulica"] }, "results": { "content": "Los resultados obtenidos muestran...", "summary": "Condiciones operativas normales" }, "conclusions": { "content": "Las conclusiones del estudio...", "recommendations": ["Monitoreo continuo", "Mantenimiento preventivo"] } }, cleanup_hours=24 ) TOTAL: 1 LLAMADA MCP ``` --- ## 🔧 **Cómo Funciona Internamente la Herramienta Batch** ### Dentro de `create_technical_report_template()`: ```python async def create_technical_report_template(filename, report_data, cleanup_hours=24): # 1. INICIALIZACIÓN INTERNA (no cuenta como llamada MCP) doc = Document() # Crear documento Word init_temp_storage() # Inicializar almacenamiento temporal # 2. PROCESAMIENTO BATCH INTERNO # Todo esto ocurre en UNA SOLA FUNCIÓN: # Equivale a: create_document_with_download_link() doc.core_properties.title = report_data["title"] doc.core_properties.author = report_data["metadata"]["author"] # Equivale a: add_heading("Resumen Ejecutivo", level=1) + add_paragraph() heading = doc.add_heading("Resumen Ejecutivo", level=1) doc.add_paragraph(report_data["introduction"]["content"]) # Equivale a: add_heading("Introducción", level=1) + add_paragraph() doc.add_heading("1. Introducción", level=1) doc.add_paragraph(report_data["introduction"]["content"]) # Equivale a: add_heading("Metodología", level=1) + add_paragraph() doc.add_heading("2. Metodología", level=1) doc.add_paragraph(report_data["methodology"]["content"]) # Equivale a: add_heading("Resultados", level=1) + add_table() + add_paragraph() doc.add_heading("3. Resultados", level=1) if "data" in report_data["results"]: table = doc.add_table(rows=len(data), cols=len(data[0])) # Llenar tabla internamente doc.add_paragraph(report_data["results"]["content"]) # Equivale a: add_heading("Conclusiones", level=1) + add_paragraph() doc.add_heading("4. Conclusiones", level=1) doc.add_paragraph(report_data["conclusions"]["content"]) # 3. GUARDADO Y REGISTRO (interno) doc.save(temp_file_path) # Guardar archivo file_id = register_temp_file(...) # Registrar para descarga download_url = generate_download_url(file_id) # Crear URL # 4. RESPUESTA ÚNICA return { "success": True, "download_url": download_url, "sections_processed": 6, # Se procesaron 6 secciones "template_used": "technical_report" } ``` --- ## 📊 **Comparación Detallada** | Aspecto | Herramientas Individuales | Herramienta Batch | Mejora | |---------|---------------------------|-------------------|---------| | **Llamadas MCP** | 25 llamadas | 1 llamada | **96% reducción** | | **Tiempo mínimo** | 5+ segundos | <1 segundo | **80% más rápido** | | **Riesgo timeout** | Alto | Cero | **Eliminado** | | **Tokens consumidos** | 25× overhead | 1× overhead | **96% menos overhead** | | **Complejidad del código** | 25 bloques tool-use | 1 bloque tool-use | **96% menos código** | | **Iteraciones n8n** | 25 iteraciones | 1 iteración | **96% menos iteraciones** | --- ## 🎯 **Casos de Uso Específicos** ### Caso 1: Informe Técnico Presa Rosarito **Antes:** 25+ llamadas → **Después:** 1 llamada = **96% reducción** ### Caso 2: Guía Multi-Sección (5 capítulos) **Antes:** 15+ llamadas → **Después:** 1 llamada = **93% reducción** ``` # ANTES (15 llamadas): create_document_with_download_link() # 1 add_heading("Capítulo 1") # 2 add_paragraph("Contenido cap 1...") # 3 add_heading("Capítulo 2") # 4 add_paragraph("Contenido cap 2...") # 5 add_heading("Capítulo 3") # 6 add_paragraph("Contenido cap 3...") # 7 add_heading("Capítulo 4") # 8 add_paragraph("Contenido cap 4...") # 9 add_heading("Capítulo 5") # 10 add_paragraph("Contenido cap 5...") # 11 add_heading("Conclusiones") # 12 add_paragraph("Conclusiones finales...") # 13 add_heading("Bibliografía") # 14 add_paragraph("Referencias...") # 15 # DESPUÉS (1 llamada): create_complete_document_with_download_link_and_sections( sections=[...5 sections with all content...] ) ``` ### Caso 3: Agregar Contenido a Documento Existente **Antes:** 6+ llamadas → **Después:** 1 llamada = **83% reducción** --- ## 🧠 **Por Qué es Posible Esta Optimización** ### 1. **Batching de Operaciones** - Las herramientas batch **agrupan múltiples operaciones** en una sola función - Se ejecuta todo el procesamiento **internamente** sin llamadas MCP adicionales ### 2. **Estructuras de Datos Complejas** - En lugar de pasar datos simples (string, number), pasamos **objetos complejos** - Un solo parámetro `report_data` contiene **toda la información del documento** ### 3. **Lógica de Template Inteligente** - Las herramientas batch tienen **lógica predefinida** para documentos comunes - `create_technical_report_template` "sabe" cómo estructurar un informe técnico ### 4. **Procesamiento Interno Optimizado** - Todo el formateo, styling y estructuración ocurre **dentro de la función** - Solo una escritura de archivo al final --- ## 🚀 **Impacto en el Flujo n8n** ### Límites de Iteración de n8n n8n típicamente tiene límites como: - **1000 iteraciones máx** en flujos complejos - **Timeout** después de cierto tiempo - **Límites de memoria** para llamadas extensas ### Con Herramientas Batch: - ✅ **1 iteración** en lugar de 25+ - ✅ **Sin timeouts** por exceso de llamadas - ✅ **Respuesta inmediata** al usuario - ✅ **Menos consumo de recursos** n8n --- ## 💡 **Ejemplo Práctico de Optimización** ### Escenario Real: Usuario en Chat ``` Usuario: "Necesito un informe completo sobre la evaluación de la Presa Rosarito con todas las secciones técnicas" ``` ### ❌ **Sistema Anterior:** ``` n8n Agent → MCP Call 1 → create_document() n8n Agent → MCP Call 2 → add_heading() n8n Agent → MCP Call 3 → add_paragraph() n8n Agent → MCP Call 4 → add_heading() ... n8n Agent → MCP Call 25 → add_paragraph() Resultado: TIMEOUT después de 15-20 llamadas Usuario: "El sistema no responde" 😞 ``` ### ✅ **Sistema Nuevo:** ``` n8n Agent → MCP Call ÚNICA → create_technical_report_template() Resultado: Documento completo en 2 segundos Usuario: "¡Perfecto! Aquí está mi enlace de descarga" 😊 ``` --- ## 🎯 **Resumen Técnico** **La reducción de llamadas MCP se logra mediante:** 1. **Consolidación de Operaciones:** 25 operaciones → 1 operación 2. **Procesamiento Batch Interno:** Todo ocurre dentro de una función 3. **Estructuras de Datos Complejas:** Pasar toda la información de una vez 4. **Templates Inteligentes:** Lógica predefinida para documentos comunes 5. **Optimización de I/O:** Una sola escritura de archivo **Resultado:** 96% menos llamadas MCP = Sin timeouts + Respuesta instantánea ¡Es como enviar un email con 25 adjuntos en lugar de enviar 25 emails separados! 📧

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/franlealp1/mcp-word'

If you have feedback or need assistance with the MCP directory API, please join our Discord server