Google Drive
Arcade.dev LLM tools for Google Drive
The Google Drive toolkit lets Arcade-powered agents read, write, organize, and share files and folders across My Drive and shared drives using Google's Drive API.
Capabilities
- File access & discovery — search files, retrieve full content (Docs as Markdown, Sheets as CSV, Slides/text as plain text, binaries as base64), stream large files in byte-range chunks, download thumbnails, and inspect the full Drive tree.
- Upload & export — upload files to Drive from a URL (up to 25 MB, any non-Workspace type), download or export files in supported formats, and retrieve binary content for downstream processing.
- Folder & file management — create folders, move files/folders (including rename-in-place), rename files, and list or traverse the full Drive hierarchy.
- Permissions & sharing — share files with specific people, update roles, revoke individual or bulk access, change general/link-sharing access (public, domain, restricted), list all collaborators, and check file accessibility in batch before attempting reads.
- Picker integration — generate a Google-hosted file picker URL so users can grant per-file access without exposing credentials; batch pre-flight checks (
CheckFileAccess) identify which files need picker grants before any read attempt. - Account & environment info — retrieve the authenticated user's profile, email, storage quota, and list of shared drives with their IDs.
OAuth
This toolkit uses OAuth 2.0 via Google. See the Arcade Google auth provider docs for setup instructions.
Secrets
ENABLE_GOOGLE_DRIVE_INLINE_PICKER_URL
This secret controls whether CheckFileAccess and GenerateGoogleFilePickerUrl embed a ready-to-use Google Drive picker URL directly in their responses. When set, the toolkit constructs a picker URL scoped to the ungranted file IDs so the agent can hand the user a single link covering all missing grants in one step. Without it, the picker URL field is omitted and access grants must be handled separately.
This is not a credential issued by Google — it is a Arcade-side feature flag/configuration value. Set it in your Arcade secret store. The value format and how to obtain or configure it are documented in the Arcade secrets guide and dashboard:
- Secrets guide: https://docs.arcade.dev/en/guides/create-tools/tool-basics/create-tool-secrets
- Secrets dashboard: https://api.arcade.dev/dashboard/auth/secrets
Available tools(17)
| Tool name | Description | Secrets | |
|---|---|---|---|
Check whether this app can already read each of several Drive files, in one batched
pre-flight call, before attempting to read them.
Use this when the user references multiple files, to learn which are readable up front
instead of hitting a separate access error for each one. Where this app reaches files
one grant at a time, the ungranted ones can then be granted together in a single picker
step. Each input may be a bare file id or a full Google Drive/Workspace URL (documents,
spreadsheets, slides, PDFs, images, folders — any type).
Returns ``files`` (a per-id list with ``accessible``, the ``title`` and ``mime_type``
when the file was read, and a ``reason`` when not usable), ``all_accessible`` (true only
when every id is already accessible), ``connected_account_email`` (the connected Google
account, empty when unknown), and a ``grant`` block. ``grant`` lists the ungranted
ids (``ungranted_ids``) plus, when the inline picker is enabled, a single picker URL
covering them all. Where this app already reaches every file the account can open there
is no per-file grant to make, so ``ungranted_ids`` stays empty and only ``access_hint``
comes back.
A ``reason`` of ``not_accessible_or_not_found`` is a file this app cannot read: one not
granted to it yet, one that does not exist, or one the connected account itself cannot
open — indistinguishable here. Empty ``ungranted_ids`` means no grant
step exists, so treat those ids as not found rather than asking the user to grant them.
``invalid_reference`` is an input that is not a Drive id or link at all; ask the user to
re-check it. ``error`` is a transient server-side failure (a timeout or 5xx) that no
grant can fix; the same inputs may be retried later. | 1 | ||
Create a new folder in Google Drive.
By default, parent folder paths are resolved in My Drive. For shared drives, use folder IDs
or provide shared_drive_id. | 1 | ||
Download a byte range of a file's raw content from Google Drive, as base64.
The file preview reads files through this, and another tool that takes a file's bytes can
too. The user sees nothing it returns: when the user wants to see, save, download or export
a file, get the file instead, which is also how to read its text. Call repeatedly with
increasing start_byte values to retrieve the complete file. A Google Workspace file is
exported, and its ranges are ranges of the export.
Returns the chunk content as base64, along with progress information including
whether this is the final chunk. | 1 | ||
Download the thumbnail Google Drive made of a file, as a base64 encoded image.
The file preview shows thumbnails; the image comes back to you as base64 text, which you
can't view. A thumbnail pictures the first page of a document or a frame of a video,
up to 1600 pixels on its longer side. Google Drive makes them for most images, videos,
PDFs, Microsoft Office files and Google Workspace files. | 1 | ||
Generate a URL where the user can grant this app access to specific Drive files.
Check `url` first. An empty `url` means this app already reaches every file the
connected account can open, so there is no per-file grant to request: this tool cannot
change any outcome, and a file that could not be read is one the account itself cannot
open. Do not retry it.
Otherwise the URL opens Google's first-party Drive picker, where the user selects which
files to share with this application — it is not a sign-in or credential prompt. By
default the picker shows files of all types; pass ``file_types`` to restrict it to
specific types. Use this when a prior tool reported that a file was not found or access
was denied, and the user expects the file to exist. After the user completes the picker
flow, retry the prior tool. | |||
Get a Google Drive file: the user sees it in a preview where they can view it, save it,
or open it in Google Drive, and you get its details and its text, and its bytes when you
ask for them. Not every app shows the preview, so whenever the user wants the file, also
give them its download_link, or its web_view_link when that is null.
You get a Google Doc as Markdown, the first sheet of a Google Sheet as CSV, a Slides deck,
a Site or a text file as plain text, an Apps Script project as JSON, and the items in a
folder. With include_content, a file that isn't a Google Workspace file, such as an image,
a PDF or a Microsoft Office file, comes as base64 content when it's 5 MB or smaller; a
larger one downloads in byte ranges. The preview shows Docs, Sheets, Slides and Drawings as
PDFs and plays Google Vids videos. Files up to 20 MB can be saved from it, Google Workspace
files in any of their export formats and folders as a zip; larger files show Google Drive's
thumbnail and download from Google Drive. Use this whenever the user wants to see, open,
download, save, export, or get a file, and whenever you need to read one. | 1 | ||
Get the file/folder tree structure of the user's entire Google Drive.
Very inefficient for large drives. Use with caution. | 1 | ||
List permissions on a Google Drive file or folder.
Returns the individual people (and groups) with access and the current General access
(link sharing) state. `general_access` is computed across the ENTIRE file regardless of
filtering -- so "is this doc public?" is always answered authoritatively.
When `roles` is provided, `people` and `total_people` reflect only collaborators whose
role matches the filter. Truncated collaborators beyond `limit` are not returned;
`has_more` indicates whether truncation occurred. | 1 | ||
Move a file or folder to a different folder within the same Google Drive.
Can move to a folder (keeping name), or move and rename in one operation. By default, paths
are resolved in My Drive. For shared drives, use file IDs or provide shared_drive_id. | 1 | ||
Remove all user collaborators (and optionally groups) from a Google Drive file.
The file owner and the calling user are always preserved. Groups are preserved by default
because the Drive API cannot verify group membership -- pass include_groups=True to opt in.
Inherited shared-drive permissions are never removable from the file level and are skipped.
Use except_people to preserve additional people or groups by email or name. Ambiguous or
unmatched except_people entries raise an error to avoid accidentally removing someone the
caller meant to keep. | 1 | ||
Revoke access for specific people or groups on a Google Drive file.
Identifies matches by email (exact, case-insensitive) or display name. When an input
matches multiple people, the clear matches are still revoked and the ambiguous input is
surfaced in the `ambiguous` response field with candidate details so the agent can
re-prompt the user for just the uncertain ones. Inputs that don't match any collaborator
are returned in `not_found`. Pending-owner matches (mid-ownership-transfer) are skipped
and surfaced in `skipped_pending_owner` so the clean revokes in the batch still land.
Owner permissions cannot be revoked -- transfer ownership first.
When a grantee has both a direct and an inherited permission (e.g., shared-drive member
also granted directly on the file), revoking the direct row leaves the inherited access
intact. The inherited row is surfaced in `skipped_inherited` so callers don't assume the
grantee is fully removed -- inherited access must be adjusted at the shared drive level. | 1 | ||
Search for files in Google Drive.
The provided 'query' should only contain the search terms.
The tool will construct the full search query for you. | 1 | ||
Change the 'General access' (link sharing) setting on a Google Drive file.
Idempotent: calling with the same state as the current configuration is a no-op. When access
is 'domain', the link is scoped to the caller's email domain -- NOT the file owner's domain.
For cross-org collaboration (e.g., editing a file owned by another organization), confirm
with the user which domain they intend before calling. Google will reject domain sharing
for personal accounts (gmail.com, outlook.com, etc.) -- the tool translates that rejection
into a friendly error.
The response's `access` and `role` fields report the EFFECTIVE state after the transition,
not the requested state. For files on shared drives, inherited link permissions cannot be
changed from the file level -- if the request would have required removing an inherited
permission, the effective state will reflect the inherited permission that remained. When
`skipped_inherited` is non-empty, inspect it to understand why effective state may differ
from what was requested. | 1 | ||
Share a file or folder in Google Drive with specific people by granting them permissions.
If a user already has permission on the file, their role will be updated to the new role.
By default, paths are resolved in My Drive. For shared drives, use file IDs or provide
shared_drive_id. | 1 | ||
Rename a file or folder in Google Drive.
By default, paths are resolved in My Drive. For files in shared drives, either use the file ID
directly or provide the shared_drive_id parameter. | 1 | ||
Upload a file to Google Drive from a URL.
Fetches the file content from the provided URL and uploads it to Google Drive.
Supports files of any size - uses resumable upload internally for large files.
CANNOT upload Google Workspace files (Google Docs, Sheets, Slides)
CANNOT upload files larger than 25MB | 1 | ||
Get comprehensive user profile and Google Drive environment information.
This tool provides detailed information about the authenticated user including
their name, email, profile picture, Google Drive storage information, the shared
drives (and their IDs) the user has access to, and other
important profile details from Google services. |