Proton Drive MCP
This server gives Claude (or any MCP client) full control over Proton Drive and Proton Photos, with end-to-end encryption handled by Proton's CLI.
Drive file operations: list, inspect, create folders, upload, download, rename, move, copy, and delete (permanent, from trash only).
Trash management: list trash, move items to trash, restore items, and empty the entire trash.
Sharing & collaboration: check share status, invite users (viewer/editor/admin), revoke access, remove all members, create/update/remove public share links, list/accept/reject invitations, and leave shared folders.
Auth & diagnostics: check authentication status, log out, and get CLI/SDK version info.
Photos albums: list, create, rename/update cover, delete albums, list album photos, add/remove photos from albums.
Photos library: list timeline (with optional details), download photos, and upload local photos/videos.
Local sync integration (if
PROTON_DRIVE_SYNC_PATHset): read text file contents and write text files to the synced folder.Automation & scripting: All tools are also available as CLI commands, making it scriptable for backups, cron jobs, and shell pipelines.
Provides tools for managing files and folders on Proton Drive, including listing, uploading, downloading, moving, deleting, sharing, and trash operations with end-to-end encryption.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Proton Drive MCPList files in /my-files"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
____ ____ ___ _____ ___ _ _ ____ ____ _____ _______
| _ \| _ \ / _ \_ _/ _ \| \ | | | _ \| _ \|_ _\ \ / / ____|
| |_) | |_) | | | || || | | | \| | | | | | |_) || | \ \ / /| _|
| __/| _ <| |_| || || |_| | |\ | | |_| | _ < | | \ V / | |___
|_| |_| \_\\___/ |_| \___/|_| \_| |____/|_| \_\___| \_/ |_____|
MCP server and CLI · Full Proton Drive control for Claude
Give Claude Desktop (or any MCP client) full access to your Proton Drive and Proton Photos: list folders, upload and download files, invite collaborators, manage sharing, handle trash, and manage photo albums — all with end-to-end encryption intact. The same capabilities are available as a full CLI for scripting, backups, and cron.
What you get
Claude manages your Proton Drive — list, upload, download, move, share, trash, restore
Proton Photos album management — list albums, create/delete albums, add and remove photos
Full CLI — same 38 operations, scriptable and pipeable, works in cron and shell scripts
100% CLI coverage — every scriptable Proton Drive CLI command has a matching tool (verified against the CLI's own source;
auth loginis the one command excluded, since it's an interactive browser flow)Zero credential exposure — auth is handled entirely by the official Proton Drive CLI; this MCP never touches your password or session token
Shell injection safe — all CLI calls use
execFilewith discrete argument arrays, never string interpolationPrivacy-native — end-to-end encryption is handled by Proton's own CLI; this server is just a thin MCP wrapper
Related MCP server: vulcan-file-ops
Privacy model
Your files travel: Proton Drive (cloud, E2E encrypted) → Proton Drive CLI (local, decrypts) → this MCP server (local) → your AI client.
The Proton Drive CLI handles all cryptography locally. This MCP server calls the CLI as a subprocess and forwards results — it never receives your password, never stores credentials, and never touches the raw encrypted data. Authentication state lives in your OS keychain (macOS Keychain, Windows Credential Manager, Linux libsecret), managed exclusively by the official Proton CLI.
If you use Claude Desktop with the default Anthropic API, file content you ask Claude to act on is sent to Anthropic per their privacy policy.
Prerequisites
1. Proton Drive CLI — download from proton.me/download/drive/cli and add to your PATH.
2. Authenticate the CLI — run once in your terminal:
proton-drive auth loginThis opens a browser for Proton's standard sign-in flow. Credentials are stored in your OS keychain — not on disk, not in config files.
3. Node.js 20 or later — node --version to check.
Install
Via npx (no install needed):
# Used directly in Claude Desktop config — no global install required
npx -y proton-drive-mcpGlobal install:
npm install -g proton-drive-mcpConnect to Claude Desktop
Add to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"proton-drive": {
"command": "npx",
"args": ["-y", "proton-drive-mcp"]
}
}
}Restart Claude Desktop. Check + → Connectors → proton-drive to confirm the server is connected.
Tip: Make sure
proton-drive auth loginhas been run at least once before starting Claude Desktop.
If installed globally
{
"mcpServers": {
"proton-drive": {
"command": "proton-drive-mcp"
}
}
}Try it: example Claude prompts
Backup a build artifact
"Upload ./dist/app-v2.zip to /my-files/Releases and tell me if it succeeded."
Morning file triage
"List everything in /my-files. Tell me what's larger than 10MB and what was modified most recently."
Share a folder with a colleague
"Share /my-files/Q2-Reports with alice@proton.me as editor. Add a message: 'Please review before Friday.'"
Offboarding
"Revoke bob@company.com's access from /my-files/Projects and /shared/Design. Confirm when done."
Automated download
"Download /my-files/contracts/nda-2026.pdf to ~/Documents/Legal/."
Trash cleanup
"List what's in the trash and empty it once I confirm."
CLI
proton-drive-cli <command> [args]Auth & info
proton-drive-cli auth status # probes /my-files; the CLI has no dedicated status command
proton-drive-cli auth logout # log out (clears OS keychain session)
proton-drive-cli version # CLI and SDK versionFiles & folders
proton-drive-cli list /my-files
proton-drive-cli list /my-files/Reports
proton-drive-cli info /my-files/report.pdf # full metadata, incl. revision details
proton-drive-cli mkdir /my-files/NewFolder
proton-drive-cli upload ./report.pdf /my-files/Reports
proton-drive-cli upload ./dist /my-files/Releases --file-conflict replace --folder-conflict merge
proton-drive-cli download /my-files/report.pdf ./local/report.pdf
proton-drive-cli download /my-files/Reports ./local/Reports --file-conflict rename --folder-conflict merge
proton-drive-cli rename /my-files/old-name.pdf new-name.pdf # in place, no move
proton-drive-cli move /my-files/old-name.pdf /my-files/new-name.pdf
proton-drive-cli copy /my-files/report.pdf /my-files/Archive
proton-drive-cli delete /trash/obsolete-draft.pdf --confirm # only works on items already in trash
# Machine-readable output (pipe-friendly)
proton-drive-cli list /my-files --json | jq '.[].name'Sharing
proton-drive-cli share status /my-files/Reports
proton-drive-cli share invite /my-files/Reports alice@pm.me editor
proton-drive-cli share invite /my-files/Reports bob@pm.me viewer --message "FYI"
proton-drive-cli share revoke /my-files/Reports alice@pm.me
proton-drive-cli share remove-all /my-files/Reports --confirm # strip every member + pending invite
proton-drive-cli share set-url /my-files/Reports --role viewer --expiration 2026-06-06
proton-drive-cli share remove-url /my-files/ReportsTrash
proton-drive-cli trash /my-files/old-draft.pdf # move to trash
proton-drive-cli trash list # see what's in trash
proton-drive-cli restore /my-files/old-draft.pdf # restore from trash
proton-drive-cli trash empty --confirm # permanently delete all trashed itemsPhotos
proton-drive-cli album list
proton-drive-cli album create "Summer 2026"
proton-drive-cli album update /albums/Summer2026 --name "Summer Trip"
proton-drive-cli album add-photo /albums/Summer2026 /photos/IMG_001.jpg
proton-drive-cli photo timeline
proton-drive-cli photo download /photos/IMG_001.jpg ./local/photos --conflict rename
proton-drive-cli photo upload ./camera-roll --conflict skipPipe and script
# Backup build output after CI
proton-drive-cli upload ./dist /my-files/Releases/$(date +%Y-%m-%d) --file-conflict rename --folder-conflict rename
# Download all contracts for audit
proton-drive-cli download /my-files/Contracts ./audit/contracts
# Nightly backup via cron
0 2 * * * proton-drive-cli upload ~/Documents /my-files/Backups/$(date +%Y-%m-%d) --file-conflict skip --folder-conflict skip
# Check who has access before a team change
proton-drive-cli share status /my-files/ProjectsTool surface
Auth
drive_auth_status · drive_auth_logout · drive_version
Filesystem
drive_list · drive_info · drive_mkdir · drive_upload · drive_download · drive_rename · drive_move · drive_delete
Sharing
drive_share_status · drive_share_invite · drive_share_revoke · drive_share_remove_all · drive_share_set_url · drive_share_remove_url
Trash
drive_list_trash · drive_trash · drive_restore · drive_empty_trash
Local sync (requires PROTON_DRIVE_SYNC_PATH)
drive_read_file · drive_write_file
Copy
drive_copy
Invitations
drive_list_invitations · drive_invitation_accept · drive_invitation_reject · drive_share_leave
Photos
photos_list_albums · photos_create_album · photos_update_album · photos_delete_album · photos_list_album_photos · photos_add_to_album · photos_remove_from_album · photos_list_timeline · photos_download · photos_upload
Tool reference
Tool | Description | Key parameters |
| Check if authenticated (probes | — |
| Log out (clear session) ⚠️ |
|
| CLI and SDK version info | — |
| List files and folders at a path (paginated, default 200; |
|
| Get metadata for one file/folder, including revision details (noise trimmed) |
|
| Create a new empty folder |
|
| Upload local file or folder |
|
| Download to local path |
|
| Rename in place, no move |
|
| Move and/or rename |
|
| Copy file or folder into another Drive folder |
|
| Permanently delete an item already in trash ⚠️ |
|
| List items currently in trash (paginated, default 100; includes |
|
| Get sharing members and URL |
|
| Invite a user (sends an email) ⚠️ |
|
| Revoke one person's access (fails if not a member) ⚠️ |
|
| Remove every member + pending invitation at once ⚠️ |
|
| Create/replace a public share link ⚠️ (re-running without |
|
| Remove the public share link ⚠️ |
|
| Move to trash |
|
| Restore from trash |
|
| Permanently delete all trash ⚠️ |
|
| Read text file from local sync folder |
|
| Write text file to local sync folder ⚠️ (overwriting an existing file needs confirmation; max 5 MB) |
|
| List pending sharing invitations received | — |
| Accept a pending invitation |
|
| Reject a pending invitation ⚠️ |
|
| Leave a shared folder shared with you ⚠️ |
|
| List all Proton Photos albums | — |
| Create a new empty album |
|
| Rename an album or change its cover photo |
|
| Delete an album ⚠️ |
|
| List photos in an album (paginated, default 100) |
|
| Add a photo from your library to an album |
|
| Remove a photo from an album (keeps it in library) ⚠️ |
|
| List photos in your full library timeline (paginated, default 50) |
|
| Download photos to a local folder |
|
| Upload local files directly into your Photos library |
|
⚠️ Destructive and outward-facing tools (deleting, sharing, public links, logout, and the
replace/removeconflict strategies) requireconfirmed: true, and the CLI requires--confirmfor the destructive ones. Describe the action to the user first, then passconfirmed: true. Tool arguments are validated against the published schema — unknown or mistyped arguments are rejected.
Compared with other Drive MCPs
Capability | Generic S3/GDrive MCPs | proton-drive-mcp |
End-to-end encryption | No | Yes (via Proton CLI) |
Credential exposure | API keys in config | Zero — OS keychain only |
Sharing & invitations | Rarely | Full (invite, revoke, status) |
Trash & restore | Rarely | Full |
CLI parity | No | The CLI mirrors every MCP tool except |
Shell injection safe | Varies | Yes — |
Operational notes
Long listings are paginated (
limit/offset, response{total, offset, limit, hasMore, items}) to keep responses small. Responses are compact JSON.Local paths passed to upload/download/photos tools are checked: credential locations (
~/.ssh,~/.aws,~/.gnupg,~/.claude*, keychains,.envfiles, …) are refused. SetPROTON_DRIVE_LOCAL_ROOTto allow only specific directories.The sync-folder tools (
drive_read_file/drive_write_file) refuse to follow symlinks out ofPROTON_DRIVE_SYNC_PATH.Error messages come from the CLI's own output; the command line (and therefore any
--password) is never echoed back.drive_moveaccepts a full destination path (parent + new name) for a familiar interface, but the underlying CLI only has separatemove(change parent) andrename(change name) commands — this MCP translates automatically, issuing one or both as needed.drive_deleteonly works on items already in/trashor/photos-trash— the CLI rejects live paths. Trash an item first withdrive_trash, or usedrive_empty_trashto clear everything at once.drive_auth_statushas no native CLI equivalent — it probes by resolving/my-filesand reports authenticated based on whether that succeeds.Paths are always Drive-absolute:
/my-files/folder/file.pdf. Relative paths are not supported.All calls include
--jsonautomatically, exceptdrive_version, whose underlying CLI command ignores--jsonand always prints plain text — this MCP parses it directly.
Environment variables
Variable | Required | Description |
| Optional | Absolute path to your local Proton Drive sync folder root (e.g. |
| Optional | Override the |
| Optional | Path-delimiter-separated list of local directories that upload/download/photos tools may touch. Unset = any path except the built-in credential denylist. |
| Optional | Set to |
Troubleshooting
"PROTON_DRIVE_SYNC_PATH is not set"
Add "PROTON_DRIVE_SYNC_PATH": "/absolute/path/to/your/Proton Drive" to your Claude Desktop MCP config env block. The path must point to the root folder that the Proton Drive desktop app syncs to.
"proton-drive CLI not found"
Download from proton.me/download/drive/cli and ensure the binary is in your PATH. Verify with which proton-drive.
"Not authenticated"
Run proton-drive auth login in your terminal. Auth state is stored in your OS keychain and persists across sessions.
Claude can't see the connector
Restart Claude Desktop fully after changing the MCP config. Check + → Connectors → proton-drive. The Proton Drive CLI must be in the PATH that Claude Desktop inherits (on macOS this may differ from your shell PATH — use the full binary path in config if needed).
Upload fails on image files
The CLI generates WebP thumbnails by default using Bun's image API. If Bun isn't installed or doesn't support thumbnails on your platform, the MCP passes --skip-thumbnails to bypass this. No action needed.
Custom binary path
If the proton-drive binary is installed under a non-standard name or location, set PROTON_DRIVE_BIN in your environment:
PROTON_DRIVE_BIN=/usr/local/bin/proton-drive npx proton-drive-mcpOr in Claude Desktop config:
{
"mcpServers": {
"proton-drive": {
"command": "npx",
"args": ["-y", "proton-drive-mcp"],
"env": { "PROTON_DRIVE_BIN": "/usr/local/bin/proton-drive" }
}
}
}Windows PATH issues
Use the full path to the proton-drive.exe binary in your Claude Desktop config if npx can't find it:
{
"mcpServers": {
"proton-drive": {
"command": "C:\\path\\to\\proton-drive-mcp.cmd"
}
}
}Development
git clone https://github.com/googlarz/proton-drive-mcp.git
cd proton-drive-mcp
npm install
npm run build
npm testChangelog
See CHANGELOG.md for release history.
Contributing
Bug reports and pull requests welcome: github.com/googlarz/proton-drive-mcp/issues
License
MIT
Available Tools
38 toolsdrive_auth_logoutADestructiveIdempotent
Clear the stored Proton Drive session from the OS keychain. After logout all file and sharing operations will fail until the user runs proton-drive auth login again. Use on shared machines to prevent session persistence. Do not call during an active workflow — it will break all subsequent drive_* calls. Idempotent: safe to call even if already logged out. Requires confirmed=true — describe the action to the user and get their explicit OK first.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Must be true. Only set after the user explicitly approved this exact action. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare idempotentHint=true and destructiveHint=true. The description reinforces and expands on these by explicitly stating the destructive consequence ('all file and sharing operations will fail until the user runs auth login again') and the idempotent nature ('Idempotent: safe to call even if already logged out'). It also discloses the requirement for user confirmation before invocation, which is a critical behavioral trait not captured by annotations alone. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with every sentence adding critical information. It front-loads the core action ('Clear the stored session') followed by consequences, usage context, a cautionary note, and the prerequisite. There is no wasted or redundant language, and the structure flows logically from what the tool does, to when to use it, to how to invoke it safely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema, the description adequately covers what happens after invocation (operations fail until re-login) and the safety caveat. It also addresses the key contextual aspects: user confirmation, idempotency, and the impact on subsequent operations. For a tool with a single boolean parameter and destructive action, this is comprehensive and leaves no gaps for an agent to fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes the 'confirmed' parameter fully with the requirement that it must be true and only set after user approval. The description adds value by explicitly tying this parameter to the workflow ('Requires confirmed=true') and explaining why it's necessary. While the schema covers 100% of the parameter semantics, the description reinforces the mandatory nature and user-interaction precondition, which justifies a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: clearing the stored Proton Drive session from the OS keychain. It uses a specific verb ('Clear') and resource ('session'), which distinguishes it from other drive_* tools. It also explicitly mentions the consequence of logout (all file and sharing operations fail) and provides an idempotency hint, ensuring an agent knows exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use on shared machines to prevent session persistence.' It also states when not to use it: 'Do not call during an active workflow — it will break all subsequent drive_* calls.' Furthermore, it specifies a prerequisite: 'Requires confirmed=true — describe the action to the user and get their explicit OK first.' This is comprehensive and leaves no room for misinterpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_auth_statusARead-onlyIdempotent
Check whether the Proton Drive CLI has an active authenticated session. Returns {authenticated: boolean}. The underlying CLI has no dedicated status command — this probes by resolving /my-files, which makes a real (lightweight) call. Use before any file operation when you need to confirm the session is valid — all other drive_* tools (except drive_version) require authentication. Does not expose the signed-in account's email — the CLI provides no way to query it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, but the description adds deeper behavioral context: it explains the underlying CLI has no dedicated status command, that probing by resolving /my-files makes a real (lightweight) call, and that it does not expose the account email. This goes beyond annotations and helps the agent anticipate side effects and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: purpose/return, implementation detail (probe via /my-files), and usage guidance. It is front-loaded with the core purpose and avoids redundancy with schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-parameter tool with strong annotations and an explicit return description, this is fully complete. It covers what the tool does, how it works, when to use it, and a key limitation (no email exposure). No important context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100% (vacuously). The description adds no parameter detail because none exists. Per the rubric, 0 parameters yields a baseline of 4, and the description appropriately avoids inventing parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb+resource: 'Check whether the Proton Drive CLI has an active authenticated session.' It clearly distinguishes the tool from siblings by explaining it is the auth-status check, and it also specifies the return shape ({authenticated: boolean}). This is unambiguous and unique among the listed drive_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use before any file operation when you need to confirm the session is valid — all other drive_* tools (except drive_version) require authentication.' This states when to use it and implies when not to (before drive_version). It also notes the CLI lacks a dedicated status command, so the probing behavior is explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_copyA
Copy a file or folder to another location on Proton Drive. Requires authentication. The original is preserved — this is not a move. destinationPath is the target PARENT folder (unlike drive_move, which takes a full new path). Pass newName to copy under a different name — required to duplicate an item inside its own folder. Use drive_move when you want to relocate without keeping the original. Do not use to duplicate large folder trees without user awareness of the storage cost.
| Name | Required | Description | Default |
|---|---|---|---|
| newName | No | Optional name for the copy (CLI --name). Required to copy an item into its own folder. | |
| sourcePath | Yes | Absolute remote Drive path of the file or folder to copy (must start with '/'). E.g. /my-files/report.pdf | |
| destinationPath | Yes | Absolute remote Drive path of the target parent folder (must start with '/'). E.g. /my-files/Archive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false and idempotentHint=false. The description adds valuable behavioral context beyond annotations: the original is preserved, destinationPath is a parent folder rather than a full path, authentication is required, and copying large folder trees has storage-cost implications. It does not mention overwrite or failure behavior if the destination exists, but the added context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and uses every sentence for a distinct purpose: action, non-move guarantee, destination semantics, newName condition, sibling alternative, and storage-cost caution. It is slightly longer than strictly necessary because 'Requires authentication' is likely true for all sibling tools, but it remains well-structured and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a copy tool with three well-documented parameters, the description covers the main operation, sibling differentiation, parameter nuances, and a practical caveat. It lacks explicit detail on what happens when the destination already exists or whether folder copies are recursive, but those are not critical for basic correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning beyond the schema by clarifying that destinationPath is the target PARENT folder unlike drive_move, and by reinforcing that newName is required for same-folder duplication. This extra sibling distinction raises it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Copy a file or folder to another location on Proton Drive.' It explicitly differentiates from drive_move by stating 'The original is preserved — this is not a move' and notes the destinationPath semantic difference, so an agent can distinguish sibling tools clearly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Use drive_move when you want to relocate without keeping the original.' It also explains when newName is required and warns against duplicating large folder trees without user awareness, providing both alternatives and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_deleteADestructive
Permanently delete a file or folder that is already in the Proton Drive trash — irreversible. Requires authentication. The underlying CLI only allows permanent deletion of items already inside /trash or /photos-trash; it rejects live paths. Use drive_trash first to move a live item into trash, then pass its trash path here — or drive_empty_trash to clear everything at once. Requires confirmed=true; always show the exact path to the user and get explicit confirmation before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute remote Drive path to permanently delete (must start with '/'). | |
| confirmed | Yes | Must be true. Confirms the user has acknowledged this deletion is permanent and cannot be undone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses irreversibility, authentication requirements, rejection of live paths, the confirmed=true requirement, and instructs to always show the exact path and get explicit confirmation. These are significant behavioral traits not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and irreversibility flag, then covers prerequisites, alternatives, and safety. Every sentence adds value; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers the operation's purpose, prerequisites (must be in trash), alternatives, required confirmation, and safety signal. It is complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving baseline 3. The description adds meaning by clarifying that 'path' must be a trash path (not a live one) and that 'confirmed' must be true, plus the instruction to show the path to the user. This elevates the parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Permanently delete a file or folder that is already in the Proton Drive trash'. It clearly distinguishes from siblings like drive_trash (moves to trash) and drive_empty_trash (clears all trash) by scoping to already-trashed items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Use drive_trash first to move a live item into trash, then pass its trash path here — or drive_empty_trash to clear everything at once.' It also states that live paths are rejected, and requires confirmed=true, providing clear when-to-use and when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_downloadADestructive
Download a file or folder from Proton Drive to the local filesystem. Requires authentication. localPath is a destination FOLDER, not the file's exact final path — the CLI creates it automatically if missing and places the downloaded item inside it under its original remote name. E.g. downloading /my-files/report.pdf with localPath '/tmp/out' produces /tmp/out/report.pdf, not /tmp/out itself as a file — confirmed live against the real CLI (v0.8.0). For folders, downloads recursively. Conflict strategies are set separately for files and folders (CLI v0.8.0+) — both default to 'skip'. Returns {downloaded, skipped, failed} counts — not the actual local path; construct it as localPath + the remote item's basename if you need it. Fails the call if any file failed to download. Do not use to move files within Drive (use drive_move) or to read a small text file's contents (use drive_read_file if PROTON_DRIVE_SYNC_PATH is set). Also requires confirmed=true when fileConflictStrategy or folderConflictStrategy is 'remove' (it deletes the existing LOCAL file or folder).
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Must be true. Only set after the user explicitly approved this exact action. | |
| localPath | Yes | Absolute local DESTINATION FOLDER (must start with '/'), not the file's final path. Created automatically if it doesn't exist. The downloaded item is placed inside it, keeping its original remote name. | |
| remotePath | Yes | Absolute remote Drive path to download (must start with '/'). E.g. /my-files/report.pdf | |
| fileConflictStrategy | No | 'skip' leaves an existing local file unchanged (default). 'rename' downloads under a unique name. 'remove' deletes the local file and downloads the remote copy in its place — confirm with user first. | |
| folderConflictStrategy | No | 'skip' leaves an existing local folder unchanged (default). 'merge' merges the downloaded folder's contents into the existing one. 'rename' downloads under a unique name. 'remove' deletes the local folder and downloads the remote copy in its place — confirm with user first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses a wealth of behavioral details: localPath is a destination folder, the item is renamed to its remote basename, downloads are recursive, conflict strategies have defaults, the call fails if any file fails, confirmed=true is required for 'remove', and the return value is only counts rather than the actual path. It also notes live verification against CLI v0.8.0, adding confidence. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place. It is front-loaded with purpose, then flows through path semantics, recursion, conflict strategies, return behavior, failure semantics, and exclusions. The length is justified by the tool's complexity and the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a download tool with 5 parameters, no output schema, and destructive conflict strategies, this description is remarkably complete. It covers prerequisites, side effects, path construction, return values, failure behavior, and alternative tools. An agent has enough context to invoke it correctly and set user expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds meaning well beyond the schema: it explains that localPath is a destination folder rather than a file path, provides a concrete example of resulting paths, clarifies default conflict strategies, and specifies when confirmed is mandatory. This materially improves an agent's ability to set parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Download a file or folder from Proton Drive to the local filesystem.' It also explicitly differentiates from siblings by naming drive_move and drive_read_file as alternatives for other intents, so an agent can tell exactly what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage boundaries: 'Do not use to move files within Drive (use drive_move) or to read a small text file's contents (use drive_read_file...).' It also explains when confirmed=true is required, which is critical for the destructive conflict strategies. This is strong when-to-use vs alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_empty_trashADestructive
Permanently delete ALL items in the Proton Drive trash — irreversible, no recovery. Requires authentication. Requires confirmed=true. Always call drive_list_trash first to show the user exactly what will be deleted, then ask for explicit confirmation. Do not call if the user only wants to delete specific items — use drive_delete or drive_trash for individual files.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | Yes | Must be true. Confirms the user has reviewed the trash contents and acknowledged this action is permanent and irreversible. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true; description adds critical details: irreversible, no recovery, and requires explicit confirmation. Provides workflow guidance beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with key action and constraints, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple tool with one parameter: covers purpose, prerequisites, safety, workflow, and alternatives. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; the description adds context that confirmed must be true after user review, reinforcing the safety requirement beyond the schema's 'Must be true'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it permanently deletes all trash items, is irreversible, and distinguishes from individual deletion tools like drive_delete and drive_trash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (after listing trash and getting user confirmation) and when not to (for specific items, use siblings). Also lists prerequisites: authentication and confirmed=true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_infoARead-onlyIdempotent
Get full metadata for a single Proton Drive file or folder, including latest revision details. Requires authentication. Returns the node with verification wrappers unwrapped and duplicate/noise fields dropped (pass verbose=true for the raw CLI node, whose exact shape is not guaranteed). Use when you need details drive_list doesn't return (e.g. revision info) for one specific known path. Do not use to enumerate a folder's children — use drive_list instead.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute remote Drive path to inspect (must start with '/'). E.g. /my-files/report.pdf | |
| verbose | No | Return the raw CLI node instead of the trimmed one (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds real value on top: the authentication requirement and the output-shape behavior (verification wrappers unwrapped, duplicate/noise fields dropped, verbose=true yields the raw CLI node whose exact shape is not guaranteed). This gives the agent expectations for what a successful call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each earning its place: purpose, auth, return behavior, when-to-use, and exclusion. Slightly dense but properly front-loaded with the purpose and scoping before the alternative routing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a metadata-read tool with only 2 well-documented params and read-only/idempotent annotations. The description covers purpose, authentication, return shape behavior, and usage boundaries. The exact fields of the trimmed node are not enumerated, but that is acceptable since the raw shape is explicitly 'not guaranteed' anyway.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters clearly. The description reinforces the verbose behavior (raw CLI node vs trimmed) but adds little meaning beyond what the schema states. Baseline 3 is appropriate when the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get full metadata for a single Proton Drive file or folder, including latest revision details.' It also distinguishes itself from the sibling drive_list by naming it directly, so an agent can tell the two apart without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the trigger condition ('Use when you need details drive_list doesn't return (e.g. revision info) for one specific known path') and names the alternative plus an exclusion ('Do not use to enumerate a folder's children — use drive_list instead'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_invitation_acceptA
Accept a pending Proton Drive sharing invitation. Requires authentication. Get the invitation uid from drive_list_invitations first. The shared folder becomes accessible in your Drive after accepting. Do not guess the uid — always fetch it from drive_list_invitations.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Invitation UID from drive_list_invitations output. E.g. 'drive:abc123' or 'photos:xyz456'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide destructiveHint=false, so the description adds value by stating authentication requirements, the outcome (folder becomes accessible), and the caution to always fetch the uid from drive_list_invitations. This goes beyond the annotation and gives useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the purpose, and every sentence serves a clear function: stating the action, mentioning authentication, giving instructions, and warning against guessing. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers prerequisites, authentication, outcome, and a caution. It doesn't explain error cases or edge conditions, but given the absence of an output schema and the low complexity, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the uid parameter as 'Invitation UID from drive_list_invitations output' with examples, providing 100% coverage. The description reinforces this by saying not to guess the uid, but it doesn't add new semantic information beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Accept a pending Proton Drive sharing invitation.' It uses a specific verb ('accept') and resource ('sharing invitation'), and it distinguishes itself from sibling tools like drive_invitation_reject and drive_list_invitations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool by instructing to get the invitation uid from drive_list_invitations first. It also warns against guessing the uid, reinforcing the prerequisite. It doesn't explicitly mention alternatives like reject, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_invitation_rejectADestructive
Reject a pending Proton Drive sharing invitation. Requires authentication. Get the invitation uid from drive_list_invitations first. The invitation is permanently declined — the sender is not notified. Do not guess the uid — always fetch it from drive_list_invitations. Requires confirmed=true — describe the action to the user and get their explicit OK first.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Invitation UID from drive_list_invitations output. E.g. 'drive:abc123' or 'photos:xyz456'. | |
| confirmed | No | Must be true. Only set after the user explicitly approved this exact action. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that the decline is permanent, that the sender is not notified, and that user confirmation is required before proceeding. These are exactly the behavioral details an agent needs for a destructive action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight, front-loads purpose, and packs in prerequisites, permanence, and confirmation requirements. Minor redundancy exists between 'Get the invitation uid... first' and 'Do not guess the uid — always fetch it,' but this is a deliberate emphasis rather than wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple two-parameter schemaam, a destructiveHint annotation, and no output schema, the description covers everything needed to call the tool correctly: source of uid, required confirmation, permanence, sender notification behavior, and authentication prerequisite.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents uid's source and confirmed's true requirement at 100% coverage, so the description adds little new parameter-level meaning. It reinforces 'always fetch the uid' and 'get explicit OK,' but these largely restate the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Reject a pending Proton Drive sharing invitation.' This unambiguously identifies the operation and distinguishes it from drive_invitation_accept and drive_list_invitations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context is given: the tool is for rejecting pending invitations, the uid must come from drive_list_invitations first, and confirmed=true is required before use. It stops short of explicitly naming alternatives such as drive_invitation_accept, but the workflow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_listARead-onlyIdempotent
List the immediate children of a Proton Drive folder. Requires authentication. Returns {items, total, offset, limit, hasMore} (default limit 200); items are [{name, path, type ('file'|'folder'), size?, modifiedAt?, mimeType?}]. Listing '/' returns the top-level roots. Not recursive — one directory level only. Use before drive_upload to confirm the destination exists, or before drive_download to verify the remote path. Do not use to list trash — use drive_list_trash instead.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute remote Drive path to list (must start with '/'). E.g. /my-files or /my-files/Reports | |
| limit | No | Max items to return (default 200). | |
| offset | No | Number of items to skip (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly and idempotent, and the description adds extensive behavioral context: requires authentication, returns a paginated object with a specific shape, defaults to limit 200, lists root when path is '/', and is not recursive. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well organized: purpose, return shape, root behavior, non-recursive caveat, usage context, and sibling exclusion. Every sentence carries useful information and none are filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though there is no output schema, the description fully defines the response shape, item fields, pagination fields, defaults, and special root behavior. Combined with the fully documented input schema and readOnly annotations, the agent has everything needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already fully documents path, limit, and offset with descriptions and constraints. The description adds a small amount of path-related context (listing '/' returns roots and that limit defaults to 200), but does not meaningfully deepen parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') with a clear resource ('immediate children of a Proton Drive folder') and explicit non-recursive scope. The description also distinguishes this from drive_list_trash by name and behavior, so an agent can identify it among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: use before drive_upload to confirm the destination and before drive_download to verify the remote path. It also explicitly says do not use for trash and names the alternative drive_list_trash, leaving no ambiguity about routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_list_invitationsARead-onlyIdempotent
List all pending sharing invitations from other Proton Drive users. Requires authentication. Returns [{uid, role, invitedByEmail, invitedAt?, nodeName, nodeType}]. Use the uid from this list to accept or reject with drive_invitation_accept / drive_invitation_reject. Do not use to list members of folders you own — use drive_share_status instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds useful context: requires authentication and details the return structure including fields like uid, role, invitedByEmail, nodeType. It also clarifies the scope to 'pending' invitations. This goes beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, auth requirement, return format, and a workflow/differentiation note. The description is compact, front-loaded, and free of redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with no output schema, the description fully covers what the agent needs: what it lists, auth needs, the return shape, and how the result should be used. It also clarifies edge cases (not for folder membership) to prevent misuse.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds meaning by explaining the return structure, which is relevant since no output schema is provided. There are no parameter details to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List all pending sharing invitations from other Proton Drive users' with a specific verb and resource. It also distinguishes itself from siblings by explicitly directing users to drive_share_status for folder members.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance for listing pending invitations and when-not-to-use with a named alternative ('Do not use to list members of folders you own — use drive_share_status instead'). It also explains the workflow of using the returned uid with drive_invitation_accept/reject.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_list_trashARead-onlyIdempotent
List all files and folders currently in the Proton Drive trash. Requires authentication. Returns {items, total, offset, limit, hasMore} (default limit 100, newest first when the CLI reports trash times); items are [{name, path, type, size?, modifiedAt?, uid, trashedAt?}]. Names are NOT unique in trash — two items can share one path; use uid to tell them apart. Use before drive_restore to find a trashed item's exact path, or before drive_empty_trash to show the user what will be permanently deleted. Do not use to list active (non-trashed) files — use drive_list instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (default 100). | |
| offset | No | Number of items to skip (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safe-read behavior is covered. The description adds valuable context: authentication requirement, exact return shape, pagination defaults, ordering, optional fields, and the critical non-unique-names caveat with uid guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, return shape, uniqueness caveat, use cases, and exclusion of active-file listing. The most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description fully compensates by specifying the return structure, pagination fields, item fields, ordering, and duplicate-name behavior. An agent has enough information to invoke it correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit and offset are already fully documented. The description restates the default limit of 100 and provides pagination context, but does not add new parameter meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List all files and folders currently in the Proton Drive trash') and explicitly contrasts with drive_list for active files. This fully distinguishes it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: before drive_restore to find a trashed item's exact path, and before drive_empty_trash to show the user what will be deleted. It also tells the agent not to use it for active files and to use drive_list instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_mkdirA
Create a new empty folder on Proton Drive. Requires authentication. Fails if the folder already exists or if the parent folder does not exist — use drive_list to check first. Does not create intermediate directories; create each level separately. Do not use to upload files (use drive_upload) or to create nested folder trees in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute remote Drive path for the new folder (must start with '/'). E.g. /my-files/NewFolder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses authentication requirement, failure conditions (folder exists or parent missing), and behavior (no intermediate directories) beyond the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-loaded with purpose and authentication, then constraints; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, no output schema, and minimal annotations, the description fully covers preconditions, failures, and exclusions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema: clarifies that path must be absolute, starts with '/', provides example, and covers the single parameter's constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new empty folder on Proton Drive, distinguishes from sibling tools like drive_upload and explicitly mentions it does not create nested trees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (creating folders) and when-not-to-use (uploading files, creating nested trees in one call) with a suggestion to check existence via drive_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_moveA
Move or rename a file or folder on Proton Drive. Requires authentication. To rename: keep the same parent, change only the filename (e.g. /my-files/old.pdf → /my-files/new.pdf) — or use drive_rename directly. To move: provide a different parent folder. Fails if destinationPath is already occupied or if its parent folder does not exist. Do not use to copy a file while keeping the original (use drive_copy) or to download to local storage (use drive_download).
| Name | Required | Description | Default |
|---|---|---|---|
| sourcePath | Yes | Absolute remote path of the file or folder to move (must start with '/'). | |
| destinationPath | Yes | Absolute remote destination path (must start with '/'). Parent folder must exist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation (false), the description discloses that authentication is required, that the operation fails if the destination path is already occupied or its parent folder does not exist, and explains the exact rename/move mechanics. While it does not mention return values, there is no output schema and the provided context is sufficient for safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a well-structured paragraph: it starts with the core action, then explores rename and move patterns with a concrete example, lists failure conditions, and closes with explicit 'do not use' alternatives. Every sentence serves a distinct purpose, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only two parameters, both thoroughly documented in the schema, and no output schema, the description covers all necessary operational context: authentication prerequisite, usage modes (rename/move), failure conditions, and exclusions. An agent has enough information to select and invoke this tool correctly in any relevant scenario.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though both schema parameters have descriptions (100% coverage), the tool description adds practical semantics that shape parameter usage: renaming requires keeping the same parent while changing the filename, moving requires a different parent. This clarifies how to construct sourcePath and destinationPath for each intended operation, exceeding what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Move or rename a file or folder on Proton Drive'), immediately clarifying the tool's core function. It also distinguishes itself from siblings by explicitly referencing drive_rename, drive_copy, and drive_download, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: details the rename scenario (same parent, change filename) versus the move scenario (different parent), and directs users to drive_rename for pure renames, drive_copy for copies, and drive_download for downloads. It also states a prerequisite (parent folder must exist) and failure conditions, giving clear operational boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_read_fileARead-onlyIdempotent
Read the text contents of a file from the local Proton Drive sync folder. Requires the PROTON_DRIVE_SYNC_PATH environment variable to point to the root of the synced folder (e.g. /Users/alice/Proton Drive). The Proton Drive desktop app must be running and the file must be synced locally. Limited to text files up to 1 MB — returns an error for binary files or larger files (use drive_download instead). Do not use for files not yet synced locally, binary files, or files over 1 MB — use drive_download instead.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute remote Drive path of the file to read (must start with '/'). Mapped to the local sync folder. E.g. /my-files/notes.txt |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description discloses critical runtime prerequisites (env var, app running, local sync), the 1 MB text-file limit, and the error behavior for binary/large files. It also names the fallback tool. This is rich behavioral context that the agent needs to call it correctly, and it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and follows with prerequisites, limitations, and an alternative. It is logically structured but slightly redundant—'returns an error for binary files or larger files (use drive_download instead)' and the final sentence repeat the same exclusion. Still, it remains concise and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool, the description covers prerequisites, limits, and alternatives thoroughly. It does not explicitly state the return format (e.g., raw text content) or encoding, but 'Read the text contents' implies text is returned. Given no output schema, this is a minor gap; the description is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides a thorough description of the single parameter 'path' (absolute remote path, must start with '/', mapped to local sync folder). With 100% schema description coverage, the description adds no extra parameter-level meaning beyond what is already documented. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (read) and resource (file contents from local Proton Drive sync folder). It explicitly differentiates from drive_download by specifying that binary files, files over 1 MB, or unsynced files should use drive_download instead. This makes it easy for an agent to distinguish this tool from its sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use conditions: requires PROTON_DRIVE_SYNC_PATH environment variable, the desktop app must be running, and the file must be synced locally. It also gives direct exclusion criteria and a named alternative: 'Do not use for files not yet synced locally, binary files, or files over 1 MB — use drive_download instead.' This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_renameA
Rename a file or folder in place on Proton Drive, without moving it to a different parent folder. Requires authentication. Equivalent to calling drive_move with the same parent and a new filename, but cheaper — one CLI call instead of drive_move's internal composition. Do not use to relocate to a different folder — use drive_move for that (or when unsure which applies).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute remote path of the file or folder to rename (must start with '/'). | |
| newName | Yes | New filename (not a path — just the name, e.g. 'report-v2.pdf'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'Requires authentication,' which is not in the annotations (only destructiveHint: false). It also discloses that the operation is in-place and cheaper than drive_move. However, it does not mention potential conflict behavior or error conditions; the sparse annotation means the description carries more burden, but the added context is still valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: purpose, cost/equivalence, and explicit usage direction. It is front-loaded, concise, and free of redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter rename tool with no output schema, the description covers the core action, authentication, equivalence, and usage boundaries. It could mention what happens on overwrite or error, but the level of detail is adequate for a low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters with descriptions (100% coverage). The description reinforces that newName is just the name and path is absolute, but it doesn't add semantic detail beyond what the schema already provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: 'Rename a file or folder in place on Proton Drive, without moving it to a different parent folder.' It uses a specific verb and resource, and explicitly differentiates from drive_move by clarifying the in-place constraint and equivalency.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance: 'Do not use to relocate to a different folder — use drive_move for that (or when unsure which applies).' It also explains when this tool is preferable ('cheaper — one CLI call'), giving the agent explicit decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_restoreA
Restore a trashed file or folder back to its original Proton Drive path. Requires authentication. Use drive_list_trash first to find the item's current path in trash. Fails if the original parent folder no longer exists or if a new item with the same name was created at that path since it was trashed. Do not use for items not currently in trash — it will return an error.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute remote Drive path of the item to restore, as shown in drive_list_trash output (must start with '/'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint: false annotation, it adds authentication requirement, failure cases, and that it restores to original path. Could mention return value but still strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences, front-loaded with purpose, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers prerequisites, conditions, and limitations. Lacks explicit return value but sufficient for a simple restore tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description explains how to obtain the path parameter via drive_list_trash and that it must start with '/', adding value beyond the schema's description of the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool restores a trashed file or folder to its original path, distinguishing it from sibling tools like drive_trash, drive_list_trash, and drive_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use drive_list_trash first, specifies that it only works for trashed items, and warns of failure conditions (missing parent folder, name conflict).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_trashADestructive
Move a file or folder to the Proton Drive trash. Requires authentication. The item disappears from its original path immediately but is not permanently deleted — recover it with drive_restore or list it with drive_list_trash. Prefer this over drive_delete whenever permanent removal is not explicitly required by the user. Do not use when the item must be permanently gone immediately — use drive_delete with confirmed=true instead.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute remote Drive path to move to trash (must start with '/'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses immediate removal from original path, non-permanent deletion, recoverability, and authentication requirement, adding value beyond the destructiveHint annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with 4 sentences, front-loaded with the main action, and well-structured without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, no output schema, and annotations, the description covers all necessary context: behavior, prerequisites, and alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add extra parameter information beyond the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('move a file or folder to the Proton Drive trash') and distinguishes it from siblings like drive_delete and drive_restore, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool over drive_delete and when not to use it, including clear alternatives and recovery options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_uploadADestructive
Upload a local file or folder to Proton Drive with end-to-end encryption. Requires authentication. For folders, uploads recursively and preserves directory structure. Returns {uploaded, skipped, failed} counts — fails the call if failed > 0 (common causes: quota exceeded, destination path not found, permission denied). Conflict strategies are set separately for files and folders (CLI v0.8.0+) — both default to 'skip'. Do not use to move files already on Drive (use drive_move) or to write text content directly (use drive_write_file if PROTON_DRIVE_SYNC_PATH is set). Ensure destination folder exists first with drive_list; create it with drive_mkdir if needed. Also requires confirmed=true when fileConflictStrategy or folderConflictStrategy is 'replace' (it trashes the existing remote item).
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Must be true. Only set after the user explicitly approved this exact action. | |
| localPath | Yes | Absolute local filesystem path of the file or folder to upload (must start with '/'). | |
| remotePath | Yes | Absolute remote Drive destination folder path (must start with '/'). E.g. /my-files/Reports | |
| fileConflictStrategy | No | '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. | |
| folderConflictStrategy | No | '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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses several behavioral traits: 'Requires authentication', 'For folders, uploads recursively and preserves directory structure', 'fails the call if failed > 0 (common causes: quota exceeded, destination path not found, permission denied)', and the destructive 'replace' behavior that 'trashes the existing remote item' tied to the confirmed flag. This is substantial context that aids safe and effective invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense yet efficient, front-loading the primary purpose in the first sentence and then adding critical operational details in a logical order: authentication, recursion, return behavior, conflict defaults, exclusions, prerequisites, and the destructive replace confirmation. Every sentence contributes new information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description properly explains the return structure 'Returns {uploaded, skipped, failed} counts' and failure conditions. It covers authentication, recursion, conflict strategies, exclusions, prerequisite folder checks, and the destructive nuance of 'replace'. For a tool with 5 parameters and 2 enums, this level of detail is sufficient for correct use without further external knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaningful cross-parameter semantics beyond the schema: it notes that conflict strategies 'are set separately for files and folders' and 'both default to skip', and that 'confirmed=true' is specifically required when either conflict strategy is 'replace'. This clarifies conditional requirements and defaults not fully expressed in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Upload a local file or folder to Proton Drive with end-to-end encryption', clearly stating the verb, resource, and distinguishing feature. It further differentiates from siblings by explicitly naming drive_move and drive_write_file as alternatives for different scenarios, leaving no ambiguity about the tool's core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-not guidance: 'Do not use to move files already on Drive (use drive_move) or to write text content directly (use drive_write_file if PROTON_DRIVE_SYNC_PATH is set)'. It also gives a prerequisite workflow: 'Ensure destination folder exists first with drive_list; create it with drive_mkdir if needed', and notes the conditions under which the call fails, helping agents decide when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_versionARead-onlyIdempotent
Return the installed proton-drive CLI version and SDK version as {cli: string, sdk: string}. Does not require authentication — use to confirm the correct binary is in PATH before other operations, or to diagnose compatibility issues. Do not use to check auth state; use drive_auth_status instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and idempotentHint. The description adds value by noting that authentication is not required, which goes beyond the annotations. However, it does not elaborate further on behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, and no unnecessary words. Every sentence is informative and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description provides sufficient information about the return value and usage. Combined with annotations, the tool definition is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist (schema coverage 100% with empty properties). The description explains the return format, which adds meaning beyond the schema. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the installed proton-drive CLI and SDK versions as an object with specific keys {cli: string, sdk: string}. It distinguishes from other tools by specifying it does not require authentication and is not for auth state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: to confirm the correct binary is in PATH before other operations or diagnose compatibility issues. Also provides a clear exclusion: do not use for auth state, instead use drive_auth_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drive_write_fileADestructive
Write text content to a file in the local Proton Drive sync folder (no Proton login needed — this only touches the local synced folder). Requires the PROTON_DRIVE_SYNC_PATH environment variable to point to the sync folder root. The Proton Drive desktop app must be running to sync the written file to the cloud. Creates parent directories locally if they do not exist. Refuses to overwrite an existing file unless confirmed=true — ask the user first. Content is limited to 5 MB. Do not use for binary content or files that need to be uploaded without the desktop app running — use drive_upload instead. Also requires confirmed=true when the file already exists (it would be overwritten).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute remote Drive path of the file to write (must start with '/'). Mapped to the local sync folder. E.g. /my-files/notes.txt | |
| content | Yes | UTF-8 text content to write. The file will be created or overwritten. | |
| confirmed | No | Must be true. Only set after the user explicitly approved this exact action. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though destructiveHint=true and openWorldHint=true are already in annotations, the description adds substantial context: it only touches the local sync folder, creates parent directories, refuses overwrite without confirmed=true, and enforces a 5 MB content limit. No contradiction exists between the description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core action, but it is somewhat verbose. The final sentence 'Also requires confirmed=true when the file already exists (it would be overwritten)' repeats the earlier overwrite-and-confirmation statement, which reduces conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating file-write tool, the description is highly complete: it covers environmental prerequisites, side effects (parent dir creation, overwrite behavior), content constraints, and the correct alternative tool. Given there is no output schema, the absence of return-value detail is not a significant gap for deciding whether and how to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds value beyond the schema by explaining the 5 MB content limit, the mapping of the 'path' parameter to the local sync folder, and the user-approval meaning of 'confirmed'. It does not merely repeat parameter names or types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Write text content to a file in the local Proton Drive sync folder.' It also differentiates from drive_upload by explicitly stating it is not for binary content or uploads requiring the desktop app to be absent. This makes the tool's purpose unambiguous among many sibling Drive tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use and when-not-to-use guidance: use for local text writes with the desktop app running, avoid for binary content and use drive_upload instead. It also states prerequisites like the PROTON_DRIVE_SYNC_PATH environment variable and the desktop app requirement, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photos_add_to_albumA
Add a photo from your Proton Photos library to an album. Requires authentication. albumPath must start with /albums/; photoPath must start with /photos/. The photo must already exist in your library — this does not upload new photos. Use photos_list_albums to find album paths.
| Name | Required | Description | Default |
|---|---|---|---|
| albumPath | Yes | Absolute path of the album. Must start with /albums/. E.g. /albums/Vacation 2024 | |
| photoPath | Yes | Absolute path of the photo in your library. Must start with /photos/. E.g. /photos/IMG_001.jpg |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include destructiveHint:false, so description carries some burden. It discloses requirements (authentication, path format, pre-existing photo) but does not mention what happens on failure (e.g., album not found, photo already in album) or whether the operation is idempotent. It clarifies a non-obvious behavioral trait (does not upload), but leaves other side effects unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise, front-loaded sentences. The first sentence states the core purpose; the second sets path constraints; the third clarifies a boundary and points to a helper tool. No redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-string-parameter tool with no output schema and minimal annotations, the description covers purpose, usage constraints, and a key behavioral caveat. It lacks explicit error-handling information but is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters with descriptions and examples (100% coverage), so baseline is 3. The description adds value by clarifying that photoPath must reference an existing library item and that the tool does not upload, plus suggesting photos_list_albums to discover albumPath. This enriches parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (add a photo) with source (library) and destination (album), distinguishing it from sibling tools like photos_remove_from_album or photos_create_album. The verb 'Add' and resource phrasing are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage conditions: requires authentication, path prefixes, photo must already exist (not for upload), and points to photos_list_albums for finding album paths. This effectively tells when to use and when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photos_create_albumA
Create a new empty photo album in Proton Photos. Requires authentication. Pass the album name (not a path) — the album is created at /albums/. Fails if an album with that name already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new album. E.g. 'Vacation 2024'. Must be non-empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include destructiveHint: false, so the description carries the transparency burden. It discloses authentication requirements, the exact creation path (/albums/<name>), the 'not a path' parameter constraint, and the duplicate-name failure behavior—all beyond the annotation's minimal safety signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action, and every clause adds value: auth, parameter format, creation location, and failure condition. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter create operation with no output schema, the description covers all essentials: what it does, how to pass the parameter, where it lands, failure mode, and authentication. It's fully complete for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for 'name', but the tool description adds valuable nuance: 'Pass the album name (not a path)' and explains the resulting path. This goes beyond the schema's example and non-empty constraint, enriching the parameter's meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ('Create a new empty photo album in Proton Photos') and clearly distinguishes from siblings like photos_list_albums and photos_delete_album. It also specifies 'empty' and 'new' to disambiguate from add/remove operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: requires authentication, expects a name not a path, and fails on duplicates. It doesn't explicitly name alternatives, but the context makes it obvious this is the creation tool among the sibling list. Slightly short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photos_delete_albumADestructive
Delete a Proton Photos album. Requires authentication and confirmed=true. By default refuses to delete an album that still contains photos — pass force=true to override. Photos live in your timeline independently of albums. save maps to the CLI's --save option (its exact effect is undocumented upstream) — leave it off unless the user asks. albumPath must start with /albums/. Always show the user the album name and photo count (from photos_list_albums) before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| save | No | If true, save album photos to your timeline before deleting. Default false. | |
| force | No | If true, delete even if the album still contains photos. Default false. | |
| albumPath | Yes | Absolute path of the album to delete. Must start with /albums/. E.g. /albums/Vacation 2024 | |
| confirmed | Yes | Must be true. Confirms the user has acknowledged the deletion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
destructiveHint=true only marks the operation as destructive; the description goes well beyond by requiring confirmed=true, explaining the default refusal to delete non-empty albums, documenting force behavior, and clarifying that deleting an album does not remove photos from the timeline. It also honestly warns that save's exact effect is undocumented upstream.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place, covering safety, parameter semantics, path constraints, and pre-call user communication. There is no filler or restatement of the schema, and the most important destructive behavior appears early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive album deletion with no output schema, the description covers authentication, confirmation, force behavior, path requirements, the fact that photos survive in the timeline, and the required pre-call confirmation step. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Though schema coverage is 100%, the description adds real meaning: force's override behavior, save's ambiguous upstream effect with a default-off recommendation, confirmed as a mandatory user acknowledgement, and albumPath's required /albums/ prefix. This significantly exceeds what the schema alone communicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with 'Delete a Proton Photos album' — a specific verb and resource. The added detail about refusing to delete albums with photos and the independence of photos from albums makes clear this removes the album container, not the underlying photos, distinguishing it from photos_remove_from_album.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operational guidance: force should only be passed to override the default protection, save should be left off unless explicitly requested, albumPath must start with /albums/, and the user must see album name and photo count before calling. It does not explicitly name sibling alternatives or state when not to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photos_downloadADestructive
Download one or more photos from Proton Photos (timeline, an album, or shared-with-me) to a local folder. Requires authentication. Multiple timeline photos can share the same filename — with conflictStrategy 'remove' or 'skip' only one copy survives locally; use 'rename' to keep all. Fails if any item fails to download. Do not use for regular Drive files — use drive_download instead. Also requires confirmed=true when conflictStrategy is 'remove' (it deletes the existing LOCAL file).
| Name | Required | Description | Default |
|---|---|---|---|
| confirmed | No | Must be true. Only set after the user explicitly approved this exact action. | |
| photoPaths | Yes | One or more absolute photo paths to download (each must start with '/'). E.g. ['/photos/IMG_001.jpg'] | |
| localFolder | Yes | Absolute local destination folder (must start with '/'). Created if it does not exist. | |
| conflictStrategy | No | 'skip' leaves an existing local file unchanged (default). 'rename' downloads under a unique name. 'remove' deletes the local file and downloads the remote copy in its place — confirm with user first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply openWorldHint and destructiveHint flags; the description enriches them with precise semantics: the destructive scope is 'deletes the existing LOCAL file' and only under conflictStrategy 'remove' (which requires confirmed=true), the filename-collision survival behavior for 'skip' vs 'rename', the authentication requirement, and the fail-fast 'Fails if any item fails to download' behavior. None of this contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose is front-loaded in the first sentence; the remaining short sentences each carry distinct information: authentication, collision behavior, failure semantics, sibling routing, and the confirmation requirement. There is no filler or tautology.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-strategy tool with four parameters, the description covers purpose, source scopes, authentication, edge-case behavior, failure semantics, the alternative tool, and the confirmation safety latch. The only gap is the success return/result format, which is unstated and uncompensated by any output schema — though the side effect (files placed in localFolder) makes this a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns a point above baseline by explaining cross-parameter consequences rather than re-listing definitions: why multiple timeline photos sharing a filename makes conflictStrategy critical (only one copy survives with 'remove'/'skip'), and the conditional coupling of confirmed=true to 'remove'. This reasoning is not present in the individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Download one or more photos from Proton Photos (timeline, an album, or shared-with-me) to a local folder.' It enumerates the source scopes and destination, and distinguishes itself from the sibling drive_download by explicitly scoping to photos rather than regular Drive files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit exclusion with a named alternative: 'Do not use for regular Drive files — use drive_download instead.' It also defines the tool's domain (timeline, album, shared-with-me) so an agent can select it over the many Drive-oriented siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photos_list_album_photosARead-onlyIdempotent
List the photos in a Proton Photos album. Requires authentication. Returns {items, total, offset, limit, hasMore} (default limit 100); items are [{nodeUid}], or with loadDetails=true also name, mediaType, sizes, captureTime and tags. albumPath must start with /albums/. To add or remove photos, use their Drive path under /photos/ (not the nodeUid).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (default 100). | |
| offset | No | Number of items to skip (default 0). | |
| albumPath | Yes | Absolute path of the album. Must start with /albums/. E.g. /albums/Vacation 2024 | |
| loadDetails | No | Include name, mediaType, sizes, captureTime and tags (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds substantial behavioral detail: it returns a paginated structure with {items, total, offset, limit, hasMore}, explains the item shape with and without loadDetails, and warns that nodeUid is not the path to use for mutations. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences: the action, the return shape and defaults, and a critical usage caveat. It is front-loaded with the core purpose and every sentence carries useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with four well-documented parameters and no output schema, the description provides the essential return shape, pagination fields, default limit, and authentication requirement. It is sufficiently complete for an agent to call and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all parameters with 100% coverage, so the baseline is 3. The description adds value by clarifying the default limit, the effect of loadDetails on item fields, and the important caveat that nodeUid cannot be used for add/remove operations. This extra context aids correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists photos in a Proton Photos album, with a specific verb and resource. It distinguishes itself from sibling tools like photos_list_albums and photos_list_timeline by focusing on album contents and the /albums/ path requirement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: requires authentication, albumPath must start with /albums/, and pagination defaults are specified. It does not explicitly name alternatives, but the last sentence clarifies when to use Drive paths under /photos/ for add/remove operations, preventing misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photos_list_albumsARead-onlyIdempotent
List all photo albums in Proton Photos. Requires authentication. Returns [{name, photoCount, isShared, creationTime?}]. Album paths are /albums/ — use the name from this list to build paths for other album tools. Do not use to list regular Drive folders — use drive_list instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnly and idempotent. The description adds valuable behavioral context: requires authentication, return structure [{name, photoCount, isShared, creationTime?}], and path convention /albums/<name>. This goes beyond the annotations and helps the agent understand side-effects and output expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main purpose, and every sentence provides essential information (purpose, return format, path convention, exclusions). No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter read-only tool, the description fully covers the purpose, output format, prerequisites (auth), and integration with other album tools. It also prevents misuse by contrasting with drive_list. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the schema coverage is trivially 100%. The description adds meaning by explaining the return shape and path usage, which is useful even though there are no parameters to document. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all photo albums in Proton Photos' with a specific verb and resource. It distinguishes from siblings by specifying 'all photo albums' and later contrasting with regular Drive folders, making it unique among the tool list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: use the name from this list to build paths for other album tools, and explicitly warns against using it for Drive folders, directing to drive_list instead. This is a clear when-to-use vs alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photos_list_timelineARead-onlyIdempotent
List photos in your Proton Photos timeline (your full photo library, not scoped to an album). Requires authentication. Returns {items, total, offset, limit, hasMore} (default limit 50, newest first); items are [{nodeUid, captureTime, tags}], or with loadDetails=true also {name, mediaType, creationTime, totalStorageSize} (about 50% more tokens). Use photos_download to download items by path, or photos_add_to_album to add them to an album.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items to return (default 50). | |
| offset | No | Number of items to skip (default 0). | |
| loadDetails | No | If true, fetch full node metadata for each photo instead of just its nodeUid. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context: authentication requirement, default limit of 50, newest-first ordering, pagination fields, and the token-cost tradeoff of loadDetails. This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences: first states purpose and scope, second summarizes output and behavior, third routes to alternative tools. Every sentence earns its place, and the most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description fully compensates by documenting the return shape, pagination fields, item fields, and loadDetails variant. It also covers authentication, defaults, ordering, and relevant sibling tools. Nothing important is missing for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters. The description adds extra meaning: default limit 50, newest-first ordering, pagination semantics via offset, and the performance/token implications of loadDetails. This improves on the baseline without being essential.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List photos') and a clear resource ('your Proton Photos timeline'), and explicitly scopes it to the full photo library rather than an album. This differentiates it from sibling album-scoped tools such as photos_list_albums and photos_list_album_photos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states what this tool is for and what it is not ('not scoped to an album'), and then routes to the appropriate siblings: photos_download for downloading items and photos_add_to_album for adding to an album. This gives an agent clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photos_remove_from_albumADestructive
Remove a photo from a Proton Photos album without deleting it from your library. Requires authentication. albumPath must start with /albums/; photoPath must start with /photos/. The photo is removed from the album only — it stays in your timeline. Requires confirmed=true — describe the action to the user and get their explicit OK first.
| Name | Required | Description | Default |
|---|---|---|---|
| albumPath | Yes | Absolute path of the album. Must start with /albums/. E.g. /albums/Vacation 2024 | |
| confirmed | No | Must be true. Only set after the user explicitly approved this exact action. | |
| photoPath | Yes | Absolute path of the photo in the album. Must start with /photos/. E.g. /photos/IMG_001.jpg |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true. The description adds valuable context: it clarifies that the photo is removed only from the album and stays in the timeline, explicitly stating it is not deleted from the library. It also discloses the requirement for user confirmation (confirmed=true) and path constraints, which are behavioral traits beyond the annotation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose. Each sentence earns its place: purpose, path constraints, and confirmation requirement. No fluff or repetition of obvious details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with 3 parameters and no output schema, the description covers everything an agent needs to call it correctly: the exact action, the confirmation requirement, path constraints, and what it does NOT do (delete from library). It omits error handling, but that is not essential for invocation. The combination of description and annotations is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — every parameter has a detailed description including path prefixes and the confirmed flag. The tool description repeats these constraints (e.g., 'albumPath must start with /albums/') without adding new meaning. It does add context about the action's scope (stays in timeline), but this is not parameter-specific. Per baseline, with high coverage, a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Remove a photo from a Proton Photos album without deleting it from your library.' This distinguishes it from siblings like photos_add_to_album (add) and photos_delete_album (delete whole album). It also specifies the scope (album only) and the confirmation requirement, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it requires authentication, specific path prefixes, and explicit user confirmation (confirmed=true). It implies when to use it (when removing a photo from an album without deleting it from the library) but does not explicitly name alternative tools or conditions for choosing this over them. This is a minor gap given the specificity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photos_update_albumA
Rename an album or change its cover photo in Proton Photos. Requires authentication. At least one of name or coverPhotoUid must be provided. Use photos_list_album_photos to find a nodeUid to set as the cover.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name for the album. Omit to leave unchanged. | |
| albumPath | Yes | Absolute path of the album to update. Must start with /albums/. E.g. /albums/Vacation 2024 | |
| coverPhotoUid | No | nodeUid (from photos_list_album_photos) of the photo to set as the album cover. Omit to leave unchanged. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that authentication is required and clarifies that it's a partial update allowing either field, beyond the destructiveHint=false annotation. It does not contradict any annotations, and the annotation is minimal, so the description adds meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no fluff. The purpose, constraints, and a usage hint are packed efficiently, front-loading the tool's primary function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity and full schema coverage, the description covers the purpose, required parameters, authentication, and how to obtain the cover photo. It lacks an explicit mention of return value, but that's not critical for an update tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with clear descriptions for name, albumPath, and coverPhotoUid. The description adds no extra semantic detail beyond referring to these fields, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renames an album or changes its cover photo, using specific verbs and a resource. It distinguishes from sibling tools like photos_create_album and photos_delete_album by specifying the exact mutation types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly notes the authentication requirement and the constraint that at least one of name or coverPhotoUid must be provided. It also directs users to photos_list_album_photos to discover nodeUid values, giving practical usage context, though it doesn't mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
photos_uploadA
Upload one or more local photo or video files directly into your Proton Photos library (My Photos timeline). Requires authentication. Non-photo/video files are silently skipped. Folders are recursed but flattened into My Photos — folder structure is not preserved. Never overwrites — duplicates (matched by name + content hash) resolve to 'rename' or 'skip' only. Do not use for regular Drive files — use drive_upload instead.
| Name | Required | Description | Default |
|---|---|---|---|
| localPaths | Yes | One or more absolute local paths to files or folders to upload (each must start with '/'). | |
| conflictStrategy | No | How to handle duplicate photos (matched by name + content hash). 'skip' leaves the existing photo unchanged (default); 'rename' uploads under a unique name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only openWorldHint in annotations, the description carries the behavioral burden and does so thoroughly. It discloses that non-photo/video files are silently skipped, folders are flattened, files are never overwritten, and duplicates are handled only via rename or skip.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. Each sentence adds distinct value: purpose, authentication, filtering, folder behavior, conflict resolution, and an explicit alternative. No wasted words or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter upload tool with no output schema, the description covers all essential operational context: file types, folder flattening, overwrite avoidance, duplicate handling, authentication, and the correct sibling alternative. Nothing critical needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning beyond the schema: it clarifies localPaths refers to local photo/video files or folders, explains folder recursion and flattening, and defines the duplicate-matching logic as name + content hash for the conflictStrategy parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource: 'Upload one or more local photo or video files directly into your Proton Photos library.' It also explicitly distinguishes itself from drive_upload by saying not to use it for regular Drive files, so sibling confusion is avoided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing guidance: 'Do not use for regular Drive files — use drive_upload instead.' Also states authentication requirements, file-type filtering, folder behavior, and duplicate resolution so an agent knows exactly when and how to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
18 tool updates
v1.0.38- Changed
drive_auth_logout1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
drive_copy1 field changed- added
Input schema / properties / newNameAdded value: +{ + "description": "Optional name for the copy (CLI --name). Required to copy an item into its own folder.", + "type": "string" +}
- Changed
drive_download1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
drive_info1 field changed- added
Input schema / properties / verboseAdded value: +{ + "description": "Return the raw CLI node instead of the trimmed one (default false).", + "type": "boolean" +}
- Changed
drive_invitation_reject1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
drive_list2 fields changed- added
Input schema / properties / limitAdded value: +{ + "description": "Max items to return (default 200).", + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Number of items to skip (default 0).", + "minimum": 0, + "type": "integer" +}
- Changed
drive_list_trash2 fields changed- added
Input schema / properties / limitAdded value: +{ + "description": "Max items to return (default 100).", + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Number of items to skip (default 0).", + "minimum": 0, + "type": "integer" +}
- Changed
drive_share_invite1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
drive_share_leave1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
drive_share_remove_url1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
drive_share_revoke1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
drive_share_set_url1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
drive_upload1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
drive_write_file1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
photos_download1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
- Changed
photos_list_album_photos3 fields changed- added
Input schema / properties / limitAdded value: +{ + "description": "Max items to return (default 100).", + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / loadDetailsAdded value: +{ + "description": "Include name, mediaType, sizes, captureTime and tags (default false).", + "type": "boolean" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Number of items to skip (default 0).", + "minimum": 0, + "type": "integer" +}
- Changed
photos_list_timeline2 fields changed- added
Input schema / properties / limitAdded value: +{ + "description": "Max items to return (default 50).", + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "Number of items to skip (default 0).", + "minimum": 0, + "type": "integer" +}
- Changed
photos_remove_from_album1 field changed- added
Input schema / properties / confirmedAdded value: +{ + "description": "Must be true. Only set after the user explicitly approved this exact action.", + "type": "boolean" +}
4 tool updates
v1.0.32- Changed
drive_download4 fields changed- removed
Input schema / properties / conflictStrategyRemoved value: -{ - "description": "'skip' leaves an existing local file unchanged (default). 'replace' overwrites it — confirm with user first. 'keep-both' downloads under a unique name.", - "enum": [ - "skip", - "replace", - "keep-both" - ], - "type": "string" -} - added
Input schema / properties / fileConflictStrategyAdded value: +{ + "description": "'skip' leaves an existing local file unchanged (default). 'rename' downloads under a unique name. 'remove' deletes the local file and downloads the remote copy in its place — confirm with user first.", + "enum": [ + "skip", + "rename", + "remove" + ], + "type": "string" +} - added
Input schema / properties / folderConflictStrategyAdded value: +{ + "description": "'skip' leaves an existing local folder unchanged (default). 'merge' merges the downloaded folder's contents into the existing one. 'rename' downloads under a unique name. 'remove' deletes the local folder and downloads the remote copy in its place — confirm with user first.", + "enum": [ + "skip", + "merge", + "rename", + "remove" + ], + "type": "string" +} - changed
Input schema / properties / localPath / descriptionPrevious value: -"Absolute local destination path (must start with '/'). Parent directory must already exist."New value: +"Absolute local DESTINATION FOLDER (must start with '/'), not the file's final path. Created automatically if it doesn't exist. The downloaded item is placed inside it, keeping its original remote name."
- Changed
drive_upload3 fields changed- removed
Input schema / properties / conflictStrategyRemoved 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" -} - added
Input schema / properties / fileConflictStrategyAdded 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" +} - added
Input schema / properties / folderConflictStrategyAdded 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" +}
- Changed
photos_download2 fields changed- changed
Input schema / properties / conflictStrategy / descriptionPrevious value: -"How to handle local filename collisions. Defaults to 'skip'."New value: +"'skip' leaves an existing local file unchanged (default). 'rename' downloads under a unique name. 'remove' deletes the local file and downloads the remote copy in its place — confirm with user first." - changed
Input schema / properties / conflictStrategy / enumPrevious value: -[ - "skip", - "replace", - "keep-both" -]New value: +[ + "skip", + "rename", + "remove" +]
- Changed
photos_upload2 fields changed- changed
Input schema / properties / conflictStrategy / descriptionPrevious value: -"How to handle duplicate photos (matched by name + content hash). Defaults to 'skip'."New value: +"How to handle duplicate photos (matched by name + content hash). 'skip' leaves the existing photo unchanged (default); 'rename' uploads under a unique name." - changed
Input schema / properties / conflictStrategy / enumPrevious value: -[ - "skip", - "keep-both" -]New value: +[ + "skip", + "rename" +]
11 tool updates
v1.0.28- Changed
drive_download1 field changed- added
Input schema / properties / conflictStrategyAdded value: +{ + "description": "'skip' leaves an existing local file unchanged (default). 'replace' overwrites it — confirm with user first. 'keep-both' downloads under a unique name.", + "enum": [ + "skip", + "replace", + "keep-both" + ], + "type": "string" +}
- Added
drive_info - Added
drive_rename - Added
drive_share_remove_all - Added
drive_share_remove_url - Added
drive_share_set_url - Changed
drive_upload2 fields changed- changed
Input schema / properties / conflictStrategy / descriptionPrevious 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)." - changed
Input schema / properties / conflictStrategy / enumPrevious value: -[ - "skip", - "overwrite", - "rename" -]New value: +[ + "skip", + "replace", + "keep-both", + "merge" +]
- Added
photos_download - Added
photos_list_timeline - Added
photos_update_album - Added
photos_upload
11 tool updates
v1.0.26- Added
drive_copy - Added
drive_invitation_accept - Added
drive_invitation_reject - Added
drive_list_invitations - Added
drive_share_leave - Added
photos_add_to_album - Added
photos_create_album - Added
photos_delete_album - Added
photos_list_album_photos - Added
photos_list_albums - Added
photos_remove_from_album
2 tool updates
v1.0.23- Changed
drive_share_revoke2 fields changed- changed
Input schema / properties / email / descriptionPrevious value: -"Email address of the person whose access to revoke."New value: +"Email address of the member to remove. Must exactly match the address shown by drive_share_status — use drive_share_status first to confirm. E.g. alice@example.com." - changed
Input schema / properties / path / descriptionPrevious value: -"Absolute remote Drive path (must start with '/')."New value: +"Absolute remote Drive path of the shared file or folder (must start with '/'). E.g. /my-files/project. Must match the path used when the invitation was sent."
- Changed
drive_share_status1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"Absolute remote Drive path to inspect (must start with '/')."New value: +"Absolute remote Drive path to inspect (must start with '/'). E.g. /my-files/project or /my-files/report.pdf. Must be an existing file or folder on Proton Drive."
14 tool updates
v0.1.2- Changed
drive_delete2 fields changed- changed
Input schema / properties / confirmed / descriptionPrevious value: -"Must be true. Confirms the user has acknowledged this is permanent."New value: +"Must be true. Confirms the user has acknowledged this deletion is permanent and cannot be undone." - changed
Input schema / properties / path / descriptionPrevious value: -"Remote Drive path to delete."New value: +"Absolute remote Drive path to permanently delete (must start with '/')."
- Changed
drive_download2 fields changed- changed
Input schema / properties / localPath / descriptionPrevious value: -"Absolute local destination path."New value: +"Absolute local destination path (must start with '/'). Parent directory must already exist." - changed
Input schema / properties / remotePath / descriptionPrevious value: -"Remote Drive path to download. E.g. /my-files/report.pdf"New value: +"Absolute remote Drive path to download (must start with '/'). E.g. /my-files/report.pdf"
- Changed
drive_empty_trash1 field changed- changed
Input schema / properties / confirmed / descriptionPrevious value: -"Must be true. Confirms the user has acknowledged this is permanent and irreversible."New value: +"Must be true. Confirms the user has reviewed the trash contents and acknowledged this action is permanent and irreversible."
- Changed
drive_list1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"Remote Drive path to list. E.g. /my-files"New value: +"Absolute remote Drive path to list (must start with '/'). E.g. /my-files or /my-files/Reports"
- Changed
drive_mkdir1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"Remote Drive path for the new folder. E.g. /my-files/NewFolder"New value: +"Absolute remote Drive path for the new folder (must start with '/'). E.g. /my-files/NewFolder"
- Changed
drive_move2 fields changed- changed
Input schema / properties / destinationPath / descriptionPrevious value: -"New remote path."New value: +"Absolute remote destination path (must start with '/'). Parent folder must exist." - changed
Input schema / properties / sourcePath / descriptionPrevious value: -"Current remote path of the file/folder."New value: +"Absolute remote path of the file or folder to move (must start with '/')."
- Added
drive_read_file - Changed
drive_restore1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"Remote Drive path to restore."New value: +"Absolute remote Drive path of the item to restore, as shown in drive_list_trash output (must start with '/')."
- Changed
drive_share_invite3 fields changed- changed
Input schema / properties / message / descriptionPrevious value: -"Optional message to include in the invitation."New value: +"Optional message included in the invitation email (max 2000 characters)." - changed
Input schema / properties / path / descriptionPrevious value: -"Remote Drive path to share."New value: +"Absolute remote Drive path to share (must start with '/')." - changed
Input schema / properties / role / descriptionPrevious value: -"Access level to grant."New value: +"'viewer' = read-only, 'editor' = read + write, 'admin' = read + write + reshare."
- Changed
drive_share_revoke1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"Remote Drive path."New value: +"Absolute remote Drive path (must start with '/')."
- Changed
drive_share_status1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"Remote Drive path to check sharing for."New value: +"Absolute remote Drive path to inspect (must start with '/')."
- Changed
drive_trash1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"Remote Drive path to trash."New value: +"Absolute remote Drive path to move to trash (must start with '/')."
- Changed
drive_upload3 fields changed- changed
Input schema / properties / conflictStrategy / descriptionPrevious 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." - changed
Input schema / properties / localPath / descriptionPrevious value: -"Absolute local path to upload."New value: +"Absolute local filesystem path of the file or folder to upload (must start with '/')." - changed
Input schema / properties / remotePath / descriptionPrevious 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"
- Added
drive_write_file
16 tool updates
v0.1.0- First observed
drive_auth_logout - First observed
drive_auth_status - First observed
drive_delete - First observed
drive_download - First observed
drive_empty_trash - First observed
drive_list - First observed
drive_list_trash - First observed
drive_mkdir - First observed
drive_move - First observed
drive_restore - First observed
drive_share_invite - First observed
drive_share_revoke - First observed
drive_share_status - First observed
drive_trash - First observed
drive_upload - First observed
drive_version
TDQS
Scored across 38 tools
Most tools are clearly distinct by function (list, upload, download, move, delete, share, etc.), and cross-references in descriptions disambiguate overlapping areas like trash vs. live files, and Drive vs. Photos. However, there is some potential confusion between drive_rename and drive_move (though descriptions clarify), and between drive_share_invite and drive_share_set_url for sharing, but these are well-handled.
The naming is largely consistent with verb_noun pattern: drive_list, drive_upload, drive_download, drive_mkdir, etc., and photos_* tools follow a similar pattern. However, there is a minor inconsistency: some tools use drive_ as prefix for both Drive and Photos (e.g., drive_read_file vs. photos_read_file? but photos_upload exists), and the one tool 'drive_auth_status' breaks the verb_noun pattern (status as noun but not a clear verb). Minor deviations.
With 38 tools, the server is on the heavier side, but the domain is broad (Drive file management, sharing, invitations, trash, and Photos albums/timeline). Each tool covers a distinct operation, so the count is justified. It's above the typical 15-tool sweet spot but not excessive given the scope.
The tool surface is remarkably complete for the domain: full lifecycle for files/folders (create, list, read, update via rename/move, delete, trash/restore, empty trash), sharing (invite, revoke, status, URLs, leave), invitations (list, accept, reject), and Photos (albums CRUD, timeline, upload/download, add/remove). No obvious gaps that would cause agent failures; even edge cases like synced-folder file operations are covered.
Maintenance
Related MCP Connectors
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI assistants to interact with Proton Drive files, supporting operations like listing, reading, creating, and deleting files and folders.7364 npm17MIT
- AlicenseAqualityDmaintenanceMCP server that gives Claude Desktop and other desktop MCP clients filesystem powers—read, write, edit, and manage files like AI coding assistants.1746 npm9MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for the Proton privacy suite — Mail, Pass, Drive, Calendar, and VPN. 36 tools for Claude and other MCP-compatible AI agents.20MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for iCloud Drive on macOS, enabling Claude to browse, read, search, tag, write, and trash files with safe defaults and automatic handling of iCloud placeholder files.01MIT