Synology MCP服务器
通过以下方式全面管理Synology NAS 模型上下文协议.控制文件操作、下载、备份、Docker容器、照片、虚拟机、快照等,所有这些都可以从Claude或任何兼容MCP的客户端进行。
特性
- 87工具 横跨15个服务类别
- 多NAS支持 --从单个服务器管理多达9个NAS单元
- DSM 7和DSM 6 兼容性
- 安全连接 --带有可选证书验证的HTTPS
- 双因素认证 --每个NAS的OTP代码支持
工具类别
| 类别 | 工具 | 描述 |
|---|---|---|
| 文件管理 | 16 | 列表、搜索、创建文件夹、复制/移动、删除、压缩、共享链接、文件树 |
| 系统信息 | 6 | DSM信息、CPU/RAM利用率、存储、网络、服务、运行状况仪表板 |
| 下载站 | 8 | 创建下载(URL/磁铁)、暂停/恢复、删除、统计、配置 |
| 云同步 | 5 | 列出同步任务、状态、暂停/恢复、日志 |
| 备份(HyperBackup) | 5 | 列出任务、状态、运行、取消、完整性检查 |
| Docker | 8 | 列出容器/映像/网络、启动/停止/重启、日志、资源使用情况 |
| 任务计划程序 | 5 | 列出计划的任务、信息、运行、启用/禁用、输出 |
| 照片 | 4 | 列出相册、浏览、搜索、相册项目 |
| 软件包 | 4 | 列出已安装的软件包、启动/停止、软件包信息 |
| 用户和组 | 4 | 列出用户/组、用户信息、组成员 |
| 共享文件夹 | 3 | 列出共享、文件夹信息、权限 |
| 虚拟化(VMM) | 5 | 列出虚拟机、信息、电源开/关、正常关机 |
| 快照 | 4 | 列出快照、创建、删除、复制任务 |
| 活动备份 | 6 | 列出任务/设备、信息、日志、还原点 |
| 系统 | 4 | 列出连接、测试连接、断开连接、功能 |
安装
先决条件
- Python 3.10+
- 一个或多个配备DSM 6.x或7.x的Synology NAS设备
- 每个NAS上都有一个管理员(或委派)帐户
从源代码安装(推荐)
带有Homebrew Python的macOS需要一个虚拟环境:
git clone https://github.com/DRVBSS/dk-synology-mcp.git
cd dk-synology-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install .这 .venv 文件夹已在 .gitignore 并且不会承诺。
在开发模式下安装
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"验证安装
# With venv activated:
synology-mcp --help
# Or without activating:
.venv/bin/synology-mcp --help配置
步骤1:查找Synology NAS连接详细信息
在配置服务器之前,请从每个NAS收集以下详细信息:
- 主机/IP:您的NAS IP地址(例如。,
192.168.1.100).在DSM的控制面板>网络>网络接口下找到它。 - 端口:默认值为
5000(HTTP)或5001(HTTPS)。在“控制面板”>“登录门户”>“DSM”选项卡中找到它。 - 用户名/密码:管理员帐户,或具有委派管理员权限的用户。为了安全起见,请考虑创建一个专用服务帐户:
- 转到控制面板>用户和组>创建 - 给它起个名字 mcp-service - 将其添加到 administrators 组(大多数API访问都需要) - 给它一个强密码
- 超文本传输安全协议:设置
SECURE=true和PORT=5001HTTPS(推荐)。集CERT_VERIFY=false如果使用自签名证书(在家庭NAS上很常见)。 - DSM版本:使用
7适用于DSM 7.x或6对于DSM 6.x,请检查“控制面板”>“信息中心”。
步骤2:创建.env文件
cp .env.example .env编辑 .env 使用您的NAS详细信息:
单NAS设置
# === Your NAS ===
SYNOLOGY_NAS1_NAME=ds923
SYNOLOGY_NAS1_HOST=192.168.1.100
SYNOLOGY_NAS1_PORT=5001
SYNOLOGY_NAS1_USERNAME=mcp-service
SYNOLOGY_NAS1_PASSWORD=your-strong-password
SYNOLOGY_NAS1_SECURE=true
SYNOLOGY_NAS1_CERT_VERIFY=false
SYNOLOGY_NAS1_DSM_VERSION=7
SYNOLOGY_NAS1_OTP_CODE=
# === Server Settings ===
SYNOLOGY_DEFAULT_NAS=ds923
SYNOLOGY_LOG_LEVEL=INFO多NAS设置
添加数字递增的附加NAS单元(最多9个):
# === Primary NAS ===
SYNOLOGY_NAS1_NAME=ds923
SYNOLOGY_NAS1_HOST=192.168.1.100
SYNOLOGY_NAS1_PORT=5001
SYNOLOGY_NAS1_USERNAME=mcp-service
SYNOLOGY_NAS1_PASSWORD=password-for-ds923
SYNOLOGY_NAS1_SECURE=true
SYNOLOGY_NAS1_CERT_VERIFY=false
SYNOLOGY_NAS1_DSM_VERSION=7
# === Secondary NAS ===
SYNOLOGY_NAS2_NAME=ds517
SYNOLOGY_NAS2_HOST=192.168.1.101
SYNOLOGY_NAS2_PORT=5001
SYNOLOGY_NAS2_USERNAME=mcp-service
SYNOLOGY_NAS2_PASSWORD=password-for-ds517
SYNOLOGY_NAS2_SECURE=true
SYNOLOGY_NAS2_CERT_VERIFY=false
SYNOLOGY_NAS2_DSM_VERSION=7
# === Server Settings ===
SYNOLOGY_DEFAULT_NAS=ds923
SYNOLOGY_LOG_LEVEL=INFO双重认证
如果NAS启用了2FA,请提供当前的OTP代码:
SYNOLOGY_NAS1_OTP_CODE=123456注意:OTP代码很快过期。为了持续使用MCP,请创建一个没有2FA的专用服务帐户。
步骤3:测试连接
source .venv/bin/activate
synology-mcp如果启动时没有错误,则服务器已准备就绪。按 Ctrl+C 阻止它。
Claude桌面设置
步骤1:找到配置文件
Claude Desktop MCP配置文件位于:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json
如果文件还不存在,请创建它。
步骤2:添加Synology MCP服务器
打开配置文件并添加(或合并到) mcpServers 部分。您必须使用 完全绝对路径 到 synology-mcp venv中的二进制文件:
{
"mcpServers": {
"synology": {
"command": "/full/path/to/dk-synology-mcp/.venv/bin/synology-mcp",
"env": {
"SYNOLOGY_NAS1_NAME": "ds923",
"SYNOLOGY_NAS1_HOST": "192.168.1.100",
"SYNOLOGY_NAS1_PORT": "5001",
"SYNOLOGY_NAS1_USERNAME": "mcp-service",
"SYNOLOGY_NAS1_PASSWORD": "your-password",
"SYNOLOGY_NAS1_SECURE": "true",
"SYNOLOGY_NAS1_CERT_VERIFY": "false",
"SYNOLOGY_NAS1_DSM_VERSION": "7",
"SYNOLOGY_DEFAULT_NAS": "ds923"
}
}
}
}对于多NAS,在同一NAS中添加第二个NAS变量 env 块:
{
"mcpServers": {
"synology": {
"command": "/full/path/to/dk-synology-mcp/.venv/bin/synology-mcp",
"env": {
"SYNOLOGY_NAS1_NAME": "ds923",
"SYNOLOGY_NAS1_HOST": "192.168.1.100",
"SYNOLOGY_NAS1_PORT": "5001",
"SYNOLOGY_NAS1_USERNAME": "mcp-service",
"SYNOLOGY_NAS1_PASSWORD": "password-for-ds923",
"SYNOLOGY_NAS1_SECURE": "true",
"SYNOLOGY_NAS1_CERT_VERIFY": "false",
"SYNOLOGY_NAS1_DSM_VERSION": "7",
"SYNOLOGY_NAS2_NAME": "ds517",
"SYNOLOGY_NAS2_HOST": "192.168.1.101",
"SYNOLOGY_NAS2_PORT": "5001",
"SYNOLOGY_NAS2_USERNAME": "mcp-service",
"SYNOLOGY_NAS2_PASSWORD": "password-for-ds517",
"SYNOLOGY_NAS2_SECURE": "true",
"SYNOLOGY_NAS2_CERT_VERIFY": "false",
"SYNOLOGY_NAS2_DSM_VERSION": "7",
"SYNOLOGY_DEFAULT_NAS": "ds923"
}
}
}
}重要提示:
- 替换
/full/path/to/dk-synology-mcp使用克隆仓库的实际路径。 - 如果您已经配置了其他MCP服务器,请合并
"synology"进入你现有的mcpServersobject——不要替换整个文件。 - 使用venv二进制文件的完整路径(
.venv/bin/synology-mcp),不仅synology-mcp,因为Claude Desktop不会激活您的shell配置文件或venv。
步骤3:重新启动克劳德桌面
完全退出Claude Desktop并重新打开。Synology MCP服务器将出现在MCP工具列表中(查找聊天输入底部的锤子图标)。
步骤4:验证它是否有效
试着问克劳德:
- “测试我的Synology NAS连接”
- “显示我的NAS运行状况仪表板”
- “列出/volume1/homes中的文件”
- “我的NAS上正在运行哪些Docker容器?”
使用Docker
构建和运行(stdio传输)
docker compose up -d手动构建和运行
docker build -t synology-mcp .
docker run --env-file .env -i synology-mcpSSE传输(网络可访问)
取消注释中的相关行 docker-compose.yml,或运行:
docker run --env-file .env -p 8080:8080 synology-mcp --transport sse --port 8080多NAS使用情况
每个工具都接受一个可选 nas 参数。如果省略,则使用默认NAS。
"List files on ds923" → nas parameter not needed (it's the default)
"List files on ds517" → nas="ds517"
"Show VMs on ds923" → nas parameter not needed
"Docker containers on ds517" → nas="ds517"使用 synology_list_connections 查看所有已配置的NAS单元及其活动会话,或 synology_test_connection 以验证连接。
项目结构
dk-synology-mcp/
├── pyproject.toml
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── README.md
└── src/
└── synology_mcp/
├── __init__.py
├── server.py # FastMCP server entry point
├── utils/
│ ├── config.py # Environment config loader
│ ├── connection.py # Multi-NAS ConnectionManager
│ └── formatters.py # Response formatting helpers
└── tools/
├── filestation.py # File management (16 tools)
├── sysinfo.py # System monitoring (6 tools)
├── downloadstation.py # Downloads (8 tools)
├── cloudsync.py # Cloud Sync (5 tools)
├── backup.py # HyperBackup (5 tools)
├── docker_tools.py # Docker/Container (8 tools)
├── task_scheduler.py # Scheduled tasks (5 tools)
├── photos.py # Synology Photos (4 tools)
├── package.py # Package management (4 tools)
├── users_groups.py # Users & groups (4 tools)
├── shares.py # Shared folders (3 tools)
├── virtualization.py # VMM (5 tools)
├── snapshot.py # Snapshots (4 tools)
├── active_backup.py # Active Backup (6 tools)
└── system_tools.py # NAS connections (4 tools)故障排除
“找不到命令:synology mcp”
你没有用venv。要么先激活它(source .venv/bin/activate)或使用完整路径: .venv/bin/synology-mcp.
“连接被拒绝”或超时错误
- 验证您的NAS IP是否可访问:
ping 192.168.1.100 - 验证端口是否打开:
curl -k https://192.168.1.100:5001 - 检查是否在“控制面板”>“登录门户”中启用了DSM的HTTP/HTTPS服务
- 如果使用HTTPS和自签名证书,请确保
CERT_VERIFY=false
“权限被拒绝”或“凭据无效”
- 仔细检查您的用户名和密码
.env或Claude桌面配置 - 确保用户帐户位于
administrators群组 - 如果帐户上启用了2FA,请提供
OTP_CODE或使用没有2FA的服务帐户
Claude Desktop不显示Synology工具
- 确保
command路径在claude_desktop_config.json是 完全绝对路径 到.venv/bin/synology-mcp - 退出并完全重新启动Claude Desktop(而不仅仅是关闭窗口)
- 检查克劳德桌面日志:
~/Library/Logs/Claude/(macOS)
依赖项
- 主控程序 --基于FastMCP的模型上下文协议SDK
- 同义词api --Synology DSM API的Python包装器
- 皮丹提克 --输入验证
- python dotenv --环境变量加载
- 树库 --用于文件树可视化的树数据结构
SSL主机名不匹配错误
如果您在通过HTTPS连接时遇到SSL错误,请使用您的NAS主机名(例如。, mynas.synology.me)而不是原始IP地址 SYNOLOGY_NAS1_HOSTDSM生成的自签名证书绑定到主机名,而不是IP。
更新日志
v0.3.0--运行时错误修复和健壮性(2026-03-02)
修复了在实际NAS管理会话中发现的错误。每个工具都针对运行DSM 7的实时DS923+进行了测试,揭示了只有在运行时才会出现的问题。
任务处理-- _extract_taskid() 助手(filestation.py):
synology api的任务启动方法(start_delete, start_copy_move, start_compress, start_extract)返回一个普通字符串,如下所示 "You can now check the status of request with get_delete_status() , task id is: FileStation_xxx" 当 interactive_output=True (默认设置)。前面的代码需要一个带 "taskid" 键,导致所有四个操作失败。添加 _extract_taskid() 使用正则表达式解析来处理这两种响应格式。适用于所有任务处理程序:删除、复制/移动、压缩、提取。
共享文件夹-- SYNO.Core.Share 按键错误(shares.py):
Share.list_folders() 在synology中,api失败 KeyError('SYNO.Core.Share') 因为API没有在会话的 core_list DSM 7。三个共享工具(synology_shared_folders, synology_shared_folder_info, synology_shared_folder_permissions)现在回到直接 request_data() 发生KeyError时使用硬编码API路径调用。
其他修复:
system_tools.py—synology_list_connections和synology_server_capabilities迭代字典键而不是值(config.nas_configs→config.nas_configs.values())filestation.py—synology_file_tree现在使用treelib.Tree随着tree.show(stdout=False)用于正确的ASCII树输出;添加treelib>=1.6.0作为项目依赖filestation.py—synology_compress使用过的format参数(Python内置shadow)而不是正确的compress_format- Claude Desktop配置示例现在使用通用路径,而不是硬编码的用户路径
v0.2.0-API方法名称审核(2026-03-02)
修复了13个工具文件中的所有synology api方法调用。这 synology-api Python包使用与DSM API命名约定不同的非显而易见的方法名称。现在,每个工具都使用正确的底层方法,并通过内省进行验证 synology-api v0.8.2。
文件已更改(已修复46个方法调用):
system_tools.py—get_info()到get_system_info()sysinfo.py--8个修复:get_dsm_info到dsm_info,get_system_utilization到get_all_system_utilization,get_storage_info到storage,get_all_service到services_statusdocker_tools.py--6个修复:get_containers到containers,restart_container替换为stop+start(synology api中不重新启动),get_container_log到get_logs,get_images到downloaded_images,get_networks到network,get_resources到container_resourcescloudsync.py--4个修复:get_connection_status到get_connection_information,pause_connection到connection_pause,resume_connection到connection_resume,get_connection_log到get_connection_logsvirtualization.py--5个修复:get_guest_list到get_images_list,get_guest_info到get_specific_vm_info,poweron_guest到vm_power_on,poweroff_guest到vm_force_power_off,shutdown_guest到vm_shut_downshares.py--3个修复:get_share_list到list_folders,get_share_info到get_folder,get_share_permission到get_folder_permissionsusers_groups.py--3个修复:get_list_user到get_users,get_list_group到get_groups,get_group_member到get_usersactive_backup.py--5个修复:list_task_list到list_tasks,get_task_info到task_history,list_device_list到list_device_transfer_size,get_device_info到list_device_transfer_size,list_restore_points到result_detailspackage.py--4个修复:packages_installed到list_installed,package_get到get_package,和程序包启动/停止现在通过直接调用DSM APIrequest_data()(synology api没有启动/停止方法)photos.py--4个修复:get_albums到list_albums,get_items到list_item_in_folders,search到list_search_filters,get_album_items到get_albumsnapshot.py--2个修复:delete_snapshot到delete_snapshots,list_replication_tasks到list_replication_planstask_scheduler.py--1修复:get_task_result到get_task_resultsbackup.py--1修复:backup_task_result到integrity_check_run
其他修复:
- 修正了模块级ConnectionManager代理模式
_active_conn_mgr变量 - 通过使用NAS主机名而不是IP地址修复了SSL主机名不匹配的问题
许可证
麻省理工学院
