← WebMCP Directory

Tool tree

persona-chat.dev

liveDeveloper Tools
https://www.persona-chat.dev/
Persona is an open-source, themeable AI chat widget you can add to any website in minutes. SSE streaming, agent loops, tool use, and style isolation: zero framework dependencies.
Explore capabilities

page: /theme.html

get_theme_overviewAnswer

Read theme summary, presets, and editable levers. Call before editing.

View tool JSON
{
  "name": "get_theme_overview",
  "kind": "answer",
  "impl": "imperative",
  "description": "Read theme summary, presets, and editable levers. Call before editing.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "verbosity": {
        "type": "string",
        "enum": [
          "summary",
          "full"
        ],
        "description": "'full' includes the field-id index."
      }
    },
    "additionalProperties": false
  },
  "page": "/theme.html"
}
set_brand_colorsAction

Set primary, secondary, and/or accent colors. Generates shade scales and accepts hex, rgb/rgba, or CSS names.

View tool JSON
{
  "name": "set_brand_colors",
  "kind": "act",
  "impl": "imperative",
  "description": "Set primary, secondary, and/or accent colors. Generates shade scales and accepts hex, rgb/rgba, or CSS names.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "primary": {
        "type": "string",
        "description": "Hex, rgb/rgba, or CSS name."
      },
      "secondary": {
        "type": "string",
        "description": "Hex, rgb/rgba, or CSS name."
      },
      "accent": {
        "type": "string",
        "description": "Hex, rgb/rgba, or CSS name."
      }
    },
    "additionalProperties": false
  },
  "page": "/theme.html"
}
assign_color_roleAction

Recolor a widget region by role, palette family, and intensity.

View tool JSON
{
  "name": "assign_color_role",
  "kind": "act",
  "impl": "imperative",
  "description": "Recolor a widget region by role, palette family, and intensity.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "role": {
        "type": "string",
        "description": "Role, e.g. header or user-messages."
      },
      "family": {
        "type": "string",
        "enum": [
          "primary",
          "secondary",
          "accent",
          "neutral"
        ]
      },
      "intensity": {
        "type": "string",
        "enum": [
          "solid",
          "soft"
        ],
        "description": "Default: solid."
      }
    },
    "required": [
      "role",
      "family"
    ],
    "additionalProperties": false
  },
  "page": "/theme.html"
}
set_typographyAction

Set font family, size, weight, and line height.

View tool JSON
{
  "name": "set_typography",
  "kind": "act",
  "impl": "imperative",
  "description": "Set font family, size, weight, and line height.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "fontFamily": {
        "type": "string"
      },
      "fontSize": {
        "type": "string"
      },
      "fontWeight": {
        "type": [
          "string",
          "number"
        ]
      },
      "lineHeight": {
        "type": [
          "string",
          "number"
        ]
      }
    },
    "additionalProperties": false
  },
  "page": "/theme.html"
}
set_roundnessAction

Set roundness by style or granular radius values.

View tool JSON
{
  "name": "set_roundness",
  "kind": "act",
  "impl": "imperative",
  "description": "Set roundness by style or granular radius values.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "style": {
        "type": "string",
        "enum": [
          "sharp",
          "default",
          "rounded",
          "pill"
        ]
      },
      "radius": {
        "type": "object",
        "description": "Granular px or CSS length overrides.",
        "properties": {
          "sm": {
            "type": [
              "string",
              "number"
            ]
          },
          "md": {
            "type": [
              "string",
              "number"
            ]
          },
          "lg": {
            "type": [
              "string",
              "number"
            ]
          },
          "xl": {
            "type": [
              "string",
              "number"
            ]
          },
          "full": {
            "type": [
              "string",
              "number"
            ]
          }
        },
        "additionalProperties": false
      }
    },
    "additionalProperties": false
  },
  "page": "/theme.html"
}
set_color_schemeAction

Set light/dark/auto color scheme and optional edit target.

View tool JSON
{
  "name": "set_color_scheme",
  "kind": "act",
  "impl": "imperative",
  "description": "Set light/dark/auto color scheme and optional edit target.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "scheme": {
        "type": "string",
        "enum": [
          "light",
          "dark",
          "auto"
        ]
      },
      "editTarget": {
        "type": "string",
        "enum": [
          "light",
          "dark",
          "both"
        ]
      }
    },
    "additionalProperties": false
  },
  "page": "/theme.html"
}
apply_presetAction

