Skip to main content
Glama
mirkcale

sync2nas-mcp

by mirkcale

sync2nas-mcp

MCP服务器,用于同步本地电脑和远程 NAS的文件(通过SMB/CIFS协议)。

功能特性

  • 文件同步: 支持三种同步模式(本地→NAS、NAS→本地、双向同步)

  • 自定义路径映射: 通过 customPattern 灵活控制文件上传的目录结构

  • 文件过滤: 通过 fileFilter 只同步指定文件名

  • 文件比较: 智能检测文件差异

  • 文件传输: 支持单个文件的上传和下载

  • 目录浏览: 列出NAS上的文件和文件夹

  • 自动创建目录: 上传时自动创建远程目录

  • 动态切换共享: 支持运行时临时切换SMB共享文件夹

Related MCP server: Synology MCP Server

安装

# 克隆项目
git clone <repository-url>
cd auto_resync

# 安装依赖
pnpm install

# 构建项目
pnpm run build

配置

1. 环境变量配置

复制 .env.example.env 并填写配置:

cp .env.example .env

编辑 .env 文件:

# NAS连接配置
SMB_HOST=192.168.1.100
SMB_PORT=445
SMB_SHARE=共享文件夹名称
SMB_USERNAME=your_username
SMB_PASSWORD=your_password
SMB_DOMAIN=

# 同步配置
DEFAULT_SYNC_MODE=local-to-nas
DEFAULT_LOCAL_PATH=C:\Users\yourname\Documents
DEFAULT_REMOTE_PATH=/
DELETE_ORPHANED=false

# 忽略模式(逗号分隔)
IGNORE_PATTERNS=.DS_Store,Thumbs.db,*.tmp,*.temp,.git,node_modules

# 自定义路径映射(可选)
CUSTOM_PATTERN=

# 文件过滤(只同步指定文件名,逗号分隔)
FILE_FILTER=

2. Claude Desktop 配置

编辑 %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "sync2nas": {
      "command": "node",
      "args": ["C:\\path\\to\\auto_resync\\dist\\index.js"],
      "env": {
        "SMB_HOST": "192.168.1.100",
        "SMB_SHARE": "共享文件夹名称",
        "SMB_USERNAME": "your_username",
        "SMB_PASSWORD": "your_password"
      }
    }
  }
}

3. 使用 MCP Inspector 调试

npx @modelcontextprotocol/inspector node dist/index.js

然后打开 http://127.0.0.1:6274 进行测试。

使用方法

可用工具

1. sync-files

同步本地文件夹到NAS或从NAS同步到本地。

参数:

参数

类型

必填

默认值

说明

localPath

string

-

本地文件夹路径

remotePath

string

/

NAS上的远程路径

share

string

-

SMB共享名称(不传则使用默认配置)

syncMode

string

local-to-nas

同步模式:local-to-nasnas-to-localbidirectional

customPattern

string

-

自定义目录映射

fileFilter

string[]

-

只同步指定文件名

ignorePatterns

string[]

[]

忽略的文件模式

deleteOrphaned

boolean

false

是否删除目标端孤立文件

customPattern 规则:

customPattern 只定义目录映射,文件名会自动附加。支持的占位符:

  • {1} - 本地路径的第1层目录

  • {2} - 本地路径的第2层目录

  • {3} - 本地路径的第3层目录

  • {n} - 本地路径的第n层目录

  • {-1} - 文件所在的父目录名

示例:

假设本地结构为 面试相关/1/2/3/番茄钟.xlsx

customPattern

远程路径

说明

{1}/{3}

/1/3/番茄钟.xlsx

保留第1、3层目录

{1}/{-1}

/1/3/番茄钟.xlsx

保留第1层 + 父目录

{3}

/3/番茄钟.xlsx

只保留第3层目录

(空)

/番茄钟.xlsx

直接放根目录

2. compare-files

比较本地文件和NAS文件的差异。

参数:

参数

类型

必填

说明

localPath

string

本地文件夹路径

remotePath

string

