Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LOG_LEVELNoDEBUG, INFO, WARNING, ERROR or CRITICALINFO
DIAL_API_KEYNoServer's own DIAL API key used as fallback or shared-bucket identity
PPT_MCP_HOSTNoBind address; set 0.0.0.0 in containers127.0.0.1
PPT_MCP_PORTNoListen port for http/sse8000
SOFFICE_PATHNoLibreOffice binary used to render slidessoffice
DIAL_CORE_URLNoBase URL of DIAL Core, e.g. https://dial.example.com. Required for DIAL export/upload tools
DIAL_AUTH_MODENoauto: use incoming caller credentials first, fall back to DIAL_API_KEY; caller: incoming only; server: always DIAL_API_KEYauto
DIAL_PUBLIC_URLNoExtra host(s) DIAL file links may carry besides DIAL_CORE_URL (comma-separated URLs or hostnames)
SVG_ICON_MAX_KBNoLargest SVG source render_svg_icon will rasterize64
VISION_LLM_MODELNoVision model name (direct endpoint or DIAL deployment name); must accept image input. Required for visual QA
DIAL_IMAGE_MAX_MBNoLargest image add_image_from_dial_url will download and embed20
PPT_MCP_MAX_ICONSNoRendered icons held in memory for add_icon_to_slide, LRU-evicted100
PPT_MCP_TRANSPORTNoTransport mode: http, sse, or stdiostdio
PPT_TEMPLATE_PATHNoExtra local directories searched by local-path template tools (colon-separated)
VISUAL_QA_ENFORCENofalse unregisters the visual QA tools entirelytrue
DIAL_UPLOAD_FOLDERNoFolder inside the bucket for exported deckspptx-mcp
VISION_LLM_API_KEYNoKey for the direct vision endpoint (sent as api-key and Authorization: Bearer)
VISUAL_QA_ON_ERRORNoExport gate only: allow exports when inspection itself cannot runblock
VISION_LLM_ENDPOINTNoOpenAI Responses-API endpoint for direct vision provider. When unset, model is called through DIAL Core
VISION_LLM_PROVIDERNoForce vision backend: direct or dial (default: direct when VISION_LLM_ENDPOINT is set, else dial)auto
PPT_MCP_ALLOWED_HOSTSNoComma-separated Host-header allowlist for http/sse. Only listed hosts plus localhost are accepted; set * to disable Host checkingdial-pptx-mcp.dial.svc.cluster.local
VISION_LLM_MAX_SLIDESNoCap on slides sent per whole-deck inspection (explicit slides list is never capped)15
VISUAL_QA_EXPORT_GATENotrue also runs a whole-deck inspect-repair loop inside export/save and refuses unverified decksfalse
VISION_LLM_API_VERSIONNoapi-version query parameter added to the vision call when the endpoint URL doesn't already carry one2025-04-01-preview
VISUAL_QA_ON_UNRESOLVEDNoExport gate only: report fails the export with the issue list, export_as_is ships the deckreport
VISUAL_QA_MAX_ITERATIONSNoInspect/repair rounds per visual_repair_slides call10
PPT_MCP_STATE_TTL_SECONDSNoIdle time before an in-memory presentation expires3600
PPT_MCP_STATE_MAX_PRESENTATIONSNoMax concurrently held presentations (LRU eviction)50

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
create_presentationA

Create a new PowerPoint presentation. Returns a presentation_id that must be passed to all subsequent tool calls for this deck.

create_presentation_from_templateA

Create a new PowerPoint presentation from a template file. Returns a presentation_id that must be passed to all subsequent tool calls.

open_presentationA

Open an existing PowerPoint presentation from a file. Returns a presentation_id that must be passed to all subsequent tool calls.

save_presentationC

Save a presentation to a file.

get_presentation_infoC

Get information about a presentation.

get_template_file_infoB

Get information about a template file including layouts and properties.

create_presentation_from_template_contentA

