Skip to main content
Glama

dsm-mcp

Ein Model Context Protocol-Server für Synology DSM und Container Manager. Er ermöglicht es einem MCP-Client (Claude), das NAS zu inspizieren und seine Container direkt über die Synology-Web-API zu verwalten – ohne Browser und ohne DSM-Login/2FA pro Anfrage. Der Server meldet sich einmalig mit einem dedizierten Dienstkonto an und hält die Sitzung selbst am Leben, was effektiv die „nicht ablaufende Sitzung" ist, die du wolltest: Claude authentifiziert sich nie erneut.

Begleitprojekt zu arr-mcp. Gleiche Struktur (Python, streamable-HTTP, Bearer-Auth), ein anderer Port (8788) und ein Synology-spezifischer Client.

Tools

Bereich

Tools

Erkennung/Health

dsm_health, dsm_api_discover, dsm_raw_call

System

dsm_system_info, dsm_storage, dsm_utilization

Container

dsm_docker_containers, dsm_docker_container, dsm_docker_action*, dsm_docker_logs, dsm_docker_projects

* = Schreibaktion (Container starten/stoppen/neu starten). dsm_raw_call kann jede DSM-Methode aufrufen, einschließlich Schreibvorgängen – es ist die Notluke für die Teile der DSM-API, die je nach Version variieren.

Über die DSM-API (das hier lesen)

Die Web-API von Synology ist erkennungsgesteuert und versions-/modellabhängig. Jedes Tool löst zur Laufzeit den korrekten CGI-Pfad und die Version über SYNO.API.Info auf, sodass die System-/Speicher-/Auslastungstools robust sind. Die Docker-/Container-Manager- Methoden sind über DSM-Versionen hinweg weniger konsistent dokumentiert – wenn dsm_docker_logs, dsm_docker_projects oder die Parameter einer Aktion nicht zu deinem DSM passen, führe dsm_api_discover aus (Abfrage SYNO.Docker oder all), um genau zu sehen, was dein NAS bereitstellt, und steuere es dann mit dsm_raw_call. Nichts ist hartcodiert, was nicht live umgangen werden kann.

Related MCP server: Synology_MCP

Dienstkonto (zuerst erledigen)

Richte das nicht auf deinen Haupt-Admin aus. In DSM:

  1. Systemsteuerung → Benutzer & Gruppe → Erstellen einen Benutzer, z. B. claude-svc.

  2. Gewähre nur das Nötigste: Container Manager-App-Berechtigung und Lesezugriff auf System/Speicher. Halte ihn aus administrators heraus, wenn deine DSM-Version die Docker-API ohne Admin erlaubt; wenn Admin erforderlich ist, bevorzuge ein separates Konto in der Admin-Gruppe, das nur hier verwendet wird.

    • Hinweis: Zum Zeitpunkt der Erstellung dieses Textes muss das Dienstkonto Mitglied der Administratorengruppe sein, um auf die Container-Manager-Endpunkte zugreifen zu können.

  3. Deaktiviere 2FA für dieses Konto (ein Daemon kann keinen rotierenden Code eingeben). Wenn deine Richtlinie 2FA erzwingt, registriere einmal ein vertrauenswürdiges Gerät und lege dessen Token in DSM_DEVICE_ID ab.

  4. Optional: Beschränke es auf das LAN (Systemsteuerung → Sicherheit → Firewall / IP-Regeln), da der MCP-Server im LAN sitzt und nur der Tunnel öffentlich ist.

Einrichtung

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 call

Ohne Docker ausführen (Entwicklung):

pip install -r requirements.txt
set -a; source .env; set +a
python server.py

Für Claude bereitstellen

Endpunkt: https://<dein-hostname>/mcp. Wie bei arr-mcp:

  1. Tunnel einrichten (dediziertes cloudflared oder ein Hostname auf deinem bestehenden Jellyfin-Tunnel → http://dsm-mcp:8788), idealerweise hinter Cloudflare Access.

  2. Claude → Einstellungen → Connectors → benutzerdefinierter Connector → die /mcp-URL, mit Authorization: Bearer <MCP_AUTH_TOKEN>.

Sicherheitshinweise

  • Dies kann Container neu starten und Systeminterna lesen, und es authentifiziert sich als DSM-Benutzer. Halte das Konto mit minimalen Rechten, beschränke das 2FA-aus auf nur dieses LAN-Konto und setze den Endpunkt immer hinter das Bearer-Token (und idealerweise Cloudflare Access).

  • Anmeldedaten liegen nur in .env (git/docker-ignoriert). Der MCP-Client sieht sie nie – er sieht nur Tool-Ergebnisse.

  • Keine Kontolöschung, keine DSM-Einstellungsänderung, keine destruktiven Volume-/Pool-Tools sind verfügbar. dsm_raw_call ist bewusst mächtig; behandle die Authentifizierung des Endpunkts entsprechend.

Dateien

  • server.py — MCP-Server + Tools (streamable-HTTP + Bearer-Auth)

  • dsm_client.py — Synology-Web-API-Client (Erkennung, Login, Sitzungsaktualisierung)

  • config.py — erstellt den Client aus Umgebungsvariablen

  • Dockerfile / docker-compose.yml — Container + optionaler Tunnel

  • config.example.env — in .env kopieren

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.
    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
    -