Skip to main content
Glama

gopan

简体中文 · English

自部署云盘。Go + GraphQL + Postgres + MinIO 后端,单二进制交付,2 核 2G 的 VPS 就能跑。三个客户端:Vue 3 网页、Kotlin + Jetpack Compose 的安卓原生 App、Windows 桌面端(Tauri)。

  • 内置 AI 助手:网页、桌面端、安卓 App 里都能用,找文件、读文档、整理、建分享;改动先确认,也能整轮交给服务器跑。

  • 自带 Remote MCP:Claude、ChatGPT、Codex 等 Agent 经 OAuth 2.1 接入,在你授权的范围里找、读、整理、分享网盘里的文件;文件字节不经过 MCP,Agent 做的每次改动都能在「动态」里按来源撤回。各客户端怎么接见 docs/MCP.md · 客户端接入,给 Agent 的用法说明见 Agent Skill。

CI

在线实例:https://drive.979687.xyz(跑在 2 核 2G 的 VPS 上,精简档部署)

主目录

上传队列

预览

分享访客页

当前版本与每一版改了什么见 CHANGELOG(站点的 /app 页面与 App 的「更新日志」展示的就是它);功能全貌见 12 · 产品说明。

架构

flowchart LR
    Browser["浏览器 · Vue 3 SPA"]
    Browser -- "GraphQL /query<br/>(元数据与编排)" --> GQL
    Browser <-. "字节流:预签名 URL<br/>分片直传 / 直取" .-> MinIO
    Android["安卓 App · Compose"] -- "GraphQL /query" --> GQL
    Android <-. "预签名直传 / 直取<br/>(后台续传)" .-> MinIO
    Agent["Agent · MCP Host"] -- "Streamable HTTP /mcp<br/>OAuth 2.1 / API Key" --> MCP
    Agent <-. "预签名 PUT / GET<br/>Agent 自主传输" .-> MinIO
    DAV["Finder · rclone · WebDAV 客户端"] -- "WebDAV /dav<br/>应用密码" --> REST

    subgraph Gopan["gopan · Go 单二进制"]
        GQL["gqlgen"] --> Service["service 业务层"]
        MCP["Remote MCP · OAuth server"] --> Service
        REST["HTTP:/dav · /pack · /arc · /x/:token · /sub · /md · /api/img · /s/:token · /api/app · /healthz"] --> Service
        Worker["worker pool<br/>缩略图 · 转 PDF · hash 校验 · 文字提取 · 压缩包目录 · GC"]
        Jobs["后台任务 runner<br/>离线下载 · 解压 · 剪藏 · 订阅"]
        Embed["embed 前端静态资源"]
    end

    Service --> PG[("PostgreSQL<br/>元数据 · 事务 · 递归 CTE")]
    Service --> MinIO[("MinIO<br/>blobs/{sha256} 内容寻址")]
    Worker --> MinIO
    Worker --> GT["Gotenberg<br/>(office → PDF,可关)"]
    Worker --> FF["ffmpeg(exec)"]
    Worker --> PT["pdftotext(exec)"]
    Jobs --> MinIO
    Jobs -. "离线下载 · 订阅 · 剪藏(挡内网)" .-> Web(("外部网站"))
    Service -. "推送(挡内网)" .-> Push(("ntfy · Bark · Telegram · Webhook"))

要点:主传输路径字节流不过 Go——浏览器、安卓 App 和 Agent 都拿预签名 URL 直传/直取 MinIO。显式例外只有流式 zip(/pack、/mcp-download)、协议决定必须中转的 WebDAV PUT/GET、几 MB 的安卓安装包(/api/app/android/),v3.3 的离线下载(服务器替你从源站拉)与压缩包(解压、/arc 预览包里的单个文件),以及 v3.4 的直链(/x/,经 Go 才能记流量、按上限拦、吊销即时生效)、图床上传与字幕转换,都有并发闸。文件按 SHA-256 内容寻址,全站同内容物理只存一份(秒传),配额按逻辑大小各记各的。类型从数据库到组件不断链:sqlc(SQL→Go)、gqlgen(schema→resolver)、GraphQL Code Generator(schema→TS),改一处两端编译报错。

Related MCP server: FilePilot AI

快速开始

部署(用预构建镜像)

一台有公网 IP 的 Linux 主机(2G 内存够用)、一个解析到它的域名、Docker 与 compose 插件。镜像由 GitHub Actions 构建,机器上不编译(只有 linux/amd64):

git clone https://github.com/yophon/gopan.git /opt/gopan && cd /opt/gopan
cp .env.example .env && vi .env    # 填域名与两个密码,选部署档位,取消 GOPAN_IMAGE 的注释
mkdir -p secrets && openssl rand -base64 48 > secrets/jwt_secret
chown 10001:10001 secrets/jwt_secret && chmod 400 secrets/jwt_secret && chmod 600 .env
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d --no-build

选档(自带 Caddy 自动证书,还是交给宿主 nginx)、反代约定、升级、备份与恢复、排障都在 09 · 上线手册。

开发

make dev-env      # compose 起 postgres/minio/gotenberg
make dev-server   # 后端 :8080(自动跑迁移)
make dev-web      # 前端 :5173(proxy → 8080)

make gen          # 改了 schema.graphqls / db/queries 后重新生成三件套
make test         # go test + vet(集成测试需 TEST_DB_URL)
make build        # 前端构建 + embed → server/gopan 单二进制

生产运行只需要 server/gopan 二进制 + GOPAN_DB_URL + GOPAN_JWT_SECRET(≥32 字节),配置项见 doc/08。

安卓 App 与桌面端连哪个站点是打包时定的:照 client.env.example 在仓库根建 client.env(不进 git)写上自己实例的地址,两端都读它(doc/18「自部署」)。

设计文档

浏览器上传的 staging 隔离、配额复核、失败恢复和升级兼容说明见 15 · 上传一致性修复。

Agent 接入与远程 MCP 工具见 docs/MCP.md(各客户端的接法在客户端接入一节),给 Agent 的用法说明见 skills/gopan/。

全部设计文档在 doc/:

文档

内容

01 · 需求与范围

v1 功能清单、明确不做的、非功能要求、术语表

02 · 技术选型

前后端选型表、不用什么及理由

03 · 架构与核心流程

组件图;浏览器/Agent 传输、下载、预览、分享、GC 流程

04 · 数据模型

Postgres 核心结构、凭据/传输表、不变量、容量估算

05 · GraphQL 设计

SDL 约定、Agent 凭据控制面、resolver 要点

06 · 认证与安全

登录双 token、访客、WebDAV、MCP OAuth/API Key、预签名边界

07 · 前端设计

路由/组件/store 划分、上传器状态机、token 处理层

08 · 项目结构与部署

仓库布局、开发流、compose、运维、里程碑

09 · 上线手册

从裸机到可用:部署/升级/回滚/备份恢复/排障/配置速查

10 · 真机部署复盘

首次真机部署踩的坑与教训、新机检查清单

11 · 使用手册

面向使用者:上传/预览/分享/回收站怎么用、常见问题

12 · 产品说明

定位、功能总览、能力边界、数据与安全、同类对比

13 · v2 规划

M7 管理端 → M8 规模(keyset/子树统计)→ M9 WebDAV,原则与取舍

14 · 测试补强与已知问题

测试惯例与覆盖率现状、已发现未修的潜在问题清单

15 · 浏览器上传一致性修复

staging 隔离、配额复核、失败恢复、升级兼容

16 · 备份恢复演练

异地副本恢复的实战记录与字节级判据

17 · 传输助手改进计划

v2.5 传输助手整改的问题清单与方案

18 · 安卓 App

原生客户端的功能、安装升级、权限、系统集成、自部署、发布流程

CHANGELOG

给用的人看的更新日志,站点发布页 /app 与 App「更新日志」展示的就是它

19 · 安卓原生 App 计划

网页 → 原生功能对照、技术选型、登录协议、P1–P4 里程碑与验收记录

20 · 收集文件与内容搜索计划

匿名收集链接(访客只写不读)、中文内容搜索(二元切词 + 原生全文索引)、P0 安全前置与里程碑

21 · 离线下载与压缩包计划

后台任务底座、离线下载防 SSRF 与断线续传、压缩包目录索引 / 预览 / 解压的上限与里程碑

22 · 影音、通知与图床计划

媒体类型补全、字幕 / 续播 / 连播,通知合并与推送投递,直链中转与审计检测、图床接口与 GPS 抹除

23 · 动态、空间、订阅与剪藏计划

改动的来源与撤回、大量删除提醒,空间分析与自然顺序,RSS / 播客 / GitHub 订阅,网页剪藏与服务端 Markdown 渲染

24 · 收藏、最近打开与历史版本

收藏、「最近」(带看到哪)、同名覆盖留历史版本;v3.10.0

25 · 在线编辑文本

文本文件直接改、App 替换上传;v3.11.0

26 · 离线可用

安卓 App 把文件存一份在本机,不同步只是副本;v3.12.0

27 · 批量重命名与分享存到文件夹

批量重命名、把别人的分享存进自己的文件夹、离线可用补全;v3.13.0

28 · 备选功能

活的清单:想过还没定的功能,以及明确不做的和原因

29 · 桌面端计划

Windows 桌面端:窗口里是网页版,Tauri 2 外壳补托盘传输、文件夹下载、截图上传、右键上传

30 · 搜索筛选

文件名与内容搜索加类型、时间、大小、文件夹范围筛选与排序;v3.15.0

31 · 影音补强与一步分享

网页放 mkv(只换封装)、歌词、用电脑上的播放器放、一步生成分享链接;v3.17.0

32 · 分享上传与自动刷新

文件夹分享允许对方上传;别处改了网盘,打开着的列表自己刷新;v3.19.0

33 · 助手

内置 AI 助手:内核是 tau,用 gopan 自己的 MCP 工具;权限三态、确认卡、站点模型或自己的 key、转发或直连

34 · 助手在服务器上运行

整轮交给服务器跑(每轮一个 qjs 进程),关掉客户端照样跑完,等确认时推送通知

35 · 助手看图与读写文件

看图、对话里发图、写文本文件、回答里引用文件

36 · 局域网直传计划

桌面端与安卓同一局域网直接互传,字节不经过服务器,兼容 LocalSend v2 协议

37 · 助手的定时任务、图片识字与入口

到点由服务器跑的定时任务、用能看图的模型识别图片里的字、从别的 App 带着文件打开助手

38 · 助手的长期记忆

每人一份「关于你」,助手自己记、自己改;用 tau 的长期记忆扩展,gopan 只提供存储

实现回顾

每个里程碑实际交付了什么、关键决策、踩坑记录,在 doc/milestones/。v3.5 之后各版本的设计与取舍写在 doc/24 起的各篇文档里(上表),逐版的变化见 CHANGELOG:

里程碑

内容

M1 · 骨架

双 token 认证、目录树 CRUD、三条代码生成链、embed 单二进制

M2 · 传输

分片直传、秒传、断点续传、hash 校验与谎报回收、自研上传器

M3 · 预览

派生物管线(缩略图/封面/时长/Office 转 PDF)、预览模态

M4 · 分享

