ft-ftp-mcp-stdio
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ft-ftp-mcp-stdioshow me the files in /reports on ftp1"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FT Agent FTP 插件
FT Agent FTP 插件是一个通过 stdio 运行的本地 MCP Server,让支持 MCP 的 AI Agent 在受控范围内访问 FTP/SFTP 服务器。工程名、Python 包入口和 MCP 注册名统一使用 ft-ftp-mcp-stdio。
当前版本:
0.3.1支持的正式分发环境:Windows 10/11 x64 + Python 3.12.x
协议:FTP、SFTP
许可:MIT License
它提供服务器发现、目录浏览、文件搜索、上传下载、文本预览、目录批量传输及远程文件维护等 14 个 MCP 工具。服务不监听本地网络端口;每次远端工具调用独立建立并关闭 FTP/SFTP 连接。
核心特性
本地 stdio 服务:由 MCP 客户端按需启动,不开放 HTTP/TCP 服务端口。
FTP 与 SFTP:支持密码认证、SFTP 私钥认证和主机密钥校验。
凭据不进入模型上下文:密码或私钥口令存入操作系统凭据管理器,也可由环境变量注入。
虚拟路径边界:Agent 只使用以
/开头的虚拟路径;/映射到必填的服务器root,真实 root 不进入工具结果。写操作保护:支持只读模式;覆盖、移动和删除均有明确门控。
大文件友好:下载内容落入本机暂存目录,工具仅返回路径、元数据和 SHA-256。
上传完整性护栏:上传逐文件执行大小限制,并通过同目录临时对象提交;下载校验已知远端大小并清理失败的部分文件。
中文环境兼容:FTP 文件名支持 UTF-8、GBK 和自动回退;文本预览支持 BOM、UTF-8 与 GBK。
可诊断、可审计:提供只读
doctor检查和不含凭据、文件内容的本地 JSONL 使用日志。
Related MCP server: local-mcp
工具一览
工具 | 用途 | 关键保护 |
| 列出已配置的逻辑服务器 | 只读本地配置,不连接远端、不读取凭据或触发 TOFU |
| 测试连接、认证与账号访问范围 | 不执行文件操作 |
| 列出指定目录的下一层内容 | 最多返回 500 项 |
| 按名称通配符递归搜索 | 深度最多 5 层,最多返回 50 项 |
| 获取文件或目录元信息 | 仅查询 |
| 下载单个文件到本机暂存目录 | 校验大小并返回 SHA-256 |
| 上传单个本机文件 | 默认拒绝覆盖,覆盖需 |
| 递归创建目录 | 幂等;只读服务器拒绝 |
| 预览文本或 CSV 的开头部分 | 默认 100 KB,最大 1 MB,按完整行截断 |
| 递归下载目录 | 跳过链接并逐项报告失败,不设置客户端数量或大小上限 |
| 递归上传目录 | 默认不覆盖,跳过软链接 |
| 在同一目录中重命名 | 目标存在时拒绝 |
| 移动文件或目录 | 源与目标均进行路径边界检查 |
| 删除文件或空目录 | 必须显式传入 |
除无业务输入的 list_servers 外,所有远端操作工具都接受可选的 server 参数;省略时使用 default_server。当前行为、返回结构和已知契约缺口以 当前 Spec 基线 为准;机器可读接口以 正式 MCP 工具 Schema 为准。
工作方式
flowchart LR
U[用户] --> A[支持 MCP 的 AI Agent]
A <-->|JSON-RPC / stdio| M[ft-ftp-mcp-stdio]
M -->|FTP 或 SFTP| S[文件服务器]
M --> C[本地配置与系统凭据管理器]
M --> L[暂存目录与使用日志]MCP 客户端配置只负责启动本地 Server;FTP/SFTP 主机、账号和边界策略保存在 ~/.ft-ftp-mcp/config.json;密码或私钥口令不写入该配置文件。
快速开始
1. 安装发布包
正式分发包为:
ft-ftp-mcp-stdio-offline-0.3.1-py312-win64.zip请从项目正式分发渠道获取安装包,并在安装前使用包内 SHA256SUMS.txt 校验文件完整性;版本产物信息见 发布说明。
使用前请安装 64 位 Python 3.12.x。解压离线包后运行:
install.bat安装脚本无需管理员权限,并会:
校验 Python 版本;
在
%LOCALAPPDATA%\ft-ftp-mcp\venv创建独立虚拟环境;从包内
wheels\离线安装本项目和全部依赖;在
%LOCALAPPDATA%\ft-ftp-mcp\templates生成包含本机真实路径的 Codex 与 WorkBuddy 配置模板。
安装过程使用 --no-index,不会访问 PyPI。
2. 配置服务器
运行交互式配置向导:
& "$env:LOCALAPPDATA\ft-ftp-mcp\venv\Scripts\python.exe" -m ft_ftp_mcp_stdio setup向导支持添加、修改和删除服务器,切换默认服务器,设置日志开关并列出当前配置。新增或修改服务器时会先执行真实连接测试,成功后再原子写入配置和凭据。
3. 注册 MCP Server
安装器生成的最终模板位于:
%LOCALAPPDATA%\ft-ftp-mcp\templates\codex-config.toml
%LOCALAPPDATA%\ft-ftp-mcp\templates\workbuddy-mcp.json将对应片段合并到客户端配置中,保留客户端原有的其他 MCP Server。
Codex 配置示例(~/.codex/config.toml):
[mcp_servers.ft-ftp-mcp-stdio]
command = "C:/Users/<用户名>/AppData/Local/ft-ftp-mcp/venv/Scripts/python.exe"
args = ["-m", "ft_ftp_mcp_stdio"]
[mcp_servers.ft-ftp-mcp-stdio.env]
FASTMCP_SHOW_SERVER_BANNER = "false"
PYTHONUTF8 = "1"WorkBuddy 配置示例(~/.workbuddy/mcp.json):
{
"mcpServers": {
"ft-ftp-mcp-stdio": {
"command": "C:/Users/<用户名>/AppData/Local/ft-ftp-mcp/venv/Scripts/python.exe",
"args": ["-m", "ft_ftp_mcp_stdio"],
"env": {
"FASTMCP_SHOW_SERVER_BANNER": "false",
"PYTHONUTF8": "1"
}
}
}
}WorkBuddy 需要在连接器管理中信任该 Server;此后若 command、args 或 env 发生变化,原信任会失效,需要重新信任。配置完成后完全退出并重新打开客户端。
4. 验证
先运行只读诊断:
& "$env:LOCALAPPDATA\ft-ftp-mcp\venv\Scripts\python.exe" -m ft_ftp_mcp_stdio doctor随后在 Agent 对话中指定服务器别名,例如:
测试一下 ftp1 的连接。
预期 Agent 调用 test_connection,只返回服务器 alias、协议和只读状态,不暴露地址、账号、真实 root 或凭据来源。
配置文件
默认位置:~/.ft-ftp-mcp/config.json。可通过环境变量 FT_FTP_MCP_CONFIG 指定其他路径。
最小完整示例:
{
"version": 2,
"default_server": "ftp1",
"staging_dir": "~/.ft-ftp-mcp/staging",
"log_usage": true,
"servers": [
{
"alias": "ftp1",
"protocol": "ftp",
"host": "ftp.example.com",
"port": 21,
"username": "your_user",
"root": "/",
"description": "示例只读 FTP 服务器",
"readOnly": true,
"max_file_size_bytes": 2147483648,
"encoding": "auto",
"credential_env": null,
"key_path": null,
"host_key_fingerprint": null
}
]
}重要配置项:
字段 | 说明 |
| 工具未传 |
| 必填的真实服务器根;Agent 的虚拟 |
| 可选的非敏感服务器说明,供 |
| 默认 |
| FTP 文件名编码: |
| 每个上传文件的大小上限,默认 2 GiB; |
| 可选的凭据环境变量名,适合 CI 或企业密管注入 |
| SFTP 私钥路径;为空时使用密码认证 |
| 可选的 SFTP 主机 SHA-256 指纹强校验 |
| 是否记录本地 JSONL 使用日志,默认开启 |
远程路径统一使用以 / 开头的虚拟绝对路径;本机 local_path 必须使用本地绝对路径。完整规则见 配置文件规范。
凭据管理
密码和 SFTP 私钥口令默认存入操作系统凭据管理器,服务名为 ft-ftp-mcp-stdio,条目键为服务器别名。
python -m ft_ftp_mcp_stdio cred add <alias>
python -m ft_ftp_mcp_stdio cred list
python -m ft_ftp_mcp_stdio cred remove <alias>发布包用户应将上述 python 替换为 %LOCALAPPDATA%\ft-ftp-mcp\venv\Scripts\python.exe 的完整路径。
凭据解析时优先读取系统凭据管理器;未找到且配置了 credential_env 时,再读取对应环境变量。SFTP 设置 key_path 后使用私钥认证,钥匙串或环境变量中的值作为可选的私钥口令。
运维命令
# 交互式维护服务器配置
python -m ft_ftp_mcp_stdio setup
# 检查运行环境、配置、凭据、网络和协议登录
python -m ft_ftp_mcp_stdio doctor
# 只诊断指定服务器
python -m ft_ftp_mcp_stdio doctor --server <alias>doctor 是只读检查,不修改配置、凭据或 known_hosts。任一检查项为 FAIL 时退出码为 1,全部通过时为 0。更多行为与退出码见 命令行工具手册。
本地文件位置
路径 | 内容 |
| FTP/SFTP 服务器配置 |
| 配置向导生成的历史备份 |
| SFTP TOFU 主机指纹记录 |
| 下载文件和目录的本机暂存区 |
| 按日本地使用日志 |
使用日志只记录时间、工具名、服务器别名、路径参数、状态和耗时,不记录凭据或文件内容。暂存目录当前不会自动清理,请自行管理磁盘空间。
从源码开发
要求:Python >=3.12,<3.13、uv。
git clone <repository-url>
cd ft-ftp-mcp-stdio
uv sync常用命令:
# 启动交互式配置向导
uv run ft-ftp-mcp-stdio setup
# 启动只读诊断
uv run ft-ftp-mcp-stdio doctor
# 启动 MCP stdio Server(通常由 MCP 客户端调用)
uv run ft-ftp-mcp-stdio
# 测试、代码检查和类型检查
uv run pytest
uv run ruff check .
uv run mypy src tests scripts源码环境接入 MCP 客户端时,将 command 指向项目 .venv 中 Python 的绝对路径,args 使用 ['-m', 'ft_ftp_mcp_stdio']。stdio 模式的 stdout 专用于 JSON-RPC,不应向其中输出调试信息。
测试默认不访问真实 FTP/SFTP 服务。--live 测试仅供明确授权的隔离环境使用:它依赖 v2 配置中的 ftp1、sftp1、sftp-key-nopass-v2、sftp-key-pass-v2,并只在记录过初始状态的 /mcp_* 目录中写入和清理数据。确认环境满足 live 测试代码中的前提后,才可显式运行:
uv run pytest --live不要在未授权的生产环境中运行 live 测试。
项目结构
ft-ftp-mcp-stdio/
├── src/ft_ftp_mcp_stdio/ # MCP 入口、服务层、配置、凭据与协议驱动
├── tests/ # 单元、Schema、CLI、服务层和可选 live 测试
├── docs/ # 产品、配置、Schema、用户与开发文档
├── templates/ # Codex / WorkBuddy 客户端配置源模板
├── scripts/ # 测试夹具及维护脚本
├── wheels/ # Windows 离线安装依赖
├── install.bat # Windows 离线安装器
├── config.example.json # 配置文件示例
└── pyproject.toml # 包元数据与开发依赖安全边界
Agent 的远端权限不会超过所配置 FTP/SFTP 账号本身的权限。
远端输入输出使用虚拟路径并受
root边界约束;SFTP 逐段拒绝符号链接,FTP 只能拒绝服务器明确报告的链接。本地上传拒绝符号链接、junction 和 reparse point,但不设置允许根目录白名单;可访问范围取决于宿主沙箱和进程权限。
max_file_size_bytes只限制上传;下载和批量调用不设置客户端文件数量或总字节上限。upload_file和upload_dir默认不覆盖;overwrite=true只有在 driver 能确认安全原子替换时才允许。rename和move永不覆盖已存在的目标。delete仅删除文件或空目录,并要求调用参数confirm=true。该参数是工具调用门控,不是插件自行弹出的人工确认窗口。SFTP 默认使用 TOFU 记录首次主机指纹;敏感环境建议配置管理员提供的
host_key_fingerprint。FTP 本身不加密网络传输;敏感数据应优先使用 SFTP。
已知限制
不支持 FTPS、断点续传、异步传输和显式传输超时。
不提供 GUI、多用户模式或远程 MCP 服务模式。
正式离线安装包当前仅提供 Windows x64 版本。
暂存目录不会自动清理。
目录批量传输是 best-effort、非事务操作;必须检查
status、failed和上传结果的indeterminate,不确定时不得整体重试。上传和下载没有客户端批次总量限制,超大目录、磁盘或远端配额耗尽仍是已知资源风险。
read_text_preview只适用于纯文本,不适用于 Word、Excel、PowerPoint、PDF、图片或压缩包。
文档
README 用于项目概览、快速接入和开发入口;完整契约与操作细节以下列专项文档为准:
当前 Spec 基线:已经实现、可验证的运行时行为与已知契约缺口
快速安装手册:安装、客户端接入、配置和操作示例
产品能力清单:当前功能、兼容性和边界
配置文件规范:字段、校验、凭据与路径规则
正式 MCP 工具 Schema:从运行时
tools/list生成的 14 个工具机器契约MCP 工具 Schema 草案:历史开发草案,仅供追溯,不作为当前契约
配置 JSON Schema:
config.json的机器可读基础约束命令行工具手册:
setup、doctor和cred发布说明:版本变更与验证记录
许可
本项目基于 MIT License 开源。版权所有 (c) 2026 Ftrans,完整许可条款见 LICENSE。
Available Tools
14 toolsdelete删除对象ADestructive
删除单个文件或空目录;confirm 必须在运行时明确为 true。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 | |
| server | No | 可选服务器别名;省略时使用默认服务器。 | |
| confirm | Yes | 用户确认标记;运行时必须为 true。 |
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 destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavior: the confirm flag must be explicitly true at runtime, and deletion is limited to files and empty directories. It stops short of describing failure behavior or irreversibility.
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?
A single compact sentence with a semicolon clause; the destructive scope is front-loaded and the confirm gate follows. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations carry the safety hints. The description plus schema covers path, server, and the confirm gate adequately; only failure/error behavior and permission expectations are left unstated.
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% — path, server, and confirm are all documented, including confirm's runtime requirement. The description restates the confirm constraint rather than adding new semantics, so the schema does the heavy lifting and baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource (delete a single file or empty directory) and adds a scope restriction that matters — non-empty directories are out of scope. It does not, however, distinguish itself from siblings such as move or rename, so an agent must infer the boundary from the operation name alone.
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?
Usage is implied by the scope clause (single file or empty dir), which is useful guidance, but there is no explicit when-to-use/when-not statement and no named alternative for removing non-empty trees or relocating content. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_dir下载目录A
递归下载目录到随机 staging;逐项报告跳过与失败,不限制文件数量或总字节。
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | 可选服务器别名;省略时使用默认服务器。 | |
| remote_path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: recursion, a random staging destination, per-item skip/failure reporting, and explicitly unlimited file count and byte size. This last point is a meaningful warning absent from the structured fields. It still omits overwrite behavior and retry semantics, keeping it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the core action front-loaded and the limits clause last. Every clause carries information, though the semicolon-separated run-on is slightly heavy.
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, return values need not be explained, and the annotations already declare the safety profile. The description covers recursion, staging target, reporting, and limits — enough for correct invocation, with only minor gaps like overwrite/conflict behavior.
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 parameters (server, remote_path) are already documented in the schema. The description adds no path syntax or alias details, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (递归下载) and resource (目录) and adds the destination (随机 staging), so an agent can distinguish it from download_file. It does not explicitly name the sibling it contrasts with, but the directory-level 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?
Usage is only implied: the phrase '递归' and '不限制文件数量或总字节' hints this is for bulk directory fetches rather than single files, but there is no explicit when-to-use statement or reference to download_file as the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_file下载文件A
将单个远程文件下载到本机随机 staging 目录并校验已知大小。
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | 可选服务器别名;省略时使用默认服务器。 | |
| remote_path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 |
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=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: the file lands in a random local staging directory (non-deterministic destination) and its size is verified against a known value, which an agent needs to know to locate and trust the result.
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?
A single compact sentence with no filler, front-loading the action, the target, the destination, and the post-condition. Every clause carries information.
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, return values need not be explained, and the two parameters are fully covered by the schema. The description supplies the missing operational context (staging destination and size verification); only error/failure handling is absent, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (server, remote_path) are already fully documented in the schema, establishing a baseline of 3. The description adds nothing about parameter semantics, and its mention of 已知大小 does not map to any schema field.
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 (单个远程文件) plus the destination (本机随机 staging 目录) and a validation step (校验已知大小). The word 单个 implicitly contrasts with the sibling download_dir for directories, though it never names that sibling explicitly.
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?
There is no explicit guidance on when to use this tool versus read_text_preview, get_file_info, or download_dir, nor any stated prerequisites. Usage is only inferable from the description of what the tool does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_info获取文件信息CIdempotent
返回单个虚拟远程对象的类型、大小和 UTC 修改时间。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 | |
| server | No | 可选服务器别名;省略时使用默认服务器。 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry the safety profile, but readOnlyHint=false sits awkwardly against a description that reads as a pure query — an agent cannot tell whether the call has side effects. The description adds no behavioral context such as error behavior for missing paths, permission requirements, or remote transport/auth implications implied by openWorldHint=true.
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?
A single front-loaded sentence with zero filler; the resource and return payload come first. It is efficient, though it is arguably too terse to carry any operational framing.
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?
An output schema exists, so enumerating return fields is redundant rather than necessary, and the low-complexity two-parameter signature is well covered by the schema. What is missing is routing guidance among the many siblings (read_text_preview, list_dir, download_file) and any error/missing-file behavior.
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%: both path (virtual absolute path, root semantics) and the optional server alias are fully documented in the schema. The description adds nothing about parameter format, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (返回) plus a specific resource (单个虚拟远程对象) and enumerates the returned attributes (类型、大小、UTC 修改时间). The word 单个 distinguishes it from the sibling listing tools (list_dir, list_servers), but no sibling is named or contrasted explicitly.
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 never says when to call this versus read_text_preview (content) or list_dir (listing). Usage is only inferable from the word 单个. No preconditions or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dir列出目录BIdempotent
列出虚拟远程目录的下一层条目;首次 SFTP 连接可能持久化 TOFU 状态。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 | |
| server | No | 可选服务器别名;省略时使用默认服务器。 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, openWorldHint=true, idempotentHint=true) leave a puzzle: why is a listing call not read-only? The description resolves it by disclosing that the first SFTP connection may persist TOFU state, which explains the side effect not captured by the annotations. It stops short of 5 because it says nothing about failure modes (unreachable host, bad path) or whether subsequent calls are side-effect free.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight clauses: purpose first, side-effect caveat second, with no filler. The brevity is efficient, though it verges on under-specification rather than true conciseness given the missing usage context.
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?
An output schema exists, so return values need not be described, and annotations plus the TOFU note cover the safety profile. Still missing for a remote-filesystem tool: behavior on nonexistent paths or unavailable servers, and any explicit non-recursive-vs-recursive distinction relative to sibling listing tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (path, server) are fully documented in the schema including the '/' root convention and the default-server fallback. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (列出/list) and resource (虚拟远程目录的下一层条目), and the 'next layer only' wording usefully pins down scope as non-recursive. It does not name or distinguish itself from siblings such as search_files or get_file_info, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus search_files, get_file_info, or download_dir, nor any stated prerequisites or exclusions. Usage must be inferred entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servers列出逻辑服务器ARead-onlyIdempotent
列出可用逻辑服务器的非敏感摘要;不连接远端、不读取凭据,也不触发 TOFU。
| 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 declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is partly covered. The description still adds non-obvious behavior: it does not connect to the remote, does not read credentials, and does not trigger TOFU — meaningful side-effect exclusions the annotations cannot express.
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?
A single clause-dense sentence. The positive scope ('non-sensitive summaries of available logical servers') is front-loaded, and the three negative guarantees follow compactly. Nothing is redundant or padding.
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?
An output schema exists, so return-value structure need not be restated, and the description correctly focuses on scope and side effects. It is complete enough to call safely, with only the lack of explicit sibling routing as a residual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is a closed empty object with 100% coverage, so there is nothing for the description to disambiguate. The baseline for a parameterless tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('列出可用逻辑服务器'), and narrows the payload to '非敏感摘要', which tells the agent exactly what class of data comes back. It implicitly separates itself from connection-oriented siblings like test_connection by asserting it never connects, though it never names an alternative tool outright.
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?
Usage is only implied: an agent can infer this is the discovery/selection step before operating on a server. There is no explicit 'use this before X' or 'use Y instead when you need connection details' guidance, so routing among siblings rests on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_dir创建目录BIdempotent
在虚拟远程路径创建目录;只读服务器会在连接前拒绝。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 | |
| server | No | 可选服务器别名;省略时使用默认服务器。 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), lowering the bar. The description does add one genuinely useful behavioral fact beyond them: read-only servers reject the call before connecting. It says nothing about what happens when the directory already exists or about permission errors beyond that.
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?
A single short sentence, front-loaded with the verb and resource, followed by the one caveat that matters. No filler or redundancy.
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?
An output schema exists and both parameters are fully documented, so return values need not be explained. Purpose and one failure mode are covered; the only gap is guidance on choosing this tool over sibling directory-creating operations.
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% for both parameters (path and optional server alias), so the schema already carries the semantics. The description adds no path syntax, default-server, or aliasing detail beyond it, making the baseline 3 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?
States a specific verb+resource (创建目录) scoped to the virtual remote path, which is concrete enough for an agent to act on. It does not, however, distinguish itself from siblings that also materialize directories (e.g. upload_dir), leaving the routing decision implicit.
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?
There is no when-to-use guidance and no named alternative among the 13 siblings. The clause about read-only servers is a precondition caveat, not usage direction, so the agent gets no help choosing this over upload_dir or list_dir.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move移动对象ADestructive
在同一逻辑服务器的虚拟路径范围内移动对象,不覆盖已有目标。
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | 可选服务器别名;省略时使用默认服务器。 | |
| to_path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 | |
| from_path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 |
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 readOnly=false, destructive=true, and idempotent=false. The description adds that the move stays within one logical server and will not overwrite an existing target, which is valuable behavioral context beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It states the operation, scope, and key constraint directly.
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 a full input schema, an output schema, and rich annotations, the description only needs to add operation-specific constraints, which it does (same server, no overwrite). A minor gap is the lack of sibling routing against rename, but the core operation is adequately covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains server, from_path, and to_path. The description adds no parameter-specific meaning beyond what the schema provides, making 3 the correct baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (移动) and resource (对象), and adds scope (同一逻辑服务器的虚拟路径范围内) plus a constraint (不覆盖已有目标). It does not name or distinguish the sibling rename tool, so it stops short of the top score.
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?
There is no explicit when-to-use guidance, no prerequisites, and no comparison to alternatives such as rename. The no-overwrite constraint is behavioral context, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_text_preview预览文本文件CIdempotent
按 UTF-8、UTF-8 BOM 或 GBK 解码远程文件前缀,不返回完整连接信息。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 | |
| server | No | 可选服务器别名;省略时使用默认服务器。 | |
| max_bytes | No | 预览字节预算;业务允许范围为 1 到 1048576。 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description describes a read of a remote file prefix (with encoding detection), but the annotations declare readOnlyHint=false. A preview/decode operation is inherently read-only, so the declared write-capability flag directly conflicts with the described behavior and could mislead the agent about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence, front-loading the decoding behavior. However, the trailing 'does not return full connection information' clause is cryptic and does not obviously serve the calling agent.
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?
An output schema exists so return values need not be explained, and the schema documents all three parameters. Still, for a tool with encoding selection, a server alias, and a byte budget, the description is minimal and leaves no usage context beyond the bare action.
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 path, server, and max_bytes semantics (absolute virtual path, default server, byte budget 1–1048576) are already fully documented in the schema. The description adds nothing parameter-specific, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (decode) and resource (remote file prefix) with the encodings handled, and the title 'preview text file' anchors the intent. It is distinguishable from the CRUD siblings, but it does not explicitly differentiate itself from adjacent read tools like get_file_info or download_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use statement, no condition for choosing this over download_file / get_file_info, and no mention of prerequisites. The trailing clause about not returning connection info does not route the agent to or away from any alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename重命名对象BDestructive
在同一虚拟远程目录内重命名对象,不覆盖已有目标。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 | |
| server | No | 可选服务器别名;省略时使用默认服务器。 | |
| new_name | Yes | 不含路径分隔符的新名称。 |
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 destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful behavioral fact — the target is not overwritten — but omits what actually happens on a name collision (error vs. silent failure), permission requirements, and whether directories can be renamed.
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?
A single compact sentence with the scope constraint and the non-overwrite clause front-loaded, no filler. It is arguably lean to the point of under-specifying, but nothing is wasted.
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?
An output schema exists, so return values need no explanation. Still, for a mutation tool flagged destructive, the description leaves collision behavior, applicable object types, and permissions unstated, making it minimally viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so path, server and new_name are already fully documented in the schema. The description adds no format or constraint detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rename) plus the resource (an object) and constrains the scope to the same virtual remote directory, which implicitly separates it from the sibling `move`. It does not name siblings explicitly, so an agent must infer that cross-directory relocation belongs to `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?
The scope phrase '在同一虚拟远程目录内' implies when this tool is appropriate versus `move`, and the non-overwrite clause hints at a precondition. However, no alternative tool is named and no explicit when-not guidance or prerequisite (e.g., target must not exist) is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_files搜索文件BIdempotent
在虚拟远程目录下按文件名通配符递归搜索,不进入或返回符号链接。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 | |
| server | No | 可选服务器别名;省略时使用默认服务器。 | |
| pattern | Yes | 文件名通配符;非空且不能包含路径分隔符。 |
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 idempotentHint=true, destructiveHint=false, openWorldHint=true, so the safety profile is largely covered; the description usefully adds that traversal is recursive and that symlinks are neither entered nor returned, a real behavioral constraint not in the annotations. However, it does not address the notable readOnlyHint=false for what reads as a pure query, nor limits, ordering, or permission requirements on large trees.
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?
A single front-loaded sentence with zero filler; the recursive-scope constraint comes before the symlink caveat. It is efficient, though arguably too terse for a three-parameter search tool, which is why it falls short of a 5.
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?
An output schema exists, so return-value explanation is unnecessary, and all three parameters are documented. Still missing is what an agent needs for correct invocation on large trees: result limits, ordering, whether path may point at a file, and how the symlink exclusion interacts with matching within a symlinked directory.
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% (path, server, pattern all documented, including that pattern is non-empty and cannot contain path separators). The description's mention of 'filename wildcard' merely restates the pattern parameter and adds no syntax examples, glob dialect, or recursion-depth semantics beyond 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 gives a specific verb (递归搜索, recursively search), resource (文件, files under a virtual remote directory), and matching rule (按文件名通配符, by filename wildcard). It clearly separates itself from a plain listing, but it never names siblings such as list_dir or get_file_info, so an agent must infer the boundary.
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 the matching mechanism and a symlink exclusion, but gives no guidance on when to prefer this over list_dir, get_file_info, or read_text_preview, and no prerequisites or exclusion conditions. The agent is left to infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_connection测试服务器连接AIdempotent
验证服务器连接和认证;首次 SFTP 连接可能持久化 TOFU 主机密钥。
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | 可选服务器别名;省略时使用默认服务器。 |
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 idempotentHint=true, destructiveHint=false and openWorldHint=true, so the description is not carrying the safety burden alone. It adds genuinely non-redundant behavior: the first SFTP connection may persist a TOFU host key, which is exactly the side effect that explains readOnlyHint=false and is not derivable from any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight clauses: the purpose first, the state-changing caveat second. No filler, no repetition of the name or title, and nothing that could be dropped without loss.
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?
An output schema exists, so return/failure reporting need not be described, and the single optional parameter is fully covered by the schema. Purpose plus the persistence side effect are sufficient for correct invocation; a note on what a failed verification means (error vs status field) would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'server' parameter is already documented in-schema as an optional alias defaulting to the default server. The description adds nothing about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource pair ('验证服务器连接和认证'), so an agent immediately knows this validates connectivity and credentials rather than listing, reading, or modifying anything. It is not confusable with any sibling (list_servers, list_dir, upload_file, etc.), though it never explicitly names an alternative. Clear but not sibling-differentiating.
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?
Usage is only implied: an agent infers this should be run before attempting file operations against an uncertain server. There is no explicit 'use when / do not use when', no mention of when a re-test is warranted (e.g., after an auth or network error), and no alternative check documented. The TOFU caveat is the only guidance-adjacent content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_dir上传目录ADestructive
逐项上传本地目录。ok=true 仅表示工作流完成;必须检查 status、failed 和 indeterminate,结果不确定时不得整体重试。
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | 可选服务器别名;省略时使用默认服务器。 | |
| overwrite | No | 是否请求安全原子覆盖;默认 false。 | |
| local_path | Yes | 本机绝对路径。 | |
| remote_path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 |
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 destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds genuinely non-obvious context beyond the annotations: ok=true signals only that the workflow finished, and status/failed/indeterminate must be inspected, with no blanket retry on indeterminate. That directly explains the consequence of non-idempotency rather than restating it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the purpose is front-loaded and the critical result-checking caveat immediately follows. Every clause carries weight.
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?
An output schema exists, so return-shape explanation is not required, yet the description still supplies the key interpretation rule for that output (status/failed/indeterminate). With full schema coverage and annotations present, only selection guidance vs. siblings is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and all four parameters (server, overwrite, local_path, remote_path) are documented in the schema itself. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('逐项上传本地目录'), and the word '逐项' (item by item) distinguishes it from a single-file upload. It does not explicitly name upload_file or download_dir as siblings, so 4 rather than 5.
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?
Guidance is about interpreting results and retry behavior ('结果不确定时不得整体重试'), not about when to choose this tool over upload_file or download_dir. Useful, but it is result-handling advice rather than selection guidance, so usage routing is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_file上传文件ADestructive
通过同目录临时对象安全提交单个本地文件;默认拒绝覆盖。
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | 可选服务器别名;省略时使用默认服务器。 | |
| overwrite | No | 是否请求安全原子覆盖;默认 false。 | |
| local_path | Yes | 本机绝对路径。 | |
| remote_path | Yes | 服务器虚拟绝对路径,以 / 开头;/ 表示配置的服务器 root。 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, openWorldHint=true and idempotentHint=false, but the description adds genuine context: the upload is staged through a same-directory temporary object (implying an atomic commit) and overwrites are refused by default. This tells the agent why the operation is non-idempotent and what the safe default is, going beyond the raw hints.
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?
A single compact sentence with the safety mechanism front-loaded and the overwrite default trailing. Every clause carries information; nothing is padding.
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 and annotations covering the safety profile, the description only needs to add the operational traits it does add (single-file scope, temp-object atomicity, no-overwrite default). It omits nothing critical for invoking the tool, though it could note server-alias behavior.
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 all four parameters (server, overwrite, local_path, remote_path) are already documented in the schema, including the overwrite default of false. The description restates the overwrite default but adds no new syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: uploading (提交) a single local file. The qualifier '单个本地文件' implicitly distinguishes it from the sibling upload_dir, which handles directories, so an agent can route 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of alternatives (e.g., upload_dir for directories, or how this relates to move/rename), and no prerequisites such as authentication or server selection. '默认拒绝覆盖' is a behavioral default, not usage guidance.
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.
14 tool updates
v0.3.1- First observed
delete - First observed
download_dir - First observed
download_file - First observed
get_file_info - First observed
list_dir - First observed
list_servers - First observed
make_dir - First observed
move - First observed
read_text_preview - First observed
rename - First observed
search_files - First observed
test_connection - First observed
upload_dir - First observed
upload_file
TDQS
Scored across 14 tools
Most tools target clearly distinct operations (list_dir vs search_files vs get_file_info, download_file vs download_dir). The only mildly overlapping pair is rename vs move, but their descriptions cleanly separate same-directory rename from cross-path move.
The majority follow a predictable verb_noun pattern (list_servers, test_connection, read_text_preview, download_dir, upload_dir). rename, move, and delete are bare verbs without an object noun, a minor deviation but still readable and conventional.
14 tools is well within a healthy range for an FTP/SFTP client and each one maps to a distinct file-operation concern. Nothing feels redundant or padded.
Strong lifecycle coverage: server discovery, connection test, listing/search, metadata, preview, single and recursive transfer, make_dir, rename, move, and delete. Minor gaps like permission/attribute changes or an explicit existence check are workable around via get_file_info.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Persistent file storage for AI agents via MCP and curl. Upload, download, and version files.
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Related MCP Servers
- AlicenseAqualityDmaintenanceZero-config SSH/SFTP MCP server that lets an LLM client open temporary SSH/SFTP sessions to remote hosts, run commands, and upload/download files without holding any pre-baked credentials.177 npm2MIT
- AlicenseNot gradedqualityDmaintenanceA lightweight, stdio-based MCP server enabling AI assistants to perform local file system operations like reading, writing, searching, and executing commands.2,323 npmMIT
- AlicenseAqualityAmaintenanceAn MCP server that enables AI coding agents to deploy files to FTP/FTPS/SFTP servers, with path jail, read-only mode, and dry-run capabilities.10MIT
- AlicenseNot gradedqualityBmaintenanceA local filesystem MCP server providing constrained file operations (read/write, directory management, search, metadata) within configurable directories, with read-only mode and zero runtime dependencies.2 npmMIT