Skip to main content
Glama
Synology MCP Server

Synology MCP Server

by rafalr100

Synology MCP Server

Monitor and manage a Synology DSM 7 NAS from any MCP client — and build live dashboards right inside the chat.

Python MCP License: MIT DSM Tools CI

A Model Context Protocol (MCP) server that gives an LLM client such as Claude 71 tools to monitor and manage a Synology DSM 7 NAS: system health, storage and disks, files, Docker, virtual machines, packages, DSM updates, Download Station, Hyper Backup, users, services, security, certificates and more — plus a one-call snapshot for rendering beautiful dashboards as artifacts.

It speaks the official DSM Web API (entry.cgi), handles login (including 2FA via a persistent trusted-device token), caches the session and re-authenticates automatically.

Tested on DSM 7.3.2 (DS423+). Most tools use stable core APIs and work across DSM 7.x.


Table of contents


Related MCP server: mcp-server-synology

What is an MCP server?

The Model Context Protocol (MCP) is an open standard that lets AI assistants talk to external tools and data sources in a uniform way. An MCP server exposes a set of tools (functions the model can call) over a simple protocol; an MCP client (the app you chat in, e.g. Claude Desktop) connects to the server and lets the model call those tools on your behalf.

Think of it as a universal adapter between the AI and your software: instead of the model guessing, it calls a real function that returns real data.

This project is an MCP server for your Synology NAS. It translates plain requests like “how full are my volumes?” or “restart the Home Assistant container” into authenticated calls to the Synology DSM API, and hands structured results back to the model — which then answers you or renders a dashboard.

You ──▶ Claude (MCP client) ──▶ Synology MCP server ──▶ DSM Web API ──▶ your NAS
                ▲                                                          │
                └──────────────  results / dashboard  ◀───────────────────┘

You don't need to know any of the API details — just install the server, point it at your NAS, connect your client, and ask in natural language.

How it fits together

flowchart LR
    U["👤 You"] -->|natural language| C["🤖 Claude<br/>(MCP client)"]
    C -->|tool call| S["⚙️ Synology MCP server<br/>71 tools"]
    S -->|HTTPS entry.cgi| D["🟦 Synology DSM 7 API"]
    D --> N["🗄️ Your NAS<br/>storage · docker · vms · users …"]
    N -->|JSON| S
    S -->|structured result| C
    C -->|answer or 📊 dashboard| U

The server authenticates once (with optional 2FA via a trusted-device token), caches the session, and re-authenticates automatically when it expires.


Features

  • 71 tools across 21 domains — see the full Tool Reference.

  • Monitoring: system info, CPU/RAM/network load, health, connections, processes.

  • Storage: volumes, storage pools, per-disk S.M.A.R.T. and temperatures.

  • Files: browse, search, info, directory size, MD5, create/rename/copy/move/delete, extract archives, public share links.

  • Apps: Docker (containers, images, projects, logs, live stats, start/stop/restart), Virtual Machine Manager, Download Station, Hyper Backup, Task Scheduler, Surveillance Station (cameras), Synology Photos and Synology Drive.

  • Administration: packages & DSM updates, users/groups, shared folders (create/delete), file services (SMB/AFP/NFS/FTP), SSH/SNMP, hardware/UPS, security, certificates, DDNS, QuickConnect, notifications, logs, security scan.

  • Dashboards: get_overview returns a complete snapshot in one call; the bundled skill teaches the client to render it as a polished HTML dashboard.

  • Safe by design: state-changing tools are tagged control; destructive power operations (reboot/shutdown/DSM update) are disabled unless explicitly enabled.

  • No hard-coded secrets: all credentials come from environment variables / .env.


Quick start

One interactive script creates the environment, asks for your NAS details, handles 2FA, tests the connection and registers the server in Claude Desktop for you:

git clone https://github.com/rafalr100/synology-mcp.git
cd synology-mcp
python3 configure.py

Then fully quit and reopen Claude Desktop. That's it.

Option B — manual

# 1. Clone
git clone https://github.com/rafalr100/synology-mcp.git
cd synology-mcp

# 2. Install (uv recommended)
uv venv --python 3.12 .venv
uv pip install --python .venv -e .
#   …or:  python3 -m venv .venv && .venv/bin/pip install -e .

# 3. Configure
cp .env.example .env       # then edit URL / username / password

# 4. (only if your account uses 2FA) get a device token
.venv/bin/python bootstrap_2fa.py 123456     # 123456 = current OTP code

# 5. Verify
.venv/bin/python smoke_test.py

Then connect it to a client.


Configuration

Step 1 — Prepare the NAS

  1. Find the NAS address & port. In DSM: Control Panel → Network → Network Interface (or your router). The default Web API port is 5000 (HTTP) / 5001 (HTTPS). Your URL will look like http://192.168.1.100:5000.

  2. (Recommended) Create a dedicated user. Control Panel → User & Group → Create. Give it only the access it needs (the apps and shared folders you want to manage). Admin-group membership is required for some tools (storage, users, services, certificates, power).

  3. 2FA? If the account uses two-factor auth, keep your authenticator app handy for Step 4. The DSM Web API itself is enabled by default — nothing else to turn on.

Step 2 — Create your .env

Copy .env.example to .env and fill it in:

SYNOLOGY_URL=http://192.168.1.100:5000
SYNOLOGY_USER=your_username
SYNOLOGY_PASS=your_password

Environment variables

Variable

Required

Default

Description

SYNOLOGY_URL

✅

http://localhost:5000

Base URL of the NAS (use https://…:5001 for TLS)

SYNOLOGY_USER

✅

—

DSM username

SYNOLOGY_PASS

✅

—

DSM password

SYNOLOGY_DEVICE_ID

2FA only

—

Trusted-device token (from bootstrap_2fa.py)

SYNOLOGY_OTP

—

—

One-time OTP (bootstrap only; prefer the device token)

SYNOLOGY_VERIFY_SSL

—

false

Verify the TLS certificate

SYNOLOGY_TIMEOUT

—

30

HTTP timeout (seconds)

SYNOLOGY_SESSION_NAME

—

SynologyMCP

Session name shown in DSM

SYNOLOGY_DEVICE_NAME

—

SynologyMCP

Device name shown in DSM

SYNOLOGY_ENABLE_POWER_CONTROL

—

false

Allow reboot_nas / shutdown_nas / install_dsm_update

See docs/CONFIGURATION.md for details.

Step 3 — How login works

flowchart TD
    A["Server starts"] --> B{"SYNOLOGY_DEVICE_ID set?"}
    B -->|yes| C["Login with password + device token"]
    B -->|no| E{"SYNOLOGY_OTP set?"}
    E -->|yes| F["Login with password + OTP (one-off)"]
    E -->|no| G["Login with password only"]
    C --> H["✅ Session cached"]
    F --> H
    G --> H
    H --> I["Auto re-login if the session expires"]

Two-factor authentication (2FA)

If your account has 2FA enabled, a password alone cannot log in. Exchange one OTP code for a persistent trusted-device token (so you never need an OTP again):

.venv/bin/python bootstrap_2fa.py 123456     # current 6-digit code from your authenticator

This appends SYNOLOGY_DEVICE_ID=… to your .env. If the token is ever invalidated (e.g. after a password change), simply run the bootstrap again.


Connecting an MCP client

The server runs locally and talks to your NAS over the LAN. It works with local clients (Claude Desktop, Claude Code). It is not reachable from the claude.ai web app, whose cloud servers cannot see your local network.

Claude Desktop

Edit the config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "synology": {
      "command": "/absolute/path/to/synology-mcp/.venv/bin/python",
      "args": ["-m", "synology_mcp"],
      "env": {
        "PYTHONPATH": "/absolute/path/to/synology-mcp",
        "SYNOLOGY_URL": "http://192.168.1.100:5000",
        "SYNOLOGY_USER": "your_username",
        "SYNOLOGY_PASS": "your_password",
        "SYNOLOGY_DEVICE_ID": "your_device_token_if_2fa"
      }
    }
  }
}