分享链接、访客子树授权、og 落地页、流式 zip 打包

M5 · 收尾

欠账清零(回收站自动清理/复制/搜索/配额/改密码)+ Docker 生产化

M6 · 加固

测试 64%→73%、/pack 双闸限速、refresh 清理、深度限制、/metrics、安全头、smoke 入库

M7 · 管理端

建号/配额/禁用(分享连带失效)/重置密码/概览,CLI promote 自举;v1.1.0

M8 · 规模

keyset 分页(深页 31ms→7.5ms 且不随深度退化)、文件夹体积异步统计;v1.2.0

M9 · WebDAV

应用密码、流式转存走 verify 管线、rclone 真实验收;v1.3.0,v2 收官

v2.1 · Remote MCP

零安装 Remote MCP、Agent 直传、OAuth 2.1、API Key 与细粒度 scope

v2.2 · 文件传输助手

「我的设备」会话、上传即附消息、真实文件卡片、Agent 用 chat_send/chat_list 与浏览器同流

M10 · 移动端与 PWA

两个断点、卡片列表与长按菜单、预览手势、SW allowlist 缓存;v2.3.0

M11 · 备份与可观测

rsync 异地副本 + 恢复演练(6 条字节级判据)、登录设备管理、分享访问统计、可信代理修复、磁盘回收 8G;v2.4.0

v2.5 · 传输助手整改

isIdle 修复、服务端自动落消息、乐观上屏/粘贴/拖拽/进度卡/翻历史/删除/搜索、refresh 宽限期 + 多标签互斥;v2.5.0

v2.6 · 安卓 App 与分享

Capacitor 安卓壳 + 原生分享接收、PWA POST share_target、搜索定位上下文、CI、错误透传、手机端输入栏越界修复;v2.6.0

v3.0 · 安卓原生 App

Kotlin + Compose 重写:后台传输引擎、原生预览、管理端、「文件」App 集成、站内更新、R8 包全量 E2E;壳删除;v3.0.0

v3.3 · 离线下载与压缩包

后台任务(心跳、取消、退避重试)、离线下载(按真实连接 IP 挡内网、Range 续读)、zip / 7z / rar / tar 纯 Go 读取(GBK 名、字典上限)、包内浏览与解压、MCP 五个工具;v3.3.0

v3.4 · 影音、通知、直链与图床

mkv / mov / avi 认成视频并回填;外挂字幕转 WebVTT、跨设备续播、自然顺序连播与全站播放条;九类事件的站内通知与四种推送;直链中转、按小时 / 来源 / 明细记账、两档流量上限与三类异常提醒;图床密钥与 GPS 抹除;MCP 三个工具;v3.4.0

v3.5 · 动态、空间、订阅与剪藏

服务层记每次改动的来源、单条 / 整组 / 按来源撤回与大量删除提醒;空间分析七类查询与 ICU 自然顺序;RSS / 播客 / GitHub 订阅(流式解析、条件请求、只留 N 条、OPML);网页剪藏成 Markdown、书签栏与安卓分享入口、服务端沙箱渲染 Markdown;MCP 两个工具;v3.5.0

v3.2 · 收集文件与内容搜索

匿名收集链接(只写不读、撞名改名、按人分文件夹)、对象响应同源脚本修复、中文内容搜索(二元组 + 三元组词项、PDF 页码)、MCP 读文档文字;v3.2.0

读法

想看全貌:01 → 02 → 03,或者直接读 12(产品说明,一页版)。要动手:04、05 是数据库与 GraphQL 合同,MCP 的协议合同单独见 docs/MCP.md。想知道每步实际怎么落地的:doc/milestones/。要部署:doc/09 照着走,装新机前先扫一遍 doc/10 的检查清单。只是用:doc/11 使用手册;安卓 App 看 doc/18;每个版本改了什么看 CHANGELOG(站点上是 /app)。

许可证

MIT。web/src/vendor/tau/ 是 tau 的编译产物,同样是 MIT。

Available Tools

45 tools
abort_uploadA

Cancel an upload created by prepare_upload: stop accepting parts and delete any staged data, so nothing is added to the drive. Use it when the user cancels or the local file changed; to continue an interrupted upload instead, use get_upload_parts. Returns success. Requires files:upload.

NameRequiredDescriptionDefault
limitNonumber of part URLs, maximum 100
upload_idYesupload UUID returned by prepare_upload
first_partNofirst part number, default 1

Output Schema

NameRequiredDescription
successYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond the single destructiveHint annotation by disclosing what is destroyed (staged parts and staged data), what is guaranteed not to happen (nothing added to the drive), and the required scope (files:upload). The one destructiveHint=false is not contradicted because the effect is scoped to staged, not existing, content. It stops short of covering idempotency (aborting an already-aborted upload) or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the effect, then the trigger and the alternative, then the return and scope. No filler or redundant restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and 'Returns success' aligns with it, so return values need no elaboration. Effect, trigger, alternative, and auth scope are all present; only edge cases like re-aborting or invalid upload_id are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented, and the description adds nothing about upload_id handling or the presence of limit/first_part. Baseline 3 applies when the schema carries parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (cancel/abort) and resource (upload created by prepare_upload), plus the concrete effect: stop accepting parts, delete staged data, nothing added to the drive. This clearly distinguishes it from completion/wait/get_upload_parts siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggers (user cancels, local file changed) and names the alternative for the contrasting case ('to continue an interrupted upload instead, use get_upload_parts'). An agent can route correctly without inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_nodesA
Destructive

Move, copy, trash, or restore up to 100 nodes with individual success/error results. Unlike move_nodes, copy_nodes, trash_nodes and restore_nodes, which are all-or-nothing, each item here succeeds or fails on its own. dry_run simulates then rolls back; preview IDs are not usable. idempotency_key replays the original entire result; use a new key to retry failed items.

NameRequiredDescriptionDefault
pathsNoabsolute source paths; use IDs from list_trash for restore
dry_runNovalidate and simulate the entire batch then roll back; preview IDs are not usable
node_idsNosource node UUIDs; do not combine with paths; maximum 100
operationYesmove, copy, trash, or restore
target_pathNodestination path instead of target_folder_id
idempotency_keyNostable retry key; retries replay all per-item results, including failures
target_folder_idNodestination for move/copy; omit for root

Output Schema

NameRequiredDescription
itemsYes
failedYes
dry_runYes
succeededYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The single annotation (destructiveHint: true) only flags danger; the description adds substantive behavior beyond it — partial failure with per-item errors, dry_run validation with full rollback, and the fact that preview IDs from a dry run cannot be reused. It does not say whether trashed items are recoverable or what permissions are required, which is the remaining gap for a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with what the tool does and followed by the sibling contrast and the two behavioral gotchas. A little space is spent repeating the dry_run/preview wording already present in the schema, but nothing is genuinely wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a seven-parameter destructive batch tool, the description covers batch limits, per-item result shape, dry-run rollback, and idempotent replay semantics; return values are covered by the output schema. An agent has what it needs to invoke this correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description earns above that by adding consequences the schema lacks: an idempotency_key replays the original entire result including failures, so a new key is needed to retry failed items. It does partly restate schema text for dry_run and preview IDs rather than extending it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names four specific verbs (move, copy, trash, restore), the resource (nodes), and the batch limit (100) with per-item results. It then explicitly distinguishes itself from the four single-operation siblings by naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the selection rule directly: use this tool when each item should succeed or fail independently, and use move_nodes, copy_nodes, trash_nodes, or restore_nodes when all-or-nothing semantics are wanted. That is an explicit alternative plus the condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chat_listA
Read-only

List recent messages in the '我的设备' conversation, oldest first, with optional before_id cursor.

NameRequiredDescriptionDefault
limitNomaximum messages to return, default 50, cap 200, ordered newest last
after_idNoexclusive cursor; returns messages strictly newer than this message ID (the limit closest to it); mutually exclusive with before_id
before_idNoexclusive cursor; returns messages strictly older than this message ID (the limit closest to it)

Output Schema

NameRequiredDescription
itemsYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read. Beyond that, the description adds the fixed conversation scope and the oldest-first ordering, which are useful traits, but says nothing about page size behavior or what happens when the cursor is omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and scope, with the cursor caveat trailing. Nothing is redundant, though the quoted conversation name plus ordering plus cursor in a single clause is slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the tool is a simple three-optional-parameter read. The description covers scope, ordering and one cursor, leaving only forward pagination and default sizing to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so limit, after_id and before_id are already documented with semantics and mutual exclusivity. The description only echoes before_id as a cursor and adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (List) and resource (messages) scoped to a single conversation, '我的设备', and states ordering (oldest first). That distinguishes it from the write-side sibling chat_send, though it never names that sibling outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It mentions the optional before_id cursor, which implies paginated backward traversal, but gives no explicit when-to-use or when-not guidance and does not explain the after_id alternative for forward paging that the schema exposes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chat_sendA

Send a text message or a saved file node to the account's file-transfer conversation ('我的设备'). node_id must be a node already saved by this account.

NameRequiredDescriptionDefault
textNomessage text; required if node_id omitted
node_idNofile or folder node UUID to attach; required if text omitted
idempotency_keyNostable retry key, maximum 128 bytes

Output Schema

NameRequiredDescription
idYes
bodyNo
sourceYeswho wrote it: web (browser), mcp (an agent), webdav
node_idNo
created_atYes
file_deletedNotrue when this was a file message whose file has since been permanently deleted

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Only destructiveHint=false is supplied, so the description adds some value by stating the 'already saved' constraint, which implies no server-side upload occurs. It says nothing about authentication/permission requirements, rate/duplicate behavior despite an idempotency_key being present, what happens if both or neither payload is supplied, or that the message lands in a persistent chat.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the destination and payload types front-loaded and the node_id precondition following immediately. Every clause carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (3 optional parameters, mutual exclusivity documented in schema, output schema present so return values need not be explained), and the description covers payload options and the key precondition. Minor gaps remain around idempotency behavior and what occurs when neither text nor node_id is provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 genuinely adds meaning beyond the schema by constraining node_id to nodes already saved by this account — a real invocation precondition not captured in the schema text. It does not clarify the idempotency_key semantics or the mutual exclusivity beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (send) and two precise payload types (text message or saved file node) and pins the destination to the account's file-transfer conversation ('我的设备'). That scope makes it unmistakably distinct from siblings like write_text_file, create_share, or chat_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes a clear usage context (sending to your own device conversation) and a precondition for node_id ('must be a node already saved by this account'), which effectively rules out using this tool to upload new content. It gives no explicit when-not guidance or naming of alternatives, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clip_urlA

Save a web page's main article as a Markdown file (images downloaded next to it) into the user's clippings folder, in the background. Returns a job (poll get_job until done; result_node_id is the .md, readable with read_text_file), or the existing clipping if this address was clipped before. Not available to credentials limited to a folder. Requires files:upload; supports idempotency.

NameRequiredDescriptionDefault
urlYeshttp(s) address of a web page
forceNoclip again even if this address was clipped before
idempotency_keyNo

Output Schema

