
Insert an image from a URL onto a page. The URL must be publicly accessible.
Insert a video (YouTube or Google Drive) onto a page. Requires video ID and source type.
Replace an existing image with a new one from a URL. Maintains position and size.
Create a line or connector between two points. Supports straight, bent, and curved lines.
Style a line: fill color, weight (points), dash style, and start/end arrowheads. Pass only the fields you want changed.
Insert a chart from Google Sheets. Requires spreadsheetid and chartid. Can be linked or static.
Refresh a linked Google Sheets chart embedded in the presentation so it reflects the latest data from the source spreadsheet.
Replace every shape whose text matches containstext with an image. Useful for template-style image fill-in (e.g. {{heroimage}}). Returns occurrencesChanged in replies.
Replace every shape whose text matches containstext with a Google Sheets chart. Use linkingmode=LINKED to keep the chart in sync with the source sheet (the default). Returns occurrencesChanged.
Set an image's outline (color, weight, dash style). Pass at least one outline_* property; only fields you set are updated. Note: brightness, contrast, transparency, recolor, shadow, and crop are read-only per the Google Slides API.
Update a video's playback options (auto_play, start/end seconds, mute) and outline (color, weight, dash style). Pass at least one property; only fields you set are updated.
Create a new Google Slides presentation with optional title. Returns the presentation ID and metadata; masters and layouts are excluded from the response as theme boilerplate.
Get a presentation by ID. Returns slides and metadata; layouts, masters and the notes master are large and excluded unless requested with includelayouts, includemasters or includenotesmaster — use those for layout or master page IDs. Scope the read with detail: 'text' for words and speaker notes (best for summarizing a large deck), 'outline' for slide IDs and layouts, or a fields mask.
Apply multiple updates atomically to a presentation. Supports 43 request types including slides, shapes, text, tables.
Create a shape on a page. Supports 100+ shape types including rectangles, arrows, flowchart elements.
Create a text box on a page. A text box is a shape optimized for text content with optional initial text.
Update shape visual properties like fill color, outline, and content alignment.
Delete any page element (shape, image, table, etc.) by its object ID. This action cannot be undone.
Group multiple page elements on the same page so they move and transform together. Returns the new group's object ID.
Ungroup one or more groups, leaving their child elements as standalone elements on the page.
Update a page element's affine transform (position, size, rotation). Applies to shapes, images, text boxes, lines, tables, and groups. Use ABSOLUTE to replace the existing transform or RELATIVE to compose with it.
Set the alt text title and/or description on any page element (shape, image, table, video, line). Improves accessibility. Pass at least one of title or description.
Change the stacking (z-) order of one or more page elements on the same page. Operations: BRINGTOFRONT, BRINGFORWARD, SENDBACKWARD, SENDTOBACK. Elements are reordered together, preserving their relative order.
Create a slide, optionally filled, and return its object ID. Name the layout with slidelayoutreference for a Google built-in, or layoutid for one of this deck's own. Pass placeholderidmappings alongside it to name that layout's title/body placeholders up front; give each mapping text (and a bulletpreset) to write its content in this same call, so a populated slide costs one request instead of one per placeholder. The mappings require a layout.
Duplicate an existing slide. The copy includes all elements and can be positioned at a specific index. Pass objectidmappings to choose the copy's object IDs so it can be edited without reading the new page back to discover generated IDs.
Delete a slide from a presentation by its object ID. This action cannot be undone.
Reorder slides by moving them to a new position. Provide slide IDs in the desired order.
Set a slide's background to a solid color or a stretched image. Pass exactly one of backgroundfillcolorrgb or backgroundimage_url.
Update slide-level properties: assign a layout or mark slide as skipped during presentation. Pass at least one of layoutobjectid or is_skipped.
Get information about a specific page including its elements. Works for slides, masters, layouts. Scope the read with detail: 'text' for the words and speaker notes only, 'outline' for element IDs plus their placeholder and shape types (the usual precursor to a write), or an explicit fields mask. Defaults to the full element tree.
Get a thumbnail image of a page. Returns a URL to download the image (PNG format).
Create a table on a page with specified rows and columns. Use insert_text to add content to cells.
Insert rows into a table at a specific index. New rows copy structure from adjacent row.
Insert columns into a table at a specific index. New columns copy structure from adjacent column.
Delete a row from a table by index. Content in the row is removed.
Delete a column from a table by index. Content in the column is removed.
Merge a rectangular range of table cells. Content is combined into the top-left cell.
Update table cell properties like background color and content alignment.
Style table borders (color, weight, dash) at a position (ALL, OUTER, INNER, TOP, BOTTOM, LEFT, RIGHT, INNERHORIZONTAL, INNERVERTICAL). Optionally scope to a cell range via locationrowindex/locationcolumnindex/rowspan/columnspan.
Set the width of one or more table columns in EMU (914400 EMU = 1 inch).
Set the minimum height of one or more table rows in EMU (914400 EMU = 1 inch). Rows may grow beyond this if their content requires it.
Unmerge a previously merged rectangular range of table cells, restoring the individual cells. Cells that were not merged are unaffected.
Insert text into a shape or table cell. Omitting insertionindex inserts at the START of the existing text — set append=true to add to the end instead, or knownempty=true when the element has no text yet (a placeholder you just created), which lands at 0 without append's lookup. Set asnewparagraph when appending a bullet or list item, or the text joins onto the last one. Use cell_location for table cells.
Delete text from a shape or table cell. Set textrangetype to ALL for the whole text (no indices), FROMSTARTINDEX for startindex to the end, or FIXEDRANGE for startindex up to endindex.
Find and replace all occurrences of text in a presentation. Optional case-sensitivity and page filtering.
Apply text formatting like bold, italic, font, size, and color to a text range. Set textrangetype to ALL for the whole text (no indices), FROMSTARTINDEX for startindex to the end, or FIXEDRANGE for startindex up to endindex.
Update paragraph formatting like alignment, line spacing, and indentation for a text range. Set textrangetype to ALL for the whole text (no indices), FROMSTARTINDEX for startindex to the end, or FIXEDRANGE for startindex up to endindex.
Add bullet or numbered list formatting to paragraphs in a text range. Choose from 15 bullet presets. Set textrangetype to ALL for the whole text (no indices), FROMSTARTINDEX for startindex to the end, or FIXEDRANGE for startindex up to endindex.
Remove bullet/list formatting from a paragraph text range. Inverse of createparagraphbullets. For tables, pass cell_location.
Validate Google Slides credentials. Verifies credentials during setup.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}It’s an MCP server that lets you access data and functionality from a particular instance of Google Slides via tools. Your agents can invoke these tools to retrieve specific presentations, update an image on a specific slide, create a shape with text on a slide, and more.
While Google provides an official MCP server for some of its products (e.g., Google Maps), it doesn’t provide one for Google Slides.
That said, your agents can access a Google Slides MCP server from a 3rd-party platform, like Merge Agent Handler.
Here are a few ways your agents can use the server:
Here are some common tools:
Presentations
Text
Shapes
Here are just a few reasons:
Yes, Merge Agent Handler’s security gateway lets you activate security rules and configure how flagged content is handled on both outbound requests and inbound responses.
Here are some rules you can set:
Take the following steps:
1. Create (or sign into) your Agent Handler account and get an API key that your MCP client will send as a bearer token when calling the Agent Handler MCP endpoint.
2. Create a Tool Pack for your Google Slides workflow, since Tool Packs are the entry point and define what tools your agent is allowed to use.
3. Add the Google Slides connector to that Tool Pack and keep the tool set narrow at first (e.g., start read-only, then expand).
4. Create a Registered User for the identity that will run tool calls, since Registered Users are the credential container and also scope audit logs.
5. Authenticate Google Slides for that Registered User (typically via Merge Link in your product) so the Slides tools become available for that user’s credentials.
6. Copy the MCP URL for “Tool Pack ID + Registered User ID” and add it to your MCP client (Cursor, Claude Desktop, VS Code, Windsurf, etc.).
7. Configure your MCP client to send your Agent Handler API key in the header as <code class="blog_inline-code">Authorization: Bearer <YOUR_AGENT_HANDLER_API_KEY></code> (or the equivalent setting in your client).
8. Test and verify in logs by running <code class="blog_inline-code">list_tools</code> and a simple low-risk tool call first, then confirming the calls look correct in Agent Handler’s logs.
Yes, Agent Handler for Employees lets your employees connect Claude, ChatGPT, Microsoft Copilot, Cursor, and other MCP-compatible AI tools to Google Slides without bypassing IT governance.
Instead of setting up direct connections with personal credentials that IT can't monitor or revoke, each employee authenticates through Agent Handler and gets individual credentials tied to their identity. A marketing manager can, for example, ask their AI to update a slide with the latest metrics, generate a new deck from a template, or pull content from a presentation for review.
IT provisions access by role or group via SCIM. This means marketing manager gets Google Slides to update campaign decks, Figma to access design assets, and Google Sheets to pull performance data; while a sales rep can get Google Slides to update sales presentations, Salesforce to pull deal data, and Google Drive to access supporting documents.
Every tool call an employee's AI makes to Google Slides is inspected against your DLP rules and logged to a searchable audit trail, giving security teams full visibility into what data was accessed and by whom.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now