Synology MCP服务器
A. 模型上下文协议 Synology NAS设备的MCP服务器。通过Streamable HTTP传输提供对NAS运行状况、存储、系统信息和电源管理的实时访问-- 37工具 跨越三个权限级别。
特性
- 多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__* 前缀。根据需要添加尽可能多的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
许可证
麻省理工学院