A Model Context Protocol server that enables AI models to create and manipulate PowerPoint presentations with advanced features like financial charts, formatting, and template management.
This repository contains Model Context Protocol (MCP) servers for interacting with Microsoft Office applications through AI assistance. Currently supported applications:
Both servers use pywin32
for COM automation, allowing direct interaction with running Office applications.
pywin32
packagegit clone https://github.com/jenstangen1/mcp-pptx.git cd mcp-pptx
uv
:uv pip install pywin32
pywin32
post-install script with administrator privileges:python C:\path\to\your\env\Scripts\pywin32_postinstall.py -install
To integrate these MCP servers with Claude, add the following configuration to your Claude Desktop app settings:
{ "mcpServers": { "powerpoint_mcp_win32": { "command": "uv", "args": [ "run", "mcp_powerpoint_server_win32.py" ], "cwd": "C:\\path\\to\\your\\workspace" }, "excel_mcp_win32": { "command": "uv", "args": [ "run", "mcp_excel_server_win32.py" ], "cwd": "C:\\path\\to\\your\\workspace" } } }
Note: Replace C:\\path\\to\\your\\workspace
with your actual workspace path.
The PowerPoint server provides a comprehensive API for AI models to interact with PowerPoint presentations, supporting advanced formatting, financial charts, and data integration.
Note: You may need to modify the directory path to match your installation location.
list_presentations
: List all PowerPoint files in the workspaceupload_presentation
: Upload a new presentation to the workspacesave_presentation
: Save the current presentationadd_slide
: Add a new slide to the presentationdelete_slide
: Delete a slide from the presentationget_slide_count
: Get the total number of slides in the presentationanalyze_slide
: Analyze the content of a slideset_background_color
: Set the background color of a slideadd_text
: Add text to a slideadd_shape
: Add a shape to a slideedit_element
: Edit an element's propertiesstyle_element
: Apply styling to an elementconnect_shapes
: Connect two shapes with a connectorfind_element
: Find elements on a slide based on criteriaget_company_financials
: Get financial data for a company (currently returns dummy data)create_financial_chart
: Create a financial chart on a slidecreate_comparison_table
: Create a comparison table for companiesNote: The financial tools currently use dummy data. Future versions plan to integrate with the Proff API for automatic fetching of Norwegian company data. Users can modify the code to connect with local or preferred financial data providers.
list_templates
: List all available templatesapply_template
: Apply a template to a presentationcreate_slide_from_template
: Create a new slide from a templatesave_as_template
: Save a slide as a templatedebug_element_mappings
: Debug tool to inspect element mappings for a slideOnce you've configured the MCP servers in your Claude Desktop app, you can interact with PowerPoint and Excel through natural language commands. Here are some examples:
You: Create a new slide with a title "Market Analysis" and add a bar chart showing revenue growth.
Claude: I'll help you create that slide with the title and chart. I'll:
1. Add a new slide
2. Add the title text
3. Create a revenue chart
[Claude will then use the MCP tools in sequence:
- add_slide
- add_text
- create_financial_chart]
You: Make the title bigger and change its color to blue.
Claude: I'll modify the title's formatting.
[Claude will use:
- find_element (to locate the title)
- edit_element (to update the formatting)]
You: Add a comparison table below the chart comparing three companies.
Claude: I'll add a comparison table below the existing chart.
[Claude will use:
- create_comparison_table]
You: Open the Q4 report and show me the revenue numbers from cells B2 to B5.
Claude: I'll help you retrieve those revenue figures.
[Claude will use:
- list_open_workbooks (to find the workbook)
- get_range_values (to read the specified cells)]
You: Calculate the sum of these numbers and put it in cell B6.
Claude: I'll calculate the sum and write it to B6.
[Claude will use:
- get_range_values (to get the numbers)
- set_cell_value (to write the sum)]
You: Create a new sheet called "Summary" and copy these values there.
Claude: I'll create a new sheet and copy the data.
[Claude will use:
- add_worksheet
- get_range_values (from source)
- set_range_values (to destination)]
Natural Language Understanding
Tool Selection
Context Management
Error Handling
Be Specific
Complex Operations
Troubleshooting
You: Create a new presentation about Q4 financial results.
Claude: I'll create a new presentation with a title slide.
You: Add revenue charts for the last 4 quarters.
Claude: I'll create a new slide with a chart showing quarterly revenue.
You: Now add a comparison with our competitors.
Claude: I'll add a comparison table with key metrics for you and competitors.
You: Show me all sheets in the Q4 analysis workbook.
Claude: I'll list all worksheets in that workbook.
You: Find the highest revenue value in column B.
Claude: I'll scan column B and find the maximum value.
You: Create a summary of the top 5 values.
Claude: I'll create a new sheet with the top 5 revenue figures.
pptx-mcp/
├── mcp_powerpoint_server.py # Main server implementation
├── requirements.txt # Python dependencies
├── presentations/ # Workspace for presentations
│ └── templates/ # Template storage
└── README.md # This file
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
The Excel server provides tools for interacting with Excel workbooks, worksheets, and cell data through AI assistance.
list_open_workbooks
: List all currently open Excel workbookssave_workbook
: Save a workbook to disk with optional format selectionlist_worksheets
: List all worksheets in a workbookadd_worksheet
: Add a new worksheet to a workbookget_worksheet
: Get a worksheet by name or indexget_cell_value
: Read a single cell's valueset_cell_value
: Set a single cell's valueget_range_values
: Read values from a range of cellsset_range_values
: Set values for a range of cellsmakepy
to generate Office constantsDiscover shared experiences
Shared threads will appear here, showcasing real-world applications and insights from the community. Check back soon for updates!