Apply a complete built-in preset, replacing theme tokens. Call get_theme_overview to list preset ids.

View tool JSON
{
  "name": "apply_preset",
  "kind": "act",
  "impl": "imperative",
  "description": "Apply a complete built-in preset, replacing theme tokens. Call get_theme_overview to list preset ids.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "presetId": {
        "type": "string"
      }
    },
    "required": [
      "presetId"
    ],
    "additionalProperties": false
  },
  "page": "/theme.html"
}
configure_widgetAction

Toggle launcher position, feature flags, and message layout.

View tool JSON
{
  "name": "configure_widget",
  "kind": "act",
  "impl": "imperative",
  "description": "Toggle launcher position, feature flags, and message layout.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "launcherPosition": {
        "type": "string",
        "enum": [
          "bottom-right",
          "bottom-left",
          "top-right",
          "top-left"
        ]
      },
      "features": {
        "type": "object",
        "properties": {
          "voice": {
            "type": "boolean"
          },
          "artifacts": {
            "type": "boolean"
          },
          "attachments": {
            "type": "boolean"
          },
          "toolCalls": {
            "type": "boolean"
          },
          "reasoning": {
            "type": "boolean"
          },
          "feedback": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "layout": {
        "type": "object",
        "properties": {
          "avatars": {
            "type": "boolean"
          },
          "timestamps": {
            "type": "boolean"
          },
          "showHeader": {
            "type": "boolean"
          },
          "messageStyle": {
            "type": "string",
            "enum": [
              "bubble",
              "flat",
              "minimal"
            ]
          }
        },
        "additionalProperties": false
      }
    },
    "additionalProperties": false
  },
  "page": "/theme.html"
}
set_copy_and_suggestionsAction

Set welcome copy, input placeholder, send label, and suggestion chips.

View tool JSON
{
  "name": "set_copy_and_suggestions",
  "kind": "act",
  "impl": "imperative",
  "description": "Set welcome copy, input placeholder, send label, and suggestion chips.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "title": {
        "type": "string"
      },
      "subtitle": {
        "type": "string"
      },
      "placeholder": {
        "type": "string"
      },
      "sendLabel": {
        "type": "string"
      },
      "suggestions": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "additionalProperties": false
  },
  "page": "/theme.html"
}
set_theme_fieldsAction

Advanced escape hatch: set fields by id or raw dot-path. Values are validated when metadata exists.

View tool JSON
{
  "name": "set_theme_fields",
  "kind": "act",
  "impl": "imperative",
  "description": "Advanced escape hatch: set fields by id or raw dot-path. Values are validated when metadata exists.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "updates": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "field": {
              "type": "string",
              "description": "Field id or path."
            },
            "value": {
              "type": [
                "string",
                "number",
                "boolean"
              ]
            }
          },
          "required": [
            "field",
            "value"
          ],
          "additionalProperties": false
        }
      }
    },
    "required": [
      "updates"
    ],
    "additionalProperties": false
  },
  "page": "/theme.html"
}
check_contrastAnswer

Run WCAG checks over key text/background pairs.

View tool JSON
{
  "name": "check_contrast",
  "kind": "answer",
  "impl": "imperative",
  "description": "Run WCAG checks over key text/background pairs.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "level": {
        "type": "string",
        "enum": [
          "AA",
          "AAA"
        ],
        "description": "Default: AA."
      },
      "variant": {
        "type": "string",
        "enum": [
          "light",
          "dark",
          "both"
        ],
        "description": "Default: both."
      }
    },
    "additionalProperties": false
  },
  "page": "/theme.html"
}
manage_sessionAction

Undo, redo, reset defaults, or export the theme snapshot.

View tool JSON
{
  "name": "manage_session",
  "kind": "act",
  "impl": "imperative",
  "description": "Undo, redo, reset defaults, or export the theme snapshot.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "action": {
        "type": "string",
        "enum": [
          "undo",
          "redo",
          "reset",
          "export"
        ]
      }
    },
    "required": [
      "action"
    ],
    "additionalProperties": false
  },
  "page": "/theme.html"
}
screenshot_previewAction

