dsm-mcp
Provides tools for interacting with Synology DSM's Web API, enabling AI agents to monitor system health, storage, and utilization, and manage Docker containers (list, inspect, start/stop/restart, view logs) on a Synology NAS.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dsm-mcpcheck NAS storage usage"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
dsm-mcp
A Model Context Protocol server for Synology DSM and Container Manager. It lets an MCP client (Claude) inspect the NAS and manage its containers directly over the Synology Web API — no browser, and no per-request DSM login/2FA. The server logs in once with a dedicated service account and keeps the session alive itself, which is effectively the "non-expiring session" you wanted: Claude never re-authenticates.
Companion to arr-mcp. Same shape (Python, streamable-HTTP, bearer auth), a
different port (8788), and a Synology-specific client.
Tools
Area | Tools |
Discovery/health |
|
System |
|
Containers |
|
* = write action (start/stop/restart a container). dsm_raw_call can invoke
any DSM method, including writes — it's the escape hatch for the parts of DSM's
API that vary by version.
About DSM's API (read this)
Synology's Web API is discovery-driven and version/model-dependent. Each tool
resolves the correct CGI path and version at call time via SYNO.API.Info, so the
system/storage/utilization tools are robust. The Docker/Container Manager
methods are less consistently documented across DSM releases — if
dsm_docker_logs, dsm_docker_projects, or an action's params don't match your
DSM, run dsm_api_discover (query SYNO.Docker or all) to see exactly what
your NAS exposes, then drive it with dsm_raw_call. Nothing is hardcoded that
can't be worked around live.
Related MCP server: Synology MCP Server
Service account (do this first)
Don't point this at your main admin. In DSM:
Control Panel → User & Group → Create a user, e.g.
claude-svc.Grant only what's needed: Container Manager app permission, and read of system/storage. Keep it out of
administratorsif your DSM version allows the Docker API without admin; if it requires admin, prefer a separate admin-group account used only here.Note: As of this writing, the service account must be a member of the administrators group to be able to access the container manager endpoints
Disable 2FA on this account (a daemon can't type a rotating code). If your policy enforces 2FA, enroll a trusted device once and put its token in
DSM_DEVICE_ID.Optionally restrict it to the LAN (Control Panel → Security → firewall / IP rules), since the MCP server sits on the LAN and only the tunnel is public.
Setup
cp config.example.env .env
# edit .env: DSM_URL, the service account + password, a strong MCP_AUTH_TOKEN.
# HTTPS with the self-signed cert? use :5001 and set DSM_VERIFY_SSL=false
docker compose up -d --build
docker logs -f dsm-mcp # confirm it starts; auth runs on the first tool callRun without Docker (dev):
pip install -r requirements.txt
set -a; source .env; set +a
python server.pyExposing it to Claude
Endpoint: https://<your-hostname>/mcp. Same as arr-mcp:
Tunnel it (dedicated
cloudflared, or a hostname on your existing Jellyfin tunnel →http://dsm-mcp:8788), ideally behind Cloudflare Access.Claude → Settings → Connectors → custom connector → the
/mcpURL, withAuthorization: Bearer <MCP_AUTH_TOKEN>.
Security notes
This can restart containers and read system internals, and it authenticates as a DSM user. Keep the account least-privileged, keep 2FA-off scoped to only that LAN account, and always put the endpoint behind the bearer token (and ideally Cloudflare Access).
Credentials live only in
.env(git/docker-ignored). The MCP client never sees them — it only sees tool results.No account-deletion, no DSM settings-mutation, no volume/pool destructive tools are exposed.
dsm_raw_callis powerful by design; treat the endpoint's auth accordingly.
Files
server.py— MCP server + tools (streamable-HTTP + bearer auth)dsm_client.py— Synology Web API client (discovery, login, session refresh)config.py— builds the client from env varsDockerfile/docker-compose.yml— container + optional tunnelconfig.example.env— copy to.env
This server cannot be deployed
Maintenance
Related MCP Connectors
An MCP server that provides access to Testiny projects, test cases and test runs
Agent-first web hosting: deploy sites, apps, databases and domains over MCP.
Remote MCP for 1,500+ APIs. Vault-managed credentials; OAuth or API key. Search, load, and execute.
Contabo API (v1.0.0) as MCP tools for cloud provisioning, and management. Powered by HAPI MCP server
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables managing Docker containers and Compose apps on a QNAP NAS via the Container Station API, including starting, stopping, restarting, and inspecting containers and applications.4 npmMIT
- AlicenseBqualityCmaintenanceMonitor and manage a Synology DSM 7 NAS from any MCP client — and build live dashboards right inside the chat.714MIT
- AlicenseNot gradedqualityFmaintenanceComprehensive Synology NAS management through MCP, enabling file operations, downloads, backups, Docker, photos, VMs, snapshots, and more across up to 9 NAS units.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables 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