这是一个提供 SFTP 操作功能的模型上下文协议(MCP)服务器,包括目录同步、单文件上传、文件读取以及远程命令执行。该服务器使用 STDIO 传输方法进行安全本地通信。
src/main.py:MCP 服务器实现,包括 SFTP 工具、资源和提示pyproject.toml:项目元数据和依赖项requirements.txt:Python 依赖项此项目使用 Python。注意:MCP 服务器通常由 MCP 客户端(如 Claude Desktop)直接调用,通常不需要手动激活虚拟环境。
pip install -r requirements.txt
如果你已经安装了 uv,也可以使用:
uv sync
所有配置均通过 MCP 客户端的环境变量设置,无需创建 .env 文件。
重要通知: MCP 服务器通常不需要手动操作。它们由 MCP 客户端自动启动和管理。
如果需要手动测试,可以使用以下命令:
uv run python src/main.py
服务器将使用 STDio 传输方法运行,并通过 JSON-RPC 2.0 进行通信。
要在 MCP 客户端中使用此服务器,请按如下方式配置:
{
"mcpServers": {
"sftp-server": {
"command": "uv",
"args": ["--directory", "/path/to/your/project", "run", "python", "src/main.py"],
"env": {
"TARGET_HOST": "your-sftp-server.com",
"TARGET_USERNAME": "your-username",
"TARGET_PASSWORD": "your-password",
"LOCAL_PATH": "/path/to/local/directory",
"REMOTE_PATH": "/path/to/remote/directory",
"IGNORE_PATTERNS": "[\"*.log\", \"node_modules/\", \".git/\"]"
}
}
}
}
重要说明:
/path/to/your/project 翻译成中文并替换为你项目的绝对路径.env 文件中设置同步本地目录到远程 SFTP 服务器。
参数
local_dir(可选):本地目录路径(默认使用 LOCL_PATH 环境变量)remote_dir(可选):远程目录路径(默认使用 REMOTE-PATH 环境变量)返回值: 包含同步结果的字典,包括已上传的文件、创建的目录、忽略的项目及任何错误。
将单个文件上传到远程 SFTP 服务器。
参数
local_file_path:要上传的本地文件路径remote_file_path(可选):远程目标路径(未指定时自动确定)返回值: 包含上传结果的字典,包括文件大小和路径。
从远程 SFTP 服务器读取文件内容。
参数
remote_file_path:要读取的远程文件路径encoding(可选):使用的文本编码(默认:utf-8)返回值: 包含文件内容、大小和编码信息的字典。
通过 SSH 在远程服务器上执行命令。
参数
command:在远程服务器上执行的命令working_directory(可选):命令的工作目录返回值: 包含命令输出、退出代码、UWP 和 STDerr 的字典。
列出远程目录的内容。
参数
remote_dir_path:要列出的远程目录路径返回值: 包含目录内容的字典,包括文件名、大小、权限和类型。
获取当前 SFTP 服务器配置(不包括敏感数据)。
返回包含主机、端口、用户名、路径、忽略模式和连接状态的 JSON。
用于同步文件到远程服务器的工作流程提示。提供常见 SFTP 操作的逐步指导。
上传单个文件的指南。解释如何有效使用 uploadFILE 工具。
| 变量 | 描述 | 默认值 |
|---|---|---|
TARGET_HOST | SFTP 服务器主机名或 IP 地址 | 必填 |
TARGET_USERNAME | SFTP 用户名 | 必填 |
TARGET_PASSWORD | SFTP 密码 | 必填 |
LOCAL_PATH | 本地目录路径 | 必填 |
REMOTE_PATH | 远程目录路径 | 必填 |
IGNORE_PATTERNS | 忽略的文件模式 | [] |
# 使用配置的 LOCAL_PATH 和 REMOTE_PATH
sync_directory()
# 或指定自定义路径
sync_directory("/custom/local/path", "/custom/remote/path")
# 基于 LOCAL_PATH/REMOTE_PATH 自动确定远程路径
upload_file("/local/path/file.txt")
# 指定确切的远程目标
upload_file("/local/path/file.txt", "/remote/path/file.txt")
# 使用默认 UTF-8 编码读取
read_remote_file("/remote/path/file.txt")
# 指定编码
read_remote_file("/remote/path/file.txt", "latin-1")
# 简单命令
execute_remote_command("ls -la")
# 带工作目录的命令
execute_remote_command("npm install", "/var/www/myapp")
list_remote_directory("/remote/path")
/ 结尾