Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Manage Dropbox files via MCP server and CLI. Swift-native implementation using SwiftyDropbox SDK with OAuth 2.0 PKCE and secure Keychain token storage.
.claude/skills/sundial-org-dropbox/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 454% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 54% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 81% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 40% | 0% |
Manage Dropbox files via MCP server and CLI. Swift-native implementation using SwiftyDropbox SDK with OAuth 2.0 PKCE and secure Keychain token storage.
bash# Clone and build Dropbook git clone https://github.com/RyanLisse/Dropbook.git cd Dropbook make build
Use the interactive OAuth flow with secure Keychain storage:
bashexport DROPBOX_APP_KEY="your_dropbox_app_key" export DROPBOX_APP_SECRET="your_dropbox_app_secret" make login # or: swift run dropbook login
This will:
~/.dropbook/auth.json if Keychain unavailableSecurity Features (RFC 9700 compliant):
kSecAttrAccessibleWhenUnlockedbashexport DROPBOX_APP_KEY="your_dropbox_app_key" export DROPBOX_APP_SECRET="your_dropbox_app_secret" export DROPBOX_ACCESS_TOKEN="your_dropbox_access_token"
Note: Manual tokens don't support automatic refreshing. Use OAuth login for production use.
Clear stored tokens from both Keychain and file storage:
bashmake logout # or: swift run dropbook logout
Start the MCP server:
bashmake mcp # or: ./.build/debug/dropbook mcp
| Tool | Description | |------|-------------| | list_directory | List files and folders in a Dropbox directory | | search | Search for files by name or content | | upload | Upload a file to Dropbox | | download | Download a file from Dropbox | | delete | Delete a file or folder (moves to trash) | | get_account_info | Get account name and email | | read_file | Read contents of a text file |
List files and folders in a Dropbox directory.
Parameters:
path (string, optional): Directory path. Default: "/"Response:
json{ "files": [ {"type": "file", "name": "doc.pdf", "path": "/Docs/doc.pdf", "size": 1024}, {"type": "folder", "name": "Projects", "path": "/Projects"} ] }
Search for files by name or content.
Parameters:
query (string, required): Search termpath (string, optional): Path to search within. Default: "/"Response:
json{ "count": 2, "results": [ {"matchType": "filename", "metadata": {"name": "report.pdf", "path": "/Docs/report.pdf"}} ] }
Upload a file to Dropbox.
Parameters:
localPath (string, required): Absolute path to local fileremotePath (string, required): Destination in Dropboxoverwrite (boolean, optional): Replace if exists. Default: falseResponse:
json{ "uploaded": true, "name": "file.txt", "path": "/Uploads/file.txt", "size": 5000 }
Download a file from Dropbox.
Parameters:
remotePath (string, required): File path in DropboxlocalPath (string, required): Local destination pathResponse:
json{ "downloaded": true, "to": "/tmp/report.pdf" }
Delete a file or folder from Dropbox (moves to trash).
Parameters:
path (string, required): Path to delete in DropboxResponse:
json{ "deleted": true, "path": "/Docs/old-file.pdf" }
Get Dropbox account information.
Parameters: None
Response:
json{ "name": "Ryan Lisse", "email": "user@example.com" }
Read and return the contents of a text file from Dropbox.
Parameters:
path (string, required): Path to file in DropboxResponse: Returns the file contents as text. Only works with UTF-8 encoded text files.
bash# Authentication make login # OAuth login with Keychain storage make logout # Clear stored tokens # File operations make list # List root directory swift run dropbook list /path # Search files swift run dropbook search "query" [path] # Upload file swift run dropbook upload /local/path /remote/path [--overwrite] # Download file swift run dropbook download /remote/path /local/path # Start MCP server make mcp
The project includes a .mcp.json file that configures the MCP server:
json{ "mcpServers": { "dropbox": { "command": "/path/to/Dropbook/.build/debug/dropbook", "args": ["mcp"], "env": { "DROPBOX_APP_KEY": "${DROPBOX_APP_KEY}", "DROPBOX_APP_SECRET": "${DROPBOX_APP_SECRET}" } } } }
Enable project MCP servers in Claude Code settings.json:
json{ "enableAllProjectMcpServers": true }
json{ "mcpServers": { "dropbox": { "command": "/path/to/dropbook/.build/debug/dropbook", "args": ["mcp"], "env": { "DROPBOX_APP_KEY": "${DROPBOX_APP_KEY}", "DROPBOX_APP_SECRET": "${DROPBOX_APP_SECRET}" } } } }
| Error | Cause | Solution | |-------|-------|----------| | notConfigured | Missing env vars | Set DROPBOX_APP_KEY, DROPBOX_APP_SECRET | | invalidArguments | Missing required params | Check tool parameters | | notFound | Path doesn't exist | Use list_directory to verify paths | | itemNotFound | No token in Keychain | Run make login to authenticate |
Dropbook/
├── Sources/
│ ├── DropbookCore/ # Business logic (actor-based)
│ │ ├── Auth/ # Keychain & file token storage
│ │ ├── Config/ # Configuration management
│ │ ├── Models/ # Domain models
│ │ └── Services/ # DropboxService actor
│ ├── DropbookCLI/ # CLI adapter
│ │ └── Commands/ # Login, logout, file commands
│ └── DropbookMCP/ # MCP server
├── dropbox-skill/ # Skill documentation
├── Makefile # Build automation
├── .mcp.json # MCP server configuration
└── Package.swiftFor large-scale operations like backups, syncing, or bulk transfers, use rclone - a powerful cloud sync tool with native Dropbox support.
bashbrew install rclone
bash# Interactive setup (opens browser for OAuth) rclone authorize dropbox # Save the token output to config mkdir -p ~/.config/rclone cat > ~/.config/rclone/rclone.conf << 'EOF' [dropbox] type = dropbox token = {"access_token":"...paste token here..."} EOF
bash# Full backup with progress rclone copy dropbox: /Volumes/TimeCapsule/Dropbox-Backup \ --progress \ --transfers 4 \ --checkers 8 \ --retries 10 \ --log-file /tmp/dropbox-backup.log # Sync (mirror - deletes files not in source) rclone sync dropbox: /Volumes/Backup/Dropbox --progress # Check what would be copied (dry run) rclone copy dropbox: /Volumes/Backup --dry-run
bash# List remote contents rclone lsd dropbox: # List directories rclone ls dropbox: # List all files rclone size dropbox: # Calculate total size # Copy operations rclone copy dropbox:folder /local/path # Download folder rclone copy /local/path dropbox:folder # Upload folder # Sync (bidirectional) rclone bisync dropbox: /local/path --resync # Mount as filesystem (macOS - requires macFUSE) rclone mount dropbox: /mnt/dropbox --vfs-cache-mode full
| Flag | Description | |------|-------------| | --progress | Show real-time transfer progress | | --transfers 4 | Number of parallel transfers | | --checkers 8 | Number of parallel checkers | | --retries 10 | Retry failed operations | | --low-level-retries 20 | Retry low-level errors | | --log-file path | Write logs to file | | --dry-run | Show what would be done | | --checksum | Verify with checksums |
Dropbox has strict API rate limits. If you see too_many_requests errors:
bash# Use bandwidth limiting rclone copy dropbox: /backup --bwlimit 1M # Or add delays between operations rclone copy dropbox: /backup --tpslimit 2
rclone handles rate limits automatically with exponential backoff.
list_directory before operationsbrew install rclone)Other measured skills in the registry, with their headline benchmark lift.