NameRequiredDescription
jobNothe clipping job; poll get_job until done, then result_node_id is the .md file
existingNoalready clipped before (and force was not set)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only destructiveHint=false, and the description carries the rest: the operation is asynchronous and returns a job, images are stored alongside the Markdown file, duplicate URLs return the existing clipping unless 'force' is used, folder-scoped credentials are rejected, files:upload is required, and idempotency is supported. This goes well beyond the annotation's minimal safety hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences that front-load the action and result, then the async polling path, then constraints. Parentheticals carry real information (images downloaded, result_node_id) rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an asynchronous job-creating tool with a three-parameter schema, the description covers the return path, the dedupe case, permission requirements, and credential limitations. Even though an output schema exists, the inline explanation of result_node_id and get_job polling is enough for an agent to call and follow up correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 67% schema coverage, url and force are already documented in the schema, but the description adds the deduplication behavior that makes 'force' meaningful and notes idempotency support, which partially clarifies the undocumented idempotency_key parameter. It still doesn't explain the expected format or usage of idempotency_key directly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Save a web page's main article as a Markdown file ... into the user's clippings folder'. The stated output (.md plus downloaded images, background job) is distinct enough from siblings like fetch_url that an agent can choose without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context for use (clipping an article page), plus explicit prerequisites ('Requires files:upload') and exclusions ('Not available to credentials limited to a folder'). It also routes follow-up work to siblings (get_job, read_text_file). It never names a competing tool such as fetch_url as the alternative for raw or non-article fetches, so 'when-not' guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

complete_uploadA

Declare a direct upload complete and start server-side hashing, verification, deduplication, and commit.

NameRequiredDescriptionDefault
limitNonumber of part URLs, maximum 100
upload_idYesupload UUID returned by prepare_upload
first_partNofirst part number, default 1

Output Schema

NameRequiredDescription
modeYes
nodeNo
sha256No
statusYes
failureNo
put_urlNo
part_sizeNo
part_urlsNo
upload_idNo
expires_atNo
total_partsNo
uploaded_partsNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply destructiveHint=false, so the description carries most of the load and does add real value by disclosing that completion kicks off hashing, verification, deduplication, and commit on the server. It stops short of saying whether the call returns immediately or blocks, whether it is idempotent on repeat calls, or what happens if parts are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler; the action leads and the consequences follow. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shapes need not be explained, and the description adequately conveys the core behavior for a three-parameter tool. The remaining gap is flow-level: an agent is not told whether this is an asynchronous trigger that requires polling via wait_upload or get_upload_status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so upload_id, first_part, and limit are already documented in the schema. The description adds no parameter meaning at all, which is the baseline case when the schema does the work, though it also doesn't clarify why limit and first_part appear on a completion call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Declare a direct upload complete' and enumerates the server-side work started (hashing, verification, deduplication, commit). This is far more specific than a bare name restatement and implicitly separates it from prepare_upload, abort_upload, and wait_upload, but it never names or explicitly contrasts those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the phrase 'declare a direct upload complete' signals this is the final step of a direct-upload flow. There is no explicit statement of prerequisites (all parts uploaded), when not to use it, or whether to follow with wait_upload versus get_upload_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_nodesA

Copy one or more files or folders (folders recursively) into a destination folder (target_folder_id or target_path; omit both for the root). Content is deduplicated, so no bytes are re-uploaded, but copies count toward the user's quota and fail with QUOTA_EXCEEDED when it would be exceeded. All-or-nothing; returns the new nodes. For per-item results or a dry-run preview, use batch_nodes. Requires files:write; pass idempotency_key to make retries safe.

NameRequiredDescriptionDefault
node_idsYesnode UUIDs to process
target_pathNoabsolute destination folder path instead of target_folder_id
idempotency_keyNostable retry key, maximum 128 bytes
target_folder_idNodestination folder UUID; omit for root

Output Schema

NameRequiredDescription
itemsYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, but the description adds substantial behavior: content deduplication with no re-upload, quota accounting and the QUOTA_EXCEEDED failure mode, all-or-nothing atomicity, and the files:write scope requirement. The idempotency guidance for safe retries is exactly the kind of context annotations do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence carries distinct information: scope, destination, dedup/quota, atomicity, alternative tool, auth, idempotency. The most decision-relevant facts (what it copies, where, the batch_nodes alternative) come first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out; the description nonetheless notes it returns the new nodes. Quota, atomicity, permission scope, and retry safety are all covered, leaving nothing an agent needs in order to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 still adds value by explaining the target_folder_id/target_path mutual fallback to root and framing idempotency_key as the mechanism for safe retries rather than just a 'stable retry key'. It does not add format or syntax detail beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 ('Copy one or more files or folders (folders recursively)') and immediately bounds the destination semantics. It is clearly distinguishable from siblings such as move_nodes and batch_nodes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states both the when-to-use condition and the alternative: use batch_nodes for per-item results or a dry-run preview. It also resolves the destination ambiguity by saying to omit both target parameters for the root.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_directoriesA

Atomically create missing parent directories; reuse existing directories. Supports persistent idempotency.

NameRequiredDescriptionDefault
pathYesabsolute directory path; existing directories are reused, missing parents are created atomically
idempotency_keyNostable retry key, maximum 128 bytes

Output Schema

NameRequiredDescription
nodeNo
pathYes
rootYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the lone destructiveHint=false annotation, the description discloses real behavioral traits: the operation is atomic, existing directories are reused rather than replaced, and idempotency keys are persisted. It does not cover what happens if the path collides with a file or how partial failures surface, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly packed sentences with zero filler, and the core atomicity/reuse constraint is front-loaded before the idempotency note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two parameters, full schema coverage, and an output schema to describe results, the description covers what an agent needs to invoke it correctly. Missing are edge-case behavior (path already exists as a file, error semantics) that a mutation-style tool would ideally state.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are documented in-schema, including the 128-byte limit on the key, so the baseline is 3. The description only restates the path/reuse behavior and adds no new meaning about the idempotency key beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('create missing parent directories') plus the reuse semantics, so the operation is unambiguous. It does not, however, distinguish itself from the sibling create_folder, which an agent must resolve on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'missing parent directories' and 'reuse existing directories' suggest this is the right call for nested absolute paths created in one shot. There is no explicit when-to-use versus create_folder, no stated preconditions, and no exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_file_requestA

Create a file request link for a folder: anyone with the link can upload files into it without signing in, but cannot see its contents. Optional password, deadline, uploader name, per-uploader subfolders and size/count limits. Uploads count against this account's quota. Requires shares:write; supports idempotency.

NameRequiredDescriptionDefault
noteNoinstructions shown to uploaders
pathNofolder path, alternative to folder_id
titleYesshown to uploaders, up to 100 characters
passwordNo
folder_idNo
max_filesNo
expires_atNodeadline; uploads started before it may finish
require_nameNouploaders must enter a name
max_file_sizeNobytes per file
idempotency_keyNo
max_total_bytesNobytes in total across all uploads
group_by_uploaderNoput each uploader's files in a subfolder named after them (implies require_name)

Output Schema

NameRequiredDescription
idYes
urlYes
noteNo
titleYes
folder_idYes
max_filesNo
new_countYes
expires_atNo
file_countYes
folder_nameNo
total_bytesYes
has_passwordYes
require_nameYes
max_file_sizeNo
max_total_bytesNo
group_by_uploaderYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations supply only destructiveHint=false, so the description carries the real burden and does: anonymous uploaders cannot see folder contents, uploads consume this account's quota, shares:write scope is required, idempotency is supported, and the deadline is soft ("uploads started before it may finish"). Those are exactly the non-obvious behaviors an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the core capability and access model front-loaded, followed by optional features, then operational constraints (quota, auth, idempotency). No sentence restates the name or wastes words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation tool, the definition covers access model, quota impact, auth scope, idempotency, and expiry semantics; an output schema exists so return values need no explanation. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description adds meaning on top: it groups password, deadline, uploader name, per-uploader subfolders, and size/count limits as optional constraints, and states the quota implication of the limit parameters. Undocumented fields like idempotency_key and folder_id versus path are only lightly covered, keeping it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: "Create a file request link for a folder," and immediately defines the resulting artifact's semantics (anonymous upload-only, contents invisible). That distinguishes it from create_link, create_share, and list_file_requests without the agent needing to open a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys the scenario clearly (collect files from people without accounts) but never names a sibling alternative or an explicit when-not condition, e.g. versus create_link or create_share. Usage is implied by the capability description rather than stated as routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_folderA

Create one new folder inside parent_id or parent_path (omit both for the root). If a sibling with the same name already exists, the new folder gets a numbered name instead of failing; the returned node shows the name actually used. To create a whole nested path in one call, reusing folders that already exist, use create_directories. Requires files:write; pass idempotency_key to make retries safe.

NameRequiredDescriptionDefault
nameYesnew folder name
parent_idNoparent folder UUID; omit for root
parent_pathNoabsolute parent folder path instead of parent_id
idempotency_keyNostable retry key, maximum 128 bytes

Output Schema

NameRequiredDescription
idYes
kindYes
mimeNo
nameYes
pathNo
sizeNo
sha256No
parent_idNo
updated_atYes
stats_staleNo
subtree_bytesNo
subtree_countNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, so the description carries most of the burden and does well: it discloses name-collision behavior (auto-numbering rather than failure), that the returned node reflects the actual name used, the files:write permission requirement, and idempotency_key's retry-safety role. It stops short of describing failure modes beyond collisions, but covers the behavior 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the core action and parent scoping, then collision semantics, then the alternative sibling, then prerequisites. Every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return format needn't be explained, yet the description still flags that the returned node shows the resolved name. Prerequisites, collision handling, root default, and the sibling alternative are all covered for a 4-param mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 meaning by framing parent_id vs parent_path as mutually exclusive alternatives with a root default, and by explaining why idempotency_key matters (safe retries) rather than just that it exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create one new folder') plus its scope ('inside parent_id or parent_path'). It explicitly distinguishes itself from the sibling create_directories, so an agent can pick correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete routing rules: omit both parent args for root, and use create_directories instead when creating a whole nested path. It names the alternative and the condition that selects it, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_shareA

Create a public share URL with optional password and future expiry. Requires shares:write; supports idempotency.

NameRequiredDescriptionDefault
pathNo
node_idNo
passwordNo
expires_atNo
allow_uploadNofolders only: visitors can also upload files and create folders (never delete, rename or overwrite)
idempotency_keyNo

Output Schema

NameRequiredDescription
idYes
urlYes
nameNo
node_idYes
expires_atNo
allow_uploadNo
has_passwordYes

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the single destructiveHint=false annotation, the description discloses the required auth scope and idempotency support, both of which materially affect how an agent should call it. It stops short of stating that omitting a password yields an openly public URL, or that expiry must be a future timestamp.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and its key options, with the operational constraints appended. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and auth plus idempotency are covered. The remaining gap is the path/node_id ambiguity and the public-by-default implication, which matter for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17% (just allow_upload), so the description must compensate. It only glosses password and expiry in passing and says nothing about path vs node_id (both optional per schema, which is itself ambiguous) or the format of expires_at/idempotency_key.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a public share URL') plus its two main optional dimensions (password, future expiry). However, it does not distinguish this from the sibling create_link, which an agent could plausibly confuse with a share-link creation tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a prerequisite ('Requires shares:write') but offers no when-to-use/when-not guidance and no pointer to alternatives such as create_link or list_shares. Usage context is only implied by the word 'public'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_archiveA

