> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Dropbox MCP server

The Dropbox MCP connector routes your AI agent's tool calls to Dropbox's own MCP server through Scalekit. Each user signs in to Dropbox once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 25 tools.

**Authentication:** OAuth 2.1
**Categories:** Files & Documents, Productivity
**Tools:** 25: 16 read, 5 write, 4 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=DROPBOXMCP)

## What you can do

- **Browse and search files**: list folder contents, search by name, and fetch file details and content
- **Manage files and folders**: create, copy, move, and delete files and folders
- **Convert and transcribe**: turn documents into markdown and transcribe audio or video files
- **Share files**: create shared links with access controls, get download links, and set up file requests
- **Restore earlier versions**: view file revision history and restore files or folders to a previous state

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Dropbox MCP connection

   In **AgentKit > Connections**, create a Dropbox MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for Dropbox, so you don't need to register an OAuth app. To show your own app on the consent screen, use your own credentials instead.

   **Use your own OAuth app:**

   Create a Dropbox OAuth app to get a client ID and secret, then register your Scalekit redirect URI so Dropbox can redirect users back after authorization.

   1. ### Create a Dropbox developer app

      - Go to [dropbox.com/developers](https://www.dropbox.com/developers) and sign in.
      - Click **Create apps**.

      > Image: Screenshot

   2. ### Configure the app

      On the app creation form:
      - **Choose an API**: Select **Scoped access**.
      - **Choose the type of access**: Select **Full Dropbox** — Access to all files and folders in a user's Dropbox.
      - **Name your app**: Enter a name (e.g. `Agent Auth`).
      - Click **Create app**.

      > Image: Screenshot

   3. ### Copy your credentials and add the redirect URI

      On your app's settings page:
      - Copy the **App key** (this is your client ID) and **App secret** (click **Show** to reveal).
      - Under **OAuth 2** → **Redirect URIs**, add your Scalekit redirect URI and click **Add**.

      > Image: Screenshot

   4. ### Create a connection in Scalekit

      - In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** → **Connections** → **Create Connection**.
      - Search for **Dropbox MCP** and click **Create**.
      - Enter the **App key** as the client ID and **App secret** as the client secret.
      - Note the **Connection name** — use this as `connection_name` in your code (e.g., `dropboxmcp`).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'dropboxmcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Dropbox MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'dropboxmcp_check_job_status',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "dropboxmcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Dropbox MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="dropboxmcp_check_job_status",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'dropboxmcp_check_job_status',
  toolInput: {},
  connector: 'dropboxmcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="dropboxmcp_check_job_status",
    tool_input={},
    connection_name="dropboxmcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `dropboxmcp_check_job_status`

Check Job Status · Read-only

Check the status of an async Dropbox operation by its job ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `operation_id` (`string`, optional): The async job ID returned from a previous Dropbox operation.
- `wait_ms` (`integer`, optional): Milliseconds to wait for the job to complete before returning.

Example input: `{}`

### `dropboxmcp_download_link`

Download Link · Read-only

Get temporary download URLs for one or more files.

Read only: yes. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `entries` (`array`, required): List of file or folder paths to operate on.
- `expiration_in_sec` (`integer`, optional): Seconds until the temporary download URL expires. Must be 0 (no expiry) or between 60 and 900.

Example input: `{"entries":[]}`

### `dropboxmcp_get_file_content`

Get File Content · Read-only

Retrieve the raw content of a file by path or file ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `path_or_file_id` (`string`, required): The Dropbox path or file ID of the file or folder.

Example input: `{"path_or_file_id":"<path_or_file_id>"}`

### `dropboxmcp_get_file_metadata`

Get File Metadata · Read-only

Retrieve metadata for a file or folder by path or file ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `path_or_file_id` (`string`, required): The Dropbox path or file ID of the file or folder.

Example input: `{"path_or_file_id":"<path_or_file_id>"}`

### `dropboxmcp_get_file_request`

Get File Request · Read-only

Retrieve details of a specific file request by its ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `id` (`string`, required): The unique ID of the file request.

Example input: `{"id":"<id>"}`

### `dropboxmcp_get_markdown`

Get Markdown · Read-only

Convert a Dropbox document to markdown, optionally polling an in-progress async conversion job.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `async_job_id` (`string`, optional): Opaque token from a previous in_progress get_markdown response. Send this alone to poll for completion.
- `embed_images` (`boolean`, optional): Embed images as base64 data URIs in the markdown output. Can significantly increase output size. Omit to disable.
- `enable_ocr` (`boolean`, optional): Run OCR on PDF documents. Processing is slower when enabled. Omit to disable.
- `path_or_file_id` (`string`, optional): Document to convert to markdown. Required on a new request; omit when polling with async_job_id.

Example input: `{}`

### `dropboxmcp_get_shared_link_metadata`

Get Shared Link Metadata · Read-only

Retrieve metadata for a file or folder from its shared link URL.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `url` (`string`, optional): The shared link URL to retrieve metadata for.

Example input: `{}`

### `dropboxmcp_get_transcript`

Get Transcript · Read-only

Transcribe a Dropbox audio or video file, optionally polling an in-progress async transcription job.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `async_job_id` (`string`, optional): Opaque token from a previous in_progress get_transcript response. Send this alone to poll for completion.
- `audio_language` (`string`, optional): ISO 639-1 two-letter language code such as "en". Omit for auto-detection.
- `path_or_file_id` (`string`, optional): Audio or video file to transcribe. Required on a new request; omit when polling with async_job_id.
- `timestamp_level` (`string`, optional): Granularity of segment timestamps. Omit for the default of "sentence". One of: `sentence`, `word`.

Example input: `{}`

### `dropboxmcp_get_usage_and_quota`

Get Usage And Quota · Read-only

Retrieve the current storage usage and quota for the Dropbox account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `dropboxmcp_list_file_requests`

List File Requests · Read-only

List all file requests for the Dropbox account with optional pagination.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cursor` (`string`, optional): Pagination cursor from the previous response to fetch the next page.
- `limit` (`integer`, optional): Maximum number of results to return per page.

Example input: `{}`

### `dropboxmcp_list_file_revisions`

List File Revisions · Read-only

List the revision history of a file in Dropbox.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `path_or_file_id` (`string`, required): The Dropbox path or file ID of the file or folder.
- `limit` (`integer`, optional): Maximum number of revisions to return. Valid range is 1-100. Omit to use the default of 10.

Example input: `{"path_or_file_id":"<path_or_file_id>"}`

### `dropboxmcp_list_folder`

List Folder · Read-only

List the contents of a Dropbox folder with optional pagination and filters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cursor` (`string`, optional): Pagination cursor from the previous response to fetch the next page.
- `max_results` (`integer`, optional): Maximum number of results to return.
- `object_types` (`array`, optional): Optional object type filters for the first list_folder call. Valid values: "file" and "folder".
- `path` (`string`, optional): The Dropbox path to the file or folder (e.g. /Documents/report.pdf).
- `recursive` (`boolean`, optional): If true, include the contents of all subdirectories.

Example input: `{}`

### `dropboxmcp_list_restore_events`

List Restore Events · Read-only

List restorable file and folder history events in Dropbox, optionally scoped to a path.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cursor` (`string`, optional): Opaque cursor from a previous list_restore_events response. Reuse only with list_restore_events pagination; send cursor only.
- `direction` (`string`, optional): Time direction to traverse. Empty or omitted defaults to "PAST". One of: ``, `PAST`, `FUTURE`.
- `only_rewindable` (`boolean`, optional): If true, only include events that can still be rewound.
- `path` (`string`, optional): Optional folder path to scope history. Accepts "" or "/" for root.
- `timestamp` (`integer`, optional): Starting point in time, in seconds since epoch UTC.

Example input: `{}`

### `dropboxmcp_list_shared_links`

List Shared Links · Read-only

List shared links for the account or a specific path with pagination.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cursor` (`string`, optional): Pagination cursor from the previous response to fetch the next page.
- `path` (`string`, optional): The Dropbox path to the file or folder (e.g. /Documents/report.pdf).

Example input: `{}`

### `dropboxmcp_search`

Search · Read-only

Search for files and folders in Dropbox by query with optional filters.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cursor` (`string`, optional): Pagination cursor from the previous response to fetch the next page.
- `file_categories` (`array`, optional): No description.
- `file_extensions` (`array`, optional): No description.
- `file_status` (`string`, optional): Filter search results by file status (active or deleted).
- `filename_only` (`boolean`, optional): If true, restricts the search to file and folder names only.
- `last_modified_after` (`string`, optional): No description.
- `last_modified_before` (`string`, optional): No description.
- `max_results` (`integer`, optional): Maximum number of results to return.
- `order_by` (`string`, optional): Field to sort search results by.
- `path` (`string`, optional): The Dropbox path to the file or folder (e.g. /Documents/report.pdf).
- `query` (`string`, optional): The search query string to match against file and folder names.
- `reverse_order` (`boolean`, optional): If true, returns results in reverse order.

Example input: `{}`

### `dropboxmcp_who_am_i`

Who Am I · Read-only

Retrieve the current Dropbox account profile information.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `dropboxmcp_copy`

Copy · Write

Copy one or more files or folders to a new location in Dropbox.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `entries` (`array`, required): List of file or folder paths to operate on.
- `autorename` (`boolean`, optional): If true, renames the destination if a conflict exists.

Example input: `{"entries":[]}`

### `dropboxmcp_create_file`

Create File · Write

Create a new file at the specified path with the given content.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `content` (`string`, required): The text content to write to the new file.
- `path` (`string`, required): The Dropbox path to the file or folder (e.g. /Documents/report.pdf).

Example input: `{"content":"<content>","path":"<path>"}`

### `dropboxmcp_create_file_request`

Create File Request · Write

Create a file request so others can upload files to your Dropbox.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `destination` (`string`, required): The Dropbox folder path where uploaded files will be saved.
- `title` (`string`, required): The title of the file request shown to uploaders.
- `closed` (`boolean`, optional): If true, the file request is closed and no longer accepts uploads.
- `deadline` (`string`, optional): The deadline for the file request in ISO 8601 format.
- `deadline_allow_late_uploads` (`string`, optional): No description. One of: `one_day`, `two_days`, `seven_days`, `thirty_days`, `always`.
- `description` (`string`, optional): An optional description shown to uploaders.
- `video_project_id` (`string`, optional): No description.

Example input: `{"destination":"<destination>","title":"<title>"}`

### `dropboxmcp_create_folder`

Create Folder · Write

Create a new folder at the specified path in Dropbox.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `path` (`string`, required): The Dropbox path to the file or folder (e.g. /Documents/report.pdf).

Example input: `{"path":"<path>"}`

### `dropboxmcp_create_shared_link`

Create Shared Link · Write

Create a shared link for a file or folder with optional access controls.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `path_or_file_id` (`string`, required): The Dropbox path or file ID of the file or folder.
- `access_level` (`string`, optional): The access level for the shared link (viewer, editor).
- `allow_download` (`string`, optional): No description.
- `audience` (`string`, optional): The audience for the shared link (public, team, no_one).
- `emails` (`array`, optional): No description.
- `expires` (`string`, optional): The expiration date of the shared link in ISO 8601 format.
- `password` (`string`, optional): An optional password to protect the shared link.

Example input: `{"path_or_file_id":"<path_or_file_id>"}`

### `dropboxmcp_delete`

Delete · Destructive

Permanently delete one or more files or folders from Dropbox.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `entries` (`array`, required): List of file or folder paths to operate on.

Example input: `{"entries":[]}`

### `dropboxmcp_move`

Move · Destructive

Move one or more files or folders to a new location in Dropbox.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `entries` (`array`, required): List of file or folder paths to operate on.
- `autorename` (`boolean`, optional): If true, renames the destination if a conflict exists.

Example input: `{"entries":[]}`

### `dropboxmcp_restore_file_revision`

Restore File Revision · Destructive

Restore a file to a previous revision in Dropbox.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `destination_path` (`string`, required): Destination path to restore. Accepts fq_path such as "/Documents/file.txt" or ns_path such as "ns:123//Documents/file.txt".
- `rev` (`string`, required): Revision hash to restore.

Example input: `{"destination_path":"<destination_path>","rev":"<rev>"}`

### `dropboxmcp_restore_folder`

Restore Folder · Destructive

Restore a folder to a previous point in time in Dropbox.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `path` (`string`, required): Folder path to restore.
- `target_ts_microseconds` (`integer`, required): Target timestamp to restore to, in microseconds since epoch UTC.
- `is_team` (`boolean`, optional): If true, restore the folder as a team-owned resource.

Example input: `{"path":"<path>","target_ts_microseconds":1}`

## Related

Other ways to connect Dropbox:

- [OAuth](/agentkit/connectors/dropbox/): Scalekit connector, OAuth, 53 tools

Other Files & Documents connectors ([all 33](/agentkit/connectors/?category=files-documents)):

- [Google Drive](/agentkit/connectors/googledrive/): Scalekit connector, OAuth, 47 tools
- [Google Forms](/agentkit/connectors/googleforms/): Scalekit connector, OAuth, 10 tools
- [Microsoft 365](/agentkit/connectors/microsoft365/): Scalekit connector, OAuth, 317 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
