Google Slides logo

Google Slides

OrganizationPopular
cursor
google-slides

Build and edit Google Slides through the google-slides MCP tools - slides, grids of cards and columns, text boxes, shapes, images, tables, styling, layout inspection, and per-slide PNG rendering. Use when creating a deck, laying out slide elements, matching a template, or verifying how a slide looks.

Overview

Publishercursor
Repositoryplugins
Skill namegoogle-slides
Stars
9.2K
Forks
863
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by cursor on GitHub. Read the source before you install it.

Installation

Install the Google Slides AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/cursor/plugins/tree/main/third_party/google-slides/skills/google-slides
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/cursor/plugins.git /tmp/plugins
mkdir -p .claude/skills
cp -r /tmp/plugins/third_party/google-slides/skills/google-slides .claude/skills/google-slides
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Google Slides in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Google Slides on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Google Slides is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Google Slides authoring

Coordinates are POINTS from the slide's top-left; a standard slide is 720x405 (read_slide_layout reports the real size). Everything is addressed by objectId from read_presentation. Pass requiredRevisionId from the latest read or write so a concurrent edit fails the write instead of corrupting it.

Building a new deck: compose, then look

Write each slide as a layout, not as coordinates. compose_slide takes a tree (stacks, grids, cards, text, images) or an HTML/CSS subset and lays the whole slide out in one call: equal peer sizes, even gutters, vertical centering, and contrast pairs hold by construction, text can fit: "shrink", and the reply carries every element's box plus lints on the plan. Per slide:

  1. add_slide layout BLANK (or the deck's first slide with clear: true), then compose_slide with the SAME theme every time (palette roles background/surface/primary/textSecondary and the font family). Colors in the tree are roles, not hexes, so one theme change restyles a deck.
  2. Read the reply's issues. text_overflow means shorten, fit: "shrink", or give the node more size; an overlap means two nodes share a box (usually a row that needs gap).
  3. get_slide_thumbnail (LARGE) once per slide and LOOK at it: crowding, dead corners, a title that reads as body text, an image fighting the palette. Fix by re-composing the slide (delete the old elements first, or compose onto a fresh BLANK slide and delete_object the old one).

Tree recipes (column root; the root box is the slide minus a 48 pt margin):

  • Title slide: stack column justify:center with a display text and an h2 subtitle in textSecondary, both align:center.
  • KPI cards: h1, then a stack row size:150 gap:24 of cards, each with a caption label (textSecondary) over a kpi value.
  • Text + image: stack row gap:32 of a body text (bullets:true, size:{flex:1}) and an image (size:{flex:1}); the image aspect-fits.
  • Agenda: one body text with newline-separated items and bullets:true.

HTML form, same result: <section style="background:#0B2A4A; padding:48pt; gap:24pt"> with <h1>, <div style="display:flex; gap:24pt; height:150pt"> of <article class="card"><span class="caption">…</span><span class="kpi">…</span></article>, <ul><li> bullets, <img style="flex:1">. Only the documented tags and properties compile; anything else is refused by name, never dropped.

Editing an existing deck: place, inspect, fix, look

For decks that already have content, or elements the tree does not model:

  1. insert_grid for any row, column, or grid of cards/text/images (one call, aligned, equal sizes); insert_text_box / insert_shape / insert_image for singletons.
  2. read_slide_layout: every element's box, z-order, text style, estimated wrapped height (textFit.fits), and issues. Fix every error and warn (text_overflow, overlap, off_slide, low_contrast with the fill actually behind the text named) and the info items when cheap (near_miss_alignment, unequal_peers, tight_margin, empty_placeholder).
  3. get_slide_thumbnail once the lints are clean, and look.

Grid conventions (when placing by hand)

Title at x 40, y 32, 640 wide, height 60-70 for one line of 28-34 pt (two lines need ~110); subtitle under it at 16-18 pt. Content region x 40, y 130, 640 x 235 (insert_grid's default). Footer at y 370, 12 pt. Keep 40 pt side margins unless an element is deliberately full-bleed. Process flows: insert_grid the step shapes (columns = steps), then connect_shapes between neighbors; connectors follow shapes when moved.

A 34 pt bold title wraps past ~32 characters in a 600 pt box and spills over whatever sits below (the API does not grow boxes). textFit in the layout read and issues in the compose reply predict this; long titles go to 24-28 pt, fit: "shrink", or two lines with the subtitle pushed down.

Palette and contrast

Pick a palette FIRST and reuse it on every slide (as compose_slide's theme.palette): background, one card/surface color, one accent, and a secondary text color; on-colors derive automatically. When the user names a template or brand, take its colors; otherwise these pairs pass WCAG AA as-is:

  • Dark: background #0B2A4A, cards #1E4976, accent #4FC3F7, titles/text #FFFFFF, secondary #B8CCE0.
  • Light: background #FFFFFF, cards #F1F3F4, accent #0B57D0 (white text on it), text #202124, secondary #444746.

Text color never defaults sensibly on a colored fill: every text-bearing call picks its color against the fill BEHIND the text (the card's, not the slide's). No mid-gray on mid-anything; on white, secondary text is #444746 or darker (#5F6368 is borderline, lighter fails). For a template or brand palette, run check_contrast on every text/fill pair you intend to use before writing (it returns a passing tint or shade for each failing pair); low_contrast in the layout read is the check afterwards.

Tables on colored slides render dark-on-dark from theme fills: set_table_cell_fill every cell (light fill + dark text, or accent + white) and restyle with set_text_style (cellRow/cellColumn). Prefer stat cards over a grid of numbers on title and summary slides; a table only for genuinely tabular data, with the header row filled in the accent and kept to a handful of rows.

Slides and repetition

  • create_presentation starts with one blank slide (delete its placeholders, or fill them with set_shape_text); it cannot target a folder, so move it after with google-drive google_drive_move_or_rename.
  • add_slide with a predefined layout fills title/body placeholders in the same call (fastest theme-consistent slide); move_slide reorders.
  • Repeated layouts (one template, N variants): build the first slide fully, then per variant duplicate_object on the slide id (the copy lands right after) and replace_text scoped by pageObjectIds to the copy; distinct placeholders like {{TITLE}} keep the replaces unambiguous.
  • set_shape_text REPLACES a shape's or cell's whole text (cell = {rowIndex, columnIndex}); set_text_style restyles all of one shape or cell, not a range. update_element_position moves but does not resize: delete and re-create at the right size instead.
  • Speaker notes: set_shape_text with pageObjectId = the slide's notesPageId and objectId = speakerNotesObjectId from read_presentation.
  • Whole-deck render: google-drive google_drive_export_file (pdf).

Frequently asked questions

What does the Google Slides AI skill do?

Build and edit Google Slides through the google-slides MCP tools - slides, grids of cards and columns, text boxes, shapes, images, tables, styling, layout inspection, and per-slide PNG rendering. Use when creating a deck, laying out slide elements, matching a template, or verifying how a slide looks.

Why use Google Slides on TypingMind?

Because you install it once and use it with any model. Google Slides is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Google Slides in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/cursor/plugins/tree/main/third_party/google-slides/skills/google-slides. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Google Slides?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Google Slides?

As many as you like. As long as a model supports skills, you can use Google Slides with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Google Slides AI skill free?

It is published on GitHub by cursor. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