mcpField
F
ftp-ssh-mcp

ftp-ssh-mcp

本地服务
github.com/Chris221文件与存储15 周前更新

关于 ftp-ssh-mcp

ftp-ssh-mcp 是面向单台远程主机的 MCP 服务,适用于通过 FTP、FTPS、SFTP 或 SSH 管理共享主机和 VPS 的用户。文件操作默认启用,SSH 命令执行和 MySQL 查询则需显式配置开启。

主要功能

  1. 01列出、上传、下载和创建文件夹
  2. 02删除文件需额外启用
  3. 03通过 SSH 执行命令(需启用)
  4. 04通过 SSH 运行 MySQL 查询(需启用)
  5. 05用 .env 文件管理连接配置

适用场景

  1. 01管理远程主机上的网站文件
  2. 02向服务器上传或下载文件
  3. 03在启用后通过 SSH 执行运维命令
  4. 04在启用后查询主机上的 MySQL 数据库

MCP 相关

该 MCP 服务向客户端提供远程主机的文件传输工具,并可选提供 SSH 命令执行和 MySQL 查询工具。文件传输为默认能力;SSH 和数据库能力须配置并显式启用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"chris221-ftp-ssh": {
"command": "npx",
"args": [
"-y",
"ftp-ssh-mcp"
]
}
}
}
启动命令npx -y ftp-ssh-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmftp-ssh-mcp1.0.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

ftp-ssh-mcp

npm version npm downloads CI node license

一个用于通过 FTP、FTPS、SFTP 和 SSH 操作单台远程主机的 MCP 服务——这类主机通常由普通的共享主机方案或纯 VPS 提供,而不是云服务商的 API。它将工具分为三类能力:文件传输(列出、上传、下载、创建目录、删除)、通过 SSH 执行 Shell 命令,以及同样通过 SSH 运行的 MySQL 查询封装器。默认仅启用文件传输;Shell 执行和数据库访问均为可选功能,除非你明确启用,否则会保持关闭。请将这两者视为同样危险:mysql_query 会在生产数据库上运行任意 SQL,还能逃逸到 Shell,因此它并不比另一项更安全。

安装

已发布到 npm,可通过 npx 运行——无需克隆或构建。需要 Node 20 或更高版本。支持 Windows、macOS 和 Linux。

1. 将其添加到 MCP 客户端

在 Windows 上,请使用下方为每个客户端展示的 cmd /c 形式。 大多数客户端会直接启动 command,而不是通过 Shell 启动;Windows 上的 npx 是一个 .cmd 垫片,无法以这种方式执行——服务只会启动失败,通常也不会提供有用的错误信息。在 Windows 上请将此视为通用规则,而非特殊情况。

Claude Code — 项目根目录中的 .mcp.json
{
  "mcpServers": {
    "remote": { "command": "npx", "args": ["-y", "ftp-ssh-mcp@1"] }
  }
}

Windows:

{
  "mcpServers": {
    "remote": { "command": "cmd", "args": ["/c", "npx", "-y", "ftp-ssh-mcp@1"] }
  }
}
Claude Desktop — claude_desktop_config.json
操作系统路径
Windows%APPDATA%\Claude\claude_desktop_config.json
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json

其 mcpServers 结构与 Claude Code 相同。Claude Desktop 没有项目目录,因此请将 MCP_ENV_FILE 设为绝对路径——参见步骤 2。

Cursor — .cursor/mcp.json(项目级)或 ~/.cursor/mcp.json(全局)

其 mcpServers 结构与 Claude Code 相同。

VS Code — .vscode/mcp.json(工作区),或使用 MCP: Open User Configuration 进行全局配置

VS Code 使用 servers,而不是 mcpServers:

{
  "servers": {
    "remote": { "command": "npx", "args": ["-y", "ftp-ssh-mcp@1"] }
  }
}
Codex CLI — ~/.codex/config.toml,或受信任项目中的 .codex/config.toml

Codex 使用 TOML 和 snake_case 格式的 mcp_servers 表:

[mcp_servers.remote]
command = "npx"
args = ["-y", "ftp-ssh-mcp@1"]

Windows:

[mcp_servers.remote]
command = "cmd"
args = ["/c", "npx", "-y", "ftp-ssh-mcp@1"]

或者从 Shell 中添加:codex mcp add remote -- npx -y ftp-ssh-mcp@1

