Skip to main content
Glama
kekegg

Lingsu Slides MCP Server

by kekegg

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SLIDESLINGSU_MCP_URLNoURL of the running Lingsu Slides embedded MCP HTTP endpoint that the stdio bridge proxies to.http://127.0.0.1:8765/mcp

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
}

Tools

Functions exposed to the LLM to take actions

NameDescription
document.get_stateA

Return the full document state (slides, shapes, props), undo/redo flags, and clipboard summary.

document.list_slidesA

List all slides in the document (id, title, shape count).

document.get_slideB

Get a single slide by index (default: current).

document.add_slideC

Append a new slide. Returns the new slide index.

document.remove_slideA

Delete a slide by index. Refuses if it would leave the deck empty.

document.reorder_slideC

Move slide src -> dst (both 0-based indices).

document.set_slide_titleC

Rename a slide (default: current).

document.set_slide_backgroundC

Set a slide's background as a hex color.

document.set_slide_notesB

Set or clear the speaker notes on a slide (default: current). Pass an empty string to clear. Round-trips through the <p:notesSlides> node on save.

document.set_slide_transitionA

Set or clear a slide transition (default: current). kind is a PowerPoint transition name (fade / push / wipe / cover / cut / …) or "" to clear. duration is in seconds (default 0). Round-trips through the <p:transition> node on save.

document.list_shapesB

List shapes on a slide (default: current).

document.get_shapeB

Look up a shape by id across all slides.

document.add_shapeA

Add a shape to a slide. Returns the new shape id. kinds: text / rect / ellipse / image (NamedShape subclasses — fill / text / path go in their own fields). kinds: connector / arrow / autoshape (preset shape — pass props.prst). kind: freeform (props.path_ops is a list of [op, *args] tuples: M/L/C/Q/Z). kind: table (rows / cols / cells). Every kind accepts extra props that ride through onto the shape verbatim (rotation, flip_h, fill, stroke, font_size, ln_color, head_end, ...).

document.remove_shapeC

Delete a shape by id.

document.move_shapeC

Translate a shape by (dx, dy) in slide coordinates.

document.resize_shapeC

Set a shape's box (x, y, w, h) in slide coordinates.

document.set_textC

Replace the text on a text/auto-shape.

document.set_propertyB

Set a single property on a shape (e.g. fill, stroke, font_size, bold, color).

document.set_rotationA

Set a shape's rotation in degrees (clockwise, 0..360). Stored on props.rotation; the renderer applies it as a Qt item transform around the shape centre. Round-trips through OOXML <a:xfrm rot="..."/> on save.

document.undoB

Undo the most recent command.

document.redoA

Redo the most recently undone command.

document.can_undoA

Return whether undo/redo are possible.

document.copyA

Copy the given shape ids to the in-process clipboard. If shape_ids is omitted, all shapes on the current slide are copied. The clipboard is shared with the GUI (Edit → Copy / Cmd-C).

document.cutA

Copy the given shape ids to the clipboard AND remove them from the current slide. Each removal is a separate undo-able command.

document.pasteA

Paste shapes from the clipboard onto the current (or specified) slide. Each pasted shape gets a new id and is offset by (offset, offset) pt from the original so consecutive pastes cascade visibly.

document.duplicateA

Duplicate the given shape ids in place (slight offset). Unlike copy+paste, no clipboard side-effect.

clipboard.peekA

Inspect the in-process clipboard (size, is_cut, source slide, shape payloads).

clipboard.clearA

Empty the in-process clipboard.

app.new_documentB

Reset the document to a blank one with the given title. Also clears the clipboard.

app.open_documentA

Open a .pptx file and replace the current document. Also clears the clipboard.

app.save_documentA

Save to the current path; if no path set, fails (use save_document_as).

app.save_document_asC

Save to a specific path.

app.export_jsonC

Dump the document to a JSON file (lossless internal model).

app.export_pngB

Render a single slide to a PNG file at the slide's native resolution (default 2x = 1920x1080). Uses QGraphicsScene.render on a fresh QImage so no GUI widget needs to be shown.

app.export_all_pngA

Render every slide as slide_NN.png in the given directory. Returns the list of paths written.

app.quitA

Ask the GUI to quit (no-op in headless mode).

script.runB

Execute a Python string against the live Document. Bound names: document, slides, current_slide, undo_stack, rt (with add_text/add_rect/...), math, random, json. Imports, eval/exec, and dunder access are blocked.

script.sampleB

Return a sample script for the script editor.

document.copy_slideA

Copy whole slides to the slide-level clipboard. Indices default to [current]. Survives paste across calls; cut is not supported here (use duplicate_slide + delete_slides for a two-step cut).

document.paste_slideA

Paste slides from the slide-level clipboard after after_index (default: last slide). Pushes one command per pasted slide so undo cleanly removes them.

document.duplicate_slideB

Duplicate the slides at the given indices. Operates highest-index first so earlier insertions don't shift later targets.

document.delete_slidesB

Delete the slides at the given indices. Refuses if it would leave the deck empty.

document.align_shapesA

Align 2+ shapes on the current slide along one of the edges (left / center_h / right / top / center_v / bottom). Uses the bounding box of the selection as the alignment target.

document.reorder_shapesB

Reorder shapes on a slide (z-order). to is one of front / back / forward / backward. Forward/backward move each shape one step.

document.group_shapesB

Wrap the given shape ids in a new logical Group on a slide. If any of the shapes are already in a group, the entire group is included. Returns the new group_id.

document.ungroupB

Remove a Group wrapper. Pass either group_id or shape_id (any shape from the group).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3/5.0

Scored across 46 tools

Disambiguation3/5

Most tools target distinct slide, shape, document, or app operations, and descriptions clarify slide-level versus shape-level actions. However, there are several overlapping pairs: remove_slide versus delete_slides, copy_slide/paste_slide versus copy/paste for shapes, and duplicate_slide versus duplicate for shapes. These boundaries are inferable but create real misselection risk.

Naming Consistency4/5

Names consistently use a namespace.action snake_case convention such as document.get_slide, app.save_document_as, and clipboard.peek. Minor inconsistencies appear with remove_slide/delete_slides and shape clipboard tools named copy/cut/paste rather than copy_shapes/cut_shapes/paste_shapes, but the overall pattern is predictable.

Tool Count2/5

With 46 tools, the surface is very large for a slide-editing server and includes many granular operations that could be consolidated or handled through properties/scripting. While the breadth supports a full editor, the count is heavy enough to burden tool selection and maintenance.

Completeness4/5

The server covers document lifecycle, slide CRUD/duplication/reordering, shape CRUD/grouping/alignment/z-order, text and property editing, clipboard operations, export, and undo/redo. Minor gaps remain, such as inserting a slide at an arbitrary index, richer table/cell editing, and slide layout/master operations, but core workflows are complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues