dropbox-mcp
dropbox-mcp
LLM 에이전트에게 Dropbox 계정(개인용 또는 Business/Team)에 대한 읽기/쓰기 액세스를 Dropbox API v2를 통해 제공하는 Model Context Protocol 서버입니다.
문제
Dropbox의 자체 데스크톱 클라이언트는 파일 동기화 문제를 해결합니다. AI 에이전트가 로컬 사본이 없는 계정에 대해 통제된 액세스를 갖는 문제는 해결하지 않습니다. 동기화된 폴더만 볼 수 있는 에이전트는 2TB 규모의 팀 아카이브를 검색할 수 없고, 공유 링크를 만들 수 없으며, 받은 적 없는 파일을 읽을 수도 없습니다.
이 서버는 그 격차를 해소합니다. Dropbox HTTP API에 직접 통신하므로 디스크에 단 한 바이트도 동기화하지 않고 전체 계정을 대상으로 작동하며, 해당 액세스를 원시 HTTP 클라이언트가 아닌 고정된 MCP 도구 세트로 노출합니다. — 에이전트는 fetch가 아니라 dropbox_search를 얻게 됩니다.
Related MCP server: Dropbox MCP Server
아키텍처
네 가지 도구 모듈(files, search, sharing, account)은 stdio로 MCP를 사용하는 단일 McpServer에 등록됩니다. 모든 모듈은 Dropbox API가 까다롭게 만드는 두 가지, 즉 OAuth 토큰 수명 주기와 팀 공간 네임스페이스를 담당하는 하나의 HTTP 클라이언트를 통해 처리됩니다. 모듈은 시작 시 DROPBOX_DISABLED_MODULES로 개별적으로 비활성화할 수 있으므로, 공개 공유 링크를 만들면 안 되는 배포는 해당 모듈을 단순히 등록하지 않습니다. — 이는 단지 권장되지 않는 수준이 아니라 해당 기능이 아예 존재하지 않는 것입니다.
MCP host (Claude, etc.)
| stdio (JSON-RPC)
+-------v--------------------------------------+
| index.ts module registry / stdio transport|
+-------+--------------------------------------+
|
+-------v-------+ +--------+ +---------+ +---------+
| tools/files | | search | | sharing | | account |
+-------+-------+ +---+----+ +----+----+ +----+----+
| | | |
+------+------+-----------+-----------+
|
+--------v-----------------------------------+
| client.ts |
| - refresh-token -> access-token cache |
| - 401 retry with a forced refresh |
| - Dropbox-API-Path-Root resolution |
| - ASCII-safe Dropbox-API-Arg encoding |
+--------+-----------------------------------+
|
RPC api.dropboxapi.com Content content.dropboxapi.com두 가지 엔드포인트 계열은 의도적으로 별도의 함수로 유지됩니다. RPC 엔드포인트는 JSON 입력/JSON 출력을 주고받으며, Content 엔드포인트는 인수를 HTTP 헤더에 넣고 본문은 파일 바이트에 사용합니다. 이들을 하나의 일반 request()로 통합하면 인수가 어디로 가는지 조용히 바뀌는 매개변수가 되기 때문에, 분리된 상태를 유지합니다.
진짜 어려운 부분
Dropbox Business 팀에서는 API가 기본적으로 구성원의 홈 네임스페이스를 대상으로 합니다. 실제 공유 작업이 있는 모든 팀 폴더는 대신 팀의 루트 네임스페이스에 있으며, 그대로 보이지 않습니다. 빈 문자열 ""에 대한 list_folder는 구성원의 개인 파일만 반환하고 다른 것은 아무것도 반환하지 않으며, 계정의 대부분이 누락되어 있다는 오류나 힌트도 제공하지 않습니다. 이는 권한 문제처럼 보이지만 권한 문제가 아닙니다.
해결 방법은 팀 루트 네임스페이스를 가리키는 Dropbox-API-Path-Root 헤더를 보내는 것이며, 해당 네임스페이스의 id는 users/get_current_account에서 얻습니다. 이때 재귀 함정이 생깁니다. 일반 RPC 헬퍼가 모든 호출에 path-root 헤더를 붙이기 때문에, 헬퍼를 통해 users/get_current_account를 호출해서 네임스페이스를 해석하면 헤더 해석이 자기 자신을 무한히 호출합니다. 따라서 resolveRootNamespaceId()는 헬퍼를 우회하는, 의도적으로 아무것도 감싸지 않은 fetch를 수행하며, 그 결과는 메모이즈되어 프로세스당 한 번의 추가 왕복만 발생합니다 (src/client.ts).
같은 계열의 더 작은 버그: Content 엔드포인트는 인자를 Dropbox-API-Arg에 넣고, HTTP 헤더는 ASCII입니다. 액센트 문자나 이모지가 이름에 포함된 파일은 API 오류를 반환하는 대신 fetch 내부에서 예외를 발생시킵니다. apiArg()는 헤더가 만들어지기 전에 모든 비-ASCII 코드 포인트를 \uXXXX로 이스케이프합니다.
다르게 했을 점
테스트 없음. 코드는 실제 계정을 대상으로 수동으로 만들고 검증했습니다. 토큰 갱신 경로, 401 재시도, 청크 업로드 경계 조건은 모의된 전송 계층으로 테스트를 했어야 하는 부분입니다. — 이들은 드물면서도 큰 비용으로 실패하는 요소입니다.
경로 루트 캐시가 프로세스당 한 번 생성되고 무효화되지 않습니다. 호스트가 자유롭게 재시작하는 stdio 서버에는 무난하지만, 사용자가 팀 간에 이동할 수 있는 장기 실행 서비스에는 부적절합니다.
dropbox_delete는 확인 장치 없이 노출됩니다. Dropbox의 자체 보존 정책 덕분에 복구할 수 있지만, 파괴적인 도구는 호스트의 질문에 기댄 발로 연결됩니다.오류가 문자열로 형태화되어 있습니다. 메시지와 함께 구조화된 오류 코드를 반환하면 에이전트는 문장을 해석하지 않고도
"rate limited"와"not found"를 구분하여 분기할 수 있습니다.
설정
Node 20+ (개발은 24에서) 및 Dropbox 계정이 필요합니다.
1. Dropbox 앱 만들기
https://www.dropbox.com/developers/apps에서 Create app을 선택하세요.
Scoped access 및 Full Dropbox 액세스를 선택합니다.
Permissions에서
account_info.read,files.metadata.read,files.metadata.write,files.content.read,files.content.write,sharing.read,sharing.write를 활성화한 다음 Submit을 선택하세요.Settings에서 App key 및 App secret**을 복사합니다.
2. 빌드 빌드 인증
git clone <this-repo>
cd dropbox-mcp
npm install
npm run build
cp .env.example .env # fill in DROPBOX_APP_KEY and DROPBOX_APP_SECRET
npm run auth # prints DROPBOX_REFRESH_TOKEN — paste it into .envnpm run auth는 동의 화면 URL을 출력하고, 사용자가 붙여 넣은 코드를 받아 리프트 토큰으로 교환합니다. 이후 서버는 스스로 이 토큰을 단기 액세스 토큰과 계속 교환하게 됩니다.
3. MCP 호스트에 등록
{
"mcpServers": {
"dropbox": {
"command": "node",
"args": ["/absolute/path/to/dropbox-mcp/dist/index.js"],
"env": {
"DROPBOX_APP_KEY": "your-app-key",
"DROPBOX_APP_SECRET": "your-app-secret",
"DROPBOX_REFRESH_TOKEN": "your-refresh-token"
}
}
}
}호스트를 재시작하고 "내 Dropbox 저장 공간 사용량은?" 같은 질문을 던져 보세요.
호스트 없이 서버를 실행해 보려면:
npm run inspect # @modelcontextprotocol/inspector도구
files — dropbox_list_folder, dropbox_get_metadata, dropbox_create_folder, dropbox_move, dropbox_copy, dropbox_delete, dropbox_get_temporary_link, dropbox_read_file, dropbox_upload (대용량 파일은 업로드 세션을 통해 자동 분할됩니다).
search — dropbox_search — 파일 이름과 내용을 계정 전체 또는 특정 폴더 범위에서 검색합니다.
sharing — dropbox_create_shared_link, dropbox_list_shared_links, dropbox_get_shared_link_metadata, dropbox_revoke_shared_link.
account — dropbox_get_current_account, dropbox_get_space_usage.
설정
모든 설정은 환경 변수입니다. 네임스페이스 제어(DROPBOX_PATH_ROOT), 읽기 크기 상한(DROPBOX_MAX_READ_BYTES), 업로드 청크 크기, 팀 앱 가장용 헤더를 포함한 전체 주석 목록은 .env.example을 참조하세요.
라이선스
MIT — LICENSE를 참고하세요.
Available Tools
16 toolsdropbox_copyCopyB
Copy a file or folder to a new path.
| Name | Required | Description | Default |
|---|---|---|---|
| to_path | Yes | ||
| from_path | Yes | Dropbox path, e.g. "/Marketing/2025/brief.pdf". Use "" for the account root. | |
| autorename | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only, so the description adds little about mutating behavior. It does not disclose what happens on conflicts, whether intermediate folders are created, how autorename interacts, or whether the source is preserved. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler or redundant elaboration. It is front-loaded and every word contributes to the basic purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema and an open-world annotation, the description is too sparse. It omits important context about conflict behavior, autorename semantics, and what the operation returns or changes, leaving the agent to guess about critical execution details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter-level meaning beyond the input schema. With schema description coverage at only 33%, the description should compensate for undocumented parameters like autorename, but it does not mention any parameters at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Copy') and resource ('a file or folder') with a clear destination ('a new path'). It is unambiguous about what the tool does, though it does not explicitly distinguish itself from the sibling dropbox_move beyond the verb itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when a file or folder should be copied to a new path. However, it gives no explicit guidance about when not to use it or when dropbox_move or other alternatives would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_create_folderCreate folderB
Create a folder at the given path.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dropbox path, e.g. "/Marketing/2025/brief.pdf". Use "" for the account root. | |
| autorename | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a write operation (readOnlyHint=false), has external side effects (openWorldHint=true), and is not idempotent (idempotentHint=false). The description adds no additional behavioral context, such as conflict behavior, permission requirements, or side effects like recursive folder creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no unnecessary words. It is front-loaded and avoids redundancy, making it optimally concise for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters, the description omits critical details about behavior on folder existence, the effect of autorename, whether parent folders are created recursively, and error conditions. With no output schema and minimal annotation detail, this bare description is insufficient for an agent to use the tool correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The path parameter is well-documented in the schema with an example, but the autorename parameter lacks any description in both the schema and the tool description. With schema coverage at 50%, the description fails to compensate for the undocumented autorename parameter, leaving its semantics unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a folder at the given path' uses a specific verb and resource, clearly distinguishing it from sibling tools like move, copy, delete, and upload. The focus on 'folder' differentiates it from file operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the tool's name and description, but there is no explicit guidance on when to use it versus alternatives (e.g., using upload for files). No exclusions or conditions are mentioned, making it a minimal viable guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_deleteDeleteADestructive
Delete a file or folder (and its contents). Destructive — the item moves to deleted state and can be restored from Dropbox for the retention window.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dropbox path, e.g. "/Marketing/2025/brief.pdf". Use "" for the account root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the destructiveHint annotation by explaining what actually happens: the item 'moves to deleted state' and 'can be restored from Dropbox for the retention window.' This gives the agent useful context about recoverability and the temporary nature of the deletion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action is front-loaded, and the destructive consequence is stated immediately after, making the most important safety information prominent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with no output schema, the description covers the action, the scope (recursive deletion), the state change, and recoverability. This is sufficient for an agent to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the 'path' parameter with an example and root behavior. The description adds semantic value by clarifying that a folder path will delete its contents as well, which is not explicit in the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Delete'), the target resource ('a file or folder'), and an important scope detail ('and its contents'). It is unambiguous and clearly distinguishes this tool from the sibling file/folder operations like move, copy, upload, and list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose itself defines when to use the tool: when a file or folder should be removed. It does not explicitly discuss alternatives, but none of the sibling tools perform deletion, so no exclusionary guidance is needed. The destructive warning reinforces that this is the deletion tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_get_current_accountGet current accountARead-only
Return the authenticated account (name, email, account id, team). Good for confirming the server is connected to the right Dropbox.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the read-only nature is established. The description adds behavioral context by specifying exactly what 'authenticated account' includes and ties it to connection verification, which is beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with the return payload front-loaded and the use case in the second sentence. There is no filler or repetition of the title, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless, read-only tool, the description is complete: it names the fields returned, the use case, and the operational context. Although there is no output schema, the description fills that gap by enumerating the expected fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters, and the schema coverage is 100% (empty schema). The baseline for zero-parameter tools is 4; the description appropriately avoids inventing parameter details and focuses on the call's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return') and resource ('authenticated account') and enumerates the fields returned (name, email, account id, team). This clearly differentiates it from the sibling file/folder tools, leaving no ambiguity about its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit use case: 'Good for confirming the server is connected to the right Dropbox.' It does not explicitly name alternatives or exclusion criteria, but the sibling set makes it obvious that this is the account-inspection tool, and the guidance is sufficient for a zero-parameter call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_get_metadataGet metadataARead-only
Get metadata (size, modified time, id, etc.) for a single file or folder.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dropbox path, e.g. "/Marketing/2025/brief.pdf". Use "" for the account root. | |
| include_deleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description isn't responsible for that. It adds the specific fields returned (size, modified time, id), but does not disclose behavior around deleted items or error handling. It provides minor added context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one short sentence that immediately states the action and resource, then gives illustrative fields. No filler, appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only metadata tool, the description covers the core purpose but omits the include_deleted parameter and its effect. With no output schema, some indication of return format would be helpful, but it's not critical. Overall, it's adequate but has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (path is documented, include_deleted is not). The description adds no parameter information, failing to explain the purpose of include_deleted. It does not compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Get' and resource 'metadata' for a single file or folder, distinguishing it from list_folder which enumerates contents. Also lists example fields, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a single file or folder' gives clear context that this tool is for a specific path, not a listing operation. However, it does not explicitly name alternatives or state when not to use it, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_get_space_usageGet space usageARead-only
Return storage usage and allocation for the account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the operation is known to be safe. The description adds only the scope ('for the account') and the fact that it returns both usage and allocation, but does not disclose any additional behavioral nuances (e.g., rate limits, quota details, or potential variability in returned fields). Since annotations cover the main safety trait, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that contains no unnecessary words. It leads with the verb 'Return' and immediately states the resource and scope, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless read-only tool, the description is nearly complete. It names the return content (storage usage and allocation) and the scope (account). It does not explicitly enumerate the fields of the response (no output schema exists), but the high-level description suffices for an agent to understand what the tool provides. A 4 reflects that slight lack of detail while recognizing the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the description has no parameter-level burden. The schema is empty and fully documented by that fact, and the description correctly focuses on the return value rather than inputs. Baseline 4 for a parameterless tool holds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific verb ('Return') and a well-defined resource ('storage usage and allocation') scoped to 'the account'. It is easily distinguishable from sibling tools like dropbox_get_current_account, which returns account identity details rather than quota/space information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an agent needs account storage/quota information, but does not explicitly state when to use this tool versus siblings. There are no direct exclusions or alternative routing, though the purpose is unambiguous enough that an agent would not confuse it with other file/account operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_get_temporary_linkGet temporary linkARead-only
Get a direct, time-limited (~4h) download/streaming URL for a file. Use this to reference or fetch file contents without creating a permanent shared link.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dropbox path, e.g. "/Marketing/2025/brief.pdf". Use "" for the account root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful behavior: the URL expires in roughly 4 hours, is direct, and supports download/streaming. This goes beyond the annotation by clarifying the temporary nature and the fact that no permanent shared link is created.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core action and key constraint (time-limited URL) are front-loaded, and every clause adds relevant guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool, the description is complete: it names the resource, the purpose, the temporary nature, and the distinction from permanent links. With no output schema, the phrase 'Get a direct ... URL' also conveys the return value sufficiently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the path parameter is fully documented in the input schema. The tool description does not need to repeat it; it only adds the context that the path refers to a file. This meets the baseline without adding significant new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a precise resource ('direct, time-limited (~4h) download/streaming URL for a file'). It clearly distinguishes this from permanent shared links, which is relevant given siblings like dropbox_create_shared_link, dropbox_list_shared_links, and dropbox_get_shared_link_metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use it: 'reference or fetch file contents without creating a permanent shared link.' This gives clear context and implicitly excludes permanent-share scenarios, though it does not explicitly name alternate tools or list when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_list_folderList folderARead-only
List the contents of a folder. Pass "" for the root. Set recursive=true to walk subfolders. If the result is truncated, call again with the returned cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Folder path. Defaults to root (""). | |
| limit | No | ||
| cursor | No | Continuation cursor from a previous truncated result. | |
| recursive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint and openWorldHint, the description discloses pagination/truncation behavior and recursion semantics. It does not cover output item shape or ordering, but the annotations already cover safety and the added behavioral traits are useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, with no filler. Every sentence contributes actionable guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers core invocation, root handling, recursion, and pagination. Missing return item shape and limit semantics, but given the annotations and the simplicity of a list operation this is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the non-obvious semantics of path (root), recursive (walk subfolders), and cursor (continuation after truncation). limit is not explained in prose, but its name and min/max constraints make its purpose reasonably inferable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('contents of a folder'), and clarifies root and recursion. This clearly distinguishes it from siblings such as dropbox_get_metadata or dropbox_read_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit how-to guidance: root path, recursive=true, and cursor for truncated results. It does not explicitly name alternatives or when not to use it, but the context is clear enough for an agent to select it for folder listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_moveMove / renameA
Move or rename a file or folder from one path to another.
| Name | Required | Description | Default |
|---|---|---|---|
| to_path | Yes | Destination path (this is also how you rename). | |
| from_path | Yes | Current path of the item. | |
| autorename | No | If the destination is taken, rename instead of failing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read-only, non-idempotent operation, and the description confirms the move semantics. However, it does not disclose edge-case behaviors such as failure when the destination exists without autorename, or what happens to shared links/source data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundant wording. It efficiently captures the core operation without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple file operation, especially with a fully documented schema and mutation annotations. However, there is no output schema and no guidance on return values, conflict behavior, or when move should be preferred over copy/delete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, including the rename semantics of to_path and the autorename behavior. The tool description adds no additional parameter-level meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs 'Move or rename' and clearly states the resource type ('file or folder') and the operation direction ('from one path to another'). This is distinct from sibling tools like dropbox_copy or dropbox_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for relocating or renaming items, but it does not explicitly state when to use this tool versus dropbox_copy, which is a likely alternative. There is no exclusions or 'when-not-to-use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_read_fileRead file (text)ARead-only
Download a file and return its contents as UTF-8 text — for referencing docs, notes, code, csv, etc. Guarded by DROPBOX_MAX_READ_BYTES (default 5 MB). For large or binary files use dropbox_get_temporary_link instead.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Dropbox path, e.g. "/Marketing/2025/brief.pdf". Use "" for the account root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the readOnlyHint annotation: it returns UTF-8 text, enforces a size guard (DROPBOX_MAX_READ_BYTES, default 5 MB), and points out the large/binary file limitation. This is precisely the kind of runtime behavior an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the action and return type come first, followed by the size guard and the alternative-tool routing. Every sentence earns its place and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with a fully described schema, the description covers the output format, the size limitation, and the appropriate alternative for unsupported files. No critical operational context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the path parameter thoroughly, including an example and the empty-string root convention. The description itself does not add further parameter-level detail, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Download and return contents as UTF-8 text') and the resource ('a file'), with concrete use cases like docs, notes, code, and csv. It also distinguishes itself from the sibling dropbox_get_temporary_link by emphasizing text retrieval versus link creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative tool for large or binary files — dropbox_get_temporary_link — and provides the condition that should trigger that alternative. This gives an agent clear routing guidance for when this tool is and isn't appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_searchSearch filesARead-only
Search the account for files and folders matching a query (filename and, where indexed, content). Optionally scope to a folder. If the result has_more, call again with the returned cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Restrict to a folder, e.g. "/Marketing". Defaults to whole account. | |
| query | Yes | Search terms, e.g. "q3 budget" or "logo.png". | |
| cursor | No | Continuation cursor from a previous has_more result. | |
| file_status | No | Search "active" (default) or "deleted" items. | |
| max_results | No | ||
| filename_only | No | Match filenames only (skip content matching). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and openWorldHint=true, indicating a safe, read-only operation. The description adds valuable behavioral context beyond these annotations: it reveals that content is searched 'where indexed' and explains the pagination protocol with 'has_more' and 'cursor'. These details inform the agent about result continuation and content matching, which the annotations do not cover. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no fluff. The main action is front-loaded, and the scoping and pagination details are provided efficiently. Every sentence contributes meaning: purpose, optional scoping, and continuation handling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters and only 1 required, the description covers key nuances: content search, folder scope, and pagination. It does not describe the exact response structure, but the mention of 'has_more' and 'cursor' implies the output format. Given the read-only annotations and schema coverage, the description is largely complete for an agent to call the tool correctly, though a note on result contents could make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (83%), so the baseline is 3. The description adds extra meaning by clarifying the query behavior ('where indexed'), the path scope ('Optionally scope to a folder'), and the cursor usage ('call again with the returned cursor'). These enrich the parameter definitions beyond the schema descriptions, particularly for path and cursor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Search the account for files and folders matching a query' – a specific verb and resource. It distinguishes itself from siblings like list_folder by specifying a global search across the account with optional folder scoping. The phrase 'filename and, where indexed, content' clarifies the scope of matching, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by describing the search behavior and optional folder scope, but it does not explicitly contrast with alternatives like list_folder or get_metadata. There is no 'use this when' or 'instead of' guidance. However, the context of searching across the account and pagination hint at when it is appropriate, so the usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dropbox_uploadUpload fileA
Upload content to a path. Provide either text (inline UTF-8) or localPath (a file on this machine to read). Files at/under ~140 MB go in a single request; larger local files are streamed in chunks via an upload session automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "add" (default) keeps both on conflict; "overwrite" replaces. | |
| path | Yes | Destination path in Dropbox, including filename. | |
| text | No | Inline UTF-8 content to upload. | |
| localPath | No | Absolute path to a local file whose bytes to upload. | |
| autorename | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that larger local files are automatically streamed via an upload session, which is non-obvious and useful. It does not contradict the readOnly/idempotency hints and does not need to restate the write side effect already implied by readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences that lead with the primary purpose and then pack the two most important behavioral details. No filler or repetition of schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter upload tool with no output schema, the description plus schema covers the essential input modes, conflict behavior via mode, and large-file handling. It could mention return behavior or parent-folder creation, but these are not blocking for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema coverage, the schema already documents most parameters; the description adds the crucial 'either text or localPath' relationship and the automatic chunking threshold, which are not encoded in the schema. It leaves autorename underexplained, but that parameter also lacks an in-schema description, and the added context is valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Upload content to a path', a specific verb and resource, and clearly distinguishes the tool from read/list/delete siblings by its write intent. It also clarifies the two input forms (text or localPath), leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear direction on when to choose inline text versus a local file and explains the ~140 MB threshold for single vs. chunked uploads. It does not explicitly name alternative sibling tools or state when not to use upload, but no other sibling performs uploads, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
16 tool updates
v0.1.0- First observed
dropbox_copy - First observed
dropbox_create_folder - First observed
dropbox_create_shared_link - First observed
dropbox_delete - First observed
dropbox_get_current_account - First observed
dropbox_get_metadata - First observed
dropbox_get_shared_link_metadata - First observed
dropbox_get_space_usage - First observed
dropbox_get_temporary_link - First observed
dropbox_list_folder - First observed
dropbox_list_shared_links - First observed
dropbox_move - First observed
dropbox_read_file - First observed
dropbox_revoke_shared_link - First observed
dropbox_search - First observed
dropbox_upload
TDQS
Scored across 16 tools
Each tool has a clear, non-overlapping purpose: folder operations (list, get metadata, create), file operations (move, copy, delete, upload, read, temporary link), search, shared link management (create, list, metadata, revoke), and account/space info. Even get_temporary_link vs read_file are distinct (URL vs content).
All tools follow a consistent verb_noun pattern prefixed with 'dropbox_' (e.g., list_folder, get_metadata, create_shared_link). The verbs (list, get, create, move, copy, delete, read, upload, search, revoke) and nouns are uniform and predictable.
16 tools is slightly above the ideal 3-15 range but appropriate given the comprehensive scope of Dropbox's API (folder, file, search, shared links, account). Each tool earns its place, and none seem redundant.
The surface covers core lifecycle operations for files and folders (create, read, update via upload/overwrite, delete, move/copy), search, and shared link management. Minor omissions like file version history or listing deleted items are acceptable gaps that agents can work around.
Maintenance
Related MCP Connectors
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Discover, plan and run tools across your connected business systems through one OAuth MCP endpoint
Related MCP Servers
- FlicenseBqualityDmaintenanceProvides read access to Dropbox files with advanced search and content extraction capabilities. Supports browsing, reading, and searching within various file types including PDFs, DOCX, and text files.5-
- FlicenseAqualityNot gradedmaintenanceA local MCP server that enables Claude to manage Dropbox accounts through tools for file manipulation, searching, and sharing. It supports operations such as listing folders, moving files, creating shared links, and monitoring storage usage via natural language commands.10-
- AlicenseNot gradedqualityBmaintenanceEnables Dropbox file operations such as listing, searching, downloading, and creating folders via the Dropbox API v2 through MCP.26 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage Box files, folders, collaborations, and more via the Box API using tools for search, upload, and metadata operations.7 npmISC