2. 指向一台主机

在项目根目录中创建 .env 文件。服务会从工作目录读取该文件;对于项目范围的客户端,工作目录就是项目根目录:

REMOTE_HOST=ftp.example.com
REMOTE_USER=deploy
REMOTE_PASSWORD=your-password
REMOTE_BASE_DIR=/home/deploy/public_html

这样就足以通过 FTPS 使用六种文件工具。请勿将此文件纳入版本控制——将 .env 和 .env.* 添加到 .gitignore。服务读取 .env,正是为了避免将凭据放入受版本控制的配置文件中。

如果你的客户端没有项目目录(例如 Claude Desktop),或者你想针对不同账户运行多个服务,请为每个服务指定各自的文件:

{
  "mcpServers": {
    "prod": {
      "command": "npx",
      "args": ["-y", "ftp-ssh-mcp@1"],
      "env": { "MCP_ENV_FILE": "/absolute/path/to/.env.prod" }
    }
  }
}

以下是更完整的配置,增加了 Shell 执行和数据库访问——除非选择启用,否则这两项都会保持关闭:

REMOTE_HOST=example.com
REMOTE_USER=deploy
REMOTE_PASSWORD=your-password
REMOTE_BASE_DIR=/home/deploy/public_html

# Pin the host key. Without this, any host key is accepted — see Security.
SSH_HOST_FINGERPRINT=SHA256:your-fingerprint-here
SSH_PORT=22
SSH_BASE_DIR=/home/deploy
SSH_ALLOW_EXEC=true
SSH_ALLOWED_CMDS=@basic,@node

# Runs the mysql client on the host over SSH. At least as dangerous as
# SSH_ALLOW_EXEC — read the Security section before enabling.
DB_USER=deploy_dbuser
DB_PASSWORD=your-db-password
DB_NAME=deploy_db

# Off by default; required for file_delete.
REMOTE_ALLOW_DELETE=true

所有变量请参见 .env.example;每个变量的作用请参见下方的“配置”。

3. 在依赖它之前先进行检查
npx -y ftp-ssh-mcp@1 --selftest

在存放 .env 的目录中运行它。它会解析配置、注册工具并打印一行摘要——但不会打开连接——然后退出。在将服务接入客户端之前,可用它确认已启用正确的功能:

ftp-ssh-mcp 1.0.1 selftest OK. env=.env, transport=ftp, host=example.com,
capabilities=[files, ssh, mysql], tools=[file_list, file_upload, ...]

如果配置不完整,它会以非零状态码退出,并提示缺少哪个变量。请参阅故障排除。

选项
选项功能
--selftest解析配置,打印将注册的工具,然后退出。不会打开连接。
-q、--quiet隐藏启动时的信息性警告。
-v、--version打印版本并退出。
-h、--help打印用法并退出。

在读取任何配置之前,--version 和 --help 就会作出响应,因此即使机器尚未进行任何设置,也能使用这两个选项。它们都会将内容打印到 stdout;服务的其他所有输出都会发送到 stderr,因为 stdout 是 JSON-RPC 通道。

--quiet 会隐藏关于缺少 DB_PASSWORD、未注册任何工具的 MCP_CAPABILITIES 项以及相对基目录的警告。它有意不会隐藏另外两条警告:它们指出你的安全状况可能不如你想象的可靠——主机密钥未经验证,或路径限制已关闭。客户端配置文件中设置一次标志后,便不会再检查该标志,因此在你修复问题之前,这些警告会一直显示。这才是值得保留的提醒。

功能

只有在功能已配置(设置了所需变量),并且(如果 MCP_CAPABILITIES 限制了功能集合)该功能也列在其中时,才会注册它对应的工具。

功能工具启用条件
filesfile_list、file_upload、file_upload_dir、file_download、file_mkdir、file_delete已配置 FTP 或 SSH 配置文件。file_delete 还要求 REMOTE_ALLOW_DELETE=true;所有写入操作都要求未设置 REMOTE_READONLY 或其值为 false。
sshssh_exec已配置 SSH 配置文件,且已设置 SSH_BASE_DIR 和 SSH_ALLOW_EXEC=true。
mysqlmysql_query已配置 SSH 配置文件,且同时设置了 DB_USER 和 DB_NAME。必须显式设置 DB_USER——它不会继承 REMOTE_USER——因此该功能不会自行启用。REMOTE_READONLY=true 时会完全禁用该功能。无需设置 DB_PASSWORD——请参阅下文。

