快速使用文档见:docs/USAGE.md
按项目隔离的文件平台(FastAPI + FastMCP),支持:
- 项目隔离文件管理
- 小文件上传/下载/列表/删除
- 大文件分片上传(init/chunk/complete/abort)
- MCP 工具暴露(仅通过 API 调用)
- filebrowser Docker 前端
- Python
3.13 - 依赖管理:
uv - 数据库:PostgreSQL(默认 Docker)
- 前端:
filebrowser/filebrowser(Docker)
project-file-platform/
api/
mcp-server/
web/
config/
storage/
src/
tests/
plan/
- 安装依赖
uv sync- 启动 API
uv run pfp-api如端口冲突可改本地端口:API_PORT=18000 uv run pfp-api
- 启动 MCP(另一个终端)
uv run pfp-mcp默认以 streamable-http 方式启动在 http://localhost:8001/mcp。
如需 stdio 模式可使用:MCP_TRANSPORT=stdio uv run pfp-mcp
- 运行测试
uv run pytest -qdocker compose up --build如有端口冲突,可通过 .env 覆盖宿主机端口映射(见 docs/USAGE.md)。
服务端口:
- API:
http://localhost:8000 - MCP:
http://localhost:8001/mcp - filebrowser:
http://localhost:8080 - PostgreSQL:
localhost:5432
- 数据库迁移:
migrations/*.sql+schema_migrations版本记录 - 启动时自动迁移(可关):
postgres.run_migrations_on_startup - 日志落盘与轮转:
logs/api.log、logs/mcp.log - CI:
.github/workflows/ci.yml(自动测试 + 镜像构建)
手动执行迁移:
uv run pfp-migrate主配置文件:config/app.toml
关键项:
[projects]:project_id -> root_path[storage].max_file_size_mb: 单文件大小上限[storage].chunk_size_mb: 分片大小[mcp].max_inline_download_mb: MCP 下载内联返回上限[postgres].dsn: PostgreSQL 连接串[postgres].run_migrations_on_startup: 启动时是否自动执行迁移[service].log_dir: 日志目录[service].log_json: 是否输出 JSON 日志[service].log_file_max_mb: 单日志文件大小上限(MB)[service].log_backup_count: 轮转保留文件数[service].log_to_stdout: 是否同时输出到标准输出
环境变量覆盖:
APP_CONFIG_PATHAPP_STORAGE_MAX_FILE_SIZE_MBAPP_STORAGE_CHUNK_SIZE_MBAPP_MCP_MAX_INLINE_DOWNLOAD_MBAPP_POSTGRES_DSNAPP_POSTGRES_RUN_MIGRATIONS_ON_STARTUPAPP_SERVICE_LOG_LEVELAPP_SERVICE_LOG_DIRAPP_SERVICE_LOG_JSONAPP_SERVICE_LOG_FILE_MAX_MBAPP_SERVICE_LOG_BACKUP_COUNTAPP_SERVICE_LOG_TO_STDOUTAPP_MIGRATIONS_DIR
GET /healthGET /api/v1/projectsGET /api/v1/filesPOST /api/v1/files/uploadGET /api/v1/files/downloadDELETE /api/v1/filesPOST /api/v1/files/upload/initPUT /api/v1/files/upload/chunkPOST /api/v1/files/upload/completePOST /api/v1/files/upload/abort
统一响应:
- 成功:
{"ok": true, "data": ...} - 失败:
{"ok": false, "error": {"code": "...", "message": "..."}}
list_projectslist_filesupload_fileupload_file_chunkeddownload_filedelete_file
download_file 内联返回上限默认 2MB,超限返回 MCP_PAYLOAD_TOO_LARGE。