Create a new presentation from an uploaded .pptx template file.

A PowerPoint 97-2003 (.ppt) file is accepted too and converted to .pptx on the way in, where the server has LibreOffice.

template_content: the .pptx/.potx/.ppt template file content, as a data: URI or a base64-encoded string (in DIAL Quick Apps, pass the template file as file:data::files/{bucket}/{path} and it is resolved automatically).

The template's theme, layouts, masters and branding are preserved. Returns a presentation_id that must be passed to all subsequent tool calls for this deck.

get_dial_storage_infoA

Report which DIAL file storage this server can actually read and write on this request: the identity in use, the bucket it owns, and its appdata path.

Use it when a file URL is refused: DIAL storage is per-user, so a file whose URL names a different bucket than the one reported here cannot be downloaded, however valid the URL looks.

export_presentationA

Export the presentation to DIAL file storage and return its file URL.

Use this (not save_presentation) to deliver the finished deck to the user.

format: "pptx" (default) for the editable deck; "pdf" for a read-only copy; "both" to deliver the pair, which is what a user who asked to "share" or "send" a deck usually wants. PDF is produced by rendering the deck through LibreOffice, so it needs the renderer and reflects that renderer's fonts — see get_design_guidance("type"). Export does NOT run visual QA for you: inspect the deck with visual_inspect_slides / visual_repair_slides while you build it, or at least once before exporting. The response carries "visual_qa": "passed" | "unverified" | "unavailable" so you can tell whether the deck was ever checked. ALWAYS include the returned file_url in your final answer as an attachment so the user can download the presentation.

set_core_propertiesC

Set core document properties.

add_slideC

Add a new slide to the presentation with optional background styling.

get_slide_infoC

Get information about a specific slide.

extract_slide_textA

Extract all text content from a specific slide, speaker notes included.

extract_presentation_textA

Extract all text content from all slides in the presentation.

Use this as the content-QA read on a finished deck: check for missing or duplicated sections, typos, wrong order, and — on a deck built from a template — placeholder text the template shipped with that was never replaced ("Lorem ipsum", "Click to add title", "XXX", "[insert ...]"). Speaker notes come back in each slide's "speaker_notes" but are kept out of "all_text_combined", which holds only what the audience sees.

populate_placeholderC

Populate a placeholder with text.

add_bullet_pointsC

Add bullet points to a placeholder.

manage_textC

Unified text management tool for adding, formatting, validating text, and formatting multiple text runs.

manage_imageC

Unified image management tool for adding and enhancing images.

add_tableC

Add a table to a slide with enhanced formatting options.

format_table_cellC

Format a specific table cell.

add_shapeC

Add an auto shape to a slide with enhanced options.

add_chartA

Add a chart to a slide with comprehensive formatting options.

x_axis_title labels the CATEGORY axis and y_axis_title labels the VALUE axis, whatever the chart's orientation — the names are not screen directions. On column, line and area charts the category axis is the horizontal one, so x/y read as expected. On a BAR chart the bars run sideways: the category axis is VERTICAL and the value axis HORIZONTAL, so x_axis_title appears on the vertical axis. Naming a bar chart's axes by where they look on screen is the usual way these two end up swapped.

A 'scatter' chart is the exception to both: it has no category axis, so pass its x values (as numbers) in categories and the matching y values in series_values. Use 'line_markers' when the horizontal axis is really a list of labels.

apply_professional_designC

Unified professional design tool for themes, slides, and visual enhancements. This applies professional styling and themes rather than structural layout changes.

apply_picture_effectsC

Apply multiple picture effects in combination.

manage_fontsC

Unified font management tool for analysis, optimization, and recommendations.

list_slide_templatesA

List all available slide layout templates.

apply_slide_templateA

Apply a structured layout template to an existing slide. This modifies slide layout and content structure using predefined templates.

