Skip to main content
Glama

lo-mcp

A stdio MCP server for LibreOffice Writer. Minimal scope on purpose: create, edit, and export Writer documents. No Calc/Impress yet — add them later if Writer proves useful.

Why this shape

LibreOffice's own bundled Python interpreter (LibreOfficePython, used by import uno for document automation) carries a macOS Launch Constraint — spawning it as a subprocess from Claude Code's process tree gets SIGKILLed by macOS (CODESIGNING 4 Launch Constraint Violation). Plain soffice does not carry this constraint, but driving Writer interactively needs the uno Python bindings, which only load correctly under LibreOffice's own bundled interpreter (cross-interpreter import uno from an unrelated Python is an ABI mismatch — observed to hang the process in uninterruptible sleep, not fail cleanly).

So: a small LibreOffice extension (extension/) runs inside the already-running soffice process, using LibreOffice's own already-correct interpreter — no subprocess, no cross-interpreter import. It exposes a local HTTP server. The MCP server (src/lo_mcp/) is a thin, unconstrained client that talks to it over plain HTTP — same pattern as freecad-mcp connecting to the AICopilot addon running inside FreeCAD.

Related MCP server: docx-forge-mcp

Setup

  1. Build and install the extension:

    extension/build.sh
    /Applications/LibreOffice.app/Contents/MacOS/unopkg add --force dist/lo-mcp.oxt
  2. Launch (or restart) LibreOffice.

  3. In LibreOffice: lo-mcp menu > Start Server. This opens 127.0.0.1:8794 — local-only, only listens while you've started it. No real authentication, but POSTs must carry an X-Lo-Mcp-Client header, which forces browsers to CORS-preflight cross-origin requests; since the server never answers with Access-Control-Allow-Origin, that preflight fails and a malicious web page can't drive it.

  4. Register the MCP server:

    uv sync
    claude mcp add lo-mcp -- uv run --project /Volumes/Files/claude/lo-mcp lo-mcp

Call check_connection first in any session — if LibreOffice isn't running or the server wasn't started, it says so.

Tools

check_connection, create_document, open_document, list_documents, get_text, insert_text, find_and_replace, save_document, export_document (pdf/docx/odt/doc/rtf/txt/html), close_document.

Testing

uv run pytest

Requires LibreOffice running with the server started; skips otherwise.

Extending to Calc/Impress

Add operations to extension/pythonpath/lo_mcp_extension.py (new *Ops class or methods, registered in _OPS) and matching thin @mcp.tool() wrappers in src/lo_mcp/server.py. The HTTP/extension plumbing doesn't change.

Available Tools

15 tools
check_connectionA

Check whether the lo-mcp LibreOffice extension is reachable.

Call this first. If not connected, LibreOffice needs to be running with the lo-mcp extension's server started (lo-mcp menu > Start Server).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that it's a connectivity check with no side effects. Provides actionable guidance on failure, but no explicit mention of read-only or non-destructive nature (though implied).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose, zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a zero-parameter, no-output-schema connection check with clear guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so baseline 4. Description adds no param details (none needed).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'Check whether... is reachable.' Distinguishes from sibling tools that operate on documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs 'Call this first' and explains recovery steps if connection fails.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

close_documentA

Close a document. Refuses if there are unsaved changes unless force=True.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
doc_idYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behavior (refuses if unsaved unless force=True) but with no annotations, more detail on side effects or requirements would strengthen transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two clear sentences with no extraneous information. Essential behavior and parameter condition are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple tool given sibling context; covers main behavior and key parameter, but could elaborate on post-close state and doc_id scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning for 'force' parameter but does not describe 'doc_id'. Schema has 0% description coverage, so description partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action 'Close' and resource 'document'. Distinguishes well from sibling tools like open_document and save_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly gives context by stating the refusal behavior with unsaved changes, but lacks explicit when-not-to-use or alternatives like save first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_documentA

Create a new, blank Writer document. Returns a doc_id for later calls.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only states creation and return value. No details on permissions, side effects, or state changes. Adequate for simple tool but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with front-loaded action and return value. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, no output schema, and simple behavior, description is complete. Covers creation and return value adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has zero parameters with 100% coverage; baseline score is 4. Description adds no parameter info, but none needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Create a new, blank Writer document' with specific verb and resource, and distinguishes from siblings like open_document and save_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage context by noting it returns a doc_id for later calls, but does not explicitly list when to use or alternatives. Context is clear enough for a straightforward creation tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_documentC

Export a document to path. Format is inferred from the extension if omitted.

