Skip to main content
Glama

Herramientas MCP para LibreOffice

npm version

Un servidor de Model Context Protocol (MCP) que brinda a los agentes de IA (Claude, Copilot, Gemini, Cursor, etc.) la capacidad de leer, escribir y editar documentos de Office a través de LibreOffice, con un diseño eficiente en el uso de tokens que minimiza el consumo de contexto del LLM.

Inspirado en la arquitectura de chrome-devtools-mcp.

✨ Características

  • 22 herramientas MCP que cubren lectura, escritura, hojas de cálculo y presentaciones

  • Diseño eficiente en tokens: navegación basada en esquemas, acceso por rangos, paginación

  • Amplia compatibilidad de formatos: DOCX, DOC, XLSX, XLS, PPTX, PPT, ODT, ODS, ODP, RTF, CSV, TXT, PDF

  • Puente para formatos heredados: conversión automática de .doc, .xls, .ppt mediante LibreOffice antes del análisis

  • No se requiere LibreOffice para lecturas básicas: los analizadores nativos manejan DOCX, XLSX, PPTX directamente

  • LibreOffice requerido para: formatos heredados, exportación a PDF, conversión de formatos

📋 Formatos compatibles

Formato

Extensiones

Lectura

Escritura

Método

Word 2007+

.docx, .dotx

Nativo (lectura con mammoth / escritura OOXML con JSZip)

Word 97-2003

.doc, .dot

Puente de LibreOffice

Excel 2007+

.xlsx, .xlsm

Nativo (ExcelJS)

Excel 97-2003

.xls

Puente de LibreOffice

PowerPoint 2007+

.pptx

Nativo (OOXML con JSZip)

PowerPoint 97-2003

.ppt

Puente de LibreOffice

OpenDocument Text

.odt

Puente de LibreOffice

OpenDocument Spreadsheet

.ods

Puente de LibreOffice

OpenDocument Presentation

.odp

Puente de LibreOffice

Rich Text Format

.rtf

Puente de LibreOffice

CSV

.csv

Nativo

PDF

.pdf

✅ (texto)

CLI de LibreOffice

Texto plano

.txt

Nativo

🚀 Inicio rápido

Requisitos previos

  • Node.js 20+

  • LibreOffice (opcional para lecturas básicas de DOCX/XLSX/PPTX; requerido para .doc/.xls/.ppt y conversión de formatos)

    • Windows: Descargar LibreOffice

    • macOS: brew install --cask libreoffice

    • Linux: sudo apt install libreoffice o sudo dnf install libreoffice

Instalación

Usando npx (recomendado — no requiere instalación):

{
  "mcpServers": {
    "libreoffice": {
      "command": "npx",
      "args": ["-y", "@passerbyflutter/libreoffice-mcp-tools"]
    }
  }
}

Instalación global:

npm install -g @passerbyflutter/libreoffice-mcp-tools

Desde el código fuente:

git clone https://github.com/passerbyflutter/libreoffice-mcp-tools
cd libreoffice-mcp-tools
npm install
npm run build

Configura tu cliente MCP

Agrégalo a la configuración de tu cliente MCP (por ejemplo, claude_desktop_config.json de Claude Desktop):

{
  "mcpServers": {
    "libreoffice": {
      "command": "npx",
      "args": ["-y", "@passerbyflutter/libreoffice-mcp-tools"],
      "env": {
        "SOFFICE_PATH": "/path/to/soffice"
      }
    }
  }
}

O usa .mcp.json en la raíz de tu proyecto:

{
  "mcpServers": {
    "libreoffice": {
      "command": "npx",
      "args": ["-y", "@passerbyflutter/libreoffice-mcp-tools"]
    }
  }
}

Opciones de CLI

node build/bin/libreoffice-mcp.js [options]

  --libreoffice-path <path>   Path to soffice executable
                              (default: auto-detected or SOFFICE_PATH env)

🛠 Referencia de herramientas

Gestión de documentos

Herramienta

Descripción

document_open

Abre un archivo → devuelve un identificador docId. Realiza el puente automático de formatos heredados.

document_close

Libera el identificador del documento y los archivos temporales

document_list

Lista todos los documentos abiertos

document_create

Crea un nuevo documento vacío (writer/calc/impress)

document_save

Guarda en la ruta actual o en una nueva

document_export