Fully quit and reopen Claude Desktop — the Synology tools then appear in the tools menu. A ready-to-edit copy lives in examples/claude_desktop_config.example.json.

Claude Code

claude mcp add synology -- /absolute/path/to/synology-mcp/.venv/bin/python -m synology_mcp

…or drop a project-scoped .mcp.json in your working directory.

Tip: keep credentials only in .env — the server auto-loads it from its own directory, so you can omit the env block in the client config.


Dashboards & the skill

Ask the client for “a dashboard of my NAS” and it will call get_overview (one round-trip returning system, load, storage, disks and workload counts) and render a self-contained HTML dashboard as an artifact.

The repo ships a Claude skill (skills/synology-nas/SKILL.md) that teaches the client when to use which tool and how to render dashboards — including a design guide and an HTML template. See docs/DASHBOARDS.md.


Usage examples

Natural-language prompts you can use once connected:

  • “Give me an overview / dashboard of my NAS.”

  • “How full are my volumes, and are all disks healthy?”

  • “Is a DSM update available? Which Docker images can be updated?”

  • “Show running containers and restart homeassistant.” (asks to confirm)

  • “List virtual machines and their state.”

  • “What’s connected right now, and show the last 10 system log entries.”

  • “Search /home for *.pdf and tell me the size of /docker.”

  • “Are SSH and SMB enabled? What’s my DDNS hostname and certificate expiry?”

More in examples/prompts.md.


Tool reference

All 71 tools are documented — with parameters and what each returns — in docs/TOOLS.md. Summary by domain:

Domain

Tools

Dashboard

get_overview

System monitoring

get_system_info, get_resource_usage, get_network_info, get_resource_history

Health & activity

get_system_health, get_active_connections, list_processes, get_time_settings

Storage

get_storage_info, get_storage_pools, get_disk_info

Files

list_shares, list_files, get_file_info, get_directory_size, get_file_md5, search_files, create_folder, rename_item, copy_move_item, delete_item, extract_archive, create_share_link

Packages & updates

check_dsm_update, list_packages, set_package_state

Docker

list_containers, get_container_logs, get_container_stats, list_docker_projects, list_docker_images, set_container_state

Virtual machines

list_virtual_machines, set_vm_state

Surveillance Station

get_surveillance_info, list_cameras

Synology Photos

list_photo_albums

Synology Drive

list_drive_connections

Download Station

list_downloads, add_download, manage_download

Backup

list_backup_tasks, run_backup_task

Task Scheduler

list_scheduled_tasks, run_scheduled_task

Users & shares

list_users, list_groups, list_shared_folders, create_shared_folder, delete_shared_folder

Services

get_file_services, set_file_service, get_terminal_settings, get_snmp_settings

Hardware

get_power_settings, get_hibernation_settings, get_ups_status, list_usb_devices

Security

get_security_settings, get_autoblock_settings, get_firewall_status, list_certificates

Network services

get_ddns_status, get_quickconnect_status

Notifications

get_notification_settings

Logs & scan

get_system_logs, get_security_scan_status

Power (opt-in)

reboot_nas, shutdown_nas, install_dsm_update


Architecture

synology_mcp/
├── config.py          # settings from env / .env (no hard-coded secrets)
├── api.py             # async DSM client: login, 2FA, session, auto-reauth
├── app.py             # shared FastMCP instance + formatting helpers
├── server.py          # entry point (python -m synology_mcp)
└── tools/             # one module per domain; importing registers the tools
    ├── dashboard.py      monitoring.py   system.py     storage.py
    ├── files.py          packages.py     docker.py     virtualization.py
    ├── downloads.py      backup.py       scheduler.py  admin.py
    ├── services.py       hardware.py     security.py   network_services.py
    ├── notifications.py  power.py