Capture the current rendered state of the theme preview as an image: exactly what the user sees. Returns one JPEG per visible preview frame (two when a compare mode is active, labeled e.g. Light/Dark). Call after applying a batch of theme changes to verify the visual result, especially when matching a reference image.

View tool JSON
{
  "name": "screenshot_preview",
  "kind": "act",
  "impl": "imperative",
  "description": "Capture the current rendered state of the theme preview as an image: exactly what the user sees. Returns one JPEG per visible preview frame (two when a compare mode is active, labeled e.g. Light/Dark). Call after applying a batch of theme changes to verify the visual result, especially when matching a reference image.",
  "inputSchema": {
    "type": "object",
    "properties": {},
    "additionalProperties": false
  },
  "page": "/theme.html"
}

page: /webmcp-demo.html

search_productsAnswer

Search the product catalog by free-text query (e.g. 'waterproof trail shoe', 'blue running', 'jacket'). Returns matching products with SKU, title, brand, color, price, imageUrl, and imageAlt.

View tool JSON
{
  "name": "search_products",
  "kind": "answer",
  "impl": "imperative",
  "description": "Search the product catalog by free-text query (e.g. 'waterproof trail shoe', 'blue running', 'jacket'). Returns matching products with SKU, title, brand, color, price, imageUrl, and imageAlt.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "description": "Free-text search query."
      }
    },
    "required": [
      "query"
    ]
  },
  "page": "/webmcp-demo.html"
}
view_productAction

Look at one product in detail by SKU (from search_products results). Highlights it on the page and returns its full description plus imageUrl/imageAlt. Read-only.

View tool JSON
{
  "name": "view_product",
  "kind": "act",
  "impl": "imperative",
  "description": "Look at one product in detail by SKU (from search_products results). Highlights it on the page and returns its full description plus imageUrl/imageAlt. Read-only.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "sku": {
        "type": "string"
      }
    },
    "required": [
      "sku"
    ]
  },
  "page": "/webmcp-demo.html"
}
add_to_cartAction

Add a product to the shopper's cart by SKU (from search_products results). Returns the updated cart so you can confirm the running total.

View tool JSON
{
  "name": "add_to_cart",
  "kind": "act",
  "impl": "imperative",
  "description": "Add a product to the shopper's cart by SKU (from search_products results). Returns the updated cart so you can confirm the running total.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "sku": {
        "type": "string"
      },
      "quantity": {
        "type": "integer",
        "minimum": 1
      }
    },
    "required": [
      "sku"
    ]
  },
  "page": "/webmcp-demo.html"
}
remove_from_cartAction

Remove a product from the cart by SKU, or reduce its quantity. Omit quantity to remove the line entirely. Returns the updated cart.

View tool JSON
{
  "name": "remove_from_cart",
  "kind": "act",
  "impl": "imperative",
  "description": "Remove a product from the cart by SKU, or reduce its quantity. Omit quantity to remove the line entirely. Returns the updated cart.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "sku": {
        "type": "string"
      },
      "quantity": {
        "type": "integer",
        "minimum": 1
      }
    },
    "required": [
      "sku"
    ]
  },
  "page": "/webmcp-demo.html"
}
apply_promoAction

Apply a promo code to the cart (e.g. TRAIL10, TRAILVIP, SUMMIT20). Returns whether it was accepted and the updated cart with the discount applied.

View tool JSON
{
  "name": "apply_promo",
  "kind": "act",
  "impl": "imperative",
  "description": "Apply a promo code to the cart (e.g. TRAIL10, TRAILVIP, SUMMIT20). Returns whether it was accepted and the updated cart with the discount applied.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "code": {
        "type": "string"
      }
    },
    "required": [
      "code"
    ]
  },
  "page": "/webmcp-demo.html"
}

page: /webmcp-calendar.html

get_calendar_stateAnswer

Read the current calendar state: current local date-time, selected date, visible week, timezone, total event count, visible events, and the valid users (with the userIds create_event accepts). Call this before creating or editing events. All event times are local wall-clock times in the calendar timezone.

