{"id":48845594,"url":"https://github.com/dropbox/mcp-server-dash","last_synced_at":"2026-04-15T05:03:00.831Z","repository":{"id":322242818,"uuid":"1071837843","full_name":"dropbox/mcp-server-dash","owner":"dropbox","description":"Dropbox Dash MCP Server","archived":false,"fork":false,"pushed_at":"2025-11-03T12:01:37.000Z","size":170,"stargazers_count":9,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-03T10:05:58.517Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dropbox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-07T22:08:49.000Z","updated_at":"2026-01-13T19:03:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dropbox/mcp-server-dash","commit_stats":null,"previous_names":["dropbox/mcp-server-dash"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dropbox/mcp-server-dash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dropbox%2Fmcp-server-dash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dropbox%2Fmcp-server-dash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dropbox%2Fmcp-server-dash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dropbox%2Fmcp-server-dash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dropbox","download_url":"https://codeload.github.com/dropbox/mcp-server-dash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dropbox%2Fmcp-server-dash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31826907,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"online","status_checked_at":"2026-04-15T02:00:06.175Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-15T05:02:59.173Z","updated_at":"2026-04-15T05:03:00.816Z","avatar_url":"https://github.com/dropbox.png","language":"Python","funding_links":[],"categories":["Servers"],"sub_categories":["File Systems \u0026 Storage"],"readme":"# Dropbox Dash MCP Server\n\nAn MCP server that exposes Dropbox Dash search and file metadata via STDIO using the Python MCP server library (`fastmcp`). Authenticate with Dropbox, then search across all company content and fetch detailed file metadata and content.\n\n## Tools Implemented\n\n- `dash_get_auth_url`\n  - Summary: Start Dropbox OAuth; returns the authorization URL.\n  - Args: none\n  - Returns (text): A short instruction message followed by the URL.\n  - Notes: Use when not yet authenticated or when a token has expired. After approval in the browser, call `dash_authenticate` with the one-time code. Tokens are stored securely in your system keyring, so this is typically a one-time setup.\n\n- `dash_authenticate`\n  - Summary: Complete OAuth using the one-time authorization code.\n  - Args:\n    - `auth_code` (string, required)\n  - Returns (text): Account display name and email on success; a human-readable error on failure.\n  - Notes: Persists a token for subsequent tool calls. Typically only needed once until the token expires or is revoked.\n\n- `dash_company_search`\n  - Summary: Search company content indexed by Dropbox Dash.\n  - Args:\n    - `query` (string, required) — search text\n    - `file_type` (string or null, optional) — one of: `document`, `image`, `video`, `audio`, `pdf`, `presentation`, `spreadsheet`; or `null` for no filter. Default: `null`. The value `document` is also treated as no filter.\n    - `connector` (string or null, optional) — filter by connector source. Common connectors include `confluence`, `dropbox`, `github`, `gmail`, `gong`, `google_calendar`, `google_drive`, `jira`, `microsoft_365`, `microsoft_teams`, `slack`, `workday`, `zoom`, among others. Default: `null` for no connector filter.\n    - `start_time` (string or null, optional) — filter results modified after this datetime (ISO 8601 format, e.g., `2025-10-30T16:24:12.071Z`). Default: `null` for no start time filter.\n    - `end_time` (string or null, optional) — filter results modified before this datetime (ISO 8601 format, e.g., `2025-10-31T16:24:12.071Z`). Default: `null` for no end time filter.\n    - `max_results` (integer, optional) — default `20`, range `1..100`\n  - Returns (text): A formatted list of results. Each result includes labeled fields such as `UUID:`, `Type:`, `URL:`, `Preview:`, `Description:`, `File Type:`, `MIME Type:`, `Source:`, `Creator:`, `Last Modified By:`, `Updated:`, `Source Updated:`, `Relevance:`, `Source ID:`. Results are separated by a divider line.\n  - Errors: Human-readable messages for invalid parameters or missing authentication.\n\n- `dash_get_file_details`\n  - Summary: Fetch detailed metadata (and optional content snippet) for a result UUID.\n  - Args:\n    - `uuid` (string, required) — UUID from search results\n  - Returns (text): A summary with labeled fields (Title, Link, Updated, Source Updated, MIME Type, Source, Creator, Last Modified By). Media sections are included when present (Video/Image metadata). Content, when available, is shown with a MIME type and may be truncated to ~20,000 characters.\n  - Errors: Human-readable messages for missing authentication or unknown UUID.\n\n### First-Time (or Re-Auth) Flow\n\nIf the user is not yet authenticated (or the token has expired):\n1) `dash_get_auth_url` → open the URL and approve access.\n2) `dash_authenticate(auth_code)` → store the token.\n3) Proceed with `dash_company_search(...)` and `dash_get_file_details(uuid)`.\n\n## Prerequisites\n\nBefore installing and running the MCP server, you need to create a Dropbox app to obtain API credentials:\n\n1. Go to [dropbox.com/developers/apps](https://www.dropbox.com/developers/apps)\n2. Click on **Create app**\n3. Select **Scoped access** as the API type\n4. Choose **Full Dropbox** access\n5. Give your app a name\n6. After creating the app, go to the **Permissions** tab and enable:\n   - `files.metadata.read`\n   - `files.content.read`\n7. Take note of the **App key** value from the **Settings** tab (you'll need this for configuration)\n\nThis credential will be used as `APP_KEY` in the installation steps below.\n\n## Requirements\n\n- Python 3.10 or higher\n- Dropbox Dash API credentials (App key)\n- Network access to Dropbox APIs\n\n## Installation\n\n### Clone the repository:\n\n```\ngit clone https://github.com/dropbox/mcp-server-dash\ncd mcp-server-dash\n```\n\n### Install `uv` for virtual environment and dependency management:\n\n**macOS (Homebrew)**\n```\nbrew install uv\n```\n\n**macOS/Linux**:\n```\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n```\n\n**Windows (PowerShell):**\n```\nirm https://astral.sh/uv/install.ps1 | iex\n```\n\n### Set up the virtual environment and install dependencies\n```\nuv sync\n```\n\n### Provide credentials (environment or `.env`)\n```bash\nexport APP_KEY=your_dropbox_app_key\n# or create a .env file with APP_KEY\n# e.g., copy the example file:\ncp .env.example .env\n```\n\n## Usage\n\n### Running the MCP Server in STDIO mode\n```bash\nuv run src/mcp_server_dash.py\n```\n\nAuthenticate via tools: call `dash_get_auth_url`, then `dash_authenticate` with the code. The access token is securely stored in your system's keyring (macOS Keychain, Windows Credential Manager, or Linux Secret Service).\n\n### Token Management\n\nTokens are stored securely in your system keyring under the service name `mcp-server-dash` or in `~/.mcp-server-dash/dropbox_token.json`\n\nTo clear a stored token, use:\n\n```\nuv run src/mcp_server_dash.py --clear-token\n```\n\n### Common MCP Server Configuration\n\nFor most MCP clients, including Claude and Cursor, you need to insert the below JSON \nconfiguration into a specific configuration file. See the specific instructions for \nClaude and Cursor below.\n\n❗ **Important:** Update the configuration below with the path to your installation and with your `APP_KEY`.\n\nMCP Server Configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"Dropbox Dash Search\": {\n      \"command\": \"uv\",\n      \"args\": [\n          \"--directory\",\n          \"/path/to/mcp-server-dash/\",\n          \"run\",\n          \"src/mcp_server_dash.py\"\n      ],\n      \"env\": {\n        \"APP_KEY\": \"your_dropbox_app_key\"\n      }\n    }\n  }\n}\n```\n\n**Security Note:** For better security, consider using environment variables or a `.env` file with restrictive permissions (excluded from version control) instead of placing credentials directly in the MCP config file.\n\n### Using Claude as the Client\n- Open `Claude Desktop → Settings → Developer → Local MCP Servers → Edit Config`\n- Add the JSON MCP Server configuration shown above.\n- Restart Claude Desktop after saving the config.\n\n### Using Cursor as the Client\n\n- Press `Cmd+Shift+P` (macOS) or `Ctrl+Shift+P` (Windows) to open the Command Palette\n- Type \"View: Open MCP Settings\"\n- Add the JSON MCP Server Configuration to the `mcp.json` file as instructed.\n\n### Using Goose as the Client\n\n- Select `Extensions → Add custom extension`\n- Fill out the form:\n  - **Extension Name**: Dropbox Dash Search\n  - **Type**: STDIO\n  - **Description**: Provide company context to your workflows\n  - **Command**: `uv --directory /path/to/mcp-server-dash/ run src/mcp_server_dash.py`\n  - **Environment**:\n    - `APP_KEY`: Your Dropbox Client ID\n- Click `Add Extension`\n\n\n## Development \n\nInstall dev tools (ruff, black, mypy, pytest, coverage) using uv:\n\n```bash\nuv pip install -e \".[dev]\"\n```\n\n### Lint, Format, Type-check\n\nRun checks (via uv):\n\n```bash\n# Lint (imports, style, bugbear, etc.)\nuv run ruff check .\n\n# Format (apply changes)\nuv run black .\n\n# Type-check\nuv run mypy src\n```\n\nTip: use `uv run ruff format .` (or `uv run black .`) to auto-format, and `uv run ruff check --fix .` to apply safe autofixes.\n\n### Testing \u0026 Coverage\n\nRun the test suite (quiet mode with coverage summary) using uv:\n\n```bash\nuv run pytest\n# or explicitly with coverage flags\nuv run pytest -q --cov=src --cov-report=term-missing\n```\n\n### Debugging\nYou can inspect and debug the server with the Model Context Protocol Inspector:\n\n```bash\nnpx @modelcontextprotocol/inspector uv run src/mcp_server_dash.py\n```\n\nEnsure `APP_KEY` is set in your environment or `.env` before running the inspector.\n\n## License\n\nApache License 2.0\n\nCopyright (c) 2025 Dropbox, Inc.\n\nSee [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdropbox%2Fmcp-server-dash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdropbox%2Fmcp-server-dash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdropbox%2Fmcp-server-dash/lists"}