LibreOffice MCP Tools
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEBUG | No | Set to 'lo-mcp:*' for verbose logging | |
| SOFFICE_PATH | No | Path to LibreOffice soffice executable |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| document_apply_styleC | Apply a heading or paragraph style to a specific paragraph by index. |
| document_closeA | Close an open document and release its resources (including any temp files from format bridging). |
| document_convertA | Convert a document file to a different format using LibreOffice CLI. Creates a new file; original is not modified. Useful for: DOC→DOCX, DOCX→PDF, XLSX→CSV, etc. LibreOffice must be installed. |
| document_createB | Create a new empty document and open it. Returns a docId. Supports creating: writer (text document → .docx), calc (spreadsheet → .xlsx), impress (presentation → .pptx). |
| document_exportA | Export a document to a different format using LibreOffice. Supports exporting to: PDF, HTML, TXT, DOCX, XLSX, PPTX, ODT, ODS, ODP, CSV. LibreOffice must be installed. |
| document_get_metadataA | Get metadata for an open document: title, author, page count, word count, format, file size, dates. Token-efficient: use this before reading document content to understand its size and structure. |
| document_get_outlineA | Get the structural outline of a document:
|
| document_insert_paragraphC | Insert a new paragraph at a specific index in a Writer document. |
| document_insert_textB | Insert text into a Writer document at a specified position. Position options: 'start' (beginning), 'end' (end of document), or after a specific heading text. |
| document_listB | List all currently open documents with their docId, file path, format, and size. |
| document_openA | Open a document file and return a docId handle for use with other tools. Supports: .docx, .doc, .xlsx, .xls, .pptx, .ppt, .odt, .ods, .odp, .rtf, .csv, .txt, .pdf Legacy binary formats (.doc, .xls, .ppt, .odt, .ods, .odp, .rtf) are automatically converted via LibreOffice before parsing. Returns docId to use with all other document tools. |
| document_read_rangeA | Read a specific range of a document by paragraph index (for Writer) or slide index (for Impress). More token-efficient than document_read_text when you only need a specific section. |
| document_read_textA | Read document content as Markdown text. For large documents, use limit/offset for pagination. Default returns up to 4000 characters. Use document_get_outline first to understand structure. |
| document_replace_textC | Find and replace text in a Writer document. Optionally replace all occurrences. |
| document_saveB | Save the current state of a document to its file path (or a new path). |
| document_searchA | Search for text within a document. Returns matching paragraphs/cells/slides with surrounding context. |
| presentation_add_slideC | Add a new slide to a presentation. |
| presentation_get_notesB | Get speaker notes for all slides or a specific slide. |
| presentation_get_slideB | Get the full content of a specific slide: title, body text, and speaker notes. |
| presentation_list_slidesA | List all slides in a presentation with their index and title. Token-efficient overview before reading content. |
| presentation_update_slideC | Update the title or body text of an existing slide. |
| spreadsheet_add_sheetC | Add a new sheet to a spreadsheet workbook. |
| spreadsheet_get_formulasA | Get all formulas in a spreadsheet range (returns formula expressions, not computed values). |
| spreadsheet_get_rangeA | Read a range of cells from a spreadsheet sheet. Returns data as structured JSON and a markdown table. Use range like "A1:D10" for specific cells, or omit for paginated full sheet. Token-efficient: specify a range rather than reading the whole sheet. |
| spreadsheet_list_sheetsB | List all sheets in a spreadsheet with their names, row counts, and column counts. |
| spreadsheet_set_cellA | Set the value or formula of a single cell in a spreadsheet. Changes are saved immediately. |
| spreadsheet_set_rangeC | Set multiple cell values in a spreadsheet. Provide a 2D array of values matching the range. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 27 tools
Most tools have distinct purposes with clear boundaries, such as document operations versus presentation or spreadsheet tools. However, some overlap exists: document_read_text and document_read_range both handle reading content, and document_convert and document_export both involve format conversion, which could cause minor confusion in selection.
Tool names follow a highly consistent verb_noun pattern with clear prefixes (document_, presentation_, spreadsheet_) that group related operations. All names use snake_case uniformly, making them predictable and easy to parse for agents.
With 27 tools, the count is borderline high for a single server, potentially overwhelming for agents. While the tools cover a broad range of LibreOffice operations, the number feels heavy and could be streamlined by consolidating overlapping functions like reading or conversion tools.
The tool set provides comprehensive coverage for document, presentation, and spreadsheet workflows, including creation, reading, updating, conversion, and metadata operations. There are no obvious gaps; agents can perform full CRUD/lifecycle tasks across all supported file types without dead ends.