Supported formats: odt, pdf, docx, doc, rtf, txt, html.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
doc_idYes
formatNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description should disclose behavioral traits such as side effects (e.g., does it modify the original?), required state (e.g., document must be open), and error conditions (e.g., invalid path). It only states the basic operation, leaving critical details missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences, front-loading the primary purpose. It avoids unnecessary words, though it could be slightly more informative without adding length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the parameter count (3) and no output schema or annotations, the description is too sparse. It omits return values, error handling, prerequisites (e.g., document must be open), and overall behavior, leaving the agent underinformed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The description adds meaning only for the 'format' parameter (inference from extension). The 'doc_id' and 'path' parameters are not explained, which is insufficient given the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (export) and resource (document). It also explains format inference from file extension, which provides useful context. However, it does not explicitly state which document is exported (e.g., currently open document), which could be ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like save_document. The description assumes the agent knows the purpose, but does not clarify scenarios or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_and_replaceC

Replace all occurrences of search with replace in a document. Returns the count replaced.

ParametersJSON Schema
NameRequiredDescriptionDefault
regexNo
doc_idYes
searchYes
replaceYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It mentions mutation (replace) and return value, but does not explain side effects (e.g., formatting preservation, undo capability), behavior with zero matches, or the effect of the 'regex' parameter. This leaves key behaviors unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one main sentence plus return note) and front-loads the core action. However, its brevity sacrifices critical details, making it somewhat under-specified rather than purely concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is incomplete for a tool with 4 parameters, no output schema, and no annotations. It omits parameter details, prerequisites (e.g., document must be open), behavior of the 'regex' option, and return format. The agent lacks sufficient context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema property descriptions are absent (0% coverage). The description only names 'search' and 'replace' but does not explain the 'doc_id' parameter's role, the 'regex' boolean's effect, or any constraints. The agent cannot infer the full parameter semantics from the description alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Replace', the resource 'document', and the specific action of replacing occurrences of `search` with `replace`. It also notes the return value (count replaced), making the tool's purpose unambiguous and distinct from siblings like insert_text or get_text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus siblings (e.g., insert_text, set_paragraph_style). No prerequisites, limitations, or alternative suggestions are mentioned. The agent must infer usage context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_paragraph_styleA

Read a paragraph's style name and break type. Defaults to the last paragraph.

paragraph_index is 0-based; negative indices count from the end, Python-style.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYes
paragraph_indexNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description carries full burden. It indicates a safe read operation and explains default behavior and indexing. However, it does not mention error cases or side effects, which is acceptable for a simple getter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states purpose, second explains parameter. No wasted words, front-loaded with key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool is simple; description provides purpose, default behavior, parameter semantics. Lacks explicit return format, but enough for an agent to use correctly given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 0%, description adds meaning for paragraph_index: explains 0-based indexing, negative indices Python-style, and default to last paragraph. This compensates well. doc_id needs no extra explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Read a paragraph's style name and break type', specifying verb and resource. It distinguishes from siblings like set_paragraph_style and list_styles by being a read operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage for reading style info but lacks explicit guidance on when to use versus alternatives like list_styles or get_text. No when-not-to-use conditions provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_table_cellB

Read a table cell's text (e.g. cell="A1"). Uses the first table if table_name is omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
cellYes
doc_idYes
table_nameNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description indicates it is a read operation ('Read') but does not elaborate on error handling (e.g., missing cell or table), side effects, or return format. With no annotations, more behavioral context is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: one sentence plus a short note. No redundancy, and the key action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for basic usage but lacks details on return value (no output schema) and edge cases. Given the tool's simplicity and lack of annotations, it is minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning for 'cell' via example and 'table_name' by explaining default behavior, but does not explain 'doc_id'. With 0% schema description coverage, the description partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a table cell's text, with an explicit example ('cell="A1"'). It distinguishes from siblings like get_text by targeting table cells specifically.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The only usage hint is about omitting table_name to use the first table, but no comparison with siblings or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_textC

Read the full text content of a Writer document.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It implies a non-destructive read operation but fails to disclose details like return format, size limits, or authentication needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single-sentence description is efficient and front-loaded, but it is too minimal to be helpful; it could add relevant context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 param, no output schema, no annotations), the description is inadequate. It omits return value behavior and does not address potential edge cases or usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description does not explain the 'doc_id' parameter at all. The description must compensate but adds no value beyond the schema structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Read the full text content of a Writer document' uses a specific verb ('Read') and resource ('full text content of a Writer document'), clearly distinguishing it from siblings like 'get_table_cell' or 'get_paragraph_style' which target specific sub-resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as 'get_paragraph_style' or 'find_and_replace', nor does it mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_tableA