files 工具与传输方式无关:它们会使用 FILE_TRANSPORT 选择的传输方式(ftp 或 sftp),如果两种配置都已设置,每次调用还可以单独覆盖传输方式。mysql_query 是一个便捷封装,不是数据库驱动——它会通过 SSH 将 SQL 传递给主机上已安装的 mysql 客户端(mysql --user=... --database=... --table,SQL 从 stdin 发送),然后解析该 CLI 的表格输出。它不支持连接池,也不支持参数化查询。提供它是因为大多数共享主机不允许从主机外部连接数据库;如果你需要真正的客户端数据库集成,请改用其他方案,而不要使用 mysql_query。启用它时应与 ssh_exec 一样谨慎,不能掉以轻心——请参阅安全性。

配置

每项设置都会按以下顺序从环境变量中解析:先使用特定配置的变量(FTP_* 或 SSH_*),再使用共享的 REMOTE_* 回退值,最后使用内置默认值。FTP 和 SSH 是两个相互独立的配置,你可以单独配置其中一个、同时配置两个,或分别配置(但至少需要配置一个才能启动)。

通常会从进程环境中读取变量,但服务还会在解析配置前,从当前工作目录加载 .env 文件,因此凭据可以存放在 MCP 客户端自己的配置文件之外(该文件通常会被纳入版本控制)。已设置的真实环境变量优先于 .env 文件。使用 MCP_ENV_FILE 指定其他文件——开头的 ~ 会展开为你的主目录,相对路径会根据工作目录解析;如果设置了该变量但文件不可读,启动将失败,而不会静默回退到 .env 并加载与你指定内容不同的凭据。.env 解析器不支持行内注释——KEY=value # note 会将 = 后的所有内容都视为值,包括 # note,因此请将注释放在单独一行。

密钥继承

非密钥设置(HOST、USER、BASE_DIR)可以自由回退到 REMOTE_*。密钥(PASSWORD、PRIVATE_KEY、PASSPHRASE)只有在该配置未设置自己的 *_USER 时,才会回退到 REMOTE_PASSWORD。配置自己的用户意味着声明一个不同的身份,向该身份发送原本用于其他账户的密码会导致反复认证失败——在许多共享主机上,失败次数过多会触发暴力破解防护,并导致主机级别的账户锁定。如果设置了 FTP_USER(或 SSH_USER),也必须显式设置对应的密码。