skills/synology-nas/   # Claude skill: tool guidance + dashboard rendering
docs/                  # TOOLS.md, CONFIGURATION.md, DASHBOARDS.md
examples/              # client config + example prompts

Every call goes through the DSM entry.cgi gateway; API versions were verified against a live DSM 7.3.2 system. Adding a tool: write an @mcp.tool() async function in a module under synology_mcp/tools/ and add the module to tools/__init__.py.


Security

  • Credentials live in .env / client config, never in code. .env and .mcp.json are git-ignored.

  • Prefer a dedicated DSM account with only the privileges you need over the main admin.

  • Intended for trusted local-network use.

  • Power operations are opt-in via SYNOLOGY_ENABLE_POWER_CONTROL=true.

  • The HTTP client silences request logging so credentials never reach stderr.


Troubleshooting

Symptom

Cause / fix

auth failed (code 400)

Wrong username or password.

auth failed (code 403/406)

Account uses 2FA — run python bootstrap_2fa.py <OTP> to get a device token.

auth failed (code 400) after enabling 2FA

The OTP expired (30 s window) — re-run the bootstrap with a fresh code.

Synology API error (code 105)

Your account lacks permission for that action (use an admin account).

Synology API error (code 119)

Session expired — handled automatically; if it persists, restart the server.

Tools don’t appear in Claude Desktop

Fully quit (not just close) and reopen; check the config path and that the command path is absolute.

ModuleNotFoundError: synology_mcp

Set PYTHONPATH to the repo root in the client env, or pip install -e ..

Connection timeout

Check SYNOLOGY_URL/port and that the NAS is reachable; raise SYNOLOGY_TIMEOUT.

TLS certificate error

Use http://…:5000, or set SYNOLOGY_VERIFY_SSL=false (default) for self-signed certs.

A feature tool errors

That package/feature may not be installed/enabled (e.g. VMM, Docker, UPS, DDNS).


FAQ

Does this work with the claude.ai website or mobile app? No — those run in Anthropic’s cloud, which can’t reach a NAS on your LAN. Use a local client (Claude Desktop / Claude Code). For remote access you’d need a VPN (e.g. Tailscale) and a remote MCP transport, which is out of scope here.

Which DSM versions are supported? Built and tested on DSM 7.x (7.3.2). DSM 6 uses older API paths and is not supported.

Is it safe? Can it delete my data? Read tools are safe. State-changing tools are tagged control; a well-behaved client confirms before using them. Reboot/shutdown/update require an explicit opt-in flag.

Does it store my password? Only where you put it — in .env or the client config, both local to your machine.

Can I run it without 2FA? Yes. 2FA is optional; without it, username + password is enough.


Roadmap

Planned additions (Surveillance Station, Synology Photos & Drive, richer logs, time/NTP, and more) are tracked in docs/ROADMAP.md.

Contributing

Issues and pull requests are welcome — see CONTRIBUTING.md.


License

MIT.

Not affiliated with or endorsed by Synology Inc. “Synology” and “DSM” are trademarks of their respective owners.

Available Tools

71 tools
add_downloadA

Add a new download task from a URL or magnet link. [control]

Args: url: HTTP/FTP URL or magnet link to download destination: Shared-folder path (without leading slash), e.g. "video/movies". Required by Download Station.

Inputs: url (required), destination (required). Returns: result

check_dsm_updateA

Check whether a DSM (operating system) update is available for the NAS.

Inputs: no named parameters. Returns: result

copy_move_itemA

Copy or move files/folders into an existing destination folder. [control]

Args: paths: Comma-separated source paths dest_folder: Existing destination folder path move: True to move, False to copy (default) overwrite: Overwrite existing files (default False)

Inputs: paths (required), dest_folder (required), move, overwrite. Returns: result

create_folderB

Create a new folder.

Args: parent_path: Where to create the folder e.g. /home name: New folder name

Inputs: name (required), parent_path (required). Returns: result

create_shared_folderB

Create a new shared folder. [control]

