@missionsquad/mcp-dropbox is a standalone Dropbox MCP server that runs over Streamable HTTP.
MissionSquad connects to this server through external MCP OAuth. This server then manages the real Dropbox OAuth lifecycle internally and persists Dropbox refresh tokens in an encrypted SQLite database on a mounted volume.
There are two auth boundaries:
mcp-apiauthenticates tomcp-dropboxmcp-dropboxauthenticates to Dropbox
MissionSquad stores only the OAuth state needed to call this MCP server.
mcp-dropbox stores:
- Dropbox refresh tokens
- cached Dropbox access tokens and expiry
- linked Dropbox account metadata
- MCP OAuth authorization codes, access tokens, refresh tokens, and browser session state
Primary MCP endpoints:
POST /mcpGET /mcpDELETE /mcpGET /healthz
OAuth and discovery endpoints:
/.well-known/oauth-protected-resource/mcp/.well-known/oauth-authorization-server/authorize/token/revoke/register/oauth/dropbox/start/oauth/dropbox/callback
The server uses:
- SQLite on a mounted persistent volume
- default database path:
/data/mcp-dropbox.sqlite - AES-256-GCM encryption for sensitive persisted fields
This deployment assumes one active writer instance per database file.
PORT=3000
HOST=0.0.0.0
PUBLIC_BASE_URL=https://dropboxmcp.example.com
MCP_PATH=/mcp
ALLOWED_ORIGINS=https://app.missionsquad.ai
SQLITE_PATH=/data/mcp-dropbox.sqlite
ENCRYPTION_KEY=replace-me
MCP_OAUTH_CLIENT_ID=missionsquad-dropbox
MCP_OAUTH_CLIENT_SECRET=replace-me
MCP_OAUTH_REDIRECT_URIS=https://api.missionsquad.ai/v1/mcp/oauth/callback
DROPBOX_APP_KEY=replace-me
DROPBOX_APP_SECRET=replace-me
DROPBOX_REDIRECT_URI=https://dropboxmcp.example.com/oauth/dropbox/callback
DROPBOX_SCOPES=account_info.read,files.metadata.read,files.metadata.write,files.content.read,files.content.write,sharing.read,sharing.write
LOG_LEVEL=info
DROPBOX_RETRY_MAX_ATTEMPTS=3
DROPBOX_RETRY_BASE_DELAY_MS=250Optional local Dropbox fallback for standalone testing only:
DROPBOX_ACCESS_TOKEN=
DROPBOX_EMAIL=Register the deployed server as:
{
"source": "external",
"transportType": "streamable_http",
"authMode": "oauth2",
"url": "https://dropboxmcp.example.com/mcp"
}OAuth registration modes now supported by the server:
- pre-registered manual client credentials using:
MCP_OAUTH_CLIENT_IDMCP_OAUTH_CLIENT_SECRET
- dynamic client registration through
/register
The server advertises registration_endpoint in OAuth metadata when DCR is available.
npm install
npm run build
npm test
npm run typecheck
npm startRegistered tools:
list_folderlist_fileslist_folder_continueget_metadatacreate_folderdeletedelete_batchmovemove_batchcopycopy_batchupload_fileupload_file_chunkeddownload_filesearchsearch_file_dbsearch_continuelist_revisionsrestore_revisioncreate_shared_linkget_temporary_linklist_shared_linksrevoke_shared_linkmodify_shared_link_settingsget_shared_link_metadataget_current_accountget_space_usage
create_shared_linkis the reusable public-download-link toolget_temporary_linkis the short-lived anonymous direct-download tool- Dropbox Business delegated-member retry is preserved through the stored linked account email when available
MIT