{
  "schemaVersion": "1.0",
  "item": {
    "slug": "dropbox-integration",
    "name": "Dropbox Integration",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/tirandagan/dropbox-integration",
    "canonicalUrl": "https://clawhub.ai/tirandagan/dropbox-integration",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/dropbox-integration",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=dropbox-integration",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "browse.js",
      "download.js",
      "dropbox-helper.js",
      "package.json",
      "references/setup-guide.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/dropbox-integration"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/dropbox-integration",
    "agentPageUrl": "https://openagent3.xyz/skills/dropbox-integration/agent",
    "manifestUrl": "https://openagent3.xyz/skills/dropbox-integration/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/dropbox-integration/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Overview",
        "body": "This skill provides read-only access to your Dropbox account, allowing you to browse folders, search files, and download content from OpenClaw. It uses OAuth 2.0 authentication with automatic token refresh for seamless long-term access.\n\nPerfect for: Safely accessing your Dropbox files without worrying about accidental modifications or deletions."
      },
      {
        "title": "Browse Files & Folders",
        "body": "List contents of any folder in your Dropbox\nView file sizes and modification dates\nNavigate folder hierarchies"
      },
      {
        "title": "Search Files",
        "body": "Full-text search across file names\nFind files anywhere in your Dropbox\nGet file metadata and locations"
      },
      {
        "title": "Download Files",
        "body": "Download any file from your Dropbox\nSave to local filesystem\nBatch download support"
      },
      {
        "title": "Automatic Token Management",
        "body": "OAuth 2.0 authentication with refresh tokens\nAutomatic token refresh (no manual re-authentication)\nSecure credential storage\nToken expiration handling with 5-minute buffer"
      },
      {
        "title": "Security & Permissions",
        "body": "This skill is configured for read-only access with the following Dropbox scopes:\n\nfiles.metadata.read - Read file/folder metadata\nfiles.content.read - Read file content\naccount_info.read - Read account information\n\nNOT included:\n\n❌ files.content.write - Cannot upload or modify files\n❌ files.metadata.write - Cannot rename or move files\n❌ files.permanent_delete - Cannot delete files\n\nThis ensures your Dropbox content remains safe from accidental modifications."
      },
      {
        "title": "Prerequisites",
        "body": "Before using this skill, you need:\n\nA Dropbox account (free or paid)\nA Dropbox App registration (takes 5 minutes)\nApp key and App secret from your Dropbox App\nNode.js with dropbox package (auto-installed)\n\nSetup time: ~10 minutes\n\nSee Setup Guide for step-by-step instructions."
      },
      {
        "title": "1. Create Dropbox App",
        "body": "Visit https://www.dropbox.com/developers/apps/create and create a new app:\n\nAPI: Scoped access\nAccess type: Full Dropbox (or App folder for restricted access)\nApp name: Something unique like \"OpenClaw-YourName\""
      },
      {
        "title": "2. Configure OAuth",
        "body": "In your app's settings:\n\nAdd redirect URI: http://localhost:3000/callback\nCopy your App key and App secret\nUnder Permissions tab, enable:\n\nfiles.metadata.read\nfiles.content.read\naccount_info.read"
      },
      {
        "title": "3. Save Credentials",
        "body": "Create credentials.json in the skill directory:\n\n{\n  \"app_key\": \"your_dropbox_app_key_here\",\n  \"app_secret\": \"your_dropbox_app_secret_here\"\n}\n\nImportant: This file is gitignored and will never be committed."
      },
      {
        "title": "4. Run OAuth Setup",
        "body": "node setup-oauth.js\n\nThis will:\n\nOpen your browser for Dropbox authorization\nStart a local server to capture the authorization code\nExchange the code for access + refresh tokens\nSave tokens securely to token.json"
      },
      {
        "title": "5. Test Connection",
        "body": "node test-connection.js\n\nIf successful, you'll see your Dropbox account information!"
      },
      {
        "title": "Browse a Folder",
        "body": "# List root folder\nnode browse.js\n\n# List specific folder\nnode browse.js \"/Documents\"\nnode browse.js \"/Photos/2024\"\n\nOutput:\n\n📁 Listing: /Documents\n\n📄 report.pdf (2.3 MB) - 2024-02-01\n📄 presentation.pptx (5.1 MB) - 2024-01-28\n📁 Projects\n📁 Archive\n\nTotal: 4 items"
      },
      {
        "title": "Search Files",
        "body": "node search-files.js \"budget 2024\"\nnode search-files.js \"contract\"\n\nOutput:\n\n🔍 Searching for: \"budget 2024\"\n\n✅ Found 3 matches:\n\n📄 /Finance/budget-2024-q1.xlsx\n   Size: 156.3 KB\n   Modified: 2024-01-15T10:30:00Z\n\n📄 /Reports/budget-2024-summary.pdf\n   Size: 2.1 MB\n   Modified: 2024-02-01T14:22:00Z"
      },
      {
        "title": "Download Files",
        "body": "# Download to local file\nnode download.js \"/Documents/report.pdf\" \"./downloads/report.pdf\"\n\n# Download to current directory\nnode download.js \"/Photos/vacation.jpg\" \"./vacation.jpg\"\n\nOutput:\n\n📥 Downloading: /Documents/report.pdf\n✅ Saved to: ./downloads/report.pdf (2.3 MB)"
      },
      {
        "title": "Integration with OpenClaw",
        "body": "From OpenClaw, you can use the exec tool to run these scripts:\n\nBrowse files:\n\nRun: node /path/to/dropbox-integration/browse.js \"/Documents\"\n\nSearch for files:\n\nRun: node /path/to/dropbox-integration/search-files.js \"contract\"\n\nDownload a file:\n\nRun: node /path/to/dropbox-integration/download.js \"/path/in/dropbox\" \"./local/path\"\n\nOr create custom automation workflows that use the dropbox-helper.js module directly."
      },
      {
        "title": "Authentication Flow",
        "body": "Initial Setup: User authorizes the app via OAuth 2.0\nToken Storage: Access token + refresh token saved to token.json\nAuto-Refresh: Before each API call, checks if token needs refresh\nSeamless Access: Automatically refreshes tokens 5 minutes before expiration"
      },
      {
        "title": "Token Lifecycle",
        "body": "Access Token: Short-lived (typically 4 hours)\nRefresh Token: Long-lived (doesn't expire unless revoked)\nAuto-refresh: Happens transparently in dropbox-helper.js\nRefresh Buffer: 5 minutes before expiration to prevent edge cases"
      },
      {
        "title": "File Structure",
        "body": "dropbox-integration/\n├── SKILL.md                 # This file\n├── dropbox-helper.js        # Auto-refresh Dropbox client\n├── setup-oauth.js           # OAuth setup script\n├── browse.js                # Browse folders\n├── search-files.js          # Search files\n├── download.js              # Download files\n├── test-connection.js       # Test authentication\n├── credentials.json.example # Template for credentials\n├── .gitignore               # Excludes credentials.json and token.json\n└── references/\n    └── setup-guide.md       # Detailed setup instructions"
      },
      {
        "title": "\"credentials.json not found\"",
        "body": "Create credentials.json with your Dropbox app key and secret (see Quick Start step 3)."
      },
      {
        "title": "\"Token refresh failed\"",
        "body": "Your refresh token may have been revoked. Re-run node setup-oauth.js to re-authenticate."
      },
      {
        "title": "\"Permission denied\" errors",
        "body": "Check that you enabled the required permissions in your Dropbox App settings under the Permissions tab."
      },
      {
        "title": "\"redirect_uri_mismatch\"",
        "body": "Make sure you added http://localhost:3000/callback to your app's redirect URIs in Dropbox App Console."
      },
      {
        "title": "OAuth setup gets stuck",
        "body": "If the local server doesn't catch the redirect, manually copy the full URL from your browser after authorization and look for the code= parameter."
      },
      {
        "title": "Limitations",
        "body": "Read-only: Cannot upload, modify, or delete files (by design)\nFile size: Practical limit ~150MB per download (Dropbox API constraint)\nRate limits: Dropbox API has rate limits (typically not an issue for personal use)\nShared folders: Access depends on your Dropbox account permissions"
      },
      {
        "title": "Security Best Practices",
        "body": "Never commit credentials: credentials.json and token.json are gitignored\nFile permissions: Tokens are saved with mode 0600 (user read/write only)\nApp-specific tokens: Each app has its own tokens (easily revokable)\nScope limitation: Only request permissions you actually need\nToken rotation: Refresh tokens are rotated automatically"
      },
      {
        "title": "References",
        "body": "Setup Guide - Detailed step-by-step instructions with screenshots\nDropbox API Documentation\nOAuth 2.0 Guide"
      },
      {
        "title": "Dropbox Developer Resources",
        "body": "App Console - Manage your apps\nAPI Explorer - Test API calls\nSDK Documentation - JavaScript SDK reference"
      },
      {
        "title": "Using the Helper Module",
        "body": "For custom integrations, import the helper directly:\n\nconst { getDropboxClient } = require('./dropbox-helper');\n\nasync function myCustomFunction() {\n  const dbx = await getDropboxClient(); // Auto-refreshing client\n  \n  // Use any Dropbox SDK method\n  const response = await dbx.filesListFolder({ path: '/Photos' });\n  console.log(response.result.entries);\n}\n\nThe helper automatically handles token refresh, so you never need to worry about expiration."
      },
      {
        "title": "Batch Operations",
        "body": "Download multiple files in sequence:\n\nconst { getDropboxClient } = require('./dropbox-helper');\nconst fs = require('fs').promises;\n\nasync function downloadMultiple(files) {\n  const dbx = await getDropboxClient();\n  \n  for (const file of files) {\n    const response = await dbx.filesDownload({ path: file.dropboxPath });\n    await fs.writeFile(file.localPath, response.result.fileBinary);\n    console.log(`Downloaded: ${file.dropboxPath}`);\n  }\n}"
      },
      {
        "title": "Dependencies",
        "body": "This skill requires the dropbox npm package:\n\nnpm install dropbox\n\nThe package is automatically installed when you install this skill via ClawHub."
      },
      {
        "title": "License",
        "body": "MIT - Free to use, modify, and distribute."
      },
      {
        "title": "Support",
        "body": "For issues or questions:\n\nCheck the Setup Guide for detailed instructions\nReview Dropbox API errors in the API documentation\nOpen an issue on the skill repository\n\nNote: This skill is designed for personal use. For production applications with multiple users, consider implementing proper OAuth flow with state management and error handling for concurrent users."
      }
    ],
    "body": "Dropbox Integration\nOverview\n\nThis skill provides read-only access to your Dropbox account, allowing you to browse folders, search files, and download content from OpenClaw. It uses OAuth 2.0 authentication with automatic token refresh for seamless long-term access.\n\nPerfect for: Safely accessing your Dropbox files without worrying about accidental modifications or deletions.\n\nCapabilities\nBrowse Files & Folders\nList contents of any folder in your Dropbox\nView file sizes and modification dates\nNavigate folder hierarchies\nSearch Files\nFull-text search across file names\nFind files anywhere in your Dropbox\nGet file metadata and locations\nDownload Files\nDownload any file from your Dropbox\nSave to local filesystem\nBatch download support\nAutomatic Token Management\nOAuth 2.0 authentication with refresh tokens\nAutomatic token refresh (no manual re-authentication)\nSecure credential storage\nToken expiration handling with 5-minute buffer\nSecurity & Permissions\n\nThis skill is configured for read-only access with the following Dropbox scopes:\n\nfiles.metadata.read - Read file/folder metadata\nfiles.content.read - Read file content\naccount_info.read - Read account information\n\nNOT included:\n\n❌ files.content.write - Cannot upload or modify files\n❌ files.metadata.write - Cannot rename or move files\n❌ files.permanent_delete - Cannot delete files\n\nThis ensures your Dropbox content remains safe from accidental modifications.\n\nPrerequisites\n\nBefore using this skill, you need:\n\nA Dropbox account (free or paid)\nA Dropbox App registration (takes 5 minutes)\nApp key and App secret from your Dropbox App\nNode.js with dropbox package (auto-installed)\n\nSetup time: ~10 minutes\n\nSee Setup Guide for step-by-step instructions.\n\nQuick Start\n1. Create Dropbox App\n\nVisit https://www.dropbox.com/developers/apps/create and create a new app:\n\nAPI: Scoped access\nAccess type: Full Dropbox (or App folder for restricted access)\nApp name: Something unique like \"OpenClaw-YourName\"\n2. Configure OAuth\n\nIn your app's settings:\n\nAdd redirect URI: http://localhost:3000/callback\nCopy your App key and App secret\nUnder Permissions tab, enable:\nfiles.metadata.read\nfiles.content.read\naccount_info.read\n3. Save Credentials\n\nCreate credentials.json in the skill directory:\n\n{\n  \"app_key\": \"your_dropbox_app_key_here\",\n  \"app_secret\": \"your_dropbox_app_secret_here\"\n}\n\n\nImportant: This file is gitignored and will never be committed.\n\n4. Run OAuth Setup\nnode setup-oauth.js\n\n\nThis will:\n\nOpen your browser for Dropbox authorization\nStart a local server to capture the authorization code\nExchange the code for access + refresh tokens\nSave tokens securely to token.json\n5. Test Connection\nnode test-connection.js\n\n\nIf successful, you'll see your Dropbox account information!\n\nUsage Examples\nBrowse a Folder\n# List root folder\nnode browse.js\n\n# List specific folder\nnode browse.js \"/Documents\"\nnode browse.js \"/Photos/2024\"\n\n\nOutput:\n\n📁 Listing: /Documents\n\n📄 report.pdf (2.3 MB) - 2024-02-01\n📄 presentation.pptx (5.1 MB) - 2024-01-28\n📁 Projects\n📁 Archive\n\nTotal: 4 items\n\nSearch Files\nnode search-files.js \"budget 2024\"\nnode search-files.js \"contract\"\n\n\nOutput:\n\n🔍 Searching for: \"budget 2024\"\n\n✅ Found 3 matches:\n\n📄 /Finance/budget-2024-q1.xlsx\n   Size: 156.3 KB\n   Modified: 2024-01-15T10:30:00Z\n\n📄 /Reports/budget-2024-summary.pdf\n   Size: 2.1 MB\n   Modified: 2024-02-01T14:22:00Z\n\nDownload Files\n# Download to local file\nnode download.js \"/Documents/report.pdf\" \"./downloads/report.pdf\"\n\n# Download to current directory\nnode download.js \"/Photos/vacation.jpg\" \"./vacation.jpg\"\n\n\nOutput:\n\n📥 Downloading: /Documents/report.pdf\n✅ Saved to: ./downloads/report.pdf (2.3 MB)\n\nIntegration with OpenClaw\n\nFrom OpenClaw, you can use the exec tool to run these scripts:\n\nBrowse files:\n\nRun: node /path/to/dropbox-integration/browse.js \"/Documents\"\n\n\nSearch for files:\n\nRun: node /path/to/dropbox-integration/search-files.js \"contract\"\n\n\nDownload a file:\n\nRun: node /path/to/dropbox-integration/download.js \"/path/in/dropbox\" \"./local/path\"\n\n\nOr create custom automation workflows that use the dropbox-helper.js module directly.\n\nHow It Works\nAuthentication Flow\nInitial Setup: User authorizes the app via OAuth 2.0\nToken Storage: Access token + refresh token saved to token.json\nAuto-Refresh: Before each API call, checks if token needs refresh\nSeamless Access: Automatically refreshes tokens 5 minutes before expiration\nToken Lifecycle\nAccess Token: Short-lived (typically 4 hours)\nRefresh Token: Long-lived (doesn't expire unless revoked)\nAuto-refresh: Happens transparently in dropbox-helper.js\nRefresh Buffer: 5 minutes before expiration to prevent edge cases\nFile Structure\ndropbox-integration/\n├── SKILL.md                 # This file\n├── dropbox-helper.js        # Auto-refresh Dropbox client\n├── setup-oauth.js           # OAuth setup script\n├── browse.js                # Browse folders\n├── search-files.js          # Search files\n├── download.js              # Download files\n├── test-connection.js       # Test authentication\n├── credentials.json.example # Template for credentials\n├── .gitignore               # Excludes credentials.json and token.json\n└── references/\n    └── setup-guide.md       # Detailed setup instructions\n\nTroubleshooting\n\"credentials.json not found\"\n\nCreate credentials.json with your Dropbox app key and secret (see Quick Start step 3).\n\n\"Token refresh failed\"\n\nYour refresh token may have been revoked. Re-run node setup-oauth.js to re-authenticate.\n\n\"Permission denied\" errors\n\nCheck that you enabled the required permissions in your Dropbox App settings under the Permissions tab.\n\n\"redirect_uri_mismatch\"\n\nMake sure you added http://localhost:3000/callback to your app's redirect URIs in Dropbox App Console.\n\nOAuth setup gets stuck\n\nIf the local server doesn't catch the redirect, manually copy the full URL from your browser after authorization and look for the code= parameter.\n\nLimitations\nRead-only: Cannot upload, modify, or delete files (by design)\nFile size: Practical limit ~150MB per download (Dropbox API constraint)\nRate limits: Dropbox API has rate limits (typically not an issue for personal use)\nShared folders: Access depends on your Dropbox account permissions\nSecurity Best Practices\nNever commit credentials: credentials.json and token.json are gitignored\nFile permissions: Tokens are saved with mode 0600 (user read/write only)\nApp-specific tokens: Each app has its own tokens (easily revokable)\nScope limitation: Only request permissions you actually need\nToken rotation: Refresh tokens are rotated automatically\nResources\nReferences\nSetup Guide - Detailed step-by-step instructions with screenshots\nDropbox API Documentation\nOAuth 2.0 Guide\nDropbox Developer Resources\nApp Console - Manage your apps\nAPI Explorer - Test API calls\nSDK Documentation - JavaScript SDK reference\nAdvanced Usage\nUsing the Helper Module\n\nFor custom integrations, import the helper directly:\n\nconst { getDropboxClient } = require('./dropbox-helper');\n\nasync function myCustomFunction() {\n  const dbx = await getDropboxClient(); // Auto-refreshing client\n  \n  // Use any Dropbox SDK method\n  const response = await dbx.filesListFolder({ path: '/Photos' });\n  console.log(response.result.entries);\n}\n\n\nThe helper automatically handles token refresh, so you never need to worry about expiration.\n\nBatch Operations\n\nDownload multiple files in sequence:\n\nconst { getDropboxClient } = require('./dropbox-helper');\nconst fs = require('fs').promises;\n\nasync function downloadMultiple(files) {\n  const dbx = await getDropboxClient();\n  \n  for (const file of files) {\n    const response = await dbx.filesDownload({ path: file.dropboxPath });\n    await fs.writeFile(file.localPath, response.result.fileBinary);\n    console.log(`Downloaded: ${file.dropboxPath}`);\n  }\n}\n\nDependencies\n\nThis skill requires the dropbox npm package:\n\nnpm install dropbox\n\n\nThe package is automatically installed when you install this skill via ClawHub.\n\nLicense\n\nMIT - Free to use, modify, and distribute.\n\nSupport\n\nFor issues or questions:\n\nCheck the Setup Guide for detailed instructions\nReview Dropbox API errors in the API documentation\nOpen an issue on the skill repository\n\nNote: This skill is designed for personal use. For production applications with multiple users, consider implementing proper OAuth flow with state management and error handling for concurrent users."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/tirandagan/dropbox-integration",
    "publisherUrl": "https://clawhub.ai/tirandagan/dropbox-integration",
    "owner": "tirandagan",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/dropbox-integration",
    "downloadUrl": "https://openagent3.xyz/downloads/dropbox-integration",
    "agentUrl": "https://openagent3.xyz/skills/dropbox-integration/agent",
    "manifestUrl": "https://openagent3.xyz/skills/dropbox-integration/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/dropbox-integration/agent.md"
  }
}