Args: name: Name of the shared folder volume: Volume path to create it on (default /volume1) description: Optional description

Inputs: name (required), volume, description. Returns: result

delete_itemB

Delete files or folders. [control]

Args: paths: Comma-separated paths to delete recursive: Delete folder contents recursively (default True)

Inputs: paths (required), recursive. Returns: result

delete_shared_folderA

Delete a shared folder (and its contents). [control]

Args: name: Name of the shared folder to delete

Inputs: name (required). Returns: result

extract_archiveC

Extract an archive (ZIP, etc.) into a destination folder. [control]

Args: archive_path: Full path to the archive file dest_folder: Destination folder path

Inputs: dest_folder (required), archive_path (required). Returns: result

get_active_connectionsA

List currently active connections to the NAS (who, from where, which protocol).

Inputs: no named parameters. Returns: result

get_autoblock_settingsA

Get the auto-block policy (block IPs after failed login attempts).

Inputs: no named parameters. Returns: result

get_container_logsA

Get recent log lines for a Docker container.

Args: name: Container name (from list_containers) lines: Number of recent log lines (default 50)

Inputs: name (required), lines. Returns: result

get_container_statsA

Get live CPU / memory / network / disk usage for a running container.

Args: name: Container name (from list_containers)

Inputs: name (required). Returns: result

get_ddns_statusA

Get configured DDNS records (hostname, external IP, last update, status).

Inputs: no named parameters. Returns: result

get_directory_sizeA

Calculate the total size and item count of a folder (recursively).

Args: path: Folder path e.g. /docker

Inputs: path (required). Returns: result

get_disk_infoB

Get individual disk details: model, temperature, health (S.M.A.R.T.) and status.

Inputs: no named parameters. Returns: result

get_file_infoB

Get detailed info (size, owner, timestamps) for one or more files/folders.

Args: paths: Comma-separated paths e.g. /home/report.pdf,/photo

Inputs: paths (required). Returns: result

get_file_md5B

Compute the MD5 checksum of a file.

Args: path: Full file path

Inputs: path (required). Returns: result

get_file_servicesA

Get the enabled state and key settings of SMB, AFP, NFS and FTP file services.

Inputs: no named parameters. Returns: result

get_firewall_statusC

Get firewall profile information.

Inputs: no named parameters. Returns: result

get_hibernation_settingsB

Get disk hibernation (power-saving) settings.

Inputs: no named parameters. Returns: result

get_network_infoA

Get network interfaces with IP addresses, link speed and status, plus gateway/DNS.

Inputs: no named parameters. Returns: result

get_notification_settingsA

Get e-mail notification settings (enabled state, sender, SMTP).

Inputs: no named parameters. Returns: result

get_overviewA

Get a complete NAS snapshot in one call — ideal for building a dashboard.

Aggregates: system identity, CPU/RAM/network load, per-volume storage, per-disk health, overall health, and counts of packages, containers, VMs, download tasks and recent log severities. Use this, then render a dashboard artifact from the returned JSON.

Inputs: no named parameters. Returns: result

get_power_settingsA

Get power-related hardware settings: power recovery, LED brightness, beep and power schedule.

Inputs: no named parameters. Returns: result

get_quickconnect_statusA

Get QuickConnect configuration (enabled state and QuickConnect ID).

Inputs: no named parameters. Returns: result

get_resource_historyA

Get recent Resource Monitor threshold events (CPU/RAM/IO spikes over time).

Useful for plotting recent trends or spotting recurring load problems.

Args: limit: Max events to return (default 25)

Inputs: limit. Returns: result

get_resource_usageA

Get real-time CPU usage, memory usage and network throughput.

Inputs: no named parameters. Returns: result

get_security_scan_statusB

Get the result of the Security Advisor scan (malware, network, system, updates).

Inputs: no named parameters. Returns: result

get_security_settingsA

Get DSM security settings (session timeout, CSRF protection, IP checking).

Inputs: no named parameters. Returns: result

get_snmp_settingsA

Get SNMP service settings.

