zspace-cli
This server lets you manage a ZSpace NAS through the local desktop client proxy: browse files, search, reorganize, transfer data, and check storage health.
Connectivity & storage:
zspace_checkverifies the NAS proxy is online;zspace_pool_inforeturns per-pool capacity;zspace_disk_statsexposes raw disk health diagnostics.Browsing & discovery:
zspace_lslists a directory (with hidden-file support),zspace_infogets detailed metadata,zspace_treeshows a nested folder tree, andzspace_searchfinds files by name across the NAS index.File organization:
zspace_rename,zspace_move,zspace_copy,zspace_mkdir, andzspace_remove(permanent, destructive) let you restructure files and folders.Data transfer:
zspace_uploadpushes local files to the NAS (auto sliced upload for >64 MB) andzspace_downloadpulls files to the local machine.Automation friendly: all operations are exposed as MCP tools, suitable for AI agents and scripted workflows.
zspace-cli
English · 简体中文
Manage your 极空间 (ZSpace) NAS from the terminal or AI agents — no password, no SSH, no DDNS.
mcp-name: io.github.skyzhao1223/zspace-cli
Just keep the ZSpace desktop client logged in on macOS.
📖 How large-file sliced upload was born: 一次 1.4GB 备份引发的逆向 (zh, CSDN) · CLI guide: 极空间 NAS 命令行管理指南 (zh, CSDN)
Beginner guide (no coding required) · Skills — incl. 8 cross-NAS organizer skills for AI agents · 中文文档
Install
pip install zspace-cli # base
pip install "zspace-cli[mcp]" # optional MCP support
zs check # ✓ reads the desktop client login statePrerequisite: the ZSpace desktop client is running and logged in on macOS.
Related MCP server: File Organizer MCP
Quick start
zs ls /sata11/my/data/影视
zs find "权力的游戏" # full-text search
zs tree /sata11/my/data -d 3
zs up ./本地文件.mp4 /sata11/my/data/影视 # upload
zs down /sata11/my/data/影视/某文件.mkv ./下载 # downloadfrom zspace_cli import ZSpaceClient
with ZSpaceClient() as zs:
for f in zs.ls("/sata11/my/data"):
print(f"{'📁' if f.is_dir else '📄'} {f.name}")CLI options
Command | Meaning |
| Verify the desktop client proxy is reachable |
| List directory ( |
| Detailed file/dir info |
| Rename a file or directory |
| Move a file/directory |
| Copy a file/directory |
| Create a directory |
| Delete ( |
| Full-text search across the NAS |
| Tree view ( |
| Upload ( |
| Download |
| Copy Agent skills into a project ( |
| Point at a non-default |
zs check, zs ls, zs info, zs find, zs tree accept --json for
machine-readable output. zs mv/zs cp/zs rm/zs down accept * ? glob
patterns on the source path.
lspages through large directories automatically (the NAS API returns at most 50 entries per call).finduses the NAS full-text index, so it searches across directories. Upload/download show a progress bar on a real terminal and stream the file (no full-file buffering). CJK paths work out of the box. Files above 64 MB are uploaded through the desktop client's sliced/v2/file/uploadprotocol (2 MB slices), because the local proxy rejects oversized single-request bodies with HTTP 413; a 413 on a smaller file falls back to slices automatically.
Features
Operation | CLI | SDK | MCP |
List directory |
|
|
|
File info |
|
|
|
Rename |
|
|
|
Create dir |
|
|
|
Move |
|
|
|
Copy |
|
|
|
Delete |
|
|
|
Search |
|
|
|
Tree view |
|
|
|
Upload |
|
|
|
Download |
|
|
|
Health check |
|
|
|
Use with AI agents (Skills)
zs skill --list # see what's available
zs skill ~/your-project/.cursor/skills/ # install all (Cursor)
# zs skill ~/your-project/skills/ # Claude Code, etc.
zs skill ~/your-project/skills/ --only nas-report,photo-organizer # or pick a fewThen tell your agent things like "list the files in /sata11/my/data". The skills ship inside the wheel, so zs skill works on any machine that has zspace-cli installed.
Besides zspace-nas (the zero-config base for ZSpace file ops), zs skill installs a family of 8 cross-NAS organizer skills. Their scanners are pure-stdlib and run on any mounted path (SMB/NFS), so they work with ZSpace, Synology, QNAP, UGREEN, etc. All follow the same read-only pattern: scan → the LLM drafts an old→new plan → you confirm → the agent executes (deletes always quarantine first).
Skill | What it does |
nas-report | 🧭 Entry point: whole-disk storage profile + routes you to the right specialist skill |
photo-organizer | Photos/videos: file by shoot date, screenshots/WeChat images, burst de-dup |
music-organizer | Music: Artist/Album/Track structure, track numbers, covers, built-in ID3v2 parsing |
work-organizer | Work files: archive loose files, version chaos, copies, stale-file archiving |
portfolio-organizer | Portfolio: project structure, cover/README, separate finals from sources |
download-cleaner | Downloads: triage & clean (partials/torrents/installers/archives/unsorted media) |
dedup-finder | Content-level exact de-dup (3-stage fingerprint size→head→full sha1, zero false positives) |
backup-auditor | Backup health: version rotation, staleness, coverage check |
Start with nas-report to see the big picture, then run whichever specialist it recommends. See skills/README.md for the full list. Media-library naming stays a separate project: media-manager-skill.
How it works
ZSpace has no official CLI or public API. zspace-cli talks to the desktop client's local proxy, so it works behind NAT as long as the client is online:
Skill / zs / SDK / MCP → 127.0.0.1:13579 (desktop client proxy) → NASDisclaimer — This is an unofficial, community-maintained project, not affiliated with or endorsed by ZSpace (极空间). It relies on the desktop client's local proxy interface, which is not officially documented. It only reads the login state of your own account on your own machine — it does not bypass authentication, crack encryption, or touch anyone else's data. Use at your own risk; make sure your use complies with the ZSpace user agreement and your local laws.
Platform support
Works on any OS where the ZSpace desktop client exposes its local proxy on
127.0.0.1:13579. The login state (vuex.json) is auto-detected:
Platform | Default location |
macOS |
|
Windows |
|
Linux |
|
If the client stores it elsewhere, point the CLI/SDK at it explicitly:
zs --config-dir ~/path/to/zspace-config check
ZS_CONFIG_DIR=~/path/to/zspace-config zs check # or as an env varWindows/Linux config locations are best-effort guesses (not verified against a real client). If auto-detection misses yours, please open an issue with the actual path so it can be added.
Windows on ARM — some
[mcp]dependencies (e.g.cryptography) don't ship ARM64 wheels for every version, sopip install "zspace-cli[mcp]"may try to build them from source (slow, or fails without Rust). Force prebuilt wheels:pip install --only-binary=:all: "zspace-cli[mcp]".
MCP configuration (optional)
{
"mcpServers": {
"zspace": { "command": "zs-mcp", "args": [] }
}
}Docker (headless)
Run the CLI / MCP server in a container and talk to the desktop client proxy on the host — no desktop client needed inside the image:
export ZS_CONFIG_HOST_DIR="$HOME/Library/Application Support/zspace" # macOS
# export ZS_CONFIG_HOST_DIR="$APPDATA/zspace" # Windows
# export ZS_CONFIG_HOST_DIR="$HOME/.zspace" # Linux
docker compose build
docker compose run --rm zspace-cli zs check
docker compose run --rm zspace-cli zs ls /sata11/my/dataIt mounts the host's ZSpace config read-only (ZS_CONFIG_HOST_DIR) and points
ZS_BASE_URL at the host via host.docker.internal. On Linux hosts, either use
network_mode: host or the included extra_hosts mapping. For a plain
container run:
docker build -t zspace-cli .
docker run --rm --network host \
-e ZS_BASE_URL=http://127.0.0.1:13579 \
-e ZS_CONFIG_DIR=/config \
-v "$HOME/Library/Application Support/zspace:/config:ro" \
zspace-cli zs checkGlobbing
rm / mv / cp / down accept glob patterns (*, ?, [...], **) that
are expanded on the NAS:
zs rm "/sata11/my/data/影视/*.mkv" --force
zs cp "/sata11/my/data/**/*.mp4" /sata11/my/data/movies
zs down "/sata11/my/data/photos/*.jpg" ./photosOr via the SDK: client.glob("/sata11/my/data/**/*.mkv").
API reference
Endpoint | Key Parameters |
|
|
|
|
|
|
|
|
|
|
|
|
| binary body, header |
| sliced upload: query |
| GET |
|
|
Note: the interface parameter names are non-standard (
parent/toinstead ofpath/dest) — documented by the community from the desktop client's behavior.
Repository layout
zspace-cli/
├── src/zspace_cli/
│ ├── cli.py # Typer CLI (zs ...)
│ ├── client.py # ZSpaceClient SDK (retry / stream / progress)
│ ├── auth.py # vuex.json auto-detection + credential cache
│ ├── mcp_server.py # MCP tools (zs-mcp)
│ └── skills/ # packaged skill copies shipped in the wheel (keep in sync!)
├── skills/ # skill sources — the source of truth (edit here)
├── scripts/mcp_smoke.py
├── tests/ # pytest (CLI + SDK + MCP + auth)
└── promo/ # launch/promo material (submodule)Integrations
Pair zspace-cli with Jellyfin / Emby / MoviePilot / MCP clients / Docker and media-manager-skill for media library tooling.
For cloud-drive → NAS pipelines, combine with baidu-pan-skill: it downloads Baidu NetDisk (百度网盘) share links reliably (cookie extraction, transfer-save, resumable chunked downloads, structural verification), then zs up takes over for the sliced large-file upload to the NAS. Both ship as agent skills, so one prompt can drive the whole backup.
Roadmap
File upload/download
Linux / Windows client auth (best-effort path detection +
ZS_CONFIG_DIR)Docker headless option (
ZS_BASE_URL+docker-compose.yml)Batch glob helpers (
glob()+zs rm/mv/cp/downpatterns)Agent skill family: 8 cross-NAS organizers +
nas-reportentry, selective install (zs skill --list/--only)Optional EXIF-based photo dating (
photo-organizervia exiftool/mdls) — #14Per-skill config overrides (whitelist dirs / extension sets) — #15
Growth-trend reports (diff two
nas-reportsnapshots) — #16
Contributing
PRs welcome — see
CONTRIBUTING.md for dev setup, quality gates, and the
skill-authoring guide (including the skills/ ↔ src/zspace_cli/skills/
dual-copy sync rule that CI enforces).
🧭 Not sure where to start? Pick from CONTRIBUTION_IDEAS.md (difficulty-tagged backlog, incl. reverse-engineered NAS API notes) or the
good first issuelabel💬 Questions & showcases: Discussions
🔒 Security issues: private reporting via SECURITY.md
🤝 This project follows the Contributor Covenant
Legal
Unofficial community project, not affiliated with or endorsed by ZSpace/极空间.
It automates your own logged-in desktop client on your own machine —
no passwords handled, no service gates bypassed (membership-gated features are
documented as gated, never worked around). API notes are interoperability
documentation of observed client behavior and may break with client updates.
Concerns or takedown requests: skyzhao1223@users.noreply.github.com —
legitimate requests are answered promptly. Source archives ship with every
GitHub Release; the maintainer keeps off-platform git bundle mirrors.
License
MIT
Available Tools
14 toolszspace_checkCheck ZSpace NAS connectionARead-only
Check whether the ZSpace NAS is reachable through the local desktop client proxy and, if so, return a summary of storage pools.
Call this first to verify the proxy at 127.0.0.1:13579 is online before running other file operations. Returns {"connected": true, "pools": [{name, total_tb, free_tb}]} when the NAS responds, or {"connected": false} when it does not. Never modifies NAS state.
Unlike zspace_pool_info, this is a connectivity probe that happens to include a pool summary; use pool_info when you only need capacity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint and openWorldHint, but the description adds concrete behavioral detail: it reports both connected and disconnected outcomes, states it 'never modifies NAS state,' and specifies the exact proxy endpoint. This goes beyond what annotations alone convey and gives an agent confidence about side effects and result semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it opens with the core purpose, then gives usage timing, return format, safety note, and sibling differentiation in a logical order. No sentence is wasted, and the sibling contrast is placed at the end where it is least likely to obscure the primary instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter connectivity probe with an output schema present, the description is complete. It gives the endpoint, success and failure response shapes, a no-mutation guarantee, and when to call it. There is no missing information an agent would need to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers the parameter surface with 100% coverage. The description confirms the fixed target (127.0.0.1:13579) and return shape, which is sufficient; there is no parameter meaning left to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — 'check whether the ZSpace NAS is reachable through the local desktop client proxy' — and explicitly differentiates the tool from zspace_pool_info by clarifying this is a connectivity probe with a pool summary. An agent can distinguish it from siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Call this first to verify the proxy at 127.0.0.1:13579 is online before running other file operations.' It also names the alternative and the condition for choosing it: 'use pool_info when you only need capacity.' This fully covers usage context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_copyCopy files or directoriesA
Copy one or more files/directories on the NAS into a destination folder.
Use to duplicate media or create backups without removing the originals. Accepts a single path or a list; the destination must already exist (create it with zspace_mkdir). Returns {status: "copied", paths, to}. Mutates NAS state but leaves the sources untouched.
The non-destructive counterpart of zspace_move — pick copy when the original must stay where it is, move when it should not. Copies consume additional capacity; check zspace_pool_info first for large trees.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination directory (absolute path) | |
| paths | Yes | One absolute path or a list of absolute paths to copy |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only openWorldHint in annotations, the description carries the full burden of disclosing side effects. It explicitly states 'Mutates NAS state but leaves the sources untouched', requires the destination to exist, and notes copies consume additional capacity. This goes well beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with each sentence serving a distinct purpose: operation, use case, return shape, side effects, and alternative selection. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only two clearly documented parameters, existing output schema, and modest annotations, the description is complete enough for an agent to invoke the tool correctly. It covers behavior, prerequisites, return shape, capacity impact, and how to choose between this and zspace_move.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful extra semantics by clarifying that the destination must already exist and may need to be created with zspace_mkdir, which is not obvious from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Copy'), a resource ('files/directories on the NAS'), and a target ('destination folder'). It also distinguishes itself from zspace_move explicitly by noting the originals are left untouched.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: duplicating media or creating backups. It names the alternative (zspace_move) and gives the selection rule: choose copy when the original must remain, move when it should not. Also directs users to create the destination with zspace_mkdir and check capacity with zspace_pool_info for large trees.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_disk_statsGet disk statisticsARead-only
Return raw disk statistics reported by the ZSpace NAS.
Use for diagnostics and health monitoring (I/O, capacity, SMART-style counters as exposed by the NAS API). Returns the raw stats object. Read-only; never modifies NAS state.
Unlike zspace_pool_info, the shape is whatever the NAS API exposes and is not normalized — choose pool_info for "how much free space", this one for "is a disk unhealthy".
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, and the description consistently states "Read-only; never modifies NAS state." It adds helpful context beyond annotations by revealing that the return shape is "whatever the NAS API exposes and is not normalized," which sets expectations about variability. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with the core action first, followed by usage context, read-only note, and sibling differentiation. It is slightly redundant with the annotation ("Read-only; never modifies NAS state") but every sentence otherwise adds value and nothing is extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only diagnostics tool with an output schema present, the description covers all necessary aspects: purpose, usage triggers, read-only guarantee, return shape variability, and distinction from the closest sibling. There are no gaps that would prevent correct selection or invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is empty, so there is nothing for the description to clarify beyond what the schema already reflects. The description appropriately focuses on behavior, not parameters, matching the baseline for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: "Return raw disk statistics reported by the ZSpace NAS." It clearly differentiates from the sibling zspace_pool_info by noting the raw, unnormalized shape versus normalized pool info, so an agent can distinguish them immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use cases are given: "Use for diagnostics and health monitoring (I/O, capacity, SMART-style counters as exposed by the NAS API)." It also provides a direct exclusion and alternative: "choose pool_info for 'how much free space', this one for 'is a disk unhealthy'." This leaves no ambiguity about when to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_downloadDownload file from NASARead-only
Download a file from the ZSpace NAS to a local directory.
Use to pull media or documents off the NAS. The local_dir must already exist. Returns {saved_to: ""}. Does not modify NAS state.
NAS -> local, the inverse of zspace_upload. Unlike upload this never changes anything on the NAS, so it is safe to retry; an existing local file of the same name is overwritten.
| Name | Required | Description | Default |
|---|---|---|---|
| local_dir | No | Local directory to save the file into (defaults to current dir) | . |
| remote_path | Yes | Absolute path of the file on the NAS to download |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds meaningful behavioral context beyond that: it states the tool does not modify NAS state, overwrites an existing local file of the same name, requires local_dir to exist, and returns a specific shape. This helps the agent predict side effects and retry safety without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the core purpose in the first sentence. There is slight redundancy between 'Does not modify NAS state' and 'Unlike upload this never changes anything on the NAS,' but overall every major point is covered without excessive length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple two-parameter tool with an output schema and read-only annotations. The description covers the tool's direction, key constraints, retry safety, local overwrite behavior, and return value. Nothing important is missing for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by clarifying that local_dir must already exist, that remote_path is an absolute NAS path, and that an existing local file of the same name will be overwritten. These are behavioral details tied to parameters that are not fully explicit in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Download a file from the ZSpace NAS to a local directory.' It also distinguishes the tool from its siblings by explicitly framing it as 'NAS -> local' and 'the inverse of zspace_upload.' This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance: 'Use to pull media or documents off the NAS.' It also names the relevant alternative zspace_upload and explains the key difference in behavior, including that download never changes NAS state and is safe to retry. This is explicit when/why guidance, not just an implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_infoGet file or directory infoARead-only
Return detailed metadata for one file or directory on the ZSpace NAS.
Use when you need more than the ls summary exposes (permissions, timestamps, exact size, type details). Returns the raw info object from the NAS API. Read-only; the path must already exist.
One path only — use zspace_ls to enumerate a directory, or zspace_search to locate an item first.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path of the file or directory to inspect, e.g. /sata11/my/data/影视 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces it with 'Read-only' while adding non-redundant constraints: 'the path must already exist' and 'Returns the raw info object'. This goes beyond the annotation to inform error conditions and return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short paragraphs, each earning its place: purpose, usage, and exclusions. It is front-loaded with the core purpose, and there is zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with an output schema, the description covers everything an agent needs: when to use, what it returns, the constraint that the path must exist, and how to handle multiple paths. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for 'path' including an example. The description adds no additional parameter-level meaning beyond the schema, only the constraint that the path must exist, which is usage guidance rather than parameter semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return') and resource ('detailed metadata for one file or directory on the ZSpace NAS'), and explicitly contrasts with ls by mentioning 'more than the ls summary exposes'. This clearly distinguishes the tool from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use ('when you need more than the ls summary exposes') and when-not-to-use ('use zspace_ls to enumerate a directory, or zspace_search to locate an item first'), naming the exact alternative tools. No ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_lsList directory contentsARead-only
List the contents of a directory on the ZSpace NAS at the given path.
Use to browse files, locate items, or pick targets for later move/copy operations. Large directories are paginated automatically (the NAS API returns at most 50 entries per call). Returns a list of {name, path, is_dir, size} objects. Read-only; pass show_hidden=True to include hidden entries.
Flat and one level deep: use zspace_tree for nested structure, zspace_search when you know a name but not the location, and zspace_info for full metadata on one path you already have.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Absolute path on the NAS, e.g. /sata11/my/data | /sata11/my/data |
| show_hidden | No | Include hidden files and directories |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses automatic pagination (max 50 entries per call), the exact return shape ({name, path, is_dir, size}), and the effect of show_hidden=True. This gives the agent a concrete behavioral model without any contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: purpose first, then behavior, then alternatives. Every sentence adds value and none merely repeats the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only tool with output schema and annotations, the description covers pagination, return shape, option semantics, and sibling routing. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters with defaults and descriptions, so schema coverage is 100%. The description restates the path and show_hidden behavior but adds no substantial meaning beyond the schema, which fits the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('list') and resource ('directory on the ZSpace NAS'), and clarifies its flat scope. It also names sibling tools it is not, making differentiation from zspace_tree, zspace_search, and zspace_info immediate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use: browse files, locate items, or pick targets for move/copy. It also gives clear alternatives with conditions: zspace_tree for nested structure, zspace_search when name is known, and zspace_info for metadata on a known path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_mkdirCreate directoryA
Create a new directory on the ZSpace NAS under the given parent.
Use to prepare a destination before moving files into it. name is the bare basename, not a path. Fails if a directory of that name already exists. Returns the created {name, path}. Mutates NAS state.
zspace_move and zspace_copy both require the destination to exist already, so call this first when reorganizing into a new folder.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new directory (basename only) | |
| parent | Yes | Absolute path of the parent directory, e.g. /sata11/my/data |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide openWorldHint=true, so the description must carry behavioral disclosure. It explicitly states the side effect ('Mutates NAS state'), a failure condition ('Fails if a directory of that name already exists'), and the return value ('Returns the created {name, path}'). This fully discloses the tool's behavior beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences long, each earning its place: purpose, use case, parameter nuance, failure/return, and relationship to siblings. It is front-loaded with the core action and avoids any redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with an output schema, the description covers purpose, usage, failure, return, and side effects. Nothing an agent needs to invoke it correctly is missing, especially given the output schema already documents the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both parameters with descriptions and examples (100% coverage). The description adds critical nuance for 'name' by clarifying it is a 'bare basename, not a path,' which is not explicit in the schema. This extra semantic guidance raises it above the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb-resource statement: 'Create a new directory on the ZSpace NAS under the given parent.' It precisely identifies the operation and the target namespace, and differentiates from siblings by implying it is a preparatory action rather than a move/copy/delete. The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use to prepare a destination before moving files into it.' It also states when to use it relative to zspace_move and zspace_copy, which require the destination to already exist. This tells an agent exactly when to call this tool and when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_moveMove files or directoriesA
Move one or more files/directories on the NAS into a destination folder.
Use to reorganize files, e.g. sort media into per-genre folders. Accepts a single path or a list; the destination must already exist (create it with zspace_mkdir). Returns {status: "moved", paths, to}. Mutates NAS state; sources are removed from their original location.
Choose move vs copy by whether the originals should survive: copy keeps them, move does not. To change only the name within the same directory, use zspace_rename instead.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Destination directory (absolute path) | |
| paths | Yes | One absolute path or a list of absolute paths to move |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include openWorldHint: true, which is minimal. The description carries the burden and discloses key behaviors: it mutates NAS state, removes sources from original location, requires destination to exist (with a pointer to zspace_mkdir), and returns a specific structure. It does not detail error cases or permission requirements, but the main side effects are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise paragraphs: a one-sentence definition, a usage paragraph with input format, precondition, return, and mutation warning, and a decision paragraph. It is front-loaded with the core purpose and avoids redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (accepts single or list, has preconditions, mutates state) and the presence of an output schema, the description covers the essential aspects: purpose, usage, input flexibility, precondition, return structure, and differentiation from siblings. Minor gaps like error handling or permission requirements exist, but overall it is sufficiently complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already documented. The description adds semantic value by clarifying that 'paths' can be a single path or a list, and that 'to' must be an existing directory (with a creation hint). This goes beyond the raw schema descriptions, enriching the agent's understanding of parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Move one or more files/directories on the NAS into a destination folder.' It also distinguishes itself from copy and rename by explicitly mentioning those alternatives, so an agent can immediately tell what this tool does and what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: 'Use to reorganize files, e.g. sort media into per-genre folders.' It further provides decision rules: 'Choose move vs copy by whether the originals should survive' and 'To change only the name within the same directory, use zspace_rename instead.' This fully guides when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_pool_infoGet storage pool infoARead-only
List every storage pool on the ZSpace NAS with its name and capacity.
Use to inspect free space before an upload or to report total capacity. Returns a list of {name, total_tb, free_tb} objects, one per pool. Read-only; never modifies NAS state.
Prefer this over zspace_disk_stats for capacity questions: it returns normalized per-pool numbers, whereas disk_stats returns the NAS's raw diagnostics object. Use zspace_check instead if you need to know whether the NAS is reachable at all.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the description's 'Read-only; never modifies NAS state' is consistent and helpful. It goes further by disclosing that it returns normalized per-pool numbers rather than raw diagnostics, which is meaningful behavioral context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core capability, followed by usage guidance and sibling differentiation. Every sentence adds value; there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema, this description is complete: it states what is returned (a list of {name, total_tb, free_tb} objects), when to use it, and how it differs from related siblings. Nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to clarify about arguments. The description correctly implies an unqualified list operation, and the baseline for a no-parameter tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List every storage pool on the ZSpace NAS with its name and capacity.' It clearly distinguishes itself from zspace_disk_stats and zspace_check, so an agent can tell which tool answers a capacity question without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('inspect free space before an upload or to report total capacity'), and when to prefer alternatives ('Prefer this over zspace_disk_stats... Use zspace_check instead if you need to know whether the NAS is reachable at all'). This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_removeDelete files or directoriesADestructive
Permanently delete one or more files/directories from the ZSpace NAS.
Use only when you are sure the items are no longer needed — deletion is immediate and NOT recoverable. Accepts a single path or a list. Returns {status: "removed", paths}. Marked destructive: confirm intent before calling.
There is no trash or undo: zspace_move is the reversible alternative when the goal is only to get items out of the way. Confirm the exact paths with zspace_ls or zspace_search before calling, and never pass a pool root.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | One absolute path or a list of absolute paths to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint, but the description adds substantial behavioral context: deletion is immediate and unrecoverable, there is no trash/undo, what the return payload looks like, and the pool-root prohibition. This goes well beyond what annotations alone provide and contains no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then flows into safety warning, alternatives, and confirmation steps. Every sentence contributes unique value, and no filler or redundancy inflates the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with annotations and an output schema, the description supplies everything an agent needs: purpose, irreversibility, alternative, precondition checks, and return format. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description enriches the sole parameter by clarifying it accepts a single path or list, emphasizes absolute paths (already in schema), and adds the critical constraint 'never pass a pool root,' which is absent from the schema. This adds real meaning beyond the structured definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Permanently delete one or more files/directories from the ZSpace NAS,' which states a specific verb, resource, and permanence. It differentiates from siblings by explicitly naming zspace_move as the reversible alternative, so an agent can choose correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('only when you are sure the items are no longer needed'), when-not-to-use (reversible case → zspace_move), and pre-call safety steps (confirm paths with zspace_ls or zspace_search, never pass a pool root). This exhaustively routes the agent around misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_renameRename file or directoryA
Rename one file or directory on the ZSpace NAS, keeping it in place.
Use to fix a name without changing location; the parent directory stays the same. new_name is the bare basename, not a path. Returns the updated {name, path}. This mutates NAS state; it cannot be undone.
Same-directory only — use zspace_move to relocate to a different parent (move also accepts several paths at once, rename does not).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path of the file or directory to rename, e.g. /sata11/my/data/old | |
| new_name | Yes | New name (basename only), e.g. newname.mkv |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include openWorldHint=true, so the description carries the burden. It discloses that the operation mutates NAS state, cannot be undone, keeps the parent directory the same, and returns the updated {name, path}. It does not mention permission requirements or what happens if the target name already exists, but the core behavioral traits are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the action and scope, the second explains the use case, and the third gives the key constraint. Every sentence earns its place, and the sibling comparison is concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with 100% schema coverage and an output schema, the description is nearly complete. It covers the mutation risk, the same-directory constraint, and the return value. A minor gap is the lack of error conditions (e.g., name collision), but the description is sufficient for an agent to invoke it correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying that new_name is a bare basename, not a path, and that the parent directory stays the same. This prevents a common misuse where a user might pass a full path as new_name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Rename'), a specific resource ('one file or directory on the ZSpace NAS'), and the key constraint 'keeping it in place.' It clearly distinguishes from siblings by noting it is same-directory only and does not accept multiple paths, unlike zspace_move.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('fix a name without changing location') and when not to ('use zspace_move to relocate to a different parent'), and notes that move accepts several paths while rename does not. This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_searchSearch files by nameARead-only
Search for files/directories on the NAS whose names contain the keyword.
Use to find a file without knowing its exact location. Returns a list of {name, path, is_dir} matches, capped at 100. Read-only; never modifies NAS state.
The NAS full-text index is searched GLOBALLY, then results are filtered
client-side to path. Because path defaults to /sata11/my/data, a match
living in another pool is silently dropped and you get an empty list —
pass the pool root (or the widest directory you mean) before concluding a
file does not exist. Unlike zspace_ls / zspace_tree this matches by name
across the index rather than walking a directory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Directory to search under, e.g. /sata11/my/data | /sata11/my/data |
| keyword | Yes | Keyword to match against file names |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the global index search with client-side filtering, the default path, the 100-result cap, and the silent-drop behavior for matches outside the path. It also confirms read-only status. These details go well beyond the readOnlyHint and openWorldHint annotations, providing essential operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with purpose, then usage, then behavioral nuances and a warning, then differentiation from siblings. Every sentence adds value—no fluff—and it remains readable despite length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return format is covered. The description covers purpose, usage, behavioral pitfalls, parameter nuances, and differentiators. The caution about empty results from path filtering is critical for correct invocation. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover both parameters, but the description adds meaningful semantics: it explains the default path's role in filtering, the meaning of 'keyword' (match against file names), and the consequence of the default. This goes beyond the schema, though it could explicitly tie parameters to behavior even more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for files/directories by name keyword, and explicitly differentiates from zspace_ls and zspace_tree ('matches by name across the index rather than walking a directory'). This gives a precise verb-resource-action and distinguishes it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use ('Use to find a file without knowing its exact location') and provides a critical warning about the default path filtering behavior, advising the user to widen the path before concluding a file doesn't exist. It also names alternatives (zspace_ls, zspace_tree) and explains why they differ.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_treeShow directory treeARead-only
Return a nested tree view of a directory on the ZSpace NAS.
Use to understand overall folder structure before deep operations. depth caps recursion (default 2). Returns the nested tree structure as exposed by the NAS API. Read-only.
Nested rather than flat: use zspace_ls for a single level with sizes, or zspace_search when you are looking for a name rather than a layout.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Root directory to show as a tree, e.g. /sata11/my/data | /sata11/my/data |
| depth | No | Maximum recursion depth (1 = current level only) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description's 'Read-only' line adds no new safety info. It does add the recursion-depth behavior and the note that output is 'as exposed by the NAS API', which is mild context, but nothing about pagination, error cases, or the exact structure. With annotations covering the key safety trait, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight: a one-sentence purpose, a short usage note, a brief behavioral note, and a clear alternative line. Every sentence earns its place, and the key distinguishing information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tree tool with two simple parameters and an output schema present, the description covers purpose, usage, alternatives, and the key recursion behavior. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'path' and 'depth' are already documented with defaults and descriptions. The description repeats 'depth caps recursion (default 2)' but adds no meaning beyond the schema. Baseline 3 applies because the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'a nested tree view of a directory on the ZSpace NAS', and immediately distinguishes itself from siblings (zspace_ls and zspace_search). This gives an agent an unambiguous mental model of what the tool does and how it differs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('to understand overall folder structure before deep operations') and provides clear exclusions and alternatives ('use zspace_ls for a single level with sizes, or zspace_search when you are looking for a name rather than a layout'). No inference needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zspace_uploadUpload local file to NASA
Upload a file from the local machine to a directory on the ZSpace NAS.
Use to push media or documents to the NAS. remote_dir must already exist (create it with zspace_mkdir); pass new_name to rename it on arrival. Returns the upload result from the NAS API. Mutates NAS state; a file with the same name is overwritten.
Local -> NAS, the inverse of zspace_download. Files above 64 MB go through the desktop client's sliced upload protocol (2 MB slices) automatically, because the local proxy rejects oversized single-request bodies with HTTP 413. Check zspace_pool_info for free space before large uploads.
| Name | Required | Description | Default |
|---|---|---|---|
| new_name | No | Optional remote file name; defaults to the local basename | |
| local_path | Yes | Local filesystem path of the file to upload | |
| remote_dir | Yes | Destination directory on the NAS (absolute path) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide openWorldHint, so the description carries the behavioral burden. It explicitly warns that this mutates NAS state and that a same-named file is overwritten, and it discloses the >64 MB sliced protocol triggered by HTTP 413. These are exactly the hidden behaviors an agent needs before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose, then organized into related notes about parameters, large files, and related tools. It is slightly longer than strictly necessary, but every sentence contributes operational information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating upload tool with only an openWorldHint annotation, the description covers prerequisites, overwrite semantics, size limits, the underlying HTTP 413 reason, related sibling operations, and the return value. Nothing critical is left for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all three parameters at 100% coverage, so the baseline is 3. The description adds meaning beyond the schema by stating that remote_dir must already exist, that new_name renames the file on arrival, and that local_path is the source of the upload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Upload a file from the local machine to a directory on the ZSpace NAS.' It also distinguishes itself from siblings by calling itself 'the inverse of zspace_download' and linking remote_dir creation to zspace_mkdir, so an agent can disambiguate it from the other zspace_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use it ('push media or documents to the NAS'), gives an explicit prerequisite (remote_dir must exist and can be created with zspace_mkdir), names the alternative direction via zspace_download, and advises checking zspace_pool_info for free space before large uploads. This is concrete routing guidance, not just a restatement.
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.
11 tool updates
v0.1.1- Changed
zspace_copy2 fields changed- added
Input schema / properties / paths / descriptionAdded value: +"One absolute path or a list of absolute paths to copy" - added
Input schema / properties / to / descriptionAdded value: +"Destination directory (absolute path)"
- Changed
zspace_download2 fields changed- added
Input schema / properties / local_dir / descriptionAdded value: +"Local directory to save the file into (defaults to current dir)" - added
Input schema / properties / remote_path / descriptionAdded value: +"Absolute path of the file on the NAS to download"
- Changed
zspace_info1 field changed- added
Input schema / properties / path / descriptionAdded value: +"Absolute path of the file or directory to inspect, e.g. /sata11/my/data/影视"
- Changed
zspace_ls2 fields changed- added
Input schema / properties / path / descriptionAdded value: +"Absolute path on the NAS, e.g. /sata11/my/data" - added
Input schema / properties / show_hidden / descriptionAdded value: +"Include hidden files and directories"
- Changed
zspace_mkdir2 fields changed- added
Input schema / properties / name / descriptionAdded value: +"Name of the new directory (basename only)" - added
Input schema / properties / parent / descriptionAdded value: +"Absolute path of the parent directory, e.g. /sata11/my/data"
- Changed
zspace_move2 fields changed- added
Input schema / properties / paths / descriptionAdded value: +"One absolute path or a list of absolute paths to move" - added
Input schema / properties / to / descriptionAdded value: +"Destination directory (absolute path)"
- Changed
zspace_remove1 field changed- added
Input schema / properties / paths / descriptionAdded value: +"One absolute path or a list of absolute paths to delete"
- Changed
zspace_rename2 fields changed- added
Input schema / properties / new_name / descriptionAdded value: +"New name (basename only), e.g. newname.mkv" - added
Input schema / properties / path / descriptionAdded value: +"Absolute path of the file or directory to rename, e.g. /sata11/my/data/old"
- Changed
zspace_search2 fields changed- added
Input schema / properties / keyword / descriptionAdded value: +"Keyword to match against file names" - added
Input schema / properties / path / descriptionAdded value: +"Directory to search under, e.g. /sata11/my/data"
- Changed
zspace_tree2 fields changed- added
Input schema / properties / depth / descriptionAdded value: +"Maximum recursion depth (1 = current level only)" - added
Input schema / properties / path / descriptionAdded value: +"Root directory to show as a tree, e.g. /sata11/my/data"
- Changed
zspace_upload3 fields changed- added
Input schema / properties / local_path / descriptionAdded value: +"Local filesystem path of the file to upload" - added
Input schema / properties / new_name / descriptionAdded value: +"Optional remote file name; defaults to the local basename" - added
Input schema / properties / remote_dir / descriptionAdded value: +"Destination directory on the NAS (absolute path)"
14 tool updates
v0.1.0- First observed
zspace_check - First observed
zspace_copy - First observed
zspace_disk_stats - First observed
zspace_download - First observed
zspace_info - First observed
zspace_ls - First observed
zspace_mkdir - First observed
zspace_move - First observed
zspace_pool_info - First observed
zspace_remove - First observed
zspace_rename - First observed
zspace_search - First observed
zspace_tree - First observed
zspace_upload
TDQS
Scored across 14 tools
Each tool targets a distinct operation (probe, capacity, diagnostics, list, info, rename, mkdir, move, copy, remove, search, tree, upload, download) with explicit cross-references clarifying when to prefer one over another (e.g., zspace_check vs pool_info, ls vs tree). No two tools overlap in intent.
All tools follow the 'zspace_' prefix with lowercase snake_case and clear action verbs (check, ls, mkdir, move, copy, remove, search, tree, upload, download), plus noun-based for info/pool_info/disk_stats. The pattern is consistent and predictable.
14 tools is appropriate for a NAS file management CLI, covering connectivity, capacity, diagnostics, browsing, search, structural views, CRUD operations (create via mkdir, read via ls/info, update via rename, delete via remove), and transfer (upload/download). Each tool serves a clear purpose without bloat.
The tool surface covers the full lifecycle of file management: check connectivity, view pools, inspect disk health, list/inspect/search/tree for discovery, create (mkdir), rename, move, copy, delete, and upload/download. Missing features like trash/undo are explicitly documented as nonexistent, and the set has no dead ends for typical workflows.
Maintenance
Related MCP Connectors
Persistent file storage for AI agents via MCP and curl. Upload, download, and version files.
Browse and manage files in your Moxt AI workspace from any MCP client.
Remote MCP server to read and manage your Atako AI agents, messages, files, and integrations.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityAmaintenanceComprehensive MCP server for filesystem operations, process management, interactive sessions, and async file search. Includes utilities for JSON repair, encoding fixes, duplicate detection, OCR, ZIP archives, and Markdown export.646274 npm4MIT
- AlicenseBqualityAmaintenanceA powerful, security-hardened MCP server for intelligent file organization. Provides high-level atomic tools for organizing files into categories, detecting duplicates, extracting EXIF/ID3 metadata, scheduling automatic organization, and more — for use with Claude, Cursor, and Gemini CLI.42625 npm44MIT
- AlicenseAqualityFmaintenanceMCP server for the Rclone RC API. Gives AI assistants the ability to manage cloud storage remotes, copy/sync files, list directories, and more — all through natural language.5643 npm11MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that gives AI agents file system access: read, write, search, hash, directory trees — 12 tools, zero dependencies, pure Python stdlib.MIT