Args: slide_index: Index of the slide to apply template to template_id: ID of the template to apply (e.g., 'title_slide', 'text_with_image') color_scheme: Color scheme to use ('modern_blue', 'corporate_gray', 'elegant_green', 'warm_red') content_mapping: Dictionary mapping element roles to custom content image_paths: Dictionary mapping image element roles to file paths presentation_id: Presentation ID (uses current if None)

create_slide_from_templateB

Create a new slide using a layout template.

Args: template_id: ID of the template to use (e.g., 'title_slide', 'text_with_image') color_scheme: Color scheme to use ('modern_blue', 'corporate_gray', 'elegant_green', 'warm_red') content_mapping: Dictionary mapping element roles to custom content image_paths: Dictionary mapping image element roles to file paths layout_index: PowerPoint layout index to use as base (default: 1) presentation_id: Presentation ID (uses current if None)

create_presentation_from_templatesA

Create a complete presentation from a sequence of templates.

Args: template_sequence: List of template configurations, each containing: - template_id: Template to use - content: Content mapping for the template - images: Image path mapping for the template color_scheme: Color scheme to apply to all slides presentation_title: Optional title for the presentation presentation_id: Presentation ID (uses current if None)

Example template_sequence: [ { "template_id": "title_slide", "content": { "title": "My Presentation", "subtitle": "Annual Report 2024", "author": "John Doe" } }, { "template_id": "text_with_image", "content": { "title": "Key Results", "content": "• Achievement 1\n• Achievement 2" }, "images": { "supporting": "/path/to/image.jpg" } } ]

get_template_infoB

Get detailed information about a specific template.

Args: template_id: ID of the template to get information about

auto_generate_presentationB

Automatically generate a presentation based on topic and preferences.

Args: topic: Main topic/theme for the presentation slide_count: Number of slides to generate (3-20) presentation_type: Type of presentation ('business', 'academic', 'creative') color_scheme: Color scheme to use include_charts: Whether to include chart slides include_images: Whether to include image placeholders presentation_id: Presentation ID (uses current if None)

optimize_slide_textA

Optimize text elements on a slide for better readability and fit.

Args: slide_index: Index of the slide to optimize auto_resize: Whether to automatically resize fonts to fit containers auto_wrap: Whether to apply intelligent text wrapping optimize_spacing: Whether to optimize line spacing min_font_size: Minimum allowed font size max_font_size: Maximum allowed font size presentation_id: Presentation ID (uses current if None)

manage_hyperlinksA

Manage hyperlinks in text shapes and runs.

Args: operation: Operation type ("add", "remove", "list", "update") slide_index: Index of the slide (0-based) shape_index: Index of the shape on the slide (0-based) text: Text to make into hyperlink (for "add" operation) url: URL for the hyperlink run_index: Index of text run within the shape (0-based) presentation_id: Optional presentation ID (uses current if not provided)

Returns: Dictionary with operation results

update_chart_dataA

Replace existing chart data with new categories and series.

Args: slide_index: Index of the slide (0-based) shape_index: Index of the chart shape (0-based) categories: List of category names series_data: List of dictionaries with 'name' and 'values' keys presentation_id: Optional presentation ID (uses current if not provided)

Returns: Dictionary with operation results

add_combo_chartA

Add a chart whose series are not all the same type, and may use a second value axis.

This is what add_chart cannot do. Reach for it when:

  • a measure needs a reference line across it — actuals as columns with a target as a line;

  • two measures share categories but not units — revenue in millions against a margin percentage. On one axis the percentage flattens to nothing along the bottom; on a secondary axis both are readable.

series: one entry per series, plotted in the order given: {"name": "Revenue", "values": [10, 12, 15], "type": "column", "secondary_axis": false, "color": [31, 73, 125], "data_labels": true, "label_position": "outside_end", "trendline": "linear"} "type" is required — column, stacked_column, bar, stacked_bar, line, line_markers, area, stacked_area. Pie and scatter cannot share a plot area with other types; use add_chart for those. "color" is [r, g, b]; omit to take the template's own chart palette, which is usually the right choice. "label_position" on a stacked series must be "center", "inside_end" or "inside_base" — a stacked segment has no outside. "trendline" is linear, movingAvg, exp, log, poly or power.