Inputs: no named parameters. Returns: result

get_storage_infoB

Get storage volumes: RAID type, filesystem, used/free space and health status.

Inputs: no named parameters. Returns: result

get_storage_poolsA

Get storage pools with RAID type, status and data-scrubbing state.

Inputs: no named parameters. Returns: result

get_surveillance_infoA

Get Surveillance Station info: version, camera count and licence usage.

Inputs: no named parameters. Returns: result

get_system_healthA

Get overall system health: status, uptime, reboot-required flag and fan status.

Inputs: no named parameters. Returns: result

get_system_infoA

Get NAS model, DSM version, hostname, uptime, RAM, temperature and serial number.

Inputs: no named parameters. Returns: result

get_system_logsA

Get recent system log entries.

Args: limit: Max entries to return (default 30) level: Optional filter — "info", "warning" or "error"

Inputs: level, limit. Returns: result

get_terminal_settingsA

Get SSH / Telnet terminal access settings.

Inputs: no named parameters. Returns: result

get_time_settingsA

Get the NAS time, timezone and NTP synchronization settings.

Inputs: no named parameters. Returns: result

get_ups_statusA

Get UPS (uninterruptible power supply) status and configuration.

Inputs: no named parameters. Returns: result

install_dsm_updateA

Download and install an available DSM update, then reboot. [control][power] Requires SYNOLOGY_ENABLE_POWER_CONTROL=true. Check availability first with check_dsm_update.

Inputs: no named parameters. Returns: result

list_backup_tasksA

List Hyper Backup tasks with their current state and target.

Inputs: no named parameters. Returns: result

list_camerasA

List Surveillance Station cameras with model, IP and status.

Inputs: no named parameters. Returns: result

list_certificatesA

List installed TLS/SSL certificates with validity dates and assigned services.

Inputs: no named parameters. Returns: result

list_containersA

List all Docker / Container Manager containers with their state and image.

Inputs: no named parameters. Returns: result

list_docker_imagesA

List Docker images stored on the NAS, including whether an update is available.

Inputs: no named parameters. Returns: result

list_docker_projectsA

List Docker Compose / Container Manager projects.

Inputs: no named parameters. Returns: result

list_downloadsA

List Download Station tasks with progress, size and transfer speed.

Inputs: no named parameters. Returns: result

list_drive_connectionsA

List Synology Drive client connections (devices syncing with the NAS).

Inputs: no named parameters. Returns: result

list_filesA

List files and folders at a given path.

Args: path: Full path e.g. /home or /docker/app limit: Max items to return (default 100) offset: Pagination offset sort_by: name | size | user | group | mtime | atime | crtime | posix sort_direction: asc | desc pattern: Optional filename filter (supports wildcards, e.g. *.pdf)

Inputs: path (required), limit, offset, pattern, +2 more. Returns: result

list_groupsB

List local user groups.

Inputs: no named parameters. Returns: result

list_packagesA

List installed packages (apps) with their version and running status.

Args: running_only: If True, only return packages that are currently running.

Inputs: running_only. Returns: result

list_photo_albumsA

List albums in Synology Photos (personal space).

Args: limit: Max albums to return (default 50) offset: Pagination offset

Inputs: limit, offset. Returns: result

list_processesB

List top running processes by CPU or memory usage.

Args: top: Number of processes to return (default 15) sort_by: "cpu" or "mem" (default cpu)

Inputs: top, sort_by. Returns: result

list_scheduled_tasksB

List scheduled tasks (cron jobs, scripts, scheduled backups, etc.).

Inputs: no named parameters. Returns: result

list_shared_foldersA

List shared folders with their volume location and description (admin view).

Inputs: no named parameters. Returns: result

list_sharesB

List all available shared folders (File Station view).

Inputs: no named parameters. Returns: result

list_usb_devicesA

List USB devices connected to the NAS.

Inputs: no named parameters. Returns: result

list_usersA

List local user accounts with description, email, 2FA and status.

Inputs: no named parameters. Returns: result