变量
变量默认值说明
REMOTE_HOST—共享主机;当配置文件未设置自己的主机时使用。
REMOTE_USER—共享用户。
REMOTE_PASSWORD—共享密钥。仅当配置文件没有自己的 *_USER 时才会继承。
REMOTE_BASE_DIR—共享基础目录,远程路径仅限于此目录。开头的 ~ 会展开为账户的登录目录 — 见下文。
FTP_HOST继承 REMOTE_HOST
FTP_PORT21
FTP_USER继承 REMOTE_USER
FTP_PASSWORD见密钥继承
FTP_BASE_DIR先继承 REMOTE_BASE_DIR,再继承 SSH_BASE_DIR此传输方式下,files 工具可访问的基础目录。接受 ~ 或 ~/<dir>。
FTP_SECURITYftpsftps(显式 TLS)、ftp(明文)或 ftps-implicit。
FTP_TLS_REJECT_UNAUTHORIZEDtrue设为 false 可接受自签名或其他无法验证的证书。
FTP_TIMEOUT_MS30000
SSH_HOST继承 REMOTE_HOST
SSH_PORT22
SSH_USER继承 REMOTE_USER
SSH_PASSWORD见密钥继承密码身份验证。可与密钥结合使用;服务端会尝试两种方式。
SSH_PRIVATE_KEY见密钥继承私钥的本地路径。开头的 ~ 会展开。
SSH_PASSPHRASE见密钥继承SSH_PRIVATE_KEY 的密码短语。
SSH_HOST_FINGERPRINT继承 REMOTE_HOST_FINGERPRINT用于固定主机密钥的 SHA-256 指纹。接受 SHA256:<base64> 格式或纯十六进制摘要。它不是密钥,因此会自由继承。未设置时接受任意主机密钥,服务会在启动时发出警告。见下文的安全性。
SSH_BASE_DIR先继承 REMOTE_BASE_DIR,再继承 FTP_BASE_DIRssh_exec 和 mysql_query 必须设置此项,因为两者都需要已知的工作目录。它也是 sftp 传输方式下 files 调用的访问根目录。接受 ~ 或 ~/<dir>。
SSH_ACTIVATE—脚本的远程路径(例如 Node 虚拟环境的 activate),每次执行命令前都会加载该脚本。文件不存在不会导致失败 — 命令仍会运行。
SSH_TIMEOUT_MS120000连接和单条命令的超时时间。
SSH_MAX_OUTPUT100000每条命令的 stdout+stderr 合并字节上限;超出部分会被截断,不会缓冲。
SSH_ALLOWED_CMDS@basic,@node,@mysqlssh_exec 可调用的程序名称的逗号分隔允许列表。以 @ 开头的条目是预设值 — 见下表。默认值会展开为旧版字面默认值列出的相同 12 个命令。
DB_USER—必须显式设置。与其他非密钥项不同,它不会继承 REMOTE_USER,因此仅设置 DB_NAME 无法启用 mysql_query。
DB_PASSWORD见密钥继承见下文 — 非必需。
DB_NAME—mysql_query 的默认数据库;可按调用覆盖。
FILE_TRANSPORT如果配置了 FTP 配置文件则为 ftp,否则如果配置了 SSH 配置文件则为 sftp,否则为 ftp为 files 工具提供服务的配置文件。
MCP_CAPABILITIES所有已配置的功能逗号分隔的允许列表,用于限制注册工具的功能(files、ssh、mysql)。无法识别的名称会导致启动失败。
REMOTE_READONLYfalse设为 true 时,会阻止文件传输、ssh_exec 和 mysql_query 中的所有写入操作(包括上传、删除、mkdir、Shell 命令和 SQL)。旧名称 FTP_READONLY(1.0 之前)仍可用;若设置了 REMOTE_READONLY,则以它为准。
REMOTE_ALLOW_DELETEfalse必须设为 true,file_delete 才能运行。旧名称 FTP_ALLOW_DELETE(1.0 之前)仍可用;若设置了 REMOTE_ALLOW_DELETE,则以它为准。
SSH_ALLOW_EXECfalse必须设为 true,才会注册 ssh_exec。
命令预设

以 @ 开头的 SSH_ALLOWED_CMDS 条目会展开为一个命名组;预设和字面命令名称可以自由混用(SSH_ALLOWED_CMDS=@basic,@php,rsync)。未知预设名称会导致启动失败。预设以技术栈而非托管产品命名,展开如下:

预设命令
@basicls、cat、tail、head、df、du、pwd、touch
@nodenode、npm
@phpphp、composer
@mysqlmysql、mysqldump

如果 DB_USER 没有可解析的 DB_PASSWORD,不会将其视为错误:远程 mysql 客户端可以通过 ~/.my.cnf 或受信任的本地套接字获取凭据,而不是在连接时提供密码。服务器启动时会向 stderr 输出警告,而不会拒绝运行;如果查询随后因身份验证失败,mysql_query 的错误消息会再次指出 DB_PASSWORD,这样就能从 MCP 客户端中看到原因,而不只是从可能没看到的启动日志中得知。

波浪号基目录

~ 和 ~/<dir> 均可接受,并会针对 files 工具展开为该账户自己的登录目录:通过 SFTP 使用 realpath("."),通过 FTP 使用 PWD。此查找会在连接时进行,且仅在需要展开 ~ 时进行,因此绝对基目录不会产生额外开销,服务器启动时仍无需联网。

ssh_exec 和 mysql_query 会以不同方式解析相同的设置:原始的 ~ 会传给远程登录 shell,由其在每条命令执行时自行展开 $HOME,因此这条路径完全不会在连接时进行查找。实际上,这两种机制的结果一致,因为它们都以同一个已登录账户为依据——只有展开的时机和方式不同。

每个配置档都会根据各自的登录目录展开自己的值。这是有意为之:许多共享主机上的 FTP 账户都处于 chroot 环境中,因此其 ~ 是 /,而 SSH 看到的则是真实的 /home/<user>——所以通过 REMOTE_BASE_DIR 共享的 ~/public_html 在两边都会指向正确位置。