Extract an archive (all of it, or selected paths) into a new folder named after it, in the background. Existing files are never overwritten; name clashes get a numeric suffix. Returns a job; poll get_job (wait=true) until done, then result_node_id is the new folder. Encrypted, link and unsafe-path entries are skipped. Requires files:upload.

NameRequiredDescriptionDefault
baseNodirectory inside the archive the extraction is relative to; empty for the top level
pathNoabsolute Gopan path of the archive, alternative to node_id
pathsNofull paths inside the archive to extract (files or directories under base); empty extracts everything under base
node_idNoarchive file node UUID
parent_idNofolder to create the output folder in; default is the archive's own folder
parent_pathNofolder path, alternative to parent_id

Output Schema

NameRequiredDescription
idYes
urlNo
kindYesfetch_url or extract_archive
titleYesfile name once known, otherwise the link's host; archive name for extraction
statusYesqueued, running, done, failed or canceled
parent_idNotarget folder; omitted means the root
bytes_doneYes
created_atYes
error_codeNowhy it failed; on success GOT_HTML means the server returned a web page instead of a file
files_doneNo
bytes_totalNo
files_totalNo
finished_atNo
error_messageNo
files_skippedNoarchive entries skipped: unsafe paths, links or invalid names
result_node_idNothe downloaded file, or the folder files were extracted into

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply destructiveHint=false, and the description adds substantial context beyond that: extraction runs in the background, existing files are never overwritten and clashes get a numeric suffix, and encrypted, link and unsafe-path entries are skipped. The non-destructive claim is consistent with the annotation and is actually explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five tight sentences, each carrying distinct information: what it does, overwrite policy, async job flow, skip rules, and permission requirement. The core action and the polling instruction are front-loaded, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an asynchronous extraction tool with an output schema, the description covers everything an agent needs: the async lifecycle, where the result lands, collision behavior, skipped entry classes, and the auth requirement. Return-value details are correctly left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the six parameters is already documented. The description adds framing that paths can be a subset and that the output folder is named after the archive (implying the parent_id default), but offers no additional syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (extract) and resource (archive), plus scope options (all of it, or selected paths) and the output shape (a new folder named after it). This clearly separates it from siblings like list_archive or prepare_download, which inspect or fetch rather than unpack.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete follow-up routing: it returns a job, so poll get_job with wait=true until done, then read result_node_id. It also states the required permission (files:upload). It does not explicitly say when to prefer this over inspecting the archive first with list_archive, so it falls short of full alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_urlA

Offline download: the Gopan server fetches an http(s) link into a folder in the background, so the bytes never pass through the agent. Returns a job; poll get_job (wait=true) until status is done, then result_node_id is the file. Private/internal addresses are refused. Not idempotent: check list_jobs before retrying. Requires files:upload.