View tool JSON
{
  "name": "get_calendar_state",
  "kind": "answer",
  "impl": "imperative",
  "description": "Read the current calendar state: current local date-time, selected date, visible week, timezone, total event count, visible events, and the valid users (with the userIds create_event accepts). Call this before creating or editing events. All event times are local wall-clock times in the calendar timezone.",
  "inputSchema": {
    "type": "object",
    "properties": {}
  },
  "page": "/webmcp-calendar.html"
}
get_eventsAnswer

List calendar events. Optionally filter by month in YYYY-MM format, userId, or a text search over title/description/location.

View tool JSON
{
  "name": "get_events",
  "kind": "answer",
  "impl": "imperative",
  "description": "List calendar events. Optionally filter by month in YYYY-MM format, userId, or a text search over title/description/location.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "month": {
        "type": "string",
        "description": "Optional month filter, e.g. 2026-06."
      },
      "userId": {
        "type": "string",
        "description": "Optional owner/attendee user ID."
      },
      "search": {
        "type": "string",
        "description": "Optional text search."
      }
    }
  },
  "page": "/webmcp-calendar.html"
}
find_availabilityAnswer

Find open slots on a date, optionally for a single user. Workday is 9am-5pm local time. Returned slot times are local wall-clock times in the calendar timezone.

View tool JSON
{
  "name": "find_availability",
  "kind": "answer",
  "impl": "imperative",
  "description": "Find open slots on a date, optionally for a single user. Workday is 9am-5pm local time. Returned slot times are local wall-clock times in the calendar timezone.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "date": {
        "type": "string",
        "description": "Date to inspect, e.g. 2026-06-10."
      },
      "durationMinutes": {
        "type": "number",
        "description": "Desired meeting duration in minutes."
      },
      "userId": {
        "type": "string",
        "description": "Optional user ID to check."
      }
    }
  },
  "page": "/webmcp-calendar.html"
}
select_dateAction

Move the calendar UI to a specific date without creating an event.

View tool JSON
{
  "name": "select_date",
  "kind": "act",
  "impl": "imperative",
  "description": "Move the calendar UI to a specific date without creating an event.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "date": {
        "type": "string",
        "description": "Date to select, e.g. 2026-06-10."
      }
    },
    "required": [
      "date"
    ]
  },
  "page": "/webmcp-calendar.html"
}
create_eventAction

Create a calendar event and render it on the page. startDate/endDate are LOCAL wall-clock times in the calendar timezone, formatted YYYY-MM-DDTHH:mm: never append "Z" or a UTC offset (any offset is ignored and the stated clock time is used as-is). Use a userId from get_calendar_state.

View tool JSON
{
  "name": "create_event",
  "kind": "act",
  "impl": "imperative",
  "description": "Create a calendar event and render it on the page. startDate/endDate are LOCAL wall-clock times in the calendar timezone, formatted YYYY-MM-DDTHH:mm: never append \"Z\" or a UTC offset (any offset is ignored and the stated clock time is used as-is). Use a userId from get_calendar_state.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "title": {
        "type": "string",
        "description": "Event title."
      },
      "description": {
        "type": "string",
        "description": "Optional event notes."
      },
      "startDate": {
        "type": "string",
        "description": "Event start as local wall-clock time, e.g. 2026-06-11T08:00. No \"Z\" or UTC offset."
      },
      "endDate": {
        "type": "string",
        "description": "Event end as local wall-clock time, e.g. 2026-06-11T09:00. No \"Z\" or UTC offset."
      },
      "userId": {
        "type": "string",
        "description": "Owner/attendee user ID from get_calendar_state."
      },
      "color": {
        "type": "string",
        "enum": [
          "blue",
          "green",
          "purple",
          "amber",
          "rose"
        ],
        "description": "Event color."
      },
      "location": {
        "type": "string",
        "description": "Optional location or video link."
      }
    },
    "required": [
      "title",
      "startDate",
      "endDate"
    ]
  },
  "page": "/webmcp-calendar.html"
}
update_eventAction

