CloudSee Drive MCP Server
CloudSee Drive MCP server lets an AI assistant manage files in CloudSee Drive (S3-based) via natural-language tool calls.
Discover available drives/buckets (
list_buckets)Browse, search, and list files in a drive (
browse_folder,search_files,list_files,recent_files)Inspect files: metadata, S3 tags, and storage details (
get_file_metadata,get_file_tags)Download files via short-lived pre-signed URLs (
download_file)Create shareable, expiring links (
share_link)Upload files from your local machine, including large background uploads with progress checking (
upload_file,upload_status)Organize files: create folders, rename, move/copy, duplicate (
create_folder,rename_file,move_file,duplicate_file)Delete files permanently (
delete_files)Update file metadata and tags (
update_metadata)Restore archived Glacier objects (
restore_archived_file)Destructive operations require confirmation, and all write/delete actions are authorized server-side
Allows management of files and folders in Amazon S3 buckets via the CloudSee Drive interface, including browsing, searching, uploading, downloading, sharing, renaming, moving, deleting, and updating metadata and tags.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CloudSee Drive MCP ServerSearch for files named 'budget' in my drive"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CloudSee Drive MCP server
An open-source Model Context Protocol (MCP) server for CloudSee Drive β connect your CloudSee account (a browser interface for Amazon S3) to Claude Desktop and any MCP-compatible client, and manage your files in natural language.
Browse, search, download, share, upload, organize, and tag your CloudSee Drive files from your AI assistant β every destructive action must be approved through Claude Desktop's own tool-permission prompt before it runs.
π New here? The Installation, Commands & Testing Guide walks through install, configuration, every tool with examples, and how to test against a live API.
Quickstart (β5 minutes)
1. Get an API key
In the CloudSee Drive dashboard, create a public-API key. You'll receive a key id
(looks like AKIAβ¦) and a secret. Copy both β the secret is shown only once.
2. Add the server to Claude Desktop
Open Claude Desktop β Settings β Developer β Edit Config, and add a cloudsee-drive
entry under mcpServers (no install needed β npx fetches the package on demand). Keep the
@latest suffix: it makes npm resolve the published version instead of running an older copy
it finds already installed on your PATH.
{
"mcpServers": {
"cloudsee-drive": {
"command": "npx",
"args": ["-y", "@webapper/cloudsee-drive-mcp@latest"],
"env": {
"CLOUDSEE_API_KEY_ID": "<your key id>",
"CLOUDSEE_API_KEY_SECRET": "<your secret>",
"CLOUDSEE_API_BASE_URL": "https://drive-api.cloudsee.cloud"
}
}
}
}3. Restart Claude Desktop and try it
"List my CloudSee buckets, then show the most recent files."
That's it. The server runs locally on your machine; your API key never leaves it.
Related MCP server: AWS S3 MCP Server
Installation
Requires Node.js β₯ 20. No native dependencies β works on macOS, Linux, and Windows.
As a Claude Desktop extension (no config file)
The server is packaged as an MCP Bundle (.mcpb) β a one-click install that asks for your
API key in a form instead of making you edit JSON. Build one from this repo with:
npm run build:mcpb # β build/cloudsee-drive-<version>.mcpbPacking needs the MCPB CLI (npm i -g @anthropic-ai/mcpb); without it the script still stages
the bundle and prints the one command left to run. Open the resulting .mcpb with Claude
Desktop to install it.
As an npm package
npm install -g @webapper/cloudsee-drive-mcpA global install does not update itself β re-run that command to move to a newer release.
Pinning or upgrading the npm version pins the server; a client keeps the tool list it fetched
when it connected, so remove and re-add (or restart) the connector after an upgrade, and ask
get_version what is actually running before reporting on a tool's behaviour.
Or let npx fetch the package for you, as in the Quickstart above;
the @latest suffix used there is what makes npm resolve the published version rather than a
global install that happens to be on PATH.
On macOS that command usually fails the first time with EACCES: permission denied, mkdir '/usr/local/lib/node_modules/@webapper'. That is npm's global prefix pointing at a directory
your user cannot write to β it is not specific to this package, and any system configured the
same way behaves the same. Either install with sudo, or point npm at a prefix you own:
npm config set prefix ~/.npm-global
export PATH="$HOME/.npm-global/bin:$PATH" # add to ~/.zshrc or ~/.bashrc to keep it
npm install -g @webapper/cloudsee-drive-mcpThe npx form in the quickstart above sidesteps this entirely β it needs no global install.
Configuration
All configuration is via environment variables (set them in the Claude Desktop env block,
or a local .env for development β see .env.example).
Variable | Required | Default | Description |
| β | β | Your CloudSee Drive API key id. |
| β | β | The matching API key secret. Never commit this. |
| β |
| API base URL. UAT: |
| β | β | Default drive (S3 bucket) for tool calls that omit |
| β |
|
|
| β |
| Per-request timeout in milliseconds. |
Tools
Most tools operate on one drive (an S3 bucket): pass bucketName, or set
CLOUDSEE_DEFAULT_BUCKET once and omit it. recent_files and list_buckets don't need a drive.
Tool | Description | Access |
| List the account's registered drives | read |
| List all files in a drive (recursive) | read |
| List a folder's contents (indexed view) | read |
| Find files/folders by name keyword | read |
| List recently used files | read |
| Get a file's metadata | read |
| Get a file's S3 tags | read |
| Get a temporary pre-signed download URL | download |
| Create a revocable CloudSee share page link, expiring after a chosen number of hours (default 12) | write |
| Upload a file β see Uploading | write |
| Progress of a large upload running in the background (stdio only) | write |
| Create a folder | write |
| Rename a file/folder | write Β· confirm |
| Move (or copy) a file/folder | write Β· confirm (move) |
| Duplicate a file | write |
| Permanently delete objects | delete Β· confirm |
| Update a file's metadata | write Β· confirm |
| Un-archive a Glacier object | write Β· confirm |
Uploading
upload_file has one name and two shapes, chosen by how the server is reached β you only
ever see the one that applies:
Running as | Argument | Who reads the bytes | Size |
stdio (this package, Claude Desktop / Claude Code) |
| The server, off your own disk | Any β over 8 MiB it uploads in 16 MiB parts |
hosted (a remote connector) |
| The bytes travel in the request | β€ 256 KB |
Files over 8 MiB upload in the background. An MCP client abandons a tool call after 60
seconds, so a large upload cannot be waited on β it would be reported as a timeout while it was
still succeeding. upload_file therefore returns an id straight away and keeps going; ask
upload_status for progress. The file is in the drive once that says completed. Parts go up
four at a time.
The upload lives in this server process, so quitting the MCP client cancels it.
The hosted shape exists because a remote server has no access to your disk, and a remote MCP client is normally blocked from uploading to storage itself. For anything larger than a few hundred kilobytes on a hosted connector, use the CloudSee web app.
Both shapes behave the same in two ways that matter:
Nothing is ever overwritten. If the name is taken, the file is stored with a timestamp appended (
report (30-07-2026 14:05).md) and the tool tells you the name it used.The content type comes from the file name, matching what storage signs the upload URL with. Passing your own would risk a signature mismatch, so the tool doesn't accept one.
Tip for
localPath: copy the name exactly. File names can contain characters that look like a plain space but aren't β macOS screen recordings, for instance, useU+202FbeforeAM/PM. When a file isn't found, the error points at the near match and names the character.
list_files ids are not stable β don't use them for mutation
list_files lists straight from storage and mints a new object id on every call. Never pass
that id to rename_file, move_file, update_metadata, or delete_files. Use search_files,
browse_folder, or get_file_metadata instead β their StorageId is a persisted id from the
search index and stays stable across calls. recent_files is not a source either: the id
it returns belongs to a different id space and those tools reject it.
Destructive operations require confirmation
Tools marked confirm (delete, rename, move, update-metadata, restore) use two-step
confirmation: the first call returns a preview and makes no changes; the model must call
again with confirm: true to proceed. The two-step call itself is filled in by Claude, not by
you β it is not the actual approval gate.
The real gate is Claude Desktop's own tool-permission prompt, which appears before any tool call runs. Four things worth knowing about it:
Denying it genuinely stops the operation β the tool is never invoked with
confirm: true.Approving one destructive call does not approve a different one. Approving a
rename_filecall does not pre-approve a laterdelete_filescall β each call is gated independently."Allow for this task" is the prompt's default button, and once clicked it covers that tool for the rest of the current chat β later calls to the same tool in the same conversation won't prompt again. Choose "Allow once" to review every call individually.
This is still a client-side safety prompt β the CloudSee API authorizes every operation server-side; confirmation is not the security boundary.
Privacy Policy
Full text: PRIVACY.md Β· hosted copy
In short β the server is a conduit, not a destination:
What it processes. Only what a tool call needs: your API credentials (from the environment), and the file names, paths, metadata, tags or file contents involved in the operation you asked for.
What it stores. Nothing. There is no database, cache or log of your files; each request is handled in memory and forgotten. Diagnostics go to stderr with the secret redacted.
Who else sees it. Your AI client, which issues the tool calls, and the CloudSee Drive API / Amazon S3, which performs them. No analytics, no profiling, no model training, no resale.
Retention. None by this server. Files and account data live in CloudSee Drive under its own policy; downloads are short-lived pre-signed URLs, and a share is a CloudSee-hosted page whose share record carries its own expiry.
Contact. privacy@webapper.net Β· security reports per SECURITY.md.
Security
Your API key id + secret are read from the environment and held only in this local process. The server never logs the secret, never returns it in tool output, and never writes it to a file. All diagnostics go to stderr (stdout is the MCP transport).
File downloads return short-lived pre-signed URLs, never long-lived account credentials. (A pre-signed URL embeds the temporary, scoped signing token that is inherent to S3 SigV4 presigning β it expires with the link.)
share_linkreturns a CloudSee-hosted share page, not a storage URL: the API records the share with an explicit expiry (expiredTimeUTC) and ashareId, so it can be revoked before it expires. The raw share token the API mints is never rendered into tool output.Rotating an API key issues a new key id and secret together and revokes the old id immediately β update both
CLOUDSEE_API_KEY_IDandCLOUDSEE_API_KEY_SECRETafter rotating; see GUIDE.md Β§8 Troubleshooting.Report vulnerabilities per
SECURITY.md. Never paste a real key/secret into an issue.
Status & known limitations
This wraps CloudSee Drive's public API (the /v1/* gateway).
Almost every tool needs a drive (
bucketName, orCLOUDSEE_DEFAULT_BUCKET). Without one, drive-scoped tools return a clear "specify a drive" message.list_bucketsreturns the drives your key can access β use it to discover drive names.browse_folder/search_filesuse the search-indexed view and can return empty for un-indexed content β uselist_filesfor a complete, reliable listing of a drive.Write/delete tools require an API key whose scopes include
drive:write/drive:delete. Admin-created keys carry these scopes; keys created under a User role are read/download-only, and the gateway denies out-of-scope calls with a clearinsufficient_scopemessage.rename_file,move_file(and copy) anddelete_filesare queued operations: the tool returns a queueRequestIdand the operation completes in the background, typically within 1β2 minutes β verify by listing.upload_filediffers by transport (see Uploading). Over stdio it takes a path and handles any size β one pre-signed PUT up to 8 MiB, multipart above that. On a hosted connector it takes the file's contents instead, capped at 256 KB.
Development
npm install
npm test # vitest: unit + toolβcontract drift tests
npm run typecheck # tsc --noEmit
npm run lint # eslint
npm run build # tsup β dist/ (ESM, with bin shebang)
npm run sync:contract # regenerate contract/registry.snapshot.json from the API seed
node scripts/smoke.mjs # build first; spawns the server and lists tools over MCPThe contract-drift test (test/contract/drift.test.ts) fails the build if any tool drifts
from the committed API contract snapshot β so tool schemas can't silently diverge from the
real /v1/* surface.
License
MIT Β© Webapper
Available Tools
19 toolsbrowse_folderBrowse folderARead-only
List the files and sub-folders inside a folder of a drive (the indexed view), with sorting and pagination. Requires the drive (bucketName). To filter by keyword use 'search_files'; for a complete, recursive file listing straight from storage use 'list_files'. For a complete listing, keep calling with the returned cursor until no cursor comes back β a page may be short, or even empty, while more results remain.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Folder path / prefix within the drive to list. Empty or omitted = the drive root. | |
| cursor | No | Opaque pagination cursor returned by a previous call. | |
| pageSize | No | Max items per page (1-200, default 13). The connector sizes each page to what it can render whole, starting at 13 and adapting to the size of your items from the previous page; a larger value is reduced to what fits. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. | |
| sortOption | No | Sort key, e.g. 'name_asc', 'name_desc', 'date_desc'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description is consistent with them. It adds genuine behavioral detail beyond annotations by clarifying that this is the 'indexed view' and that a page may be short or empty while more results remain, which is important for correct pagination.
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 sentences, each earning its place: purpose and features first, sibling routing second, pagination caveat third. No filler or redundant restatement of the schema.
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 read-only listing tool with 100% schema coverage, the description covers purpose, alternatives, a required parameter, and a non-obvious pagination behavior. It doesn't detail the exact return shape, but the tool has no output schema and 'files and sub-folders' gives a sufficient high-level expectation.
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 coverage is 100%, so the baseline is 3, but the description adds value by emphasizing that bucketName is required and by explaining cursor semantics ('keep calling until no cursor comes back') beyond the schema's one-line cursor definition.
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 a specific verb and resource: 'List the files and sub-folders inside a folder of a drive (the indexed view), with sorting and pagination.' It also names sibling tools search_files and list_files as alternatives, so an agent can clearly distinguish this tool from similar ones.
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 states a hard requirement (bucketName), routes keyword filtering to search_files, and recursive storage listing to list_files. It also instructs the agent to keep calling with the returned cursor until none comes back, covering the correct iterative usage pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_folderCreate folderA
Create a new folder at the given path in a drive. Requires the drive (bucketName). (Write access is authorized server-side by the public API's RBAC β a denial means the API key lacks this tool's scope, not a tool failure.)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New folder name. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. | |
| parentPath | Yes | Parent folder/prefix in the drive. Empty = drive root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond annotations: "a denial means the API key lacks this tool's scope, not a tool failure." It also notes the need for bucketName. However, it does not disclose what happens if the folder already exists, whether the operation is idempotent (though annotations mark idempotentHint=false), or what the successful response contains. Annotations already declare readOnlyHint=false and destructiveHint=false, lowering the bar for extra disclosure, but some gaps remain.
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, front-loaded with the core action. The first sentence states the purpose immediately; the second adds necessary prerequisite and error-context details without redundancy. Every clause contributes value, and there is no wasted wording.
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 tool has a simple create-folder operation, no output schema, and annotations cover safety flags. The description explains the prerequisite (bucketName) and error interpretation, which is sufficient for basic usage. However, it does not mention the return value or behavior on duplicate folders, which would help the agent fully model the operation. Still, it is more complete than many tools at this complexity level.
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%, with each parameter (name, bucketName, parentPath) already described in the input schema. The description does not add semantic detail beyond what the schema provides, such as format constraints or examples. Baseline 3 is appropriate since the schema fully documents parameters.
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 action: "Create a new folder at the given path in a drive." This is a specific verb+resource pairing that distinguishes it from sibling tools like upload_file or delete_files. The mention of 'given path' adds precision.
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 provides a key prerequisite: "Requires the drive (bucketName)," and explains the meaning of authorization denials. However, it lacks explicit when-to-use versus alternative tools, such as when to choose create_folder over upload_file or browse_folder. There is no mention of alternatives or conditions for non-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_filesDelete filesADestructive
Permanently delete one or more files/folders from a drive, each addressed by its exact object key plus its storage id (the StorageId field from search_files / browse_folder / get_file_metadata β not from list_files or recent_files, whose ids are a different id space and will NOT work). Queued: returns a RequestId per object and the deletes complete in the background, typically under 2 minutes β verify by listing until the objects disappear. Requires the drive (bucketName). Destructive and irreversible. Requires confirm=true. (Write access is authorized server-side by the public API's RBAC β a denial means the API key lacks this tool's scope, not a tool failure.)
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to actually perform this mutating/irreversible action. If omitted or false, the tool returns a preview and makes no changes. | |
| objects | Yes | Objects to permanently delete (one queued request per object). | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds significant context beyond that: the asynchronous queued behavior with a RequestId, background completion under ~2 minutes, verification via listing, the confirm=true requirement, and the RBAC authorization note. These are valuable behavioral disclosures not captured in 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 longer than average but every sentence earns its place: core action, addressing requirements, async behavior, confirm requirement, and RBAC context. It's front-loaded with the destructive nature and key prerequisites. Slightly verbose but not wasteful.
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 destructive, asynchronous tool with no output schema, the description covers all necessary information: exact key and storageId requirements, id space pitfalls, background completion and verification, confirm requirement, and RBAC failure interpretation. An agent has everything needed to call it correctly without further clarification.
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% β all parameters have descriptions in the input schema. The tool description repeats some of that (storageId space note) but adds little new meaning for the parameters themselves. It clarifies the async behavior but that's not parameter-specific. Baseline 3 applies because the schema does the heavy lifting.
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?
Description states a specific verb and resource: 'Permanently delete one or more files/folders from a drive.' It also distinguishes itself from siblings by clarifying which id space is valid (StorageId from search_files/browse_folder/get_file_metadata, not list_files/recent_files), so an agent can tell this apart from other 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?
Provides explicit when-to-use guidance: for permanent deletion, with exact addressing requirements, and the confirm=true prerequisite. It also warns against using ids from list_files/recent_files and explains the RBAC denial meaning, giving clear conditions for successful invocation. While it doesn't name an alternative tool, the instructions effectively prevent misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_fileDownload fileARead-only
Get a short-lived pre-signed download URL for a file. Requires the drive (bucketName). The URL is time-limited and grants read access to that one object β share it with care. Returns the URL; it does not load file bytes into the conversation.
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Object key (path) of the file to download, within the drive. | |
| storageId | No | Optional storage/index id. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. | |
| forceDownload | No | If true, the link forces an attachment download instead of inline view. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses that the URL is short-lived, grants read access to one object only, is time-limited, and returns the URL rather than the file bytes. This adds valuable behavioral context that the annotations do not cover.
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, front-loaded with the primary action, and each sentence earns its place: the first states purpose and requirement, the second explains behavior and return value. No wasted words.
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 URL-returning tool, the description fully covers what it does, what it requires, what it returns, and the key behavioral nuance (does not load bytes). With readOnlyHint and detailed schema, no essential 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?
The input schema has 100% description coverage for all parameters, so the schema already explains filePath, storageId, bucketName, and forceDownload. The description adds no parameter-level meaning beyond stating that bucketName is required, which is already in the schema. Baseline 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 opens with a specific verb and resource: 'Get a short-lived pre-signed download URL for a file.' It clearly states the action and result, and distinguishes itself from siblings by noting it does not load file bytes into the conversation, differentiating from upload or content-fetching tools.
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 provides context (requires bucketName, URL is time-limited, share with care) but does not explicitly mention when to use this tool versus alternatives like share_link, nor does it state exclusion conditions beyond not loading bytes. The 'does not load file bytes' is more a behavioral fact than a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_fileDuplicate fileA
Create a copy of a file in the same location. Requires the drive (bucketName). (Write access is authorized server-side by the public API's RBAC β a denial means the API key lacks this tool's scope, not a tool failure.)
| Name | Required | Description | Default |
|---|---|---|---|
| objectKey | Yes | Source object key to duplicate. | |
| storageId | No | Optional storage/index id. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate read/write and non-destructive nature. The description adds valuable context about server-side RBAC authorization and explains that a denial means missing scope, not a tool failure. However, it does not disclose naming conventions or behavior when a duplicate name 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 two sentences, front-loaded with the core action, and includes only necessary context about requirements and authorization. No wasted words.
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 tool has no output schema, so the description should explain what the tool returns or what the copied file is named. It does not. While it covers purpose and auth behavior, the missing success-result info leaves a clear gap for a mutation 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 input schema provides 100% parameter coverage, including descriptions for objectKey, storageId, and bucketName. The description only reiterates the bucketName requirement without adding new syntax or format details, so it stays at the baseline 3.
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 'Create a copy of a file in the same location', which is a specific verb+resource+location. It clearly distinguishes itself from siblings like move_file and rename_file by emphasizing same-location copying.
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 a clear prerequisite (requires bucketName) but provides no explicit guidance on when to use this tool versus alternatives like move_file or upload_file. Context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_metadataGet file metadataARead-only
Get detailed metadata for a single file or object (size, type, timestamps, storage class, and other attributes) by its object key. Requires the drive (bucketName).
| Name | Required | Description | Default |
|---|---|---|---|
| objectKey | Yes | Full object key (path) of the file within the drive. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a list of returned metadata fields (size, type, timestamps, storage class) beyond what annotations declare. However, the readOnlyHint and openWorldHint annotations already cover safety, and the description does not disclose potential error conditions (e.g., not-found behavior, permission requirements). It provides modest added context but not rich behavioral detail.
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, tightly written, front-loaded with the primary action and clarifying scope. Every phrase earns its place without redundancy or fluff.
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 with well-documented parameters and annotations, the description is sufficient. It lists key metadata attributes and the required context (bucketName). It slightly lacks behavioral expectations like error handling or return format, but the simplicity of the tool and rich schema make it adequately 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 100%, so the baseline is 3. The description adds the phrase 'by its object key' and 'Requires the drive', which loosely aligns with the schema, but it does not add new meaning beyond the already detailed schema descriptions for objectKey and bucketName. The schema carries the full parameter semantics.
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 tool's function: 'Get detailed metadata for a single file or object' with specific attributes (size, type, timestamps, storage class). It distinguishes from siblings like get_file_tags (tags only) and list_files (multiple files), and the 'by its object key' qualifier clarifies the access method.
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 provides clear context for when to use the tool: for a single file/object, requiring the object key and the drive (bucketName). It does not explicitly name alternatives or exclusions, but the 'single' scope and reference to the drive give enough guidance. The sibling tool names (e.g., list_files, search_files) are implicitly differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_tagsGet file tagsARead-only
Get the S3 object tags (key/value pairs) attached to a file, by object key. Requires the drive (bucketName).
| Name | Required | Description | Default |
|---|---|---|---|
| objectKey | Yes | Full object key (path) of the file within the drive. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows this is a read-safe operation and the output may depend on external factors. The description adds no further behavioral details beyond the purpose and the bucketName requirement; it does not mention error cases, empty results, or response format. With annotations covering safety, a neutral score 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, compact sentence that immediately states the action and the key requirement. There is no fluff or repetition; each phrase adds essential information. The structure is front-loaded 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?
Given the tool's simplicity, the description covers the core purpose and a critical prerequisite. No output schema exists, but the description implies the return concept (tags). The annotations cover the safety profile, and the schema fully documents parameters. Minor missing details like what an empty tag set returns are non-essential for this low-complexity 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 input schema provides thorough descriptions for both parameters: objectKey defines the full path, and bucketName explains the drive naming and default behavior. The tool description only restates these concepts ('by object key', 'requires the drive'), adding no new meaning beyond the schema. Since schema coverage is 100%, the baseline of 3 is justified.
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 action: 'Get the S3 object tags (key/value pairs) attached to a file, by object key.' This is a specific verb (Get) and resource (S3 object tags), and the 'by object key' scope distinguishes it from the sibling get_file_metadata, which presumably retrieves broader 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 gives clear context for when to use this tool: when you need to retrieve S3 object tags for a specific file identified by object key. It also notes the prerequisite of requiring the drive (bucketName), which helps the agent understand a necessary condition. It does not explicitly mention alternatives or exclusions, but the context is sufficient for basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_versionServer versionARead-only
Report the version of this CloudSee Drive connector, how many tools it registered, and which CloudSee API host it is configured against. Answer this from the tool rather than from the package version you believe is installed: a client keeps the tool list it fetched when it connected, so an upgraded server can still be described by an older list until the connector is reconnected. Takes no arguments, makes no API call and never reports the API key or its secret.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, but the description adds genuinely useful behavior: it makes no API call, never reports the API key or secret, and reveals the stale-cache caveat. These are exactly the behavioral facts an agent needs 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?
The description is compact yet complete, front-loads the tool's core purpose, and each sentence earns its placeβincluding the warning about stale tool lists. No filler or repetition of schema details.
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 no-argument, read-only introspection tool with no output schema, the description fully covers invocation constraints, behavioral side effects, and the key context about cached tool lists. Nothing an agent needs to call it correctly 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?
There are zero parameters, so the schema carries no semantic load. The description explicitly confirms it takes no arguments, which is all that is needed. This earns the baseline of 4 for a parameterless tool.
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 names a specific verb ('Report') and a precise resource: the CloudSee Drive connector version, registered tool count, and configured API host. This clearly distinguishes it from the file-operation siblings, which all act on files or buckets.
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 tells the agent to answer from the tool rather than from an assumed package version, and explains the stale-tool-list scenario that motivates this. This gives clear when-to-use guidance and prevents a common misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bucketsList drivesARead-only
List the drives registered to the authenticated CloudSee Drive account that the caller is allowed to see. Use this first to discover available drives before browsing or searching; the Name of a drive is the bucketName the other tools expect.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint and openWorldHint, and the description adds meaningful context: results are filtered by caller permissions and the tool returns drive names used as identifiers elsewhere. This is useful behavioral detail beyond the annotation flags, though not exhaustive.
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, front-loaded with the action, and every clause earns its place. It is both concise and well-structured.
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 list tool with no schema and strong annotations, the description provides sufficient context: what is listed, permission scoping, usage order, and a critical naming convention. No return schema is needed because the description explains the key output field.
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 has zero parameters, so the baseline is 4. The description does not need to explain parameters; it instead clarifies the output semantics (Name = bucketName), which is valuable for downstream tool usage.
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 'List' and identifies the resource as 'drives registered to the authenticated CloudSee Drive account that the caller is allowed to see,' clearly distinguishing it from sibling file-level tools like list_files and browse_folder.
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 instructs to use this tool first before browsing or searching, and explains that the returned 'Name' corresponds to the 'bucketName' expected by other tools. This provides direct guidance on when to use it and how it relates to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesList files in a driveARead-only
List the files in a drive straight from storage, recursively by default β the most reliable way to see what a drive actually contains. Requires the drive (bucketName). Returns names, sizes, storage classes and keys, with pagination. The object id in each result is regenerated on every call and must never be used for rename_file, move_file, update_metadata, or delete_files β use search_files, browse_folder, or get_file_metadata for a stable StorageId instead (recent_files returns a different id space and will not work there either). For a complete listing, keep calling with the returned cursor until no cursor comes back β a page may be short, or even empty, while more results remain.
| Name | Required | Description | Default |
|---|---|---|---|
| deep | No | Recurse into sub-folders (default true). | |
| cursor | No | Opaque pagination cursor returned by a previous call. | |
| pageSize | No | Max items per page (1-200, default 13). The connector sizes each page to what it can render whole, starting at 13 and adapting to the size of your items from the previous page; a larger value is reduced to what fits. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds substantial behavioral context beyond that: object ids are regenerated on every call, pages may be short or empty even when more results remain, and recursive-by-default behavior. This is exactly the kind of non-obvious runtime behavior an agent needs to avoid misusing results or terminating pagination early.
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 information-dense with no filler. It front-loads the core purpose and default behavior, then covers requirements, return content, pagination, and a critical id-stability warning β every sentence earns its place and the structure makes the most important caveat (unstable object ids) 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?
There is no output schema, so the description carries the burden of explaining return values, and it does: names, sizes, storage classes, keys, and pagination. It also covers the full pagination loop and the unstable-id caveat, making the tool correctly invocable for a complete listing with no missing operational detail.
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 coverage is 100%, so the baseline is 3, but the description adds meaningful semantic context for the cursor and bucketName parameters: it explains that the cursor must be followed until absent, warns that a page may be short/empty, and clarifies the bucketName requirement. It doesn't fully redefine each parameter, but it enriches the pagination semantics beyond the schema's one-line cursor 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?
The description states a specific verb and resource ('List the files in a drive straight from storage') and clarifies the key behavior ('recursively by default'). It also distinguishes itself from siblings by asserting it is 'the most reliable way to see what a drive actually contains' and by warning that its object ids are unsuitable for mutation tools, implicitly contrasting with browse_folder/search_files/recent_files.
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 explicitly states the prerequisite ('Requires the drive (bucketName)') and gives precise operational guidance for pagination ('keep calling with the returned cursor until no cursor comes back'). It also names alternatives for a stable StorageId (search_files, browse_folder, get_file_metadata) and explicitly excludes recent_files, giving the agent clear when-to-use vs when-not-to-use signals.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_fileMove or copy fileADestructive
Move (or copy, with asCopy=true) a file or folder to a new location, addressed by its exact object key plus its storage id (the StorageId field from search_files / browse_folder / get_file_metadata β not from list_files or recent_files, whose ids are a different id space and will NOT work). Queued: returns a RequestId and the operation completes in the background, typically under 2 minutes β verify by listing until the object appears at the destination. Requires the source drive (bucketName). A move removes the source and is destructive, so it requires confirm=true; a copy does not. (Write access is authorized server-side by the public API's RBAC β a denial means the API key lacks this tool's scope, not a tool failure.)
| Name | Required | Description | Default |
|---|---|---|---|
| asCopy | No | Copy instead of move (copy is non-destructive; the source is kept). | |
| confirm | No | Must be true to actually perform this mutating/irreversible action. If omitted or false, the tool returns a preview and makes no changes. | |
| isFolder | No | Set true for a folder. | |
| objectKey | Yes | Exact source object key as returned by a listing tool (folders keep their trailing slash). | |
| storageId | Yes | Storage/index id of the object β the StorageId field returned by search_files, browse_folder, or get_file_metadata. NOTE: the ids from list_files and recent_files belong to a different id space and will NOT work here. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. | |
| destinationPath | Yes | Destination folder prefix. | |
| destinationBucket | No | Target drive, if different from the source drive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing asynchronous queued behavior ('returns a RequestId... completes in the background'), the destructive nature of a move, the confirm=true guard, RBAC denial semantics, and the id-space incompatibility of list_files/recent_files ids. This is rich, actionable behavioral information not available from the structured annotations alone.
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 front-loaded with the core action, then adds necessary caveats in a logical order: addressing, queued behavior, destructive semantics, and authorization. Every sentence earns its place; despite the length, there is no filler or repetition of the schema.
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 complex, destructive, async tool with no output schema, the description is complete: it explains the returned RequestId, the verification-by-listing pattern, the confirm requirement, the storage id constraint, the bucket prerequisite, and the meaning of RBAC denial. An agent has enough information 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?
The input schema already has 100% parameter coverage, so the baseline is 3. The description adds critical semantic detail beyond the schema, especially the warning that storage ids from list_files and recent_files belong to a different id space and will not work, and the note that bucketName is required unless a default bucket is configured. This makes parameter misuse less likely.
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 and resource: 'Move (or copy, with asCopy=true) a file or folder to a new location.' It distinguishes between move and copy, and adds the precise addressing requirement (object key plus storage id), which separates it from related sibling tools like rename_file or duplicate_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?
The description gives clear operational context: it explains when the tool is appropriate (moving/copying to a new location), how to verify completion, and the confirmation requirement for destructive moves. It does not explicitly name alternatives or state when not to use this tool, but the context is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent_filesRecent filesARead-only
List the account's most recently accessed or modified files, newest first, with pagination. For a complete listing, keep calling with the returned cursor until no cursor comes back.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items (1-200, default 13). The connector sizes each page to what it can render whole, starting at 13 and adapting to the size of your items from the previous page; a larger value is reduced to what fits. | |
| cursor | No | Opaque pagination cursor returned by a previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already convey that this is a safe read operation. The description adds useful behavioral context beyond those annotations: newest-first ordering and the explicit instruction to keep following the cursor until none is returned.
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 sentences with no filler: the first defines purpose, scope, and ordering; the second gives the necessary pagination instruction for complete traversal. Every sentence earns its place.
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 list tool with zero required parameters and detailed schema descriptions, the definition is mostly complete: it covers what is listed, the ordering, and how to paginate through all results. There is no output schema, so a note on item shape would add value, but the absence does not prevent correct invocation.
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%, and the limit parameter is already richly documented, including the adaptive page-size behavior. The description adds little parameter-level meaning beyond reinforcing the cursor loop, 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 states a specific verb ('List'), a clear resource ('the account's most recently accessed or modified files'), and adds ordering ('newest first') and pagination. This cleanly distinguishes it from generic listing siblings like list_files and search_files.
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 provides a clear context: use this when you need recently accessed or modified files for the account. It does not explicitly name excluded alternatives, but the recency-focused framing is enough to guide tool selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_fileRename file or folderADestructive
Rename a file or folder in a drive, addressed by its exact object key plus its storage id (the StorageId field from search_files / browse_folder / get_file_metadata β not from list_files or recent_files, whose ids are a different id space and will NOT work). Queued: returns a RequestId and the rename completes in the background, typically under 2 minutes β verify by listing until the new name appears. The StorageId goes stale while the rename is in flight, and StorageId is what delete_files and move_file require, so re-read it from a listing once the new name appears rather than reusing the one you renamed with. Requires the drive (bucketName). Destructive (changes the object's key). Requires confirm=true. (Write access is authorized server-side by the public API's RBAC β a denial means the API key lacks this tool's scope, not a tool failure.)
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to actually perform this mutating/irreversible action. If omitted or false, the tool returns a preview and makes no changes. | |
| newName | Yes | New name. | |
| isFolder | No | Set true when renaming a folder. | |
| objectKey | Yes | Exact object key of the file or folder as returned by a listing tool (folders keep their trailing slash). | |
| storageId | Yes | Storage/index id of the object β the StorageId field returned by search_files, browse_folder, or get_file_metadata. NOTE: the ids from list_files and recent_files belong to a different id space and will NOT work here. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already mark the tool as destructive and non-read-only, the description adds substantial behavioral context: it returns a RequestId and completes asynchronously, the StorageId becomes stale during the rename, and a permission denial means the API key lacks scope rather than a tool failure. This aligns with the annotations and adds real behavioral value.
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 dense but not bloated; every major point (id source, async behavior, stale id, bucketName, confirm, RBAC) earns its place. It is longer than strictly necessary, but the added caveats are operationally important for safe invocation.
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 destructive asynchronous tool with no output schema, the description covers invocation prerequisites, completion timing, verification steps, and error interpretation. No critical operational information needed to call the tool correctly 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 coverage is 100%, and the schema already documents storageId id-space caveats and confirm. The description reinforces these and adds operational meaning beyond the schema by warning that StorageId goes stale in flight and that delete_files/move_file depend on re-reading a fresh StorageId.
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 precise verb and resource ('Rename a file or folder in a drive') and distinguishes the required addressing mode: exact object key plus storage id. It also names the exact source tools that produce a compatible storage id, making it clear what this tool operates on.
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 conveys clear operating context: queued background execution, verify by listing until the new name appears, and the requirement for bucketName and confirm=true. It does not explicitly contrast with move_file as an alternative, so it stops short of full when-to-use versus 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.
restore_archived_fileRestore archived fileADestructive
Begin restoring an archived (S3 Glacier) object so it can be downloaded. Requires the drive (bucketName). This is Glacier un-archiving β NOT recovery of a deleted file β and may incur retrieval cost and take minutes to hours. Requires confirm=true. (Write access is authorized server-side by the public API's RBAC β a denial means the API key lacks this tool's scope, not a tool failure.)
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | How many days to keep the restored copy available. | |
| confirm | No | Must be true to actually perform this mutating/irreversible action. If omitted or false, the tool returns a preview and makes no changes. | |
| objectKey | Yes | Object key of the archived (Glacier) object to restore. | |
| storageId | No | Optional storage/index id. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. | |
| retrievalTier | No | Glacier retrieval tier (default Standard). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as destructive and non-read-only, but the description adds critical context: confirm=true is required, the operation incurs retrieval cost, may take minutes to hours, and RBAC denials are scope errors rather than tool failures. It also clarifies this is Glacier un-archiving, not file recovery. 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 four sentences, front-loaded with action and resource. Each sentence earns its place: action, prerequisite, clarification/cost/time, and confirmation/auth behavior. There is no filler or redundant restating of the title or schema.
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 covers prerequisites, side effects, cost, latency, auth behavior, and the mutating nature requiring confirmation. The only gap is that with no output schema, it does not mention what the tool returns (e.g., job status or async tracking), which would be useful for an operation that takes minutes to hours. Overall, it is quite complete for selection and invocation.
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 already covers all six parameters with 100% description coverage, so the baseline is 3. The description adds value by emphasizing the bucketName prerequisite and the confirm=true gate, reinforcing critical parameters beyond their schema descriptions. It does not redundantly restate each parameter, making it useful emphasis rather than repetition.
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 and resource: 'Begin restoring an archived (S3 Glacier) object so it can be downloaded.' It further distinguishes itself with 'NOT recovery of a deleted file,' clearly separating it from deletion/recovery tools. The purpose is unambiguous and distinct from sibling tools like download_file or delete_files.
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?
Explicitly describes when to use: to restore an archived object for download. Provides exclusions ('NOT recovery of a deleted file'), states required prerequisites (bucketName, confirm=true), and warns of cost/time implications. This gives clear decision-making guidance beyond simply naming the action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_filesSearch filesARead-only
Search for files and folders by name keyword within a drive (the indexed view). Requires the drive (bucketName). Returns matches with pagination. For a complete listing, keep calling with the returned cursor until no cursor comes back β a page may be short, or even empty, while more results remain.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Folder within the drive to search under. Empty = drive root. | |
| query | Yes | Keyword to match against file and folder names. | |
| cursor | No | Opaque pagination cursor returned by a previous call. | |
| pageSize | No | Max items per page (1-200, default 13). The connector sizes each page to what it can render whole, starting at 13 and adapting to the size of your items from the previous page; a larger value is reduced to what fits. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description adds crucial behavioral nuance beyond them: the pagination contract that a page may be short or empty while more results remain. This prevents a real failure mode (premature termination) and gives actionable guidance beyond the 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?
Every sentence earns its place: the first states the core function, the second a prerequisite, and the third the critical pagination behavior. It is front-loaded with the key warning and contains no filler or redundant restatement of the title.
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 complete enough for a read-only search tool: it covers prerequisites, pagination loop, and termination condition. The main gap is that it doesn't specify match semantics (substring vs. exact, case sensitivity, wildcards), which could matter to an agent, and it doesn't describe the result payload since there is no output schema.
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 baseline is 3. The description adds semantic value by explicitly noting bucketName is a requirement (unless a default is configured) and by clarifying that cursor existence, not page content, signals more results. These details amplify the schema's own parameter descriptions.
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 ('search') with a specific resource ('files and folders by name keyword') and adds the distinguishing qualifier 'within a drive (the indexed view)'. This clearly separates it from generic list/browse tools and makes its function unmistakable.
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 it (when searching by name keyword) and provides a strong usage pattern around pagination, but it never explicitly contrasts it with sibling tools like list_files or browse_folder. There are no 'when not to use' exclusions or alternative routing, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_metadataUpdate file metadataADestructive
Update a file's metadata (category / description / project) and tags in a drive, addressed by its storage id (the StorageId field from search_files / browse_folder / get_file_metadata β not from list_files or recent_files, whose ids are a different id space and will NOT work). Defaults to mode "merge": a metadata field you do not send is KEPT, a field sent as "" is CLEARED, and tags are merged by Key β a tag with the same Key is overwritten and tags with other Keys are kept. Destructive cases: sending tags: [] CLEARS every tag on the object, and mode "replace" clears every metadata field and every tag you do not send β that is also the only way to remove a single tag, by sending the complete set you want to keep. Requires the drive (bucketName) and confirm=true. Note: the update rewrites the object in place (S3 copy) β its ETag changes (and may change format) and LastModified is set to the update time; ETag-keyed caches and sync tools will see the object as new. Objects larger than 5 GiB are updated via multipart copy; objects larger than 8 GiB are rejected, because the rewrite cannot finish inside the API request timeout. (Write access is authorized server-side by the public API's RBAC β a denial means the API key lacks this tool's scope, not a tool failure.)
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | merge (default): metadata keys you omit are KEPT, a key sent as "" is CLEARED, and tags are merged by Key β a tag with the same Key is overwritten, others are kept. replace: every metadata field and every tag you do not send is CLEARED. Use replace to remove a single tag (send the complete set you want to keep). | |
| tags | No | Tags to apply. Under the default merge mode they are merged by Key β a tag with the same Key is overwritten and tags with other Keys are kept; under replace they become the COMPLETE tag set. Sending [] CLEARS every tag in both modes, and leaving this out keeps the existing tags under merge (clears them under replace). | |
| confirm | No | Must be true to actually perform this mutating/irreversible action. If omitted or false, the tool returns a preview and makes no changes. | |
| metadata | No | Metadata fields to set. Under the default merge mode a field you leave out is KEPT and a field sent as "" is CLEARED; under replace every field you leave out is CLEARED. | |
| storageId | Yes | Storage/index id of the object β the StorageId field returned by search_files, browse_folder, or get_file_metadata. NOTE: the ids from list_files and recent_files belong to a different id space and will NOT work here. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal mutating/destructive behavior, and the description adds substantial context beyond that: merge vs replace destructive cases, ETag/LastModified side effects, the S3 copy rewrite, size limits, the confirm preview mechanism, and the RBAC denial meaning. This gives the agent a precise model of the tool's side effects.
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 long and dense, but nearly every sentence carries essential behavioral or safety information. The opening sentence front-loads the core purpose, and the later sentences earn their place by covering destructive cases, side effects, and constraints.
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 complex mutation tool with nested objects, no output schema, and destructive annotations, the description is remarkably complete. It covers prerequisites, mode semantics, destructive edge cases, server-side authorization, size limits, and post-update side effects like ETag changes and multipart copy.
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 coverage is 100%, so the baseline is 3. The description adds meaningful semantic value beyond the schema: the storageId id-space warning, the tags: [] destructive case, the field-clearing semantics, and the S3 copy implication. It reinforces and expands on the schema descriptions rather than merely repeating them.
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 ('Update'), an explicit resource ('a file's metadata (category / description / project) and tags in a drive'), and the addressing requirement (storageId). It also distinguishes itself from the read-oriented sibling tools by naming the correct id source and explicitly excluding list_files and recent_files ids.
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 clear context for correct invocation: requires bucketName and confirm=true, explains the default merge behavior, and identifies the only way to remove a single tag. It does not explicitly enumerate when to prefer this tool over alternatives, but no sibling tool performs metadata updates, 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.
upload_fileUpload fileA
Upload a file into a folder of a drive. The file is read from the machine running this server β which, over this connection, is your own machine β so pass its path. Requires the drive (bucketName). Files up to 8 MiB are sent in one piece; larger ones are split into parts automatically. If the name is already taken, a timestamped name is used instead, so an existing file is never overwritten. Indexing is asynchronous, so a file that uploaded successfully is still absent from browse_folder / search_files / list_files for a while afterwards β keep listing until it appears instead of uploading it again. (Write access is authorized server-side by the public API's RBAC β a denial means the API key lacks this tool's scope, not a tool failure.)
| Name | Required | Description | Default |
|---|---|---|---|
| fileName | No | Name to store the file as. Defaults to the local file's name. | |
| localPath | Yes | Path to the file to upload, on the machine running this server. Copy the name exactly β invisible characters in a file name are a common cause of 'not found'. | |
| bucketName | No | The CloudSee drive (S3 bucket) name to operate in, e.g. 'max-2778abc0' β find it in the CloudSee dashboard. Required unless CLOUDSEE_DEFAULT_BUCKET is configured on the server. | |
| storageClass | No | Optional S3 storage class (e.g. STANDARD, INTELLIGENT_TIERING). | |
| destinationFolder | No | Destination folder/prefix in the drive. Omit or empty = drive root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses several non-obvious behaviors: the file is read from the local machine, files over 8 MiB are split automatically, existing files are never overwritten, indexing is asynchronous, and RBAC denials indicate a scope issue rather than a tool failure. This is exactly the behavioral context an agent needs.
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 front-loaded with the core purpose and each subsequent sentence covers a distinct, operationally relevant behavior. It is dense but every clause earns its place, including the parenthetical RBAC clarification.
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?
It covers the local-path requirement, bucket requirement, size handling, collision behavior, async indexing, and auth errorsβmost of what an agent needs to invoke this correctly. The only notable gap is the absence of an explicit statement about the tool's return value or confirmation of success, and no output schema is provided to fill that gap.
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?
Input schema coverage is 100%, so the schema already documents all five parameters. The description adds useful context for localPath and bucketName and explains collision behavior related to fileName, but it does not add meaning beyond the schema for storageClass or destinationFolder.
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 a specific action and resource: 'Upload a file into a folder of a drive.' This is unambiguous and clearly distinguishes it from siblings such as download_file, move_file, and create_folder.
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 makes the intended use clear: upload a local file into a drive folder when you have its path. It also gives strong operational guidance, such as verifying with browse_folder/search_files/list_files instead of re-uploading while indexing lags, but it does not explicitly contrast this tool with alternative creation or upload tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_statusCheck a background uploadARead-only
Report progress on an upload started by 'upload_file' that was too large to finish inside one tool call. Give it the id upload_file returned, or omit the id to list every tracked upload. States are running, completed and failed; a file is only in the drive once its upload reports completed. This reads progress held in this server process and makes no API call, so it is safe to poll. (Write access is authorized server-side by the public API's RBAC β a denial means the API key lacks this tool's scope, not a tool failure.)
| Name | Required | Description | Default |
|---|---|---|---|
| uploadId | No | The id returned by upload_file. Omit to list every upload this server has tracked, newest first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that the tool reads progress held in the server process and makes no API call, making it safe to poll. It also explains that RBAC denials reflect API key scope, not tool failure, which prevents misinterpretation of errors.
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 tightly-packed sentences cover purpose, input, behavior, state semantics, safety, and error interpretation. Every sentence contributes meaningful information, and the most important usage guidance appears at the beginning.
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 no output schema, the description partially compensates by enumerating the possible states and their meaning. It does not specify the exact response shape or whether progress percentages, timestamps, or other details are returned, but for a simple status-checking tool with one optional parameter, the provided context is nearly 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 input schema already fully documents uploadId, including the instruction to omit it to list all tracked uploads. The description essentially restates the schema's parameter guidance, adding no substantially new semantics, so the baseline of 3 applies.
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 tool's purpose: report progress on an upload started by 'upload_file' that was too large to finish in one call. This distinguishes it from the many file-list and metadata siblings, and the title reinforces the same function without being the sole source of meaning.
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 explicitly tells the agent when to use the tool, what input to provide (the uploadId returned by upload_file), and what happens if omitted (list every tracked upload). It also gives the key behavioral rule: a file is only in the drive once its upload reports completed.
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.
10 tool updates
v3.1.1- Changed
browse_folder1 field changed- changed
Input schema / properties / pageSize / descriptionPrevious value: -"Max items per page (1-200, default 50)."New value: +"Max items per page (1-200, default 13). The connector sizes each page to what it can render whole, starting at 13 and adapting to the size of your items from the previous page; a larger value is reduced to what fits."
- Changed
delete_files1 field changed- changed
Input schema / properties / objects / items / properties / storageId / descriptionPrevious value: -"Storage/index id of the object β the StorageId field returned by the INDEXED listing tools (search_files, browse_folder, recent_files). NOTE: list_files reads straight from storage and returns a different id that will NOT work here."New value: +"Storage/index id of the object β the StorageId field returned by search_files, browse_folder, or get_file_metadata. NOTE: the ids from list_files and recent_files belong to a different id space and will NOT work here."
- Added
get_version - Changed
list_files1 field changed- added
Input schema / properties / pageSizeAdded value: +{ + "description": "Max items per page (1-200, default 13). The connector sizes each page to what it can render whole, starting at 13 and adapting to the size of your items from the previous page; a larger value is reduced to what fits.", + "maximum": 200, + "minimum": 1, + "type": "integer" +}
- Changed
move_file1 field changed- changed
Input schema / properties / storageId / descriptionPrevious value: -"Storage/index id of the object β the StorageId field returned by the INDEXED listing tools (search_files, browse_folder, recent_files). NOTE: list_files reads straight from storage and returns a different id that will NOT work here."New value: +"Storage/index id of the object β the StorageId field returned by search_files, browse_folder, or get_file_metadata. NOTE: the ids from list_files and recent_files belong to a different id space and will NOT work here."
- Changed
recent_files1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max items (1-200, default 50)."New value: +"Max items (1-200, default 13). The connector sizes each page to what it can render whole, starting at 13 and adapting to the size of your items from the previous page; a larger value is reduced to what fits."
- Changed
rename_file1 field changed- changed
Input schema / properties / storageId / descriptionPrevious value: -"Storage/index id of the object β the StorageId field returned by the INDEXED listing tools (search_files, browse_folder, recent_files). NOTE: list_files reads straight from storage and returns a different id that will NOT work here."New value: +"Storage/index id of the object β the StorageId field returned by search_files, browse_folder, or get_file_metadata. NOTE: the ids from list_files and recent_files belong to a different id space and will NOT work here."
- Changed
search_files1 field changed- changed
Input schema / properties / pageSize / descriptionPrevious value: -"Max items per page (1-200, default 50)."New value: +"Max items per page (1-200, default 13). The connector sizes each page to what it can render whole, starting at 13 and adapting to the size of your items from the previous page; a larger value is reduced to what fits."
- Changed
share_link1 field changed- added
Input schema / properties / expireTimeAdded value: +{ + "description": "How long the link stays valid, in hours. Defaults to 12 hours when omitted; the server caps it at 30 days.", + "exclusiveMinimum": 0, + "type": "number" +}
- Changed
update_metadata4 fields changed- changed
Input schema / properties / metadata / descriptionPrevious value: -"Metadata to set. Full overwrite: a field left out here is CLEARED on the object."New value: +"Metadata fields to set. Under the default merge mode a field you leave out is KEPT and a field sent as \"\" is CLEARED; under replace every field you leave out is CLEARED." - added
Input schema / properties / modeAdded value: +{ + "description": "merge (default): metadata keys you omit are KEPT, a key sent as \"\" is CLEARED, and tags are merged by Key β a tag with the same Key is overwritten, others are kept. replace: every metadata field and every tag you do not send is CLEARED. Use replace to remove a single tag (send the complete set you want to keep).", + "enum": [ + "merge", + "replace" + ], + "type": "string" +} - changed
Input schema / properties / storageId / descriptionPrevious value: -"Storage/index id of the object β the StorageId field returned by the INDEXED listing tools (search_files, browse_folder, recent_files). NOTE: list_files reads straight from storage and returns a different id that will NOT work here."New value: +"Storage/index id of the object β the StorageId field returned by search_files, browse_folder, or get_file_metadata. NOTE: the ids from list_files and recent_files belong to a different id space and will NOT work here." - changed
Input schema / properties / tags / descriptionPrevious value: -"The COMPLETE desired tag set for the object. Existing tags are replaced; omitting this clears all tags."New value: +"Tags to apply. Under the default merge mode they are merged by Key β a tag with the same Key is overwritten and tags with other Keys are kept; under replace they become the COMPLETE tag set. Sending [] CLEARS every tag in both modes, and leaving this out keeps the existing tags under merge (clears them under replace)."
2 tool updates
v2.0.2- Changed
upload_file4 fields changed- removed
Input schema / properties / contentTypeRemoved value: -{ - "description": "MIME type. Defaults to application/octet-stream.", - "type": "string" -} - changed
Input schema / properties / destinationFolder / descriptionPrevious value: -"Destination folder/prefix in the drive. Empty = drive root."New value: +"Destination folder/prefix in the drive. Omit or empty = drive root." - changed
Input schema / properties / localPath / descriptionPrevious value: -"Path to the local file to upload (absolute, or relative to the server's working directory)."New value: +"Path to the file to upload, on the machine running this server. Copy the name exactly β invisible characters in a file name are a common cause of 'not found'." - changed
Input schema / requiredPrevious value: -[ - "localPath", - "destinationFolder" -]New value: +[ + "localPath" +]
- Added
upload_status
17 tool updates
v1.0.0- First observed
browse_folder - First observed
create_folder - First observed
delete_files - First observed
download_file - First observed
duplicate_file - First observed
get_file_metadata - First observed
get_file_tags - First observed
list_buckets - First observed
list_files - First observed
move_file - First observed
recent_files - First observed
rename_file - First observed
restore_archived_file - First observed
search_files - First observed
share_link - First observed
update_metadata - First observed
upload_file
TDQS
Scored across 19 tools
Most tools are clearly distinct in purpose, but the listing tools (browse_folder, search_files, list_files, recent_files) overlap in functionality. Each has detailed descriptions explaining the differences, so an agent can differentiate them, but they could still cause misselection if descriptions are not read carefully.
All tool names use snake_case and predominantly follow a verb_noun pattern (list_buckets, download_file, move_file). A few like recent_files and get_version deviate slightly, but the overall convention is consistent and predictable.
With 19 tools, the server covers a wide range of drive operations (browse, search, upload, download, manage metadata, share, archive restore). While on the higher end, each tool serves a distinct function that justifies its inclusion for a comprehensive drive API.
The tool set covers the full lifecycle of file management: create, read, update, delete, plus metadata, tags, sharing, and archiving. Minor gaps exist, such as no share revocation or bulk operations, but these are not critical for core workflows.
Maintenance
Related MCP Connectors
Browse, upload, download, and share files in your S3-compatible buckets with delegated roles.
Give Claude only the Google Drive files you choose. Every action logged.
Search, browse, and read your Dropbox files. Find documents by name or content, list folders, andβ¦
Manage files and folders directly from your workspace. Read and write files, list directories, creβ¦
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Google Drive file operations (search, read, create, download, etc.) through natural language, compatible with Claude.ai's Drive connector.182MIT
- AlicenseAqualityDmaintenanceEnables browsing S3 buckets and objects, and generating secure presigned URLs for downloads and uploads, through natural language commands in MCP clients like Claude Desktop.36 npm3MIT
- AlicenseAqualityCmaintenanceEnables advanced file system operations such as file read/write, directory management, search, archiving, and file watching through natural language.1616 npm2MIT
- AlicenseNot gradedqualityDmaintenanceEnables management of Google Drive files, Docs, Sheets, and Slides through natural language using MCP, with support for file operations, search, and shared drives.6 npmMIT