NameRequiredDescriptionDefault
urlYeshttp or https link to a file
parent_idNofolder to save into; default is the root (or the credential's directory)
parent_pathNofolder path, alternative to parent_id

Output Schema

NameRequiredDescription
idYes
urlNo
kindYesfetch_url or extract_archive
titleYesfile name once known, otherwise the link's host; archive name for extraction
statusYesqueued, running, done, failed or canceled
parent_idNotarget folder; omitted means the root
bytes_doneYes
created_atYes
error_codeNowhy it failed; on success GOT_HTML means the server returned a web page instead of a file
files_doneNo
bytes_totalNo
files_totalNo
finished_atNo
error_messageNo
files_skippedNoarchive entries skipped: unsafe paths, links or invalid names
result_node_idNothe downloaded file, or the folder files were extracted into

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, so the description carries the behavioral load and does so: it discloses asynchrony (returns a job, not a file), server-side fetching, rejection of private/internal addresses, non-idempotency with a retry procedure, and the files:upload scope requirement. These are exactly the traits an agent would otherwise get wrong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core behavior, then layers the follow-up workflow, safety constraint, idempotency warning, and auth requirement in separate short clauses. No sentence is redundant with another or with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even though an output schema exists, the description usefully explains the async job handoff (job → get_job → result_node_id), which is workflow rather than return-value detail. For a 3-parameter non-idempotent network-fetching mutation, 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so url, parent_id, and parent_path are already documented including the root/credential-directory default. The description adds no additional parameter semantics (no format, encoding, or parent_id-vs-parent_path precedence), so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"the Gopan server fetches an http(s) link into a folder in the background, so the bytes never pass through the agent" states a concrete verb (fetch), resource (http/https link into a folder), and the defining property (server-side/offline rather than agent-mediated) that separates it from agent-side download paths. An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit follow-up workflow ("poll get_job (wait=true) until status is done") and an explicit precondition before retrying ("check list_jobs before retrying"), plus the required scope. It stops short of naming a sibling alternative for the alternate case (e.g. when clip_url or prepare_download is the better choice), so not a full when/when-not treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_file_infoA
Read-only

Get metadata for one file or folder, identified by node_id or absolute path: id, parent_id, name, kind, size, MIME type, SHA-256, path and updated_at. Folders also report subtree_bytes and subtree_count (stats_stale is true while they are being recalculated). Read-only and cheap. To read contents use read_text_file or read_document_text; to download use prepare_download. Requires files:read.

NameRequiredDescriptionDefault
pathNoabsolute node path instead of node_id
node_idNoGopan node UUID

Output Schema

NameRequiredDescription
idYes
kindYes
mimeNo
nameYes
pathNo
sizeNo
sha256No
parent_idNo
updated_atYes
stats_staleNo
subtree_bytesNo
subtree_countNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful context beyond readOnlyHint=true: it says the operation is cheap, requires files:read, and explains folder-specific fields including the stats_stale recalculation state. It does not describe pagination or error behavior, but those are not central for this simple metadata lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core operation and then supplies the return fields, folder caveat, alternatives, and permission requirement in compact order. The field list is dense but each item helps the agent recognize the metadata response.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter metadata lookup with an output schema, this covers the necessary selection guidance, permission requirement, and sibling alternatives. The output schema carries return structure, and the description still surfaces the most important fields and a folder-specific staleness caveat.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both path and node_id are already documented in the input schema. The description reinforces that either identifier can be used but adds no syntax or format details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Get metadata for one file or folder'), states the identifying inputs (node_id or absolute path), and enumerates the returned fields. It clearly distinguishes itself from content-reading and download siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent to alternatives: read_text_file or read_document_text for contents, and prepare_download for downloading. This leaves little ambiguity about when to use get_file_info versus its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jobA
Read-only

Get the status and progress of a background job (offline download or archive extraction). wait=true blocks up to 25 seconds for it to finish.

NameRequiredDescriptionDefault
waitNowait up to 25 seconds for the job to finish
job_idYesjob UUID returned by fetch_url or extract_archive

Output Schema

NameRequiredDescription
idYes
urlNo
kindYesfetch_url or extract_archive
titleYesfile name once known, otherwise the link's host; archive name for extraction
statusYesqueued, running, done, failed or canceled
parent_idNotarget folder; omitted means the root
bytes_doneYes
created_atYes
error_codeNowhy it failed; on success GOT_HTML means the server returned a web page instead of a file
files_doneNo
bytes_totalNo
files_totalNo
finished_atNo
error_messageNo
files_skippedNoarchive entries skipped: unsafe paths, links or invalid names
result_node_idNothe downloaded file, or the folder files were extracted into

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, so the description earns credit for disclosing the blocking behavior and the concrete 25-second cap on wait=true, which an agent must know to avoid appearing hung. It stops short of saying what is returned if the job has not finished within that window, which is the one behavioral detail still missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, with the core purpose stated first and the blocking caveat second. Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with full schema coverage and an output schema, this covers what is needed to call it correctly. The only shortfall is the unstated post-timeout behavior, which matters for interpreting a returned in-progress status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both job_id and wait already documented in the schema, including the 'up to 25 seconds' phrasing. The description restates the wait semantics rather than adding new meaning such as default value or what wait=false implies. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the status and progress of a background job') and enumerates the job kinds it covers (offline download, archive extraction). An agent can tell it apart from mutation siblings, though it never names list_jobs, the closest read sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the schema notes job_id comes from fetch_url or extract_archive, and the description explains the wait flag. There is no explicit guidance on when to poll with this tool versus listing jobs with list_jobs, nor when to prefer wait=true over repeated calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_upload_partsA

For an upload created by prepare_upload: report which parts the storage has already received (uploaded_parts) and issue fresh presigned PUT URLs for a range of parts (first_part, up to 100 per call). Use it to resume an interrupted upload, to get URLs beyond the first batch, or to replace expired URLs. File bytes are sent by your own HTTP client to those URLs, never through MCP. Requires files:upload.

NameRequiredDescriptionDefault
limitNonumber of part URLs, maximum 100
upload_idYesupload UUID returned by prepare_upload
first_partNofirst part number, default 1

Output Schema

NameRequiredDescription
modeYes
nodeNo
sha256No
statusYes
failureNo
put_urlNo
part_sizeNo
part_urlsNo
upload_idNo
expires_atNo
total_partsNo
uploaded_partsNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, so the description carries the rest and does so well: it discloses what is returned (uploaded_parts), the batch ceiling of 100 per call, that URLs are presigned and can expire, that file bytes flow through the caller's own HTTP client rather than MCP, and the required files:upload scope. That is exactly the behavioral context an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, no filler, and the identity/scope sentence is front-loaded before the usage triggers and the auth requirement. Every clause adds information an agent would otherwise have to infer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be spelled out, and the description still names the key field; the auth requirement and the out-of-band byte transfer are both covered. The only minor gap is no guidance on how to proceed when the part list is incomplete beyond calling again, though the resume wording largely implies it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 real meaning by framing limit and first_part as a sliding batch window ('a range of parts (first_part, up to 100 per call)') and by explaining why you would request a later range — expired or already-consumed URLs. That goes beyond the per-field schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource — report received parts and issue fresh presigned PUT URLs — and anchors it to the upload created by prepare_upload. This clearly separates it from get_upload_status, complete_upload, and prepare_upload without needing to open a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives three concrete when-to-use triggers: resuming an interrupted upload, fetching URLs beyond the first batch, and replacing expired URLs. It does not name sibling alternatives or state when-not-to-use (e.g. when to prefer get_upload_status or wait_upload instead), which keeps it just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_upload_statusA

Return the current status of an upload once, without waiting: uploading, completing, finalizing, processing or verifying while in progress; ready (with the new node), failed (with failure) or aborted when finished. To wait for completion after complete_upload, use wait_upload instead of calling this repeatedly. Requires files:upload.

NameRequiredDescriptionDefault
limitNonumber of part URLs, maximum 100
upload_idYesupload UUID returned by prepare_upload
first_partNofirst part number, default 1

Output Schema

NameRequiredDescription
modeYes
nodeNo
sha256No
statusYes
failureNo
put_urlNo
part_sizeNo
part_urlsNo
upload_idNo
expires_atNo
total_partsNo
uploaded_partsNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply destructiveHint=false, so the description carries most of the burden and does it well: it discloses the non-blocking single-shot semantics, the full status vocabulary including terminal states (ready/failed/aborted), and the files:upload scope requirement. It does not discuss error behavior or how long statuses remain queryable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the core behavior comes first, the status enumeration second, and the sibling routing last. It is slightly packed into one long sentence run, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers the essentials: non-blocking behavior, state machine, permission requirement, and the alternative tool. Minor gaps around error/expiry behavior remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents upload_id, limit and first_part, making 3 the baseline. The description adds no parameter-level meaning, and notably does not explain why a status check exposes part-URL parameters, leaving that ambiguity entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Return the current status of an upload") and immediately pins down the scope with "once, without waiting," then enumerates the exact status values an agent will see. This clearly separates it from wait_upload, which is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit routing rule: poll here for a single snapshot, but if you need to wait for completion after complete_upload, use wait_upload instead of calling this repeatedly. Both the when and the named alternative are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_activityA
Read-only

List recent changes to the drive from every source (web, Android app, WebDAV, agents, file requests, background jobs), newest first: who did what to which file and where. Filter by source kind, action, time or one node's history. Paginate with before_id. Undo is only available to the user in the app. For the log of MCP tool calls themselves, use list_audit. Requires audit:read.

NameRequiredDescriptionDefault
actorNoonly this source kind: web, android, webdav, agent, img, collect, job, feed, clip, system
limitNo1-200, default 50
sinceNoRFC 3339 time; only changes at or after it
actionNoonly this action
node_idNohistory of one file or folder
before_idNocursor: next_before_id from the previous page

Output Schema

NameRequiredDescription
itemsYes
next_before_idNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true; the description adds ordering (newest first), the pagination mechanism (before_id cursor), the fact that undo is not exposed via the API, and the required scope ("Requires audit:read"). The auth requirement and the undo limitation are exactly the kind of behavioral context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then filters, then pagination, then the sibling disambiguation and auth note — a sound ordering. The long parenthetical source list and the compressed "who did what to which file and where" phrasing make it dense, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. For a six-parameter read-only listing tool, the description covers scope, ordering, filtering model, pagination, an exclusion, and the auth scope — 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents every parameter including the actor enum values, the 1-200 limit range, RFC 3339 for since, and the before_id cursor semantics. The description only restates the filter dimensions (source kind, action, time, node history) at a higher level without adding format or combination rules. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List recent changes to the drive") plus scope ("from every source (web, Android app, WebDAV, agents, file requests, background jobs)") and ordering ("newest first: who did what to which file and where"). It also names the sibling it is not (list_audit), so an agent can distinguish it without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to the alternative: "For the log of MCP tool calls themselves, use list_audit." It also states a boundary the agent would otherwise have to discover at runtime — "Undo is only available to the user in the app" — which prevents a futile undo attempt.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_archiveA
Read-only

List what is inside an archive file (.zip, .7z, .rar, .tar, .tar.gz, .tar.bz2, .tar.xz) without downloading it, one directory at a time. status PENDING means the server is still reading it; retry shortly.

NameRequiredDescriptionDefault
dirNodirectory inside the archive, e.g. docs/2024; empty for the top level
pathNoabsolute Gopan path of the archive, alternative to node_id
cursorNo
node_idNoarchive file node UUID (.zip, .7z, .rar, .tar, .tar.gz, .tar.bz2, .tar.xz)

Output Schema

NameRequiredDescription
errorNo
totalYesentries in this directory
formatYes
statusYesPENDING (still reading, retry shortly), DONE, TRUNCATED (only part listed), UNSUPPORTED or FAILED
entriesYes
file_countYes
total_sizeYesuncompressed bytes of all files
next_cursorNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already declares this is a safe read, and the description adds genuinely new behavioral context: contents are read server-side without downloading, and a PENDING status means an in-progress read that should be retried. It stops short of saying whether results are truncated or how a PENDING response is shaped, so with annotations already covering safety the added value is moderate rather than rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core operation and its key constraint front-loaded before the async PENDING caveat. Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter read tool with readOnlyHint and a present output schema, the description covers purpose, scope, format set, and the one non-obvious behavior (asynchronous PENDING). Remaining gaps, cursor semantics and the path/node_id precedence, are modest but real.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the schema itself documents dir, path, and node_id, including format examples, so the description contributes little parameter-level detail. "one directory at a time" loosely motivates dir and cursor paging, but cursor remains undocumented in both places and the path-vs-node_id choice is not resolved.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("List what is inside an archive file") and enumerates supported formats plus the non-downloading scope, so the operation is unambiguous. It implicitly separates itself from extraction siblings by stressing "without downloading it," but it never names extract_archive as the alternative, so sibling routing is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"one directory at a time" tells the agent to navigate level by level rather than expect a full recursive listing, and the PENDING note tells it to retry instead of treating the response as an error. What is missing is explicit guidance on choosing this over extract_archive or list_files, and on how to advance the cursor.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_auditA
Read-only

Read the log of MCP tool calls made with this account's credentials: which tool was called, by which credential, on which targets, and the outcome; passwords and tokens are never included. Directory-restricted credentials see only their own events. For the history of file changes from every source (web, apps, WebDAV, agents), use list_activity.

NameRequiredDescriptionDefault
limitNodefault 50, maximum 200
before_idNolast event ID from previous page

Output Schema

NameRequiredDescription
itemsYes
next_before_idNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered; the description adds genuine context beyond that: secrets and tokens are never included in results, and directory-restricted credentials see only their own events. It does not discuss pagination behavior, though the before_id parameter hints at it in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with what is returned, then the credential-scoping caveat, then the sibling redirect. Every clause carries information; nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with an output schema and readOnlyHint, the description covers scope, data exclusions, and an alternative. Only the paging workflow is left implicit in the schema rather than stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters (limit default 50/max 200, before_id paging), so the schema carries this burden. The description adds no parameter-level meaning, which meets baseline 3 without standing out.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read the log of MCP tool calls') and enumerates the exact fields returned: tool name, credential, targets, outcome. It is clearly distinguishable from the sibling list_activity, which it explicitly names and contrasts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (list_activity) and the condition that selects it: file-change history from every source, versus MCP tool-call history for this account. An agent can route between the two without opening either schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_file_requestsA
Read-only

List active file request links (anonymous upload links into a folder) with received file counts. Requires shares:read.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
itemsYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already declares the safety profile, so the description's job is to add context, which it does by naming the required permission scope (shares:read) and disclosing that rows carry received file counts and cover only active requests. It does not say whether revoked or expired requests are excluded entirely or simply absent, which is the one remaining ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first identifies the resource and what its rows contain, and the second front-loads the authorization requirement. Nothing repeats the title or the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read with an output schema already describing the return shape, the description covers the only things an agent still needs: what a file request is and what scope it must hold. No behavioral or structural gap remains that would change how the call is made.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters and the schema is a closed empty object, so there is nothing for the description to disambiguate. It does not misuse the space by inventing filters that do not exist, which would be a worse failure than saying nothing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ("List") with a specific resource ("file request links") and then defines that resource as "anonymous upload links into a folder." That gloss is what lets an agent separate it from list_links or list_shares without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word "active" implies the results are filtered to non-revoked requests, and the required scope is stated, which gives an agent enough context to decide it is the right listing call. However, there is no explicit when-to-use rule and no pointer telling the agent to prefer list_links or create_file_request under specific conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_filesA
Read-only

List the direct children (files and folders) of one folder, up to 200 per page, sorted by name (default), size or updated_at. Identify the folder by parent_id or absolute path; omit both for the root. Each item has id, kind, size, mime and updated_at; the result also has total and next_cursor, which you pass back as cursor for the next page. Does not recurse: to find items anywhere in the drive use search_files (by name) or search_file_contents (by text inside files). Requires files:read.

NameRequiredDescriptionDefault
descNosort descending
pathNoabsolute folder path instead of parent_id
orderNosort order: name, size, or updated_at
cursorNocursor returned by the previous call
parent_idNofolder node ID; omit for root

Output Schema

NameRequiredDescription
itemsYes
totalYes
next_cursorNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnlyHint annotation by disclosing the 200-item page cap, the default sort order, the non-recursive behavior, the requirement for files:read, and how next_cursor feeds back into cursor. It does not cover error behavior for a bad parent_id/path, which keeps it from the top score given annotations already carry the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action, then addressing identifiers, response shape/paging, and the sibling boundary. Every clause carries operative information for a caller.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paginated list tool with a full output schema and annotations, the definition covers scope, paging, sorting, identifier options, and permissions without redundancy. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 real meaning: 'name' is the default order, parent_id and path are mutually exclusive substitutes, and cursor should be the previous call's next_cursor. The desc parameter's interaction with order is left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the direct children ... of one folder') with scope ('does not recurse') and paging limits. It names the sibling tools that cover the non-recursive case (search_files, search_file_contents), so an agent can distinguish it from them without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing guidance: omit parent_id and path for root, use path instead of parent_id as an alternative, and use search_files or search_file_contents when recursion or cross-drive lookup is needed. This covers when-to-use, when-not-to-use and the alternatives in a single sentence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_jobsA
Read-only

List this account's background jobs (offline downloads, archive extractions), newest first.

NameRequiredDescriptionDefault
cursorNo
active_onlyNoonly queued and running jobs

Output Schema

NameRequiredDescription
itemsYes
next_cursorNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered. The description adds genuinely useful context beyond that: the job categories covered and the 'newest first' ordering. It says nothing about whether the list is paginated via cursor or how far back it reaches, which matters for a listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, with the clarifying examples and ordering kept as parenthetical. No filler or repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is not required. However, the undocumented cursor parameter and the absence of any routing versus get_job leave the definition thin for a paginated listing tool in a large sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: active_only is documented in the schema, while cursor is undocumented in both places. The description's 'newest first' hints at ordering but gives no guidance on cursor-based paging or what active_only changes in ordering/result set, so it compensates only partially for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('List this account's background jobs') and clarifies scope with examples (offline downloads, archive extractions) plus ordering ('newest first'). It does not distinguish itself from the sibling get_job, which fetches a single job, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the word 'List' – an agent can infer this is for browsing job history rather than fetching one job. There is no explicit statement of when to use this vs get_job, no mention of when to prefer waiting on a job, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sharesA
Read-only

List active shares owned by this account and within the credential directory.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
itemsYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes this is a safe read, so the description's real contribution is the filtering semantics: only ACTIVE shares, only those OWNED by this account, and only within the credential directory. That tells the agent what will not appear in results, which is the main behavioral risk here. It stops short of covering ordering, pagination, or how expired/revoked shares are treated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and resource, with each qualifier carrying distinct meaning (active status, ownership, directory boundary). Nothing is repeated from the name or title and nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a low-complexity, zero-parameter read tool with an output schema, so the description does not need to explain return values. The scope qualifiers cover the important ambiguity, though it does not clarify whether shares owned by others but visible to this account are excluded, nor whether only unexpired shares qualify as "active".

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is no parameter meaning for the description to supply. Its scope phrases instead describe implicit filters baked into the call, which is a mild bonus rather than a requirement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("List active shares") and narrows scope with two qualifiers: owned by this account and within the credential directory. This is enough to separate it from list_links and list_file_requests without opening a schema, though it never names those siblings to sharpen the contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the read path where create_share and revoke_share are the write paths. There is no explicit when-to-use or when-not-to-use statement, and no mention of how to enumerate links versus shares if the agent is unsure which collection a resource lives in.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_trashA
Read-only