Update an existing event by eventId. Only supplied fields are changed. startDate/endDate are LOCAL wall-clock times (YYYY-MM-DDTHH:mm, no "Z" or UTC offset).

View tool JSON
{
  "name": "update_event",
  "kind": "act",
  "impl": "imperative",
  "description": "Update an existing event by eventId. Only supplied fields are changed. startDate/endDate are LOCAL wall-clock times (YYYY-MM-DDTHH:mm, no \"Z\" or UTC offset).",
  "inputSchema": {
    "type": "object",
    "properties": {
      "eventId": {
        "type": "string"
      },
      "title": {
        "type": "string"
      },
      "description": {
        "type": "string"
      },
      "startDate": {
        "type": "string",
        "description": "Local wall-clock time, e.g. 2026-06-11T08:00. No \"Z\" or UTC offset."
      },
      "endDate": {
        "type": "string",
        "description": "Local wall-clock time, e.g. 2026-06-11T09:00. No \"Z\" or UTC offset."
      },
      "userId": {
        "type": "string",
        "description": "Owner/attendee user ID from get_calendar_state."
      },
      "color": {
        "type": "string",
        "enum": [
          "blue",
          "green",
          "purple",
          "amber",
          "rose"
        ]
      },
      "location": {
        "type": "string"
      }
    },
    "required": [
      "eventId"
    ]
  },
  "page": "/webmcp-calendar.html"
}
delete_eventSensitive Action

Delete an event from the calendar by eventId.

View tool JSON
{
  "name": "delete_event",
  "kind": "transact",
  "impl": "imperative",
  "description": "Delete an event from the calendar by eventId.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "eventId": {
        "type": "string"
      }
    },
    "required": [
      "eventId"
    ]
  },
  "page": "/webmcp-calendar.html"
}

page: /webmcp-slides.html

get_deck_overviewAnswer

Read the deck: title, active theme, slide count, and per-slide {id, position, title, elementCount}. Call this first to orient yourself; positions are 1-based.

View tool JSON
{
  "name": "get_deck_overview",
  "kind": "answer",
  "impl": "imperative",
  "description": "Read the deck: title, active theme, slide count, and per-slide {id, position, title, elementCount}. Call this first to orient yourself; positions are 1-based.",
  "inputSchema": {
    "type": "object",
    "properties": {}
  },
  "page": "/webmcp-slides.html"
}
get_slideAnswer

Read one slide's full contents: every element with its id, geometry, and style. Call this before editing a slide's elements. Defaults to the slide open in the editor.

View tool JSON
{
  "name": "get_slide",
  "kind": "answer",
  "impl": "imperative",
  "description": "Read one slide's full contents: every element with its id, geometry, and style. Call this before editing a slide's elements. Defaults to the slide open in the editor.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "slideId": {
        "type": "string",
        "description": "Slide id from get_deck_overview."
      },
      "position": {
        "type": "number",
        "description": "1-based slide position (alternative to slideId)."
      }
    }
  },
  "page": "/webmcp-slides.html"
}
get_selectionAnswer

Read the elements the user currently has selected on the canvas: ids, types, geometry, and styles. Use this whenever the user says 'this', 'these', or refers to something they clicked.

View tool JSON
{
  "name": "get_selection",
  "kind": "answer",
  "impl": "imperative",
  "description": "Read the elements the user currently has selected on the canvas: ids, types, geometry, and styles. Use this whenever the user says 'this', 'these', or refers to something they clicked.",
  "inputSchema": {
    "type": "object",
    "properties": {}
  },
  "page": "/webmcp-slides.html"
}
list_themesAnswer

List the available deck themes with their palettes and fonts.

View tool JSON
{
  "name": "list_themes",
  "kind": "answer",
  "impl": "imperative",
  "description": "List the available deck themes with their palettes and fonts.",
  "inputSchema": {
    "type": "object",
    "properties": {}
  },
  "page": "/webmcp-slides.html"
}
goto_slideAction

Open a slide in the editor (navigation only: changes nothing).

View tool JSON
{
  "name": "goto_slide",
  "kind": "act",
  "impl": "imperative",
  "description": "Open a slide in the editor (navigation only: changes nothing).",
  "inputSchema": {
    "type": "object",
    "properties": {
      "slideId": {
        "type": "string"
      },
      "position": {
        "type": "number",
        "description": "1-based slide position."
      }
    }
  },
  "page": "/webmcp-slides.html"
}
add_slideAction

