Skip to main content
Glama

office-mcp

MCP server for managing Word, Excel, and PowerPoint documents via stdio JSON-RPC.

office-mcp is a Model Context Protocol server written in Python that lets an MCP-compatible agent (Claude Desktop, MCP Inspector, a custom agent) read, write, edit, format, and export modern Microsoft Office files (.docx, .xlsx, .pptx) over the standard stdio JSON-RPC transport.

The server is stateless: every tools/call opens the file, performs the operation, saves, and returns. There is no in-memory cache, no background thread, and no database.

  • 47 tools across four modules (4 unprefixed general tools

    • 14 Word + 15 Excel + 14 PowerPoint tools).

  • PDF / HTML / CSV export for every supported format. docx → html is pure-Python (via mammoth); everything else uses LibreOffice headless.

  • Cross-platform — Windows, macOS, Linux. The codebase never shells out; LibreOffice is invoked as a subprocess with argument lists.

  • UTF-8 end-to-end with explicit PYTHONUTF8=1 / PYTHONIOENCODING=utf-8 so non-ASCII content survives every tool call.

Table of contents

Related MCP server: docx-mcp-server

Install

1. Requirements

  • Python 3.10+ (tested on 3.12). The pre-built virtual environment in .venv/ already targets 3.12.

  • LibreOffice 7+ for *.pdf and .xlsx / .pptx → .html export. The classic install paths are auto-detected; on Windows the installer places soffice.exe at C:\Program Files\LibreOffice\program\soffice.exe. The headless mode used by office-mcp does not require a display or a running LibreOffice instance.

  • All Python dependencies are listed in pyproject.toml and pre-installed in .venv/: mcp[cli]>=1.27,<2, python-docx, openpyxl, python-pptx, xlsxwriter, mammoth, defusedxml, pydantic. The optional Pillow is used for sample image generation only.

2. One-time setup

init.sh is idempotent: it sets the right environment variables, adds LibreOffice to PATH, activates the venv, and verifies every required Python package. Run it once from the project root in a Bash-compatible shell (Git Bash, WSL, or bash on macOS / Linux):

bash init.sh

What it does:

  1. export PYTHONUTF8=1 and export PYTHONIOENCODING=utf-8 so Unicode survives every subprocess boundary.

  2. Prepends the LibreOffice program directory to PATH (no effect if it is already there).

  3. Activates .venv/ (Scripts/activate on Windows, bin/activate elsewhere). If .venv/ is missing it bootstraps a fresh one.

  4. Imports every required package and prints a confirmation line.

  5. Prints soffice --version (or a warning if LibreOffice is missing — export tools will then raise ERR_LIBREOFFICE_MISSING at call time, not at server start).

If you do not want to source init.sh, set the same variables manually before launching the server:

export PYTHONUTF8=1
export PYTHONIOENCODING=utf-8
export PATH="/c/Program Files/LibreOffice/program:$PATH"   # Windows Git Bash
.venv/Scripts/python.exe server.py

3. Re-install / re-provision the venv (optional)

# from the project root
.venv/Scripts/python.exe -m pip install -e .

The .[dev] extra pulls in pytest, pytest-asyncio, and pyflakes.

Quick start

# 1. Activate venv + set encoding + add LibreOffice to PATH
bash init.sh

# 2. Launch the server (talks JSON-RPC on stdio)
python server.py

The server prints nothing on success — it owns stdin/stdout for the JSON-RPC stream. All diagnostic output goes to stderr. To see the negotiated session, run the server under the MCP Inspector:

.venv/Scripts/python.exe -m mcp.cli inspector server.py

To verify the server from a clean shell without an agent, use the manual smoke test:

# Spawns the server over stdio, runs `initialize` + `tools/list`,
# prints the registered tool count, and exits.
.venv/Scripts/python.exe smoke_server.py

Expected last line: OK initialize -> tools/list (47 tools).

Claude Desktop registration

Add the following to your claude_desktop_config.json. On Windows the file lives at %APPDATA%\Claude\claude_desktop_config.json; on macOS at ~/Library/Application Support/Claude/claude_desktop_config.json.

{
  "mcpServers": {
    "office-mcp": {
      "command": "python",
      "args": ["E:/PROJECT FILE/Dengan Hati/PROJECT IDEA/office-mcp/server.py"],
      "env": {
        "PYTHONUTF8": "1",
        "PYTHONIOENCODING": "utf-8",
        "OFFICE_MCP_DEFAULT_FOLDER": "E:/Documents"
      }
    }
  }
}

Notes:

  • args[0] must be the absolute path to server.py for your checkout. The forward slashes in the example work on Windows; use backslashes only if you escape them.

  • OFFICE_MCP_DEFAULT_FOLDER is the directory the server will resolve relative file paths against. Any tool that accepts a folder argument overrides this default for that call.

  • If you prefer the venv's Python, set command to the full path (e.g. E:/PROJECT FILE/Dengan Hati/PROJECT IDEA/office-mcp/.venv/Scripts/python.exe) — both work because the venv already has the server's dependencies on its sys.path.

  • Restart Claude Desktop after editing the config so it re-reads the file.

The 47 tools

architecture.md §3 is the authoritative description; the table below is the index. Format-specific tools are prefixed (word_*, excel_*, pptx_*); the four general tools have no prefix.

General (4)

Tool

Purpose

list_documents

Non-recursive folder scan; returns one entry per .docx/.xlsx/.pptx.

get_document_info

Auto-detect format by extension; dispatch to the format-specific *_get_info.

search_text

Cross-format text search with locations paragraph:N / cell:<coord> / slide:N:shape:M.

convert_document

Dispatch to the right exporter based on source extension and target_format (pdf / html / csv).

Word (15)

Tool

Purpose

word_create_document

Create a new .docx, optionally with a title.

word_get_info

Counts of paragraphs / sections / tables / images + core properties.

word_list_paragraphs

All paragraphs with index, style, text, runs.

word_read_paragraph

One paragraph by index.

word_add_paragraph

Append a paragraph (optional style).

word_add_heading

Append a heading at a level (1-9).

word_find_replace

Find and replace text (case-sensitive toggle).

word_format_run

Update a run's bold / italic / size / font / color.

word_add_table

Append a table (rows × cols, optional data + style).

word_add_image

Embed an image (optional width_inches).

word_add_header

Set the text of a section's header.

word_add_footer

Set the text of a section's footer.

word_set_section

Configure a section's orientation + page size.

word_export_pdf

Convert a .docx to PDF via LibreOffice.

word_export_html

Convert a .docx to HTML via mammoth.

Excel (14)

Tool

Purpose

excel_create_workbook

Create a new .xlsx (optionally with a custom sheet name).

excel_get_info

Sheet count + names + per-sheet dimensions.

excel_list_sheets

Names + indices + dimensions of all sheets.

excel_read_sheet

Read a sheet (or an A1:C3-style range) as a 2-D list.

excel_write_cell

Write a single cell (string, number, or =formula).

excel_write_range

Write a 2-D list of values starting at a cell.

excel_create_sheet

Append a new sheet.

excel_delete_sheet

Remove a sheet (refuse to delete the last).

excel_rename_sheet

Rename a sheet (refuse duplicates).

excel_format_cells

Apply font / fill / border / number-format to a range.

excel_add_chart

Add a bar / line / pie / area / scatter chart.

excel_export_csv

Export a sheet to CSV (pure Python).

excel_export_pdf

Export a workbook to PDF via LibreOffice.

excel_export_html

Export a workbook to HTML via LibreOffice.

PowerPoint (14)

Tool

Purpose

pptx_create_presentation

Create a new .pptx with an optional title slide.

pptx_get_info

Slide count + layouts + slide dimensions.

pptx_list_slides

All slides with index, title, layout, shape count.

pptx_read_slide

One slide's title + shapes.

pptx_add_slide

Add a slide (layout index, optional title).

pptx_delete_slide

Remove a slide (refuse to delete the last).

pptx_reorder_slides

Move a slide to a new index (move, not swap).

pptx_add_text_box

Add a text box (x / y / w / h in inches, optional font).

pptx_add_image

Embed an image (x / y / w / h).

pptx_add_shape

Add an MSO shape (type, x / y / w / h, optional text).

pptx_add_table

Add a table (rows / cols / data, x / y / w / h).

pptx_add_chart

Add a chart (type, data dict, x / y / w / h).

pptx_export_pdf

Export to PDF via LibreOffice.

pptx_export_html

Export to HTML via LibreOffice.

Usage examples

Each example assumes the server is registered with your MCP agent (see Claude Desktop registration) or that you are calling the tool functions directly from Python (via mcp._tool_manager._tools["..."].fn).

General tools

A typical agent workflow starts with a folder scan: ask the agent to "list the Office files in ~/Documents". The list_documents tool returns one entry per file with its type (word / excel / pptx), its on-disk size, and an ISO-8601 modified timestamp. The agent can then dispatch per-file operations. get_document_info is the next step: it returns format-specific metadata (paragraphs / sections for Word, sheet count and dimensions for Excel, slide count and layouts for PowerPoint) so the agent can plan a sequence of edits without opening the file. search_text is the cross-format text search — give it a substring and it returns every paragraph, cell, or shape that contains the match, with a small surrounding context window. convert_document is the end-of-pipeline tool: pass the source path and target_format ("pdf", "html", or "csv" for Excel only) and an optional output path; the output lands next to the source if you omit output.

Word tools

word_create_document is the typical entry point. Pass a path (absolute or relative to folder / the default folder) and an optional title; the tool refuses to overwrite an existing file (ERR_INVALID_PARAMS) so it is safe to re-call on a fresh scratch path. Once a document exists the agent can chain word_add_heading, word_add_paragraph, and word_add_table to build the body; word_format_run then applies bold / italic / font / size / color to a specific run in a specific paragraph (the contract is that an all-None call is a true no-op — the file SHA256 is preserved). word_find_replace is the bulk-edit hammer: pass find, replace, and case_sensitive; the tool returns the total replacement count and rewrites the file in place. word_add_image accepts PNG / JPEG / GIF / TIFF and either embeds the picture at its native size or scales it to width_inches (aspect ratio is preserved automatically). word_add_header / word_add_footer / word_set_section configure the section-level metadata; word_set_section takes "portrait" or "landscape" and a page size ("A4", "Letter", "Legal", "A5", "Tabloid", "B5"). Finally, word_export_pdf and word_export_html produce the deliverable: the first uses LibreOffice, the second uses the pure-Python mammoth library so it works even on a machine without LibreOffice installed.

Excel tools

excel_create_workbook returns the absolute path of a new .xlsx with a single default sheet ("Sheet1") — pass sheet_name to use something more descriptive from the start. excel_write_cell is the small-scale writer: it accepts strings, numbers, and "=..." formulas; the cell reference is parsed by the helper that also powers excel_write_range so "A1", "B2", "AA10" all work, and malformed refs raise ERR_CELL_PARSE (-32008). For bulk writes use excel_write_range with start_cell and a 2-D data list in row-major order. excel_create_sheet / excel_delete_sheet / excel_rename_sheet manage the workbook's sheet list; excel_delete_sheet refuses to remove the only remaining sheet. excel_format_cells applies font / fill / border / number-format to a range (the range argument accepts the same "A1:C3" syntax as excel_read_sheet). excel_add_chart writes an openpyxl chart of type bar, line, pie, area, or scatter anchored at target_cell — a typical call looks like excel_add_chart(path, sheet, "bar", "A1:B5", "D2", "Sales"). excel_export_csv is pure-Python (no LibreOffice needed) and exports a single sheet; excel_export_pdf and excel_export_html go through LibreOffice for fidelity with what the user sees in Excel.

PowerPoint tools

pptx_create_presentation lays down a .pptx with one title slide (configurable via title / subtitle). Add slides with pptx_add_slide(layout_index=..., title=...); the default layouts are 0 (Title Slide), 1 (Title and Content), 5 (Title Only), 6 (Blank). pptx_delete_slide and pptx_reorder_slides let the agent reshape the deck (pptx_reorder_slides is a move, not a swap). pptx_add_text_box and pptx_add_shape are the simple shape writers — both take x / y / w / h in inches. For data, pptx_add_table writes a rows × cols table at a given position, and pptx_add_chart writes a chart with a Python dict payload (categories + series). All pptx_export_* tools delegate to LibreOffice.

Architecture overview

The full design is in architecture.md. The 30-second version:

