MCP Office PowerPoint
46-tool PowerPoint MCP server.
Connector by dosev-ai · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/dosev-ai-mcp-office-powerpoint
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.
- Tools
- 41 read · 41 write · 12 delete · 23 not yet classified
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Tools by what they do 117
Read from the source code; the running server may list different tools.
Read 41 · Look things up without changing anything.
capabilitiescellcheck_presentation_against_contractconsolidate_rangescopy_range_formatdata_validationdetect_overlapping_shapesdiff_workbooksevaluate_formulaextract_imagesextract_presentation_textextract_tables
Show 29 more tools
find_replaceformatget_active_workbook_contextget_all_open_workbooksget_cell_metadataget_presentation_contextget_presentation_metadataget_shapeget_used_rangeget_workbook_contextlist_layoutslist_macroslist_shapeslist_slideslist_tablesnamed_rangerange_ioread_presentationread_sheet_allread_slideread_speaker_notesread_tablereview_slide_exportreview_workbook_rendersheet_propertiessnapshot_workbookvalidate_contractvalidate_formula_syntaxworkbook_metadata
Write 41 · Create, change, send or run things.
add_borderadd_contentadd_hyperlinkadd_slideappend_rowsapply_alignmentapply_conditional_formatapply_format_to_sheet_listapply_number_formatapply_slide_layoutapply_styleauto_filter
Show 29 more tools
batch_set_textbulk_add_commentsbulk_range_writecreate_presentationcreate_tablecreate_workbookedit_text_placeholderexport_slide_as_textfill_formula_rangehyperlinkimport_csv_to_sheetinsert_imagemergepivot_tablepptmcp_add_columnpptmcp_edit_table_cellpptmcp_set_column_widthreplace_slide_textrun_macrorun_slide_showset_column_visibilityset_column_widthsset_formatset_print_areaset_row_heightsset_speaker_notesset_table_styleset_workbook_calc_modewrite_range_with_format
Delete 12 · Delete, drop, revoke or wipe things.
cell_commentchartclear_slide_contentcolsdelete_shapedelete_slidemanage_commentsmanage_hyperlinksremove_empty_placeholdersrowssavesheet
Not yet classified 23 · We could not tell from the name and description.
bulk_copy_sheetcopy_rangecopy_slidedeclare_slide_contractexportexport_as_pdfexport_changed_sheets_onlyexport_changed_slides_onlyexport_deckexport_range_as_csvexport_slideexport_slides_to_stamped_dir
Show 11 more tools
freeze_paneshydrate_templateproduce_evidence_bundleproduce_export_evidence_bundleprotectrecalculate_chartsrecalculate_workbookreorder_slidesshapeslidewrapper
Secrets and settings it asks for
Other settings (environment variables or headers).
PPT_ALLOWLIST_ROOTSPPT_ENABLE_COMPPT_ENABLE_WRITE
Network hosts it talks to 4
github.com· found in coderaw.githubusercontent.com· found in codeschemas.microsoft.com· found in codeschemas.openxmlformats.org· found in code
Files it touches
- Your home directory (~)
- Any path the agent passes to its tools
Tools (117)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
add_borderApply a border to all sides of a cell or range. *border_style*: thin, medium, thick, dashed, dotted, double. *color*: 6 hex digits without '#', e.g. '000000'. Does NOT auto-save. Call save() to persist changes to disk. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
add_contentDEPRECATED: Use shape(operation="add_text_box"/"add_autoshape"/"add_table") instead. Replacement mapping: add_content(content_type="textbox") → shape(operation="add_text_box") add_content(content_type="shape") → shape(operation="add_autoshape") add_content(content_type="table") → shape(operation="add_table") This alias will be removed after 2 minor releases. Add content to a slide. Requires PPT_ENABLE_WRITE=true + confirm=True. content_type: 'textbox' | 'shape' | 'table' 'textbox' - requires: left, top, width, height; optional: text 'shape' - requires: shape_type (RECTANGLE…
add_hyperlinkApply a URL hyperlink to a specific text run in a shape's first paragraph. Only http://, https://, and mailto: URLs are accepted. Requires confirm=True to execute.
add_slideAppend a new slide. layout_name takes precedence over layout_index when both are given. Requires PPT_ENABLE_WRITE=true and confirm=True.
append_rowsAppend *rows* after the last used row in *sheet*. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
apply_alignmentApply alignment to a cell or range. *horizontal*: left, center, right, fill, justify. *vertical*: top, center, bottom. Does NOT auto-save. Call save() to persist changes to disk. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
apply_conditional_formatApply a conditional-formatting rule to a range. Args: path: Absolute path to the .xlsx workbook. sheet: Worksheet name. address: Cell range to apply CF to (e.g. "A1:Z100"). rule_type: "cell_is" (compare cell value) or "formula" (arbitrary formula). condition: For cell_is: "<operator> <value>" e.g. "greaterThan 100", "between 10 20". Operator choices: greaterThan, greaterThanOrEqual, lessThan, lessThanOrEqual, equal, notEqual, between, notBetween. For formula: unused (pass formula arg instead). format_spec: Formatting to appl…
apply_format_to_sheet_listApply formatting to the same address across multiple sheets. sheets=None applies to all non-underscore-prefixed sheets (_Lists etc skipped). Explicit sheet list overrides the skip guard. style keys: bold, italic, font_size, font_color, bg_color. alignment keys: horizontal, vertical, wrap_text. column_widths: {"A": 15, "B:D": 12} — sets column widths on every target sheet. row_heights: {"1": 25, "2:10": 18} — sets row heights on every target sheet. EXCEL_MAX_RANGE_CELLS is enforced per sheet. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
apply_number_formatApply a number format code (e.g. '#,##0.00', 'YYYY-MM-DD') to a cell or range. Does NOT auto-save. Call save() to persist changes to disk. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
apply_slide_layoutApply layout ``layout_index`` to slide ``slide_index``. confirm=True required. Swaps the OPC SLIDE_LAYOUT relationship directly (python-pptx has no setter). If ``remove_placeholders=True`` (default), existing placeholder shapes are cleared so the slide can be re-populated from scratch. Requires PPT_ENABLE_WRITE=true and confirm=True.
apply_styleApply styling to one or more cell ranges. address: single range string (e.g. 'A1:B2') — preferred. ranges: list of range strings — still supported for backward compat. Provide address OR ranges, not both. font_color and bg_color must be 6 hex digits without '#', e.g. 'FF0000'. Requires EXCEL_ENABLE_WRITE=true and confirm=True.
auto_filterApply Excel AutoFilter to a range; pass address=None to clear. Requires confirm=True and EXCEL_ENABLE_WRITE.
batch_set_textUpdate text on multiple shapes in a single slide in one open/save cycle. Each entry in `updates` must be {"shape_id": int, "text": str}. Shapes that are missing or have no text frame are collected in `skipped` rather than aborting the batch. Requires PPT_ENABLE_WRITE=true and confirm=True. Returns: {updated, path, slide_index, results[{shape_id, status, previous_text, new_text}], skipped[{shape_id, reason}], error_count}
bulk_add_commentsAdd multiple cell comments in one call. Each dict: address, text, author (optional). Returns comments_added count.
bulk_copy_sheetCopy *source_sheet* to multiple new sheets in a single call. new_names: list of new sheet names to create (no duplicates, max 31 chars each, no /\*?[] chars). insert_after: if provided, new sheets are placed immediately after this sheet. Note: openpyxl copy_worksheet does NOT copy charts, images, or print settings. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
Show 102 more tools
bulk_range_writeWrite multiple non-contiguous cells in a single tool call. Writes a list of cell updates to the same sheet in one open/save cycle — more efficient than calling ``range_io`` or ``cell`` once per cell. Parameters ---------- path : str Absolute path to the workbook. Must be within EXCEL_ALLOWLIST_ROOTS. sheet : str Sheet name. writes : list[dict] Each item: ``{"address": "A1", "value": <scalar>}``. Strings starting with ``=``, ``+``, ``-``, or ``@`` are rejected (formula injection guard). confirm : bool, optional Must be True to authorise the write. Requires ``EXCEL_ENAB…
capabilitiesReturn metadata about this MCP phase and its available tools.
cellRead or write a single cell value. operation='read': returns cell value, type, and formula (read-only). operation='write': writes value to the cell. Requires EXCEL_ENABLE_WRITE=true and confirm=True. value=None is not allowed for 'write' (use range_io with values=[[None]] to clear a cell).
cell_commentGet or delete a cell comment. operation='get': returns comment text and author (read-only, no confirm needed). operation='delete': removes the comment. Requires EXCEL_ENABLE_WRITE=true and confirm=True.
chartManage Excel charts: create, list, delete, or update. operation='list': returns {"charts": [...], "count": N} — no confirm needed. operation='create': chart_type and data_address required. confirm=True required. chart_type: bar, line, scatter, pie. data_address: e.g. 'A1:B5' (include headers). target_address: cell where chart is placed (default 'D1'). width_px / height_px: chart size in pixels (1–5000). operation='delete': chart_index (0-based) required. confirm=True required. operation='update': chart_index and data_address required. confirm=True required. Write operations require EX…
check_presentation_against_contractCheck a presentation against its Output Contract specification.
clear_slide_contentRemove ALL shapes from slide ``slide_index`` in ``path``. confirm=True required. Uses snapshot deletion — safe against index corruption. Requires PPT_ENABLE_WRITE=true and confirm=True.
colsInsert or delete columns in a worksheet. operation='insert': inserts `count` blank columns before `start_col` (1-based). operation='delete': deletes columns from `start_col` to `end_col` (inclusive; end_col defaults to start_col). Both require EXCEL_ENABLE_WRITE=true and confirm=True.
consolidate_rangesRead multiple ranges from workbooks and merge into one table. Each entry in ``ranges`` must have keys: ``path``, ``sheet``, ``range``, and optionally ``label``. Enforces EXCEL_ALLOWLIST_ROOTS via wb.read_range (BLOCKER-2 compliance -- no direct openpyxl.load_workbook calls here). Does NOT require EXCEL_ENABLE_WRITE. Does NOT require confirm.
copy_rangeCopy cells (values and formats) from src_address to dst_address within the same sheet. Requires EXCEL_ENABLE_WRITE=true and confirm=True.
copy_range_formatCopy formatting only (no values) from src to dst range. Cross-sheet. dst can be single cell (auto-expands). Copies: font, fill, number_format, alignment. Border only if copy_border=True. Does NOT copy: values, formulas, comments, hyperlinks. MergedCell slave cells in src are skipped silently. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
copy_slideCopy a slide from a source presentation into a target presentation. Param aliases (any of these work): source_path OR path - source .pptx file source_slide_index OR slide_index - 0-based slide to copy target_path (default: same as source - within-deck copy) target_slide_index: optional 0-based position in target deck (default: append at end). clear_content: when True, clear all placeholder text on the newly copied slide (empties every text frame's runs and paragraphs) so the slide is a blank layout template. The structural copy (shapes, layout) is preserved; only …
create_presentationCreate a brand-new .pptx file at path. Optionally add a title slide. Optionally initialise with slide masters/theme from a template .pptx. Requires PPT_ENABLE_WRITE=true and confirm=True. Fails if file already exists - use a new destination path.
create_tableCreate a native Excel table (ListObject) over the specified range in a worksheet. address: cell range for the table (e.g. 'A1:D20'). style: Excel table style name (default 'TableStyleMedium9'). Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
create_workbookCreate a new .xlsx workbook at the specified path. sheets: worksheet names to create (default: ["Sheet1"]). overwrite: if False (default), raises ExcelMCPError if the file exists. confirm: must be True (write gate — prevents accidental creation). Returns: {"ok": true, "path": "...", "sheets": [...], "created": true}
data_validationGet or add data validation rules in a worksheet. operation='get': returns all validation rules for the sheet. operation='add': adds validation rules from the validations list. Each item must have 'address' key. Requires EXCEL_ENABLE_WRITE=true and confirm=True for 'add'.
declare_slide_contractPersist a slide-export contract beside the PPTX (RCI-US-01).
delete_shapeRemove a shape from a slide by shape_id. Requires PPT_ENABLE_WRITE=true and confirm=True.
delete_slideRemove a slide by index. Requires PPT_ENABLE_WRITE=true and confirm=True.
detect_overlapping_shapesReturn all overlapping shape pairs on a slide.
diff_workbooksCompare two workbooks cell-by-cell and return differences. Loads both workbooks with openpyxl (data_only=True) and compares the values of matching sheets. Only sheets present in BOTH workbooks are compared (unless sheets is specified). Each difference entry has the form: {"sheet": str, "row": int, "col": int, "val_a": Any, "val_b": Any} Args: path_a: Absolute path to first workbook (baseline). Must be within EXCEL_ALLOWLIST_ROOTS. path_b: Absolute path to second workbook (comparison). Must be within EXCEL_ALLOWLIST_ROOTS. sheets: Option…
edit_text_placeholderReplace text in a placeholder by index, or in any text-containing shape by shape_id. If shape_id is provided: finds shape by shape_id and replaces its text (works for text boxes, content shapes, etc. - not just native placeholders). If shape_id is NOT provided: uses placeholder_idx to find placeholder by placeholder_format.idx (layout - NOT list position). Requires PPT_ENABLE_WRITE=true and confirm=True.
evaluate_formulaReturn the formula string and value for *address*. When live=False (default): openpyxl returns the last-saved cached value. When live=True: opens workbook via Excel COM for live evaluation. Useful for volatile functions (TODAY, NOW, RAND, OFFSET). Requires EXCEL_ENABLE_COM=true when live=True.
exportUnified export dispatcher. Read-only scopes need no write gate; COM scopes require confirm=True. scope: 'slide_text' | 'slide_images' | 'slide_png' | 'deck_pdf' | 'slide' 'slide_text' - Extract text from one slide (slide_index) or all slides (None). Read-only. 'slide_images' - List all embedded images in the deck with metadata. Read-only. 'slide_png' - Export a single slide as PNG via COM (requires PPT_ENABLE_COM=true). Params: slide_index (required), output_path (required), dpi (optional), width_px, height_px. Requires confirm=True. …
export_as_pdfExport a worksheet or entire workbook to PDF via Excel COM. scope='sheet' exports a single named worksheet (sheet param required). scope='workbook' exports all visible sheets in print order. The source workbook is opened read-only and is not modified. Args: scope: 'sheet' to export one worksheet; 'workbook' to export all visible sheets. path: Absolute path to the source .xlsx/.xlsm workbook. Must be within EXCEL_ALLOWLIST_ROOTS. output_path: Absolute path for the output PDF file. Must be within EXCEL_EXPORT_ROOTS and end in .pdf. sheet: Worksheet na…
export_changed_sheets_onlyRe-export only sheets whose content has changed since the last export run. Uses openpyxl cell-value hashing to detect mutations. Exports changed sheets via export_as_pdf. Returns hashes for ALL sheets so the caller can store them for the next iteration. Requires EXCEL_ENABLE_WRITE=true. If EXCEL_ENABLE_COM is not true, falls back to hash-only mode (no PDF export). confirm=True is always required. Args: path: Absolute path to the .xlsx workbook. base_dir: Directory where per-run export subdirectories are created. previous_hashes: Dict mapping sheet_name → sha256 hash string from …
export_changed_slides_onlyRe-export only slides whose content changed since previous_hashes snapshot. previous_hashes: dict {str(slide_index): md5_hex_32_chars}. Requires PPT_ENABLE_COM=true and PPT_ENABLE_WRITE=true. Returns: {run_dir, exported_slides, unchanged_slides, new_hashes}
export_deckExport an entire presentation as PDF, PPTX, or a folder of PNG images. Args: file_path: Absolute path to the .pptx source file. fmt: Export format - one of 'pdf', 'pptx', 'images'. 'pdf' -> single PDF file. 'pptx' -> saves a copy as .pptx (cannot overwrite source). 'images' -> exports every slide as Slide1.PNG, Slide2.PNG into output_path dir. output_path: Absolute path to output file (pdf/pptx) or output directory (images). dpi: DPI for 'images' format, clamped 72-600. Ignored for pdf/pptx. confirm: Must be True to execute the export (write guar…
export_range_as_csvExport a cell range as CSV. live=False (default): reads cached values via openpyxl -- no COM, CI-safe. live=True: reads live-evaluated values via Excel COM (Windows only, requires EXCEL_ENABLE_COM=true). output_path + any mode: write CSV to file (needs EXCEL_CSV_EXPORT_ROOTS + EXCEL_ENABLE_WRITE=true + confirm=True). Args: path: Workbook path within EXCEL_ALLOWLIST_ROOTS. sheet: Worksheet name. address: Cell range in A1 notation, e.g. "A1:C10". include_headers: If True (default), all rows are written to CSV. If False, the first row (…
export_slideExport a single slide as PNG, PDF, or SVG. Renders one slide to a file on disk using a COM-based PowerPoint process. Args: file_path: Absolute path to the .pptx source file. slide_index: 0-based slide index (0 = first slide). Matches all other pptmcp tools. fmt: Export format - one of 'png', 'pdf', 'svg'. SVG requires Office 2019+ / M365 Build 13328+. output_path: Absolute path to the output file (must match the format extension). dpi: Dots-per-inch for raster formats (PNG). Clamped to 72-600. Ignored for SVG. confirm: Must be True to execute the export (writ…
export_slide_as_textExtract all text from shapes on one slide or the entire deck.
export_slides_to_stamped_dirExport selected slides as PNG images to a timestamped directory. Creates <base_dir>/exports/run-<UTC-timestamp>/png/slide-NNN.png for each selected slide. Returns the run directory path and list of exported file paths. Args: path: Path to the .pptx file. base_dir: Root directory for exports (must be in PPT_ALLOWLIST_ROOTS). slide_indices: 0-based indices of slides to export. None = all slides. width_px: PNG output width in pixels (0 = PowerPoint default). height_px: PNG output height in pixels (0 = PowerPoint default). confirm: Must be True to execute (write-operation…
extract_imagesList all embedded images across the deck with dimensions and content type. Returns ``{"images": [...]}``.
extract_presentation_textExport full deck text with per-slide structure for RAG indexing.
extract_tablesExtract all tables from one slide or the whole deck as row/cell arrays.
fill_formula_rangeFill start_address:end_address with formula, auto-relativizing references. Formula must start with '='. Returns filled_cells count. Requires EXCEL_ENABLE_WRITE=true and confirm=True.
find_replaceFind and replace string values across all cells in *sheet*. Set ``whole_cell=False`` for substring replacement. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
formatUnified format dispatcher — routes 8 format operations through a single tool. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``. operation vocabulary -------------------- "number_format" Apply a number-format code to a cell or range. Params: path, sheet, address, format_code, confirm. "style" Apply font/fill styling to one or more ranges. Params: path, sheet, address (or ranges), bold, italic, font_size, font_color, bg_color, confirm. "alignment" Apply horizontal/vertical/wrap_text alignment. …
freeze_panesFreeze rows/columns at a cell; pass address=None to unfreeze. Requires confirm=True and EXCEL_ENABLE_WRITE.
get_active_workbook_contextReturn name, path, and sheet list for the workbook active in Excel. Requires EXCEL_ENABLE_COM=true. Returns only workbooks within EXCEL_ALLOWLIST_ROOTS; workbooks outside the allowlist are treated as unavailable (status: outside_allowlist).
get_all_open_workbooksList all workbooks open in the running Excel instance. Requires EXCEL_ENABLE_COM=true. Filters to EXCEL_ALLOWLIST_ROOTS only; workbooks outside the allowlist are silently excluded (their paths and names are not exposed — not even as a count or redacted entry).
get_cell_metadataReturn formatting and metadata for a single cell. Includes font, fill, number format, comment, and hyperlink information. *address* must be in A1 notation (e.g. "B3").
get_presentation_contextReturn an Artifact Context Packet for a PowerPoint presentation.
get_presentation_metadataReturn title, author, slide count, created/modified for the presentation.
get_shapeReturn full detail for a specific shape by shape_id.
get_used_rangeReturn the bounding box of used cells in *sheet* of the workbook at *path*.
get_workbook_contextReturn an Artifact Context Packet (ACP) for an Excel workbook. Progressive disclosure via the ``level`` parameter: - **index** — identity + summary only (fast; single stat + openpyxl open) - **focused** — + sheet_names, sheet_count, table_names - **deep** — + metadata_policy, named_ranges (names only), lineage_summary, and optional annotations Security guarantees: - Path must be within EXCEL_ALLOWLIST_ROOTS (allowlist is enforced). - ACPDetail never contains cell values (S-001). - Annotations are validated with validate_acp_annotations() before storage. Returns a JSON-…
hydrate_templateOpen a workbook template, write cell values, and save as a new file. Writes data to named ranges or cell addresses in the template workbook and saves the result to output_path. The template is not modified (SaveAs creates a new file at output_path). cell_writes format (list of dicts with 'ref' and 'value' keys):: [ {"ref": "A1", "value": "scalar"}, {"ref": "A1:C2", "value": [[1, 2, 3], [4, 5, 6]]}, {"ref": "named_range", "value": "ProjectX"}, {"ref": "Sheet2!B3", "value": 42.0}, ] Args: template_path: Absolute path to source .xls…
hyperlinkManage hyperlinks in a worksheet. operation='get': returns all hyperlinks (read-only). operation='add': adds hyperlinks from the links list. Validates URL schemes — javascript:, data:, vbscript: are always blocked (OWASP A03). operation='remove': removes hyperlink from address. Requires confirm=True. Write operations require EXCEL_ENABLE_WRITE=true and confirm=True.
import_csv_to_sheetImport a CSV or TSV file into *sheet*. All rows including the header row are imported by default so column names are preserved. Set ``skip_header=True`` to discard the first row. Set ``overwrite=True`` to replace an existing sheet with the same name. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
insert_imageInsert an allowlisted image onto a slide. Requires PPT_ENABLE_WRITE=true and confirm=True.
list_layoutsReturn all slide layouts with indices, names, and placeholder info.
list_macrosList all VBA components in a workbook via the VBA project object model. Enumerates VBProject.VBComponents and returns component names and types. Only .xlsm files have a VBA project; passing an .xlsx path raises ValidationError immediately. Args: path: Absolute path to .xlsm workbook. Must be within EXCEL_ALLOWLIST_ROOTS. Returns: {"ok": True, "path": str, "components": [{"name": str, "type": int}], "count": int} Requires: EXCEL_ENABLE_COM=true. Does NOT require EXCEL_ENABLE_WRITE or EXCEL_ENABLE_MACROS.
list_shapesReturn all shapes on a slide with type, position, and size.
list_slidesReturn index, title, layout, and has_notes for every slide.
list_tablesList all Excel tables (ListObjects) in *sheet*, or across all sheets when *sheet* is omitted. Each entry contains sheet, name, display_name, ref, header_row, and totals_row. Omitting *sheet* enables workbook-wide table discovery.
manage_commentsList, add, or delete comments on a PowerPoint slide. operation values: list — list all comments on slide_index (or all slides if omitted). Read-only; confirm not required. add — add a comment. Requires PPT_ENABLE_WRITE=true, confirm=True, slide_index, and text. delete — delete comment by comment_id. Requires PPT_ENABLE_WRITE=true, confirm=True, slide_index, and comment_id. Returns: list -> {comments, total_found, truncated, max_comments} add -> {status, comment_id, author, slide_index} delete -> {status, comment_id, slide_index}
manage_hyperlinksList, add, or remove hyperlinks on a slide's shapes. operation: 'list' (read-only) | 'add' | 'remove' add/remove require PPT_ENABLE_WRITE=true and confirm=True.
mergeManage merged cell ranges in a worksheet. operation='list': returns {"sheet": str, "merged_ranges": [str, ...], "count": int}. operation='merge': merges the address range. Requires EXCEL_ENABLE_WRITE=true and confirm=True. operation='unmerge': unmerges the address range. Requires EXCEL_ENABLE_WRITE=true and confirm=True.
named_rangeList, read, or write Excel named ranges (defined names). operation='list': returns {"named_ranges": [{name, refers_to, scope}, ...], "count": N}. operation='read': reads the data values at the named range. name is required. operation='write': creates or updates a named range. name, sheet, address, confirm all required. 'write' requires EXCEL_ENABLE_WRITE=true and confirm=True.
pivot_tableCreate, read, or refresh Excel pivot tables via Excel COM. operation='create': Build a new pivot table from a local worksheet range. operation='read': Return structure and data of a named pivot table. operation='refresh': Refresh all pivot caches (xlDatabase sources only). Args: operation: 'create', 'read', or 'refresh'. path: Absolute path to .xlsx/.xlsm workbook. source_address: Sheet-qualified range e.g. 'Sheet1!A1:D100' (create only). dest_sheet: Existing sheet for pivot output (create only). dest_address: Upper-left cell for pivot e.g. 'F1' (cr…
pptmcp_add_columnAppend a new column to an existing table shape on a slide. Copies the last column's cell formatting into the new cells (text cleared). Requires PPT_ENABLE_WRITE=true AND confirm=True. Args: path: Path to the .pptx file. slide_index: Zero-based slide index. shape_id: shape_id of the table shape (use list_shapes to find it). width_inches: Width of the new column in inches (default 1.0). confirm: Must be True to proceed (safety gate). Returns: {status, slide_index, shape_id, column_count, width_inches}
pptmcp_edit_table_cellWrite text to a table cell identified by zero-based row and column index. Only the target cell is changed; all other cells remain unchanged. Requires PPT_ENABLE_WRITE=true AND confirm=True. Args: path: Path to the .pptx file. slide_index: Zero-based slide index. shape_id: shape_id of the table shape. row: Zero-based row index. col: Zero-based column index. text: Text to write into the cell. confirm: Must be True to proceed (safety gate). Returns: {status, slide_index, shape_id, row, col, text}
pptmcp_set_column_widthSet the width of a table column in inches. Requires PPT_ENABLE_WRITE=true AND confirm=True. Args: path: Path to the .pptx file. slide_index: Zero-based slide index. shape_id: shape_id of the table shape. col: Zero-based column index. width_inches: New column width in inches. confirm: Must be True to proceed (safety gate). Returns: {status, slide_index, shape_id, col, width_inches}
produce_evidence_bundleAggregate review results into a machine-verifiable evidence bundle.
produce_export_evidence_bundleProduce a structured evidence bundle aggregating PDF export + review findings. Call after review_workbook_render and export_as_pdf to close the render-check-iterate loop. Args: path: Absolute path to the workbook. export_results: List of export result dicts from export_as_pdf calls. Must be a list — raises ToolError if not. Each entry must contain at least 'sha256' and 'exported_at'. review_results: List of review result dicts from review_workbook_render. Must be a list — raises ToolError if not. exports_dir: Optiona…
protectProtect or unprotect a sheet or the entire workbook structure. scope='sheet': protects/unprotects the named sheet. password=None clears protection. scope='workbook': protects/unprotects workbook structure. password=None clears protection. Both require EXCEL_ENABLE_WRITE=true and confirm=True.
range_ioRead or write a rectangular range of cells. operation='read': returns {"data": [[{...},...], ...], "rows": int, "cols": int}. operation='write': writes values 2-D array starting from address cell. Requires EXCEL_ENABLE_WRITE=true and confirm=True for 'write'.
read_presentationReturn slide count and per-slide summary for the presentation at path.
read_sheet_allRead the entire used range of *sheet* from the workbook at *path*. Returns all cell data, row count, and column count. Subject to EXCEL_MAX_RANGE_CELLS guard.
read_slideReturn full shape list and notes for a single slide.
read_speaker_notesReturn speaker notes for one slide (slide_index) or all slides (None).
read_tableRead all rows from a named Excel table in *sheet*. Returns table metadata, headers, and all data rows.
recalculate_chartsActivate embedded charts for recalculation only; linked and external refresh is skipped for safety. Requires PPT_ENABLE_COM=true, PPT_ENABLE_WRITE=true, and confirm=True. Windows only.
recalculate_workbookForce recalculation of all formulas in a workbook using Excel COM. Opens the workbook in Excel, triggers recalculation, saves in-place, and closes. The source workbook is modified (formulas are evaluated and their cached values updated in the file). Args: path: Absolute path to the .xlsx or .xlsm workbook. Must be within EXCEL_ALLOWLIST_ROOTS. full_calc: If True, calls Application.CalculateFull() which rebuilds the entire dependency tree across all open workbooks. If False (default), calls wb.Calculate() which recalculates only d…
remove_empty_placeholdersRemove empty / default-text placeholder shapes from slide ``slide_index``. confirm=True required. Removes placeholders whose text is blank or matches well-known PowerPoint default prompts ('Click to add title', etc.). Non-placeholder shapes are never touched. Requires PPT_ENABLE_WRITE=true and confirm=True.
reorder_slidesReorder slides to new_order permutation. Requires PPT_ENABLE_WRITE=true and confirm=True.
replace_slide_textBulk find-and-replace across all slides. Handles <a:br> line-break elements. Requires PPT_ENABLE_WRITE=true and confirm=True.
review_slide_exportReview a slide export against quality criteria.
review_workbook_renderReview an Excel workbook's render quality before/after PDF export. Runs structural checks (PRINT_AREA_UNSET, SHEET_EMPTY, FORMULA_STALE, PRINT_AREA_EXCEEDS_PAGE) on the specified sheets and returns findings. Read-only — does NOT modify the workbook. Args: path: Absolute path to the .xlsx workbook. sheet_names: Sheet names to review. None → all non-chart sheets. recalculated: Set True if recalculate_workbook() was called before export. Suppresses FORMULA_STALE finding. Returns a dict with keys: path, sheets_reviewed, passed, findings, checks_run, findings_count…
rowsInsert or delete rows in a worksheet. operation='insert': inserts `count` blank rows before `start_row`. operation='delete': deletes rows from `start_row` to `end_row` (inclusive; end_row defaults to start_row). Both require EXCEL_ENABLE_WRITE=true and confirm=True.
run_macroExecute a VBA macro in an .xlsm workbook via Excel COM. Args: path: Absolute path to .xlsm workbook. Must be within EXCEL_ALLOWLIST_ROOTS. macro_name: VBA Sub or Function name. Valid formats: "MyMacro" or "Module1.MyMacro". Must match ^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)?$ . args: Optional list of positional arguments to pass to the macro. confirm: Must be True (write gate). Returns: {"ok": True, "path": str, "macro_name": str, "elapsed_ms": int} Requires: EXCEL_ENABLE_WRITE=true, EXCEL_ENABLE_COM=true, EXCEL_ENABLE_M…
run_slide_showOpen the presentation in slide-show mode in PowerPoint (requires PPT_ENABLE_COM=true, PPT_ENABLE_WRITE=true, Windows only).
saveFlush the in-memory workbook at *path* to disk. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``. Evicts the workbook from the cache after saving.
set_column_visibilityHide or show one or more columns. columns: list of column letters, e.g. ['A', 'C', 'D']. hidden: True to hide, False to show. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
set_column_widthsSet widths for multiple columns in a single call. Provide exactly one of columns (list of letters) or col_range (e.g. 'A:E'). Provide exactly one of width (0-255) or autofit=True. autofit approximates width from cell content; max_width caps the result. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
set_formatSet formatting in a shape. Requires PPT_ENABLE_WRITE=true + confirm=True. target: 'text' | 'paragraph' 'text' - bold, italic, font_size_pt, font_name, color_hex (6-char hex, e.g. 'FF0000') paragraph_range: optional [start, end] (inclusive) to limit paragraphs run_index: optional 0-based run index within each matched paragraph 'paragraph' - paragraph_index (default 0), alignment (CENTER/LEFT/RIGHT/JUSTIFY/DISTRIBUTE), line_spacing, space_before_pt, space_after_pt paragraph_range: optional [start, end] (inclusive) override…
set_print_areaSet or clear the print area for a worksheet. Pass address=None to clear the print area. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
set_row_heightsSet heights for multiple rows in a single call. Mode 1 (uniform): provide rows or row_range (e.g. '1:20') plus height. Mode 2 (per-row): provide row_specs list of {"row": int, "height": float}. Valid height: 0.0–409.0. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
set_speaker_notesWrite speaker notes for a slide. Requires PPT_ENABLE_WRITE=true and confirm=True. Accepts notes_text (primary, backward-compat) or notes (preferred alias). Changes are held in memory - call save(path, confirm=True) to persist.
set_table_styleStyle a table shape. Requires PPT_ENABLE_WRITE=true + confirm=True.
set_workbook_calc_modeSet workbook calculation mode and/or fullCalcOnLoad flag. calc_mode: one of 'auto', 'manual', 'autoNoTable'. None = no change. full_calc_on_load: if True, Excel recalculates all formulas on next open. Requires ``EXCEL_ENABLE_WRITE=true`` and ``confirm=True``.
shapeUnified shape mutation dispatcher. Requires PPT_ENABLE_WRITE=true + confirm=True. operation: 'add_text_box' | 'add_autoshape' | 'add_table' | 'delete' | 'set_properties' | 'set_table_style' | 'set_geometry' 'add_text_box' - params: left, top, width, height; optional: text 'add_autoshape' - params: shape_type (RECTANGLE/OVAL/ROUNDED_RECTANGLE/etc.), left, top, width, height; optional: text 'add_table' - params: rows (>0), cols (>0), left, top, width, height; optional: data (2-D list of strings) 'delete' - params: shap…
sheetManage workbook sheets: list, add, rename, or delete. operation='list': returns {"sheets": [str, ...], "count": int} — no confirm needed. operation='add': adds a new sheet named sheet_name at optional position. operation='rename': renames sheet_name to new_name. operation='delete': deletes sheet named sheet_name. Write operations require EXCEL_ENABLE_WRITE=true and confirm=True.
sheet_propertiesGet or set sheet display properties. operation='get': returns tab_color, state, show_gridlines, show_row_col_headers, zoom_scale. operation='set': updates one or more properties. Requires EXCEL_ENABLE_WRITE=true and confirm=True.
slideUnified slide mutation dispatcher. Requires PPT_ENABLE_WRITE=true + confirm=True. operation: 'add' | 'delete' | 'reorder' | 'copy' 'add' - params: layout_index (default 1), title (optional), layout_name (optional, takes precedence over layout_index), suppress_content_placeholder (default True) 'delete' - params: slide_index (required, 0-based) 'reorder' - params: new_order (required, list of all slide indices as a permutation) 'copy' - params: source_slide_index (or slide_index alias), source_path (defaults to path), target_path (optio…
snapshot_workbookCopy a workbook to a timestamped snapshot file. Creates a point-in-time copy of the workbook without opening it in Excel or openpyxl (shutil.copy2 preserves metadata). The snapshot filename defaults to <original_stem>_<YYYYMMDD_HHMMSS><original_suffix>. Args: path: Absolute path to source .xlsx/.xlsm workbook. Must be within EXCEL_ALLOWLIST_ROOTS. dest_dir: Directory to write the snapshot into. Must be within EXCEL_ALLOWLIST_ROOTS. If None, uses source file's parent directory. filename: Override the auto-generated snapshot filename. …
validate_contractValidate a JSON Output Contract file against the pptmcp v1.0 schema.
validate_formula_syntaxCheck whether a formula string is syntactically valid for Excel without writing it.
workbook_metadataRead or write workbook-level metadata stored on a hidden worksheet. operation='read': returns whether metadata is present plus stored payload details. operation='write': stores payload on hidden sheet _MCP_META. Requires EXCEL_ENABLE_WRITE=true and confirm=True.
wrapperwrite_range_with_formatWrite a 2-D array of values to a range and apply consistent formatting in one call. Args: path: Absolute path to the .xlsx workbook. sheet: Worksheet name. address: Top-left cell or full range address (e.g. "B2" or "B2:E10"). data: 2-D list (rows x columns) of values to write. style: Optional style dict. Allowed keys: bold, italic, underline, font_color, bg_color, font_size, font_name. number_format: Optional Excel number format string (e.g. "#,##0.00"). alignment: Optional alignment dict. Allowed keys: horizontal, vertical, wrap_text, shr…
Signals
- Stars
- 8
- Forks
- 3
- Open issues
- 0
- Weekly downloads
- 102
- Last commit
- Sep 23, 2026 (1 month ago)
- Last release
- Jun 15, 2026 (4 months ago)
- Last package publish
- Jun 15, 2026 (4 months ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.dosev-ai/mcp-office-powerpoint- Version
- 0.7.0
- Auth
- No auth
- Packages
- pypi mcp-office
- License
- MIT
- Repository
- github.com/dosev-ai/mcp-office
- First seen
- Oct 24, 2026
- Last checked
- Oct 25, 2026
More from dosev-ai
Cite this page
MCP Office PowerPoint. Agent Mart. https://agentmart.dev/connectors/dosev-ai-mcp-office-powerpoint (last updated 2026-10-25)