List recoverable trash with deletion times and cursor pagination. Use returned IDs with restore_nodes or batch_nodes.

NameRequiredDescriptionDefault
cursorNocursor from the preceding page

Output Schema

NameRequiredDescription
itemsYes
totalYes
next_cursorNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true, so the safety profile is covered; the description adds real behavior beyond that by disclosing that results include deletion times and that paging is cursor-based. The ID-reuse note for restore_nodes/batch_nodes is actionable operational context not present in 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the resource and its key attributes are front-loaded and the follow-up action is placed second. Every clause carries information an agent would otherwise have to infer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter, read-only listing tool with an output schema and a fully documented cursor, the description supplies everything needed: what is listed, what metadata comes back, how paging works, and what to do with the results. No meaningful gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully documented in the schema ('cursor from the preceding page'), so the description's mention of 'cursor pagination' only echoes it. No additional semantics such as page size, ordering, or cursor expiry are added, which is the expected baseline at 100% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List recoverable trash') plus the distinguishing scope detail that this is trashed-but-restorable content, which separates it from list_files and from the mutating trash_nodes/restore_nodes siblings. An agent can pick it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear forward routing: the returned IDs feed restore_nodes or batch_nodes, which tells the agent this is the discovery step before a restore. It stops short of an explicit exclusion (e.g. 'use list_files for active items'), so it is strong context rather than full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_nodesA

Move one or more files or folders into a destination folder (target_folder_id or target_path; omit both for the root). All-or-nothing: if any item fails (NAME_CONFLICT when the destination already has that name, CYCLIC_MOVE when a folder would move into itself), nothing is moved. Returns the moved nodes. For per-item results or a dry-run preview, use batch_nodes. Requires files:write; pass idempotency_key to make retries safe.

NameRequiredDescriptionDefault
node_idsYesnode UUIDs to process
target_pathNoabsolute destination folder path instead of target_folder_id
idempotency_keyNostable retry key, maximum 128 bytes
target_folder_idNodestination folder UUID; omit for root

Output Schema

NameRequiredDescription
itemsYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply destructiveHint=false, but the description adds substantial context beyond that: all-or-nothing semantics, the two specific failure modes (NAME_CONFLICT, CYCLIC_MOVE) and their meanings, the required files:write scope, and the retry-safety purpose of idempotency_key. Nothing here contradicts the non-destructive hint, since a move relocates rather than deletes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and destination resolution, then atomicity, then the sibling escape hatch, then permissions. Every clause carries operational information; nothing is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers destination selection, atomicity, failure modes, permissions, retry safety, and even briefly notes the return ("Returns the moved nodes") despite an output schema being present. For a four-parameter mutation tool this is fully sufficient to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds genuine meaning beyond the schema by explaining the either/or relationship between target_folder_id and target_path and the root default when both are omitted. It does not add format detail for the idempotency key beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Move one or more files or folders into a destination folder") and implicitly distinguishes itself from copy_nodes and the broader batch_nodes by describing a single atomic move operation. An agent can identify the correct tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit destination selection rules ("target_folder_id or target_path; omit both for the root") and names the alternative plus the condition that selects it: "For per-item results or a dry-run preview, use batch_nodes." It also states when to pass idempotency_key, leaving no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_downloadA
Read-only

Create a short-lived direct GET URL for one file, or a restricted ZIP ticket for folders and multiple nodes.

NameRequiredDescriptionDefault
pathsNoabsolute file or folder paths instead of node_id/node_ids
node_idNosingle node UUID; use node_ids for a batch
node_idsNoone or more file or folder UUIDs

Output Schema

NameRequiredDescription
urlYes
sizeYes
methodYes
archiveYes
filenameYes
content_typeYes
expires_in_secondsYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already tells the agent this is a safe, non-mutating operation, so the description gets credit mainly for the two traits it adds: the URL is "short-lived" and the ZIP ticket is "restricted". However, neither is quantified — no expiry window, no explanation of what the restriction enforces or whether the ticket is tied to the caller — and nothing says whether repeated calls are needed per file.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the primary outcome ("short-lived direct GET URL") front-loaded and the alternate mode following immediately. There is no filler, hedging, or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, and the readOnlyHint covers safety. What remains unaddressed is meaningful for a tool with zero required parameters: whether an empty call is valid, which of paths/node_id/node_ids wins if several are passed, and how long the URL or ticket lasts before the caller must re-invoke.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the field-level docs already explain that "paths" replaces node IDs, that "node_id" is a single UUID, and that "node_ids" is for batches. The description reinforces the one-file versus multiple-node distinction but adds no format, precedence, or mutual-exclusivity rules beyond what the schema states, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ("Create") and two concrete resources — a "short-lived direct GET URL" for one file versus a "restricted ZIP ticket" for folders and multiple nodes — so an agent knows exactly what the tool produces. It distinguishes the single-file and batch modes internally, but never names a sibling (e.g. prepare_upload or read_text_file) that it should be preferred over, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the two modes hint that a single file gets a direct URL while folders/multiple nodes get a ZIP ticket, letting the agent infer which inputs map to which behavior. There is no explicit when-to-use or when-not-to-use guidance, no mention of an alternative tool for streaming or text extraction, and no statement about what happens if no path or node is supplied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_uploadA

Create a direct upload target. Optional SHA-256 enables instant upload; bytes must be sent by the agent using another HTTP-capable tool.

NameRequiredDescriptionDefault
nameYestarget file name
sizeYesfile size in bytes
sha256Nooptional lowercase SHA-256; enables instant upload
parent_idNodestination folder UUID; omit for root
transportNoauto, single_put, or multipart
parent_pathNoabsolute parent folder path instead of parent_id
content_typeNoMIME type
idempotency_keyNostable retry key, maximum 128 characters

Output Schema

NameRequiredDescription
modeYes
nodeNo
sha256No
statusYes
failureNo
put_urlNo
part_sizeNo
part_urlsNo
upload_idNo
expires_atNo
total_partsNo
uploaded_partsNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: this tool creates an upload target, does not transmit file bytes itself, and SHA-256 can enable instant upload. It does not contradict destructiveHint=false. It still omits operational details such as upload expiry, auth requirements, or lifecycle expectations, so a 4 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no wasted wording. The core action is front-loaded, followed by the critical operational note about SHA-256 and external byte transmission.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. The description captures the key non-obvious behavior that this tool prepares but does not perform the upload. For a complex multi-step upload workflow, however, it does not explain finalization with complete_upload, abort behavior, or multipart coordination.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are fully documented in the schema. The description repeats the SHA-256 instant-upload behavior already stated in the schema and adds no further parameter guidance. The baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create a direct upload target.' It also clarifies that this tool only prepares the upload rather than sending bytes. It does not explicitly distinguish itself from sibling tools like complete_upload or get_upload_parts, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an important usage constraint: the agent must send bytes with another HTTP-capable tool. It also mentions the optional SHA-256 shortcut. However, it does not say when to choose this over alternatives, nor does it explain the required follow-up flow with complete_upload or related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_document_textA
Read-only

Read the extracted text of a PDF, Office or text file in chunks of up to 50000 characters, without downloading the file. Use next_offset to continue. For plain-text and code files where the exact bytes matter, prefer read_text_file.

NameRequiredDescriptionDefault
pathNoabsolute node path instead of node_id
offsetNocharacter offset, default 0
node_idNofile node UUID
max_charsNomaximum characters to return, default 20000, maximum 50000

Output Schema

NameRequiredDescription
eofYes
nameYes
pageNopage where this chunk starts, for PDFs
textYes
totalYestotal characters of extracted text
offsetYes
truncatedNothe document was longer than the indexed text; only the beginning is available
next_offsetYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already declares the safe-read profile, and the description adds real value beyond it: extraction happens server-side without downloading the file, output is chunked, and continuation is expected. It does not describe error behavior (e.g., unsupported file type) or how node_id versus path resolution failures surface, but the output schema covers return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the capability, then the continuation protocol, then the alternative. Every sentence carries distinct information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and readOnlyHint supplied, the description only needs to cover capability, chunking and routing — all present. The lingering gap is the 'next_offset' versus 'offset' inconsistency and no note on supported/max file size or how the file is identified, though the schema handles identification.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 does add chunking semantics that corroborate max_chars (up to 50000 characters), but it refers to 'next_offset' while the actual schema parameter is named 'offset' — a naming mismatch that could mislead an agent trying to continue a read.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read the extracted text of a PDF, Office or text file') plus the chunking scope, and explicitly distinguishes itself from the read_text_file sibling. An agent can identify the tool's job without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative and the selecting condition clearly ('For plain-text and code files where the exact bytes matter, prefer read_text_file'), and instructs continuation via next_offset. It stops short of covering other plausible alternatives in the sibling set (search_file_contents, prepare_download, view_image), so routing is clear for the main case but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_text_fileA
Read-only

Read raw UTF-8 text from a plain-text or code file (Markdown, CSV, JSON, source code), up to 64 KiB per call starting at a byte offset; call again with a larger offset to read further. Does not load binary content into context. For PDF and Office documents use read_document_text, which reads their extracted text; for images use view_image. Requires files:download.

NameRequiredDescriptionDefault
pathNoabsolute node path instead of node_id
offsetNobyte offset, default 0
node_idNotext file node UUID
max_bytesNomaximum bytes to return, default and maximum 65536

Output Schema

NameRequiredDescription
eofYes
textYes
offsetYes
sha256No
next_offsetYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond readOnlyHint=true: discloses the 64 KiB per-call ceiling, byte-offset paging so the agent knows a truncated read is expected rather than an error, that binary content is never loaded into context, and the required files:download permission. With an output schema present, that is the full behavioral picture the annotations do not supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler: capability and format scope first, paging and limit second, sibling routing and auth last. Every clause carries information the agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with four parameters, full schema coverage, an output schema, and a readOnly annotation, nothing material is missing. The description covers format eligibility, size limits, continuation, exclusions, and sibling alternatives, leaving only the path-vs-node_id choice to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 real semantics: offset is a byte offset and advancing it is the paging mechanism, and the 64 KiB figure ties max_bytes to a hard cap. It does not resolve the ambiguity between path and node_id, which the schema only gestures at.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Read raw UTF-8 text from a plain-text or code file"), enumerates the supported file types, and explicitly distinguishes itself from read_document_text and view_image. An agent can pick it out of the large sibling set without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both positive routing (plain text, Markdown, CSV, JSON, source code) and explicit negative routing with named alternatives for PDF/Office (read_document_text) and images (view_image). It also tells the agent how to continue when the file is larger than one call, which is the main edge case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_nodeA

