Skip to main content
Glama
dmytro-ustynov

PPTX Generator MCP Server

PPTX Generator MCP Server

Model Context Protocol (MCP) server for generating professional PowerPoint presentations from Markdown.

Transform your lesson plans and documentation into beautiful PPTX presentations with support for:

  • Inline code with monospace formatting

  • Code blocks with syntax highlighting background

  • Tables with styled headers

  • Bold text and mixed formatting

  • Bullet lists with proper indentation

  • Mixed content slides (bullets + code + tables)

  • Custom branding (logos, colors, instructor info)


📋 Table of Contents


Related MCP server: Majin Slide MCP

🔧 Requirements

  • Node.js 18.0 or higher (Download)

  • Claude Desktop (Download)

  • macOS, Linux, or Windows

Check your Node.js version:

node -v

📦 Installation

1. Clone the repository:

cd ~/Documents  # or any directory you prefer
git clone https://github.com/dmytro-ustynov/pptx-generator-mcp.git
cd pptx-generator-mcp

2. Run the installation script:

./install.sh

The script will:

  • Install all dependencies

  • Install the command globally

  • Show you the Claude Desktop configuration

3. Configure Claude Desktop:

The installer will show you what to add. Copy the configuration to:

  • macOS/Linux: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "pptx-generator": {
      "command": "pptx-generator-mcp"
    }
  }
}

4. Restart Claude Desktop

✅ Done! The pptx-generator tools are now available in Claude.


Method 2: Manual Install

1. Clone and install dependencies:

# Change dmytro-ustynov to your username if you want to use your fork
git clone https://github.com/dmytro-ustynov/pptx-generator-mcp.git 
cd pptx-generator-mcp
npm install

2. Install globally:

npm install -g .

Or with sudo if needed:

sudo npm install -g .

3. Verify installation:

which pptx-generator-mcp
# Should show: /usr/local/bin/pptx-generator-mcp (or similar)

4. Configure Claude Desktop (same as Method 1, step 3)


⚙️ Configuration

Claude Desktop Setup

After installation, configure Claude Desktop to use the MCP server.

macOS/Linux:

# Open the config file
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
# or
nano ~/Library/Application\ Support/Claude/claude_desktop_config.json

Windows:

notepad %APPDATA%\Claude\claude_desktop_config.json

Add this configuration:

{
  "mcpServers": {
    "pptx-generator": {
      "command": "pptx-generator-mcp"
    }
  }
}

If you have other MCP servers:

{
  "mcpServers": {
    "pptx-generator": {
      "command": "pptx-generator-mcp"
    },
    "other-server": {
      "command": "other-server-command"
    }
  }
}

Restart Claude Desktop for changes to take effect.


Customization

Customize colors, fonts, and branding by editing config.json in the installation directory.

Find your installation:

npm list -g pptx-generator-mcp
# Shows: /usr/local/lib/node_modules/pptx-generator-mcp

Edit config:

cd $(npm root -g)/pptx-generator-mcp
nano config.json

Configuration options:

Instructor Information

{
  "instructor": {
    "rank": "майор",
    "name": "Дмитро УСТИНОВ",
    "position": "викладач"
  }
}

Institution Details

{
  "institution": {
    "name": [
      "Військовий інститут",
      "телекомунікацій та інформатизації",
      "імені Героїв Крут"
    ],
    "department": "кафедри Комп'ютерних наук та інтелектуальних технологій"
  }
}

Colors

Colors are adjusted according to the official Armed Forces of Ukraine brandbook, and the logo is Armed Forces of Ukraine emblem.

{
  "colors": {
    "step": "#6A653A",        // Dividers and table headers
    "titleText": "#003366",   // Slide titles
    "bodyText": "#333333"     // Regular text
  }
}

Fonts

{
  "fonts": {
    "title": "Raleway",
    "body": "Open Sans",
    "code": "JetBrains Mono"  // For inline code and code blocks
  }
}

Font Sizes

{
  "sizes": {
    "slideTitle": 28,
    "body": 18,
    "code": 14
  }
}

After editing config.json:

  • No need to restart Claude Desktop

  • Changes apply to next generated presentation


🎯 Usage

In Claude Desktop

Once installed and configured, you can use these tools in Claude:

1. Generate a presentation:

Create a presentation about Docker basics with 5 slides

Claude will use the pptx-generator:generate_presentation tool automatically.

2. Get a template:

Show me the markdown template for presentations

Uses pptx-generator:get_template tool.

3. View configuration:

What are the current presentation settings?

Uses pptx-generator:get_config tool.

4. Update instructor:

Change the instructor to "капітан Іван ПЕТРЕНКО"

Uses pptx-generator:update_instructor tool.


Markdown Format

Presentations are created from Markdown with special syntax:

Frontmatter (Required)

---
discipline: Веб-розробка
type: practical
module: "3: Docker та контейнеризація"
lesson: "3.1: Основи Docker"
---

Types:

  • practical - Практичне заняття

  • lecture - Лекційне заняття

  • group - Групове заняття

Slide Types

Plan Slide:

## [plan] План заняття

- Topic 1
- Topic 2
- Topic 3