Insert a table at the end of the document. Supports up to 26 columns.

data, if given, is a 2D list of row values written into cells (values beyond the table's rows/cols are ignored). header=True bolds row 1.

ParametersJSON Schema
NameRequiredDescriptionDefault
colsYes
dataNo
rowsYes
doc_idYes
headerNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that data beyond the table's dimensions is ignored and that header bolds row 1, which are key behavioral traits. However, it does not mention side effects, permissions, or error conditions, leaving some ambiguity for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences efficiently convey the main action, constraints, and key parameter details. No redundant or vague statements. Information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters and no output schema, the description covers the core behavior (insertion location, column limit, data handling, header formatting). It lacks return value information, but that is often implicit for insert operations. The description is sufficient for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must add meaning. It explains 'data' as a 2D list and 'header' as bold row 1, but does not describe 'doc_id', 'rows', or 'cols' beyond their names. The non-obvious parameters receive adequate explanation, but the basic ones are left to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Insert a table') and its location ('at the end of the document'), distinguishing it from sibling tools like insert_text or get_table_cell. The constraint 'Supports up to 26 columns' adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by specifying the insertion location and parameter behavior, but it does not explicitly state when to use this tool versus alternatives or provide any exclusion criteria. No guidance on prerequisites or limitations beyond column count.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_textA

Append text at the end of a Writer document.

break_before controls what precedes the text: "none" (default, keeps typing in the current paragraph), "line" (soft line break, same paragraph), "paragraph" (starts a new paragraph), or "page" (starts a new paragraph on a new page).

bold/italic/underline apply direct character formatting to just the text being inserted. style is a paragraph style name (e.g. "Heading 1", "Title") applied to the paragraph the text lands in; char_style is a character style name (e.g. "Emphasis", "Strong Emphasis") applied to just the inserted run. Use list_styles to see what's actually available in a given document rather than guessing names.

ParametersJSON Schema
NameRequiredDescriptionDefault
boldNo
textYes
styleNo
doc_idYes
italicNo
underlineNo
char_styleNo
break_beforeNonone

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must fully disclose behavior. It details break_before options, formatting application (bold/italic/underline), and style/char_style effects. It also advises using list_styles to avoid guessing, adding practical context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear first sentence stating the action, followed by parameter details in a bullet-like format. It is concise without unnecessary words, though some parameter explanations could be more compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters, 2 required, and no output schema, the description covers all key parameters and behaviors. It explains insertion at the end, formatting, and style application. Missing details like return value are acceptable since output schema is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description compensates by explaining each parameter's role and valid values (e.g., break_before options, style names). It provides usage examples like 'Heading 1' and 'Emphasis', which adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Append text at the end of a Writer document', using a specific verb and resource. It distinguishes from siblings like get_text and find_and_replace by focusing on insertion at the end.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through parameter explanations but does not explicitly state when to use this tool over alternatives like list_styles or get_text. No 'when-not' or alternative tool references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documentsA

List documents currently open via lo-mcp, with their doc_id and modified state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool lists open documents with specific fields, but does not disclose any side effects, permissions, or caching behavior. For a read-only list operation, the minimal disclosure is acceptable but leaves room for ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that efficiently conveys action, scope, and output. No superfluous words, front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list tool with no output schema, the description is sufficiently complete. It explains the resource and output fields. Minor lack of detail on sorting or pagination is acceptable given simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, baseline is 4. The description adds meaning by specifying what is listed (documents) and what fields are returned (doc_id, modified state), which the empty schema does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verb 'List' and resource 'documents', with scope 'currently open via lo-mcp', and mentions output fields 'doc_id and modified state'. This clearly distinguishes it from sibling tools like open_document or list_styles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for viewing open documents but lacks explicit guidance on when to use this vs alternatives, or any exclusions. It is adequate but not directive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_stylesA

List style names available in a document for a given style family.

family is one of "ParagraphStyles" (default), "CharacterStyles", "PageStyles", "FrameStyles", "NumberingStyles". Use this before calling insert_text(style=...)/char_style=.../set_paragraph_style to find valid names instead of guessing — built-in style sets vary slightly by LibreOffice version and locale, and documents can also define custom styles.