Rename one file or folder in place (it stays in the same folder), identified by node_id or absolute path. Fails with NAME_CONFLICT if a sibling already has the new name, and with NOT_FOUND for items in the trash. Returns the updated node. To put it in another folder use move_nodes; to rename many items, call this once per item. Requires files:write; pass idempotency_key to make retries safe.

NameRequiredDescriptionDefault
nameYesnew file or folder name
pathNoabsolute node path instead of node_id
node_idNonode UUID
idempotency_keyNostable retry key, maximum 128 bytes

Output Schema

NameRequiredDescription
idYes
kindYes
mimeNo
nameYes
pathNo
sizeNo
sha256No
parent_idNo
updated_atYes
stats_staleNo
subtree_bytesNo
subtree_countNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the single destructiveHint=false annotation: it discloses the failure modes (NAME_CONFLICT for an existing sibling name, NOT_FOUND for trashed items), the required files:write permission, the retry-safety mechanism, and that the updated node 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short sentences, each carrying distinct information: purpose, error behavior, return value, alternatives, and prerequisites. The core purpose is front-loaded with no filler or repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still notes that the updated node is returned, and it covers the mutation-specific concerns (permissions, conflict errors, retry safety) an agent needs before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 real meaning by establishing that node_id and absolute path are alternative identifiers and that idempotency_key exists for retry safety rather than ordinary calls. It does not, however, say what happens if both identifiers are supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource (rename one file or folder), plus the key scoping fact that it is in-place and that the target is identified by node_id or absolute path. It is immediately distinguishable from move_nodes, which is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use move_nodes to relocate, call this once per item to rename many, and pass idempotency_key to make retries safe. Both the when-to-use and the when-to-use-something-else conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_pathA
Read-only

Resolve an absolute, case-sensitive Gopan path to a node ID. / is the virtual root.

NameRequiredDescriptionDefault
pathYesabsolute case-sensitive Gopan path, for example /reports/2026; / is the root

Output Schema

NameRequiredDescription
nodeNo
pathYes
rootYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe, non-mutating lookup. The description adds the useful constraints that the path must be absolute and is case-sensitive, plus the virtual-root convention, but it says nothing about failure behavior for unresolvable paths or about resolution relative to aliases/symlinks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action, and every clause (absolute, case-sensitive, root convention) carries information an agent needs. No filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only lookup with a declared output schema, the description is nearly sufficient; return-value shape need not be explained. The only meaningful gap is the absence of any note on behavior when the path is invalid or not found.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter already documents 'absolute case-sensitive Gopan path ... / is the root'. The description restates the same facts rather than adding new meaning such as escaping rules, trailing-slash handling, or max depth, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Resolve an absolute ... path to a node ID'), making the input and output unambiguous. It is clearly distinct from siblings like get_file_info or list_files, though it does not name any sibling to differentiate itself explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The input-to-output mapping ('path to node ID') implies the use case: converting a known path into an ID for other calls. However, there is no explicit when-to-use guidance, no mention of alternatives such as get_file_info, and no statement about what happens when the path does not resolve.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_nodesA

Restore one or more items from the trash to their original folders, using IDs from list_trash. If an item with the same name now exists there, the restored item is renamed rather than overwriting it. Returns the restored nodes. All-or-nothing; for per-item results use batch_nodes. Requires files:delete; pass idempotency_key to make retries safe.

NameRequiredDescriptionDefault
node_idsYesnode UUIDs to process
idempotency_keyNostable retry key, maximum 128 bytes

Output Schema

NameRequiredDescription
itemsYes

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the single destructiveHint annotation by disclosing rename-on-conflict behavior, all-or-nothing semantics, required permission scope, and the retry-safety contract of idempotency_key. The only gap is that it doesn't say whether restored items retain sharing/link state or how conflicts are surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences with no filler, front-loaded with purpose and the source of IDs. Slightly over-packed—conflict, atomicity, permission, and idempotency are compressed into one paragraph—but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All the risk-relevant behavior of a mutation tool is covered: conflict handling, atomicity, permission, and retry semantics. The 'Returns the restored nodes' line is mildly redundant given the output schema, but it costs nothing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline would be 3; the description still adds real meaning by tying node_ids to list_trash output and by framing idempotency_key as a retry-safety mechanism rather than a generic key.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Restore one or more items from the trash to their original folders') plus the source of the identifiers ('using IDs from list_trash'). It is clearly distinguishable from siblings like trash_nodes, list_trash, and batch_nodes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names list_trash as the prerequisite source of IDs and names batch_nodes as the alternative when per-item results are needed, with the condition ('All-or-nothing') that selects it. Also states the required permission files:delete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_file_requestA
Destructive

Close a file request link immediately; uploads in progress are rejected. Requires shares:write; supports idempotency.

NameRequiredDescriptionDefault
request_idYes
idempotency_keyNo

Output Schema

NameRequiredDescription
successYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond destructiveHint=true, the description discloses the permission needed (shares:write), that in-flight uploads are rejected, and idempotency support. It does not state what happens to files already uploaded or errors on a nonexistent request_id, but the annotation burden is mostly covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and immediate effect, then prerequisites. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the description covers permissions, side effects, and retry behavior. Only the request_id format is left undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains that idempotency_key enables safe retries, but says nothing about the format or source of request_id beyond the resource it identifies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb and resource are stated: 'Close a file request link.' The word 'file request' separates it from revoke_link and revoke_share, though no sibling is explicitly named as an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The consequence ('uploads in progress are rejected') points to when the tool is appropriate, but the description never says when to prefer it over revoke_link, revoke_share, or list_file_requests, leaving routing implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_shareA
Destructive

Revoke a share URL immediately. Requires shares:write; supports idempotency.

NameRequiredDescriptionDefault
share_idYes
idempotency_keyNo

Output Schema

NameRequiredDescription
successYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the description's value-add is the permission requirement (shares:write) and idempotency support, plus 'immediately' signalling no grace period or undo. That is meaningful operational context beyond the annotation. It stops short of saying what happens to existing downloads or whether revocation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, action first, constraints second. Nothing redundant and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the destructive nature plus auth requirement are covered. However, for a destructive two-parameter tool with zero schema descriptions, the undefined share_id and idempotency_key handling leave the definition only minimally sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two parameters. The description never explains what share_id refers to (share token vs numeric id) or how idempotency_key should be supplied and reused across retries. Mentioning 'supports idempotency' gestures at the parameter without giving usable semantics, so the coverage gap is not compensated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Revoke a share URL immediately.' An agent knows this removes a share. It does not differentiate from sibling revoke_link, so an agent must infer whether a share and a link are the same object, which is a real ambiguity in this toolset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb. There is no statement of when to revoke a share versus revoke_link, or when to use create_share/list_shares first to confirm the target. The 'immediately' qualifier hints at urgency but gives no decision criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_file_contentsA
Read-only

Search files by the text inside them (PDF, Word/Excel/PowerPoint, OpenDocument, plain text and code). Matches a literal substring, case-insensitive; returns a snippet around the first match and its PDF page. Scanned images are not searchable.

NameRequiredDescriptionDefault
queryYeswords or a phrase that appears in the file content; at least two CJK characters or three letters
cursorNonext_cursor from the previous page

Output Schema

NameRequiredDescription
itemsYes
next_cursorNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already declares the safety profile, yet the description still adds real behavioral detail: matching is literal and case-insensitive (no regex or fuzzy behavior), only a snippet around the FIRST match is returned, and the PDF page accompanies it. The scanned/OCR exclusion is a concrete capability boundary. It does not mention result caps or how many files are scanned, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core verb and resource, followed by matching semantics and then the exclusion. Nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers the return shape, and the description explains match behavior, so the essentials are present for a 2-parameter tool. It never states the search scope (all files across the drive vs. a folder), result-count limits, or whether paging is expected, which an agent would want before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented (query with a minimum-length rule, cursor with next_cursor semantics). The description's case-insensitive literal-substring note does inform how to craft the query, but it adds only modest meaning beyond the schema, so the baseline of 3 holds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Search files by the text inside them') and enumerates supported formats (PDF, Office, OpenDocument, plain text, code), so it is clearly content search rather than name search. It stops short of naming siblings like search_files, read_text_file or read_document_text, leaving the boundary to be inferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the matching semantics ('literal substring, case-insensitive') and one explicit exclusion ('Scanned images are not searchable'), which helps an agent avoid a fruitless call. There is no statement of when to prefer this over read_document_text or search_files, and no prerequisites or limits guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_filesA
Read-only