Divider Slide:

## [divider] 🔹 ЧАСТИНА 1. Introduction

Content Slide:

## [content] Slide Title

Regular text with **bold** and `inline code`.

Bullet points:
- First point with **bold**
- Second point with `code`
- Third point with **bold** and `code` mixed

Code block:
```bash
docker ps
docker images

Table:

Column 1

Column 2

value1

Description 1

value2

Description 2


#### Formatting

- **Bold text:** `**text**`
- **Inline code:** `` `code` ``
- **Code blocks:** Triple backticks with optional language
- **Tables:** Standard Markdown table syntax
- **Bullets:** `-` or `*` with optional indentation

---

## 📚 Examples

### Simple Presentation

```markdown
---
discipline: Programming Basics
type: lecture
module: "1: Introduction"
lesson: "1.1: Hello World"
---

## [plan] План заняття

- What is programming
- First program
- Variables and types

## [divider] 🔹 Getting Started

## [content] What is Programming?

**Programming** is giving instructions to computers.

Key concepts:
- Variables store data
- Functions perform actions
- Loops repeat tasks

Example:
```python
print("Hello, World!")

### Advanced Features

```markdown
## [content] Docker Commands

Common commands:

| Command | Description |
|---------|-------------|
| `docker ps` | List running containers |
| `docker images` | List images |
| `docker run` | Run a container |

Example usage:
```bash
docker run -d -p 80:80 nginx

The -d flag runs in detached mode.


---

## 🐛 Troubleshooting

### Command not found: pptx-generator-mcp

**Solution 1:** Check if installed globally
```bash
npm list -g pptx-generator-mcp

Solution 2: Add npm global bin to PATH

# Find npm global bin path
npm config get prefix

# Add to PATH (add to ~/.bashrc or ~/.zshrc)
export PATH=$(npm config get prefix)/bin:$PATH

Solution 3: Reinstall

cd /path/to/pptx-generator-mcp
npm install -g .

Tools not showing in Claude

  1. Check Claude Desktop config:

    cat ~/Library/Application\ Support/Claude/claude_desktop_config.json
  2. Verify JSON syntax (use JSONLint)

  3. Restart Claude Desktop completely:

    • Quit Claude Desktop (Cmd+Q on macOS)

    • Reopen Claude Desktop

  4. Check MCP server logs (if available in Claude Desktop)


Permission denied when installing

Solution: Use sudo

sudo npm install -g .

Or install without sudo by configuring npm:

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

Fonts not displaying correctly

Issue: Custom fonts like JetBrains Mono not showing

Solution: Install the font on your system:

  1. Download JetBrains Mono

  2. Install the font

  3. Restart PowerPoint/Keynote


🔄 Updating

To update to the latest version:

# Navigate to repository
cd /path/to/pptx-generator-mcp

# Pull latest changes
git pull

# Reinstall
npm install
npm install -g .

No need to restart Claude Desktop - changes take effect immediately for new presentations.


🗑️ Uninstalling

# Uninstall global command
npm uninstall -g pptx-generator-mcp

# Remove repository
rm -rf /path/to/pptx-generator-mcp

# Remove from Claude Desktop config
# Edit: ~/Library/Application Support/Claude/claude_desktop_config.json
# Remove the "pptx-generator" section

📖 Additional Resources


📝 License

MIT License - See LICENSE file for details


🤝 Contributing

Contributions are welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Submit a pull request


💬 Support

For issues or questions:


Made with ❤️ for VITI education

Available Tools

5 tools
generate_presentationB

Generate a PPTX presentation from markdown content. Returns path to the generated file.

ParametersJSON Schema
NameRequiredDescriptionDefault
markdownYesFull markdown content including frontmatter (---) with discipline, type, module, lesson fields and slide sections marked with ## [type] Title
filenameYesOutput filename without extension (e.g., "python-lesson-5")

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool generates a file and returns a path, but lacks details on permissions, error handling, file storage location, or whether the operation is idempotent. For a tool that creates files with no annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded: two sentences that directly state the purpose and return value with zero waste. Every sentence earns its place by providing essential information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 2 parameters with full schema coverage but no annotations or output schema, the description is minimally complete. It covers the basic operation and return, but for a file-generation tool, it should ideally mention more about behavioral aspects like overwriting or errors. It's adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 both parameters thoroughly. The description adds no additional meaning beyond what's in the schema (e.g., it doesn't explain markdown formatting or filename conventions further). Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Generate a PPTX presentation from markdown content.' It specifies both the verb ('Generate') and resource ('PPTX presentation'), and distinguishes it from sibling tools like 'list_presentations' or 'get_template.' However, it doesn't explicitly differentiate from all siblings (e.g., 'update_instructor'), so it's not a perfect 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. It doesn't mention prerequisites, when not to use it, or compare it to sibling tools like 'get_template' or 'list_presentations.' The only implied usage is from the purpose statement, but no explicit guidelines are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_configB

Get current presentation configuration (colors, fonts, instructor info)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states this is a read operation ('Get'), which implies non-destructive behavior, but doesn't disclose any behavioral traits such as permissions needed, rate limits, response format, or whether it returns cached/live data. The description adds minimal context beyond the basic operation, leaving significant gaps for a tool with no 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('Get current presentation configuration') and adds clarifying details in parentheses. Every word earns its place, with zero waste or redundancy. It's appropriately sized for a simple, parameter-less tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no annotations, no output schema), the description is adequate as a minimum viable explanation. It covers what the tool does but lacks details on behavioral context, usage guidelines, and output format. For a read-only config tool, this is passable but leaves room for improvement in guiding the agent effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100% (since there are no parameters to describe). With no parameters, the baseline is 4, as there's nothing for the description to compensate for. The description doesn't need to add param semantics, and it appropriately focuses on the tool's purpose instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('current presentation configuration'), with specific details about what configuration includes ('colors, fonts, instructor info'). It distinguishes from siblings like 'get_template' (templates vs. current config) and 'update_instructor' (read vs. write), though not explicitly named. Purpose is specific but sibling differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. The description implies it retrieves current configuration, but it doesn't specify contexts like after setup, before generation, or compared to 'get_template' for templates or 'list_presentations' for presentation lists. Usage is inferred from the purpose alone, with no explicit when/when-not statements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_templateB