Insert a new slide from a layout. 'title' = centered title + subtitle; 'title-body' = heading + body text; 'two-col' = heading + two text columns (body fills the left, right starts empty); 'blank' = empty. Returns the new slide id and its element ids so you can refine them with update_element.

View tool JSON
{
  "name": "add_slide",
  "kind": "act",
  "impl": "imperative",
  "description": "Insert a new slide from a layout. 'title' = centered title + subtitle; 'title-body' = heading + body text; 'two-col' = heading + two text columns (body fills the left, right starts empty); 'blank' = empty. Returns the new slide id and its element ids so you can refine them with update_element.",
  "inputSchema": {
    "type": "object",
    "required": [
      "layout"
    ],
    "properties": {
      "layout": {
        "type": "string",
        "enum": [
          "title",
          "title-body",
          "two-col",
          "blank"
        ]
      },
      "title": {
        "type": "string",
        "description": "Slide heading text."
      },
      "body": {
        "type": "string",
        "description": "Body text. Use \\n for line breaks, • for bullets."
      },
      "position": {
        "type": "number",
        "description": "1-based position to insert at; defaults to the end of the deck."
      }
    }
  },
  "page": "/webmcp-slides.html"
}
duplicate_slideAction

Copy a slide (and all its elements) right after the original. Returns the new slide id.

View tool JSON
{
  "name": "duplicate_slide",
  "kind": "act",
  "impl": "imperative",
  "description": "Copy a slide (and all its elements) right after the original. Returns the new slide id.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "slideId": {
        "type": "string"
      },
      "position": {
        "type": "number",
        "description": "1-based position of the slide to copy."
      }
    }
  },
  "page": "/webmcp-slides.html"
}
delete_slideSensitive Action

Permanently remove a slide and all its elements.

View tool JSON
{
  "name": "delete_slide",
  "kind": "transact",
  "impl": "imperative",
  "description": "Permanently remove a slide and all its elements.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "slideId": {
        "type": "string"
      },
      "position": {
        "type": "number",
        "description": "1-based slide position."
      }
    }
  },
  "page": "/webmcp-slides.html"
}
reorder_slidesAction

Move a slide to a new 1-based position. Returns the resulting slide order.

View tool JSON
{
  "name": "reorder_slides",
  "kind": "act",
  "impl": "imperative",
  "description": "Move a slide to a new 1-based position. Returns the resulting slide order.",
  "inputSchema": {
    "type": "object",
    "required": [
      "slideId",
      "position"
    ],
    "properties": {
      "slideId": {
        "type": "string"
      },
      "position": {
        "type": "number",
        "description": "1-based target position."
      }
    }
  },
  "page": "/webmcp-slides.html"
}
set_slide_propsAction

Update a slide's title and/or background color.

View tool JSON
{
  "name": "set_slide_props",
  "kind": "act",
  "impl": "imperative",
  "description": "Update a slide's title and/or background color.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "slideId": {
        "type": "string"
      },
      "position": {
        "type": "number",
        "description": "1-based slide position."
      },
      "title": {
        "type": "string"
      },
      "background": {
        "type": "string",
        "description": "CSS color (e.g. '#0f172a') or a theme token: 'theme.background', 'theme.surface', 'theme.text', 'theme.accent', 'theme.accentText'. Prefer tokens so the deck restyles when the theme changes."
      }
    }
  },
  "page": "/webmcp-slides.html"
}
add_elementAction

Add one element (text box, rectangle, ellipse, line, or image) to a slide. Lines draw from the top-left to the bottom-right corner of their bounding box. Returns the new element id.