ParametersJSON Schema
NameRequiredDescriptionDefault
doc_idYes
familyNoParagraphStyles

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states that the tool lists styles (read-only operation) and explains why the list is needed (variability). While it doesn't explicitly declare non-destructive or idempotent, the nature of listing is clear. Some mention of return format could improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and to the point, with the main action in the first sentence. It uses bullet-like enumeration for families and integrates usage guidance efficiently. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given two parameters and no output schema, the description covers the tool's purpose, when to use it, and parameter details. It doesn't mention ordering or categorization of the list, but that is minor. Overall, it provides enough context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description compensates. It explains the 'family' parameter with list of valid values and its default. 'doc_id' is required but obvious; no further explanation needed. The description adds meaning beyond the schema by connecting parameters to the tool's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists style names for a given family. It specifies the verb 'List', the resource 'style names available in a document', and the parameter 'family'. It distinguishes from sibling tools like insert_text and set_paragraph_style by indicating it is a preparatory step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this before calling insert_text(style=...)/char_style=.../set_paragraph_style to find valid names instead of guessing.' It provides strong guidance on when to use the tool and why (variability by version, locale, custom styles). It also enumerates valid values for 'family'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_documentC

Open an existing document from disk. Returns a doc_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description is responsible for behavioral disclosure. It mentions the action and return value but omits behavior on errors, file lock status, memory implications, or whether it's a read-only operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While short, the description is too brief—it fails to convey essential information in the space used. It could be expanded to include key details without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, no annotations, and a single parameter, the description is incomplete. It does not explain how to use the returned doc_id, error conditions, or relationship to other document tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameter meaning. It does not mention the 'path' parameter at all, leaving agents to infer its format or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Open') and the resource ('an existing document from disk') and notes the return value ('Returns a doc_id'). This effectively distinguishes it from siblings like create_document or close_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, no prerequisites (e.g., file existence, supported formats), and no conditions for when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_documentB

Save a document in place (if it already has a location) or to a new path.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
doc_idYes
formatNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It only mentions location handling but omits details about overwriting behavior, error conditions, whether the operation is synchronous, or any permissions needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded with the main action. It is concise and relevant, though could benefit from slightly more detail without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters, no output schema, and no annotations, the description is too sparse. It does not explain return values, side effects, or prerequisites. For a save operation, more completeness is expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The description adds minimal meaning beyond schema: it implies 'path' is for new locations but does not explain 'format' or 'doc_id' beyond their names. No examples or constraints provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'save' and resource 'document', and distinguishes between saving in-place or to a new path. It's specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for saving documents but does not explicitly state when to use this tool versus siblings like export_document or create_document. The context of 'if it already has a location' provides some guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_paragraph_styleA

Apply a paragraph style (e.g. "Heading 1", "Title") to an existing paragraph.

Defaults to the last paragraph if paragraph_index is omitted. Index is 0-based (negative indices count from the end, Python-style) and counts paragraphs only — tables don't count.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleYes
doc_idYes
paragraph_indexNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It explains the default for paragraph_index, 0-based indexing, negative indices, and that tables don't count. However, it does not mention what happens if the style is invalid, whether the operation is destructive, or any permissions needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. The first sentence states the purpose, and the second provides critical indexing details. Every sentence adds value, though it could be slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters, no output schema, and no annotations, the description explains paragraph_index well but lacks details on style (e.g., available styles) and what happens on success (void? error?). It is adequate but has gaps in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning for paragraph_index (default, indexing rules, table exclusion) but does not explain 'style' (valid values, case sensitivity) or 'doc_id'. Partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool applies a paragraph style to a paragraph, with examples like 'Heading 1' or 'Title'. It specifies the verb 'apply' and the resource 'paragraph style', effectively distinguishing it from sibling tools like 'get_paragraph_style'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when an existing paragraph needs a style applied but does not explicitly state when not to use it or mention alternatives. Siblings like 'list_styles' could be mentioned for discovering styles, but no guidance is provided on prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, from connection checking to document lifecycle operations, content insertion, reading, and style management. No two tools could be easily confused.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores and lowercase, e.g., create_document, get_text, set_paragraph_style, find_and_replace. No mixing of conventions.

Tool Count5/5

15 tools cover document creation, opening, saving, closing, exporting, content insertion (text, table), reading (text, styles, table cells), search/replace, style listing, and document listing. This is well-scoped for a Writer manipulation server.

Completeness3/5

The tool set covers basic document operations and insertion, but lacks deletion capabilities (no tool to remove text, tables, or paragraphs) and modification of existing content (e.g., changing formatting after insertion, updating table cells). These gaps are notable for a full document editing workflow.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

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/blwfish/LibreOffice-mcp'

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