具名主目录 ~other/site 会在启动时被拒绝——但只有注册了 files 工具时才会如此;排除这些工具的配置(例如 MCP_CAPABILITIES=ssh)可以正常启动,直到 ssh_exec 或 mysql_query 首次尝试在那里执行 cd 时才会失败。只能定位已登录账户的主目录,因此具名主目录会作为字面路径发送给服务器。这种情况下请使用绝对路径。

安全性

  • ssh_exec 只会运行 SSH_ALLOWED_CMDS 中列出的程序,并根据命令中第一个以空白字符分隔的词进行检查——不会对参数实施策略限制。

  • 在进行这项检查之前,如果命令包含以下十四字符 shell 元字符类别中的任何字符(; & | $ ( ) { } < > \ 以及换行符/回车符),就会直接拒绝该命令,因此每次调用都只能是单条普通命令——不能串联命令、重定向或进行替换。

  • 传递给 files 工具以及 SSH_BASE_DIR/FTP_BASE_DIR 的远程路径会被解析并限制在配置文件的指定基础目录内;.. 路径段会被直接拒绝。限制按配置文件分别生效,每次调用的 transport 覆盖项会受其所选配置文件的限制,而非默认配置文件。完全没有基础目录的配置文件不受限制——因为没有目录可供限制。因此,每个配置文件在没有自己的基础目录时,都会回退使用另一种传输方式的基础目录;对于最终仍然没有基础目录的任何传输方式,服务会在启动时向 stderr 发出警告。

  • 删除操作(REMOTE_ALLOW_DELETE)和 shell 执行(SSH_ALLOW_EXEC)默认都处于关闭状态,必须显式启用。

  • 使用 SSH_HOST_FINGERPRINT 固定 SSH 主机密钥。 除非设置了该变量,否则 SSH 和 SFTP 连接会接受对方提供的任何主机密钥——没有可回退使用的 known_hosts 文件——因此网络路径上的任何一方都可以提供自己的密钥,并获取账户密码。设置该变量后,如果密钥不匹配,连接会中止并报错,同时列出预期指纹和收到的指纹;未设置该变量时,服务会在启动时向 stderr 发出警告。请从你信任的主机获取该值:

    ssh-keyscan -t rsa your-host.example.com | ssh-keygen -lf -
    

    并复制 SHA256:… 字段(也接受纯十六进制摘要)。无法解析的指纹会导致启动错误,而不会静默回退到“不验证”。

  • mysql_query 不会根据你的 SQL 构造 shell 字符串——查询会写入 mysql 客户端的 stdin,因此绝不会被插入命令行。

  • DB_PASSWORD 绝不会出现在主机的进程列表中。 它会作为命令 stdin 的第一行传递,由远程 shell 读入 MYSQL_PWD 并导出给 mysql 进程——因此它不会出现在任何地方的 argv 中,ps aux 只会显示无害的命令文本。该机密只存在于进程环境中,且仅所有者可读取。由这种传递方式带来一项限制:包含换行符的密码会被拒绝,并明确报错。未设置 DB_PASSWORD 时,不会运行任何密码机制,因此主机端凭据(例如 ~/.my.cnf)会真正接管。

  • mysql_query 的权限至少与 ssh_exec 一样强大,而非较弱的授权。 它可以对生产数据库执行任意 SQL,而 mysql 客户端的 \! 命令是一种 shell 逃逸方式,并且会在管道输入时生效——因此无论 SSH_ALLOW_EXEC 和 SSH_ALLOWED_CMDS 如何设置,\! curl … | sh 都会调用 shell。这两项能力使用独立开关,是因为它们是不同的功能,而不是因为其中一项更安全;启用 mysql 时应与启用 ssh 一样谨慎。

这些措施并不会让远程主机成为沙箱。获准运行的命令仍会以所配置账户的全部权限运行;ssh_exec 能执行的操作与该账户直接登录后能执行的操作之间没有隔离。这些防护只限制单次调用的形式——一个程序、不使用 shell 技巧、路径不越出基础目录——并不限制获准程序运行后自身所具备的能力。

发现安全问题?请私下报告——参见 SECURITY.md。

已知安全公告

