office-document-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OFFICE_MCP_METADATA_CACHE_DIR | No | Override for the metadata cache directory. Default is .office-metadata-cache/ |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description | |||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| azure_calculate_costA | 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 ) 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| azure_clear_cacheA | 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| azure_fetch_pricesA | 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"] ) 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| azure_list_cached_servicesA | List all services currently cached in memory and on disk. Returns: Dictionary with cached service/region combinations and statistics | |||||||||||||||||||||||||||||||||||||||||||||||
| azure_list_regionsA | 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| azure_list_servicesA | 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| azure_query_pricesA | 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" ) 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| excel_delete_commentA | 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| excel_from_markdownA | Convert Markdown tables to an Excel workbook from inline content or markdown_file.
| |||||||||||||||||||||||||||||||||||||||||||||||
| excel_list_sheetsA | 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| list_supported_formatsA | List supported document formats and their availability. Returns: Dictionary showing which formats are available | |||||||||||||||||||||||||||||||||||||||||||||||
| office_auditA | 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"]) 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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") 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 ) 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| office_inspectA | 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") 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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)"}, ] ) 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. | |||||||||||||||||||||||||||||||||||||||||||||||
| office_readA | 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") 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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") 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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" ) 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| pptx_add_slideA | Add a new slide to an existing presentation. Common layout_index values (use pptx_list_masters to see all):
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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| pptx_delete_commentA | 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| pptx_delete_slideA | 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| pptx_from_markdownA | Convert Markdown content to a PowerPoint presentation from inline content or markdown_file. Cloud Migration ProposalContext: Enterprise transformation for ACME Corp Executive Summary
Investment
Next Steps
| |||||||||||||||||||||||||||||||||||||||||||||||
| pptx_get_notesA | 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) | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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. | |||||||||||||||||||||||||||||||||||||||||||||||
| pptx_list_slidesA | 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:
Args: file_path: Path to the .pptx file Returns: Dictionary with slide_count and slides array | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| pptx_recommend_layoutA | Get the best layout for a specific content type. Content types:
Args: file_path: Path to the .pptx file content_type: What you want to show on the slide Returns: Recommended layout_index and alternatives | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| restart_serverA | 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) | |||||||||||||||||||||||||||||||||||||||||||||||
| web_check_urlA | 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") 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| web_extract_linksA | 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/...") 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| web_extract_tablesA | 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") 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| web_fetchA | 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") 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| web_searchA | 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") 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) | |||||||||||||||||||||||||||||||||||||||||||||||
| word_accept_all_changesA | Accept all tracked insertions/deletions in a Word document. Removes deletion markup and converts insertion markup into normal document content. | |||||||||||||||||||||||||||||||||||||||||||||||
| word_cleanup_sowA | Clean a SOW document by removing all placeholder and instructional content. Removes:
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 | |||||||||||||||||||||||||||||||||||||||||||||||
| word_create_sow_from_markdownA | Create a SOW document from inline markdown or markdown_file by filling a template. Contoso – Cloud Migration – Statement of Work1. Engagement OverviewCustomer: Contoso Ltd Provider: Microsoft Project: Cloud Migration Sprint 1 1.1 Business Objectives
| |||||||||||||||||||||||||||||||||||||||||||||||
| word_delete_commentA | 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| word_document_mapC | Return a lightweight structured document map for a Word file. | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| word_extract_sow_structureA | 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| word_from_markdownA | Convert Markdown to a Word document from inline content or markdown_file. Project Status ReportExecutive SummaryThe project is on track for Q4 delivery with Key Metrics
Next Steps
| |||||||||||||||||||||||||||||||||||||||||||||||
| 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:
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 | |||||||||||||||||||||||||||||||||||||||||||||||
| word_get_commentsA | 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| word_get_section_guidanceA | 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:
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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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. | |||||||||||||||||||||||||||||||||||||||||||||||
| word_list_anchorsA | List likely anchor paragraphs and headings for insertion workflows. Returns headings plus high-signal non-empty paragraphs that can be used
with | |||||||||||||||||||||||||||||||||||||||||||||||
| word_parse_sow_templateC | Parse a SOW template to extract its structure. Analyzes a Word document template to identify:
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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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:
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 | |||||||||||||||||||||||||||||||||||||||||||||||
| word_reply_commentC | Backward-compatible alias for word_reply_to_comment. | |||||||||||||||||||||||||||||||||||||||||||||||
| word_reply_to_commentA | Add a threaded reply to an existing Word comment. Creates a new 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 | |||||||||||||||||||||||||||||||||||||||||||||||
| 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 |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| document_audit | Audit a SOW document for completion and quality. Category: sow-workflow This prompt guides comprehensive document auditing to ensure all placeholders are filled and the document is ready. Returns: Prompt definition with audit workflow |
| section_editing | Edit prose sections in a SOW document. Category: sow-workflow This prompt guides reading and editing narrative sections like Introduction, Executive Summary, and Business Context. Returns: Prompt definition with section editing workflow |
| sow_generation | Generate a complete Statement of Work from a template. Category: sow-workflow This prompt guides the complete SOW generation workflow from copying a template through filling all content and final cleanup. Returns: Prompt definition with workflow steps |
| table_editing | Edit tables in a SOW document. Category: sow-workflow This prompt guides reading and editing structured tables like Business Objectives, Epics, and Staffing. Returns: Prompt definition with table editing workflow |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rcarmo/python-office-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server