office-document-mcp-server
Click on "Install 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-document-mcp-serverRead the content of annual_report.docx"
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 Document MCP Server
This is a sanitized version of a prototype Model Context Protocol (MCP) server providing tools to extract, convert, and generate Microsoft Office documents (Word, Excel, PowerPoint) that I developed in parallel with go-ooxml.
Since the server itself is pretty generic code and does not support enterprise features like Information Rights Management (which I will eventually tackle with a brand new implementation atop go-ooxml), I have decided to carve it out into a standalone repository to have its own CI/CD workflows and making it easier to install via uv.
The code is considered stable, so it will not be maintained other than patches/hotfixes and there is zero support or issue tracking.
Available Tools
Core-First Tool Model
For systems architecture and consulting workflows, treat the server as core-first:
Core tools
office_helpoffice_readoffice_inspectoffice_patchoffice_tableoffice_templateoffice_auditword_insert_at_anchor
Advanced tool roles
fallback: alternate generation/mutation paths when the core flow is not enough
diagnostic: structure discovery, template guidance, anchors, and document maps
legacy compatibility: parity-oriented tools kept for integration compatibility
expert/specialized: deeper SOW/track-changes utilities for narrower workflows
Unified Tools (Primary Interface)
These 9 tools auto-detect document format from file extension or provide cross-format workflow guidance:
Tool | Description |
| Structured workflow help and recommendations for consulting/architecture document workflows |
| Read content from Word/Excel/PowerPoint as JSON or Markdown |
| Get document structure (sheets, slides, sections, tables, comments) |
| Edit cells, shapes, sections, or replace placeholders |
| Add/get/reply/delete comments; Word also supports resolve/reopen, threaded get, and reply threading |
| Table operations: add rows, create tables, add bullets |
| Copy templates or analyze template structure |
| Audit for placeholders, completion, or tracking status |
| Insert images into Word, Excel, or PowerPoint documents |
Specialized Tools
These remain discoverable, but should usually be reached from office_help, diagnostics, or a clear recovery need rather than as the default starting point.
Word SOW Generation
These were a proof-of-concept approach fod managing and updating specific document templates - all the tools marked sow are deprecated and kept only for historical interest.
Tool | Description |
| Fill SOW template with structured data |
| Remove template artifacts and guidance (tracked) |
| Extract template instructions from a section |
| Analyze SOW template structure |
| Create SOW from Markdown content |
| Extract structured data from existing SOW |
| Insert paragraphs before/after an anchor paragraph or paragraph index |
| List headings and high-signal paragraphs that can be used as insertion anchors |
| Return a lightweight map of sections, tables, placeholders, anchors, and warnings |
| Enable Word's track changes mode |
| Replace text with revision marks |
| Accept tracked insertions/deletions and normalize the document content |
PowerPoint Slide Management
Tool | Description |
| Add new slide with specified layout |
| Remove a slide |
| Copy a slide |
| Change slide order |
| Hide/unhide a slide |
| Set speaker notes |
| Get best layout for content type |
| Add change log slide |
Document Conversion
Tool | Description |
| Create Word document from Markdown (supports inline text or |
| Create Excel workbook from Markdown tables (supports inline text or |
| Create PowerPoint from Markdown slides (supports inline text or |
Utility
Tool | Description |
| Hot-reload the server after code changes |
| Show available document formats |
Related MCP server: DOCX-MCP
Quick Examples
Workflow Discovery
# Find the best workflow for filling a consulting SOW from markdown
office_help(
goal="fill_sow_from_markdown",
document_type="word",
constraints=["preserve_template_structure"],
format="summary"
)
# Map a common consulting request onto a deterministic workflow
office_help(
task="Patch an Excel estimate workbook safely and verify the result",
format="detailed"
)
# Discover the safest path for a stakeholder review deck
office_help(
goal="create_review_deck",
document_type="powerpoint",
format="summary"
)Template Analysis Cache
Word template metadata is cached on disk as JSON to avoid re-scanning the same template on every analysis call.
default cache location:
.office-metadata-cache/override with:
OFFICE_MCP_METADATA_CACHE_DIRinvalidation uses: resolved path + file size + mtime
current cache-backed flow:
word_parse_sow_templateandoffice_template(operation="analyze")
Reading Documents
# Read Excel as Markdown
office_read(file_path="data.xlsx", output_format="markdown")
# Read specific range
office_read(file_path="data.xlsx", scope="Sheet1!A1:D10")
# Read a single worksheet
office_read(file_path="data.xlsx", scope="Sheet1")
# Read Excel formulas instead of cached values
office_read(file_path="model.xlsx", include_formulas=True)
# Read Word document
office_read(file_path="report.docx", output_format="markdown")Inspecting Structure
# List Excel sheets
office_inspect(file_path="data.xlsx", what="sheets")
# List Word tables
office_inspect(file_path="report.docx", what="tables")
# List PowerPoint slides
office_inspect(file_path="deck.pptx", what="slides")
# Analyze a Word template and reuse cached metadata on later runs
office_template(
source_path="templates/sow.docx",
destination_path="",
operation="analyze"
)
# Discover insertion anchors before adding narrative content
word_list_anchors(file_path="report.docx", query="delivery")
# Get a compact map of a Word document
word_document_map(file_path="report.docx")Editing Content
# Patch Excel cell
office_patch(
file_path="data.xlsx",
changes=[{"target": "A1", "value": "New Value"}]
)
# Patch Word placeholder
office_patch(
file_path="report.docx",
changes=[{"target": "<Customer>", "value": "Contoso"}]
)
# Patch PowerPoint shape
office_patch(
file_path="deck.pptx",
changes=[{"target": "slide:1/Title 1", "value": "New Title"}]
)
# PowerPoint soft return in a single text box
office_patch(
file_path="deck.pptx",
changes=[{"target": "slide:1/Title 2", "value": "Contoso{br}Project"}]
)Mutation tools now expose a common diagnostics shape for covered Word/Excel workflows and support explicit execution modes on selected high-value paths (best_effort, safe, strict, dry_run).
successstatus(success,partial_success,failed,skipped)warningsmatched_targetsunmatched_targetsskipped_targetsdiagnosticsnext_tools
That makes partial success and recovery paths explicit instead of relying on generic success messages.
best_effort: current compatibility-oriented behaviorsafe: requires a distinct output path for covered mutation flowsstrict: refuses writes when requested targets cannot all be matched cleanlydry_run: predicts matches and diagnostics without writing files
Table Operations
# Add row to Word table
office_table(
file_path="report.docx",
operation="add_row",
table_id="staffing",
data={"Role": "PM", "Count": "1", "Notes": "Lead"}
)
# Create table in Word
office_table(
file_path="report.docx",
operation="create",
data={
"headers": ["Phase", "Owner", "Target Date"],
"rows": [{"Phase": "Discovery", "Owner": "PM", "Target Date": "2026-04-01"}],
"insert_after_section": "Delivery Plan"
}
)
# Add table to PowerPoint
office_table(
file_path="deck.pptx",
operation="create",
table_id="3",
data={
"headers": ["Phase", "Duration"],
"rows": [["Discovery", "2 weeks"]]
}
)Track Changes Workflows
# Enable Track Changes in document settings
word_enable_track_changes(file_path="draft.docx", output_path="draft-tracked.docx")
# Apply a tracked replacement
word_patch_with_track_changes(
file_path="draft-tracked.docx",
replacements={"Old wording": "New wording"},
output_path="draft-review.docx"
)
# Accept tracked changes and normalize the final document
word_accept_all_changes(
file_path="draft-review.docx",
output_path="draft-final.docx"
)Image Support
office_image supports raster formats (PNG, JPG/JPEG, GIF) across Word, Excel, and PowerPoint.
SVG support is currently:
Format | Word | Excel | PowerPoint |
PNG | Yes | Yes | Yes |
SVG | Yes | No | Yes |
Notes:
Excel image placement is cell-anchored.
PowerPoint image placement is centered by default and can be validated from returned position metadata.
Recent local MCP validation covered image insertion plus position/bounds checks for Excel and PowerPoint fixture copies.
Large Markdown Inputs
# Avoid MCP argument-size limits by passing a markdown_file path
word_from_markdown(
output_path="report.docx",
markdown_file="inputs/large-report.md"
)
excel_from_markdown(
output_path="budget.xlsx",
markdown_file="inputs/budget-tables.md"
)
pptx_from_markdown(
output_path="deck.pptx",
markdown_file="inputs/deck.md"
)
word_create_sow_from_markdown(
output_path="sow.docx",
template_path="templates/Agile.docx",
markdown_file="inputs/sow.md"
)Auditing
# Audit for placeholders
office_audit(file_path="report.docx", checks=["placeholders"])
# Audit for completion
office_audit(file_path="report.docx", checks=["completion"])Comment Threads and Resolution (Word)
Word stores comment text in word/comments.xml and thread/resolution metadata in word/commentsExtended.xml.
word_get_comments
word_get_comments(
file_path="SoW.docx",
filter="all", # all | open | resolved | mine
author=None, # used with filter="mine"
format="flat" # flat | threaded
)Each comment now includes:
idauthorinitialsdatetextdone(resolved state)is_replyparent_idpara_id
When format="threaded", response includes:
threads: grouped{ root, replies[] }flat: full backward-compatible flat list
word_resolve_comment
word_resolve_comment(
file_path="SoW.docx",
comment_id="121",
resolved=True, # True=resolve, False=reopen
output_path=None,
)Notes:
If a reply ID is supplied, the root thread is resolved/reopened.
If
commentsExtended.xmlis missing, it is created and wired into the package.If root comments lack
w14:paraId, a paraId is synthesized for stable mapping.
word_reply_to_comment
word_reply_to_comment(
file_path="SoW.docx",
comment_id="121",
text="Done — updated as requested.",
author="Rui Carmo",
auto_resolve=True,
)auto_resolve=True performs reply + resolve in one call.
Unified API (office_comment)
office_comment supports Word thread workflows directly:
office_comment(file_path="SoW.docx", operation="get", format="threaded")
office_comment(file_path="SoW.docx", operation="get", filter="open")
office_comment(file_path="SoW.docx", operation="resolve", target="121")
office_comment(file_path="SoW.docx", operation="reopen", target="121")Supported operations:
Word:
add,get,reply,resolve,reopen,deleteExcel:
add,get,delete(reply/resolve/reopenreturn clear unsupported errors)PowerPoint:
add,get,delete(reply/resolve/reopenreturn clear unsupported errors)
End-to-end round-trip tests
Fixture-based tests cover:
mixed open/resolved states
resolve/reopen toggling
reply-to-root resolution behaviour
legacy
commentsIds.xmlfallbackmissing
commentsExtended.xmlcreationthreaded retrieval + filtering
output-path round trips
Primary test files:
tests/test_word_comment_resolution.pytests/test_word_comment_roundtrip_fixture.pytests/test_word_comment_replies.py
Word Review Workflow
The recommended workflow for reviewing documents is this:
1. office_help(goal="fill_sow_from_markdown") → Choose the workflow and recovery path first
2. office_template(operation="copy") → Create working document from template
3. office_template(operation="analyze") → Understand what to preserve vs fill
4. office_inspect(what="tables") → Get EXACT column names for all tables
5. word_generate_sow → Fill placeholders and tables with data
6. office_patch(operation="section") → Add prose to Introduction, Business Context
7. office_table(operation="insert_row") → Add engagement-specific rows to tables
8. office_patch(operation="fix_split") → Replace any remaining split placeholders
9. office_comment(operation="add") → Add review comments for stakeholders
10. word_cleanup_sow → Remove template guidance (tracked)
11. office_audit(checks=["completion"]) → Verify completion score ≥ 80%Quality Bar: All review tools preserve document structure by editing templates rather than creating new documents from scratch. All changes are tracked for stakeholder review.
Setup
Install from repository (recommended)
Using uv:
uv pip install "git+https://github.com/rcarmo/python-office-mcp-server.git"Using pip:
pip install "git+https://github.com/rcarmo/python-office-mcp-server.git"This installs the office-mcp-server command. Requires Python ≥3.10 (tested with 3.12).
Install from local clone
git clone https://github.com/rcarmo/python-office-mcp-server.git
cd python-office-mcp-server
uv pip install .
# or: pip install .
# or for development: pip install -e .Run without installing
git clone https://github.com/rcarmo/python-office-mcp-server.git
cd python-office-mcp-server
pip install -r requirements.txt
python office_server.pyMCP client configuration
VS Code (.vscode/mcp.json):
{
"servers": {
"office": {
"command": "office-mcp-server"
}
}
}Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"office": {
"command": "office-mcp-server"
}
}
}mcp-cli (mcp_servers.json):
{
"mcpServers": {
"office": {
"command": "office-mcp-server"
}
}
}If using uvx or bunx instead of a pre-installed binary:
{
"command": "uvx",
"args": ["--from", "git+https://github.com/rcarmo/python-office-mcp-server.git", "office-mcp-server"]
}Tool Activation Note
Some MCP clients can start with subsets of tools disabled by policy/session settings. If a call returns a disabled-tool error, enable the corresponding MCP tools in the client first, then retry. This enablement behavior is controlled by the MCP client/host, not by this server.
VS Code (Automatic)
The server can be set to be auto-discovered from .vscode/mcp.json. That is left as an exercise to the reader, but to verify: Open Command Palette → MCP: List Servers → confirm officeServer is listed.
GitHub Copilot CLI
Add the server to your Copilot CLI configuration:
# Open config file
code ~/.config/github-copilot/config.json
# Add this to the mcpServers section:
{
"mcpServers": {
"officeServer": {
"command": "python",
"args": ["/path/to/.github/mcp/office_server.py"]
}
}
}Running Manually
cd .github/mcp
pip install -r requirements.txt
python office_server.pyWindows Single-File Distribution
Build a standalone .exe using PyInstaller.
Build on Windows
cd .github/mcp
python -m pip install -r requirements.txt
python -m pip install -r requirements-build.txt
python build_windows_onefile.py --cleanOutput artifact:
dist/office-mcp-server.exe
Custom output name
python build_windows_onefile.py --name office-server-prodRun executable
dist\office-mcp-server.exeUse the generated executable in MCP client configuration by pointing command to the .exe path.
Dependencies
python-docx— Word document handlingopenpyxl— Excel workbook handlingpython-pptx— PowerPoint presentation handlingaioumcp— Async MCP server frameworkpyinstaller— Build-time dependency for one-file Windows executable
Architecture
The server dynamically loads tool modules from tools/:
office_unified_tools.py— Unified interface (7 tools)word_tools.py— Word conversion toolsword_advanced_tools.py— SOW-specific toolsexcel_tools.py— Excel conversion toolsexcel_advanced_tools.py— Excel advanced operations (internal)pptx_tools.py— PowerPoint conversion toolspptx_advanced_tools.py— Slide management tools
Tools are discovered automatically by class name pattern (*Tools).
Available Tools
61 toolsazure_calculate_costARead-only
Calculate monthly cost for an Azure resource.
Looks up pricing and calculates the estimated monthly cost based on quantity and usage hours.
Example: # Cost for 3 D4 v5 VMs running 24/7 azure_calculate_cost( service="Virtual Machines", sku_match="D4 v5", quantity=3 )
# Cost for 1000 GB storage
azure_calculate_cost(
service="Storage",
product_match="Blob Storage",
sku_match="Hot LRS",
quantity=1000,
hours_per_month=1 # Storage is per GB, not per hour
)Args: service: Azure service name region: ARM region name (default: "westeurope") sku_match: SKU name to match product_match: Product name to match quantity: Number of units (VMs, instances, GB, etc.) hours_per_month: Hours of usage per month (default: 730 = 24/7) price_type: Price type (default: "Consumption") currency: Currency code (default: "USD")
Returns: Dictionary with pricing details and calculated costs
| Name | Required | Description | Default |
|---|---|---|---|
| service | Yes | Azure service name | |
| region | No | ARM region name (default: "westeurope") | |
| sku_match | No | SKU name to match | |
| product_match | No | Product name to match | |
| quantity | No | Number of units (VMs, instances, GB, etc.) | |
| hours_per_month | No | Hours of usage per month (default: 730 = 24/7) | |
| price_type | No | Price type (default: "Consumption") | |
| currency | No | Currency code (default: "USD") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is safe. The description adds that it 'looks up pricing and calculates estimated monthly cost', which is consistent. It does not discuss accuracy, caching, or data freshness, but overall transparency is good.
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 examples and a parameter list, but it redundantly repeats schema descriptions. The examples are helpful, and the front-loading is effective. Some pruning 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 no output schema, the 'Returns' line provides minimal description of return type. The tool has 8 parameters with one required, and the description covers use cases adequately. It could mention that cost components are returned, but it's sufficient for selection and 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 coverage is 100%, and the description adds value by providing examples that clarify parameter usage (e.g., hours_per_month=1 for storage, defaults like 730 hours). The examples demonstrate how parameters interact, going beyond mere 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 'Calculate monthly cost for an Azure resource' and provides examples that differentiate it from siblings like azure_fetch_prices and azure_query_prices, which focus on raw price lookups. The verb 'calculate' and the resource 'Azure resource' 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?
Examples illustrate typical usage (e.g., VM cost, storage cost) but do not explicitly state when not to use it or mention alternative tools like azure_query_prices for raw price retrieval. The guidance is clear but lacks exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_clear_cacheADestructive
Clear Azure pricing cache.
Args: service: Clear cache for specific service only (None = all) region: Clear cache for specific region only (None = all) clear_disk: Clear disk cache (default: True) clear_memory: Clear memory cache (default: True)
Returns: Dictionary with cleared cache information
| Name | Required | Description | Default |
|---|---|---|---|
| service | No | Clear cache for specific service only (None = all) | |
| region | No | Clear cache for specific region only (None = all) | |
| clear_disk | No | Clear disk cache (default: True) | |
| clear_memory | No | Clear memory cache (default: True) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint: true. The description adds that it returns a dictionary with cleared cache information but does not elaborate on side effects or required permissions. This is adequate given the annotations, but lacks extra context.
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 short and front-loaded with the main purpose, followed by a clear parameter list. No extraneous information. 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?
For a simple cache-clearing tool with no required parameters and no output schema, the description covers the functionality and parameter effects sufficiently. It does not discuss use cases or potential impacts, but for this tool it is complete enough.
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 100% coverage, providing descriptions for all four parameters. The description essentially replicates these parameter descriptions, adding no new meaning beyond defaults. Thus, it meets the baseline of 3.
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 directly states 'Clear Azure pricing cache', which is a specific verb-resource pairing. It clearly distinguishes from sibling tools like azure_fetch_prices or azure_calculate_cost, which are for data retrieval/computation.
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 guidance on when to use this tool versus alternatives. The description lists parameters but does not indicate scenarios such as clearing cache to force updated pricing or avoiding unnecessary cache clearing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_fetch_pricesARead-only
Fetch and cache Azure retail prices for specified services and regions.
Downloads pricing data from the Azure Retail Prices API and stores it locally for fast subsequent queries. Data is cached on disk for 24 hours.
Example: azure_fetch_prices( services=["Virtual Machines", "Azure Databricks", "Storage"], regions=["westeurope", "eastus"] )
azure_fetch_prices(services=["API Management"], force_refresh=True)Args: services: List of Azure service names to fetch pricing for. If None, fetches common services. regions: List of ARM region names (e.g., "westeurope", "eastus"). If None, fetches common regions. currency: Currency code (default: "USD") force_refresh: If True, ignore cache and fetch fresh data
Returns: Dictionary with fetch status and summary statistics
| Name | Required | Description | Default |
|---|---|---|---|
| services | No | List of Azure service names to fetch pricing for. If None, fetches common services. | |
| regions | No | List of ARM region names (e.g., "westeurope", "eastus"). If None, fetches common regions. | |
| currency | No | Currency code (default: "USD") | |
| force_refresh | No | If True, ignore cache and fetch fresh data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds details about local caching for 24 hours, force_refresh behavior, and default fallback for services/regions, which are useful beyond 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?
Well-structured with example and sections, but slightly verbose. The core purpose is clear in the first sentence, and the example is helpful.
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 4 parameters and no output schema, the description covers caching, return type (dictionary with status and summary), and examples. Lacks details on specific return keys and error handling, but overall sufficient.
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 100%, so baseline is 3. The description repeats parameter descriptions already in the schema but adds no additional meaning beyond what is already provided.
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 'Fetch and cache Azure retail prices' and mentions the API and caching. It is specific about what it does but does not explicitly distinguish from sibling tools like azure_query_prices.
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 guidance on when to use this tool versus alternatives like azure_query_prices or when to use force_refresh. Examples show usage but lack conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_list_cached_servicesARead-only
List all services currently cached in memory and on disk.
Returns: Dictionary with cached service/region combinations and statistics
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds context (in memory and on disk, returns statistics) without contradicting 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?
Description is extremely concise with no wasted words, front-loading the action and including return type.
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 zero-parameter tool with annotations, the description covers the return type and scope, providing 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?
No parameters exist, so baseline is 4; description does not need to add parameter info.
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 specifies a clear action ('List') and resource ('cached services'), distinguishing it from siblings like 'azure_list_services' which list all services.
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 cached services but does not explicitly state when to use this tool over alternatives or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_list_regionsARead-only
List available ARM regions for a service or cached data.
Args: service: Optional service name to filter by currency: Currency code (default: "USD") from_cache_only: If True, only uses cached data max_pages: Maximum API pages to scan when fetching (default: 2) max_regions: Maximum regions to return (default: 200)
Returns: Dictionary with region names and source metadata
| Name | Required | Description | Default |
|---|---|---|---|
| service | No | Optional service name to filter by | |
| currency | No | Currency code (default: "USD") | |
| from_cache_only | No | If True, only uses cached data | |
| max_pages | No | Maximum API pages to scan when fetching (default: 2) | |
| max_regions | No | Maximum regions to return (default: 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, non-destructive behavior; the description adds details on optional service filtering, caching, pagination, and limits, providing useful behavioral context.
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?
Concise, well-structured docstring with Args and Returns sections, no waste, front-loaded with purpose.
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 read-only list tool, the description sufficiently explains parameters and return format; no output schema but return description is adequate.
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 100% with defaults already documented; description repeats parameter info and adds return format, offering marginal value over 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 the tool lists available ARM regions for a service or cached data, distinguishing it from sibling tools like azure_list_services.
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 guidance on when to use this tool versus alternatives; the description implies usage through parameters but lacks when-not or alternative tool mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_list_servicesARead-only
List available Azure service names for a region.
Args: region: ARM region name (default: "westeurope") currency: Currency code (default: "USD") from_cache_only: If True, only uses cached data max_pages: Maximum API pages to scan when fetching (default: 2) max_services: Maximum services to return (default: 200)
Returns: Dictionary with service names and source metadata
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | ARM region name (default: "westeurope") | |
| currency | No | Currency code (default: "USD") | |
| from_cache_only | No | If True, only uses cached data | |
| max_pages | No | Maximum API pages to scan when fetching (default: 2) | |
| max_services | No | Maximum services to return (default: 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds important context: caching strategy (from_cache_only), pagination (max_pages), and limits (max_services). This goes beyond 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 extremely concise with a clear purpose sentence, args list, and returns note. 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?
For a list tool with no output schema, the description covers return type, caching, pagination, and limits. It is sufficiently complete given the parameter richness.
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 100%, so parameters are fully documented. The description does not add new parameter-level meaning beyond summarizing defaults and the return type.
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 (list) and what is returned (Azure service names for a region). It is specific but does not explicitly distinguish from sibling tools like azure_list_cached_services.
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 includes parameter defaults and a caching option, implying when to use cached data, but no explicit guidance on when to prefer this tool over alternatives like azure_list_cached_services.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
azure_query_pricesARead-only
Query cached Azure pricing data with flexible filters.
Searches the in-memory price cache for matching items. If data is not cached, it will be fetched automatically.
Example: # Get VM pricing azure_query_prices( service="Virtual Machines", region="westeurope", sku_contains="D4" )
# Get Databricks DBU pricing
azure_query_prices(
service="Azure Databricks",
sku_contains="All-purpose"
)
# Get reserved instance pricing
azure_query_prices(
service="Virtual Machines",
sku_contains="D4",
price_type="Reservation"
)Args: service: Azure service name (required for initial query) region: ARM region name (default: "westeurope") sku_contains: Filter by SKU name containing this string product_contains: Filter by product name containing this string price_type: Price type filter: "Consumption", "Reservation", "DevTestConsumption", or None for all currency: Currency code (default: "USD") max_results: Maximum items to return (default: 50)
Returns: Dictionary with matching price items and summary
| Name | Required | Description | Default |
|---|---|---|---|
| service | Yes | Azure service name (required for initial query) | |
| region | No | ARM region name (default: "westeurope") | |
| sku_contains | No | Filter by SKU name containing this string | |
| product_contains | No | Filter by product name containing this string | |
| price_type | No | Price type filter: "Consumption", "Reservation", "DevTestConsumption", or None for all | |
| currency | No | Currency code (default: "USD") | |
| max_results | No | Maximum items to return (default: 50) | |
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds valuable context beyond annotations: it explains the caching behavior ('If data is not cached, it will be fetched automatically') and the return format (dictionary with matching items and summary). 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: a concise one-line purpose, then brief caching behavior, followed by clear examples, and a bulleted args list. Every sentence adds value, no fluff, and the most important 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 8 parameters, no output schema, and openWorldHint=true, the description adequately covers caching behavior, examples, return type, and parameter usage. It lacks explanation of the 'page' parameter and pagination, but overall it is sufficient 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?
Schema description coverage is 88% (7 of 8 parameters have descriptions). The description repeats parameter details but adds examples that show usage patterns for service, sku_contains, and price_type. However, the 'page' parameter is not documented in the schema or description, so the description does not fully compensate for that 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 tool 'Query cached Azure pricing data with flexible filters', specifying the verb 'query', the resource 'cached Azure pricing data', and the capability 'flexible filters'. It distinguishes itself from siblings like azure_fetch_prices and azure_calculate_cost by focusing on querying a cache.
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 the tool: for querying cached Azure pricing data with automatic fetching if not cached. Examples demonstrate various use cases (VM pricing, Databricks, reserved instances). However, it does not explicitly state when NOT to use it or name alternative tools, though the cache vs. fetch distinction is implied.
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 an Excel worksheet.
Example: excel_add_chart( file_path="report.xlsx", data_range="Sheet1!A1:D8", chart_type="line", title="Growth Forecast", position="F2" )
Args: file_path: Path to the .xlsx or .xlsm file data_range: Range containing data (e.g., "A1:D10" or "Sheet1!A1:D10") chart_type: "line", "bar", "column", or "pie" sheet_name: Optional sheet name (overrides sheet in data_range) title: Optional chart title position: Top-left anchor cell for the chart (default "E2") has_header: Treat first row as header for series names use_first_column_as_categories: Use first column as category labels output_path: Optional output path (defaults to overwriting input)
Returns: Status dictionary with chart details
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .xlsx or .xlsm file | |
| data_range | Yes | Range containing data (e.g., "A1:D10" or "Sheet1!A1:D10") | |
| chart_type | No | "line", "bar", "column", or "pie" | |
| sheet_name | No | Optional sheet name (overrides sheet in data_range) | |
| title | No | Optional chart title | |
| position | No | Top-left anchor cell for the chart (default "E2") | |
| has_header | No | Treat first row as header for series names | |
| use_first_column_as_categories | No | Use first column as category labels | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive behavior. The description explicitly states that output_path defaults to overwriting the input file, disclosing a key behavioral trait. However, it does not cover authorization requirements or rate limits.
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 purpose sentence, an illustrative example, and a bulleted Arg list. While not extremely concise, it efficiently uses space 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 has 9 parameters with 2 required and no output schema, the description covers all essential aspects: inputs, defaults, and return value (status dictionary). It lacks only fine-grained details like error conditions or exact return format.
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 100% schema coverage, baseline is 3. The description adds value by providing an example and an Args block that explains each parameter in context (e.g., 'Optional sheet name (overrides sheet in data_range)') and indicates defaults, going beyond the schema alone.
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 ('Add a chart to an Excel worksheet') with a specific verb and resource. Among siblings, it is distinct from other Excel tools like excel_add_sheet, making its 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 an example but no explicit guidance on when to use this tool versus alternatives or when not to use it. Usage is implied (when a chart is needed), but no exclusions or contextual advice are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
excel_add_sheetA
Add a new sheet to an Excel workbook.
Creates a new empty sheet in the workbook at the specified position. The sheet can be inserted at the start, end, or after a specific existing sheet.
Example: excel_add_sheet(file_path="data.xlsx", sheet_name="Summary") excel_add_sheet(file_path="data.xlsx", sheet_name="NewSheet", position="start") excel_add_sheet(file_path="data.xlsx", sheet_name="Details", position="Sheet1")
Args: file_path: Path to the .xlsx or .xlsm file sheet_name: Name for the new sheet position: Where to insert - 'start', 'end' (default), or name of sheet to insert after output_path: Optional output path (defaults to overwriting input file)
Returns: Dictionary with success status and sheet details
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .xlsx or .xlsm file | |
| sheet_name | Yes | Name for the new sheet | |
| position | No | Where to insert - 'start', 'end' (default), or name of sheet to insert after | |
| output_path | No | Optional output path (defaults to overwriting input file) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations: creation of an empty sheet, insertion position options, and overwrite behavior via output_path. However, it does not disclose behavior when the sheet name already exists or error handling.
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: a one-line summary, brief explanation, three clear examples, parameter list, and return note. 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 simplicity and lack of output schema, the description covers the core functionality, parameter behavior, and return value. It is complete 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 100%, so baseline is 3. The description includes an Args section that reiterates schema descriptions but adds value through examples showing parameter combinations and usage patterns.
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 starts with 'Add a new sheet to an Excel workbook', which is a specific verb and resource. It clearly distinguishes from siblings like excel_add_chart or excel_list_sheets, as no other sibling adds a 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 examples and parameter details, making the usage context clear. However, it does not explicitly state when not to use this tool or mention alternatives for related operations (e.g., if sheet exists).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
excel_delete_commentADestructive
Delete a comment from a specific cell.
Args: file_path: Path to the .xlsx or .xlsm file cell_ref: Cell reference (e.g., 'B5', 'Sheet1!C10') sheet_name: Optional sheet name (overrides sheet in cell_ref) output_path: Optional output path (defaults to overwriting input)
Returns: Status dictionary with deletion details
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .xlsx or .xlsm file | |
| cell_ref | Yes | Cell reference (e.g., 'B5', 'Sheet1!C10') | |
| sheet_name | No | Optional sheet name (overrides sheet in cell_ref) | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true. The description adds that it returns a status dictionary with deletion details, but does not disclose error handling behavior (e.g., if comment is missing). With annotations covering the core behavioral trait, the description provides some additional but incomplete context.
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 a clear purpose stated first. The Args and Returns sections are structured and add value without unnecessary verbosity.
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 (delete operation, 4 params, no output schema), the description covers the basic operation but lacks completeness on edge cases, default behavior for output_path, and potential errors. It is adequate but not thorough.
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 100%, so the schema already documents all parameters. The description repeats parameter information without adding new semantics or usage constraints beyond what is in 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 action ('Delete a comment') and the target ('from a specific cell'), implying an Excel file context. With sibling tools like pptx_delete_comment and word_delete_comment, the tool is well-distinguished as the Excel-specific deletion tool.
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. No prerequisites mentioned (e.g., file must exist, comment must be present). No mention of when not to use it or what to do if the comment doesn't exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
excel_from_markdownA
Convert Markdown tables to an Excel workbook from inline content or markdown_file.
This is the primary tool for creating Excel workbooks from text content.
Parses GitHub Flavored Markdown content and extracts all tables.
Each table becomes a separate sheet in the workbook.
Features:
- Auto-detects multiple tables in the content using GFM parser
- Header row gets bold formatting with gray background
- Auto-filter on header row
- Column widths auto-sized based on content
- Numbers and percentages are coerced to numeric types
- Supports inline formatting in cells (bold, italic, code)
- Supports formulas when a cell starts with '='
- Uses nearby '##' headings to name sheets (up to 31 chars)
Example:
excel_from_markdown(
output_path="04. Artifacts/budget.xlsx",
markdown='''
Category | Q1 | Q2 | Q3 | Q4 | Total |
Personnel | $50,000 | $52,000 | $54,000 | $56,000 | $212,000 |
Infrastructure | $15,000 | $15,000 | $16,000 | $16,000 | $62,000 |
Software | $8,000 | $8,500 | $9,000 | $9,500 | $35,000 |
Training | $5,000 | $3,000 | $4,000 | $3,000 | $15,000 |
Milestone | Target Date | Owner | Status |
Phase 1 Complete | 2026-03-31 | Alice | 100% |
Phase 2 Complete | 2026-06-30 | Bob | 45% |
Go-Live | 2026-09-30 | Carol | 0% |
''' |
)
Args:
output_path: Path for the output .xlsx file
markdown: GitHub Flavored Markdown content containing one or more tables (inline)
sheet_name: Optional sheet name for the first/only sheet
markdown_file: Optional path to a Markdown file. Use this for
very large inputs to avoid MCP argument-size limits.
Returns:
Status dictionary with file path and sheet count
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | Yes | Path for the output .xlsx file | |
| markdown | No | GitHub Flavored Markdown content containing one or more tables (inline) | |
| sheet_name | No | Optional sheet name for the first/only sheet | |
| markdown_file | No | Optional path to a Markdown file. Use this for very large inputs to avoid MCP argument-size limits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-readonly and non-destructive. The description adds extensive detail: GFM parsing, auto-detection, formatting, numeric coercion, formulas, sheet naming from headings, and argument-size limits for markdown_file.
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 and a comprehensive example. It is appropriately detailed for a complex tool, though slightly lengthy; 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, the description covers all behavioral aspects, constraints (sheet name length, input size limits), and return value. It includes a rich example and does not rely on 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?
Schema description coverage is 100% and already explains each parameter clearly. The description adds an example and clarifies markdown_file usage for large inputs, but does not introduce new semantic 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 tool converts Markdown tables to an Excel workbook, specifying the verb and resource. It distinguishes from sibling tools like excel_add_sheet and word_from_markdown by focusing on creation from markdown content.
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 calls it 'the primary tool for creating Excel workbooks from text content' and explains inline vs file input, offering clear usage context. However, it does not explicitly exclude other tools like excel_add_sheet for non-table content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
excel_list_sheetsARead-only
List all sheets in an Excel workbook with their properties.
Provides detailed information about each sheet including visibility, dimensions, and whether it contains tables or data validations.
Example: excel_list_sheets(file_path="template.xlsx")
Args: file_path: Path to the .xlsx or .xlsm file include_hidden: Include hidden and very hidden sheets (default True)
Returns: Dictionary with sheet information including names, states, and metadata
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .xlsx or .xlsm file | |
| include_hidden | No | Include hidden and very hidden sheets (default True) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only behavior, and the description adds context by detailing the output (visibility, dimensions, tables, data validations). It provides an example and parameter details, enhancing transparency beyond the 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 a clear purpose, example, and parameter breakdown. It is slightly verbose with a 'Returns' section that duplicates schema info, but overall it is 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 simplicity, the description covers the essential aspects: what it does, how to use it, and what it returns. It lacks an explicit output schema but adequately describes the return value. Annotations cover safety, so 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 100%, and the description's parameter descriptions largely repeat the schema. The example usage provides minimal additional context for parameter semantics, but does not significantly enrich 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 tool lists all sheets in an Excel workbook with properties. It uses a specific verb-resource pair ('list sheets') and distinguishes itself from sibling Excel tools that perform different actions (e.g., adding or modifying 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 implies usage by stating the tool's purpose but provides no explicit guidance on when to use it versus alternatives. It does not mention when not to use it or suggest other tools for related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_supported_formatsARead-only
List supported document formats and their availability.
Returns: Dictionary showing which formats are available
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds that it returns a dictionary, which is basic. No additional behavioral traits (e.g., about caching, dynamic nature) are disclosed.
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 two short sentences. However, there is slight redundancy: 'List supported document formats and their availability' implies a mapping, and the 'Returns' line restates this. It is still efficient but could be merged.
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 no parameters and no output schema, the description is vague about which document formats are supported (e.g., Word, Excel, PowerPoint) and whether the list is static or dynamic. More context is needed for a complete understanding.
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 tool has zero parameters, and the schema description coverage is 100%. The description does not need to add parameter semantics; the baseline for zero params is 4.
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 lists supported document formats and their availability. The verb 'list' and resource 'supported formats' are specific, and it distinguishes from sibling tools that deal with services, prices, or document manipulation.
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 is provided on when to use this tool versus alternatives or when not to use it. The description only states the function, leaving the agent to infer context from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
office_auditARead-only
Audit documents for completeness, placeholders, and issues.
Replaces: excel_audit_placeholders, word_audit_completion, word_audit_sow, pptx_audit_placeholders
Examples: # Check for unfilled placeholders office_audit(file_path="contract.docx", checks=["placeholders"])
# Full completion audit
office_audit(file_path="sow.docx", checks=["completion"])
# Check Excel for placeholders
office_audit(file_path="estimate.xlsx", checks=["placeholders"])
# Multiple checks
office_audit(
file_path="document.docx",
checks=["placeholders", "tracking"]
)Args: file_path: Path to the document checks: List of checks to perform: - "placeholders": Find unfilled <...>, [...], [TBD] patterns - "completion": Full completion audit (Word SOW) - "tracking": Check for pending track changes - "formatting": Check for formatting issues - "empty_cells": Check required Excel cells for empty values - "totals": Verify Excel totals based on configured ranges - "dates": Validate Excel date formats (MM/DD/YYYY) audit_config: Optional configuration for Excel checks: - required_cells: list of cell refs to check for empty values - date_cells: list of cell refs to validate as MM/DD/YYYY - totals: list of dicts with sum_range, target, and optional tolerance
Returns: Dictionary with audit findings
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the document | |
| checks | No | List of checks to perform audit_config: Optional configuration for Excel checks: | |
| audit_config | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the agent knows it's a safe read operation. The description adds the list of checks and configuration details but does not expand on behavioral traits beyond what annotations imply. With annotations present, the description adds some context but is not essential.
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 for purpose, replacements, examples, args, and returns. It is somewhat lengthy but front-loaded with the main purpose. Every section adds value, and the examples are helpful.
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, nested object, no output schema), the description is thorough: it explains all checks, the audit_config structure, and return format. The 'Replaces' line and examples provide sufficient context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides an 'Args' section that explains each parameter, including the enum values for 'checks' and the subfields of 'audit_config', which go beyond the schema's descriptions. Schema coverage is 67%, and the description compensates by detailing optional configuration.
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 starts with a clear verb+resource: 'Audit documents for completeness, placeholders, and issues.' It also lists the tools it replaces, distinguishing it from siblings like excel_audit_placeholders and word_audit_completion.
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 explicitly states 'Replaces: excel_audit_placeholders, word_audit_completion, word_audit_sow, pptx_audit_placeholders,' which tells when to use this tool. Examples further clarify usage scenarios. It does not explicitly say when not to use, but the replacement guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
office_commentA
Manage comments in Word, Excel, or PowerPoint documents.
Replaces: excel_add_comment, excel_get_comments, word_add_comment, pptx_add_comment, pptx_get_comments
Examples: # Get all comments from Excel office_comment(file_path="data.xlsx", operation="get")
# Add comment to Excel cell
office_comment(
file_path="data.xlsx",
operation="add",
target="B5",
text="Review this value"
)
# Add comment to Word text
office_comment(
file_path="report.docx",
operation="add",
target="project timeline",
text="Verify dates with PM"
)
# Reply to an existing Word comment by comment ID
office_comment(
file_path="report.docx",
operation="reply",
target="12", # comment ID from office_comment(..., operation="get")
text="Acknowledged - updated in v2"
)
# Add comment to PowerPoint slide
office_comment(
file_path="deck.pptx",
operation="add",
target="3", # or "slide:3"
text="Update chart data"
)Args: file_path: Path to the document operation: add/get/reply/delete plus resolve/reopen for Word target: Target location/ID - Excel add/delete: cell reference (e.g., "B5") - Excel get: optional sheet name filter - Word add: text span to annotate - Word reply/resolve/reopen/delete: comment ID - PowerPoint add: slide number ("3" or "slide:3") - PowerPoint delete: "slide:N" or "slide:N/comment:I" text: Comment text (required for add/reply) author: Author display name. Also used by Word get(filter="mine") output_path: Optional output path (defaults to overwriting input) format: For Word get only: "flat" (default) or "threaded" filter: For Word get only: "all" (default), "open", "resolved", "mine"
Returns: Dictionary with operation results
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the document | |
| operation | No | add/get/reply/delete plus resolve/reopen for Word | |
| target | No | Target location/ID | |
| text | Yes | Comment text (required for add/reply) | |
| author | No | Author display name. Also used by Word get(filter="mine") | |
| output_path | No | Optional output path (defaults to overwriting input) | |
| format | No | For Word get only: "flat" (default) or "threaded" | |
| filter | No | For Word get only: "all" (default), "open", "resolved", "mine" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=false; the description adds behavioral context such as operation-specific behavior per app (e.g., resolve/reopen for Word only), target variations, and default output overwrite. 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 lengthy but well-structured with examples and separate sections for Args and Returns. The main purpose is front-loaded. Could be slightly more concise, but clarity benefits from examples.
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?
All 8 parameters are described with usage details. Despite no output schema, the description states return type ('dictionary'). Covers all operations and supported apps comprehensively.
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 100%, baseline 3. The description adds meaning beyond schema by detailing target usage per operation/app and providing concrete examples (e.g., 'target' for Excel add is a cell reference, for Word add is a text span).
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 'Manage comments in Word, Excel, or PowerPoint documents.' It lists specific operations and replaces several sibling tools (e.g., excel_add_comment, word_get_comments), clearly distinguishing its unified functionality.
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 examples for each operation and app, explaining how target varies. It mentions replaced tools but does not explicitly state when to avoid this tool in favor of others for non-comment tasks (e.g., reading content via office_read).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
office_helpA
Get structured workflow help and recommendations for office document work.
Use this as the preferred discovery entry point for systems architecture
and consulting workflows. Prefer goal plus optional document_type
and constraints. task is supported only as a thin convenience layer
for mapping common natural-language requests onto the structured workflow
catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| document_type | No | ||
| constraints | No | ||
| task | No | ||
| format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=false and destructiveHint=false. The description implies a read operation ('get help'), but does not clarify mutation potential. No contradiction, but the description could better explain side effects or state changes.
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 4 sentences, front-loaded with purpose, then usage guidance. No redundant information; every sentence earns its place.
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 output schema, 5 parameters, and numerous sibling tools, the description provides adequate context for a discovery tool but lacks details on return format and specific parameter behavior, making it partially 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?
With 0% schema description coverage, the description adds value by explaining the relationship between 'goal', 'task', and optional parameters. However, it omits explanation for 'format' and 'constraints' details, leaving gaps.
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 'Get structured workflow help and recommendations for office document work,' using a specific verb and resource. It distinguishes itself from sibling tools by positioning as a discovery entry point for systems architecture and consulting workflows, not a direct action tool.
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 explicitly says 'Use this as the preferred discovery entry point...' and provides guidance on preferring 'goal' plus optional parameters over 'task'. It lacks explicit when-not-to-use or alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
office_imageA
Insert an image into a Word, Excel, or PowerPoint document.
Auto-detects document format from file extension and inserts the image at the specified location. Supports PNG, JPG/JPEG, and GIF formats.
Examples: # Insert image at end of Word document office_image( file_path="report.docx", image_path="logo.png", width_inches=2.0 )
# Insert image at specific paragraph in Word
office_image(
file_path="report.docx",
image_path="chart.png",
target="after:Executive Summary",
width_inches=5.0
)
# Insert image in Excel cell
office_image(
file_path="data.xlsx",
image_path="logo.png",
target="A1",
width_inches=1.5
)
# Insert image on specific Excel sheet
office_image(
file_path="data.xlsx",
image_path="chart.png",
target="Sheet2!B5"
)
# Insert image on PowerPoint slide
office_image(
file_path="deck.pptx",
image_path="diagram.png",
target="slide:2",
width_inches=4.0,
height_inches=3.0
)Args: file_path: Path to the document (.docx, .xlsx, .pptx) image_path: Path to the image file (.png, .jpg, .jpeg, .gif) target: Where to insert the image: - Word: "after:Section Title" or "end" (default) - Excel: cell reference like "A1" or "Sheet1!B5" - PowerPoint: "slide:N" where N is slide number (1-based) width_inches: Image width in inches (height auto-scales if not set) height_inches: Image height in inches (width auto-scales if not set) output_path: Optional output path (defaults to overwriting input)
Returns: Dictionary with insertion result
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the document (.docx, .xlsx, .pptx) | |
| image_path | Yes | Path to the image file (.png, .jpg, .jpeg, .gif) | |
| target | No | Where to insert the image | |
| width_inches | No | Image width in inches (height auto-scales if not set) | |
| height_inches | No | Image height in inches (width auto-scales if not set) | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds valuable behavioral details: auto-detects document format, defaults to overwriting input unless output_path specified, and explains target parameter behavior per app. No contradiction with 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?
Well-structured: one-line summary, followed by auto-detection note, then comprehensive examples, and finally Args. Information is front-loaded. Every sentence is necessary given the multi-application context.
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 6 parameters, multiple document types, and no output schema, the description covers all essential aspects: supported formats, target syntax, default behavior, and return value. It is complete enough for an agent to 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?
Schema coverage is 100%, so parameters are already documented. The description enhances understanding by providing detailed explanations and examples for the 'target' parameter across different document types, which is not fully captured in the schema description.
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 'Insert an image into a Word, Excel, or PowerPoint document.' It specifies supported formats (PNG, JPG/JPEG, GIF) and auto-detection. This distinguishes it from sibling tools like excel_add_chart and office_patch, which serve different purposes.
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?
Provides clear context for use via examples for each application type (Word, Excel, PowerPoint). Although no explicit 'when not to use' is given, the examples effectively guide the agent on target syntax and parameter usage. Alternatives among siblings are not mentioned, but the tool's unique function is apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
office_inspectARead-only
Inspect document structure and metadata.
Auto-detects document format and returns requested structural information.
Replaces: excel_list_sheets, excel_list_tables, excel_list_named_ranges, excel_list_merged_cells, excel_get_comments, excel_get_change_log, word_list_sections, word_list_tables, word_check_tracking, pptx_list_slides, pptx_list_shapes, pptx_list_masters, pptx_get_notes, pptx_get_comments, pptx_get_hidden_slides
Examples: # List all sheets in Excel workbook office_inspect(file_path="data.xlsx", what="sheets")
# List tables in Excel
office_inspect(file_path="data.xlsx", what="tables")
# Get comments from Excel
office_inspect(file_path="data.xlsx", what="comments")
# List slides in PowerPoint
office_inspect(file_path="deck.pptx", what="slides")
# List sections in Word
office_inspect(file_path="report.docx", what="sections")
# Get shapes on a specific slide
office_inspect(file_path="deck.pptx", what="shapes", target="3")Args: file_path: Path to the document what: What to inspect: - "structure": Overview of document structure - "sheets": Excel sheets list - "slides": PowerPoint slides list - "sections": Word sections list - "tables": Tables in document - "named_ranges": Excel named ranges - "merged_cells": Excel merged cell regions - "comments": Comments/notes in document - "tracking": Track changes status (Word) - "shapes": Shapes on a slide (PowerPoint) - "masters": Slide masters (PowerPoint) target: Optional target for scoped inspection: - Sheet name for Excel - Slide number for PowerPoint
Returns: Dictionary with inspection results
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the document | |
| what | No | What to inspect | |
| target | No | Optional target for scoped inspection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint: true and destructiveHint: false, and the description consistently describes an inspection (read-only) operation. The description further adds behavioral context such as auto-detection of format and unified replacement of many tools, fully aligning with 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: a concise first-line summary, a note on auto-detection, a replacement list, a comprehensive examples section, and an Args section. All sentences add value, no 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 (3 parameters, read-only, no output schema), the description fully covers necessary context. It explains how to use the tool with different document types, lists all inspection options, and provides clear examples. The return type is mentioned as a dictionary.
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 100%, but the description provides extensive additional meaning: it explains each allowed 'what' value with context, describes the 'target' parameter's usage for different document types, and includes examples. This goes beyond the schema's minimal parameter 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 states the tool inspects document structure and metadata, auto-detects format, and lists many specific inspection types. It clearly differentiates from sibling tools like office_read, office_patch, and the replaced tools such as excel_list_sheets by stating it replaces them.
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 explicitly lists which tools this tool replaces, providing clear guidance on when to use it instead of alternatives. It also explains auto-detection of document format and includes examples covering common use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
office_patchA
Apply edits to Word, Excel, or PowerPoint documents.
Accepts a list of changes and applies them to the document. Each change specifies a target (cell, shape, placeholder, section) and new value.
Replaces: excel_patch_cell, excel_patch_range, excel_replace_placeholders, word_patch_section, word_patch_placeholder, word_fix_split_placeholders, word_replace_global_variables, pptx_patch_shape, pptx_replace_text, pptx_replace_placeholders
Examples: # Patch Excel cells office_patch( file_path="data.xlsx", changes=[ {"target": "B5", "value": "New Value"}, {"target": "C10", "value": 42}, {"target": "D1", "value": "=SUM(A1:A10)"}, ] )
# Patch Excel range (multiple cells at once)
office_patch(
file_path="data.xlsx",
changes=[{"target": "A1:B3", "value": [["H1", "H2"], ["A", 1], ["B", 2]]}]
)
# Patch cells on a specific sheet (quote sheet names with special chars)
office_patch(
file_path="form.xlsm",
changes=[
{"target": "'ECIF Work Scope (E)'!B5", "value": "Contoso Ltd"},
{"target": "'ECIF Work Scope (E)'!B28", "value": "02/01/2026"},
]
)
# Replace placeholders in Word
office_patch(
file_path="template.docx",
changes=[
{"target": "<Customer Name>", "value": "Acme Corp"},
{"target": "<Date>", "value": "2026-01-23"},
]
)
# Patch PowerPoint shape
office_patch(
file_path="deck.pptx",
changes=[{"target": "slide:1/Title 1", "value": "New Title"}]
)
# Patch PowerPoint with soft return
office_patch(
file_path="deck.pptx",
changes=[{"target": "slide:1/Title 2", "value": "Contoso{br}Project"}]
)IMPORTANT for PowerPoint: When patching content placeholders (body, Content Placeholder), do NOT include bullet characters (•, -, *, etc.) in text lines. PowerPoint placeholders automatically render each line as a bullet. Including bullet characters causes duplication like '- • text'. Use newlines to separate items, and leading spaces (4 spaces) for indentation.
Args: file_path: Path to the document changes: List of changes, each a dict with "target" (cell ref, placeholder, or shape path) and "value" (new content, no bullet chars for PPTX body) track_changes: Log changes for audit trail (default True) output_path: Optional output path (defaults to overwriting input)
Returns: Dictionary with results of all changes. Each successful result includes a "value_preview" field with a truncated preview of the value applied.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the document | |
| changes | Yes | List of changes, each a dict with "target" (cell ref, placeholder, or shape path) and "value" (new content, no bullet chars for PPTX body) | |
| track_changes | No | Log changes for audit trail (default True) | |
| output_path | No | Optional output path (defaults to overwriting input) | |
| mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation (readOnlyHint=false, destructiveHint=false). Description adds context: track_changes default, overwrite behavior, and critical note about PPTX bullets. No contradiction with 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?
Well-structured with examples and bolded important note. Slightly lengthy but each section adds value; front-loaded with the core 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?
No output schema, but description explains return format. Covers all necessary aspects: file path, changes formatting, track_changes, output_path, and PPTX specific behavior. Complete for a multi-document patching 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 80% description coverage. Description adds meaning by explaining target formats across document types (cell refs, placeholders) and the bullet constraint for PPTX. The 'mode' parameter is not mentioned in description, but the overall guidance is valuable.
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 'Apply edits to Word, Excel, or PowerPoint documents.' and lists the tools it replaces (e.g., excel_patch_cell, word_patch_section), making the purpose unambiguous and distinct from sibling tools.
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?
Provides detailed examples for each document type and important notes for PowerPoint. Lacks explicit when-not-to-use or alternative suggestions, but the coverage of use cases is thorough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
office_readARead-only
Read content from Word, Excel, or PowerPoint documents.
Auto-detects document format from file extension and extracts content in the requested output format.
Replaces: word_extract, word_to_markdown, excel_extract, excel_to_markdown, excel_get_range, pptx_extract, pptx_to_markdown
Examples: # Read entire Excel file as JSON office_read(file_path="data.xlsx")
# Read Excel file as markdown
office_read(file_path="data.xlsx", output_format="markdown")
# Read specific range from Excel
office_read(file_path="data.xlsx", scope="Sheet1!A1:D10")
# Read a single worksheet
office_read(file_path="data.xlsx", scope="Sheet1")
# Read Word document as markdown
office_read(file_path="report.docx", output_format="markdown")
# Read PowerPoint as JSON
office_read(file_path="deck.pptx")Args: file_path: Path to the document (.docx, .xlsx, .xlsm, .pptx) output_format: Output format - "json" for structured data, "markdown" for text representation scope: Optional scope limiter: - Excel: sheet name like "Sheet1" or range like "A1:D10" or "Sheet1!B2:C5" - Word: section title (not yet implemented) - PowerPoint: slide number like "slide:3" (not yet implemented) include_formulas: For Excel, return formulas instead of values
Returns: dict for JSON format, str for markdown format
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the document (.docx, .xlsx, .xlsm, .pptx) | |
| output_format | No | Output format - "json" for structured data, "markdown" for text representation | |
| scope | No | Optional scope limiter | |
| include_formulas | No | For Excel, return formulas instead of values |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds auto-detection behavior, parameter details (e.g., scope specifics per document type), return type info, and notes on unimplemented features, providing useful context beyond 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?
Well-structured intro, replacements list, examples, and parameter docs. Each section serves a purpose. Slightly verbose due to examples, but they enhance clarity. Good front-loading of key info.
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 parameters, return types, supported document types, and includes examples. Notes limitations (scope not implemented for Word/PPT). With no output schema, description adequately explains what to expect. Complete for a read-only 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 100% description coverage, but description's Args section adds deeper detail for each parameter (e.g., valid file extensions, scope format for Excel/Word/PPT, explanation of include_formulas). Significantly enriches meaning 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?
The description clearly states it reads content from Word, Excel, or PowerPoint documents, auto-detects format, and extracts in requested output format. It lists replacements (word_extract, etc.) distinguishing from sibling tools.
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?
Description explicitly names alternative tools that this replaces, guiding when to use this. Examples illustrate usage. However, no explicit when-not-to-use or exclusion criteria beyond replacements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
office_set_comment_identityA
Set default commenter identity for subsequent comment operations.
This updates in-memory defaults used by office_comment and format-specific add-comment tools when the author argument is omitted.
Args: name: Display name for comments (for example, "Jane Doe") identity: Optional identity string (for example, email or alias) initials: Optional initials override for formats that support it
Returns: Updated identity configuration
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for comments (for example, "Jane Doe") | |
| identity | No | Optional identity string (for example, email or alias) | |
| initials | No | Optional initials override for formats that support it |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds value by explaining that the tool updates 'in-memory defaults', is non-destructive, and only affects subsequent operations. No contradiction with 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 concise (3 sentences plus structured Args/Returns), front-loaded with the purpose, and every sentence adds value. No 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 3 parameters (1 required), no output schema, and annotations already covering mutation behavior, the description fully explains the tool's purpose, parameters, and effect. Return value is described as 'Updated identity configuration', which is sufficient.
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 100%, baseline 3. The description adds context beyond field names: examples like 'Jane Doe' for name, and clarity that identity is email or alias, initials are optional overrides. This provides practical guidance.
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 identifies the tool's action ('set default commenter identity') and its resource ('for subsequent comment operations'). It distinguishes from sibling tools like office_comment by explaining that this tool configures defaults used by add-comment tools when the author argument is omitted.
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 when to use: before comment operations to set author defaults. It explains that the identity is used by office_comment and format-specific add-comment tools when author is omitted. While it doesn't explicitly list when not to use, the context is clear enough for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
office_tableA
Manage tables in Word, Excel, or PowerPoint documents.
Replaces: excel_get_table, excel_append_table_row, excel_update_table_row, word_get_table, word_insert_table_row, word_patch_table_row, word_create_new_table, pptx_get_table, pptx_insert_table_row, pptx_patch_table_cell
Examples: # Get Excel table data office_table(file_path="data.xlsx", operation="get", table_id="Sales")
# Add row to Excel table
office_table(
file_path="data.xlsx",
operation="add_row",
table_id="Sales",
data={"Product": "Widget", "Amount": 100}
)
# Update Excel table row
office_table(
file_path="data.xlsx",
operation="update_row",
table_id="Sales",
row_index=2,
data={"Amount": 150}
)
# Get Word table (by index, passed as string)
office_table(file_path="report.docx", operation="get", table_id="0")
# Create Word table
office_table(
file_path="report.docx",
operation="create",
data={
"headers": ["Phase", "Owner", "Target Date"],
"rows": [{"Phase": "Discovery", "Owner": "PM", "Target Date": "2026-04-01"}],
"insert_after_section": "Delivery Plan"
}
)
# Get PowerPoint table (slide number as string)
office_table(file_path="deck.pptx", operation="get", table_id="3")Args: file_path: Path to the document operation: "get" to retrieve table data, "add_row" to append a row, "update_row" to modify an existing row, or "create" to create a new table (Word and PowerPoint) table_id: Table identifier as a string. For Excel pass the table name (e.g. "Sales"). For Word pass the 0-based table index for get/add/update (e.g. "0"). For PowerPoint pass the slide number (e.g. "3"). For Word create, table_id is optional. data: Row data as a dict with column names or indices as keys and cell values as values. Required for add_row and update_row. For Word create, provide an object with "headers" and optional "rows", "insert_after_section", "insert_before_section", "output_path", and "author". For PowerPoint update_row include "row", "col", and "value" keys. row_index: 1-based row index for update_row operations
Returns: Dictionary with table data or operation result
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the document | |
| operation | No | "get" to retrieve table data, "add_row" to append a row, "update_row" to modify an existing row, or "create" to create a new table (Word and PowerPoint) | |
| table_id | No | Table identifier as a string. For Excel pass the table name (e.g. "Sales"). For Word pass the 0-based table index for get/add/update (e.g. "0"). For PowerPoint pass the slide number (e.g. "3"). For Word create, table_id is optional. | |
| data | Yes | Row data as a dict with column names or indices as keys and cell values as values. Required for add_row and update_row. For Word create, provide an object with "headers" and optional "rows", "insert_after_section", "insert_before_section", "output_path", and "author". For PowerPoint update_row include "row", "col", and "value" keys. | |
| row_index | No | 1-based row index for update_row operations | |
| output_path | No | ||
| mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds value by detailing per-operation behavior (e.g., create requires specific data structure, update_row uses row_index). It does not contradict annotations. However, it does not mention side effects like overwriting or undo, but given the annotation coverage, 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 intro, replaced tools list, examples, and args section. It is somewhat long but justified by the tool's complexity (multiple apps and operations). Front-loads the core purpose and examples. Could be slightly more concise, but the format 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 complexity (7 parameters, multiple app-specific behaviors, no output schema), the description covers inputs and return value adequately. It lacks error handling or permission notes, but sibling tools and annotations fill some gaps. The replaced tools list provides context for migration. Overall, a solid description.
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 71%, and the description explains parameters with context beyond the schema, especially table_id (per-app details) and data (nested structure for create). However, output_path and mode are present in schema but not described in the description. Examples help clarify usage, so overall good but not complete.
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 manages tables in Word, Excel, or PowerPoint documents. It lists replaced tools (e.g., excel_get_table, word_get_table), which distinguishes it from siblings. The verb 'manage' along with examples for get, add_row, update_row, create operations makes the purpose specific and actionable.
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 extensive examples for each operation and app, showing exactly how to use the tool. It lists replaced tools, implying when to use this instead. However, it does not explicitly contrast with siblings like office_read or office_patch, nor does it state when not to use this tool. The guidance is clear but could be more direct about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
office_templateA
Copy templates or analyze template structure.
Replaces: excel_copy_template, word_copy_template, pptx_copy_template, word_analyze_template_formatting
Examples: # Copy Excel template office_template( source_path="templates/budget.xlsx", destination_path="output/q1-budget.xlsx" )
# Copy Word template
office_template(
source_path="templates/sow.docx",
destination_path="output/acme-sow.docx"
)
# Analyze Word template formatting
office_template(
source_path="templates/sow.docx",
destination_path="", # Not used for analyze
operation="analyze"
)Args: source_path: Path to the template file destination_path: Path for the copy (ignored for analyze) operation: "copy" to copy template, "analyze" to inspect formatting
Returns: Dictionary with operation results
| Name | Required | Description | Default |
|---|---|---|---|
| source_path | Yes | Path to the template file | |
| destination_path | Yes | Path for the copy (ignored for analyze) | |
| operation | No | "copy" to copy template, "analyze" to inspect formatting |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, which align with description. The description adds behavioral context about the two operations (copy and analyze) and notes that destination_path is ignored for analyze. No contradictions, but more detail on side effects (e.g., file creation) could be added.
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 short summary, replaced tools list, examples, args, and returns. It is informative but slightly lengthy; could be trimmed slightly 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?
Given the three parameters and lack of output schema, the description adequately covers usage, operations, and return style. It does not specify the exact return dictionary structure, but for a tool of this complexity, it is sufficient.
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 100%, and the description enriches parameters with examples and operational context. It clarifies the operation enum usage and explains that destination_path is ignored for analyze, adding 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?
The description clearly states the tool copies templates or analyzes template structure, providing specific examples for Excel, Word, and PowerPoint. It explicitly replaces multiple previous tools (excel_copy_template, word_copy_template, etc.), making its purpose distinct from sibling tools.
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 (for template operations) and lists replaced tools, giving context. However, it does not explicitly state when not to use it or suggest alternatives for non-template file operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_add_slideA
Add a new slide to an existing presentation.
Common layout_index values (use pptx_list_masters to see all):
0: Title Slide
1: Title and Content (default - has title + bullet area)
5: Title Only (good for tables or custom content)
6: Blank
Args: file_path: Path to the .pptx file layout_index: Which layout to use (default: 1 = Title and Content) title: Optional title text for the new slide position: Where to insert - 'end' (default), 'start', or 1-based slide number (e.g. '2' to make it slide 2) output_path: Optional output path (defaults to overwriting input)
Returns: Status with new slide_number
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| layout_index | No | Which layout to use (default: 1 = Title and Content) | |
| title | No | Optional title text for the new slide | |
| position | No | Where to insert - 'end' (default), 'start', or 1-based slide number (e.g. '2' to make it slide 2) | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but description adds value by disclosing that output_path defaults to overwriting input, which is a key behavioral detail. It does not mention other side effects like file locking or error conditions, but covers the main mutation behavior.
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 for layout values. However, the layout list is somewhat lengthy; could be more concise while retaining clarity. Still front-loaded with the primary purpose.
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 5 parameters (1 required), no output schema, and sibling tools, the description covers all parameters with defaults and examples. It also mentions using pptx_list_masters for more layouts. The return value 'Status with new slide_number' is sufficient for 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?
With 100% schema coverage, baseline is 3. The description adds meaning beyond schema: for layout_index it lists common values (0,1,5,6) with descriptions, for position it gives examples, and for output_path it states the default overwrite behavior. This enhances parameter understanding.
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 new slide to an existing presentation,' specifying the action and resource. It distinguishes from siblings like pptx_duplicate_slide or pptx_delete_slide by focusing on slide addition.
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 common layout_index values and position options, aiding selection, but lacks explicit guidance on when to use this tool versus alternatives like pptx_duplicate_slide or pptx_import_slide. No 'when to use' 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_add_tableA
Add a data table to a slide.
Creates a table with column headers and optional data rows. Header row is bold. Position/size in inches (16:9 slide = 13.3" × 7.5").
Args: file_path: Path to the .pptx file slide_number: 1-based slide number headers: Column header names (e.g., ['Phase', 'Duration', 'Deliverables']) rows: Data rows as list of lists (optional) left, top: Position from top-left (default: 1.0", 2.0") width, height: Table size (default: 11.0" × 3.0")
Returns: Status with table dimensions
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| slide_number | Yes | 1-based slide number | |
| headers | Yes | Column header names (e.g., ['Phase', 'Duration', 'Deliverables']) | |
| rows | No | Data rows as list of lists (optional) | |
| left | No | ||
| top | No | ||
| width | No | ||
| height | No | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive behavior, which description does not contradict. The description adds that header rows are bold and provides default dimensions, but lacks details on error handling, file modification behavior, or what the 'Status' return implies.
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, consisting of a brief two-sentence overview followed by a structured parameter list. Every sentence is informative and necessary.
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 9 parameters (3 required) and no output schema, the description adequately explains purpose, parameters, and return value. However, it could be more complete by specifying behavior on missing files or slide numbers, and by clarifying the return type.
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 value beyond the input schema by providing examples (e.g., ['Phase', 'Duration', 'Deliverables']) and explaining default values (left=1.0", top=2.0"). However, the schema already covers 44% of parameters with descriptions, so the description is supplementary.
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 data table to a slide' and elaborates on creating tables with column headers and optional data rows, specifying that the header row is bold. It is distinct from sibling tools which focus on other operations (e.g., excel_add_chart, 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 explains the tool's functionality but does not provide guidance on when to use this tool versus alternatives like office_table or excel_add_chart. No explicit exclusions or context for selection are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_delete_commentADestructive
Delete comments from a slide.
Deletes one comment (by index) or all comments on a slide when comment_index is not provided.
Args: file_path: Path to the .pptx file slide_number: 1-based slide number comment_index: Optional comment index on that slide output_path: Optional output path (defaults to overwriting input)
Returns: Status with deletion details
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| slide_number | Yes | 1-based slide number | |
| comment_index | No | Optional comment index on that slide | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true; the description adds that deletion can target one or all comments, and that output_path defaults to overwriting the input. It mentions the return value is 'Status with deletion details', providing sufficient behavioral context beyond 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 concise and well-structured, with a clear purpose statement followed by Args and Returns sections. Every sentence adds 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 absence of an output schema, the description specifies the return type as 'Status with deletion details', which is adequate. It covers the core behavior but does not address error scenarios or edge cases; however, for a delete tool, this level of detail is reasonable.
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 100% coverage with descriptions, but the description adds critical context: comment_index is optional and omitting it deletes all comments. This behavior is not fully captured in the schema, adding value.
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 deletes comments from a slide, specifying two modes: deleting a single comment by index or all comments when index is omitted. This distinguishes it from sibling tools like pptx_delete_slide, excel_delete_comment, 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 explains the two usage modes (one comment vs all) and indicates required parameters (file_path, slide_number). However, it lacks explicit guidance on when not to use it or comparisons with alternatives, though the sibling context makes it clear it's for pptx comments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_delete_slideADestructive
Remove a slide from the presentation.
USE THIS to remove template slides you don't need or to clean up unwanted content.
Args: file_path: Path to the .pptx file slide_number: 1-based slide number to delete output_path: Optional output path (defaults to overwriting input)
Returns: Status with remaining slide count
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| slide_number | Yes | 1-based slide number to delete | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show destructiveHint=true. Description adds that output defaults to overwriting input and returns status with remaining count, providing useful behavioral context beyond 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?
Description is well-structured with a front-loaded purpose sentence and a clear Args section. Appropriate length for the tool's simplicity.
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 main behaviors: deletion, default overwrite, return value. No output schema, but return described. Adequate for a simple deletion 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 100%, so description doesn't need to add much. It repeats parameter descriptions from schema and adds default for output_path, but adds minimal new meaning.
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 'Remove a slide from the presentation.' with a specific verb and resource. Siblings like pptx_add_slide and pptx_duplicate_slide indicate distinct actions.
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 says 'USE THIS to remove template slides you don't need or to clean up unwanted content.' Provides context for when to use, though no explicit when-not or comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_duplicate_slideA
Copy a slide including all shapes, tables, and formatting.
USE THIS when you need multiple slides based on a template slide. Performs a full XML deep copy so tables, images, and other shapes are faithfully duplicated.
Args: file_path: Path to the .pptx file slide_number: 1-based slide number to copy position: 'after' (right after original) or 'end' output_path: Optional output path (defaults to overwriting input)
Returns: Status with new slide number
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| slide_number | Yes | 1-based slide number to copy | |
| position | No | 'after' (right after original) or 'end' | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutation (readOnlyHint=false, destructiveHint=false). The description adds that it performs a 'full XML deep copy,' which is useful but doesn't disclose potential performance implications or other behavioral traits.
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 includes a summary, usage hint, and parameter list. However, the parameter section is redundant with the schema. It could be more concise by omitting the Args/Returns block.
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 output schema, the description includes 'Returns: Status with new slide number.' It explains the deep copy behavior. While it doesn't cover error cases, it is sufficiently complete for a duplicate tool with good annotations and 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?
Schema coverage is 100%, so the schema already documents all parameters. The description repeats the same information (e.g., 'Optional output path (defaults to overwriting input)'), adding no new semantic value beyond what the schema provides.
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 'Copy a slide including all shapes, tables, and formatting,' which is a specific verb and resource. It distinguishes from sibling tools like pptx_add_slide or pptx_import_slide by focusing on duplication.
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 explicitly says 'USE THIS when you need multiple slides based on a template slide,' providing clear usage context. It does not mention when not to use or alternatives, but the guidance is sufficient and not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_from_markdownA
Convert Markdown content to a PowerPoint presentation from inline content or markdown_file.
This is the primary tool for creating PowerPoint decks from text content.
Features:
- Analyzes content to select appropriate layouts for each slide
- Sets theme fonts (default: Segoe UI Semibold for titles, Segoe UI for body)
- Uses millimeters internally for precise positioning
- Fonts inherit from theme - no hardcoded font overrides
Slide Mapping:
- First # heading becomes title slide with large centered title
- Subsequent # or ## headings start new content slides
- --- (horizontal rule) also starts a new slide context
- Bullet points (- or *) become slide body content
- **Label:** patterns are rendered with bold labels (great for key points)
- **Context (assumptions):** after title becomes subtitle on title slide
- Tables (| col | col |) are rendered as PowerPoint tables
- Non-heading, non-bullet paragraphs become plain text
Example:
pptx_from_markdown(
output_path="04. Artifacts/proposal.pptx",
markdown='''
Cloud Migration Proposal
Context: Enterprise transformation for ACME Corp
Executive Summary
Objective: Migrate 15 legacy applications to Azure
Timeline: 12 months with phased approach
Investment
Phase | Cost | Timeline |
Phase 1 | $400K | Q1 |
Phase 2 | $800K | Q2-Q3 |
Next Steps
Approve project charter
Schedule kickoff workshop ''' ) Args: output_path: Path for the output .pptx file markdown: Markdown content following the slide pattern (inline) title_font: Font for titles (default: Segoe UI Semibold) body_font: Font for body text (default: Segoe UI) markdown_file: Optional path to a Markdown file. Use this for very large inputs to avoid MCP argument-size limits. Returns: Status dictionary with file path and slide count
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | Yes | Path for the output .pptx file | |
| markdown | No | Markdown content following the slide pattern (inline) | |
| title_font | No | Font for titles (default: Segoe UI Semibold) | |
| body_font | No | Font for body text (default: Segoe UI) | |
| markdown_file | No | Optional path to a Markdown file. Use this for very large inputs to avoid MCP argument-size limits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly details behavioral traits such as layout selection, theme fonts, internal unit usage, and font inheritance. It also includes a comprehensive slide mapping section. Annotations are non-contradictory (readOnlyHint=false, destructiveHint=false), and the description adds significant value beyond them.
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-organized with clear sections (Features, Slide Mapping, Example) and front-loads the core purpose. The extensive example and feature list are justified by the tool's complexity, though minor condensation 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 (5 params, detailed slide mapping), the description provides comprehensive guidance covering input methods, behavior, slide rules, and return value. The absence of an output schema is compensated by clear description of the return structure ('Status dictionary with file path and slide count').
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 100% with descriptions for all 5 parameters. The description adds context beyond the schema by explaining the purpose of markdown_file for large inputs and listing default font values. The detailed slide mapping rules further enrich parameter understanding.
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 Markdown content to a PowerPoint presentation' and identifies it as 'the primary tool for creating PowerPoint decks.' It contrasts with sibling tools like pptx_add_slide by focusing on full deck creation from 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 clearly presents this as the go-to tool for creating decks from markdown. It also provides guidance on using markdown_file for large inputs to avoid size limits. While it does not explicitly list when not to use it among siblings, the context implies its primary role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_get_notesARead-only
Read speaker notes from slides.
USE THIS to see existing notes before updating them. Without slide_number, returns notes from ALL slides.
Args: file_path: Path to the .pptx file slide_number: Specific slide (omit for all slides)
Returns: Notes content for requested slide(s)
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| slide_number | No | Specific slide (omit for all slides) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by explaining that omitting slide_number returns notes from all slides, which is behavioral context beyond 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 concise, front-loaded with the main action, and every sentence serves a purpose. No fluff or 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?
For a simple read tool with no output schema, the description fully covers purpose, usage, parameter behavior, and return values. 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 100% with descriptions for both parameters. The description adds meaning by clarifying the effect of omitting slide_number, which goes beyond the schema's 'Specific slide (omit for all slides)'.
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 speaker notes from slides' which is a specific verb+resource. It is distinct from sibling tools like pptx_set_notes and pptx_delete_comment.
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 advises 'USE THIS to see existing notes before updating them', providing context for when to use. It also explains behavior without slide_number, but does not explicitly mention when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_hide_slideA
Hide or unhide a slide in the presentation.
Hidden slides are skipped during slideshow but remain editable. Use for backup content or speaker-only material.
Args: file_path: Path to the .pptx file slide_number: 1-based slide number hidden: True to hide, False to show again output_path: Optional output path (defaults to overwriting input)
Returns: Status with visibility state
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| slide_number | Yes | 1-based slide number | |
| hidden | No | True to hide, False to show again | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses behavior: hidden slides are skipped but editable, output_path defaults to overwriting input, and returns a status with visibility state. This adds context beyond annotations (readOnlyHint=false, destructiveHint=false) without contradiction.
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 purpose first, then behavioral details, then a parameter list. It is fairly concise but includes an explanatory sentence about hidden slides that adds value. Minor inefficiency: the Args section largely mirrors 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 no output schema, the description adequately describes return value. It covers all parameters, explains behavior and use cases, and provides enough context for an agent to use the tool correctly alongside sibling tools.
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 100%, so baseline is 3. The description repeats parameter descriptions but adds minimal extra meaning beyond what's in the schema. However, it mentions the return value (status with visibility state), which is absent from the input 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 'Hide or unhide a slide' with a specific verb and resource. It explains the behavior of hidden slides (skipped but editable) and their use cases (backup or speaker-only material), distinguishing it from slide deletion or addition.
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 (for backup/ speaker-only material) but does not explicitly exclude alternatives like deletion. Among siblings, this is the only hide/unhide tool, so usage is clear, but no explicit 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.
pptx_import_slideA
Copy one slide from a source presentation into a target presentation.
USE THIS when you need to lift a fully-designed slide across from one deck to another, preserving pictures, charts, embedded assets, and the layout/master/theme chain required for it to render correctly.
The tool validates the source slide's layout/master chain before the copy. If an identical layout already exists in the target package, it reuses it and does not import a new master. Otherwise it imports only the single layout and single master required by the slide.
Args: source_file_path: Source .pptx file containing the slide to copy source_slide_number: 1-based slide number in the source deck target_file_path: Target .pptx file to receive the slide position: 'end' or 'after' after_slide_number: Required when position='after' output_path: Optional output path (defaults to overwriting target) include_notes: Whether to carry the notes slide across too
Returns: Status dictionary with output path, new slide number, and whether the layout/master were reused or copied.
| Name | Required | Description | Default |
|---|---|---|---|
| source_file_path | Yes | Source .pptx file containing the slide to copy | |
| source_slide_number | Yes | 1-based slide number in the source deck | |
| target_file_path | Yes | Target .pptx file to receive the slide | |
| position | No | 'end' or 'after' | |
| after_slide_number | Yes | Required when position='after' | |
| output_path | No | Optional output path (defaults to overwriting target) | |
| include_notes | No | Whether to carry the notes slide across too |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false. The description adds significant behavioral details: it validates layout/master chain, reuses existing layout if identical, imports only necessary layouts/masters, and copies notes optionally. This provides valuable context beyond 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: a one-line purpose, usage guideline, behavioral details, and then parameter list. It is concise at around 150 words with no fluff. The parameter list is slightly redundant given the schema, but it aids quick scanning.
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 tool has 7 parameters, no output schema, and returns a status dictionary as mentioned. The description covers the core behavior, layout/master handling, and return value. It does not discuss error conditions or permissions, but for a copy operation these are secondary. Adequate for the 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?
The input schema covers all 7 parameters with descriptions. The description lists the same parameters with similar context (e.g., 'Required when position=after'). It does not add new semantic meaning beyond the schema, so baseline 3 applies.
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 'Copy one slide from a source presentation into a target presentation.' This provides a specific verb and resource, and distinguishes itself from siblings like pptx_add_slide (which creates a new slide) and pptx_duplicate_slide (which duplicates within same deck).
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?
It explicitly says 'USE THIS when you need to lift a fully-designed slide across from one deck to another...' and explains the layout/master chain handling. While it doesn't list alternative tools, it implies this is for preserving complex assets, which guides usage well.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_list_slidesARead-only
Get an overview of all slides in a PowerPoint file.
USE THIS FIRST when working with an existing presentation to understand its structure before making changes.
Returns for each slide:
number: Slide position (1-based)
title: The slide's title text
layout_name: Which layout template is used
shape_count: Number of shapes on the slide
has_notes: Whether speaker notes exist
hidden: Whether the slide is hidden
Args: file_path: Path to the .pptx file
Returns: Dictionary with slide_count and slides array
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. Description adds value by listing exact return fields (number, title, layout_name, etc.), providing behavioral context beyond what annotations offer.
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 bullet points listing return fields, no fluff. Every sentence is informative and earns its place.
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?
Simple overview tool with detailed description of return values. No output schema, but description fully compensates by listing each field and its meaning. Complete for its purpose.
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?
Single parameter 'file_path' with 100% schema coverage. Description repeats the schema description exactly. No additional semantic value added, but baseline 3 applies.
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 'Get an overview of all slides in a PowerPoint file' with specific verb and resource. It differentiates from sibling tools that modify slides by being a read-only overview.
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 advises 'USE THIS FIRST when working with an existing presentation to understand its structure before making changes,' providing clear context for when to use and implying alternatives for modifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_log_changesA
Append change log entries to the first slide's notes.
Use for audit trail since PowerPoint doesn't have track changes. Changes are appended to the notes of slide 1 with timestamps.
Args: file_path: Path to the .pptx file changes: List of change entries, each with slide (number), action (what was done), and detail (specifics) output_path: Optional output path (defaults to overwriting input)
Returns: Status with changes logged count
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| changes | Yes | List of change entries, each with slide (number), action (what was done), and detail (specifics) | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive. Description reveals it appends to notes (a write operation) and that output_path defaults to overwriting input, which is important behavioral info. No contradiction.
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 front-loaded with purpose and usage, then provides structured argument list. While slightly verbose with the Args section, it is clear and 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?
All necessary information is present: purpose, parameters with descriptions, default behavior for output_path, and what is returned. No output schema needed; return value is described.
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 100% coverage, so baseline is 3. Description repeats parameter descriptions but adds clarifying context for the 'changes' object structure, providing marginal additional value.
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 verb 'append', resource 'first slide's notes', and purpose 'audit trail since PowerPoint doesn't have track changes'. Distinguishes from all sibling tools, as no other tool logs changes to notes.
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 says 'Use for audit trail since PowerPoint doesn't have track changes', providing clear context. Does not mention when not to use or contrast with alternatives like pptx_set_notes, but the use case is well defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_recommend_layoutARead-only
Get the best layout for a specific content type.
Content types:
'title': Section title slide
'bullets': Bullet point list
'two_column': Side-by-side content
'comparison': Comparison with headers
'image': Image with caption
'table': Table-heavy content
'blank': Custom content
Args: file_path: Path to the .pptx file content_type: What you want to show on the slide
Returns: Recommended layout_index and alternatives
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| content_type | Yes | What you want to show on the slide |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read-only operation. The description adds value by detailing the content types and return behavior (recommended layout_index and alternatives), which goes beyond the annotations. No contradictions exist.
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 front-loads the purpose in the first sentence, then provides a bulleted list of content types. Every sentence contributes to understanding, with 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?
For a simple tool with two parameters and no output schema, the description adequately covers purpose, parameter semantics, and return value. It mentions that the tool returns a recommended layout_index and alternatives, which is sufficient for an agent to understand what to expect. Minor gap: the exact format of the return is not specified, but it's acceptable given the tool's simplicity.
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 already describes both parameters with 100% coverage. The description enriches this by explicitly enumerating valid content_type values and their semantic meanings (e.g., 'title' for section title slides). This adds significant meaning beyond the schema's generic 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's purpose: 'Get the best layout for a specific content type.' It uses a specific verb ('Get') and resource ('layout'), and the list of content types further clarifies its scope. This distinguishes it from sibling tools like pptx_add_slide, which likely creates slides with a given layout.
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 the tool (when determining layout for content) but provides no explicit guidance on when not to use it or alternatives. There is no mention of conflicts with pptx_add_slide or other tools, leaving the agent without clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_reorder_slidesA
Change the order of slides in a presentation.
Provide the complete slide order as a list. For example, [1, 3, 2, 4, 5] moves slide 3 before slide 2.
Args: file_path: Path to the .pptx file new_order: Complete list of slide numbers in desired order (1-based) output_path: Optional output path (defaults to overwriting input)
Returns: Status with new slide order
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| new_order | Yes | Complete list of slide numbers in desired order (1-based) | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context that output_path defaults to overwriting the input file, which is a behavioral trait beyond annotations. However, it lacks details on error handling (e.g., invalid slide numbers) or side effects. Annotations (readOnlyHint=false, destructiveHint=false) are not contradicted.
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: a one-sentence purpose, an illustrative example, and structured Args/Returns. Every sentence adds value with no 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 simple reorder tool, the description covers the parameters and return value. Missing details on what the return 'Status' includes (e.g., success message or error object) and edge cases (e.g., duplicate slide numbers). Given the low complexity, the gaps are minor.
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 beyond the input schema by specifying that new_order must be a complete list (1-based) and gives an example. Since schema description coverage is 100%, the baseline is 3; the additional guidance justifies a 4.
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 verb and resource: 'Change the order of slides in a presentation.' It distinguishes from sibling tools like pptx_delete_slide or pptx_duplicate_slide by focusing specifically on reordering, and provides a concrete example.
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 explicitly state when to use this tool versus alternatives like pptx_add_slide or pptx_delete_slide. It implies usage through the example but lacks 'when not to use' or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pptx_set_notesA
Set speaker notes for a slide.
Speaker notes appear below the slide in Presenter View and can be printed as handouts. Use for talking points and context.
Args: file_path: Path to the .pptx file slide_number: 1-based slide number notes_text: The notes content (supports newlines) append: If True, add to existing notes; if False, replace output_path: Optional output path (defaults to overwriting input)
Returns: Status with notes preview
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .pptx file | |
| slide_number | Yes | 1-based slide number | |
| notes_text | Yes | The notes content (supports newlines) | |
| append | No | If True, add to existing notes; if False, replace | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, consistent with 'Set' implying mutation. The description adds behavior details like the append parameter (add vs replace) and default output path behavior, providing useful context beyond 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 concise with a clear structure: purpose, explanation, Args list, Returns. The Args list repeats schema info but is justified for readability; it is not 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?
For a tool with 5 parameters and no output schema, the description covers purpose, parameter details, and return value preview. It lacks prerequisites but is adequate for a medium-complexity 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 100%, but the description adds extra context such as 'supports newlines' for notes_text and 'defaults to overwriting input' for output_path, enhancing understanding beyond the schema's field 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 'Set speaker notes for a slide', which is a specific verb and resource. It distinguishes from siblings like pptx_get_notes.
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?
It says 'Use for talking points and context' but does not explicitly say when to use this tool versus alternatives (e.g., pptx_get_notes) 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.
restart_serverADestructive
Restart the MCP server to reload code changes.
Use this tool after modifying tool modules in .github/mcp/tools/ to pick up the changes without manually restarting.
The server will exit and VS Code will automatically restart it, picking up any code changes in the tools/ directory.
Example: restart_server()
Returns: Status message (the server exits immediately after responding)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint: true), the description adds valuable behavioral details: the server will exit and VS Code will automatically restart it. This provides clear expectations for the agent.
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 a front-loaded purpose sentence. It includes clear usage context, an example, and return information 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 tool's simplicity (no parameters, no output schema), the description thoroughly covers all aspects: purpose, usage scenario, behavior, example, and return value. 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?
With zero parameters, the input schema is fully covered. The description includes an example call with no arguments, which is sufficient and aligns with the baseline for parameterless tools.
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 'restart' and resource 'MCP server', with the specific purpose of reloading code changes. It uniquely distinguishes itself from sibling tools which cover Azure, Office, web, 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 explicitly states when to use this tool: after modifying tool modules in .github/mcp/tools/. It provides an example and explains the automatic restart behavior. Although alternatives are not explicitly excluded, no other tool performs this function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_check_urlARead-only
Check if a URL exists and is accessible.
Performs a HEAD request (or GET if HEAD fails) to verify the URL returns a valid response. Useful for validating links before including them in documents.
Example: web_check_url(url="https://example.com/page")
web_check_url(
url="https://docs.microsoft.com/...",
timeout=5,
follow_redirects=True
)Args: url: The URL to check timeout: Request timeout in seconds (default: 10) follow_redirects: Whether to follow redirects (default: True)
Returns: Dictionary with exists, status_code, final_url, and content_type
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to check | |
| timeout | No | Request timeout in seconds (default: 10) | |
| follow_redirects | No | Whether to follow redirects (default: True) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior, but the description adds valuable detail: it performs a HEAD request with GET fallback, and returns fields like status_code, final_url, and content_type. This enriches the agent's understanding beyond 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 concise and well-structured: a brief summary, followed by an explanation, examples, and a clear args/returns section. Every sentence is purposeful, and the 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 simplicity and the richness of the description, it covers all necessary behavioral aspects and return values. The description compensates for the lack of an output schema by listing the dictionary fields. Sibling tools are diverse, but the description uniquely identifies this tool's role.
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 100% coverage with descriptions for all three parameters. The description reinforces these with an example showing default values and usage patterns (e.g., timeout=5, follow_redirects=True). While no new information is added beyond the schema, the examples provide practical context.
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 function: checking if a URL exists and is accessible. It specifies the HTTP method (HEAD/GET) and its utility for validating links. Among sibling tools like web_fetch or web_search, this tool has a distinct purpose, making differentiation easy.
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 explicitly recommends using this tool for validating links before including them in documents. While it does not list when not to use it or directly mention alternatives, the context is sufficiently clear about its primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_extract_linksARead-only
Extract all links from a web page.
Fetches a page and extracts all hyperlinks, optionally filtering by pattern or domain. Useful for discovering related pages or building navigation maps.
Example: web_extract_links(url="https://docs.microsoft.com/...")
web_extract_links(
url="https://example.com",
filter_pattern=r"/docs/",
same_domain_only=True
)Args: url: The URL to extract links from filter_pattern: Regex pattern to filter links (optional) same_domain_only: Only return links to the same domain (default: False) timeout: Request timeout in seconds (default: 30)
Returns: Dictionary with extracted links and their text
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to extract links from | |
| filter_pattern | No | Regex pattern to filter links (optional) | |
| same_domain_only | No | Only return links to the same domain (default: False) | |
| timeout | No | Request timeout in seconds (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description adds behavioral details like fetching the page, extracting links, and optional filtering. No contradictions, and the description enhances understanding beyond 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 a clear purpose statement, example usage, and parameter list. It is concise but could be slightly tighter by not repeating schema details.
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 absence of an output schema, the description adequately explains the return type as a dictionary with links and text. It covers the core functionality and parameters, though it could mention potential error handling or size limitations.
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 100%, so the schema already documents all parameters. The description repeats this information and adds an example, but does not significantly enhance meaning beyond what the schema provides.
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 'Extract all links from a web page' with a specific verb and resource, and differentiates from sibling tools like web_extract_tables and web_fetch by focusing solely on hyperlink extraction.
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 by stating the tool is 'useful for discovering related pages or building navigation maps,' but lacks explicit guidance on when not to use it or alternatives for different tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_extract_tablesARead-only
Extract tables from a web page as structured data.
Fetches a page and extracts HTML tables, converting them to a structured format with headers and rows.
Example: web_extract_tables(url="https://example.com/data")
web_extract_tables(
url="https://example.com/report",
table_index=0 # Get only the first table
)Args: url: The URL to extract tables from table_index: Specific table index to extract (optional, 0-based) timeout: Request timeout in seconds (default: 30)
Returns: Dictionary with extracted tables
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to extract tables from | |
| table_index | No | Specific table index to extract (optional, 0-based) | |
| timeout | No | Request timeout in seconds (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds behavioral context: it fetches the page, extracts HTML tables, and converts to structured format with headers and rows. This goes beyond annotations, though it omits details like rate limits or error handling.
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, front-loading the purpose, then explaining the process, followed by examples and args. Every sentence is informative, with 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?
The description lacks an output schema, and its return note is minimal: 'Dictionary with extracted tables'. It does not specify the dictionary structure, behavior when no tables found, or error handling. For a tool with 3 parameters and no output schema, this is adequate but not 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 has 100% parameter description coverage. The description adds value by providing usage examples and stating the default timeout (30 seconds). This clarifies param semantics beyond the schema 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 extracts tables from a web page as structured data, with a specific verb and resource. It is distinct from siblings like web_fetch (fetches raw page) and web_extract_links (extracts links).
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 examples but does not explicitly state when to use this tool versus alternatives like web_fetch or web_extract_links. It implies usage when needing structured table data, but lacks exclusions or comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_fetchARead-only
Fetch a web page and extract its content as Markdown.
Uses readability to extract the main content from the page, removing navigation, ads, and other clutter. Then converts the clean HTML to Markdown format.
Example: web_fetch(url="https://example.com/article")
web_fetch(
url="https://docs.microsoft.com/en-us/azure/...",
include_links=True,
include_images=True
)Args: url: The URL to fetch extract_content: Use readability to extract main content (default: True) include_links: Include hyperlinks in output (default: True) include_images: Include image references (default: False) timeout: Request timeout in seconds (default: 30)
Returns: Dictionary with title, content (markdown), url, and metadata
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to fetch | |
| extract_content | No | Use readability to extract main content (default: True) | |
| include_links | No | Include hyperlinks in output (default: True) | |
| include_images | No | Include image references (default: False) | |
| timeout | No | Request timeout in seconds (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial detail beyond annotations: uses readability to remove clutter, converts to Markdown, and explains parameter defaults. No contradiction with 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?
Well-structured: brief introduction, two examples, and organized Args/Returns sections. Every sentence provides useful information.
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 output schema, description fully explains return values (title, content, url, metadata). Covers all necessary details for 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 100%, baseline 3. However, description provides additional context for each parameter in the Args block and examples, adding value.
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 fetches a web page and extracts main content as Markdown using readability. Distinguishes from siblings like web_search, web_extract_links, web_extract_tables.
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?
Provides clear context via examples and description of content extraction. Does not explicitly say when not to use, but sibling tools cover alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchARead-only
Search the web using DuckDuckGo and return results.
Performs a web search and returns titles, URLs, and snippets for the top results. Does not fetch the full page content - use web_fetch for that.
Example: web_search(query="Microsoft Fabric lakehouse architecture")
web_search(
query="python-pptx table formatting",
max_results=10
)Args: query: Search query string max_results: Maximum number of results to return (default: 5) region: DuckDuckGo region code (default: "wt-wt" for worldwide)
Returns: Dictionary with search results (title, url, snippet)
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string | |
| max_results | No | Maximum number of results to return (default: 5) | |
| region | No | DuckDuckGo region code (default: "wt-wt" for worldwide) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false, and the description confirms it's a read-only search that returns snippets. It adds behavioral context by stating it does not fetch full page content, which aligns with 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 concise with a brief overview, an example, and a structured args list. No unnecessary words; front-loaded with purpose.
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 output schema, the description explains return format (dictionary with title, url, snippet). All parameters are documented with defaults. Behavioral constraints are clear. Complete for a search 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 100% with descriptions for each parameter. The tool description adds value by providing an example and clarifying the default for max_results and region. While not significantly beyond schema, the examples enhance usability.
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 searches the web using DuckDuckGo, distinguishes from sibling web_fetch by noting it does not fetch full page content, and provides a concrete example.
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 explicitly says when to use (web search) and when not (use web_fetch for full content). It also explains region parameter. However, it does not mention other sibling tools like web_check_url as alternatives for checking URLs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_accept_all_changesA
Accept all tracked insertions/deletions in a Word document.
Removes deletion markup and converts insertion markup into normal document content.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate not readOnly and not destructive. The description adds value by specifying that deletion markup is removed and insertion markup is converted, giving more detail than the name alone. However, it does not mention reversibility or error handling.
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?
Two sentences, concise and to the point. No fluff or redundant information.
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 the main action but lacks parameter details and usage guidance. For a tool with 2 parameters and no output schema, more context about expected input and output format would be beneficial.
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 should explain the parameters file_path and output_path. It does not, leaving the agent to guess that file_path is input and output_path is optional output.
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 accepts all tracked changes (insertions/deletions) in a Word document, explaining it removes deletion markup and converts insertion markup to normal content. It is specific and distinct from siblings like word_enable_track_changes or word_patch_with_track_changes.
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 no guidance on when to use this tool versus alternatives like word_patch_with_track_changes or word_cleanup_sow. It does not mention prerequisites (e.g., document must have tracked changes) or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_cleanup_sowADestructive
Clean a SOW document by removing all placeholder and instructional content.
Removes:
Highlighted text (turquoise, yellow - template guidance markers)
Colored text (blue, red, purple - instructions)
Bracket placeholders that weren't filled: <...>, [Template Guidance: ...]
Instruction paragraphs containing guidance keywords
This is the final step after generate_sow to ensure the document is presentation-ready with no visible template artifacts. All removals are tracked for auditability.
Example: cleanup_sow( file_path="04. Artifacts/contoso-sow.docx", output_path="04. Artifacts/contoso-sow-final.docx" )
Args: file_path: Path to the SOW document to clean output_path: Path for cleaned output (defaults to overwriting input) author: Author name for tracked changes (default: "Solution Architect Agent")
Returns: Cleanup statistics
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the SOW document to clean | |
| output_path | No | Path for cleaned output (defaults to overwriting input) | |
| author | No | Author name for tracked changes (default: "Solution Architect Agent") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive (destructiveHint: true), and the description reinforces that by detailing irreversible removals. It adds beyond annotations by listing specific content types removed and stating 'All removals are tracked for auditability,' which is valuable behavioral context for an agent.
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-sentence summary, a bullet list of removals, a usage context sentence, and a Python-like example with Args and Returns. It is concise yet comprehensive, with 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 moderate complexity and the absence of an output schema, the description covers inputs, behavior, and return value (cleanup statistics). It could be slightly more specific about what 'cleanup statistics' includes, but overall it provides sufficient 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?
The input schema already provides clear descriptions for all three parameters (file_path, output_path, author), covering 100% of the schema. The description adds extra value by noting the default behavior for output_path ('defaults to overwriting input') and the author default, plus an example call with real 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?
The description starts with a specific verb ('Clean') and resource ('SOW document'), clearly distinguishing it from sibling tools like word_generate_sow or word_parse_sow_template. It lists exactly what is removed (e.g., highlighted text, bracket placeholders), making the tool's purpose unmistakable.
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 states 'This is the final step after generate_sow to ensure the document is presentation-ready with no visible template artifacts.' This tells the agent exactly when to use it and implies not to use it before generation. The example with file paths further clarifies typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_create_sow_from_markdownA
Create a SOW document from inline markdown or markdown_file by filling a template.
IMPORTANT: This tool requires a template to preserve document structure,
formatting, and corporate styling. It extracts data from Markdown and
uses generate_sow to fill the template.
Workflow:
1. Parse the Markdown to extract structured SOW data
2. Load the template document
3. Fill placeholders and tables with extracted data
4. Save the result
Example:
create_sow_from_markdown(
output_path="04. Artifacts/contoso-sow.docx",
template_path=".github/skills/statement-of-work/templates/Agile.docx",
markdown='''
Contoso – Cloud Migration – Statement of Work
1. Engagement Overview
Customer: Contoso Ltd Provider: Microsoft Project: Cloud Migration Sprint 1
1.1 Business Objectives
Objective | Activities | Assumptions |
Migrate 15 apps | Assessment, planning | Apps are containerizable |
''' |
)
Args:
output_path: Path for the output .docx file
template_path: Path to the .docx template (REQUIRED)
markdown: Markdown content of the SOW (inline)
markdown_file: Optional path to a Markdown file. Use this for
very large inputs to avoid MCP argument-size limits.
Returns:
Status dictionary with file path and extraction summary
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | Yes | Path for the output .docx file | |
| markdown | No | Markdown content of the SOW (inline) | |
| template_path | Yes | Path to the .docx template (REQUIRED) | |
| markdown_file | No | Optional path to a Markdown file. Use this for very large inputs to avoid MCP argument-size limits. | |
| mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it is not read-only or destructive. Description adds value by detailing the workflow (parse, load template, fill, save) and the use of generate_sow internally, which provides behavioral context beyond the annotation hints.
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 well-structured with front-loaded purpose, then important note, workflow, example, and args. It is slightly verbose but every sentence adds value; 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?
Covers purpose, workflow, parameter distinctions, and return value. However, it omits explanation of the mode parameter (best_effort, safe, strict, dry_run), which is a gap for a tool with no output schema and medium 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 covers 4 out of 5 parameters with descriptions, so baseline is 3. Description adds context for markdown vs markdown_file (large inputs) but does not explain the mode parameter, which has enum but no description in 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 (Create), resource (SOW document), and method (from markdown, filling template). It distinguishes from sibling tools like word_from_markdown and word_generate_sow by specifying the requirement for a template and the internal workflow.
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?
Description explains the workflow and requirement for a template, and gives an example. It does not explicitly state when not to use this tool or name alternatives, but the context implies it is for SOW creation with templates, which is distinct from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_delete_commentADestructive
Delete a comment from a Word document by comment ID.
Removes the comment from comments.xml and strips associated reference markers from document.xml.
Args: file_path: Path to the .docx file comment_id: Comment ID from word_get_comments output output_path: Optional output path (defaults to overwriting input)
Returns: Status dictionary with deletion details
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .docx file | |
| comment_id | Yes | Comment ID from word_get_comments output | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the destructiveHint annotation by explaining it removes a comment and strips markers. It also adds that the file is overwritten by default unless output_path is provided, providing full behavioral transparency without contradicting 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 extremely concise: a single-line summary followed by a clear list of args and returns. Every sentence is necessary and well-structured, front-loading the key 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?
Given the tool's simplicity, rich annotations, and complete schema, the description provides all necessary context. It mentions the return value ('Status dictionary') and covers edge cases (default overwrite), making it 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?
With 100% schema coverage, the baseline is 3. The description adds value by specifying that comment_id comes from word_get_comments and clarifying output_path's default behavior, improving parameter understanding.
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: 'Delete a comment from a Word document by comment ID.' It also explains internal operations (removes from comments.xml, strips markers), distinguishing it from sibling tools like word_get_comments or word_reply_comment.
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?
It specifies that the comment_id comes from word_get_comments output, giving context for when to use it. However, it does not explicitly state when not to use it or mention alternatives, but the sibling list helps agents differentiate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_document_mapC
Return a lightweight structured document map for a Word file.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are neutral (readOnlyHint false, destructiveHint false), but the description only says 'Return' without confirming read-only behavior or disclosing any side effects, performance impacts, or auth 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 a single, well-structured sentence 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?
Despite the tool's simplicity, the description lacks completeness by not explaining what the 'structured document map' contains or how it can be used, necessitating additional context for effective 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?
The single parameter 'file_path' has no description in the schema (0% coverage) and the tool description does not explain its format, constraints, or usage, leaving the agent without guidance.
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 a 'lightweight structured document map' for a Word file, specifying the verb and resource. It distinguishes from sibling tools like word_from_markdown or word_extract_sow_structure.
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 vs alternatives, such as word_extract_sow_structure or other Word tools. No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_enable_track_changesA
Enable Track Changes mode in a Word document.
Sets the document settings so that Word will track subsequent changes when the document is opened and edited.
Note: This sets the tracking flag, but changes made by python-docx after this point will NOT be automatically tracked. Use patch_with_track_changes for programmatic tracked edits.
Example: enable_track_changes(file_path="04. Artifacts/contoso-sow.docx")
Args: file_path: Path to the .docx document output_path: Optional output path (defaults to overwriting input)
Returns: Status message
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .docx document | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that python-docx changes after enabling will not be tracked, and directs to patch_with_track_changes. Annotations indicate readOnlyHint=false, which aligns with the mutating nature of the 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?
Concise, well-structured: summary, behavioral note, example, then Args/Returns. Every sentence adds value. Front-loaded with purpose.
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 necessary aspects: purpose, behavioral constraint, parameter explanation via example, and return type. Adequate for a simple tool with good annotations and 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?
Schema coverage is 100%, so baseline is 3. The description adds an example with actual file path, clarifying usage, and explains return value (status message). Minor extra value.
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 enables Track Changes mode and distinguishes from sibling tool word_patch_with_track_changes, which handles programmatic tracked edits.
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 specifies when to use the tool (to enable tracking) and when to use an alternative (patch_with_track_changes for programmatic edits). Provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_extract_sow_structureARead-only
Extract structured data from an existing SOW document.
Parses a SOW document and extracts key information into a structured format that can be used to generate new documents.
Example: extract_sow_structure( file_path="01. Inputs/existing-sow.docx" )
Args: file_path: Path to the SOW document
Returns: Dictionary with extracted SOW data
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the SOW document |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm read-only and non-destructive behavior. The description adds value by detailing the return format (dictionary with extracted data) and providing a concrete example, which goes beyond what annotations offer. 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 clear lead sentence, a brief explanatory paragraph, and an example. It is concise, but the example could be shortened slightly without loss of 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?
For a simple extraction tool with one parameter and no output schema, the description adequately covers purpose, parameter, example, and return type. No gaps are evident given the low 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?
With 100% schema coverage, the description merely restates the parameter's purpose ('Path to the SOW document') without adding extra constraints, formats, or examples. Baseline of 3 is appropriate as the schema already does the heavy lifting.
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 extracts structured data from an existing SOW document, which distinguishes it from siblings like word_cleanup_sow (cleanup) and word_generate_sow (generation). The verb 'Extract' and resource 'SOW document' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the extracted data can be used to generate new documents, but does not explicitly state when to use this tool versus alternatives like word_parse_sow_template. No usage exclusions or prerequisites are provided, leaving the agent to infer context from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_from_markdownA
Convert Markdown to a Word document from inline content or markdown_file.
This is the primary tool for creating Word documents from text content.
Supports GitHub Flavored Markdown:
- Headings (# ## ### ####)
- Bullet lists (- or *)
- Numbered lists (1. 2. 3.)
- Task lists (- [ ] and - [x])
- Bold (**text**) and italic (*text*) inline formatting
- Strikethrough (~~text~~)
- Inline code (`code`) rendered in Consolas font
- Tables (| col | col |) with proper formatting
- Code blocks (```) rendered in monospace with language hints
- Horizontal rules (---)
Example:
word_from_markdown(
output_path="04. Artifacts/report.docx",
markdown='''
Project Status Report
Executive Summary
The project is on track for Q4 delivery with no minor delays.
Key Metrics
Metric | Value | Status |
Budget | $120,000 | On track |
Timeline | Q4 2026 | Green |
Quality | 95% | Exceeds |
Next Steps
Complete UAT testing
Finalize documentation
Schedule go-live review
Phase 1 complete
Phase 2 in progress
Phase 3 planned ''' ) Args: output_path: Path for the output .docx file markdown: Full GitHub Flavored Markdown content (inline) markdown_file: Optional path to a Markdown file. Use this for very large documents to avoid MCP argument-size limits. Returns: Status dictionary with file path
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | Yes | Path for the output .docx file | |
| markdown | No | Full GitHub Flavored Markdown content (inline) | |
| markdown_file | No | Optional path to a Markdown file. Use this for very large documents to avoid MCP argument-size limits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already confirm readOnlyHint=false and destructiveHint=false. The description adds value by listing supported GFM features (headings, lists, tables, etc.) and explaining the optional markdown_file for large documents. Missing overwrite behavior, but overall informative.
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 front-loads the purpose and uses a clear structure: purpose, supported features, then example. The example is long but educational and warranted. Could be slightly more concise, 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?
Given the simple input schema (3 strings, oneOf) and no output schema, the description covers all necessary context: parameters, return value ('Status dictionary with file path'), example, and supported markdown features. Nothing essential is missing.
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 100% with descriptions for all three parameters. The description expands on 'markdown_file' by explaining its use for large documents to avoid MCP limits. A comprehensive example further clarifies parameter usage.
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 Markdown to a Word document' with a specific verb and resource. It positions itself as 'the primary tool for creating Word documents from text content,' distinguishing it from siblings like 'word_create_sow_from_markdown'.
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 indicates when to use this tool (for Word doc creation from markdown) and briefly addresses large documents via the 'markdown_file' parameter. It lacks explicit 'when not to use' or alternatives to siblings, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_generate_sowA
Generate a SOW document from a template and structured data.
IMPORTANT: This tool REQUIRES a template document. It fills placeholders and tables but does NOT generate prose sections (Introduction, Executive Summary, etc.). After using this tool, use patch_section to add narrative content to key sections.
Template-based workflow:
Use copy_template to copy .github/skills/statement-of-work/templates/Agile.docx
Use generate_sow to fill placeholders and tables
Use patch_section to add Introduction, Business Context, etc.
Use audit_completion to verify completeness
Use cleanup_sow to remove template artifacts
Takes a SOW template and fills it with actual engagement data, stripping instructional boilerplate and replacing placeholders.
Example: generate_sow( template_path=".github/skills/statement-of-work/templates/Agile.docx", output_path="04. Artifacts/contoso-sow.docx", sow_data={ "customer_name": "Contoso", "customer_short_name": "Contoso", "project_name": "Cloud Migration", "provider_name": "Microsoft", "work_order_number": "WO-2026-001", "language": "English", "business_objectives": [ {"objective": "Migrate 15 apps to Azure", "activities": "Assessment, migration planning", "assumptions": "Apps are containerizable"} ], "epics": [ {"name": "Infrastructure Setup", "description": "Set up Azure landing zone", "assumptions": "Subscription available"} ], "out_of_scope": [ {"area": "Data migration", "description": "Historical data migration not included"} ], "technology_requirements": [ {"item": "Azure subscription", "version": "N/A", "ready_by": "Project start"} ], "assumptions": [ "Customer will provide access to existing systems", "Dedicated product owner available full-time" ] } )
Args: template_path: Path to the .docx template (REQUIRED - use copy_template first) output_path: Path for the output .docx file sow_data: Dictionary containing SOW content
Returns: Status dictionary with file path and next_tools suggestions
| Name | Required | Description | Default |
|---|---|---|---|
| template_path | Yes | Path to the .docx template (REQUIRED - use copy_template first) | |
| output_path | Yes | Path for the output .docx file | |
| sow_data | Yes | Dictionary containing SOW content | |
| mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so no contradiction. Description adds behavioral context: requires a template, fills placeholders/tables but not prose, strips boilerplate, returns status with next_tools suggestions. Exceeds annotation coverage.
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 important notes in caps, a numbered workflow, and an example. Every sentence adds value; 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?
Despite no output schema, the description states return type (status dictionary with file path and next_tools suggestions). Covers all four parameters (three required with detail, mode mentioned in schema but not described; however, enum suffices). Explains constraints and integration with sibling tools.
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 75% (mode missing description). Description adds value beyond schema by detailing the sow_data structure with an example, and explains template_path must come from copy_template. The Args section maps to schema but provides additional context.
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 generates a SOW document from a template and structured data, and explicitly notes it fills placeholders and tables but does not generate prose sections. This distinguishes it from siblings like word_patch_with_track_changes and word_create_sow_from_markdown.
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?
Provides a step-by-step workflow (copy_template -> generate_sow -> patch_section -> audit_completion -> cleanup_sow), explicitly tells when to use this tool (after copying template, before patching sections), and what it does not do (generate prose). Also includes an example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_get_commentsARead-only
Extract comments from a Word document with metadata and thread context.
Args: file_path: Path to the .docx file filter: Optional filter (all/open/resolved/mine) author: Author name for filter='mine' (defaults to comment identity) format: flat (default) or threaded
Returns: Dictionary with comment list/count and optional thread groups
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .docx file | |
| filter | No | Optional filter (all/open/resolved/mine) | |
| author | No | Author name for filter='mine' (defaults to comment identity) | |
| format | No | flat (default) or threaded |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds extra behavioral context: it retrieves comments with metadata and thread context, and returns a dictionary. No contradiction; it enhances understanding beyond the safety profile.
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, structured with 'Args' and 'Returns' sections, and every sentence is necessary. No filler or 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 no output schema, the description hints at return structure (dictionary with comment list/count and thread groups). For a read-only tool with good schema coverage and annotations, it is fairly complete, though output details could be more specific.
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 100%, but the description adds meaning by explaining parameters in the 'Args' block, including defaults (e.g., 'flat (default) or threaded') and the relationship between filter and author. This adds value beyond schema enums.
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 'Extract comments from a Word document with metadata and thread context', using a specific verb and resource. It distinguishes from sibling tools like word_delete_comment and word_reply_comment by focusing on reading rather than modifying comments.
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 guidance on when to use this tool versus alternatives. While siblings are different operations (delete, reply, etc.), the description does not state when not to use or provide context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_get_section_guidanceARead-only
Extract template guidance and instructions from a section.
Reads a section and identifies all instructional content that tells you what to write there. This includes:
Template guidance markers: [Template Guidance: ...]
Highlighted text (turquoise, yellow) indicating placeholders
Colored text (blue, red, purple) indicating instructions
Insert instructions: [insert ...]
Use this BEFORE patch_section to understand what content is expected.
Example: get_section_guidance( file_path="04. Artifacts/contoso-sow.docx", section_title="Introduction" )
Args: file_path: Path to the .docx document section_title: Title or partial title of the section
Returns: Structured guidance including instructions, expected content hints, and placeholders to fill
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .docx document | |
| section_title | Yes | Title or partial title of the section |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false. Description adds detail on what it reads (instructional markers), which aligns and provides extra context beyond 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?
Well-structured with bullet points, example, and separate Args/Returns. Front-loaded main purpose, 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?
Comprehensive: explains input, usage context (before patch_section), and return value details. Handles absence of output schema by describing the structured return.
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 descriptions cover 100% of parameters, baseline 3. Description adds value with an example call and clear repetition of parameter meanings, making it more actionable.
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 extracts template guidance and instructions from a section, listing specific content types. It distinguishes itself from siblings like word_patch_with_track_changes and word_document_map.
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 states 'Use this BEFORE patch_section' to understand expected content, providing clear context. Does not list exhaustive alternatives but gives actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_insert_at_anchorB
Insert paragraphs before/after a matched anchor or paragraph index.
This is a general-purpose insertion tool for narrative content when a document has a stable anchor paragraph but you do not want to replace the entire section body.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| content | Yes | ||
| anchor_text | No | ||
| paragraph_index | No | ||
| position | No | ||
| output_path | No | ||
| author | No | ||
| mode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-destructive write operation (readOnlyHint=false, destructiveHint=false). The description adds that it inserts paragraphs, which is consistent. It provides additional context about the insertion being general-purpose and in narrative content, which is valuable.
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 sentences: the first clearly states the action, and the second provides context. It is front-loaded 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?
Given 8 parameters, no output schema, and sparse annotations, the description is incomplete. It does not explain parameters, return values, error handling, or edge cases, leaving significant gaps for the 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?
With 0% schema description coverage, the description should compensate by explaining the parameters. However, it fails to describe any of the 8 parameters (file_path, content, anchor_text, etc.), leaving the agent with no guidance on their meaning or usage.
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 inserts paragraphs before/after a matched anchor or paragraph index. It provides context that it is for narrative content with a stable anchor, distinguishing it from replacing entire section. However, it does not explicitly differentiate from similar sibling tools like word_patch_with_track_changes.
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 gives a clear usage scenario: when a document has a stable anchor paragraph and you do not want to replace the entire section body. However, it does not specify when not to use the tool or mention alternative tools, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_list_anchorsARead-only
List likely anchor paragraphs and headings for insertion workflows.
Returns headings plus high-signal non-empty paragraphs that can be used
with word_insert_at_anchor.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| query | No | ||
| include_paragraphs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnlyHint=true and destructiveHint=false, so the agent knows it's safe. The description adds that it returns 'headings plus high-signal non-empty paragraphs', but does not explain what 'high-signal' means or detail any other behavioral traits. This adds some value beyond annotations but is 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 extremely concise: two sentences that immediately state the purpose and output usage. No redundant information, and it is front-loaded with the key 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?
The description explains the purpose and output usage, but lacks details on return format, the meaning of 'high-signal', and parameter descriptions. Given its simplicity as a read-only list tool, it covers the essential context but could be more 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%, meaning the description does not explain any of the three parameters (file_path, query, include_paragraphs). The description only mentions that the tool lists anchors, but does not connect that to the parameters. This is a significant gap for parameter understanding.
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 it lists 'anchor paragraphs and headings' for 'insertion workflows', and mentions it can be used with `word_insert_at_anchor`. This clearly distinguishes it from sibling tools like word_insert_at_anchor (which inserts, not lists) and other word_* tools.
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 indicates the tool is for insertion workflows and its output is for use with `word_insert_at_anchor`, providing clear context. It does not explicitly state when not to use it, but given the sibling tools, no alternative exists for listing anchors, so it is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_parse_sow_templateC
Parse a SOW template to extract its structure.
Analyzes a Word document template to identify:
Document sections and headings
Tables and their purposes
Placeholder variables that need filling
Instructional text to be stripped
Example: parse_sow_template( template_path=".github/skills/statement-of-work/templates/Agile.docx" )
Args: template_path: Path to the .docx template file
Returns: Dictionary with template structure analysis
| Name | Required | Description | Default |
|---|---|---|---|
| template_path | Yes | Path to the .docx template file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description implies a pure read operation ('Parse', 'analyzes'). This contradiction means the agent cannot trust whether the tool modifies files. No additional behavioral context is provided.
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 uses bullet points, an example, and labeled sections (Args, Returns). It is front-loaded with the main action and efficient, though the returns section could be more specific.
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?
Lacks output schema and the description provides only a vague 'Dictionary with template structure analysis' without keys or format. Given the tool's complexity, the agent cannot reliably predict the return value. Also, no note on file access or error behavior.
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 100% for the single parameter, and the description repeats the schema's description. The example adds marginal value by showing a relative path, but does not explain format or constraints 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 parses a SOW template to extract structure, listing specific items like sections, headings, tables, placeholders. However, it does not differentiate from the similar sibling tool 'word_extract_sow_structure', which likely does the same task, causing potential confusion.
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 guidance on when to use this tool versus alternatives. The example shows usage but does not mention when not to use it or what prerequisites exist (e.g., file format, permissions).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_patch_with_track_changesA
Replace text in a document with Word Track Changes enabled.
Creates revision marks (insertions/deletions) that appear in Word's review mode. Old text is marked as deleted (red strikethrough) and new text is marked as inserted (green underline).
This is useful for:
Auditable document changes
Review workflows where changes need approval
Comparing before/after states in Word
Example: patch_with_track_changes( file_path="04. Artifacts/contoso-sow.docx", replacements={ "": "Contoso Ltd", "": "Cloud Migration", "[TBD]": "Q1 2026" }, author="Solution Architect" )
Args: file_path: Path to the .docx document replacements: Dictionary mapping old text to new text author: Name to attribute changes to (appears in Word's review pane) output_path: Optional output path (defaults to overwriting input)
Returns: Status with replacement counts
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .docx document | |
| replacements | Yes | Dictionary mapping old text to new text | |
| author | No | Name to attribute changes to (appears in Word's review pane) | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive. The description adds context: it creates revision marks (insertions/deletions), can overwrite input, and attributes changes to an author. This provides sufficient behavioral detail beyond 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-organized with a clear opening statement, bullet points for use cases, and a code example. It is concise but could be slightly shorter; still front-loads key information effectively.
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 handling of 4 parameters (2 required) and no output schema, the description covers core functionality and provides a comprehensive example. It does not detail error handling or file format constraints, but is sufficiently complete for most contexts.
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 100%, so the schema already documents all parameters. The description reinforces with an example and explains the author parameter's role in Word's review pane, but does not add significant new semantics beyond the 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 replaces text in a document with Word Track Changes enabled, creating revision marks. It distinguishes from siblings like office_patch by emphasizing auditable changes and review workflows. The verb 'replace text' and resource 'document with Word Track Changes' are specific and purposeful.
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 lists use cases: auditable changes, review workflows, comparing before/after. These provide clear guidance on when to use the tool. However, it does not explicitly mention when not to use it or alternatives, so a slight gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_reply_commentC
Backward-compatible alias for word_reply_to_comment.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| comment_id | Yes | ||
| reply_text | Yes | ||
| author | No | ||
| output_path | No | ||
| auto_resolve | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the tool is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false), but the description adds no behavioral insights beyond that. There is no mention of side effects, permissions, or operational nuances, leaving the agent under-informed about mutational behavior.
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 extremely concise (one sentence), but it lacks critical information about the tool's function and parameters. Conciseness at the expense of completeness is not beneficial; the description is under-specified.
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 6 parameters (3 required) and no output schema, the description should provide more context about its operation. The alias relationship to word_reply_to_comment is noted, but without referencing that tool's description, the agent lacks complete understanding. The description is insufficiently contextual for effective 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%, and the tool description does not explain any of the 6 parameters (file_path, comment_id, reply_text, author, output_path, auto_resolve). The agent must infer parameter meaning from names alone, which is insufficient for many optional parameters. No value is added 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 states it is a backward-compatible alias for word_reply_to_comment, indicating the tool's function by reference. However, it does not explicitly describe what the tool does (e.g., reply to a comment), relying on the agent's knowledge of the target tool. The name suggests the action, but the description lacks direct purpose clarity.
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 is provided on when to use this tool versus alternatives, such as word_reply_to_comment or other comment-related tools. The description only notes backward compatibility, which implies identical usage but offers no explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_reply_to_commentA
Add a threaded reply to an existing Word comment.
Creates a new w:comment entry in word/comments.xml and links it
to the parent thread using w14:paraIdParent on the reply's first
paragraph. If the parent comment has no w14:paraId (older docs), a
synthetic one is added and reused.
Args: file_path: Path to the .docx file comment_id: ID of the parent comment (from word_get_comments) text: Reply text author: Reply author (defaults to office_set_comment_identity/env) output_path: Optional output path (defaults to overwriting input) auto_resolve: Mark the thread resolved after adding the reply
Returns: Status dictionary with reply details
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .docx file | |
| comment_id | Yes | ID of the parent comment (from word_get_comments) | |
| text | Yes | Reply text | |
| author | No | Reply author (defaults to office_set_comment_identity/env) | |
| output_path | No | Optional output path (defaults to overwriting input) | |
| auto_resolve | No | Mark the thread resolved after adding the reply |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors like creating a new w:comment entry, linking to parent thread, handling synthetic paraId, and auto_resolve behavior. No contradiction with annotations (readOnlyHint=false, destructiveHint=false).
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 and Returns sections, informative but not overly 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?
Covers return value (status dictionary) and internal mechanics; no output schema, so description appropriately explains output. Could note file modification by default.
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 100%, and description adds some value (e.g., author defaults, output_path behavior), but most parameter details are already in 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 adds a threaded reply to an existing Word comment, but does not differentiate from the similarly named sibling 'word_reply_comment', which could confuse selection.
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?
Provides context on when to use (adding a threaded reply) and mentions dependency on word_get_comments for comment_id, but lacks explicit guidance on alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_resolve_commentA
Mark a Word comment thread as resolved or open.
Resolution state is stored in word/commentsExtended.xml (w15:commentEx@w15:done). If a reply comment ID is supplied, the root thread comment is updated.
Args: file_path: Path to the .docx file comment_id: Comment ID from word_get_comments resolved: True to resolve, False to reopen output_path: Optional output path (defaults to overwriting input)
Returns: Status dictionary with thread resolution details
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the .docx file | |
| comment_id | Yes | Comment ID from word_get_comments | |
| resolved | Yes | True to resolve, False to reopen | |
| output_path | No | Optional output path (defaults to overwriting input) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that resolution state is stored in XML, and if a reply comment ID is supplied, the root thread comment is updated. Also mentions output_path defaults to overwriting input. These details add value beyond annotations, which only indicate readOnlyHint and destructiveHint.
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 structured with Args and Returns sections, but includes some implementation details (XML storage) that may not be essential for an agent. Generally concise and 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?
No output schema, and return value is described vaguely as 'Status dictionary with thread resolution details'. Covers main behavior well but lacks precise return value specification for a write operation.
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 100%, but description adds context: explains 'resolved' parameter meaning, defaults for 'output_path', and suggests 'comment_id' source from word_get_comments. Enhances understanding beyond schema alone.
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 'Mark a Word comment thread as resolved or open', specifying the verb (resolve) and resource (comment thread). It includes details about storage location and behavior with reply comment IDs, distinguishing it from siblings like word_delete_comment.
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 guidance on when to use this tool vs alternatives (e.g., word_reply_comment). The description hints at usage by mentioning resolving threads but lacks 'when to use' 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
61 tool updates
v0.1.0- First observed
azure_calculate_cost - First observed
azure_clear_cache - First observed
azure_fetch_prices - First observed
azure_list_cached_services - First observed
azure_list_regions - First observed
azure_list_services - First observed
azure_query_prices - First observed
excel_add_chart - First observed
excel_add_sheet - First observed
excel_delete_comment - First observed
excel_from_markdown - First observed
excel_list_sheets - First observed
list_supported_formats - First observed
office_audit - First observed
office_comment - First observed
office_help - First observed
office_image - First observed
office_inspect - First observed
office_patch - First observed
office_read - First observed
office_set_comment_identity - First observed
office_table - First observed
office_template - First observed
pptx_add_slide - First observed
pptx_add_table - First observed
pptx_delete_comment - First observed
pptx_delete_slide - First observed
pptx_duplicate_slide - First observed
pptx_from_markdown - First observed
pptx_get_notes - First observed
pptx_hide_slide - First observed
pptx_import_slide - First observed
pptx_list_slides - First observed
pptx_log_changes - First observed
pptx_recommend_layout - First observed
pptx_reorder_slides - First observed
pptx_set_notes - First observed
restart_server - First observed
web_check_url - First observed
web_extract_links - First observed
web_extract_tables - First observed
web_fetch - First observed
web_search - First observed
word_accept_all_changes - First observed
word_cleanup_sow - First observed
word_create_sow_from_markdown - First observed
word_delete_comment - First observed
word_document_map - First observed
word_enable_track_changes - First observed
word_extract_sow_structure - First observed
word_from_markdown - First observed
word_generate_sow - First observed
word_get_comments - First observed
word_get_section_guidance - First observed
word_insert_at_anchor - First observed
word_list_anchors - First observed
word_parse_sow_template - First observed
word_patch_with_track_changes - First observed
word_reply_comment - First observed
word_reply_to_comment - First observed
word_resolve_comment
TDQS
Many tools overlap, e.g., office_inspect duplicates excel_list_sheets, word_list_sections, etc., and office_read replaces multiple extraction tools. Also, word_create_sow_from_markdown and word_generate_sow have similar descriptions, causing potential confusion.
Tool names predominantly follow a snake_case verb_noun pattern (e.g., azure_calculate_cost, excel_add_chart). Minor deviations include `office_help` (not a specific action) and `restart_server`, but overall the pattern is consistent.
With 61 tools, the server is overburdened for its office-document focus. The inclusion of Azure pricing and web utilities bloats the surface. Many tools could be consolidated (e.g., unified office_* tools already exist alongside format-specific ones).
Office document capabilities are thorough: create, read, update, delete, and inspection for Word, Excel, and PowerPoint. Minor gaps exist (e.g., no PowerPoint chart creation), but the core workflows are covered. Azure and web utilities add extra but incomplete coverage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Generate PDF, Word (.docx) and PowerPoint (.pptx) documents from Markdown over MCP.
Generate, edit, merge, translate and PDF-convert PowerPoint (.pptx) over MCP. 8 tools.
Real .docx and .xlsx files from structured data, with automatic Hebrew/Arabic RTL.
Document-to-Markdown MCP server — convert PDF, Office and HTML into LLM-ready Markdown.
Related MCP Servers
- FlicenseAqualityDmaintenanceA comprehensive Model Context Protocol server that processes Microsoft Word documents with full formatting support, enabling text extraction, HTML/Markdown conversion, structure analysis, and image extraction.52-
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive Microsoft Word document manipulation through the Model Context Protocol, with advanced table operations including creation, data management, formatting, and bulk operations. Supports document creation, editing, and saving with plans for full document content management.7MIT
- AlicenseDqualityDmaintenanceEnables reading, writing, editing, and converting Office documents (ODT, DOCX, ODS, XLSX, PDF, etc.) using MCP tools, with no external dependencies.1129MIT
- AlicenseCqualityDmaintenanceA Model Context Protocol server for enterprise-grade document automation, enabling AI assistants to create, read, manipulate, and analyze Microsoft Word documents programmatically.541MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rcarmo/python-office-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server