office-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@office-mcpOpen my budget.xlsx and update cell B2 to 1500"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 → htmlis pure-Python (viamammoth); 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-8so 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
*.pdfand.xlsx/.pptx → .htmlexport. The classic install paths are auto-detected; on Windows the installer placessoffice.exeatC:\Program Files\LibreOffice\program\soffice.exe. Theheadlessmode used byoffice-mcpdoes not require a display or a running LibreOffice instance.All Python dependencies are listed in
pyproject.tomland pre-installed in.venv/:mcp[cli]>=1.27,<2,python-docx,openpyxl,python-pptx,xlsxwriter,mammoth,defusedxml,pydantic. The optionalPillowis 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.shWhat it does:
export PYTHONUTF8=1andexport PYTHONIOENCODING=utf-8so Unicode survives every subprocess boundary.Prepends the LibreOffice program directory to
PATH(no effect if it is already there).Activates
.venv/(Scripts/activateon Windows,bin/activateelsewhere). If.venv/is missing it bootstraps a fresh one.Imports every required package and prints a confirmation line.
Prints
soffice --version(or a warning if LibreOffice is missing — export tools will then raiseERR_LIBREOFFICE_MISSINGat 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.py3. 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.pyThe 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.pyTo 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.pyExpected 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 toserver.pyfor your checkout. The forward slashes in the example work on Windows; use backslashes only if you escape them.OFFICE_MCP_DEFAULT_FOLDERis the directory the server will resolve relative file paths against. Any tool that accepts afolderargument overrides this default for that call.If you prefer the venv's Python, set
commandto 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 itssys.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 |
| Non-recursive folder scan; returns one entry per |
| Auto-detect format by extension; dispatch to the format-specific |
| Cross-format text search with locations |
| Dispatch to the right exporter based on source extension and |
Word (15)
Tool | Purpose |
| Create a new |
| Counts of paragraphs / sections / tables / images + core properties. |
| All paragraphs with index, style, text, runs. |
| One paragraph by index. |
| Append a paragraph (optional style). |
| Append a heading at a level (1-9). |
| Find and replace text (case-sensitive toggle). |
| Update a run's bold / italic / size / font / color. |
| Append a table (rows × cols, optional data + style). |
| Embed an image (optional width_inches). |
| Set the text of a section's header. |
| Set the text of a section's footer. |
| Configure a section's orientation + page size. |
| Convert a |
| Convert a |
Excel (14)
Tool | Purpose |
| Create a new |
| Sheet count + names + per-sheet dimensions. |
| Names + indices + dimensions of all sheets. |
| Read a sheet (or an |
| Write a single cell (string, number, or |
| Write a 2-D list of values starting at a cell. |
| Append a new sheet. |
| Remove a sheet (refuse to delete the last). |
| Rename a sheet (refuse duplicates). |
| Apply font / fill / border / number-format to a range. |
| Add a |
| Export a sheet to CSV (pure Python). |
| Export a workbook to PDF via LibreOffice. |
| Export a workbook to HTML via LibreOffice. |
PowerPoint (14)
Tool | Purpose |
| Create a new |
| Slide count + layouts + slide dimensions. |
| All slides with index, title, layout, shape count. |
| One slide's title + shapes. |
| Add a slide (layout index, optional title). |
| Remove a slide (refuse to delete the last). |
| Move a slide to a new index (move, not swap). |
| Add a text box (x / y / w / h in inches, optional font). |
| Embed an image (x / y / w / h). |
| Add an MSO shape (type, x / y / w / h, optional text). |
| Add a table (rows / cols / data, x / y / w / h). |
| Add a chart (type, data dict, x / y / w / h). |
| Export to PDF via LibreOffice. |
| 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_csvCritical idioms (also enforced by the test suite):
Singleton via
from server import mcp. Every tool function is decorated with@mcp.tool()frommcp.server.fastmcp, imported asfrom server import mcp. This works becauseserver.pyregisters itself under both__main__andserverinsys.modulesviasys.modules.setdefault("server", sys.modules[__name__])at module top. Do not remove that line.Side-effect imports in
server.pyuseimportlib.import_module. This avoidspyflakesF401 false positives on the tool module side-effect imports.No
print()to stdout. All logging goes tosys.stderr(configured at the top ofserver.py).Office files are ZIPs — open in binary mode (
"rb"/"wb"). Text files (HTML, CSV, README) withencoding="utf-8".*_create_*tools refuse to overwrite. All other tools raiseERR_FILE_NOT_FOUND(-32001) if the target does not exist.Error model. Every tool raises
OfficeMCPError(code, message, details). FastMCP serialises the exception to aCallToolResultwithisError=Trueand astructuredContentdict carrying the error code. The JSON-RPC error code stays clean.
Configuration
Env var | Default | Effect |
| server CWD | Base folder for relative paths in tool calls. |
| auto-detected | Override the LibreOffice executable path. |
| unset | Set to |
| unset | Set to |
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).
Install LibreOffice. On Windows, use the official MSI (
soffice.exelands inC:\Program Files\LibreOffice\program). On macOS, drag the.dmgto/Applications. On Debian / Ubuntu:sudo apt install libreoffice.Check the executable.
init.shprintssoffice: LibreOffice ...when the binary is found. If it printsWARNING: soffice not on PATH, either re-runinit.shor setOFFICE_MCP_SOFFICE=/full/path/to/soffice(.exe)in the agent config.Watch out for the Windows
.COMshim.shutil.whichon Windows can returnsoffice.COM(a 16-bit DOS wrapper) when the LibreOfficeprogramdirectory is onPATHbut not in the auto-detect candidate list.find_libreoffice()inoffice_mcp/config.pyexplicitly prefers the.execandidates and rejects.COMfiles. If you see the server hang for the full 180s timeout before raisingERR_EXPORT_FAILED, you are probably hitting this — setOFFICE_MCP_SOFFICEto the absolutesoffice.exepath.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 runword_export_pdfin parallel from two different agent sessions without locking.
Encoding issues (mojibake, UnicodeDecodeError)
Always launch the server with
PYTHONUTF8=1andPYTHONIOENCODING=utf-8in the env.init.shdoes this for the local shell; the Claude Desktop config snippet above sets them in theenvblock.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-8in the server'senv.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-8is 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
openpyxlwrites 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 instderr. 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.pyThe 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 toolsconvert_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).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| target_format | Yes | ||
| output | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sheet | Yes | ||
| chart_type | Yes | ||
| data_range | Yes | ||
| target_cell | Yes | ||
| title | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| name | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sheet_name | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| name | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | Yes | ||
| sheet | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sheet | Yes | ||
| cell_range | Yes | ||
| bold | No | ||
| italic | No | ||
| font_name | No | ||
| font_size | No | ||
| font_color | No | ||
| fill_color | No | ||
| border | No | ||
| alignment | No | ||
| number_format | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 hasname(str),index(int, 0-based),rows(int, openpyxl'smax_row), andcols(int, openpyxl'smax_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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sheet | Yes | ||
| range | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| old_name | Yes | ||
| new_name | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sheet | Yes | ||
| cell | Yes | ||
| value | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sheet | Yes | ||
| start_cell | Yes | ||
| data | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| chart_type | Yes | ||
| data | Yes | ||
| x | Yes | ||
| y | Yes | ||
| w | Yes | ||
| h | Yes | ||
| slide | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
wgiven —his computed from the image's intrinsic aspect ratio (VAL-PPTX-038). Aspect ratio preserved within 1% tolerance.Only
hgiven —wis 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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| image_path | Yes | ||
| x | Yes | ||
| y | Yes | ||
| w | No | ||
| h | No | ||
| slide | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| shape_type | Yes | ||
| x | Yes | ||
| y | Yes | ||
| w | Yes | ||
| h | Yes | ||
| slide | No | ||
| folder | No | ||
| text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| layout_index | No | ||
| title | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| rows | Yes | ||
| cols | Yes | ||
| x | Yes | ||
| y | Yes | ||
| w | Yes | ||
| h | Yes | ||
| slide | No | ||
| folder | No | ||
| data | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| text | Yes | ||
| x | Yes | ||
| y | Yes | ||
| w | Yes | ||
| h | Yes | ||
| slide | No | ||
| folder | No | ||
| font_size | No | ||
| bold | No | ||
| italic | No | ||
| font_name | No | ||
| color | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| title | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| index | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 defaultPresentation()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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 (placeholderspictures + 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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| index | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| from_index | Yes | ||
| to_index | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 inslide.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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| query | Yes | ||
| case_sensitive | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| text | Yes | ||
| section_index | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| text | Yes | ||
| level | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| image_path | Yes | ||
| width_inches | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| text | Yes | ||
| style | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| rows | Yes | ||
| cols | Yes | ||
| data | No | ||
| style | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| title | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| find | Yes | ||
| replace | Yes | ||
| case_sensitive | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| paragraph_index | Yes | ||
| run_index | Yes | ||
| bold | No | ||
| italic | No | ||
| font_size | No | ||
| font_name | No | ||
| color | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 ofcore_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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| index | Yes | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| orientation | No | portrait | |
| page_size | No | A4 | |
| section_index | No | ||
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
47 tool updates
v0.1.0- First observed
convert_document - First observed
excel_add_chart - First observed
excel_create_sheet - First observed
excel_create_workbook - First observed
excel_delete_sheet - First observed
excel_export_csv - First observed
excel_export_html - First observed
excel_export_pdf - First observed
excel_format_cells - First observed
excel_get_info - First observed
excel_list_sheets - First observed
excel_read_sheet - First observed
excel_rename_sheet - First observed
excel_write_cell - First observed
excel_write_range - First observed
get_document_info - First observed
list_documents - First observed
pptx_add_chart - First observed
pptx_add_image - First observed
pptx_add_shape - First observed
pptx_add_slide - First observed
pptx_add_table - First observed
pptx_add_text_box - First observed
pptx_create_presentation - First observed
pptx_delete_slide - First observed
pptx_export_html - First observed
pptx_export_pdf - First observed
pptx_get_info - First observed
pptx_list_slides - First observed
pptx_read_slide - First observed
pptx_reorder_slides - First observed
search_text - First observed
word_add_footer - First observed
word_add_header - First observed
word_add_heading - First observed
word_add_image - First observed
word_add_paragraph - First observed
word_add_table - First observed
word_create_document - First observed
word_export_html - First observed
word_export_pdf - First observed
word_find_replace - First observed
word_format_run - First observed
word_get_info - First observed
word_list_paragraphs - First observed
word_read_paragraph - First observed
word_set_section
TDQS
Scored across 47 tools
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.
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.
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.
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
Related MCP Connectors
Generate, edit, merge, translate and PDF-convert PowerPoint (.pptx) over MCP. 8 tools.
Generate PDF, Word (.docx) and PowerPoint (.pptx) documents from Markdown over MCP.
Document-to-Markdown MCP server — convert PDF, Office and HTML into LLM-ready Markdown.
61 text, security, converter, calculator, and PDF tools -- callable via MCP on one host.
Related MCP Servers
- AlicenseDqualityDmaintenanceEnables reading, writing, editing, and converting Office documents (ODT, DOCX, ODS, XLSX, PDF, etc.) using MCP tools, with no external dependencies.1132MIT
- AlicenseAqualityDmaintenanceA local MCP server for reading and editing Word (.docx) documents with 33 tools for content, formatting, comments, page layout, and track changes, running locally via stdio.273046MIT
- FlicenseAqualityCmaintenanceMCP server for Microsoft Office file operations. Read, write, and create Excel, Word, and PowerPoint files directly from your local filesystem.12-
- AlicenseNot gradedqualityCmaintenanceMCP server for creating and editing PowerPoint, Excel, and Word documents. Runs as an SSE server and provides 18 tools for document manipulation.Apache 2.0