secondary_axis_title labels the right-hand axis; y_axis_title labels the left one. x_axis_title labels the category axis (see add_chart on why that is not the same as "the horizontal one").

The result is a real, editable PowerPoint chart, not a picture.

format_chart_seriesA

Restyle one series of an existing chart.

Use it to pin a series to a brand colour, to label just the series that carries the point rather than all of them, or to add a trendline.

series_index is 0-based across the whole chart, in the order the series were added. label_position: center, inside_end, inside_base, outside_end (bars and columns), or above / below / left / right (line charts). A stacked series rejects outside_end. number_format: an Excel format string, e.g. "0.0%" or "#,##0". trendline: linear, movingAvg, exp, log, poly or power; trendline_period is the window for movingAvg or the order for poly.

add_connectorA

Add connector lines/arrows between points on a slide.

Args: slide_index: Index of the slide (0-based) connector_type: Type of connector ("straight", "elbow", "curved") start_x: Starting X coordinate in inches start_y: Starting Y coordinate in inches end_x: Ending X coordinate in inches
end_y: Ending Y coordinate in inches line_width: Width of the connector line in points color: RGB color as [r, g, b] list presentation_id: Optional presentation ID (uses current if not provided)

Returns: Dictionary with operation results

manage_slide_mastersB

Access and manage slide master properties and layouts.

Args: operation: Operation type ("list", "get_layouts", "get_info") master_index: Index of the slide master (0-based) layout_index: Index of specific layout within master (0-based) presentation_id: Optional presentation ID (uses current if not provided)

Returns: Dictionary with slide master information

manage_slide_transitionsC

Manage slide transitions and timing.

Args: slide_index: Index of the slide (0-based) operation: Operation type ("set", "remove", "get") transition_type: Type of transition (basic support) duration: Duration of transition in seconds presentation_id: Optional presentation ID (uses current if not provided)

Returns: Dictionary with transition information

add_image_from_dial_urlA

Place an image that already lives in DIAL file storage onto a slide.

Use this for generated imagery: call your image model, save the result to DIAL files, then pass the file URL here. The server downloads the bytes itself, so nothing large passes through your context — prefer this over manage_image(source_type="base64") for anything bigger than a small icon.

image_url: a DIAL file reference — the "files/{bucket}/{path}" URL an upload returns, or the full https URL of that file on this DIAL installation (the ".../api/files/{bucket}/{path}" link an image deployment hands back works as-is). Arbitrary web URLs are NOT downloaded: to use a picture from the web, fetch it yourself and store it in DIAL file storage first.

slide_index: 0-based, like the other content tools (visual QA slide numbers are 1-based; slide_index 0 is slide 1). left, top, width, height: inches. Give width and height to define the box the picture should occupy — for a half-and-half slide on a 13.33in deck, text on the left and left=6.9, top=1.2, width=5.6, height=4.5 for the image. Omit both to keep the image's natural size (clamped to the slide). fit: how the picture relates to that box. "contain" (default) largest undistorted size that fits, centred in the box — safe for photos and illustrations; "cover" fills the box exactly, cropping the overflowing edges; "stretch" forces the exact box and will distort the image.

Returns the shape index and the geometry actually applied ("placed": left/top/width/height in inches), which may be smaller than the box you asked for under "contain".

delete_slideA

Remove a slide from the presentation.

Use this to drop template slides whose content you don't need — a template's unused sections, or the fourth column of a three-item layout. Deleting is preferable to blanking a slide out: an emptied slide still shows the template's decoration and reads as a mistake.

