使用说明
Synology MCP服务器
A. 模型上下文协议 Synology NAS设备的MCP服务器。通过Streamable HTTP传输提供对NAS运行状况、存储、系统信息和电源管理的实时访问-- 37工具 跨越三个权限级别。
建于 FastMCP, py同义词api,还有一个习惯 DirectApiClient 用于原始SYNO.*API访问。
特性
- 多NAS支持 --从单个服务器监视多个Synology NAS单元
- 37工具 --23健康+7文件浏览+5文件管理+2电源管理
- 混合后端 --py-synologydsm-api用于稳定的健康指标,直接HTTP客户端用于高级诊断
- 三个权限级别 --健康(默认)、读取、写入——由一个环境变量控制
- 原生流式HTTP --无需代理,直接从Claude Code连接
- 单个Docker容器 --Python基础薄弱,依赖性最小
建筑
服务器使用 混合后端 合并两个API客户端:
-
py同义词api --用于核心Synology DSM数据(系统信息、存储、利用率、共享、网络)的成熟、经过充分测试的库。为10个原始健康工具供电。
-
DirectApiClient -轻量级HTTP客户端,直接根据DSM web API进行身份验证并调用原始
SYNO.*端点。提供对py-synologydsm-api未涵盖的api的访问:SSD缓存、UPS、NFS导出、服务、硬件传感器、日志、用户帐户等。包括30秒响应缓存和自动会话续订。
两个客户端在启动时连接。如果直接客户端无法初始化,核心运行状况工具将继续工作-直接API工具将返回一条明确的错误消息。这 get_health_summary 该工具使用两个后端:py-synologydsm-api用于基本指标,DirectApiClient用于增强SSD缓存、UPS和NFS警报(如果不可用,则使用优雅的回退)。
快速开始
Docker(推荐)
# Pull the image
docker pull ghcr.io/lefty3382/synology-mcp:latest
# Run with environment variables
docker run -d \
--name synology-mcp \
-p 8485:8485 \
-e SYNOLOGY_TANK_HOST=10.0.40.2 \
-e SYNOLOGY_TANK_PORT=5001 \
-e SYNOLOGY_TANK_USERNAME=mcp-service \
-e SYNOLOGY_TANK_PASSWORD=yourpassword \
-e MCP_PORT=8485 \
-e MCP_PERMISSION_TIER=health \
ghcr.io/lefty3382/synology-mcp:latest
克劳德代码
claude mcp add synology --transport http http://YOUR_HOST:8485/mcp --scope user
配置
所有配置都是通过环境变量进行的。复制 .env.example 到 .env 并填写你的价值观。
NAS配置
每个NAS都配置了 SYNOLOGY_<NAME>_* 前缀。根据需要添加尽可能多的NAS单元:
SYNOLOGY_TANK_HOST=10.0.40.2
SYNOLOGY_TANK_PORT=5001
SYNOLOGY_TANK_USERNAME=mcp-service
SYNOLOGY_TANK_PASSWORD=secret
SYNOLOGY_DOZER_HOST=10.0.40.3
SYNOLOGY_DOZER_PORT=5001
SYNOLOGY_DOZER_USERNAME=mcp-service
SYNOLOGY_DOZER_PASSWORD=secret
服务器设置
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_PORT |
8485 |
MCP端点的HTTP端口 |
MCP_PERMISSION_TIER |
health |
工具层: health, read,或 write |
权限级别
| 层级 | 工具 | 用例 |
|---|---|---|
health (默认) |
23个工具-10个核心健康+13个直接API诊断 | 基础设施监控 |
read |
30个工具--健康状况+7个文件浏览工具 | +浏览NAS内容 |
write |
37个工具——读取+5个文件管理+2个电源管理 | +完整文件+电源管理 |
通过设置更改层 MCP_PERMISSION_TIER 并重新启动。
工具
健康层——核心工具(始终可用)
| 工具 | 说明 |
|---|---|
list_nas |
列出已配置的NAS单元及其连接状态 |
get_system_info |
DSM版本、型号、正常运行时间、序列号、温度 |
get_utilization |
CPU负载、RAM使用率、网络I/O |
get_volumes |
卷容量、使用率%、RAID状态 |
get_disks |
带状态、温度的磁盘列表 |
get_smart_status |
每个磁盘的SMART运行状况 |
get_storage_pools |
存储池配置、RAID类型 |
get_shares |
共享文件夹列表 |
get_network |
网络接口、DNS、网关 |
get_health_summary |
使用SSD缓存、UPS和NFS警报聚合运行状况 |
运行状况层-直接API工具(始终可用)
这些工具使用 DirectApiClient 查询原始SYNO.*端点,以获取无法通过py-synologydsm api获得的数据。
存储诊断
| 工具 | 说明 |
|---|---|
get_disk_details |
全磁盘硬件信息——型号、序列号、供应商、固件、分配角色、托盘状态 |
get_ssd_cache |
SSD缓存池状态和每个磁盘的运行状况 |
get_storage_pool_members |
具有RAID类型和清理/重建状态的每个池磁盘成员资格 |
服务与配置
| 工具 | 说明 |
|---|---|
get_nfs_exports |
具有允许的主机和权限的NFS共享文件夹 |
get_services_status |
NFS、SMB、SSH、rsync、SNMP的运行状态 |
硬件和电源
| 工具 | 说明 |
|---|---|
get_ups_status |
UPS型号、电池电量、运行时间、NUT配置 |
get_hardware_info |
风扇速度、电源恢复、蜂鸣声控制 |
日志和通知
| 工具 | 说明 |
|---|---|
get_recent_logs |
具有严重性/关键字过滤的系统日志 |
get_notifications |
DSM通知配置和警报历史记录 |
访问和用户
| 工具 | 说明 |
|---|---|
get_active_connections |
已连接的SMB/NFS/FTP客户端 |
get_users |
本地用户帐户和组成员资格 |
维护与发现
| 工具 | 说明 |
|---|---|
get_update_status |
可用的DSM更新和当前版本 |
discover_apis |
列出NAS上所有可用的SYNO.*API终结点 |
读取层
| 工具 | 说明 |
|---|---|
list_files |
浏览目录——包含名称、大小、类型、修改日期的文件/文件夹 |
get_file_info |
具有所有权和权限的文件/文件夹元数据 |
list_shared_folders |
具有卷状态的顶级File Station共享文件夹 |
search_files |
在目录中按名称模式搜索文件(异步) |
get_file_content |
读取文件的文本内容(仅限分配的扩展名) |
compare_folders |
比较两个目录的内容——仅在A、仅在B、不匹配 |
get_folder_size |
目录的递归大小和文件计数(异步) |
写入层
文件管理
| 工具 | 说明 |
|---|---|
create_folder |
创建新目录(可选择创建父目录) |
rename |
重命名文件或文件夹 |
move |
将文件或文件夹移动到新位置(大型操作异步) |
copy |
将文件或文件夹复制到新位置(大型操作异步) |
delete |
删除文件或文件夹(确认门控,可选递归) |
电源管理
| 工具 | 说明 |
|---|---|
shutdown_nas |
优雅地关闭NAS(确认门控) |
reboot_nas |
优雅地重新启动NAS(确认门控) |
两种电动工具都需要 confirm=True 执行。如果没有它,它们会返回动作的预览。这 nas 参数是必需的--您不能一次关闭或重新启动所有NAS单元。
NAS身份验证
创建一个 mcp-service 每个Synology NAS上的本地用户:
- DSM>控制面板>用户和组>创建
- 用户名:
mcp-service - 对于健康层:可能需要管理员组成员资格(DSM存储/SMART API通常需要管理员)
- 限制应用程序权限以拒绝除DSM之外的所有内容
发展
# Clone and set up
git clone https://github.com/lefty3382/synology-mcp.git
cd synology-mcp
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
# Copy and edit config
cp .env.example .env
# Run locally
python -m synology_mcp
许可证
麻省理工学院
