MCP server for pCloud file storage, enabling Claude to browse, read, download, upload, organize, and share files in pCloud accounts
pcloud-mcp demonstrates solid tool design with 21 well-named, verb-prefixed tools (list_, get_, create_, delete_, move_, copy_, upload_, download_, share_). All tools have descriptions (avg ~150 chars, within 10-1024 baseline). Input schemas are present with typed parameters and descriptions. Output structures are documented in code (ListFolderOutput, AccountInfoOutput, etc.). Risk annotations (READ_ONLY, WRITE, DESTRUCTIVE, REVERSIBLE) show security awareness. However, some parameter descriptions lack format/constraint details (e.g., 'expire_date' format not specified), and error handling guidance is minimal. No explicit confirmation pattern for destructive ops (delete_file, delete_folder). Output schemas are inferred from Go structs rather than explicitly documented in tool definitions.
Return account information for the authenticated pCloud user: email (and whether it's verified), storage quota and used space in bytes, and premium status. Read-only.
Copy a pCloud file into another folder (to_folder_id 0 = root), optionally under new_name. The original is left in place; returns the new file.
Copy a pCloud folder and all its contents into another folder (to_folder_id 0 = root), optionally under new_name. The original is left in place; returns the new folder.
Create a new folder inside a pCloud parent folder. Use parent_id 0 for the account root.
Delete a pCloud file by file_id. pCloud normally moves deleted items to Trash, recoverable for a limited, plan-dependent period before permanent purge; sharing is not restored. Destructive — do not rely on Trash as a backup.
Destructive operations (delete_file, delete_folder) lack confirmation/dry-run pattern. LLMs may accidentally delete data without explicit user approval.
Parameter format constraints not documented in descriptions. 'expire_date' format (YYYY-MM-DD HH:MM:SS) is stated but not validated; 'size' in pcloud_get_thumbnail lacks explicit range (16..1024 mentioned in description but not in schema constraints).
Error handling guidance missing. Tools return errors but do not guide LLM on recovery (e.g., 'file not found, try pcloud_list_folder to verify ID').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
Delete a pCloud folder by folder_id and ALL of its contents, recursively, removing its sharing. Deleted items normally go to pCloud Trash, restorable for a limited, plan-dependent time before permanent purge; do not rely on recovery. Destructive.
Revoke a public link by link_id (returned by pcloud_share_file / pcloud_share_folder) so the URL stops working. This tightens access — the shared file/folder itself is untouched.
Download a single pCloud file to a local directory. Provide file_id and the file's name (both from pcloud_list_folder) and a local destination directory. The name is validated to prevent path traversal.
Download a pCloud folder and its entire subtree to a local directory, mirroring the structure under destination/<name>. Every remote name is validated to prevent path traversal; the download aborts if any name is unsafe.
Return metadata for one pCloud file by file_id without downloading it: name, size, content type, created/modified time, and content hashes (sha256/sha1/md5, where the account's region provides them). Read-only.
Get a temporary streaming URL for a video or audio file by file_id (set audio=true for audio). Read-only.
Fetch a small JPEG thumbnail of a pCloud image or video by file_id and return it inline so the model can see it. size is WIDTHxHEIGHT (default 256x256, max 1024x1024). The fetched preview is capped at 8 MiB and, unlike pcloud_read_file, has no link fallback — an over-cap render returns an error (real thumbnails are far smaller). Use this to visually scan or identify photos cheaply without pulling full-resolution files; it also works for formats the model can't read directly (e.g. BMP), since pCloud renders the preview as JPEG.
List the immediate contents of a pCloud folder. Use folder_id 0 for the account root. Returns each child's name, id, and whether it is a folder.
Rename and/or move a pCloud file. Set new_name to rename, to_folder_id to move (0 = account root); either or both may be provided. Omit to_folder_id to keep the file in its current folder.
Rename and/or move a pCloud folder. Set new_name to rename, to_folder_id to move (0 = account root); either or both may be provided. Omit to_folder_id to keep the folder where it is.
Read a pCloud file by file_id and return its content inline: text files (md/json/txt/code) as text, viewable images (JPEG/PNG/GIF/WebP) as an image the model can see. Files larger than max_bytes (default 5 MiB, max 10 MiB) or non-text/non-image binaries return a temporary download link instead of content, so a large file never overflows the context. Works in both stdio and HTTP modes.
Write text straight into a new pCloud file.
Create a public share link for a pCloud file. Anyone with the link can access the file, so confirm intent before sharing. Optional: expire_date, password, max_downloads. Returns link_id (revoke with pcloud_delete_link).
Create a public share link for an entire pCloud folder. Anyone with the link can browse and download the folder, so confirm intent. Optional: expire_date, password, max_downloads. Returns link_id (revoke with pcloud_delete_link).
Upload a local file into a pCloud folder. Use folder_id 0 for the account root. By default the local file name is kept; set name to store under a different name.
Have pCloud fetch a remote URL straight into a folder.
Output schemas inferred from Go struct definitions rather than explicitly documented in tool registration. LLMs cannot see ListFolderOutput, AccountInfoOutput structures without reading source code.
pcloud_save_text description is minimal (18 chars: 'Write text straight into a new pCloud file.'). Lacks context on when to use vs pcloud_upload_file, max file size, or supported encodings.