This document provides practical examples of how to use the LibreOffice MCP Server.
# Create a Writer document with content
result = create_document(
path="/path/to/my_document.odt",
doc_type="writer",
content="Hello, World!\n\nThis is my first LibreOffice document created via MCP."
)
# Create a Calc spreadsheet
result = create_document(
path="/path/to/spreadsheet.ods",
doc_type="calc"
)
# Create a Presentation
result = create_document(
path="/path/to/presentation.odp",
doc_type="impress"
)# Read text content from any LibreOffice document
content = read_document_text("/path/to/document.odt")
print(f"Document has {content.word_count} words and {content.char_count} characters")
print(f"Content: {content.content}")
# Get document metadata
info = get_document_info("/path/to/document.odt")
print(f"File: {info.filename}, Size: {info.size_bytes} bytes")
print(f"Format: {info.format}, Modified: {info.modified_time}")# Convert ODT to PDF
result = convert_document(
source_path="/path/to/document.odt",
target_path="/path/to/document.pdf",
target_format="pdf"
)
if result.success:
print("Conversion successful!")
else:
print(f"Conversion failed: {result.error_message}")
# Convert to Microsoft Word format
result = convert_document(
source_path="/path/to/document.odt",
target_path="/path/to/document.docx",
target_format="docx"
)
# Convert to HTML
result = convert_document(
source_path="/path/to/document.odt",
target_path="/path/to/document.html",
target_format="html"
)# Add text to the end of a document
result = insert_text_at_position(
path="/path/to/document.odt",
text="\n\nThis text was added to the end of the document.",
position="end"
)
# Insert text at the beginning
result = insert_text_at_position(
path="/path/to/document.odt",
text="This is a new introduction.\n\n",
position="start"
)
# Replace entire document content
result = insert_text_at_position(
path="/path/to/document.odt",
text="This completely replaces the document content.",
position="replace"
)# Read data from a spreadsheet
data = read_spreadsheet_data(
path="/path/to/spreadsheet.ods",
sheet_name="Sheet1", # Optional
max_rows=50 # Optional, default 100
)
print(f"Sheet: {data.sheet_name}")
print(f"Dimensions: {data.row_count} rows × {data.col_count} columns")
# Access cell data
for row_idx, row in enumerate(data.data):
for col_idx, cell in enumerate(row):
print(f"Cell [{row_idx}][{col_idx}]: {cell}")# Search for documents containing specific text
results = search_documents(
query="important project",
search_path="/home/user/Documents" # Optional
)
for doc in results:
print(f"Found in: {doc['filename']}")
print(f"Path: {doc['path']}")
print(f"Context: {doc['match_context']}")# Convert all documents in a directory
results = batch_convert_documents(
source_dir="/path/to/source_documents",
target_dir="/path/to/converted_documents",
target_format="pdf",
source_extensions=[".odt", ".doc", ".docx"] # Optional
)
for result in results:
if result.success:
print(f"✓ Converted {result.source_path}")
else:
print(f"✗ Failed to convert {result.source_path}: {result.error_message}")
# Merge multiple documents
merged_doc = merge_text_documents(
document_paths=[
"/path/to/doc1.odt",
"/path/to/doc2.odt",
"/path/to/doc3.odt"
],
output_path="/path/to/merged_document.odt",
separator="\n\n=== DOCUMENT BREAK ===\n\n"
)# Get detailed statistics about a document
stats = get_document_statistics("/path/to/document.odt")
file_info = stats['file_info']
content_stats = stats['content_stats']
print(f"File: {file_info['filename']}")
print(f"Size: {file_info['size_bytes']} bytes")
print(f"Words: {content_stats['word_count']}")
print(f"Characters: {content_stats['character_count']}")
print(f"Sentences: {content_stats['sentence_count']}")
print(f"Paragraphs: {content_stats['paragraph_count']}")
print(f"Average words per sentence: {content_stats['average_words_per_sentence']:.1f}")The MCP server also provides resources for document discovery:
# Access via resource URI: documents://
# This will list all LibreOffice documents in common locations:
# - ~/Documents
# - ~/Desktop
# - Current working directory# Access specific document content via resource URI: document://{path}
# Example: document://tmp/my_document.odt
# Returns formatted text content with metadataAdd this to your Claude Desktop configuration file:
{
"mcpServers": {
"libreoffice": {
"command": "uv",
"args": ["run", "python", "/path/to/mcp-libre/main.py"],
"cwd": "/path/to/mcp-libre",
"env": {
"PYTHONPATH": "/path/to/mcp-libre"
}
}
}
}-
Document Processing Pipeline
- Create documents from templates
- Insert generated content
- Convert to multiple formats for distribution
-
Content Analysis
- Extract text from various document formats
- Analyze document statistics
- Search across document collections
-
Batch Document Management
- Convert legacy documents to modern formats
- Merge related documents
- Generate reports from multiple sources
-
Integration with AI Workflows
- Process documents for AI analysis
- Generate summaries and insights
- Create formatted reports from AI-generated content
The server provides detailed error messages for common issues:
- File not found: Clear error message with file path
- Conversion failures: LibreOffice error output included
- Permission issues: System-level error details
- Format not supported: List of supported formats
Always check the success field in conversion results and handle errors appropriately in your applications.
- Large documents: Text extraction may take time for very large files
- Batch operations: Process documents in smaller batches for better performance
- Spreadsheet data: Use
max_rowsparameter to limit data size - Concurrent operations: The server handles one operation at a time
- LibreOffice not found: Ensure LibreOffice is installed and in your PATH
- Java warnings: These are usually non-fatal; core functionality will still work
- Permission errors: Check file and directory permissions
- Conversion failures: Verify target format is supported by LibreOffice