FTP MCP服务器打开
用于将AI模型(Claude、ChatGPT、Gemini等)连接到远程FTP/SFTP服务器的开源MCP服务器。使用任何兼容MCP的LLM管理、读取、写入和导航远程服务器上的文件。
作者:乔尔·查拉 版本:2.0.0-打开 许可证:MIT
______________________________________________________________________
FTP MCP服务器——版本de pago(在线)
有一个具有优化功能的支付版本,可在:
La版本在线 FTP MCP服务器 它与这个开源版本共享相同的基本代码,但包括特定的修改,以免干扰系统的输入,并提供更流畅的生产体验。如果您正在寻找一个无需配置自己的服务器即可使用的解决方案,则付费版本是理想的选择。
______________________________________________________________________
特性
- 14 MCP工具 --通过FTP/SFTP列出、读取、写入、搜索、创建、删除和重命名文件和目录
- 双模式 --Stdio(本地CLI)和HTTP(带管理面板的web平台)
- OAuth 2.0+PKCE --与Claude.ai、ChatGPT、Gemini和其他MCP客户端安全集成
- Web管理面板 --仪表板、文件资源管理器、站点管理、OAuth凭据
- 默认情况下为SQLite --零配置数据库,可选MySQL支持
- AES-256-GCM加密 --FTP凭据在静止时加密
- FTP和SFTP --完全支持这两种协议
- 自动恢复 --使用Prisma紧急恢复在FTP/DB故障时自动重新连接
- 大文件支持 --读取限制高达500MB,写入操作超时时间延长
兼容性
支持的MCP客户端
| 客户 | 运输 | 注意事项 |
|---|---|---|
| Claude Desktop | stdio | 通过配置 claude_desktop_config.json |
| Claude Code | stdio | 通过CLI配置 claude mcp add |
| 光标 | stdio | 编辑器设置中的配置 |
| Windsurf | stdio | 编辑器设置中的配置 |
| claude.ai | HTTP+OAuth PKCE | 远程MCP连接器 |
| ChatGPT | HTTP+OAuth PKCE | 远程MCP连接器(如果可用) |
| Gemini | HTTP+OAuth PKCE | 远程MCP连接器(如果可用) |
| 任何MCP客户端 | stdio/HTTP | 取决于客户端支持 |
需求
- Node.js >=18(建议为22.x)
- npm >= 9
- 访问FTP或SFTP服务器
HTTP模式(web平台)的附加功能
- 公共域/URL(用于Claude.ai集成)
快速开始
git clone https://github.com/joelchala/FTP-MCP-Server-Open.git
cd FTP-MCP-Server-Open
npm install
npm run build
cp .env.example .env配置
标准模式(本地使用)
TRANSPORT=stdio
FTP_PROTOCOL=sftp
FTP_HOST=your-server.com
FTP_PORT=22
FTP_USER=your-user
FTP_PASSWORD=your-password
FTP_BASE_PATH=/public_htmlHTTP模式(web平台)
TRANSPORT=http
PORT=3000
BASE_URL=https://your-domain.com
DATABASE_URL="file:./data.db"
JWT_SECRET=your_64_hex_char_key
ENCRYPTION_KEY=your_64_hex_char_key
CORS_ORIGINS=https://your-domain.com,https://claude.ai生成密钥:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"初始化数据库:
npx prisma db push启动服务器:
npm start环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
TRANSPORT | MCP传输: stdio 或 http | stdio |
PORT | HTTP服务器端口 | 3000 |
BASE_URL | 公共服务器URL | http://localhost:3000 |
DATABASE_URL | 数据库连接(SQLite或MySQL) | file:./data.db |
JWT_SECRET | JWT签名密钥(HS256) | - |
ENCRYPTION_KEY | AES-256十六进制密钥(64个字符) | - |
CORS_ORIGINS | 允许的CORS源(逗号分隔) | BASE_URL |
NODE_ENV | 环境: production 或 development | development |
FTP_PROTOCOL | 协议: ftp 或 sftp (标准输入模式) | sftp |
FTP_HOST | 服务器主机名(stdio模式) | localhost |
FTP_PORT | 连接端口(stdio模式) | 22 |
FTP_USER | FTP用户名(stdio模式) | anonymous |
FTP_PASSWORD | FTP密码(stdio模式) | - |
SFTP_PRIVATE_KEY_PATH | SSH私钥路径 | - |
FTP_BASE_PATH | 根沙盒目录 | /public_html |
FTP_MAX_FILE_SIZE | 最大读取大小(字节) | 524288000 (500MB) |
FTP_ALLOWED_EXTENSIONS | 可写文件扩展名 | 参见.env.example |
FTP_READ_TIMEOUT | 读取超时(ms) | 120000 (2分钟) |
关于大文件的注意事项: FTP_MAX_FILE_SIZE 控制读取操作的最大文件大小。写操作没有人为的限制——唯一的限制来自FTP/SFTP服务器本身。根据您的需要调整这些值。数据库选项
SQLite(默认) --零配置:
DATABASE_URL="file:./data.db"MySQL(高级) --更改 provider 在 prisma/schema.prisma 从 "sqlite" 到 "mysql":
DATABASE_URL=mysql://user:password@localhost:3306/ftp_mcp_server_open认证
Web身份验证(管理面板)
- 使用电子邮件和密码注册(bcrypt,成本系数12)
- 使用Cookie进行基于会话的登录(仅httpOnly、安全、SameSite=Lax、24小时TTL)
OAuth 2.0授权码+PKCE(适用于Claude.ai)
Claude.ai使用标准OAuth 2.0流与PKCE(RFC 7636)连接:
- 在web面板上注册(
/register)并登录 - 转到连接页面(
/connect)并生成OAuth凭据 - 在Claude.ai中,添加一个自定义MCP连接器,URL为:
https://your-domain.com/mcp - Claude.ai重定向到
/authorize您授权访问的位置 - 服务器生成一个授权码,Claude.ai将其交换为JWT
自动发现:Claude.ai通过以下方式发现OAuth端点:
/.well-known/oauth-protected-resource(RFC 9728)/.well-known/oauth-authorization-server(RFC 8414)
凭证格式:
- 客户端ID:
ftpmcp_+24个十六进制字符 - 客户端密码:48个十六进制字符(用bcrypt散列)
- 访问令牌:JWT HS256,8小时TTL
使用Claude Desktop(stdio模式)
{
"mcpServers": {
"ftp-server": {
"command": "node",
"args": ["/absolute/path/to/FTP-MCP-Server-Open/dist/index.js"],
"env": {
"FTP_PROTOCOL": "sftp",
"FTP_HOST": "your-server.com",
"FTP_PORT": "22",
"FTP_USER": "user",
"FTP_PASSWORD": "password",
"FTP_BASE_PATH": "/public_html"
}
}
}
}使用克劳德代码(stdio模式)
claude mcp add ftp-server \
-e FTP_PROTOCOL=sftp \
-e FTP_HOST=your-server.com \
-e FTP_PORT=22 \
-e FTP_USER=user \
-e FTP_PASSWORD=password \
-e FTP_BASE_PATH=/public_html \
-- node /absolute/path/to/FTP-MCP-Server-Open/dist/index.js使用光标/风帆(stdio模式)
查看编辑器的文档,了解如何通过stdio添加MCP服务器。该配置需要与上述相同的环境变量。
MCP工具(14)
站点管理(仅限HTTP模式)
| 工具 | 说明 |
|---|---|
ftp_list_sites | 列出已配置的FTP站点 |
ftp_select_site | 选择FTP站点进行操作 |
连接
| 工具 | 说明 |
|---|---|
ftp_connect | 连接到FTP/SFTP服务器 |
ftp_disconnect | 关闭活动连接 |
ftp_status | 显示连接状态 |
导航
| 工具 | 说明 |
|---|---|
ftp_list_directory | 列出文件和目录 |
ftp_search_files | 按模式递归搜索文件 |
ftp_get_file_info | 获取文件元数据 |
文件操作
| 工具 | 说明 |
|---|---|
ftp_read_file | 读取文本文件内容 |
ftp_write_file | 将内容写入文件 |
ftp_create_directory | 创建新目录 |
ftp_delete_file | 删除文件 |
ftp_delete_directory | 删除目录 |
ftp_rename | 重命名或移动文件/目录 |
网络面板
HTTP模式包括一个完整的web管理面板:
| 页面 | 路线 | 描述 |
|---|---|---|
| 着陆 | / | 公共主页 |
| 登录 | /login | 登录 |
| 注册 | /register | 创建帐户 |
| 仪表板 | /dashboard | 带有统计数据的主面板 |
| 网站 | /sites | 管理FTP/SFTP连接 |
| 探索者 | /explorer | 远程文件浏览器和编辑器 |
| 项目 | /projects | 基于项目的视图 |
| 连接 | /connect | 生成OAuth凭据 |
| 设置 | /settings | 个人资料、密码、危险区域 |
| 授权 | /authorize | OAuth授权屏幕(PKCE) |
HTTP API终结点
身份验证API
| 方法 | 路线 | 描述 |
|---|---|---|
| 职位 | /api/auth/register | 注册新用户 |
| 职位 | /api/auth/login | 登录 |
| 职位 | /api/auth/logout | 注销 |
| 得到 | /api/auth/me | 当前用户信息 |
网站API
| 方法 | 路线 | 描述 |
|---|---|---|
| 得到 | /api/sites | 列出用户的网站 |
| 职位 | /api/sites | 创建网站 |
| PUT | /api/sites/:id | 更新网站 |
| 删除 | /api/sites/:id | 删除网站 |
| 职位 | /api/sites/:id/test | 测试FTP/SFTP连接 |
文件API
| 方法 | 路线 | 描述 |
|---|---|---|
| 得到 | /api/files/list | 列出目录文件 |
| 得到 | /api/files/read | 读取文件内容 |
| 职位 | /api/files/write | 写入文件内容 |
| 得到 | /api/files/stat | 文件元数据 |
| 职位 | /api/files/mkdir | 创建目录 |
| 删除 | /api/files/delete | 删除文件或目录 |
| 职位 | /api/files/rename | 重命名/移动文件或目录 |
| 得到 | /api/files/search | 按模式搜索文件 |
OAuth API
| 方法 | 路线 | 描述 |
|---|---|---|
| 得到 | /api/oauth/clients | 列出OAuth凭据 |
| 职位 | /api/oauth/clients | 生成新凭据 |
| 删除 | /api/oauth/clients/:id | 撤销凭据 |
| 职位 | /oauth/authorize | 生成授权码(PKCE) |
| 职位 | /oauth/token | JWT的交换代码/凭据 |
设置API
| 方法 | 路线 | 描述 |
|---|---|---|
| PUT | /api/settings/profile | 更新姓名/电子邮件 |
| PUT | /api/settings/password | 更改密码 |
| 删除 | /api/settings/sessions | 关闭所有会话 |
MCP与探索
| 方法 | 路线 | 描述 |
|---|---|---|
| 发布/获取/删除 | /mcp | MCP可流式HTTP端点 |
| 得到 | /.well-known/oauth-protected-resource | RFC 9728资源元数据 |
| 得到 | /.well-known/oauth-authorization-server | RFC 8414授权服务器元数据 |
| 得到 | /health | 基本健康检查 |
| 得到 | /debug/health | 详细的健康检查 |
项目结构
FTP-MCP-Server-Open/
prisma/
schema.prisma # Models: User, Site, OauthClient, Session, AuthorizationCode
public/
index.html # Landing page
login.html # Login
register.html # Registration
dashboard.html # Main dashboard
sites.html # Site management
explorer.html # File explorer
projects.html # Projects view
connect.html # MCP connection
settings.html # Settings
authorize.html # OAuth authorization (PKCE)
css/style.css # Dark theme styles
js/app.js # Frontend JavaScript
src/
index.ts # Main entry (Express + MCP)
env-loader.ts # Environment variable loading
constants.ts # Global constants
types.ts # TypeScript interfaces
auth/
password.ts # bcrypt hashing
oauth-credentials.ts # Client ID/Secret generation
session.ts # Session management
protected-resource.ts # RFC 9728/8414 OAuth discovery
config/
database.ts # Prisma client singleton with auto-recovery
encryption.ts # AES-256-GCM encrypt/decrypt
middleware/
auth.web.ts # Web auth middleware (sessions)
auth.mcp.ts # MCP auth middleware (JWT Bearer)
routes/
auth.routes.ts # Register, login, logout
sites.routes.ts # FTP sites CRUD
oauth.routes.ts # OAuth: authorize, token, credentials
files.routes.ts # File operations
settings.routes.ts # User settings
pages.routes.ts # HTML page serving
mcp/
mcp.http.ts # MCP Streamable HTTP transport
schemas/
connection.schema.ts # Zod connection schemas
navigation.schema.ts # Zod navigation schemas
fileops.schema.ts # Zod file operation schemas
site.schema.ts # Zod site schemas
services/
connection.manager.ts # Dual-mode connection manager
ftp.client.ts # FTP client (basic-ftp)
sftp.client.ts # SFTP client (ssh2-sftp-client)
file.utils.ts # File utilities
helpers/
error.helper.ts # Error formatting
format.helper.ts # Response formatting
tools/
connection.tools.ts # Tools: connect, disconnect, status
navigation.tools.ts # Tools: list, search, file_info
fileops.tools.ts # Tools: read, write, mkdir, delete, rename
site.tools.ts # Tools: list_sites, select_site数据库
SQLite(默认)或MySQL与Prisma ORM。型号:
- 用户 --使用电子邮件和哈希密码(bcrypt)的用户
- 网站 --带有加密密码(AES-256-GCM)的FTP/SFTP站点
- OauthClient --OAuth凭据(客户端ID、哈希客户端密钥)
- 会话 --具有随机令牌和24小时过期的Web会话
- 授权码 --OAuth PKCE流的临时代码(10分钟TTL)
安全
- 沙盒 --操作仅限于
FTP_BASE_PATH目录 - 扩展 --只允许对配置的文件扩展名进行写入
- 加密 --使用AES-256-GCM加密的FTP密码
- 认证 --bcrypt(成本12)+JWT HS256
- OAuth PKCE --带有SHA-256代码挑战的授权码
- 会话 --随机令牌,24小时过期,自动清理
- 速率限制 -Auth(需要50次/15分钟)、API(需要300次/15分)、MCP(需要60次/min)
- 头盔 --具有严格CSP的HTTP安全标头
- 路径遍历 --通过路径净化阻止
- Cookie --httpOnly,安全,SameSite=Lax
贡献
欢迎投稿!请打开问题或提交拉取请求。
许可证
麻省理工学院