NAS上的远程路径(默认 /

ignorePatterns

string[]

忽略的文件模式

3. upload-file

上传单个文件到NAS。

参数:

参数

类型

必填

说明

localPath

string

本地文件路径

remotePath

string

NAS上的目标路径

4. download-file

从NAS下载单个文件。

参数:

参数

类型

必填

说明

remotePath

string

NAS上的文件路径

localPath

string

本地目标路径

5. list-remote-files

列出NAS上的文件和文件夹。

参数:

参数

类型

必填

说明

remotePath

string

要列出的远程路径(默认 /

recursive

boolean

是否递归列出子目录

6. test-connection

测试NAS连接状态,无需参数。

7. get-time

获取当前时间,无需参数。

可用资源

  • workbuddy-mcp://status - 服务器状态信息

  • workbuddy-mcp://config - 同步配置信息

  • workbuddy-mcp://help - 帮助文档

可用提示模板

  • quick-sync - 快速同步本地文件夹到NAS

  • compare-and-report - 比较本地和NAS文件差异并生成报告

  • smart-sync - 智能同步:自动检测并同步有变化的文件

  • backup-to-nas - 备份本地重要文件夹到NAS

使用示例

示例1:同步文件夹到NAS根目录

请同步 C:\Users\lyy84\Desktop\面试相关 到NAS

示例2:使用自定义路径映射

请同步 C:\Users\lyy84\Desktop\面试相关 到NAS
customPattern 设为 {1}/{3}

这样 1/2/3/番茄钟.xlsx 会上传到 /1/3/番茄钟.xlsx

示例3:只同步指定文件

请同步 C:\Users\lyy84\Desktop\面试相关 到NAS
只同步 番茄钟.xlsx 这个文件

示例4:切换共享文件夹同步

请同步 C:\Users\lyy84\Desktop\文件 到NAS,共享文件夹用 "备份"

示例5:查看同步结果

同步完成后会返回统计信息:

{
  "success": true,
  "message": "同步完成",
  "share": "临时文件",
  "stats": {
    "totalFiles": 2,
    "uploaded": 2,
    "downloaded": 0,
    "deleted": 0,
    "skipped": 0,
    "errors": 0,
    "duration": "0.15秒"
  }
}

项目结构

auto_resync/
├── src/
│   ├── index.ts              # MCP服务器入口
│   ├── constants.ts          # 常量定义(MCP_SERVER_NAME等)
│   ├── types.ts              # 类型定义(SmbConfig, SyncConfig等)
│   ├── tools/
│   │   └── sync.ts           # 工具定义(sync-files, compare-files等)
│   ├── resources/
│   │   ├── config.ts         # MCP资源定义
│   │   └── prompts.ts        # 提示模板定义
│   └── utils/
│       ├── smb-client.ts     # SMB连接管理(含@EnsureConnected装饰器)
│       ├── file-sync.ts      # 文件同步逻辑
│       └── config.ts         # 配置加载
├── test/
│   └── server.test.ts        # 测试文件
├── dist/                     # TypeScript编译输出
├── .env                      # 环境变量配置(不提交到仓库)
├── .env.example              # 环境变量示例
├── package.json
├── tsconfig.json
├── vitest.config.ts          # 测试配置
└── README.md

开发命令

# 构建
pnpm run build

# 运行测试
pnpm test

# 启动MCP Inspector调试
npx @modelcontextprotocol/inspector node dist/index.js

注意事项

  1. 安全性: 密码等敏感信息通过 .env 配置,不要提交到代码仓库

  2. 网络: 确保本地电脑和NAS在同一网络中

  3. 权限: 确保SMB用户有足够权限访问共享文件夹

  4. SMB协议: 路径使用正斜杠 /,代码会自动处理Windows反斜杠

  5. Synology NAS: readdir 在访问共享根目录时可能有问题,local-to-nas 模式会自动跳过

故障排除

连接失败

  • 检查NAS地址和端口是否正确

  • 确认用户名和密码是否正确

  • 检查防火墙是否阻止了SMB连接(端口445)

  • 确认NAS的SMB服务已启用

同步失败

  • 检查本地路径是否存在

  • 确认远程路径是否有写入权限

  • 查看MCP Inspector Console中的错误日志

许可证

MIT License

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables KUIK Agent to access on-premise SMB/CIFS shares on a Windows Server using the employee's own credentials, enforcing live ACLs. Supports file operations such as list, read, write, search, move, copy, delete, and upload/download without mounting or duplicating data.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mirkcale/sync_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server