slide_index: 0-based. Every later slide shifts down by one, so when removing several, delete from the highest index downwards or re-read get_presentation_info between calls.

move_slideA

Move a slide to a different position in the deck.

slide_index and new_index are both 0-based, and new_index is the position the slide ends up at once it has been lifted out — moving slide 0 to index 3 in a five-slide deck leaves it fourth.

duplicate_slideA

Copy an existing slide, keeping all of its content and formatting.

This is the way to reuse a corporate template's designed slides: duplicate the slide whose layout suits your next section, then edit the copy's text with manage_text / populate_placeholder. add_slide builds a bare slide from a layout and gets you none of the template's artwork, so prefer duplicating when the template already contains a slide that looks right.

slide_index: 0-based index of the slide to copy. insert_after: 0-based index the copy is placed after; omit to append the copy (or copies) to the end of the deck. count: how many copies to make, for a section that repeats — the copies land consecutively.

Pictures are shared with the original (same bytes, no size cost); charts, SmartArt and embedded objects are cloned, so editing the copy's chart does not change the original's. Speaker notes are copied. Returns "new_slide_indexes" — read them before editing, since inserting in the middle shifts every later slide.

copy_slide_between_presentationsA

Copy one slide from one open presentation into another.

Use this to merge decks, or to lift a single slide out of a reference deck into the one you are building. Both presentations must be open on this server (you hold both handles).

The slide keeps its own shapes, text and direct formatting, and its images and charts are copied into the target deck. Anything it inherited from its old theme — placeholder fonts, scheme colours — is re-resolved against the TARGET deck's master, so the copy can look different from the original. Inspect the result with visual_inspect_slides.

layout_index: force a particular layout in the target deck. By default the layout is matched by name, then by placeholder structure; the response reports whether a real match was found in "layout_matched".

manage_speaker_notesA

Read, write or clear a slide's speaker notes.

Notes belong in the notes pane, never in a text box on the slide itself — a "notes" textbox is visible to the audience during the presentation.

operation: "get" return the notes for slide_index, or for every slide when slide_index is omitted; "set" replace the notes on slide_index with text; "clear" remove the notes from slide_index.

validate_presentationA

Check the deck for structural faults, without rendering it.

Run this before export. It is fast — no rendering, no model call — and it catches the class of defect visual inspection cannot: relationships that do not resolve, charts with no data, shapes off the canvas, pictures stretched out of proportion, leftover template placeholder text, notes shared between two slides.

It does NOT judge appearance. Overflowing text, overlaps and spacing are visual_inspect_slides' job; the two are complementary and a finished deck deserves both.

min_severity: "error" reports only faults that can break the file in PowerPoint; "warning" (default) adds the defects a user would notice; "info" adds advisories, notably fonts this server's renderer substitutes with different metrics — which is what makes a text-fit finding from visual QA approximate.

Returns "ok" (no errors), per-severity "counts", and a "problems" list where each entry names the slide, the shape, what is wrong and the tool that fixes it.

get_design_guidanceA

How to make the deck look like someone designed it.

Read this BEFORE planning a deck, and re-read the relevant section when you hit a decision it covers. It carries what the individual tools cannot: deck structure, layout and spacing, type scale, colour, chart and table choices, the visual habits that make a deck look machine-generated, and the build loop that catches problems while they are still cheap.

It also covers two things specific to this server: how differently to behave when the user supplied a corporate template (the default — you inherit their design rather than inventing one), and which fonts this server's renderer reproduces at true width, which is what determines whether you can trust a visual_inspect_slides verdict on text fit.

section: omit for the whole document (a few pages), or name one — call once with no argument to see the available section names in "sections".

get_server_infoA

Report this server's version, how many tools it is actually exposing, and whether the optional DIAL and visual QA integrations are configured.

Tool registration is dynamic — the visual QA tools appear only when a vision LLM is configured — so "tools" is counted at call time rather than hardcoded.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

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/photonn/dial-pptx-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server