list_virtual_machinesA

List Virtual Machine Manager guests with their state and resource allocation.

Inputs: no named parameters. Returns: result

manage_downloadA

Pause, resume or delete download tasks. [control]

Args: task_ids: Comma-separated task ids (from list_downloads) action: "pause", "resume" or "delete"

Inputs: action (required), task_ids (required). Returns: result

reboot_nasA

Reboot the NAS. [control][power] Requires SYNOLOGY_ENABLE_POWER_CONTROL=true.

Inputs: no named parameters. Returns: result

rename_itemB

Rename a file or folder.

Args: path: Full path of the item to rename new_name: New name only (not a full path)

Inputs: path (required), new_name (required). Returns: result

run_backup_taskB

Start a Hyper Backup task immediately. [control]

Args: task_id: Numeric task id (from list_backup_tasks)

Inputs: task_id (required). Returns: result

run_scheduled_taskA

Trigger a scheduled task to run immediately. [control]

Args: task_id: Numeric task id (from list_scheduled_tasks)

Inputs: task_id (required). Returns: result

search_filesA

Search for files by name pattern within a folder.

Args: folder_path: Root folder to search e.g. /home pattern: Filename pattern e.g. .pdf or report recursive: Search subdirectories (default True) limit: Max results (default 50)

Inputs: pattern (required), folder_path (required), limit, recursive. Returns: result

set_container_stateA

Start, stop or restart a Docker container. [control]

Args: name: Container name (from list_containers) action: "start", "stop" or "restart"

Inputs: name (required), action (required). Returns: result

set_file_serviceB

Enable or disable a file-sharing protocol. [control]

Args: service: One of "smb", "afp", "nfs", "ftp" enabled: True to enable, False to disable

Inputs: enabled (required), service (required). Returns: result

set_package_stateA

Start or stop an installed package. [control]

Args: package_id: Package id from list_packages (e.g. "WebStation", "DownloadStation") action: "start" or "stop"

Inputs: action (required), package_id (required). Returns: result

set_vm_stateA

Power a virtual machine on or off. [control]

Args: name: VM name (from list_virtual_machines) action: "poweron", "poweroff" (force off), "shutdown" (graceful) or "restart"

Inputs: name (required), action (required). Returns: result

shutdown_nasA

Shut down (power off) the NAS. [control][power] Requires SYNOLOGY_ENABLE_POWER_CONTROL=true.

Inputs: no named parameters. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 71 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes, with only minor overlaps like list_shared_folders vs list_shares and check_dsm_update vs install_dsm_update. Overall, an agent can reliably differentiate them.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern in snake_case (e.g., get_system_info, list_files, create_folder). There are no mixing of conventions or ambiguous verb choices.

    Tool Count2/5

    With 71 tools, the server is overly large for a single MCP service. While each tool may be individually useful, the excessive count overwhelms the interface and suggests the server should be split into smaller, domain-specific servers.

    Completeness4/5

    The tool set covers a wide range of NAS management tasks including system info, storage, file operations, Docker, VMs, downloads, backup, and more. Minor gaps exist (e.g., no user creation tool), but core workflows are well-supported.

    Maintenance

    ActivityInactive
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables interaction with Synology NAS services including DSM, File Station, Calendar, Note Station, Contacts, Chat, Download Station, and Container Manager through a modular MCP interface with configurable safety modes.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server that exposes a Synology NAS through the official DSM WebAPI, covering File Station, Download Station, Synology Photos, Container Manager, and system management with curated tools and a generic bridge for other APIs.
      1
      MIT
    • F
      license
      A
      quality
      D
      maintenance
      MCP server enabling AI agents to manage and monitor Synology NAS via official DSM API, including file operations, system stats, backups, downloads, and camera lists.
      15
      -
    • F
      license
      Not graded
      quality
      C
      maintenance
      Enables MCP clients to inspect Synology NAS system, storage, and utilization, and manage Docker containers via the Synology Web API with automatic session handling.
      -