View tool JSON
{
  "name": "add_element",
  "kind": "act",
  "impl": "imperative",
  "description": "Add one element (text box, rectangle, ellipse, line, or image) to a slide. Lines draw from the top-left to the bottom-right corner of their bounding box. Returns the new element id.",
  "inputSchema": {
    "type": "object",
    "required": [
      "type"
    ],
    "properties": {
      "slideId": {
        "type": "string",
        "description": "Target slide id; defaults to the slide open in the editor."
      },
      "type": {
        "type": "string",
        "enum": [
          "text",
          "rect",
          "ellipse",
          "line",
          "image"
        ]
      },
      "x": {
        "type": "number",
        "description": "Slide units; the canvas is 960 wide x 540 tall, origin at the top-left."
      },
      "y": {
        "type": "number"
      },
      "w": {
        "type": "number"
      },
      "h": {
        "type": "number"
      },
      "rotation": {
        "type": "number",
        "description": "Degrees clockwise."
      },
      "z": {
        "type": "number",
        "description": "Stacking order; higher renders on top."
      },
      "text": {
        "type": "string",
        "description": "Text elements only. Use \\n for line breaks."
      },
      "fontSize": {
        "type": "number"
      },
      "fontFamily": {
        "type": "string",
        "description": "Font stack, or a theme token: 'theme.heading' / 'theme.body'. Prefer tokens."
      },
      "fontWeight": {
        "type": "number",
        "description": "400 normal, 700 bold."
      },
      "color": {
        "type": "string",
        "description": "CSS color (e.g. '#0f172a') or a theme token: 'theme.background', 'theme.surface', 'theme.text', 'theme.accent', 'theme.accentText'. Prefer tokens so the deck restyles when the theme changes."
      },
      "align": {
        "type": "string",
        "enum": [
          "left",
          "center",
          "right"
        ]
      },
      "fill": {
        "type": "string",
        "description": "CSS color (e.g. '#0f172a') or a theme token: 'theme.background', 'theme.surface', 'theme.text', 'theme.accent', 'theme.accentText'. Prefer tokens so the deck restyles when the theme changes."
      },
      "stroke": {
        "type": "string",
        "description": "CSS color (e.g. '#0f172a') or a theme token: 'theme.background', 'theme.surface', 'theme.text', 'theme.accent', 'theme.accentText'. Prefer tokens so the deck restyles when the theme changes."
      },
      "strokeWidth": {
        "type": "number"
      },
      "src": {
        "type": "string",
        "description": "Image URL, or 'placeholder' for a styled placeholder block."
      }
    }
  },
  "page": "/webmcp-slides.html"
}
update_elementAction

Merge a partial patch into one element: position, size, text, and style in a single call. Omitted keys are unchanged. Returns the updated element.

View tool JSON
{
  "name": "update_element",
  "kind": "act",
  "impl": "imperative",
  "description": "Merge a partial patch into one element: position, size, text, and style in a single call. Omitted keys are unchanged. Returns the updated element.",
  "inputSchema": {
    "type": "object",
    "required": [
      "elementId",
      "patch"
    ],
    "properties": {
      "elementId": {
        "type": "string"
      },
      "patch": {
        "type": "object",
        "description": "Partial element properties to merge; omitted keys are unchanged.",
        "properties": {
          "x": {
            "type": "number",
            "description": "Slide units; the canvas is 960 wide x 540 tall, origin at the top-left."
          },
          "y": {
            "type": "number"
          },
          "w": {
            "type": "number"
          },
          "h": {
            "type": "number"
          },
          "rotation": {
            "type": "number",
            "description": "Degrees clockwise."
          },
          "z": {
            "type": "number",
            "description": "Stacking order; higher renders on top."
          },
          "text": {
            "type": "string",
            "description": "Text elements only. Use \\n for line breaks."
          },
          "fontSize": {
            "type": "number"
          },
          "fontFamily": {
            "type": "string",
            "description": "Font stack, or a theme token: 'theme.heading' / 'theme.body'. Prefer tokens."
          },
          "fontWeight": {
            "type": "number",
            "description": "400 normal, 700 bold."
          },
          "color": {
            "type": "string",
            "description": "CSS color (e.g. '#0f172a') or a theme token: 'theme.background', 'theme.surface', 'theme.text', 'theme.accent', 'theme.accentText'. Prefer tokens so the deck restyles when the theme changes."
          },
          "align": {
            "type": "string",
            "enum": [
              "left",
              "center",
              "right"
            ]
          },
          "fill": {
            "type": "string",
            "description": "CSS color (e.g. '#0f172a') or a theme token: 'theme.background', 'theme.surface', 'theme.text', 'theme.accent', 'theme.accentText'. Prefer tokens so the deck restyles when the theme changes."
          },
          "stroke": {
            "type": "string",
            "description": "CSS color (e.g. '#0f172a') or a theme token: 'theme.background', 'theme.surface', 'theme.text', 'theme.accent', 'theme.accentText'. Prefer tokens so the deck restyles when the theme changes."
          },
          "strokeWidth": {
            "type": "number"
          },
          "src": {
            "type": "string",
            "description": "Image URL, or 'placeholder' for a styled placeholder block."
          }
        }
      }
    }
  },
  "page": "/webmcp-slides.html"
}
delete_elementsSensitive Action