Exporta a través de LibreOffice (PDF, HTML, CSV, etc.)

document_convert

Convierte el formato de archivo (DOC→DOCX, XLSX→CSV, etc.)

Lectura (eficiente en tokens)

Herramienta

Descripción

document_get_metadata

Título, autor, recuento de palabras/páginas, fechas

document_get_outline

Encabezados (Writer) / nombres de hojas (Calc) / títulos de diapositivas (Impress)

document_read_text

Texto del documento paginado como Markdown

document_read_range

Rango específico de párrafos o diapositivas

document_search

Busca texto con contexto circundante

Escritura (Writer)

Herramienta

Descripción

document_insert_text

Inserta al principio/final/después de un encabezado

document_replace_text

Busca y reemplaza (primera o todas las ocurrencias)

document_insert_paragraph

Inserta un párrafo en un índice específico

document_apply_style

Aplica estilo de encabezado/párrafo

Hoja de cálculo (Calc)

Herramienta

Descripción

spreadsheet_list_sheets

Nombres de hojas con recuento de filas/columnas

spreadsheet_get_range

Rango de celdas como JSON + tabla markdown

spreadsheet_set_cell

Establece el valor o la fórmula de una celda

spreadsheet_set_range

Establece un rango 2D de valores

spreadsheet_add_sheet

Agrega una nueva hoja

spreadsheet_get_formulas

Obtiene expresiones de fórmulas en un rango

Presentación (Impress)

Herramienta

Descripción

presentation_list_slides

Títulos de diapositivas con índice

presentation_get_slide

Contenido completo de la diapositiva (título, cuerpo, notas)

presentation_get_notes

Notas del orador

presentation_add_slide

Agrega una nueva diapositiva (requiere LibreOffice)

presentation_update_slide

Actualiza el contenido de la diapositiva

💡 Flujo de trabajo para ahorrar tokens

Para una máxima eficiencia en el uso de tokens, sigue este patrón:

1. document_open(filePath) → get docId
2. document_get_metadata(docId) → understand size/type
3. document_get_outline(docId) → see structure
4. document_read_range(docId, startIndex=N, endIndex=M) → read specific section

En lugar de volcar todo el documento, navegas exactamente a lo que necesitas.

Flujo de trabajo de hoja de cálculo:

1. document_open(path) → docId
2. spreadsheet_list_sheets(docId) → see all sheets
3. spreadsheet_get_range(docId, sheetName="Sales", range="A1:D20") → targeted data

🏗 Arquitectura

src/
├── index.ts                # createMcpServer() — MCP server factory
├── LibreOfficeAdapter.ts   # soffice subprocess manager
├── DocumentContext.ts      # Open document registry
├── DocumentSession.ts      # Per-document state + format bridge
├── McpResponse.ts          # Response builder (text/JSON/markdown)
├── Mutex.ts                # Serializes LibreOffice subprocess calls
├── parsers/
│   ├── DocxParser.ts           # DOCX read → {paragraphs, outline, metadata} (mammoth)
│   ├── DocxOoxmlEditor.ts      # DOCX write → direct JSZip OOXML manipulation (format-preserving)
│   ├── XlsxParser.ts           # XLSX read/write via ExcelJS
│   ├── PptxParser.ts           # PPTX read → {slides[]} (JSZip XML)
│   └── PptxOoxmlEditor.ts      # PPTX write → add/update slides, create PPTX (JSZip OOXML)
├── formatters/
│   ├── MarkdownFormatter.ts
│   ├── JsonFormatter.ts
│   └── TableFormatter.ts   # Spreadsheet → Markdown table
└── tools/
    ├── documents.ts         # open/close/list/create
    ├── reader.ts            # metadata/outline/read/search
    ├── writer.ts            # insert/replace/style
    ├── spreadsheet.ts       # get/set cells/ranges/sheets
    ├── presentation.ts      # slides/notes
    └── converter.ts         # save/export/convert

🧪 Pruebas

# Create sample fixtures
node tests/create-fixtures.mjs

# Run smoke tests
npm test

📝 Variables de entorno

Variable

Descripción

SOFFICE_PATH

Ruta al ejecutable soffice de LibreOffice

DEBUG

Establecer en lo-mcp:* para registro detallado

📄 Licencia

MIT

Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - A tier

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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/passerbyflutter/libreoffice-mcp-tools'

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