mcp-pcloud-crunchtools
This server exposes pCloud cloud storage through MCP, letting you browse, manage, search, read, and share files and folders in a pCloud account.
Folder operations: list folder contents, create folders, delete folders (optionally recursive), rename/move folders, and copy folders.
File operations: get file metadata, delete files, rename/move files, copy files, and read UTF-8 text file contents.
Checksums & links: retrieve stored SHA256/SHA1/MD5 checksums, get temporary direct download links, and create public share links.
Search & account: search files/folders by name and view account profile/quota.
Authorization support: start and check OAuth authorization flows via MCP tools (pcloud_auth_start, pcloud_auth_result, pcloud_auth_status).
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., "@mcp-pcloud-crunchtoolsList the files in my pCloud root folder"
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.
mcp-pcloud-crunchtools
Secure MCP server for pCloud cloud storage. Browse, search, read, and manage files and folders in a pCloud account through the Model Context Protocol.
Authentication is OAuth 2.0. Register an application, run mcp-pcloud-crunchtools login once, and the server manages the bearer token from there. pCloud accounts with two-factor authentication enabled cannot be accessed with a username and password, and password-derived tokens travel in the URL query string. This server never derives a credential from a password and never puts one in a URL — the client secret is only ever sent in a POST body.
Installation
# uvx (zero-install)
uvx mcp-pcloud-crunchtools
# PyPI
pip install mcp-pcloud-crunchtools
# Container
podman run quay.io/crunchtools/mcp-pcloudRelated MCP server: MCP Google Suite
Configuration
Register an application at pCloud my_apps, add http://localhost:8029/callback to its redirect URIs, then:
export PCLOUD_CLIENT_ID=your_client_id
export PCLOUD_CLIENT_SECRET=your_client_secret
mcp-pcloud-crunchtools loginlogin opens a browser, you approve the app, and the resulting bearer token is cached at ~/.config/mcp-pcloud/tokens.json (0600). That is the whole setup. pCloud access tokens do not expire — its oauth2_token endpoint returns no refresh_token and no expires_in — so there is no renewal cycle and nothing to rotate on a schedule. The token stays valid until you revoke the app from the pCloud console, which does not touch your account password or any other session.
The login flow also records which data center holds the account, so the region is never configured by hand.
Variables
Variable | Required | Description |
| preferred | pCloud application client id |
| preferred | pCloud application client secret |
| alternative | A bearer token supplied directly, for containers and CI |
| last resort | A pCloud desktop-client session token |
| no | Where |
| no |
|
Modes are selected in that order: a client id and secret together select OAuth application mode and outrank everything else; otherwise a static access token is used; a session token is the last resort.
Every credential variable also accepts a _FILE form (PCLOUD_CLIENT_SECRET_FILE, PCLOUD_ACCESS_TOKEN_FILE, …) pointing at a file that holds the value. The _FILE form takes precedence and is preferred for container deployments — it works with podman secrets, Kubernetes secret volumes, and systemd LoadCredential=. The server warns (but does not fail) if the file is group- or world-readable.
Headless hosts
A container has no browser, and login cannot run inside one. Prefer
authorizing over MCP: call pcloud_auth_start, open the URL it returns,
approve, and pCloud redirects to the server's own /callback route, which
completes the exchange. Nothing is copied by hand and no port is forwarded.
This needs PCLOUD_OAUTH_REDIRECT_URI set to a URL that reaches /callback
from your browser, and that same URL registered in the pCloud application.
Without a reachable callback URL, login --manual authorizes with no listener
at all: pCloud displays the code and you paste it back.
mcp-pcloud-crunchtools login --manualFailing both, forward the callback port and run login over SSH:
ssh -L 8029:localhost:8029 yourhost
mcp-pcloud-crunchtools login --no-browser # prints the URL; open it locallyAlternatively, run login on a workstation and copy the resulting tokens.json to the host.
Which credential do I have?
If you only have the token the pCloud desktop client stores, that is a session token, not an OAuth token: pCloud rejects it as an access_token with result 2094, so set it as PCLOUD_AUTH_TOKEN. Prefer an application: a session token is the account, carries no scope, and cannot be revoked independently of the client that issued it.
Claude Code
claude mcp add mcp-pcloud-crunchtools \
--env PCLOUD_CLIENT_ID=your_client_id \
--env PCLOUD_CLIENT_SECRET=your_client_secret \
-- uvx mcp-pcloud-crunchtoolsTransports
mcp-pcloud-crunchtools login # authorize once
mcp-pcloud-crunchtools # stdio (default)
mcp-pcloud-crunchtools serve --transport sse --port 8028
mcp-pcloud-crunchtools serve --transport streamable-http --port 8028Tools
Folders — pcloud_list_folder, pcloud_create_folder, pcloud_delete_folder, pcloud_rename_folder, pcloud_copy_folder
Files — pcloud_get_file_info, pcloud_delete_file, pcloud_rename_file, pcloud_copy_file, pcloud_read_text_file, pcloud_get_checksum
Links — pcloud_get_file_link, pcloud_create_public_link
Search & account — pcloud_search, pcloud_get_user_info
Authorization — pcloud_auth_status, pcloud_auth_start, pcloud_auth_result
pcloud_create_public_link publishes a file to anyone holding the returned URL, and pcloud_get_file_link returns a time-limited direct download URL. Treat both as credential-issuing operations when building tool allowlists.
Security
Tokens and the client secret held as Pydantic
SecretStr, never logged and scrubbed from error messages, including a token loaded from the store rather than the environmentstateparameter checked with a constant-time comparison on the OAuth callback; the redirect'shostnameis validated against the known pCloud regions before it is usedToken store written 0600 via
os.open, never through a world-readable temporary fileToken sent in an
Authorizationheader, never in a URLAll arguments validated by Pydantic models with
extra="forbid"; paths must be absolute and may not contain..traversal segmentsTLS certificate validation always on, 30s request timeout, 10 MB response ceiling
No filesystem access, shell execution, or code evaluation
Development
uv sync
uv run ruff check src tests
uv run mypy src
uv run pytest -v
gourmand --full .
podman build -f Containerfile .License
AGPL-3.0-or-later
Available Tools
18 toolspcloud_auth_resultPcloud Auth ResultA
Report the outcome of the most recent authorization redirect.
Inputs: no named parameters. Returns: result
pcloud_auth_startPcloud Auth StartA
Begin browser authorization and return the URL for the user to approve.
Open the returned URL. The user approves there, pCloud redirects back to this server, and the token is stored automatically -- nothing is copied back by hand. Then call pcloud_auth_status to confirm.
Inputs: no named parameters. Returns: result
pcloud_auth_statusPcloud Auth StatusARead-only
Report whether this server currently holds a usable pCloud credential.
Call this first. It says whether the server can reach pCloud, and if it cannot, what is missing and which tool fixes it.
Inputs: no named parameters. Returns: result
pcloud_copy_filePcloud Copy FileC
Copy a file in pCloud to a new location.
Inputs: path (required), to_path (required). Returns: result
pcloud_copy_folderPcloud Copy FolderB
Copy a folder in pCloud to a new location.
Inputs: path (required), to_path (required). Returns: result
pcloud_create_folderPcloud Create FolderC
Create a folder in pCloud, succeeding if it already exists.
Inputs: path (required). Returns: result
pcloud_create_public_linkPcloud Create Public LinkA
Create a public share link for a file, exposing it to anyone with the URL.
Inputs: path (required). Returns: result
pcloud_delete_filePcloud Delete FileC
Delete a file from pCloud.
Inputs: path (required). Returns: result
pcloud_delete_folderPcloud Delete FolderA
Delete a folder in pCloud. Set recursive to remove its contents too.
Inputs: path (required), recursive. Returns: result
pcloud_get_checksumPcloud Get ChecksumBRead-only
Get pCloud's stored SHA256, SHA1, and MD5 checksums for a file.
Inputs: path (required). Returns: result
pcloud_get_file_infoPcloud Get File InfoCRead-only
Get metadata for a file in pCloud.
Inputs: path (required). Returns: result
pcloud_get_file_linkPcloud Get File LinkBRead-only
Get a temporary direct download URL for a file in pCloud.
Inputs: path (required). Returns: result
pcloud_get_user_infoPcloud Get User InfoARead-only
Get the authenticated pCloud account's profile and quota usage.
Inputs: no named parameters. Returns: result
pcloud_list_folderPcloud List FolderBRead-only
List contents of a folder in pCloud with file and folder metadata.
Inputs: path (required), recursive. Returns: result
pcloud_read_text_filePcloud Read Text FileBRead-only
Read the contents of a UTF-8 text file stored in pCloud.
Inputs: path (required). Returns: result
pcloud_rename_filePcloud Rename FileC
Rename or move a file in pCloud.
Inputs: path (required), to_path (required). Returns: result
pcloud_rename_folderPcloud Rename FolderC
Rename or move a folder in pCloud.
Inputs: path (required), to_path (required). Returns: result
pcloud_searchPcloud SearchCRead-only
Search pCloud for files and folders whose names match a query.
Inputs: path (required), query (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
TDQS
Scored across 18 tools
Tools target distinct resources and actions, with clear separation between folder and file operations, metadata vs content, and auth lifecycle. A few file-level tools (get_file_info, get_checksum, get_file_link, create_public_link) could be momentarily confused, but descriptions clarify their differences.
Consistent pcloud_ prefix and snake_case throughout, with most tools following a verb_noun pattern (list_folder, create_folder, delete_file). Minor deviations like pcloud_search (verb only) and pcloud_auth_* (domain_noun) are still predictable and readable.
18 tools is borderline heavy for a cloud storage server, with separate folder and file operations duplicating several verbs (delete, rename, copy). Each tool earns its place, but the set could be consolidated.
Core management operations for folders and files are covered, but there is no upload or create file tool, which is a fundamental gap for cloud storage. Download is only partially covered via get_file_link and read_text_file, leaving a significant missing operation.
Maintenance
Related MCP Connectors
Web search, data extraction and controlled browser automation for AI assistants via OAuth.
Connect AI agents to Filepad workspaces through OAuth MCP.
Persistent memory and shared context across compatible AI assistants, with account-scoped OAuth.
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables interaction between LLMs and Obsidian vaults through the Model Context Protocol, supporting secure file operations, content management, and advanced search capabilities.5,325 npm702Apache 2.0
- AlicenseAqualityDmaintenanceA Model Context Protocol server that provides seamless integration with Google Workspace, allowing operations with Google Drive, Docs, and Sheets through secure OAuth2 authentication.860 PyPI3MIT
- AlicenseAqualityDmaintenanceEnables AI agents to perform file operations and sharing management on NextCloud servers via the Model Context Protocol.145MIT
- AlicenseAqualityFmaintenanceEnables Gmail, Google Calendar, and Google Drive access through the Model Context Protocol, supporting email management, event scheduling, and file operations.8528 npmMIT