Find files and folders anywhere in the drive (or inside the credential's folder scope) whose name contains the query, case-insensitive. Returns up to 200 matches per page with id, kind, size and path, plus next_cursor to continue. Matches names only: to search the text inside PDFs, Office files and text files use search_file_contents; to list one folder use list_files. Requires files:read.

NameRequiredDescriptionDefault
queryYessubstring to search for in file and folder names
cursorNocursor returned by the previous call

Output Schema

NameRequiredDescription
itemsYes
totalYes
next_cursorNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnlyHint annotation by disclosing the 200-result page cap, the presence of next_cursor for continuation, and the required scope 'files:read'. The returned field list (id, kind, size, path) is slightly redundant with the output schema, which keeps this from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with the core behavior front-loaded, followed by result shape and then routing to alternatives. No wording is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers scope, match semantics, pagination, permissions and sibling differentiation, and since an output schema exists it does not need to describe return values in depth. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 still adds meaning by specifying case-insensitive substring matching over names and that the search spans the whole drive or the credential's folder scope. It does not restate cursor semantics, but the schema already documents those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find files and folders'), plus the matching scope ('anywhere in the drive or inside the credential's folder scope') and match rule ('whose name contains the query, case-insensitive'). It also explicitly distinguishes itself from search_file_contents (content search) and list_files (single folder listing), so an agent can pick it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names both alternatives and the exact condition that selects each: use search_file_contents for text inside PDFs/Office/text files, use list_files to enumerate a single folder. The 'matches names only' clause is an explicit when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

storage_statusA
Read-only

Get account quota, used/reserved/available bytes, active uploads and transfer limits. Available space is advisory; final commit enforces quota.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
scopesYes
root_idNo
usernameYes
part_sizeYes
used_bytesYes
quota_bytesYes
active_uploadsYes
reserved_bytesYes
available_bytesYes
max_upload_bytesYes
single_put_limitYes
max_active_uploadsYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, so safety is covered. The description earns its keep by disclosing the non-obvious semantics that 'available' can overstate what a commit will accept and that quota is enforced at commit time — a behavioral trait no structured field conveys. It does not discuss refresh cadence or caching, which would have pushed it to a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The inventory of returned values comes first and the quota caveat is placed last as the operative warning. Every clause carries information the agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not enumerate return field semantics, and its two sentences plus readOnlyHint are sufficient for a zero-argument tool. The only gap is the absence of any pointer to prepare_upload or get_upload_status, which would fully situate it in the transfer workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline applies. No misleading parameter hints are offered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Get') and enumerates exactly what is returned: account quota, used/reserved/available bytes, active uploads, and transfer limits. An agent can immediately tell this is a read-only account-level capacity snapshot rather than a per-file or per-upload query like get_upload_status. It stops short of naming siblings, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied. The caveat that available space is advisory and the final commit enforces quota hints that this is a pre-flight check, but the description never says 'call this before prepare_upload' or points to get_upload_status / list_jobs for per-transfer detail. No explicit when-not-to-use guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trash_nodesA
Destructive

Move one or more files or folders, with everything inside them, to the trash. Nothing is permanently deleted: items stay listed in list_trash and recoverable with restore_nodes until the retention period ends (30 days by default), and the user can also undo the change from the app's activity log. All-or-nothing; returns success. For per-item results or a dry-run preview, use batch_nodes. Requires files:delete; pass idempotency_key to make retries safe.

NameRequiredDescriptionDefault
node_idsYesnode UUIDs to process
idempotency_keyNostable retry key, maximum 128 bytes

Output Schema

NameRequiredDescription
successYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The single destructiveHint annotation only tells the agent this is a write; the description goes far beyond it by disclosing soft-delete semantics, a 30-day retention default, in-app undo via activity log, all-or-nothing atomicity, a success-only return, the files:delete permission requirement, and the idempotency_key retry pattern. These are the operational facts an agent needs before mutating data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, front-loaded with the core action, followed by safety semantics, then the alternative tool, then prerequisites. Nearly every sentence earns its place; only 'returns success' is slightly redundant against the output schema, and the all-or-nothing clause is terse to the point of being clipped.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive two-parameter mutation with only a destructiveHint annotation, the description supplies everything an agent needs: reversibility, retention window, atomicity, permission scope, retry safety, and the sibling to use for dry runs. Return values are covered by the existing output schema, so nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 earns more: it clarifies that node_ids may be files OR folders and that folder contents are included recursively, and it explains the purpose of idempotency_key (making retries safe) beyond the schema's bare 'stable retry key' text. Minor remaining gap: no mention of practical batch-size limits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — moving files or folders (with recursive contents) to the trash — and immediately distinguishes it from siblings by naming list_trash, restore_nodes, and batch_nodes. An agent can identify the exact operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use this tool for bulk trash with all-or-nothing semantics, but use batch_nodes instead when per-item results or a dry-run preview are needed. It also names the recovery path (list_trash / restore_nodes), so the agent understands the downstream workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

view_imageA
Read-only

Look at a file as an image: any image format (JPEG, PNG, WebP, HEIC, RAW…), a video's cover frame, or the first page of a PDF or converted Office document. Returns a JPEG of at most 1568 px on the long edge.

NameRequiredDescriptionDefault
pathNoabsolute node path instead of node_id
node_idNofile node UUID

Output Schema

NameRequiredDescription
nameYes
widthYes
heightYes
sourceYesimage, video_cover or pdf_page

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, so the useful additions here are the output characteristics: a JPEG capped at 1568 px on the long edge, which tells the agent the resolution and payload cost before calling. It leaves open what happens for unsupported formats or missing/remote files, but that is a modest gap given the annotation covers safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler: the capability and accepted input types come first, then the concrete return format. Nothing in it is redundant or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and full schema coverage present, the description supplies the right residual information: what inputs are renderable and what the returned artifact looks like. The main missing piece is failure behavior for unsupported formats or unusable paths.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both path and node_id already documented in the schema, so the description does not need to restate them. It adds no guidance on which identifier to prefer or how the two interact, so it tracks the baseline rather than exceeding it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Look at a file as an image") and enumerates the accepted inputs (image formats, video cover frame, PDF/Office first page), so an agent knows exactly what it gets back. It separates itself implicitly from text siblings like read_text_file/read_document_text via the image return, but never names those alternatives outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the supported-format list hints that this is the tool to pick for visual inspection of media and document pages rather than text extraction. There is no explicit when-to-use, when-not-to-use, or named alternative for the read_text_file/read_document_text case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_uploadA

Wait up to 25 seconds for an upload to become ready, failed, or aborted. On timeout returns latest status; repeat if nonterminal. Use this after complete_upload instead of calling get_upload_status in a loop.

NameRequiredDescriptionDefault
upload_idYesupload UUID
timeout_secondsNomaximum wait in seconds, default 20, range 1 to 25; timeout returns the latest nonterminal status

Output Schema

NameRequiredDescription
modeYes
nodeNo
sha256No
statusYes
failureNo
put_urlNo
part_sizeNo
part_urlsNo
upload_idNo
expires_atNo
total_partsNo
uploaded_partsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply destructiveHint=false, so the description carries most of the disclosure burden. It does that well by explaining the blocking/timeout behavior and the meaning of a timeout return. What is missing is minor: no statement about polling frequency or whether concurrent waits are safe.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero waste. The core behavior is front-loaded, followed by timeout semantics and then the routing guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full parameter coverage, nearly everything an agent needs is covered. The only small gap is that the description's stated 25-second ceiling does not explicitly reconcile with the schema's default of 20 seconds, though the schema resolves it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents upload_id and timeout_seconds (default 20, range 1-25), so the schema covers parameter meaning. The description's 'up to 25 seconds' adds a little context but does not extend beyond what the schema provides; a 3 is the appropriate baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Wait) and resource (upload) and states the terminal states it waits for (ready, failed, aborted). It clearly distinguishes itself from the sibling get_upload_status, which returns a snapshot rather than blocking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use it ('after complete_upload') and names the alternative to avoid ('instead of calling get_upload_status in a loop'). It also tells the agent what to do on timeout ('repeat if nonterminal'), leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_text_fileA

Create a UTF-8 text file, or replace the whole content of one (at most 2 MiB). Overwriting a non-empty file needs base_sha256 from read_text_file; the old content stays in version history.

NameRequiredDescriptionDefault
nameNonew file name, with parent_id or parent_path
pathNoabsolute file path; created when missing (its folder must exist)
contentYesfull UTF-8 content, at most 2 MiB
node_idNoexisting text file UUID instead of path
parent_idNofolder UUID for a new file, with name
base_sha256Nosha256 from read_text_file or get_file_info; required to overwrite a non-empty file, fails with EDIT_CONFLICT if it changed since
parent_pathNofolder path for a new file, with name

Output Schema

NameRequiredDescription
idYes
kindYes
mimeNo
nameYes
pathNo
sizeNo
sha256No
createdYes
parent_idNo
updated_atYes
stats_staleNo
subtree_bytesNo
subtree_countNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the single destructiveHint=false annotation: it discloses the 2 MiB size limit, the optimistic-concurrency contract (EDIT_CONFLICT if base_sha256 changed), and the recovery property that old content remains in version history. These are exactly the mutation-side risks an agent needs, and nothing here contradicts the non-destructive annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the create-vs-replace distinction front-loaded and the safety constraint immediately after. No filler, no restatement of the tool name, and the parenthetical size limit sits where it is most useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool, the description covers the key risks (size cap, conflict, reversibility) while the schema and output schema handle parameter and return-value detail. It does not spell out the three alternative target-addressing modes (node_id vs path vs name+parent), though those are fully documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains every parameter, including base_sha256's provenance and conflict behavior. The description reinforces the hash requirement and size cap but adds no addressing guidance beyond what the schema states for name/path/node_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a UTF-8 text file, or replace the whole content of one') with a concrete scope limit of 2 MiB. It implicitly separates itself from read_text_file and binary upload paths, but never names siblings like prepare_upload or create_file_request, so differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an actionable precondition: overwriting a non-empty file requires base_sha256 obtained from read_text_file, which routes the agent to the correct sibling first. It lacks explicit when-not guidance (e.g., use a different tool for binary or oversized files), but the 2 MiB cap and hash requirement cover most selection decisions.

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.

  1. 1 tool updatev0.1.1
    • Changedclip_url1 field changed
      • changedOutput schema / properties / existing / properties / node_id / description
        Previous value: -"the Markdown file; read it with read_text"New value: +"the Markdown file; read it with read_text_file"
  2. 45 tool updatesv0.1.0
    • First observedabort_upload
    • First observedbatch_nodes
    • First observedchat_list
    • First observedchat_send
    • First observedclip_url
    • First observedcomplete_upload
    • First observedcopy_nodes
    • First observedcreate_directories
    • First observedcreate_file_request
    • First observedcreate_folder
    • First observedcreate_link
    • First observedcreate_share
    • First observedextract_archive
    • First observedfetch_url
    • First observedget_file_info
    • First observedget_job
    • First observedget_upload_parts
    • First observedget_upload_status
    • First observedlist_activity
    • First observedlist_archive
    • First observedlist_audit
    • First observedlist_file_requests
    • First observedlist_files
    • First observedlist_jobs
    • First observedlist_links
    • First observedlist_shares
    • First observedlist_trash
    • First observedmove_nodes
    • First observedprepare_download
    • First observedprepare_upload
    • First observedread_document_text
    • First observedread_text_file
    • First observedrename_node
    • First observedresolve_path
    • First observedrestore_nodes
    • First observedrevoke_file_request
    • First observedrevoke_link
    • First observedrevoke_share
    • First observedsearch_file_contents
    • First observedsearch_files
    • First observedstorage_status
    • First observedtrash_nodes
    • First observedview_image
    • First observedwait_upload
    • First observedwrite_text_file

TDQS

A3.8/5.0

Scored across 45 tools

Disambiguation4/5

Descriptions go out of their way to cross-reference alternatives (read_text_file vs read_document_text vs view_image; list_files vs search_files vs search_file_contents; list_activity vs list_audit), so most boundaries are clear. However, batch_nodes deliberately subsumes move_nodes/copy_nodes/trash_nodes/restore_nodes, and the six-tool upload lifecycle (prepare/get_parts/status/wait/complete/abort) plus get_job vs list_jobs create some genuine selection ambiguity.

Naming Consistency4/5

Almost everything is snake_case verb_noun (list_files, create_share, revoke_link, restore_nodes, search_file_contents), which is highly predictable. Exceptions are chat_list and chat_send (noun_verb reversed) and storage_status (no verb), which are minor deviations in an otherwise uniform scheme.

Tool Count2/5

45 tools is well past the 25+ threshold and is heavy even for a full-featured cloud drive: six tools are devoted to the upload lifecycle alone and four node operations are duplicated inside batch_nodes. The surface is broad but an agent must carry a large decision space for a single storage domain.

Completeness4/5

Coverage is genuinely broad: file/folder CRUD, upload/download, search by name and content, trash with restore, shares/links/file requests, archives, background jobs, chat, activity/audit and quota. Minor gaps remain: no permanent-delete/empty-trash purge, no version-history listing despite versioning being referenced, and no get-detail tools for individual shares, links or file requests.

Maintenance

ActivityActive
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Local-first MCP server for safely searching, reading, summarizing, tagging, deduplicating, and organizing local files with scoped access, read-only defaults, and dry-run plans.
    19
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Self-hosted MCP server enabling Foundry agents to search, list, and read Google Drive files via the Drive API with server-side OAuth authentication.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Self-hosted server for your Obsidian vaults: a web UI for you, MCP for your AI agents, no Obsidian or plugins required. Agents search notes by keyword or meaning, then read, edit, move and link them across several vaults, and a write is refused if the note changed since the agent read it.
    72
    AGPL 3.0