Permanently remove one or more elements by id.

View tool JSON
{
  "name": "delete_elements",
  "kind": "transact",
  "impl": "imperative",
  "description": "Permanently remove one or more elements by id.",
  "inputSchema": {
    "type": "object",
    "required": [
      "elementIds"
    ],
    "properties": {
      "elementIds": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "minItems": 1
      }
    }
  },
  "page": "/webmcp-slides.html"
}
align_elementsAction

Align elements to the slide or to their shared bounding box, and/or space them evenly along an axis (distribute needs 3+ elements; the first/last stay put). Same shape as align_selection. Returns the new positions.

View tool JSON
{
  "name": "align_elements",
  "kind": "act",
  "impl": "imperative",
  "description": "Align elements to the slide or to their shared bounding box, and/or space them evenly along an axis (distribute needs 3+ elements; the first/last stay put). Same shape as align_selection. Returns the new positions.",
  "inputSchema": {
    "type": "object",
    "required": [
      "elementIds"
    ],
    "properties": {
      "elementIds": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "minItems": 1
      },
      "alignment": {
        "type": "string",
        "enum": [
          "left",
          "center-x",
          "right",
          "top",
          "center-y",
          "bottom"
        ]
      },
      "distribute": {
        "type": "string",
        "enum": [
          "horizontal",
          "vertical"
        ],
        "description": "Space the elements evenly along this axis; needs 3+ elements."
      },
      "relativeTo": {
        "type": "string",
        "enum": [
          "slide",
          "selection-bounds"
        ],
        "description": "Default 'slide'. 'selection-bounds' aligns within the group's own bounding box."
      }
    }
  },
  "page": "/webmcp-slides.html"
}
set_deck_titleAction

Set the deck's title.

View tool JSON
{
  "name": "set_deck_title",
  "kind": "act",
  "impl": "imperative",
  "description": "Set the deck's title.",
  "inputSchema": {
    "type": "object",
    "required": [
      "title"
    ],
    "properties": {
      "title": {
        "type": "string"
      }
    }
  },
  "page": "/webmcp-slides.html"
}
apply_themeAction

Switch the deck's theme. Every element using theme tokens ('theme.accent', 'theme.heading', …) restyles across ALL slides.

View tool JSON
{
  "name": "apply_theme",
  "kind": "act",
  "impl": "imperative",
  "description": "Switch the deck's theme. Every element using theme tokens ('theme.accent', 'theme.heading', …) restyles across ALL slides.",
  "inputSchema": {
    "type": "object",
    "required": [
      "themeId"
    ],
    "properties": {
      "themeId": {
        "type": "string",
        "description": "A theme id from list_themes."
      }
    }
  },
  "page": "/webmcp-slides.html"
}
enter_presenter_modeAction

Enter full-screen presenter mode. NOTE: this replaces your editing tools with presentation controls (next_slide, prev_slide, jump_to_slide, exit_presenter_mode) until the show ends.

View tool JSON
{
  "name": "enter_presenter_mode",
  "kind": "act",
  "impl": "imperative",
  "description": "Enter full-screen presenter mode. NOTE: this replaces your editing tools with presentation controls (next_slide, prev_slide, jump_to_slide, exit_presenter_mode) until the show ends.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "position": {
        "type": "number",
        "description": "1-based slide to start from; defaults to slide 1."
      }
    }
  },
  "page": "/webmcp-slides.html"
}