synology_statusLABSCO SUMMARY
The whole DSM surface, from file listings to SMART data.
It goes well past file access — disk health, UPS state, volume and pool status, and full container control, with an aggregate health call so an agent asks one question instead of six. Take the credential advice literally: this holds a password rather than a scoped token, so give it a dedicated account with minimal rights. And if you expose the HTTP mode, put the authentication in front of it yourself; the server's host and origin checks guard browsers, not callers.
What it is
A server over Synology DSM's APIs, covering File Station, Download Station, system health, Container Manager and NFS, with session handling across one or several NAS units.
What you get
- Files: shares and directories listed, file details, recursive search, and create, rename, move and delete
- Downloads: tasks listed, created from a URL or magnet link, paused, resumed and deleted, with Download Station's own statistics
- Health: system information, utilisation, disk health and SMART data, volume and storage pool status, network, UPS, services and system log — plus one call that aggregates the lot
- Container Manager: containers listed, inspected, started, stopped, restarted and deleted, their logs and live resource use read, and Compose projects, images, registries and networks managed
- NFS status read, enabled, shares listed and permissions set
- Session handling with an explicit login and logout, a status call, and a list of the NAS units you have configured
- A remote mode that serves the same tools over Streamable HTTP, for the common case where the NAS is not on the machine running your client
Requirements
Your NAS URL, a username and a password, supplied as environment variables — commonly through the project's Docker Compose setup, or Python directly. The project asks for a dedicated low-privilege DSM account with two-factor authentication off, because the server cannot answer a two-factor prompt. In the remote HTTP mode there is no application-level authentication at all: anything that can reach the endpoint can call every tool, so keep it on loopback behind a reverse proxy that terminates TLS and adds auth. A multi-NAS settings file must be readable only by its owner or the server refuses to load it.
Setup effort
Build from source — clone the repository, then follow the steps on this page and add the configuration for your client
USE CASES
Checking on the NAS without opening DSM
One aggregate health call covers disks, volumes, services and load, with utilisation read separately when a number looks off.
Catching a disk before it fails
Read disk health and the SMART attributes behind it, then check whether the volume that depends on it is still healthy.
Finding a file somewhere on the shares
List the shares, search recursively by name from the right one, then read the details of the match.
Queueing a download and checking on it
Create the task from a URL or magnet link, watch the queue, and read the transfer statistics without opening Download Station.
Restarting a container that has wedged
Find the container, read its recent logs to see what happened, then restart it from the same session.
Opening a share to a new client
Read the NFS shares that exist and set the permission for the host that needs to mount one.
71 tools
Listed in project docs. Your client may show a different list.
synology_list_nassynology_loginsynology_logoutlist_shareslist_directoryget_file_infosearch_filescreate_filecreate_directorydeleterename_filemove_fileds_get_infods_list_tasksds_create_taskds_pause_tasksds_resume_tasksds_delete_tasksds_get_statisticssynology_system_infosynology_utilizationsynology_disk_healthsynology_disk_smartsynology_volume_statussynology_storage_poolsynology_lun_listsynology_lun_getsynology_networksynology_upssynology_servicessynology_system_logsynology_health_summarysynology_container_listsynology_container_health_summarysynology_container_disk_usagesynology_container_getsynology_container_startsynology_container_stopsynology_container_restartsynology_container_deletesynology_container_logssynology_container_resourcesynology_container_project_listsynology_container_project_getsynology_container_project_createsynology_container_project_updatesynology_container_project_startsynology_container_project_stopsynology_container_project_restartsynology_container_project_buildsynology_container_project_cleansynology_container_project_deletesynology_container_image_listsynology_container_image_getsynology_container_image_deletesynology_container_image_prunesynology_container_image_prune_previewsynology_container_image_pullsynology_container_registry_listsynology_container_registry_searchsynology_container_registry_tagssynology_container_registry_downloadsynology_container_network_listsynology_container_network_getsynology_container_network_createsynology_container_network_deletesynology_nfs_statussynology_nfs_enablesynology_nfs_list_sharessynology_nfs_set_permissionBEFORE YOU INSTALL
What to know first
Tools you get
71 tools named in the project's documentation. synology_login and synology_logout matter only for manual sign-in: with AUTO_LOGIN=true, the default, the server signs in when it starts; set AUTO_LOGIN=false to sign in yourself with synology_login. ENABLE_XIAOZHI=true adds a Xiaozhi WebSocket client, not tools.
Requires
- Docker with docker-compose, for the Docker setup and the Claude Desktop, Cursor, Continue and Codeium blocks
- Python, only for the no-Docker route (pip install . and the Python block)
- SYNOLOGY_PASSWORD in your environment
- SYNOLOGY_USERNAME in your environment
INSTALLATION
Connect your client
Clone the repository, then follow the steps on this page and add the configuration for your client. This one is built from source rather than installed with a single command.
Server setup
Setup
git clone https://github.com/atom2ueki/mcp-server-synology.git
cd mcp-server-synology
cp env.example .envEdit .env: set SYNOLOGY_URL, SYNOLOGY_USERNAME, SYNOLOGY_PASSWORD (optionally AUTO_LOGIN, VERIFY_SSL; add ENABLE_XIAOZHI=true + XIAOZHI_TOKEN only for the Xiaozhi bridge)
docker-compose up -d --buildAdd the mcpServers block below to claude_desktop_config.json (or Cursor / Continue / Codeium MCP settings), pointing -f and cwd at your clone
pip
pip install .MCP Clients
Claude Desktop, Cursor, Continue, Codeium
{
"mcpServers": {
"synology": {
"command": "docker-compose",
"args": [
"-f",
"<YOUR_PATH_TO_MCP_SERVER_SYNOLOGY>/docker-compose.yml",
"run",
"--rm",
"synology-mcp"
],
"cwd": "<YOUR_PATH_TO_MCP_SERVER_SYNOLOGY>"
}
}
}Any MCP client — Python
{
"mcpServers": {
"synology": {
"command": "python",
"args": [
"main.py"
],
"cwd": "<YOUR_PATH_TO_MCP_SERVER_SYNOLOGY>",
"env": {
"SYNOLOGY_URL": "http://192.168.1.100:5000",
"SYNOLOGY_USERNAME": "<YOUR_SYNOLOGY_USERNAME>",
"SYNOLOGY_PASSWORD": "<YOUR_SYNOLOGY_PASSWORD>",
"AUTO_LOGIN": "true",
"ENABLE_XIAOZHI": "false"
}
}
}
}Run as HTTP server (Docker)
docker compose -f docker-compose.http.yml up -d --build