npm install ftp-ssh-mcp 目前会报告 @hono/node-server 的 两项中危安全公告;该依赖由 @modelcontextprotocol/sdk 间接引入。公告涉及该软件包在 Windows 上的静态文件服务器存在路径遍历问题。此服务通过 stdio 通信传输 JSON-RPC,且从不启动 HTTP 监听器,因此这里无法触及这段代码。npm 提供的唯一“修复”是降级 SDK,而这会造成不兼容变更。CI 运行 npm audit --omit=dev --audit-level=high,目前可以通过,但仍会在出现任何高危或严重问题时导致构建失败。SDK 更新其依赖后,这些安全公告将会消除。

故障排除

请先在存放 .env 的目录中运行 npx -y ftp-ssh-mcp@1 --selftest。此命令会重现服务启动时执行的所有操作,但不会建立连接,因此可以区分配置问题和网络或凭据问题。

症状原因
服务始终无法启动,客户端没有错误提示在 Windows 上,command 应设为 npx。请使用 cmd /c 形式——参见安装。
No connection profile configured未解析到主机或用户。请设置 REMOTE_HOST 和 REMOTE_USER,或对应的 FTP_*/SSH_* 变量。
自检输出中出现 env=<none>未找到 .env 文件,且未设置 MCP_ENV_FILE。.env 是从工作目录解析的,而不是从配置文件或软件包所在位置解析。若客户端没有项目目录,请将 MCP_ENV_FILE 设为绝对路径。
MCP_ENV_FILE is "…", but that file could not be read指定的 env 文件在该路径不存在或不可读(相对路径会根据工作目录解析)。此情况会有意阻止服务启动——路径拼写错误时,不得悄悄改用工作目录中碰巧存在的 .env 文件来启动服务。
即使设置了 REMOTE_PASSWORD,仍提示 <PREFIX>_PASSWORD is not set该配置文件设置了自己的 *_USER,因此会被视为不同的身份,不会继承共享密码。请明确设置其密码——参见机密继承。
缺少预期中的工具未启用相应功能。ssh_exec 需要同时设置 SSH_ALLOW_EXEC=true 和 SSH_BASE_DIR;mysql_query 需要设置 DB_USER 和 DB_NAME,且必须明确设置 DB_USER。请检查自检输出行中的 capabilities=[…]。
自检显示 capabilities=[]MCP_CAPABILITIES 指定的功能尚未配置。它只能缩小已配置功能的范围,不能启用任何功能。
.env 中的值带有行尾注释解析器不支持行内注释。请将注释放在单独一行。
出现主机密钥未经验证的警告未设置 SSH_HOST_FINGERPRINT。固定指纹之前出现此警告是预期情况,不代表失败——参见安全性。
出现路径限制已禁用的警告该传输协议对应的配置文件和另一个配置文件都未设置基础目录。请设置 REMOTE_BASE_DIR。
出现基础目录为相对路径的警告该值既不以 / 开头,也不是相对于 ~ 的路径——通常是漏写开头的斜杠,例如 home/u/site。此路径仍然有效,因为服务会根据会话启动的位置解析它,但此时根目录由服务决定,而不是在连接时固定。若要使用账户自己的主目录,请写成 ~/site,或使用绝对路径。
上传文件落在了意料之外的位置远程路径相对于配置文件的基础目录解析,且每个配置文件都有各自的基础目录。每次调用中的 transport 覆盖值会根据该配置文件的基础目录解析,而不是默认配置文件的基础目录。
~ 基础目录解析到了意料之外的位置~ 指的是服务报告的登录目录,并不一定是 /home/<user>。经 chroot 隔离的 FTP 账户会报告 /,因此 ~/public_html 在该账户下是 /public_html,而 SSH 会将相同的值解析为 /home/<user>/public_html。这两种解析结果对各自的账户来说都正确;如果需要覆盖,请为该配置文件单独设置绝对路径的 *_BASE_DIR。

开发

git clone https://github.com/Chris221/ftp-ssh-mcp.git
cd ftp-ssh-mcp
npm install
npm test
npm run selftest

npm test 会运行 Vitest 测试套件,其中包括针对进程内 FTP 服务的能力注册和传输测试。npm run selftest 会从环境(以及 .env,如果存在)解析配置、注册工具,并打印一行摘要,其中包括解析出的传输方式和已注册的能力;此过程不会打开连接或启动 stdio 传输。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。