Synology Server
БесплатноНе проверенComprehensive Synology NAS management through MCP, enabling file operations, downloads, backups, Docker, photos, VMs, snapshots, and more across up to 9 NAS uni
Описание
Comprehensive Synology NAS management through MCP, enabling file operations, downloads, backups, Docker, photos, VMs, snapshots, and more across up to 9 NAS units.
README
Comprehensive Synology NAS management through the Model Context Protocol. Control file operations, downloads, backups, Docker containers, photos, virtual machines, snapshots, and more — all from Claude or any MCP-compatible client.
Features
- 87 tools across 15 service categories
- Multi-NAS support — manage up to 9 NAS units from a single server
- DSM 7 and DSM 6 compatibility
- Secure connections — HTTPS with optional certificate verification
- Two-factor auth — OTP code support per NAS
Tool Categories
| Category | Tools | Description |
|---|---|---|
| File Management | 16 | List, search, create folders, copy/move, delete, compress, share links, file tree |
| System Info | 6 | DSM info, CPU/RAM utilization, storage, network, services, health dashboard |
| Download Station | 8 | Create downloads (URL/magnet), pause/resume, delete, stats, config |
| Cloud Sync | 5 | List sync tasks, status, pause/resume, logs |
| Backup (HyperBackup) | 5 | List tasks, status, run, cancel, integrity check |
| Docker | 8 | List containers/images/networks, start/stop/restart, logs, resource usage |
| Task Scheduler | 5 | List scheduled tasks, info, run, enable/disable, output |
| Photos | 4 | List albums, browse, search, album items |
| Packages | 4 | List installed packages, start/stop, package info |
| Users & Groups | 4 | List users/groups, user info, group members |
| Shared Folders | 3 | List shares, folder info, permissions |
| Virtualization (VMM) | 5 | List VMs, info, power on/off, graceful shutdown |
| Snapshots | 4 | List snapshots, create, delete, replication tasks |
| Active Backup | 6 | List tasks/devices, info, logs, restore points |
| System | 4 | List connections, test connectivity, disconnect, capabilities |
Installation
Prerequisites
- Python 3.10+
- One or more Synology NAS units with DSM 6.x or 7.x
- An admin (or delegated) account on each NAS
Install from source (recommended)
macOS with Homebrew Python requires a virtual environment:
git clone https://github.com/DRVBSS/dk-synology-mcp.git
cd dk-synology-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install .
The .venv folder is already in .gitignore and won't be committed.
Install in development mode
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
Verify installation
# With venv activated:
synology-mcp --help
# Or without activating:
.venv/bin/synology-mcp --help
Configuration
Step 1: Find your Synology NAS connection details
Before configuring the server, gather these details from each NAS:
- Host/IP: Your NAS IP address (e.g.,
192.168.1.100). Find it in DSM under Control Panel > Network > Network Interface. - Port: Default is
5000(HTTP) or5001(HTTPS). Find it in Control Panel > Login Portal > DSM tab. - Username/Password: An admin account, or a user with delegated admin permissions. For security, consider creating a dedicated service account:
- Go to Control Panel > User & Group > Create
- Name it something like
mcp-service - Add it to the
administratorsgroup (required for most API access) - Give it a strong password
- HTTPS: Set
SECURE=trueandPORT=5001for HTTPS (recommended). SetCERT_VERIFY=falseif using a self-signed certificate (common on home NAS). - DSM Version: Use
7for DSM 7.x or6for DSM 6.x. Check in Control Panel > Info Center.
Step 2: Create your .env file
cp .env.example .env
Edit .env with your NAS details:
Single NAS setup
# === 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
Multi-NAS setup
Add additional NAS units with incrementing numbers (up to 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
Two-Factor Authentication
If a NAS has 2FA enabled, provide the current OTP code:
SYNOLOGY_NAS1_OTP_CODE=123456
Note: OTP codes expire quickly. For persistent MCP use, create a dedicated service account without 2FA.
Step 3: Test the connection
source .venv/bin/activate
synology-mcp
If it starts without errors, the server is ready. Press Ctrl+C to stop it.
Claude Desktop Setup
Step 1: Locate the config file
The Claude Desktop MCP configuration file is located at:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
If the file doesn't exist yet, create it.
Step 2: Add the Synology MCP server
Open the config file and add (or merge into) the mcpServers section. You must use the full absolute path to the synology-mcp binary inside your 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"
}
}
}
}
For multi-NAS, add the second NAS variables in the same env block:
{
"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"
}
}
}
}
Important notes:
- Replace
/full/path/to/dk-synology-mcpwith the actual path where you cloned the repo. - If you already have other MCP servers configured, merge the
"synology"entry into your existingmcpServersobject — don't replace the whole file. - Use the full path to the venv binary (
.venv/bin/synology-mcp), not justsynology-mcp, because Claude Desktop doesn't activate your shell profile or venv.
Step 3: Restart Claude Desktop
Quit Claude Desktop completely and reopen it. The Synology MCP server will appear in the MCP tools list (look for the hammer icon at the bottom of the chat input).
Step 4: Verify it works
Try asking Claude:
- "Test my Synology NAS connection"
- "Show my NAS health dashboard"
- "List files in /volume1/homes"
- "What Docker containers are running on my NAS?"
Usage with Docker
Build and run (stdio transport)
docker compose up -d
Build and run manually
docker build -t synology-mcp .
docker run --env-file .env -i synology-mcp
SSE transport (network-accessible)
Uncomment the relevant lines in docker-compose.yml, or run:
docker run --env-file .env -p 8080:8080 synology-mcp --transport sse --port 8080
Multi-NAS Usage
Every tool accepts an optional nas parameter. If omitted, the default NAS is used.
"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"
Use synology_list_connections to see all configured NAS units and their active sessions, or synology_test_connection to verify connectivity.
Project Structure
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)
Troubleshooting
"command not found: synology-mcp"
You're not using the venv. Either activate it first (source .venv/bin/activate) or use the full path: .venv/bin/synology-mcp.
"Connection refused" or timeout errors
- Verify your NAS IP is reachable:
ping 192.168.1.100 - Verify the port is open:
curl -k https://192.168.1.100:5001 - Check that DSM's HTTP/HTTPS service is enabled in Control Panel > Login Portal
- If using HTTPS with a self-signed cert, make sure
CERT_VERIFY=false
"Permission denied" or "Invalid credentials"
- Double-check the username and password in your
.envor Claude Desktop config - Ensure the user account is in the
administratorsgroup - If 2FA is enabled on the account, either provide
OTP_CODEor use a service account without 2FA
Claude Desktop doesn't show Synology tools
- Make sure the
commandpath inclaude_desktop_config.jsonis the full absolute path to.venv/bin/synology-mcp - Quit and fully restart Claude Desktop (not just close the window)
- Check Claude Desktop logs:
~/Library/Logs/Claude/(macOS)
Dependencies
- mcp — Model Context Protocol SDK with FastMCP
- synology-api — Python wrapper for Synology DSM APIs
- pydantic — Input validation
- python-dotenv — Environment variable loading
- treelib — Tree data structure for file tree visualization
SSL hostname mismatch errors
If you get SSL errors when connecting via HTTPS, use your NAS hostname (e.g., mynas.synology.me) instead of a raw IP address in SYNOLOGY_NAS1_HOST. Self-signed certificates generated by DSM are bound to the hostname, not the IP.
Changelog
v0.3.0 — Runtime bug fixes and robustness (2026-03-02)
Fixed bugs discovered during real-world NAS management sessions. Every tool was exercised against a live DS923+ running DSM 7, revealing issues that only surface at runtime.
Task handling — _extract_taskid() helper (filestation.py):
synology-api's task-start methods (start_delete, start_copy_move, start_compress, start_extract) return a plain string like "You can now check the status of request with get_delete_status() , task id is: FileStation_xxx" when interactive_output=True (the default). The previous code expected a dict with a "taskid" key, causing all four operations to fail. Added _extract_taskid() with regex parsing to handle both response formats. Applied to all task handlers: delete, copy/move, compress, extract.
Shared folders — SYNO.Core.Share KeyError (shares.py):
Share.list_folders() in synology-api fails with KeyError('SYNO.Core.Share') because the API isn't enumerated in the session's core_list on DSM 7. All three share tools (synology_shared_folders, synology_shared_folder_info, synology_shared_folder_permissions) now fall back to direct request_data() calls with hardcoded API paths when the KeyError occurs.
Other fixes:
system_tools.py—synology_list_connectionsandsynology_server_capabilitiesiterated over dict keys instead of values (config.nas_configs→config.nas_configs.values())filestation.py—synology_file_treenow usestreelib.Treewithtree.show(stdout=False)for proper ASCII tree output; addedtreelib>=1.6.0as a project dependencyfilestation.py—synology_compressusedformatparameter (Python built-in shadow) instead of the correctcompress_format- Claude Desktop config examples now use generic paths instead of hardcoded user paths
v0.2.0 — API method name audit (2026-03-02)
Fixed all synology-api method calls across 13 tool files. The synology-api Python package uses non-obvious method names that differ from the DSM API naming conventions. Every tool now uses the correct underlying method, verified by introspection against synology-api v0.8.2.
Files changed (46 method calls fixed):
system_tools.py—get_info()toget_system_info()sysinfo.py— 8 fixes:get_dsm_infotodsm_info,get_system_utilizationtoget_all_system_utilization,get_storage_infotostorage,get_all_servicetoservices_statusdocker_tools.py— 6 fixes:get_containerstocontainers,restart_containerreplaced with stop+start (no restart in synology-api),get_container_logtoget_logs,get_imagestodownloaded_images,get_networkstonetwork,get_resourcestocontainer_resourcescloudsync.py— 4 fixes:get_connection_statustoget_connection_information,pause_connectiontoconnection_pause,resume_connectiontoconnection_resume,get_connection_logtoget_connection_logsvirtualization.py— 5 fixes:get_guest_listtoget_images_list,get_guest_infotoget_specific_vm_info,poweron_guesttovm_power_on,poweroff_guesttovm_force_power_off,shutdown_guesttovm_shut_downshares.py— 3 fixes:get_share_listtolist_folders,get_share_infotoget_folder,get_share_permissiontoget_folder_permissionsusers_groups.py— 3 fixes:get_list_usertoget_users,get_list_grouptoget_groups,get_group_membertoget_usersactive_backup.py— 5 fixes:list_task_listtolist_tasks,get_task_infototask_history,list_device_listtolist_device_transfer_size,get_device_infotolist_device_transfer_size,list_restore_pointstoresult_detailspackage.py— 4 fixes:packages_installedtolist_installed,package_gettoget_package, and package start/stop now uses direct DSM API calls viarequest_data()(synology-api has no start/stop methods)photos.py— 4 fixes:get_albumstolist_albums,get_itemstolist_item_in_folders,searchtolist_search_filters,get_album_itemstoget_albumsnapshot.py— 2 fixes:delete_snapshottodelete_snapshots,list_replication_taskstolist_replication_planstask_scheduler.py— 1 fix:get_task_resulttoget_task_resultsbackup.py— 1 fix:backup_task_resulttointegrity_check_run
Other fixes:
- Fixed ConnectionManager proxy pattern with module-level
_active_conn_mgrvariable - Fixed SSL hostname mismatch by using NAS hostname instead of IP address
License
MIT
Установка Synology Server
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/DRVBSS/dk-synology-mcpFAQ
Synology Server MCP бесплатный?
Да, Synology Server MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Synology Server?
Нет, Synology Server работает без API-ключей и переменных окружения.
Synology Server — hosted или self-hosted?
Доступен hosted-вариант: Unyly запускает сервер в облаке, локальная установка не обязательна.
Как установить Synology Server в Claude Desktop, Claude Code или Cursor?
Открой Synology Server на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Synology Server with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