+--------------------+        stdio JSON-RPC        +--------------------+
|   MCP agent        |  <----------------------->   |   office-mcp       |
|  (Claude Desktop)  |  initialize / tools/list    |   (Python process) |
|  or custom client  |  tools/call {name, args}    |                    |
+--------------------+                              |  FastMCP("office-  |
                                                   |  mcp") + 47 tools  |
                                                   +---------+----------+
                                                             |
                                              subprocess (PDF / HTML / CSV)
                                                             |
                                                   +---------v----------+
                                                   |  LibreOffice 7+    |
                                                   |  (soffice)         |
                                                   +--------------------+

Module layout:

office-mcp/
├── server.py                # FastMCP entry; mcp singleton; tool registration
└── office_mcp/
    ├── config.py            # OFFICE_MCP_DEFAULT_FOLDER + find_libreoffice()
    ├── paths.py             # resolve_path(file, folder) -> absolute Path
    ├── errors.py            # OfficeMCPError + 9 error codes (-32001..-32009)
    ├── general_tools.py     # list_documents, get_document_info, search_text, convert_document
    ├── word_tools.py        # 14 word_* tools
    ├── excel_tools.py       # 15 excel_* tools
    ├── pptx_tools.py        # 14 pptx_* tools
    └── exporters.py         # export_to_pdf / export_to_html / export_to_csv

Critical idioms (also enforced by the test suite):

  • Singleton via from server import mcp. Every tool function is decorated with @mcp.tool() from mcp.server.fastmcp, imported as from server import mcp. This works because server.py registers itself under both __main__ and server in sys.modules via sys.modules.setdefault("server", sys.modules[__name__]) at module top. Do not remove that line.

  • Side-effect imports in server.py use importlib.import_module. This avoids pyflakes F401 false positives on the tool module side-effect imports.

  • No print() to stdout. All logging goes to sys.stderr (configured at the top of server.py).

  • Office files are ZIPs — open in binary mode ("rb"/"wb"). Text files (HTML, CSV, README) with encoding="utf-8".

  • *_create_* tools refuse to overwrite. All other tools raise ERR_FILE_NOT_FOUND (-32001) if the target does not exist.

  • Error model. Every tool raises OfficeMCPError(code, message, details). FastMCP serialises the exception to a CallToolResult with isError=True and a structuredContent dict carrying the error code. The JSON-RPC error code stays clean.

Configuration

Env var

Default

Effect

OFFICE_MCP_DEFAULT_FOLDER

server CWD

Base folder for relative paths in tool calls.

OFFICE_MCP_SOFFICE

auto-detected

Override the LibreOffice executable path.

PYTHONUTF8

unset

Set to 1 to enable UTF-8 mode in the interpreter.

PYTHONIOENCODING

unset

Set to utf-8 so sys.stdin / sys.stdout are UTF-8.

Set these in claude_desktop_config.json (see Claude Desktop registration) or in the shell before launching the server.

Troubleshooting

"LibreOffice (soffice) is not installed or not on PATH"

ERR_LIBREOFFICE_MISSING (-32006) is raised on any export that needs LibreOffice — every *_export_pdf, every excel_export_html, and every pptx_export_html call. Word's word_export_html does not need LibreOffice (it uses mammoth).

  1. Install LibreOffice. On Windows, use the official MSI (soffice.exe lands in C:\Program Files\LibreOffice\program). On macOS, drag the .dmg to /Applications. On Debian / Ubuntu: sudo apt install libreoffice.

  2. Check the executable. init.sh prints soffice: LibreOffice ... when the binary is found. If it prints WARNING: soffice not on PATH, either re-run init.sh or set OFFICE_MCP_SOFFICE=/full/path/to/soffice(.exe) in the agent config.

  3. Watch out for the Windows .COM shim. shutil.which on Windows can return soffice.COM (a 16-bit DOS wrapper) when the LibreOffice program directory is on PATH but not in the auto-detect candidate list. find_libreoffice() in office_mcp/config.py explicitly prefers the .exe candidates and rejects .COM files. If you see the server hang for the full 180s timeout before raising ERR_EXPORT_FAILED, you are probably hitting this — set OFFICE_MCP_SOFFICE to the absolute soffice.exe path.

  4. Concurrent calls. Each *_export_* call uses a unique -env:UserInstallation=file:///<tempdir> so two simultaneous exports do not fight over the default profile. You can run word_export_pdf in parallel from two different agent sessions without locking.

Encoding issues (mojibake, UnicodeDecodeError)

  • Always launch the server with PYTHONUTF8=1 and PYTHONIOENCODING=utf-8 in the env. init.sh does this for the local shell; the Claude Desktop config snippet above sets them in the env block.

  • Office files are ZIPs — the tools always open them in binary mode, so non-ASCII content is preserved end-to-end.

  • If you see mojibake only in tool output (not on disk), the most likely cause is the agent or its console not running in UTF-8. Set PYTHONIOENCODING=utf-8 in the server's env.

  • If you see mojibake on disk, the source file was probably written by an older tool that did not declare UTF-8. The server cannot retroactively fix it.

"File is locked" / "Permission denied" on save

  • ERR_FILE_LOCKED (-32002) means the file is open in Word / Excel / PowerPoint (or another process holds an exclusive handle). Close the file in the Office app and re-call the tool. Office writes lock files (.~lock.<name>#) next to the document; if the previous run crashed you can delete the lock file by hand.

  • If you are running the server in a sandboxed agent, make sure the agent's filesystem permissions include write access to the file and its containing directory.

  • Antivirus software occasionally holds a write lock for a few seconds after Word closes. If the failure is intermittent, wait a second and retry.

Server starts but the agent sees 0 tools

This means the sys.modules.setdefault("server", sys.modules[__name__]) line in server.py is missing, or server.py was launched in a way that bypasses the FastMCP singleton. Do not edit that line. Verify it is present and re-launch. The same fix applies if you ever see the second FastMCP instance warning in the logs.

Server hangs without producing output

  • Confirm the agent is talking JSON-RPC and not raw bytes — the server owns stdin/stdout and will not echo any prompt.

  • Confirm PYTHONIOENCODING=utf-8 is set. Without it, the interpreter may try to re-encode the JSON-RPC stream and fail silently.

  • Check the server's stderr (the agent usually surfaces this). A clean start produces a single INFO line for the session negotiation and nothing else.

Excel "file is corrupt" / openpyxl warnings

  • openpyxl writes a warning when a workbook contains features it does not preserve (some pivot tables, some VBA macros). The server still saves the file but the warning is in stderr. Reopening the file in Excel succeeds because Excel ignores the missing optional features; the warning is informational only.

Development commands

All commands assume the project root as the current directory and the venv on PATH (or the explicit .venv/Scripts/python.exe prefix shown). The single source of truth is services.yaml.

# Run the full pytest suite (≈100 tests, sequential, no -n).
.venv/Scripts/python.exe -m pytest -q

# Run tests for a single module.
.venv/Scripts/python.exe -m pytest tests/test_word_core.py -q
.venv/Scripts/python.exe -m pytest tests/test_excel_advanced.py -q

# Run the cross-format integration test (spawns the server
# over stdio and exercises the agent round-trip).
.venv/Scripts/python.exe -m pytest tests/test_integration.py -v

# Smoke check: import the singleton and report the tool count.
.venv/Scripts/python.exe -c "from server import mcp; print(mcp.name, len(mcp._tool_manager._tools))"

# Type check (syntax + import resolution for every .py file).
.venv/Scripts/python.exe -m py_compile server.py office_mcp/*.py

# Lint with pyflakes (suppress the import side-effect noise).
.venv/Scripts/python.exe -m pyflakes office_mcp server.py

# Manually launch the server from a clean shell (talks
# JSON-RPC on stdio; press Ctrl+C to exit).
python server.py

# Manually launch via the MCP Inspector for an interactive UI.
.venv/Scripts/python.exe -m mcp.cli inspector server.py

The services.yaml file at the project root pins the exact command strings (Windows PowerShell) used by the per-milestone scrutiny validator; if you add a new test entry point, add it there too.

License

MIT. See pyproject.toml for the canonical metadata.

Available Tools

47 tools
convert_documentA

Convert a .docx/.xlsx/.pptx file to pdf/html/csv.

Dispatches to the format-specific exporter based on the source file's extension and the requested target_format. When output is omitted, the output is written next to the source with the new extension (VAL-GEN-024).

Args: path: Path to an existing Office file. target_format: One of "pdf", "html", "csv". The match is case-insensitive and a leading dot is tolerated. output: Optional target path for the converted file. When None (default), a sibling of the input is used. Relative paths are resolved against folder (or the default folder). folder: Optional base folder for relative paths.

Returns: {"output_path": "<absolute path>", "format": <target>} where format is the lower-cased, dot-stripped target format (e.g. "pdf").

Raises: OfficeMCPError: ERR_INVALID_PARAMS for unknown target_format, ERR_FILE_NOT_FOUND if the source is missing, ERR_UNSUPPORTED_FMT for an unsupported (source, target) combination (e.g. .docx.csv, or any non-Office source), or any error propagated from :mod:office_mcp.exporters (ERR_LIBREOFFICE_MISSING, ERR_EXPORT_FAILED).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
target_formatYes
outputNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully bears the burden of behavioral disclosure. It details the output path behavior when omitted (VAL-GEN-024), relative path resolution against folder, error types for invalid parameters, missing files, unsupported formats, and LibreOffice issues. This comprehensive coverage exceeds typical expectations.

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 sections (Args, Returns, Raises) and concise sentences. However, it is somewhat lengthy; the error list could be shortened. Still, every sentence serves a purpose, and key information is front-loaded.

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 the tool's complexity (4 parameters, no schema descriptions, no annotations, but with output schema), the description covers purpose, parameter details, default behaviors, error scenarios, and return value. It is self-contained and leaves minimal gaps for an agent to infer.

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

Parameters5/5

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

Schema description coverage is 0%, meaning the input schema offers no parameter descriptions. The tool's description adds substantial meaning: explaining target_format case-insensitivity and leading dot acceptance, output default sibling path, relative path resolution via folder, and the return format. This completely compensates for the schema gap.

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 'convert' and specifies the resource: '.docx/.xlsx/.pptx' files to 'pdf/html/csv'. It distinguishes itself from sibling-specific export tools by mentioning dispatching to format-specific exporters and listing supported conversions, making its purpose unique 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 Guidelines4/5

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

The description explains when to use the tool (converting Office files) and lists supported target formats. It implies not to use for unsupported combinations by raising an error. However, it does not explicitly state when to use dedicated export tools (e.g., excel_export_pdf) versus this generic converter, leaving some ambiguity.

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

excel_add_chartA

Add a chart to a sheet, anchored at target_cell.

Supported chart_type values: "bar", "line", "pie", "area", "scatter". Any other value raises :class:OfficeMCPError with ERR_INVALID_PARAMS (VAL-EXCEL-056) and the workbook is not modified.

The chart's data is read from data_range (e.g. "A1:B5"); the first column is treated as categories and subsequent columns as series. The chart is anchored at target_cell (e.g. "D2") so its top-left corner coincides with that cell (VAL-EXCEL-052).

Args: path: Path to an existing .xlsx. sheet: Name of the sheet that will own the chart. chart_type: One of "bar", "line", "pie", "area", "scatter". data_range: A range reference like "A1:B5". target_cell: A single cell reference like "D2". The chart's top-left anchor is set to this cell. title: Optional chart title. When supplied, it is set via openpyxl's title API and survives a reload. folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_SHEET_NOT_FOUND for an unknown sheet, ERR_INVALID_PARAMS for an unknown chart_type or malformed data_range / target_cell, ERR_CELL_PARSE for a malformed range, ERR_UNSUPPORTED_FMT for non-.xlsx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sheetYes
chart_typeYes
data_rangeYes
target_cellYes
titleNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Despite no annotations, the description thoroughly discloses behavior: chart type validation with error, data interpretation, anchoring, return value, and all error conditions. This gives a complete operational model.

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 and front-loaded with the main action, but it is somewhat lengthy due to detailed parameter descriptions and error lists. Some conciseness could be gained, but it remains clear.

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 the complexity (7 parameters, no annotations, simple output schema), the description covers all necessary aspects: parameters, return value, error conditions, and data interpretation. It is complete for correct agent use.

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

Parameters5/5

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

Schema coverage is 0%, but the description provides comprehensive parameter explanations with examples, valid values, and behavioral implications for all 7 parameters (including optional ones). This fully compensates for the schema's lack of descriptions.

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 'Add' and resource 'chart to a sheet', with specific anchoring and supported chart types. It uniquely identifies the tool among siblings like excel_write_cell, making purpose unambiguous.

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?

The description provides clear context for adding a chart but does not explicitly specify when to avoid this tool or mention alternative tools. The purpose is well-defined, so usage is implied, but lacks explicit comparisons.

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

excel_create_sheetA

Append a new sheet to the workbook.

Args: path: Path to an existing .xlsx. name: Name of the new sheet. Must be non-empty and free of Excel-forbidden characters (: / \ ? * [ ]). folder: Optional base folder for relative paths.

Returns: {"index": <n>} where <n> is the position of the new sheet in wb.sheetnames (0-based).

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_INVALID_PARAMS for a duplicate or malformed name, ERR_UNSUPPORTED_FMT for non-.xlsx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
nameYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Without annotations, the description carries full behavioral burden. It discloses that the tool appends a sheet (not inserts), requires existing .xlsx, validates name characters, returns the sheet index, and raises specific errors. This is comprehensive, though it omits whether the file is modified in place or saved.

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 very concise with clearly labeled sections (Args, Returns, Raises). Each sentence serves a purpose and no unnecessary words are used. The structure aids readability.

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 the tool's moderate complexity, the description covers purpose, all parameters with constraints, return value structure, and error conditions. It is self-contained and sufficient for an agent to invoke correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description fully compensates. For 'path', it clarifies it must be an existing .xlsx. For 'name', it specifies non-empty and forbidden characters. For 'folder', it explains optional base for relative paths. This 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 a new sheet to the workbook.' This is a specific verb (append) and resource (new sheet), distinguishing it from sibling tools like delete, rename, or list sheets.

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 does not provide guidance on when to use this tool vs. alternatives, such as creating a workbook first or when to use other sheet operations. No when-not-to-use or contextual advice is given.

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

excel_create_workbookA

Create a new .xlsx file at path.

Args: path: Target .xlsx path. May be absolute or relative to folder (or to the default folder when folder is None). sheet_name: Optional name for the initial sheet. When None (the default), the openpyxl default "Sheet1" is used. folder: Optional base folder for relative paths.

Returns: {"path": "<absolute path>"}.

Raises: OfficeMCPError: ERR_INVALID_PARAMS if path is empty or a file already exists at the target (or the requested sheet name is malformed). ERR_UNSUPPORTED_FMT if path does not end in .xlsx.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sheet_nameNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses behavior: creates a file, parameters, return format, and specific error conditions (ERR_INVALID_PARAMS, ERR_UNSUPPORTED_FMT). No contradictions.

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?

Well-structured with Args, Returns, Raises sections. Every sentence is informative, though slightly verbose due to docstring format. Could be more compact but still efficient.

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 3 parameters and no output schema? Actually context says output schema exists, but description already specifies return format and errors. Fully covers input handling and edge cases.

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

Parameters5/5

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

Schema coverage is 0%, so description carries full burden. It provides complete semantics for all three parameters: path (absolute/relative), sheet_name (default), folder (base). Adds meaning beyond schema types.

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 explicitly states 'Create a new .xlsx file at path', clearly identifying the verb and resource. The tool is distinct from siblings like excel_create_sheet or word_create_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?

No explicit when-to-use or when-not-to-use guidance, but the purpose is so specific that usage is obvious. Lack of alternative mentions is acceptable given the clear domain.

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

excel_delete_sheetA

Remove a sheet from the workbook.

Refuses to delete the last remaining sheet (VAL-EXCEL-036 / VAL-EXCEL-037): the workbook must always have at least one sheet.

Args: path: Path to an existing .xlsx. name: Name of the sheet to delete. folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_SHEET_NOT_FOUND for an unknown sheet, ERR_INVALID_PARAMS when the target is the only remaining sheet, ERR_UNSUPPORTED_FMT for non-.xlsx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
nameYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses behavioral traits: the destructive nature, the constraint on the last sheet, specific error conditions, return value, and parameter details. It leaves no ambiguity about what the tool does.

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 concise, well-structured with a summary line, constraint, args, returns, and raises sections. Every sentence is useful and front-loaded.

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 the tool's complexity (3 params, output schema, no annotations), the description covers all necessary aspects: parameter meanings, return value, error types, and the critical constraint. It is complete for an agent to use correctly.

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?

The description adds meaningful explanations for each parameter beyond the schema (path, name, folder), compensating for the 0% schema description coverage. It could be improved with format examples.

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 action 'Remove a sheet from the workbook' and specifies a key constraint (refuses to delete the last sheet), which distinguishes it from siblings like excel_create_sheet or excel_rename_sheet.

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?

The description provides clear context on when to use (to delete a sheet) and explicitly warns against deleting the last remaining sheet. However, it does not explicitly mention alternative tools for other sheet operations.

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

excel_export_csvA

Export a sheet to CSV via :mod:openpyxl and the stdlib :mod:csv.

Delegates to :func:office_mcp.exporters.export_to_csv. The output is written as UTF-8 (without a BOM) and uses the standard Excel-friendly CSV dialect.

Args: path: Path to an existing .xlsx file. output: Target path for the produced .csv. The parent directory is created if it does not exist. If a relative path is given, it is resolved against folder (or the default folder). sheet: Optional sheet name. When None (the default), the workbook's first sheet is exported. folder: Optional base folder for relative paths.

Returns: {"output_path": "<absolute path of the produced CSV>"}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the source is missing, ERR_UNSUPPORTED_FMT for non-.xlsx sources, ERR_SHEET_NOT_FOUND for an unknown sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
outputYes
sheetNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that output is UTF-8 without BOM, uses standard CSV dialect, and describes error conditions (file not found, unsupported format, sheet not found). It does not explicitly state whether existing output files are overwritten, but the description is sufficiently transparent for common usage.

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 clear sections (description, Args, Returns, Raises). It is longer than necessary, including implementation details like openpyxl and office_mcp.exporters, which may not be essential for an AI agent. However, it is organized and front-loaded with the key action, meriting a 4.

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 4 parameters, 0% schema coverage, and an output schema, the description covers all critical aspects: input requirements, optional parameters, output format (absolute path of CSV), and error handling. It is complete enough for an AI agent to use correctly without additional context.

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

Parameters5/5

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

Schema coverage is 0% (per context signals), so the description must compensate. The Args section fully explains each parameter: path (required .xlsx file), output (target path with parent directory creation and relative path resolution), sheet (optional, defaults to first sheet), and folder (optional base for relative paths). This adds significant meaning beyond the bare 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 the tool's purpose: 'Export a sheet to CSV'. It uses a specific verb ('Export') and resource ('sheet to CSV'), and distinguishes from sibling tools like excel_export_html and excel_export_pdf which have different output formats. The reference to openpyxl and stdlib csv provides implementation context but the core purpose is clear.

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 explains when to use the tool (to export an .xlsx sheet to CSV) and provides details about optional sheet selection and folder resolution. However, it does not explicitly state when not to use this tool or mention alternatives (e.g., other export formats). The usage context is implied but not exhaustive, so a score of 3 is appropriate.

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

excel_export_htmlA

Convert a .xlsx file to HTML via LibreOffice headless.

Delegates to :func:office_mcp.exporters.export_to_html. Unlike the Word variant this path always goes through LibreOffice (openpyxl does not produce standalone HTML).

Args: path: Path to an existing .xlsx file. output: Target path for the produced HTML. The parent directory is created if it does not exist. If a relative path is given, it is resolved against folder (or the default folder). folder: Optional base folder for relative paths.

Returns: {"output_path": "<absolute path of the produced HTML>"}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the source is missing, ERR_UNSUPPORTED_FMT for non-.xlsx sources, ERR_LIBREOFFICE_MISSING when soffice is not on PATH, ERR_EXPORT_FAILED for any other failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
outputYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Without annotations, the description details the conversion process, delegating to an internal function, and lists multiple error types (file not found, unsupported format, missing LibreOffice, export failure). It does not mention if the tool is read-only or if it overwrites existing files, which are minor gaps.

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 well-structured with clear sections (main description, Args, Returns, Raises). Each sentence adds value, and it is appropriately detailed without being verbose.

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 the tool's complexity (external dependency, conversion), the description covers the main aspects: purpose, parameters, return value, and error handling. It lacks details on HTML format or performance limitations, but overall it is fairly comprehensive.

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

Parameters5/5

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

Schema description coverage is 0%, so the description's Args section is crucial. It provides clear semantics for all three parameters: path (existing .xlsx), output (target path with parent directory creation), and folder (optional base folder). This fully compensates for the lack of schema descriptions.

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 explicitly states 'Convert a .xlsx file to HTML via LibreOffice headless', providing a specific verb and resource. It also differentiates from the Word variant, clarifying the unique method used.

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?

The description mentions the Word variant and notes that this tool always uses LibreOffice, implying its specific use case. However, it does not explicitly list sibling tools or provide explicit when-to-use vs. alternatives, leaving some ambiguity.

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

excel_export_pdfA

Convert a .xlsx file to PDF via LibreOffice headless.

Delegates to :func:office_mcp.exporters.export_to_pdf. A unique -env:UserInstallation is used per call so multiple exports can run concurrently.

Args: path: Path to an existing .xlsx file. output: Target path for the produced PDF. The parent directory is created if it does not exist. If a relative path is given, it is resolved against folder (or the default folder). folder: Optional base folder for relative paths.

Returns: {"output_path": "<absolute path of the produced PDF>"}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the source is missing, ERR_UNSUPPORTED_FMT for non-.xlsx sources, ERR_LIBREOFFICE_MISSING when soffice is not on PATH, ERR_EXPORT_FAILED for any other failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
outputYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: it uses LibreOffice headless, employs a unique per-call user installation for concurrency, creates parent directories for output, and raises specific errors. This exceeds typical 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 well-structured with summary, Args, Returns, and Raises sections. Every sentence is informative and necessary, with no wasted words. It is both concise and comprehensive.

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 the complexity of the tool and the rich sibling context, the description covers purpose, parameters, return format, concurrency behavior, and error conditions. It is fully sufficient for an agent to select and invoke the tool correctly.

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

Parameters5/5

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

Despite 0% schema description coverage, the description thoroughly explains each parameter: path is an existing .xlsx, output is target path with directory creation and relative resolution against folder, and folder is an optional base. This adds critical 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 explicitly states 'Convert a .xlsx file to PDF via LibreOffice headless,' providing a specific verb and resource. It clearly distinguishes this tool from other export tools like excel_export_csv and convert_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?

The description implies when to use this tool (for .xlsx to PDF conversion) and notes prerequisites (LibreOffice on PATH), but it does not explicitly exclude other tools or provide alternative recommendations. The Raises section lists error conditions that help guide usage.

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

excel_format_cellsA

Apply font, fill, border, alignment, and number-format to a range.

Each formatting argument is None by default and is treated as "do not change". When every formatting argument is None, the call is a true no-op: the file is not re-saved, so its SHA256 and mtime are preserved (VAL-EXCEL-049).

Args: path: Path to an existing .xlsx. sheet: Name of the sheet to format. cell_range: A cell reference ("A1") or a range ("A1:C3"). Column letters may be upper or lower case. bold: True / False to set font.bold, or None to leave it alone. italic: Same semantics as bold for font.italic. font_name: A font family name (e.g. "Arial"). font_size: Point size (e.g. 14). font_color: Hex RGB string ("FF0000"). fill_color: Hex RGB string for the cell background. border: Either a single style name applied to all four sides ("thin", "medium", "thick", "dashed", "dotted", "double", "hair") or a dict mapping "left" / "right" / "top" / "bottom" to a style name. alignment: "left" / "center" / "right" / "justify" / "general" for Alignment.horizontal. number_format: An Excel number format code (e.g. "0.00%", "#,##0.00", "yyyy-mm-dd"). folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_SHEET_NOT_FOUND for an unknown sheet, ERR_CELL_PARSE for a malformed range, ERR_INVALID_PARAMS for an unknown border style or alignment, ERR_UNSUPPORTED_FMT for non-.xlsx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sheetYes
cell_rangeYes
boldNo
italicNo
font_nameNo
font_sizeNo
font_colorNo
fill_colorNo
borderNo
alignmentNo
number_formatNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Given no annotations, the description fully discloses behavior: None means 'do not change', all None leads to no-op preserving SHA256 and mtime, and lists possible errors. This is highly transparent.

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 well-structured with a clear header, numbered args with format, and separate sections for returns and raises. No unnecessary text; every sentence adds value.

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?

Despite 13 parameters and complexity, the description covers all aspects: no-op behavior, each parameter's format, return value, and all error types. Output schema exists but description still provides return shape. Complete for an agent to use.

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

Parameters5/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 fully explain each parameter. It does so with detail: border can be string or dict, alignment values, number_format examples, etc. Adds significant meaning beyond the schema's type and title.

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 applies font, fill, border, alignment, and number-format to a range, which is distinct from sibling tools like excel_write_cell (which writes values) and excel_format_cells is the only formatting tool among siblings.

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?

The description explains the behavior of None parameters and no-op case, but does not explicitly state when to use this tool vs. alternative tools like excel_write_cell or excel_write_range. However, the tool's purpose is self-evident given sibling names.

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

excel_get_infoA

Return a summary of the workbook's sheets and sizes.

The returned dict contains:

  • path — absolute path of the file on disk.

  • sheets — list of one dict per sheet, in insertion order. Each entry has name (str), index (int, 0-based), rows (int, openpyxl's max_row), and cols (int, openpyxl's max_column).

Args: path: Path to an existing .xlsx. folder: Optional base folder for relative paths.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.xlsx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It fully discloses the return structure and error types (ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT). It implies the tool is read-only by describing a summary retrieval, though it does not explicitly state 'read-only' or mention side effects. This is sufficient for clarity, earning a high but not perfect score.

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 clear sections (Return structure, Args, Raises). However, it is slightly verbose, especially in the detailed dict layout, which could be shortened without losing clarity. The front-loading of the return type is effective, but the Args part is redundant with the schema.

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 the tool's complexity (simple info retrieval), the description covers the return value fully (aided by output schema), parameter semantics, and error conditions. It does not discuss permissions or rate limits, but these are not critical for this tool. The presence of an output schema reduces the burden on the description, making it sufficiently complete.

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

Parameters5/5

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

Schema description coverage is 0%, yet the description adds detailed semantics: 'path' is described as 'Path to an existing .xlsx' and 'folder' as 'Optional base folder for relative paths.' This fully compensates for the schema's lack of descriptions, providing agents with clear guidance on parameter usage beyond the type definition.

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 it returns a summary of the workbook's sheets and sizes. The description specifies the exact structure of the return value and distinguishes it from siblings like excel_list_sheets by focusing on comprehensive sheet metadata. It uses specific verbs and resources, making the tool's purpose 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 implicitly explains when to use this tool (to get structured info about all sheets), but it does not explicitly contrast with alternatives such as excel_list_sheets or excel_read_sheet. No 'when not to use' or alternative recommendations are provided, leaving the agent to infer context from sibling names.

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

excel_list_sheetsA

Return one dict per sheet in the workbook (insertion order).

Each entry is identical to those in :func:excel_get_info['sheets'].

Args: path: Path to an existing .xlsx. folder: Optional base folder for relative paths.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.xlsx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It mentions return structure and errors, but does not explicitly state it is read-only or disclose other behavioral traits like file locking, leaving some gaps.

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 tightly structured with a clear main sentence, bullet-line args, and raises section, front-loading the purpose without extraneous text.

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 the output schema exists, the description adequately covers return structure (identical to excel_get_info sheets) and errors, though missing edge cases like empty workbook could be noted.

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

Parameters5/5

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

Despite 0% schema coverage, the description fully explains both parameters—path as existing .xlsx and folder for relative paths—adding significant value 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 it returns one dict per sheet in insertion order and compares to excel_get_info, making the purpose specific and differentiating it from sibling tools like excel_get_info.

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?

While it hints at when to use by comparing to excel_get_info, there is no explicit guidance on when to use this tool over alternatives or 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.

excel_read_sheetA

Read cell values from a sheet, optionally limited to a range.

Args: path: Path to an existing .xlsx. sheet: Name of the sheet to read. range: Optional cell or range reference. Accepts:

    * ``None`` — read the entire used range
      (``ws.max_row`` × ``ws.max_column``).
    * ``"A1"`` — read a single cell; the result is a 1x1 list
      ``[[value]]``.
    * ``"A1:C3"`` — read a rectangular range. Reversed ranges
      (``"C3:A1"``) are rejected.

    Column letters may be lower-case or upper-case.
folder: Optional base folder for relative paths.

Returns: A 2D list of values. Empty cells (None) are normalised to the empty string "" so the result is JSON-friendly.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_SHEET_NOT_FOUND if sheet is not in the workbook, ERR_CELL_PARSE for malformed range, ERR_UNSUPPORTED_FMT for non-.xlsx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sheetYes
rangeNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses behavior: how range inputs are interpreted (None, single cell, rectangle), case sensitivity, normalization of empty cells to empty string, return format (2D list), and error conditions. This exceeds expectations.

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 well-structured with a brief main sentence, followed by clear Args, Returns, and Raises sections. Every sentence adds value without redundancy.

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 the tool's complexity (4 parameters, no annotations, output schema present), the description covers all necessary aspects: parameter usage, return format details, and error handling. It leaves no gaps.

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

Parameters5/5

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

Schema description coverage is 0%, so the description compensates by detailing each parameter: 'path' (path to .xlsx), 'sheet' (sheet name), 'range' (with examples and notes), and 'folder' (base folder for relative paths). This adds significant meaning beyond the schema names.

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 'Read cell values from a sheet, optionally limited to a range.' It identifies the resource (sheet) and action (read), distinguishing it from sibling tools like excel_write_cell or excel_get_info.

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?

The description explains when to use the range parameter and its various forms, but does not explicitly state when not to use this tool versus alternatives. However, the context is clear for a read-only operation.

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

excel_rename_sheetA

Rename a sheet in the workbook.

Cell contents are preserved across the rename (VAL-EXCEL-042). Renaming a sheet to its own name is a no-op (the file is still saved, but the sheet names are unchanged — VAL-EXCEL-041).

Args: path: Path to an existing .xlsx. old_name: Current name of the sheet to rename. new_name: Desired new name. Must be non-empty and free of Excel-forbidden characters. folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_SHEET_NOT_FOUND for an unknown old_name, ERR_INVALID_PARAMS when new_name is empty, contains forbidden characters, or already exists as another sheet, ERR_UNSUPPORTED_FMT for non-.xlsx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
old_nameYes
new_nameYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries full burden. It discloses that cell contents are preserved, renaming to the same name is a no-op, and the file is saved even then. It also enumerates all possible errors (file not found, sheet not found, invalid params) with specific error codes, providing comprehensive behavioral insight.

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 well-structured: a one-line summary followed by clearly labeled argument descriptions and a returns/raises section. Every sentence adds value, including the edge-case notes and error enumerations. There is no fluff.

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 the tool's simplicity, the description is complete. It covers all parameters, return value, error conditions, and important behaviors (preserving cell contents, no-op case). With an output schema implied, the return format is explained sufficiently.

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

Parameters5/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 does so exceptionally: for each parameter (path, old_name, new_name, folder), it adds meaningful details such as constraints (new_name must be non-empty and free of forbidden characters) and defaults. This goes far beyond the schema's bare type/title information.

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 renames a sheet in a workbook. The verb 'Rename' and resource 'sheet in the workbook' are specific, and the tool is easily distinguished from siblings like excel_create_sheet, excel_delete_sheet, or excel_list_sheets.

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 usage is implied: use this tool when you want to rename an existing sheet. However, there is no explicit mention of when to use this tool versus alternatives (e.g., create, delete, or list sheets), nor are there any exclusions or conditions provided.

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

excel_write_cellA

Write a single value to one cell.

Strings starting with = are persisted as formulas (VAL-EXCEL-022). Other types (int, float, bool, None) are written verbatim via :meth:openpyxl.cell.Cell.value.

Args: path: Path to an existing .xlsx. sheet: Name of the sheet. cell: A single cell reference like "A1". value: Value to write. folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_SHEET_NOT_FOUND for an unknown sheet, ERR_CELL_PARSE for a malformed cell, ERR_UNSUPPORTED_FMT for non-.xlsx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sheetYes
cellYes
valueYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: formula handling (strings starting with '='), type handling (int, float, bool, None), error cases (ERR_FILE_NOT_FOUND, etc.), and return value. This is comprehensive.

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 opening sentence followed by Args, Returns, and Raises sections. While informative, it is slightly verbose due to exhaustive error documentation, but every sentence adds value.

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?

The description covers all necessary context: what the tool does, parameter details, return value, and error conditions. Although an output schema exists (not shown), the description adequately describes the return format. No gaps remain.

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

Parameters5/5

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

Despite 0% schema description coverage, the description's Args section explains each parameter's purpose and constraints. It clarifies that 'value' supports multiple types and that 'folder' is optional. This compensates fully for the schema gap.

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 writes a single value to one cell. It distinguishes itself from sibling tools like 'excel_write_range' by specifically targeting single cell operations. The verb 'write' and resource 'single cell' are precise.

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 use for single cell writes, but does not explicitly state when to use this tool versus alternatives like 'excel_write_range'. No exclusion or when-not-to-use guidance is provided.

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

excel_write_rangeA

Write a 2D list of values starting at start_cell.

The data is interpreted in row-major order: data[0][0] goes to start_cell, data[0][1] to the cell one column to the right, data[1][0] to the cell one row below, and so on. Writing extends the sheet's used range as needed (VAL-EXCEL-027).

Args: path: Path to an existing .xlsx. sheet: Name of the sheet. start_cell: Top-left cell of the write region (e.g. "A1"). data: 2D list of values. The empty list [] is accepted and is a no-op (the file is still saved; the workbook remains valid). folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_SHEET_NOT_FOUND for an unknown sheet, ERR_CELL_PARSE for a malformed start_cell, ERR_INVALID_PARAMS if data is not a list, ERR_UNSUPPORTED_FMT for non-.xlsx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
sheetYes
start_cellYes
dataYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses behavioral traits: data interpretation in row-major order, extension of the used range, handling of empty list as no-op, and specific error types. This is comprehensive and beyond minimal requirements.

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 Args, Returns, and Raises sections. It is informative and front-loaded with the main action. While slightly verbose, every sentence serves a purpose, and it is appropriately sized for the complexity of the tool.

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 the tool's complexity (five parameters, error handling, output schema existence), the description is complete. It covers all necessary aspects: parameters, behavior, return value, and error conditions. The output schema is mentioned indirectly, but the description does not need to detail it further.

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?

The description adds meaning to all five parameters beyond the input schema. It specifies that 'path' is for an existing .xlsx, 'sheet' is the sheet name, 'start_cell' is top-left like 'A1', 'data' is a 2D list, and 'folder' is optional for relative paths. This compensates for the 0% schema description coverage.

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 'Write a 2D list of values starting at start_cell.' The verb 'Write' and resource 'excel range' are specific, and the explanation of row-major order distinguishes it from other tools like excel_write_cell or excel_read_sheet.

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?

The description provides clear context for when to use this tool (writing a 2D array to an Excel range) but does not explicitly mention when not to use it or alternatives. The behavior is well explained, but no direct comparison to sibling tools.

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

get_document_infoA

Return metadata for a single Office file.

Detects the format by extension and dispatches to the format-specific *_get_info tool. The returned dict is a superset of the underlying tool's dict, augmented with type ("word" / "excel" / "pptx") and size_bytes.

Args: path: Path to an existing Office file (abs or relative to folder/default folder). folder: Optional base folder for relative paths.

Returns: A dict with:

* ``type`` — one of ``"word"``, ``"excel"``, ``"pptx"``.
* ``size_bytes`` — file size in bytes.
* Format-specific fields: for ``.docx`` →
  ``paragraphs``, ``sections``, ``tables``, ``images``,
  ``properties``; for ``.xlsx`` → ``sheets`` (list),
  ``sheet_count``, ``sheet_names``; for ``.pptx`` →
  ``slide_count``, ``layouts``, ``dimensions_inches`` (with
  ``width_inches`` / ``height_inches``).

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing (VAL-GEN-010), ERR_UNSUPPORTED_FMT if the extension is not one of .docx / .xlsx / .pptx.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/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 detection by extension, dispatching logic, and the returned dict structure including format-specific fields. It does not mention side effects, but for a read-only metadata tool this is sufficient.

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 purpose statement, dispatching note, Args, Returns, and Raises sections. It is fairly concise but could be slightly trimmed; overall efficient and front-loaded.

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 the tool's complexity (2 params, output schema exists, many siblings), the description is thorough: it covers return values for all formats, error types, and explains dispatching. 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?

Despite 0% schema description coverage, the Args section adds meaning: path is described as an absolute or relative path to an existing Office file, folder as an optional base folder. This compensates for the schema's lack of descriptions.

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 returns metadata for a single Office file, specifies it dispatches to format-specific tools, and distinguishes from siblings like list_documents and format-specific get_info tools by mentioning the superset dict with type and size_bytes.

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?

The description explains when to use (for metadata of an Office file by path) and indirectly suggests when not to use by noting it dispatches to format-specific tools, implying those provide more detail. However, it lacks explicit exclusions or alternatives for other tools.

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

list_documentsA

List all Office files in a folder (non-recursive).

Scans the immediate children of folder and returns one entry per file with extension .docx/.xlsx/.pptx. Non-Office files (and subdirectories) are filtered out. The scan does not descend into subdirectories.

Args: folder: Folder to scan. When None (default), the default folder from :func:office_mcp.config.get_default_folder is used. Relative paths are joined with the default folder.

Returns: A list of dicts, each with:

* ``path`` — absolute, canonical path to the file.
* ``name`` — file basename (e.g. ``"report.docx"``).
* ``type`` — one of ``"word"``, ``"excel"``, ``"pptx"``.
* ``size_bytes`` — file size on disk (positive int).
* ``modified`` — ISO-8601 timestamp of last modification
  (``datetime.fromisoformat``-parseable, with timezone).

An empty folder returns ``[]`` (``VAL-GEN-002``).

Raises: OfficeMCPError: ERR_INVALID_PARAMS if folder exists but is not a directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses behavioral traits: non-recursive scanning, default folder handling, relative path resolution, and error behavior (ERR_INVALID_PARAMS). No contradictions are present.

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 concise yet complete: a one-line summary followed by detailed Args, Returns (with field descriptions), and Raises sections. Every sentence provides necessary information without redundancy.

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 the tool's simplicity (one optional parameter, no nested objects, output schema exists), the description covers all relevant aspects: input behavior, output structure, error conditions, and edge cases (empty folder returns []). It is fully complete.

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

Parameters5/5

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

The schema has 0% coverage for the single parameter 'folder'. The description compensates thoroughly by explaining its default (None → default folder), how relative paths are resolved, and that it must be a directory or raises an error.

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 precisely states it lists Office files (.docx/.xlsx/.pptx) in a folder non-recursively, filtering out non-Office files and subdirectories. This clearly distinguishes it from sibling tools that handle conversion, creation, or editing of individual document types.

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?

The description clearly indicates when to use the tool (to list Office files in a folder) and what it does not do (non-recursive, filtering). While it does not explicitly mention alternatives or when to avoid using it, the context is sufficient given the sibling tool names are distinct.

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

pptx_add_chartA

Add a chart to a slide.

The data argument must follow the structure documented in :func:_build_chart_data: a dict with "categories" (list of x-axis labels) and "series" (list of {"name", "values"} dicts).

Args: path: Path to an existing .pptx. chart_type: One of column, bar, line, pie, etc. — see :data:_CHART_TYPE_MAP. (VAL-PPTX-051, VAL-PPTX-052.) data: Chart data structure with categories and series keys (VAL-PPTX-051). x: Left edge in inches. y: Top edge in inches. w: Width in inches. h: Height in inches. slide: 0-based slide index (VAL-PPTX-055). folder: Optional base folder for relative paths.

Returns: {"shape_index": <int>} — 0-based index of the new chart within the slide's shape list.

Raises: OfficeMCPError: ERR_INVALID_PARAMS for unknown chart_type (VAL-PPTX-053), empty series (VAL-PPTX-054), out-of-range slide (VAL-PPTX-055), or non-numeric geometry; ERR_FILE_NOT_FOUND if the file is missing; ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
chart_typeYes
dataYes
xYes
yYes
wYes
hYes
slideNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully carries the burden. It details return values (shape_index), raised errors with specific codes (ERR_INVALID_PARAMS, ERR_FILE_NOT_FOUND, etc.), and conditions for each error.

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 Args, Returns, Raises sections. Slightly lengthy due to detailed parameters, but every sentence adds value. Could be slightly more concise.

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 9 parameters (7 required), nested objects, and no output schema in structured form, the description covers input, output, errors, and parameter details comprehensively. It is complete.

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

Parameters5/5

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

The schema has 0% description coverage, so the description adds crucial meaning. It explains the data structure, chart_type options, geometry parameters, and optional folder. It goes well 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 'Add a chart to a slide', using a specific verb and resource. It distinguishes itself from sibling tools like pptx_add_image or pptx_add_shape by focusing on charts.

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?

The description explains when to use the tool (to add a chart) and provides detailed parameter guidance. However, it does not explicitly mention when not to use it or compare with alternatives like excel_add_chart.

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

pptx_add_imageA

Add an image to a slide at the given inch coordinates.

The w / h arguments control the rendered size:

  • Both given — the picture is stretched to exactly those dimensions (VAL-PPTX-036).

  • Only w given — h is computed from the image's intrinsic aspect ratio (VAL-PPTX-038). Aspect ratio preserved within 1% tolerance.

  • Only h given — w is computed from the image's intrinsic aspect ratio (VAL-PPTX-039).

  • Neither given — the picture is rendered at its natural pixel size at 96 DPI (VAL-PPTX-037).

Args: path: Path to an existing .pptx. image_path: Path to the image to embed (any format python-pptx can read: PNG, JPEG, GIF, BMP, TIFF). x: Left edge in inches. y: Top edge in inches. w: Optional width in inches. None = compute from aspect ratio (when h is given) or use natural size. h: Optional height in inches. None = compute from aspect ratio (when w is given) or use natural size. slide: 0-based slide index. folder: Optional base folder for relative paths. Used for both the deck and the image path.

Returns: {"shape_index": <int>} — 0-based index of the new picture within the slide's shape list.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if either the deck or the image file is missing (VAL-PPTX-040); ERR_INVALID_PARAMS for out-of-range slide (VAL-PPTX-041) or non-numeric geometry; ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
image_pathYes
xYes
yYes
wNo
hNo
slideNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description covers key behaviors: size handling, return value (shape_index), and error conditions. It could be more explicit about file modification (assumed) but is otherwise comprehensive.

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 sections and bullet points, front-loading the purpose. It is somewhat verbose with validation codes (VAL-PPTX-*), but every sentence adds value for parameter behavior.

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 the output schema and 8 parameters, the description covers all aspects: parameter behavior, return value, error conditions. It is complete for an AI agent to invoke correctly.

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 fully: all 8 parameters are explained with units, optionality, and behavior (e.g., w/h logic, folder for relative paths). This 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 the verb 'add', resource 'image to a slide', and specifies coordinates. It distinguishes from sibling tools like pptx_add_shape and pptx_add_text_box by targeting images only.

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?

The description provides detailed guidelines for parameter usage, especially the w/h logic (stretch, aspect ratio, natural size). However, it does not explicitly contrast with alternatives or indicate when not to use this tool.

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

pptx_add_shapeA

Add a shape (rectangle, oval, etc.) to a slide.

shape_type is one of the case-insensitive names mapped by :data:_SHAPE_TYPE_MAP — the supported set covers the most common MSO_SHAPE members (VAL-PPTX-042 for rectangle, VAL-PPTX-043 for oval and rounded rectangle). An unknown type returns ERR_INVALID_PARAMS and the deck is left unchanged (VAL-PPTX-044).

Args: path: Path to an existing .pptx. shape_type: Shape type (e.g. "rectangle", "oval", "rounded_rectangle"). See :data:_SHAPE_TYPE_MAP. x: Left edge in inches. y: Top edge in inches. w: Width in inches. h: Height in inches. slide: 0-based slide index (VAL-PPTX-045). folder: Optional base folder for relative paths. text: Optional text to put inside the shape's text frame.

Returns: {"shape_index": <int>} — 0-based index of the new shape within the slide's shape list.

Raises: OfficeMCPError: ERR_INVALID_PARAMS for an unknown shape type, out-of-range slide, or non-numeric geometry; ERR_FILE_NOT_FOUND if the file is missing; ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
shape_typeYes
xYes
yYes
wYes
hYes
slideNo
folderNo
textNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully covers behavioral traits: it adds a shape, describes unknown shape type behavior (error, deck unchanged), and lists all possible errors (ERR_INVALID_PARAMS, ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT).

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 structured with a brief summary, Args/Returns/Raises sections, and front-loads purpose. It is slightly verbose but well-organized.

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?

For a tool with 9 parameters and no enums, the description covers all parameters, errors, and return value (shape_index). It is complete given the complexity and presence of an output schema.

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

Parameters5/5

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

Despite 0% schema description coverage, the description explains each parameter in detail (e.g., shape_type with examples, x/y/w/h in inches, slide as 0-based index), fully compensating for the schema's lack of descriptions.

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 'add' and the resource 'shape (rectangle, oval, etc.) to a slide', distinguishing it from sibling tools like pptx_add_image, pptx_add_text_box, etc.

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?

The description provides useful context on shape type support and error handling but does not explicitly enumerate when to use this tool over alternatives; however, the sibling tools are distinct enough that implicit differentiation is adequate.

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

pptx_add_slideA

Append a new slide to the deck.

The slide is always appended to the end (VAL-PPTX-018 — the returned index equals the previous slide count). When title is given, the slide's title placeholder is populated (VAL-PPTX-021).

Args: path: Path to an existing .pptx. layout_index: 0-based index into prs.slide_layouts. The default 1 is the "Title and Content" layout in python-pptx's default template. title: Optional title text. When None the title placeholder is left empty. folder: Optional base folder for relative paths.

Returns: {"index": <int>} — the 0-based index of the new slide.

Raises: OfficeMCPError: ERR_INVALID_PARAMS for a non-int or out-of-range layout_index (the deck is not modified in this case — VAL-PPTX-020), ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
layout_indexNo
titleNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/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 full burden. It discloses that slides are always appended, the returned index equals previous count, title populates placeholder, and errors like out-of-range layout_index do not modify the deck. This is comprehensive for behavioral transparency.

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 structured with sections for args, returns, raises, and behavioral notes. It is slightly verbose but every sentence is informative. No fluff.

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 schema coverage and no output schema, the description fully covers parameters, return value, and error conditions. It also includes behavioral details like VAL-PPTX-018 and VAL-PPTX-021. Complete for this tool's complexity.

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 must add meaning. It explains each parameter: path is path to .pptx, layout_index is 0-based with default 1 being 'Title and Content', title optional, folder optional. This adds significant value 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 the tool appends a new slide to the deck, distinguishing it from other pptx_add_* siblings. The verb 'Append' and resource 'slide' are specific.

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 explains what the tool does but does not explicitly guide when to use this tool versus alternatives like pptx_add_shape or pptx_add_table. Usage context is implied but no exclusions or alternatives are mentioned.

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

pptx_add_tableA

Add a table to a slide.

When data is None the table is created with every cell empty (VAL-PPTX-047). When data is shorter than rows x cols the missing cells are padded with empty strings (VAL-PPTX-048). All cell values are coerced to str before being written.

Args: path: Path to an existing .pptx. rows: Number of rows (must be > 0; VAL-PPTX-050). cols: Number of columns (must be > 0). x: Left edge in inches. y: Top edge in inches. w: Width in inches. h: Height in inches. slide: 0-based slide index (VAL-PPTX-049). folder: Optional base folder for relative paths. data: Optional 2D list of cell values, row-major.

Returns: {"shape_index": <int>} — 0-based index of the new table within the slide's shape list.

Raises: OfficeMCPError: ERR_INVALID_PARAMS for non-positive rows / cols (VAL-PPTX-050), out-of-range slide (VAL-PPTX-049), or non-numeric geometry; ERR_FILE_NOT_FOUND if the file is missing; ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
rowsYes
colsYes
xYes
yYes
wYes
hYes
slideNo
folderNo
dataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description compensates fully. It explains behavior for various scenarios: data None, short data, cell value coercion to str. It also details errors raised (ERR_INVALID_PARAMS, ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT) and specifies validation codes (VAL-PPTX-047-050). This provides complete transparency.

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 standard docstring sections (description, Args, Returns, Raises). It is appropriately sized for the tool's complexity (10 parameters). Could be slightly more concise, but every sentence adds value. No unnecessary repetition.

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 the tool has 10 parameters with no annotations and an output schema, the description covers all needed context: parameter semantics, edge cases, error handling, and return value format. It is complete for an agent to correctly use the tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description bears the full burden. It explains each parameter in the Args section: path (existing .pptx), rows/cols (>0), geometry in inches, slide (0-based), folder (optional), data (optional 2D list). It adds meaning beyond the schema, such as constraints and validation codes, making it highly informative.

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 'Add a table to a slide' with a specific verb and resource. It distinguishes itself from sibling tools like pptx_add_chart or pptx_add_image by focusing on table addition. The title and name reinforce this purpose.

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?

The description provides detailed usage guidelines, such as when data is None (empty cells) or when data is shorter (padding with empty strings). It also mentions validation error codes. However, it does not explicitly instruct when to use this tool versus alternatives (e.g., when to choose pptx_add_table over others), which is reasonable given the sibling list is diverse.

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

pptx_add_text_boxA

Add a text box with optional font properties to a slide.

The text box is appended to the slide's shape list and its 0-based index within that slide is returned (VAL-PPTX-031). When font_size / bold / italic / font_name / color are given, they are applied to the text box's first run (VAL-PPTX-032); when any of them is None the corresponding attribute is left at the layout / default value.

Args: path: Path to an existing .pptx. text: Text to put inside the text box. x: Left edge in inches (e.g. 1.0). y: Top edge in inches (e.g. 2.0). w: Width in inches (e.g. 3.0). h: Height in inches (e.g. 0.5). slide: 0-based slide index (VAL-PPTX-034). folder: Optional base folder for relative paths. font_size: Optional font size in points (VAL-PPTX-032). bold: Optional bold flag (VAL-PPTX-032). italic: Optional italic flag. font_name: Optional font name (e.g. "Arial"). color: Optional hex color string ("FF0000").

Returns: {"shape_index": <int>} — 0-based index of the new text box within the slide's shape list.

Raises: OfficeMCPError: ERR_INVALID_PARAMS for non-numeric or out-of-range geometry, out-of-range slide, or invalid color; ERR_FILE_NOT_FOUND if the file is missing; ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
textYes
xYes
yYes
wYes
hYes
slideNo
folderNo
font_sizeNo
boldNo
italicNo
font_nameNo
colorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It explains that the text box is appended to the slide's shape list, returns a 0-based index, and details font property application behavior (first run, None leaves default). It also lists error conditions and validation codes. However, it doesn't clarify whether the modification is auto-saved or requires a separate save step.

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 clear Args, Returns, and Raises sections. It front-loads the main action. While it is somewhat long, each sentence adds value; minor redundancy could be trimmed (e.g., repeating 'VAL-PPTX codes'), but overall it's efficient.

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 13 parameters, 0% schema coverage, and no annotations, the description covers all aspects: parameter details, return format, error types. It lacks mention of save behavior or undo capability, but otherwise it is sufficiently complete for an agent to use correctly.

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

Parameters5/5

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

Schema coverage is 0%, so the description compensates fully. Every parameter is explained with type, default, and often examples (e.g., inches for geometry, hex for color). The description adds meaning beyond the raw schema, including validation codes and behavior when optional params are None.

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 'Add a text box with optional font properties to a slide,' using a specific verb and resource. It distinguishes from sibling tools like pptx_add_image, pptx_add_shape, and pptx_add_table by explicitly naming the object type (text box) and its purpose.

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 does not provide any guidance on when to use this tool versus alternatives (e.g., when to add a text box vs. a shape or image). It lacks explicit context about prerequisites, such as whether a slide must exist, and no exclusion criteria or when-not-to-use statements.

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

pptx_create_presentationA

Create a new .pptx file at path, optionally with a title slide.

Args: path: Target .pptx path. May be absolute or relative to folder (or to the default folder when folder is None). title: Optional text for the first slide's title placeholder. When None (the default), the file is created with no slides at all (VAL-PPTX-002). When a non-empty title is given, a single slide is appended using the "Title Slide" layout (index 0) and the title is written into its title placeholder (VAL-PPTX-001). folder: Optional base folder for relative paths.

Returns: {"path": "<absolute path>"}.

Raises: OfficeMCPError: ERR_INVALID_PARAMS if path is empty or a file already exists at the target, ERR_UNSUPPORTED_FMT if path does not end in .pptx.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
titleNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

No annotations provided, description carries full burden. Discloses error conditions (empty path, existing file, unsupported format), return value, and slide creation logic. Fully transparent.

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?

Well-structured with Args/Returns/Raises, but includes internal error codes (VAL-PPTX-001) that may add noise. Could be slightly more concise.

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?

With output schema present, description covers return value, all parameters, and errors. No gaps for a creation tool.

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

Parameters5/5

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

Input schema has 0% description coverage; description compensates by detailing path (absolute/relative), title (None vs non-empty), and folder as base for relative paths.

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 it creates a new .pptx file, optionally with a title slide. Differentiates from siblings like pptx_add_slide which modify existing presentations.

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?

Explains behavior of title parameter (when to create slide vs no slides). Implicitly differentiated from siblings, but lacks explicit 'use this for creation, use pptx_add_slide for adding slides'.

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

pptx_delete_slideA

Remove a slide from the deck.

Refuses to delete the last remaining slide (VAL-PPTX-024): the deck must always have at least one slide. After deletion the remaining slides keep their relative order, but indices past index shift down by one (VAL-PPTX-023 / -026).

Args: path: Path to an existing .pptx. index: 0-based slide index. folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Raises: OfficeMCPError: ERR_INVALID_PARAMS for a non-int or out-of-range index, or when the deck has only one slide; ERR_FILE_NOT_FOUND if the file is missing; ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
indexYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Details key behaviors: last-slide protection, re-indexing, error conditions. No annotations provided, so description fully covers transparency.

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?

Well-organized with Args/Returns/Raises. Somewhat verbose with validation codes but still efficient overall.

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?

Covers all relevant details: parameters, return value, errors, edge cases. Output schema is present but description still provides complete context.

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

Parameters5/5

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

Description explains each parameter's meaning (path: existing .pptx, index: 0-based, folder: optional base folder), adding value beyond the raw 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?

Clearly states the tool removes a slide from the deck. Distinct from sibling tools like pptx_add_slide or pptx_reorder_slides.

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?

Explicitly refuses to delete the last slide, guiding correct usage. Could mention when to use vs. alternative deletion methods, but still clear.

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

pptx_export_htmlA

Convert a .pptx file to HTML via LibreOffice headless.

Delegates to :func:office_mcp.exporters.export_to_html. Unlike .docx (which uses mammoth), .pptx always requires LibreOffice (VAL-PPTX-062).

Args: path: Path to an existing .pptx. output: Target path for the produced HTML. The parent directory is created if it does not exist. folder: Optional base folder for relative paths.

Returns: {"output_path": "<absolute path of the produced HTML>"}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the source is missing (VAL-PPTX-063); ERR_UNSUPPORTED_FMT for non-.pptx sources (VAL-PPTX-064); ERR_LIBREOFFICE_MISSING when soffice is not on PATH (VAL-PPTX-062); ERR_EXPORT_FAILED for any other failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
outputYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description fully bears the burden. It discloses delegation to an internal function, the requirement for LibreOffice, error conditions with specific codes, and that the parent output directory is created if missing. It could mention that the source file is not modified, but overall is thorough.

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 well-structured with sections (main description, Args, Returns, Raises), front-loads the core purpose, and every sentence adds value. No redundancy or waste.

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 an output schema exists, the description appropriately provides return format and covers all three parameters, error cases, and distinguishes from siblings. It is complete for the tool's complexity.

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

Parameters5/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 provides detailed semantics for each parameter: path (existing .pptx), output (target path, parent created if not exist), and folder (optional base folder). This adds far beyond the schema's bare names and types.

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 'Convert a .pptx file to HTML via LibreOffice headless,' with a specific verb and resource. It distinguishes itself from sibling tools by noting that .docx uses mammoth, while .pptx requires LibreOffice.

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?

The description provides clear context for when to use this tool (converting .pptx to HTML) and mentions an alternative approach for .docx. However, it does not explicitly list when not to use it or provide exhaustive alternatives among siblings.

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

pptx_export_pdfA

Convert a .pptx file to PDF via LibreOffice headless.

Delegates to :func:office_mcp.exporters.export_to_pdf. A unique -env:UserInstallation is used per call so multiple exports can run concurrently (VAL-WORD-079 pattern).

Args: path: Path to an existing .pptx. output: Target path for the produced PDF. The parent directory is created if it does not exist (VAL-PPTX-057). folder: Optional base folder for relative paths.

Returns: {"output_path": "<absolute path of the produced PDF>"}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the source is missing (VAL-PPTX-059); ERR_UNSUPPORTED_FMT for non-.pptx sources (VAL-PPTX-060); ERR_LIBREOFFICE_MISSING when soffice is not on PATH (VAL-PPTX-058); ERR_EXPORT_FAILED for any other failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
outputYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the burden of behavioral disclosure. It details concurrency via unique -env:UserInstallation, all possible error types (ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT, etc.), and the return format. No contradictions.

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 and front-loaded with the main purpose, but it is somewhat lengthy (includes Args, Returns, Raises sections). Every sentence adds value, though a slightly more concise version would be possible.

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 the tool's complexity (3 parameters, no output schema but return format described), the description covers prerequisites, output creation, and all error scenarios. It is complete for an agent to use the tool effectively.

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

Parameters5/5

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

The input schema has 0% description coverage, but the description fully compensates by detailing each parameter: path ('Path to an existing .pptx'), output ('Target path...parent directory created if not exist'), and folder ('Optional base folder for relative paths'). This 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 explicitly states 'Convert a .pptx file to PDF via LibreOffice headless,' which is a specific verb-resource pair. It distinguishes itself from sibling export tools like pptx_export_html by focusing on PDF output.

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?

The description implies usage for PDF conversion but does not provide explicit alternatives or when-not-to-use scenarios. The purpose is clear, but no direct guidance on when to choose this over other export tools.

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

pptx_get_infoA

Return a summary of the presentation's structure and dimensions.

The returned dict contains:

  • path — absolute path of the file on disk.

  • slide_count — number of slides (0 is valid; VAL-PPTX-009).

  • layouts — list of layout names available in the deck's slide master (always non-empty; VAL-PPTX-006 / -009).

  • dimensions{"width_inches": <float>, "height_inches": <float>}. The default widescreen template is 13.333 × 7.5 inches; the default Presentation() template is 10.0 × 7.5 inches.

Args: path: Path to an existing .pptx. folder: Optional base folder for relative paths.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries burden. It details return value structure (including default dimensions and layout behavior) and lists error conditions with error codes. This is sufficient for 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?

Description is concise: one-sentence summary, bulleted return fields, then Args section. Every element carries informational weight without redundancy.

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?

Despite having an output schema, the description thoroughly explains return fields, input parameters, and error conditions. There is no missing information for a read-only info tool.

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 has 0% coverage (no parameter descriptions), but the description's Args section adds clear explanations for 'path' and 'folder', specifying purpose and constraints (existing .pptx, optional base folder). Adds value beyond 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?

Description clearly states verb 'return' and resource 'presentation's structure and dimensions'. It lists specific fields (path, slide_count, layouts, dimensions) which distinguishes it from siblings like pptx_list_slides or pptx_read_slide.

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?

No explicit when-to-use or when-not-to-use guidance. The purpose is clear but without mentioning alternatives or context, it relies on the agent's ability to infer usage from purpose.

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

pptx_list_slidesA

Return one dict per slide in insertion order.

Each entry has the following keys (VAL-PPTX-010):

  • index — 0-based slide index.

  • layout — name of the slide's layout (e.g. "Title Slide", "Title and Content").

  • title — text of the slide's title placeholder, or "" when the layout has no title placeholder.

  • shape_count — number of shapes on the slide (placeholders

    • pictures + text boxes + ...).

An empty deck returns [] (VAL-PPTX-011).

Args: path: Path to an existing .pptx. folder: Optional base folder for relative paths.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/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 full burden for behavioral disclosure. It clearly states the return format (a list of dicts with specific keys), behavior for empty decks, and error conditions (ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT). However, it does not explicitly state that the tool is read-only or that it does not modify the file. The description correctly implies a non-destructive read operation.

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 concise and well-structured. It starts with a clear one-sentence purpose, then lists return keys in bullet points, followed by an Args section, and finally exceptions. Every sentence provides valuable information, and there is no redundancy or unnecessary text.

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 the tool's simplicity (lists slides) and the presence of an output schema in the description (implicitly defined by the return format), the description covers the main aspects: input parameters, return format, and error handling. It could be enhanced with a brief example or note about performance on large files, but it is otherwise complete.

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?

The input schema provides parameter names and types but no descriptions (0% coverage). The description compensates by explaining 'path' as an existing .pptx file and 'folder' as an optional base folder for relative paths. This adds meaning beyond the schema, though it could include more details like file path formats or allowed extensions.

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 returns 'one dict per slide in insertion order', specifying the exact keys and their meanings. This distinguishes it from sibling tools like pptx_read_slide (which reads a single slide) and pptx_get_info (which returns file-level metadata). The verb 'list' combined with the resource 'slides' makes the purpose 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 explains what the tool does and how it behaves (e.g., empty deck returns []), but it does not provide explicit guidance on when to use this tool versus alternatives such as pptx_read_slide or pptx_get_info. The context of sibling tools suggests the use case, but without explicit exclusions or comparisons, the guidance is only implied.

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

pptx_read_slideA

Return the slide's title, layout, and shape list.

Args: path: Path to an existing .pptx. index: 0-based slide index. folder: Optional base folder for relative paths.

Returns: {"index": <int>, "layout": <str>, "title": <str>, "shapes": [<shape_dict>, ...]}.

Each ``shape_dict`` has ``type`` (shape class name),
``shape_type`` (the numeric ``MSO_SHAPE_TYPE`` or ``None``),
``name`` (auto-generated name), and ``text`` (text-frame
text, or ``""`` for shape types without text).

Raises: OfficeMCPError: ERR_INVALID_PARAMS for a non-int or out-of-range index, ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
indexYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It explains the return format and error conditions (ERR_INVALID_PARAMS, ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT) but does not disclose whether the tool is read-only or any potential side effects. The safety profile is not explicitly mentioned, which is a gap.

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 well-structured with a one-line summary followed by Args, Returns, and Raises sections. It is front-loaded with the main purpose and provides essential details without unnecessary verbosity. Every sentence adds value.

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 the tool's complexity (3 parameters, output schema present, no nested objects), the description is complete. It thoroughly covers parameter semantics, return value structure (including shape_dict details), and error cases. No additional information is needed for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates fully with an 'Args' section that explains each parameter: 'path' as path to existing pptx, 'index' as 0-based slide index, and 'folder' as optional base folder for relative paths. This adds significant meaning beyond the schema's type and title.

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 ('Return the slide's title, layout, and shape list') and the resource (a slide within a pptx file). It is specific and distinguishes this read operation from sibling pptx tools that modify or create slides.

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 reading slide details but does not explicitly state when to use this tool versus alternatives like pptx_list_slides or pptx_get_info. No exclusions or guidance on when not to use it are provided.

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

pptx_reorder_slidesA

Move a slide from one position to another.

This is a true move: the slide at from_index is removed first, then inserted at to_index in the resulting sequence (VAL-PPTX-027). So moving slide 0 to position 2 in a 3-slide deck [A, B, C] yields [B, C, A], not the swap result [C, B, A].

Reordering a slide to its own index (from_index == to_index) is a no-op that still returns {"ok": True} (VAL-PPTX-028).

Args: path: Path to an existing .pptx. from_index: 0-based index of the slide to move. to_index: 0-based destination index. Must satisfy 0 <= to_index < slide_count (after the slide is removed from from_index). folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Raises: OfficeMCPError: ERR_INVALID_PARAMS for a non-int or out-of-range from_index / to_index, in which case the deck is left unchanged (VAL-PPTX-029); ERR_FILE_NOT_FOUND if the file is missing; ERR_UNSUPPORTED_FMT for non-.pptx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
from_indexYes
to_indexYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are provided, so the description carries full burden. It fully discloses the true move semantics, no-op behavior, error handling (returns error without modifying deck), and specific validation rules.

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 fairly long but well-structured with clear sections (description, example, args, returns, raises). Each sentence adds value, though some verbosity could be trimmed. Still appropriately sized for the complexity.

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 the tool's complexity (non-trivial index logic) and absence of annotations, the description covers behavior, parameter details, return format, and error cases thoroughly. It is complete and self-contained for an AI agent.

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

Parameters5/5

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

Schema coverage is 0%, meaning no parameter descriptions in the schema. The description compensates by explaining each parameter: path, from_index, to_index with range constraint after removal, and folder as optional. This 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 it moves a slide from one position to another, using the verb 'move' and resource 'slide'. It explicitly distinguishes the move from a swap with a concrete example, differentiating it from sibling tools like pptx_delete_slide or pptx_add_slide.

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?

The description provides detailed guidance on how to use the tool, including index behavior (0-based, after removal) and no-op for same index. However, it does not explicitly state when to use this tool over alternatives, but the contrast with swap is implicit.

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

search_textA

Search for a substring across the body of an Office file.

The location format depends on the source file's extension:

  • .docx"paragraph:N" (0-based body paragraph index)

  • .xlsx"cell:<coord>" (e.g. "cell:B3")

  • .pptx"slide:N:shape:M" (0-based slide + 0-based shape index in slide.shapes)

Each match entry has a location and a context field. The context is a window of up to ~30 characters on each side of the match in the original text (case preserved).

Args: path: Path to the file to search. query: Substring to look for. Must be a non-empty string. case_sensitive: When True (default), the match is exact; when False, matches are case-insensitive. folder: Optional base folder for relative paths.

Returns: A list of match dicts. Empty when there are no matches (VAL-GEN-016).

Raises: OfficeMCPError: ERR_INVALID_PARAMS if query is not a string or is empty, ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-Office files.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
queryYes
case_sensitiveNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses behavior: it details the match output (location and context with window size), error types, and parameter effects. This is thorough and compensates for missing annotations.

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 bullet points for location formats and clear sections for args/returns/raises. It is relatively long but each part adds value; minor trimming could improve conciseness.

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 the tool's complexity (4 params, no annotations, output schema), the description is remarkably complete: it covers return format, error handling, parameter details, and usage context for multiple file types. No significant gaps.

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

Parameters5/5

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

Schema description coverage is 0%, but the description adds rich semantics for all four parameters: explains path, query (non-empty string), case_sensitive (default true, case-insensitive when false), and folder (optional base path). This goes well 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 the tool searches for a substring across the body of Office files (docx, xlsx, pptx) with specific location formats per file type. It is distinct from siblings like word_find_replace (Word-only) and covers multiple file types.

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?

The description provides detailed context on location formats, parameter behavior, and error conditions. However, it does not explicitly compare to alternative tools or state when not to use this tool, which would strengthen guidance.

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

word_add_headerA

Set the text of a section's header.

By default, only the first section's header is updated; later sections keep their own headers (VAL-WORD-058). Pass an explicit section_index to target a different section.

Args: path: Path to an existing .docx. text: New header text. An empty string clears the first paragraph (VAL-WORD-057). section_index: Zero-based section index (default 0). folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Raises: OfficeMCPError: ERR_INVALID_PARAMS for a non-int or out-of-range section_index or a non-string text, ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.docx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
textYes
section_indexNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries full burden. It discloses default behavior, side effect of empty text clearing the first paragraph, return format ({"ok": True}), and three specific error conditions with error codes. This provides comprehensive transparency beyond minimal expectations.

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 efficiently structured: purpose in first sentence, then default behavior, parameter list, return, and error conditions. Every sentence adds value with no redundancy. At approximately 10 lines, it is appropriately sized and front-loaded.

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?

Despite having no annotations and moderate complexity (4 parameters, 2 required, error handling), the description is fully complete. It covers all aspects: purpose, parameter behavior, return output, and error conditions. The output schema exists and is explained, so no further return details needed.

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 description coverage is 0%, meaning schema provides no descriptions. The description adds meaning for all 4 parameters: explains path (existing .docx), text (new header text, empty string clears), section_index (zero-based, default 0), and folder (optional base folder). This compensates for the missing schema descriptions, though could include format examples.

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 sets a section's header text, with specific verb 'Set the text of a section's header.' It distinguishes from siblings by explaining default behavior (only first section) and how to target other sections via section_index, which differentiates it from similar tools like word_add_footer.

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?

The description provides clear usage context: default behavior of updating only first section, and explicit instruction to pass section_index for other sections. However, it does not contrast with alternative tools (e.g., when to use word_add_heading instead), so guidelines are good but not exhaustive.

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

word_add_headingA

Append a heading paragraph at the given level (1..9).

Args: path: Path to an existing .docx. text: Heading text. level: Heading level (1 = Heading 1, ..., 9 = Heading 9). Out-of-range values are rejected with ERR_INVALID_PARAMS. folder: Optional base folder for relative paths.

Returns: {"index": <n>} for the new heading.

Raises: OfficeMCPError: ERR_INVALID_PARAMS for an out-of-range level or a non-int level, ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non- .docx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
textYes
levelNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses that the tool appends (not inserts) a heading, returns an index, and raises specific errors. While it does not detail save behavior or permissions, it provides enough behavioral context for a simple append operation.

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 concise and well-structured with clear sections for Args, Returns, and Raises. Every sentence adds value; no redundant or verbose content.

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 the tool has 4 parameters and an output schema, the description covers purpose, parameters, return value, and common errors. It does not mention whether the heading is appended at the end of the document or before other content, but 'append' implies end. Overall, it is sufficiently complete for this tool.

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%, but the description explains each parameter: path (existing .docx), text (heading text), level (1..9 with error handling), and folder (optional base). This adds significant meaning beyond the schema titles, compensating for the lack of schema descriptions.

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 appends a heading paragraph at a given level (1..9) to a .docx file. The verb 'append' and resource 'heading paragraph' are specific, and it distinguishes from siblings like word_add_paragraph (which adds normal paragraphs) and word_add_header (which adds headers to sections).

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 specifies valid level range and error conditions (ERR_INVALID_PARAMS, ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT), which guides proper usage. However, it does not explicitly contrast with similar sibling tools like word_add_paragraph, leaving the agent to infer when to use headings vs normal paragraphs.

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

word_add_imageA

Embed an image in the document body.

When width_inches is provided, the image is scaled to that width and the height is auto-computed from the image's intrinsic aspect ratio (VAL-WORD-050 / VAL-WORD-078). When omitted, the image is embedded at its native pixel size.

Args: path: Path to an existing .docx. image_path: Path to the image file (PNG / JPEG / GIF / etc.). width_inches: Optional target width in inches (must be positive). When None the image is embedded at its native size. folder: Optional base folder for the path argument (does not apply to image_path, which is always resolved absolutely or relative to the caller's CWD).

Returns: {"index": <n>} where <n> is the index of the new inline shape in doc.inline_shapes.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if either path is missing, ERR_INVALID_PARAMS for an unsupported image format or a non-positive width_inches, ERR_UNSUPPORTED_FMT for non-.docx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
image_pathYes
width_inchesNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description fully covers behavioral traits: scaling behavior (auto-compute height when width_inches given, native size otherwise), argument resolution (folder for path, not image_path), return value structure, and specific error conditions. This exceeds the burden typically required.

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 well-structured with a clear first sentence stating purpose, followed by detailed sections (scaling, Args, Returns, Raises). Every sentence adds value and there is no redundancy. It is appropriately sized for the tool's complexity.

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 the tool has 4 parameters, a return value, and error cases, the description covers all necessary aspects: purpose, parameter details, return format, and error conditions. The presence of an output schema is noted but not needed as the description already specifies the return value.

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

Parameters5/5

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

The input schema has 0% description coverage, so the description must add meaning. It does so comprehensively in the Args section, explaining each parameter's purpose, constraints (e.g., width_inches must be positive), and behavior (folder does not apply to image_path).

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 'Embed an image in the document body,' using a specific verb and resource. It distinguishes itself from sibling tools like pptx_add_image (different application) and other word tools by specifying the context of a .docx document.

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 embedding images in Word documents but does not explicitly explain when to use this tool over alternatives like pptx_add_image for PowerPoint or other word formatting tools. No when-not-to-use guidance is provided.

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

word_add_paragraphA

Append a paragraph to the body of the document.

Args: path: Path to an existing .docx. text: Text for the new paragraph. An empty string is accepted and produces an empty paragraph. style: Optional built-in style name (e.g. "Intense Quote"). folder: Optional base folder for relative paths.

Returns: {"index": <n>} where <n> is the index of the newly appended paragraph.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_INVALID_PARAMS for bad text type or unknown style, ERR_UNSUPPORTED_FMT for non-.docx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
textYes
styleNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Without annotations, the description details behavior: accepts empty string for text, optional style and folder, returns index, and lists errors. It does not disclose side effects like file modification but is otherwise transparent.

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 concise, well-structured with Args, Returns, Raises sections, and every sentence adds value without redundancy.

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?

For a tool with 4 parameters, 2 required, and an output schema, the description covers purpose, parameters, return format, and error conditions fully, leaving no gaps.

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

Parameters5/5

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

Schema coverage is 0%, but the description explains all four parameters: path, text (including empty string), style (with example), and folder. This fully compensates for the lack of schema descriptions.

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 a paragraph to the body of the document,' which is a specific verb and resource. It distinguishes itself from sibling tools like word_add_heading and word_add_image.

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 does not provide explicit guidance on when to use this tool versus alternatives. It implies usage for adding a paragraph but lacks when-not or alternative suggestions.

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

word_add_tableA

Append a table to the body of the document.

Args: path: Path to an existing .docx. rows: Number of rows (must be a positive int). cols: Number of columns (must be a positive int). data: Optional 2D list of strings to populate the cells. The list is interpreted in row-major order; shorter rows are padded with empty strings and longer rows are truncated. style: Optional built-in table style name (e.g. "Table Grid" or "Light Grid Accent 1"). folder: Optional base folder for relative paths.

Returns: {"index": <n>} where <n> is the index of the new table in doc.tables.

Raises: OfficeMCPError: ERR_INVALID_PARAMS for non-positive rows/cols, unknown style, or a non-list data argument. ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.docx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
rowsYes
colsYes
dataNo
styleNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/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 thoroughly discloses constraints (positive int for rows/cols), optional parameters, data handling (padded/truncated), error conditions (ERR_INVALID_PARAMS, ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT), and return format.

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 well-structured in a Google-style docstring with clear sections for Args, Returns, and Raises. Every sentence adds value without redundancy.

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?

Despite the tool having 6 parameters, the description covers all essential aspects: purpose, parameter semantics, return value, and error handling. The context is complete for an AI agent to correctly invoke the tool.

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

Parameters5/5

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

Schema description coverage is 0%, but the description explains each parameter in detail, including constraints, default values, and behavior (e.g., data is row-major, shorter rows padded). This fully compensates for the lack of schema descriptions.

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 a table to the body of the document.' This is a specific verb+resource pair, and it distinguishes itself from sibling tools like word_add_paragraph or pptx_add_table.

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 adding tables to Word documents but does not explicitly provide guidelines on when to use this tool versus alternatives or 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.

word_create_documentA

Create a new .docx file at path with an optional title paragraph.

Args: path: Target .docx path. May be absolute or relative to folder (or to the default folder when folder is None). title: Optional text for the first paragraph. When None the document is created with a single empty paragraph (the python-docx default). folder: Optional base folder for relative paths.

Returns: {"path": "<absolute path>"} on success.

Raises: OfficeMCPError: ERR_INVALID_PARAMS if path is empty or a file already exists at the target. ERR_UNSUPPORTED_FMT if path does not end in .docx.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
titleNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

Discloses error conditions (file exists, invalid path format) and return value, but no annotations are provided to compensate. Behavior like no overwrite is implied but not explicitly stated. Could benefit from more detail on side effects and prerequisites.

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?

Front-loaded with a clear summary, then structured Args, Returns, Raises sections. Informative but slightly verbose; could be more concise without losing clarity.

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?

Covers essential aspects: purpose, parameters, return structure, and error cases. Missing some details like limitations or encoding, but adequate for a creation tool.

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

Parameters5/5

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

Despite 0% schema description coverage, the description explains each parameter thoroughly: path (relative/absolute), title (optional, default None), folder (base for relative). Adds 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?

Clearly states it creates a .docx file at a given path with an optional title paragraph. The verb 'create' and resource 'document' are specific, and it distinguishes from sibling tools that manipulate existing documents.

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?

Describes the tool's purpose but does not explicitly mention when to avoid using it or suggest alternatives. However, the context is clear that for creating a new document, this is the tool.

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

word_export_htmlA

Convert a .docx file to HTML via :mod:mammoth.

Delegates to :func:office_mcp.exporters.export_to_html. The .docx path uses mammoth only (no LibreOffice dependency — VAL-WORD-072).

Args: path: Path to an existing .docx file. output: Target path for the produced HTML. The parent directory is created if it does not exist. folder: Optional base folder for relative paths.

Returns: {"output_path": "<absolute path of the produced HTML>"}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the source is missing, ERR_UNSUPPORTED_FMT for non-.docx sources, ERR_EXPORT_FAILED for any other failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
outputYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses key behaviors: uses mammoth, creates parent directory if missing, returns absolute output path, and raises specific errors. Missing details on permissions or side effects, but sufficient for a conversion tool.

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?

Well-structured with Args, Returns, Raises sections. Some verbosity like delegation line, but overall efficient. Information is relevant and 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?

Given output schema exists, description still explains return format and errors. Covers inputs, outputs, and key behavior. Does not mention performance or large file handling, but adequate for a simple conversion tool with three parameters.

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

Parameters5/5

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

Schema coverage is 0%, so description compensates fully. It explains each parameter: path ('existing .docx'), output ('target HTML, parent dir created'), folder ('optional base folder'). Adds meaning beyond schema titles.

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 'Convert a .docx file to HTML via mammoth,' specifying input format, output format, and underlying library. It distinguishes from siblings like excel_export_html and word_export_pdf by focusing on Word-to-HTML conversion and noting no LibreOffice dependency.

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 .docx to HTML conversion but does not explicitly state when to use this over alternatives like convert_document. No prerequisites or exclusions are provided, relying on implicit context.

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

word_export_pdfA

Convert a .docx file to PDF via LibreOffice headless.

Delegates to :func:office_mcp.exporters.export_to_pdf. A unique -env:UserInstallation is used per call so multiple exports can run concurrently (VAL-WORD-079).

Args: path: Path to an existing .docx file. output: Target path for the produced PDF. The parent directory is created if it does not exist. If a relative path is given, it is resolved against folder (or the default folder). folder: Optional base folder for relative paths.

Returns: {"output_path": "<absolute path of the produced PDF>"}.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the source is missing, ERR_UNSUPPORTED_FMT for non-.docx sources, ERR_LIBREOFFICE_MISSING when soffice is not on PATH, ERR_EXPORT_FAILED for any other failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
outputYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description fully bears the burden. It discloses concurrency via unique UserInstallation per call, error types (ERR_FILE_NOT_FOUND, etc.), and behavioral details like parent directory creation and relative path resolution.

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 long but well-structured with Args, Returns, Raises sections. It is informative without being overly verbose, though some detail on concurrency could be shortened.

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 the tool complexity (3 parameters, error handling, concurrency) and the presence of an output schema, the description covers inputs, output format, errors, and behavioral context completely.

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

Parameters5/5

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

Schema description coverage is 0%, but the description adds detailed meaning for each parameter: path (existing .docx), output (target PDF, parent dir created, relative resolved), folder (optional base for relative paths). This significantly adds 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 it converts .docx files to PDF using LibreOffice headless, with specific verb 'Convert' and resource '.docx file to PDF'. It distinguishes from siblings like word_export_html and excel_export_pdf by focusing on Word-to-PDF conversion.

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 explains what the tool does but does not explicitly indicate when to use it over alternatives like word_export_html or convert_document. It mentions concurrency but lacks guidance on when not to use or when to choose siblings.

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

word_find_replaceA

Replace every occurrence of find with replace.

Operates on every body paragraph. The reported replacements count is the sum of occurrences across all paragraphs before the replacement is applied (case-sensitivity follows the case_sensitive flag).

Args: path: Path to an existing .docx. find: The literal string to search for. Must be non-empty. replace: The replacement string. case_sensitive: When True (default), the match is exact; when False, the match is case-insensitive. folder: Optional base folder for relative paths.

Returns: {"replacements": <n>}.

Raises: OfficeMCPError: ERR_INVALID_PARAMS if find is empty or non-string, ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.docx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
findYes
replaceYes
case_sensitiveNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It details operation scope (all body paragraphs), case sensitivity, replacement count semantics, and error conditions. However, it does not clarify if the file is saved automatically or requires explicit save.

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 Args, Returns, and Raises sections. It is front-loaded with the main action but could be slightly more concise by removing minor redundancy.

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 the 5 parameters, output schema, and error handling, the description covers most essential aspects. It lacks explicit mention of file saving behavior, but overall it is complete enough for correct usage.

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

Parameters5/5

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

Schema coverage is 0%, so the description provides all parameter meaning (path to existing docx, find non-empty literal, replace string, case_sensitive behavior, optional folder). This adds significant value beyond the minimal 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 the tool replaces occurrences of a string in a .docx file, operating on body paragraphs. It uses a specific verb-resource combination and distinguishes from sibling tools like search_text.

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?

The description implies usage for find-and-replace in Word documents, but lacks explicit guidance on when not to use it or alternatives. It is clear enough for selection but could benefit from mentioning siblings like search_text.

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

word_format_runA

Update the formatting of a single run.

Args: path: Path to an existing .docx. paragraph_index: Zero-based index of the paragraph. run_index: Zero-based index of the run inside that paragraph. bold: True / False to set, or None to leave as-is. italic: Same convention as bold. font_size: Point size (int or float) or None. font_name: Font name string or None. color: Hex color string (e.g. "FF0000") or None. folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Special case: If all of bold, italic, font_size, font_name, color are None, the function is a no-op: the file is not re-saved and the SHA256 is preserved (VAL-WORD-039 / VAL-WORD-076).

Raises: OfficeMCPError: ERR_INVALID_PARAMS if indices are out of range or of the wrong type, or color is not a valid hex string. ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.docx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
paragraph_indexYes
run_indexYes
boldNo
italicNo
font_sizeNo
font_nameNo
colorNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description fully discloses key behaviors: the no-op case when all formatting parameters are None (preserving SHA256), and specific error conditions (ERR_INVALID_PARAMS, ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT). This is comprehensive.

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 well-structured with Args, Returns, Special case, and Raises sections. It is concise yet informative, with no unnecessary 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 the tool's complexity (9 parameters, no annotations) and the presence of an output schema, the description covers all aspects: parameter usage, return type, special behavior, and error cases. It is fully complete.

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

Parameters5/5

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

The description explains each parameter's semantics beyond the schema: e.g., 'True/False to set, or None to leave as-is' for bold/italic, and 'Hex color string (e.g. "FF0000")' for color. This compensates for 0% schema description coverage.

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 'Update the formatting of a single run' and identifies the tool's scope as operating on a specific run in a .docx file. This purpose is distinct from sibling tools like word_add_paragraph or word_read_paragraph.

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?

The description clearly defines the tool's role but does not explicitly state when to use it instead of alternatives. However, the context makes it reasonably clear.

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

word_get_infoA

Return counts and core properties of a .docx file.

The returned dict contains:

  • paragraphs — number of body paragraphs (including the empty one emitted by :func:docx.Document).

  • sections — number of sections in the document.

  • tables — number of body tables.

  • images — number of inline shapes (images).

  • properties — subset of core_properties (title, author) that are populated.

Args: path: Path to an existing .docx. folder: Optional base folder for relative paths.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT if the extension is not .docx, ERR_INVALID_PARAMS if path is empty.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure and meets it thoroughly. It describes the return structure, parameter constraints, and all three error cases (ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT, ERR_INVALID_PARAMS). No contradictions.

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 header line and bullet points for the return dict, an Args section, and a Raises section. It is appropriately concise for the detail provided, though some redundancy (e.g., listing fields in text and then in bullet list) could be trimmed.

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 the tool's moderate complexity (two parameters, enumerated return fields, multiple error types), the description covers all necessary aspects: purpose, parameters with semantics, return structure, and error conditions. An output schema exists, but the description still adds value by interpreting the schema's meaning.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate. It provides detailed semantic meaning: 'path: Path to an existing .docx', 'folder: Optional base folder for relative paths'. This adds significant value beyond the schema's bare type information.

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 ('Return counts and core properties') and the resource ('.docx file'). It also lists the specific fields returned, distinguishing it from sibling tools like 'get_document_info' and 'excel_get_info'.

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 explains what the tool does and its parameters, but does not provide explicit guidance on when to use this tool versus alternatives (e.g., other info tools or search_text). Usage is implied but not contextualized among siblings.

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

word_list_paragraphsA

Return one dict per body paragraph.

Each entry has index, style, text, and runs keys. runs is itself a list of run dicts (see :func:_serialise_run).

Args: path: Path to an existing .docx. folder: Optional base folder for relative paths.

Raises: OfficeMCPError: ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.docx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the transparency burden. It mentions return format and error conditions (ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT) but does not disclose whether the operation is read-only, performance implications, or other behavioral traits. It is adequate but not comprehensive.

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 concise with two paragraphs plus args list. Every sentence adds value: the first line states the purpose, the second details output structure, and the third lists parameters and errors. 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 the tool's simplicity (list paragraphs), the presence of an output schema, and only two parameters, the description covers input, output structure, and errors completely. It is fully adequate for an agent to understand and invoke the tool.

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 description coverage is 0%, so the description must add meaning. It explains both parameters: 'path: Path to an existing .docx' and 'folder: Optional base folder for relative paths,' which adds valuable context beyond the schema's type-only definitions.

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's purpose: 'Return one dict per body paragraph.' It specifies the output keys (index, style, text, runs) and distinguishes from sibling tools like word_read_paragraph (single paragraph) and word_add_paragraph (adding), making it explicit that this tool lists all paragraphs.

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 listing paragraphs from a .docx file but does not explicitly state when to use this tool over alternatives like word_read_paragraph. No when-not or exclusion criteria are provided, making it only adequate.

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

word_read_paragraphA

Return a single paragraph's content and metadata.

Args: path: Path to an existing .docx. index: Zero-based paragraph index. folder: Optional base folder for relative paths.

Raises: OfficeMCPError: ERR_INVALID_PARAMS if index is negative or out of range, ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.docx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
indexYes
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Description implies read-only behavior ('Return') and lists common error conditions (invalid params, file not found, unsupported format). However, no explicit statement about being non-destructive, auth requirements, or side effects. Without annotations, this is adequate but not outstanding.

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?

Description is a concise docstring-style block with purpose, parameters, and error conditions. Every sentence adds value; no fluff. Front-loaded with the main 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?

Covers parameter semantics and error scenarios well. Missing explicit read-only declaration and usage guidance vs siblings, but output schema exists to handle return values. For a simple read tool, the description is largely complete.

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

Parameters5/5

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

Description fully explains each parameter beyond the schema: 'path' to an existing .docx, 'index' as zero-based, 'folder' as optional base folder. With 0% schema coverage, this compensates completely, giving clear semantics for correct invocation.

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 tool returns a single paragraph's content and metadata. It specifies the resource (paragraph) by index, distinguishing it from word_list_paragraphs which lists all paragraphs. The verb 'Return' is specific and accurate.

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 like word_list_paragraphs or word_get_info. The description only lists parameters and errors, leaving the agent to infer usage context from tool names.

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

word_set_sectionA

Configure a section's orientation and page size.

Args: path: Path to an existing .docx. orientation: "portrait" or "landscape" (case-insensitive). Any other value raises ERR_INVALID_PARAMS (VAL-WORD-065). page_size: A named page size such as "A4" (default), "Letter", "Legal", "A5", "Tabloid" or "B5" (case-insensitive). section_index: Zero-based section index (default 0). folder: Optional base folder for relative paths.

Returns: {"ok": True}.

Behavior: * Portrait: page_width = <width>, page_height = <height>. * Landscape: page_width = <height>, page_height = <width> (i.e. dimensions are swapped so the wider edge is horizontal).

Raises: OfficeMCPError: ERR_INVALID_PARAMS for an unknown orientation or page_size, ERR_FILE_NOT_FOUND if the file is missing, ERR_UNSUPPORTED_FMT for non-.docx extensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
orientationNoportrait
page_sizeNoA4
section_indexNo
folderNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

The description thoroughly explains behavior: orientation swaps dimensions, page_size options are listed, and specific error codes (ERR_INVALID_PARAMS, ERR_FILE_NOT_FOUND, ERR_UNSUPPORTED_FMT) are provided. Since no annotations exist, the description carries the full burden and does so effectively.

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 sections (Args, Returns, Behavior, Raises) and is appropriately sized. No wasted sentences, though the error handling details could be slightly more concise. Overall efficient.

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?

The description is thorough, covering all parameters, behavior, and errors. However, it does not specify behavior for an out-of-bounds section_index (e.g., if the index doesn't exist). This minor gap prevents a perfect score.

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

Parameters5/5

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

With 0% schema description coverage, the description compensates by adding meaning to all 5 parameters: path (existing .docx), orientation (valid values, case-insensitive, error on others), page_size (named sizes), section_index (zero-based, default 0), folder (optional base folder). This fully explains 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 the tool's purpose: 'Configure a section's orientation and page size.' It uses a specific verb ('Configure') and resource ('section's orientation and page size'), making it immediately distinguishable from sibling tools like word_add_paragraph or word_format_run.

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 lacks explicit guidance on when to use this tool versus alternatives. While the sibling context implies it's for modifying existing document sections, there are no direct comparisons or exclusion criteria. Usage is implied but not explicitly stated.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 47 tool updatesv0.1.0
    • First observedconvert_document
    • First observedexcel_add_chart
    • First observedexcel_create_sheet
    • First observedexcel_create_workbook
    • First observedexcel_delete_sheet
    • First observedexcel_export_csv
    • First observedexcel_export_html
    • First observedexcel_export_pdf
    • First observedexcel_format_cells
    • First observedexcel_get_info
    • First observedexcel_list_sheets
    • First observedexcel_read_sheet
    • First observedexcel_rename_sheet
    • First observedexcel_write_cell
    • First observedexcel_write_range
    • First observedget_document_info
    • First observedlist_documents
    • First observedpptx_add_chart
    • First observedpptx_add_image
    • First observedpptx_add_shape
    • First observedpptx_add_slide
    • First observedpptx_add_table
    • First observedpptx_add_text_box
    • First observedpptx_create_presentation
    • First observedpptx_delete_slide
    • First observedpptx_export_html
    • First observedpptx_export_pdf
    • First observedpptx_get_info
    • First observedpptx_list_slides
    • First observedpptx_read_slide
    • First observedpptx_reorder_slides
    • First observedsearch_text
    • First observedword_add_footer
    • First observedword_add_header
    • First observedword_add_heading
    • First observedword_add_image
    • First observedword_add_paragraph
    • First observedword_add_table
    • First observedword_create_document
    • First observedword_export_html
    • First observedword_export_pdf
    • First observedword_find_replace
    • First observedword_format_run
    • First observedword_get_info
    • First observedword_list_paragraphs
    • First observedword_read_paragraph
    • First observedword_set_section

TDQS

A4.4/5.0

Scored across 47 tools

Disambiguation5/5

Tools are clearly separated by format prefix (word_, excel_, pptx_) and generic tools have distinct names. Each tool targets a specific operation, and there is no ambiguity between them.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with format prefixes (e.g., word_add_paragraph, excel_read_sheet). Generic tools like convert_document and list_documents also adhere to this pattern. No mixing of conventions.

Tool Count4/5

With 47 tools, the server covers three complex formats thoroughly. While high, it is justified by the need for separate create, read, update, delete, format, and export operations per format. Could be slightly trimmed but still reasonable.

Completeness4/5

Basic CRUD operations are present for all formats, plus exports and formatting. Minor gaps exist, such as lacking explicit delete for Word paragraphs/tables or Excel cells, but workarounds are available. Overall well-covered.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers