Google Slides
Arcade.dev LLM tools for Google Slides
Google Slides Toolkit
The Arcade Google Slides toolkit connects LLMs to the Google Slides (and supporting Drive) APIs, enabling agents to create, read, edit, comment on, and share presentations on behalf of a connected Google account.
Capabilities
- Deck creation and editing: Create presentations from scratch, derive new decks from existing branded templates (preserving masters, layouts, and themes), and apply atomic batches of edits — adding/deleting/restyling slides and elements, inserting/replacing text, setting speaker notes, reordering slides, and duplicating objects — in a single call.
- Read and snapshot: Retrieve a full addressable snapshot of any deck, including slide/element object IDs, placeholder types, text, speaker notes, and layout/master inventory — the required prerequisite before targeting any edit.
- Search and discovery: Full-text search across a user's Drive for presentations (matches body content and titles), with pagination support.
- Comments and thread management: Add top-level comments or replies to existing threads, list all comments and replies (newest first), and resolve or reopen comment threads.
- Visual verification and account info: Render individual slides to thumbnail images for visual confirmation, and retrieve the connected account's profile (name, email, picture).
- File picker for access grants: Generate a Google Drive inline file-picker URL so users can explicitly grant the app access to specific files when a prior tool call was denied or the file was not found.
OAuth
This toolkit uses OAuth 2.0 via Google. See the Arcade Google auth provider docs for setup details.
Secrets
ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL
This secret controls whether the GenerateGoogleFilePickerUrl tool is activated. It must be set to a valid OAuth 2.0 client ID that is authorized to render the Google Picker API in-browser.
To obtain the value:
- Open the Google Cloud Console and select or create a project.
- Navigate to APIs & Services → Credentials.
- Create an OAuth 2.0 Client ID of type Web application.
- Add any required authorized JavaScript origins for the picker UI (e.g., your app's domain).
- Enable the Google Drive API and Google Picker API for the project under APIs & Services → Enabled APIs.
- Copy the resulting Client ID (format:
<numbers>-<hash>.apps.googleusercontent.com) and supply it as the value of this secret.
Without this secret, the picker tool returns status: "unavailable" — this is not an error and other tools continue to work normally.
For how to configure secrets in Arcade, see the Arcade secrets docs. You can also manage secrets at https://api.arcade.dev/dashboard/auth/secrets.
Available tools(10)
| Tool name | Description | Secrets | |
|---|---|---|---|
Add a comment to a presentation, or reply within an existing comment thread.
Comments are file-level, not anchored to a slide; to reference a slide, name it in
the text. Pass reply_to_comment_id to post within that thread instead of starting a
new comment. | 1 | ||
Create a deck or apply a batch of edits to one, returning created object ids,
replace counts, and a fresh addressable snapshot.
Use this single tool for all deck construction and editing: add, delete, or restyle
slides and elements, insert and replace text, and brand a deck in one batch. Reorder
slides with an updateSlidesPosition request; duplicate a slide or element with a
duplicateObject request. To set speaker notes, insertText into a slide's
notes_object_id (surfaced per slide in the snapshot).
To add a slide into a specific branded layout, first read the deck and consult the
snapshot's layout inventory: each layout reports its placeholders (type, index, and
object id), so you can pick a layout that already carries the title/body/other
placeholders you intend to fill rather than guessing which layout holds what, and
address a specific placeholder in placeholderIdMappings (by {type, index} or by
layoutPlaceholderObjectId) even when a layout repeats a type. Read the snapshot to
discover the object ids later edits target.
The batch is atomic: one invalid request rejects the whole batch, so target object
ids that exist in the snapshot. Object ids you assign to new objects are validated
before the batch is sent. | 1 | ||
Derive a new on-brand deck from an existing branded deck, preserving its
masters, layouts, and theme, then optionally filling tokens.
Use this instead of building from scratch when the user wants a deck in their
company template; the new deck inherits the source's branding. | 1 | ||
Generate a URL where the user grants this app access to specific Drive files.
Check `status` first. "unavailable" is not an error: either this app already reaches
every presentation the connected account can open, so there is no per-file grant to
request, or the picker is not configured here. Either way `reason` explains it, no URL
exists, and a presentation that could not be read is one the account itself cannot
open. Do not retry it.
On "available", use this when a prior tool reported a file was not found or access was
denied and the user expects the file to exist; after the user completes the picker,
retry the prior tool. Opens Google's first-party Drive picker, not a sign-in prompt. | 1 | ||
Return an addressable snapshot of a deck: slide and element object ids,
placeholder types, text, speaker notes, and the layout and master inventory.
This is the read side of the read-edit loop: the object ids it returns are the
addresses create_or_edit_presentation targets. Each layout in the inventory
reports its placeholders with type, index, and object id, the identity a
createSlide placeholderIdMappings entry needs (by {type, index} or by
layoutPlaceholderObjectId), even when a layout repeats a placeholder type.
What this response leaves out is reported in words by next_step, which is empty only
when nothing was left out: read it before answering anything about slides it does not
contain. | 1 | ||
Render one slide to an image and return its content URL, for visually
confirming a deck looks right before sharing. | 1 | ||
List a page of comments and their replies on a presentation, newest first. | 1 | ||
Close (resolve) or reopen a comment thread on a presentation.
Posts an action reply on the thread, so the lifecycle change is attributed to the
connected account; the thread's existing comments and replies are preserved. | 1 | ||
Search the user's Drive for presentations, newest first by default.
Keyword matching is full-text: a keyword matches a deck's body content as well
as its title, so a deck can match on words that never appear in its title. A
keyword search that matches nothing returns an empty list (not an error).
An empty list is only a definitive no-match when next_step is empty. When next_step is
set, the listing was not walked to its end and the pages it did not reach may hold the
match, so do not report that no such presentation exists from that response alone. | 1 | ||
Return the connected Google account's profile (name, email, picture). | 1 |