Skip to main content
Glama

Upload to Drive

drive_upload

Upload local files or folders to Proton Drive with end-to-end encryption; folders upload recursively and conflicting items can skip, merge, rename, or replace.

Instructions

Upload a local file or folder to Proton Drive with end-to-end encryption; folders upload recursively. Returns {uploaded, skipped, failed} counts and fails the call if failed > 0 (e.g. quota exceeded, destination not found). File and folder conflict strategies are separate (CLI v0.8.0+), both default to 'skip'. The destination folder must exist (drive_mkdir creates it). To write text directly use drive_write_file. Requires confirmed=true when fileConflictStrategy or folderConflictStrategy is 'replace' (it trashes the existing remote item).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
confirmedNoMust be true; only after the user approved this exact action.
localPathYesAbsolute local path of the file or folder to upload.
remotePathYesAbsolute remote destination folder, e.g. /my-files/Reports.
fileConflictStrategyNo'skip' keeps the existing remote file (default). 'create-new-revision' uploads as a new version, keeping history. 'rename' uploads under a unique name. 'replace' trashes the remote file first — confirm with user.
folderConflictStrategyNo'skip' keeps the existing remote folder (default). 'merge' merges contents into it. 'rename' uploads under a unique name. 'replace' trashes the remote folder first — confirm with user.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv1.2.0
    • changedInput schema / properties / confirmed / description
      Previous value: -"Must be true. Only set after the user explicitly approved this exact action."New value: +"Must be true; only after the user approved this exact action."
    • changedInput schema / properties / fileConflictStrategy / description
      Previous value: -"'skip' leaves an existing remote file unchanged (default). 'create-new-revision' uploads as a new version of the existing file, keeping history. 'rename' adds a unique suffix to the uploaded file's name. 'replace' trashes the remote file and uploads the local copy in its place — confirm with user first."New value: +"'skip' keeps the existing remote file (default). 'create-new-revision' uploads as a new version, keeping history. 'rename' uploads under a unique name. 'replace' trashes the remote file first — confirm with user."
    • changedInput schema / properties / folderConflictStrategy / description
      Previous value: -"'skip' leaves an existing remote folder unchanged (default). 'merge' merges the uploaded folder's contents into the existing one. 'rename' adds a unique suffix to the uploaded folder's name. 'replace' trashes the remote folder and uploads the local copy in its place — confirm with user first."New value: +"'skip' keeps the existing remote folder (default). 'merge' merges contents into it. 'rename' uploads under a unique name. 'replace' trashes the remote folder first — confirm with user."
    • changedInput schema / properties / localPath / description
      Previous value: -"Absolute local filesystem path of the file or folder to upload (must start with '/')."New value: +"Absolute local path of the file or folder to upload."
    • changedInput schema / properties / remotePath / description
      Previous value: -"Absolute remote Drive destination folder path (must start with '/'). E.g. /my-files/Reports"New value: +"Absolute remote destination folder, e.g. /my-files/Reports."
  2. Changed1 schema field changedv1.0.38
    • addedInput schema / properties / confirmed
      Added value: +{
      +  "description": "Must be true. Only set after the user explicitly approved this exact action.",
      +  "type": "boolean"
      +}
  3. Changed3 schema fields changedv1.0.32
    • removedInput schema / properties / conflictStrategy
      Removed value: -{
      -  "description": "'skip' leaves existing remote files unchanged (default). 'replace' permanently overwrites the remote file — confirm with user first. 'keep-both' uploads with a unique name to avoid conflicts. 'merge' merges folder contents instead of failing (folders only).",
      -  "enum": [
      -    "skip",
      -    "replace",
      -    "keep-both",
      -    "merge"
      -  ],
      -  "type": "string"
      -}
    • addedInput schema / properties / fileConflictStrategy
      Added value: +{
      +  "description": "'skip' leaves an existing remote file unchanged (default). 'create-new-revision' uploads as a new version of the existing file, keeping history. 'rename' adds a unique suffix to the uploaded file's name. 'replace' trashes the remote file and uploads the local copy in its place — confirm with user first.",
      +  "enum": [
      +    "skip",
      +    "create-new-revision",
      +    "rename",
      +    "replace"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / folderConflictStrategy
      Added value: +{
      +  "description": "'skip' leaves an existing remote folder unchanged (default). 'merge' merges the uploaded folder's contents into the existing one. 'rename' adds a unique suffix to the uploaded folder's name. 'replace' trashes the remote folder and uploads the local copy in its place — confirm with user first.",
      +  "enum": [
      +    "skip",
      +    "merge",
      +    "rename",
      +    "replace"
      +  ],
      +  "type": "string"
      +}
  4. Changed2 schema fields changedv1.0.28
    • changedInput schema / properties / conflictStrategy / description
      Previous value: -"'skip' leaves existing remote files unchanged (default). 'overwrite' permanently replaces the remote file — confirm with user first. 'rename' uploads with a unique name to avoid conflicts."New value: +"'skip' leaves existing remote files unchanged (default). 'replace' permanently overwrites the remote file — confirm with user first. 'keep-both' uploads with a unique name to avoid conflicts. 'merge' merges folder contents instead of failing (folders only)."
    • changedInput schema / properties / conflictStrategy / enum
      Previous value: -[
      -  "skip",
      -  "overwrite",
      -  "rename"
      -]New value: +[
      +  "skip",
      +  "replace",
      +  "keep-both",
      +  "merge"
      +]
  5. Changed3 schema fields changedv0.1.2
    • changedInput schema / properties / conflictStrategy / description
      Previous value: -"What to do if the file already exists. Default: skip."New value: +"'skip' leaves existing remote files unchanged (default). 'overwrite' permanently replaces the remote file — confirm with user first. 'rename' uploads with a unique name to avoid conflicts."
    • changedInput schema / properties / localPath / description
      Previous value: -"Absolute local path to upload."New value: +"Absolute local filesystem path of the file or folder to upload (must start with '/')."
    • changedInput schema / properties / remotePath / description
      Previous value: -"Remote Drive destination path. E.g. /my-files/Reports"New value: +"Absolute remote Drive destination folder path (must start with '/'). E.g. /my-files/Reports"
  6. First observedv0.1.0

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare openWorldHint and destructiveHint=false; the description adds substantial behavior beyond them — return shape {uploaded, skipped, failed}, failure on failed>0 with quota/destination-not-found examples, separate file/folder conflict defaults of 'skip', and the fact that 'replace' trashes the existing remote item. It does not cover permissions or progress/partial-failure nuance, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose first, then return/failure semantics, then conflict strategies, then the confirm gate. Every sentence carries information, though the density (multiple parentheticals and semicolon clauses) makes it slightly heavier than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description supplies the return shape and failure condition; the confirmation prerequisite, destination-folder requirement, and conflict-strategy defaults are all stated. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds a cross-parameter relationship the schema does not state — that fileConflictStrategy and folderConflictStrategy are distinct (CLI v0.8.0+), both defaulting to 'skip', and that 'replace' triggers the confirmed=true requirement. That coupling is genuine added meaning beyond the per-field enum docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Upload a local file or folder to Proton Drive') with scope details (recursive folders, end-to-end encryption). It also distinguishes itself from siblings drive_write_file (text) and drive_mkdir (destination creation), so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names alternatives and the conditions that select them: use drive_write_file for text, drive_mkdir to create the destination, and require confirmed=true when a conflict strategy is 'replace'. Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.