Get an example markdown template showing the correct format for creating presentations

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states it 'gets' a template, implying a read-only operation, but doesn't disclose behavioral traits such as whether it requires authentication, has rate limits, returns a static or dynamic template, or if it's idempotent. For a tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the purpose ('Get an example markdown template') and adds clarifying context ('showing the correct format for creating presentations'). Every word earns its place with zero waste, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is adequate but has gaps. It explains what the tool does but lacks behavioral context (e.g., response format, error handling). Without annotations or output schema, the description should ideally provide more completeness, such as hinting at the return value, but it minimally covers the purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, and it appropriately doesn't mention any. Baseline for 0 parameters is 4, as it avoids unnecessary information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'example markdown template', specifying it shows 'correct format for creating presentations'. It distinguishes from siblings like 'generate_presentation' (creates presentations) and 'list_presentations' (lists existing ones), though not explicitly. However, it could be more specific about what distinguishes it from 'get_config'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing a template for presentation creation, suggesting it's for formatting guidance. However, it doesn't explicitly state when to use this tool versus alternatives like 'generate_presentation' (for actual creation) or 'get_config' (for configuration). The context is clear but lacks explicit exclusions or named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_presentationsB

List all generated presentations in the output folder

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states what the tool does without disclosing behavioral traits like whether it's read-only, how it handles errors, or what format the list returns. It lacks context on permissions, rate limits, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It's front-loaded and appropriately sized for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate but lacks details on return values or behavior. It covers the basic purpose but doesn't provide enough context for full agent understanding without additional assumptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the schema already fully documents the inputs. The description adds no parameter information, but with no parameters, a baseline of 4 is appropriate as there's nothing to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and resource ('all generated presentations in the output folder'), providing specific scope. However, it doesn't explicitly differentiate from sibling tools like 'get_config' or 'get_template', which might also retrieve information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing presentations but offers no guidance on when to use this tool versus alternatives like 'generate_presentation' or other siblings. There are no explicit when/when-not instructions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_instructorC

Update instructor information in the configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
rankNoMilitary rank (e.g., "майор")
nameNoFull name (e.g., "Дмитро УСТИНОВ")

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Update' implies a mutation, but lacks details on permissions, idempotency, error handling, or response format. This leaves significant gaps in understanding how the tool behaves beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a mutation tool with no annotations and no output schema, the description is insufficient. It lacks details on behavioral traits, error conditions, or what constitutes a successful update, leaving the agent with incomplete context for safe and effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 both parameters ('rank' and 'name') with examples. The description adds no additional parameter semantics beyond what the schema provides, resulting in a baseline score of 3 for adequate but not enhanced coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and resource ('instructor information in the configuration'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'get_config' or 'generate_presentation' beyond the basic verb+resource distinction, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. There are no mentions of prerequisites, context for updates, or comparisons to sibling tools like 'get_config' for retrieval, leaving the agent with minimal usage direction.

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.

  1. 5 tool updatesv1.0.0
    • First observedgenerate_presentation
    • First observedget_config
    • First observedget_template
    • First observedlist_presentations
    • First observedupdate_instructor

TDQS

A3.6/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: generate_presentation creates new presentations, get_config retrieves configuration, get_template provides formatting examples, list_presentations enumerates existing files, and update_instructor modifies specific configuration data. The boundaries between these operations are unambiguous.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with snake_case naming (generate_presentation, get_config, get_template, list_presentations, update_instructor). The verbs appropriately describe each action (generate, get, list, update) without deviation or mixing of conventions.

Tool Count5/5

Five tools is well-scoped for a presentation generation server, covering the core workflow: template guidance, configuration management, generation, and output listing. Each tool earns its place without redundancy or excessive specialization for this domain.

Completeness4/5

The toolset covers the essential presentation generation workflow from template to output, but lacks update/delete operations for generated presentations or broader configuration management beyond instructor info. Agents can work around these minor gaps, but the surface isn't fully comprehensive.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers