AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP verified MIT Self-run

Mcp Server Synology

mcp-atom2ueki-mcp-server-synology Β· by atom2ueki

πŸ’Ύ Model Context Protocol (MCP) server for Synology NAS - Enables AI assistants (Claude, Cursor, Continue) to manage files, downloads, and system operations through secure API integration. Features Docker deployment, auto-authentication, and comprehensive file system tools.

β€” No reviews yet
0 installs
46 views
0.0% view→install

Install

$ agentstack add mcp-atom2ueki-mcp-server-synology

βœ“ scanned Β· βœ“ verified, works with Claude Code, Cursor, and more.

Security review

βœ“ Passed

No issues found. Passed automated security review. Β· v0.1.0 How review works β†’

  • βœ“ Prompt-injection patterns
  • βœ“ Secret / credential exfiltration
  • βœ“ Dangerous shell & filesystem operations
  • βœ“ Untrusted network calls
  • βœ“ Known-malicious package signatures

What it can access

  • ● Network access Used
  • βœ“ Filesystem access No
  • βœ“ Shell / process execution No
  • ● Environment & secrets Used
  • βœ“ Dynamic code execution No

From automated source analysis of v0.1.0. β€œUsed” means the capability is present in the source β€” more access means more to trust, not that it’s unsafe.

View the full security report β†’

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/mcp-atom2ueki-mcp-server-synology)

Reliability & compatibility

βœ“ Security review passed
0 installs to date
β€” no reviews yet
● 2mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work β†’
Are you the author of Mcp Server Synology? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

πŸ’Ύ Synology MCP Server

A Model Context Protocol (MCP) server for Synology NAS devices. Enables AI assistants to manage files and downloads through secure authentication and session management.

🌟 NEW: Unified server supports both Claude/Cursor (stdio) and Xiaozhi (WebSocket) simultaneously!

πŸš€ Quick Start with Docker

1️⃣ Setup Environment

# Clone repository
git clone https://github.com/atom2ueki/mcp-server-synology.git
cd mcp-server-synology

# Create environment file
cp env.example .env

2️⃣ Configure .env File

Basic Configuration (Claude/Cursor only):

# Required: Synology NAS connection
SYNOLOGY_URL=http://192.168.1.100:5000
SYNOLOGY_USERNAME=your_username
SYNOLOGY_PASSWORD=your_password

# Optional: Auto-login on startup
AUTO_LOGIN=true
VERIFY_SSL=false

Extended Configuration (Both Claude/Cursor + Xiaozhi):

# Required: Synology NAS connection
SYNOLOGY_URL=http://192.168.1.100:5000
SYNOLOGY_USERNAME=your_username
SYNOLOGY_PASSWORD=your_password

# Optional: Auto-login on startup
AUTO_LOGIN=true
VERIFY_SSL=false

# Enable Xiaozhi support
ENABLE_XIAOZHI=true
XIAOZHI_TOKEN=your_xiaozhi_token_here
XIAOZHI_MCP_ENDPOINT=wss://api.xiaozhi.me/mcp/

3️⃣ Run with Docker

One simple command supports both modes:

# Claude/Cursor only mode (default if ENABLE_XIAOZHI not set)
docker-compose up -d

# Both Claude/Cursor + Xiaozhi mode (if ENABLE_XIAOZHI=true in .env)
docker-compose up -d

# Build and run
docker-compose up -d --build

4️⃣ Alternative: Local Python

# Install dependencies
pip install -r requirements.txt

# Run with environment control
python main.py

πŸ”Œ Client Setup

πŸ€– Claude Desktop

Add to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "synology": {
      "command": "docker-compose",
      "args": [
        "-f", "/path/to/your/mcp-server-synology/docker-compose.yml",
        "run", "--rm", "synology-mcp"
      ],
      "cwd": "/path/to/your/mcp-server-synology"
    }
  }
}

↗️ Cursor

Add to your Cursor MCP settings:

{
  "mcpServers": {
    "synology": {
      "command": "docker-compose",
      "args": [
        "-f", "/path/to/your/mcp-server-synology/docker-compose.yml",
        "run", "--rm", "synology-mcp"
      ],
      "cwd": "/path/to/your/mcp-server-synology"
    }
  }
}

πŸ”„ Continue (VS Code Extension)

Add to your Continue configuration (.continue/config.json):

{
  "mcpServers": {
    "synology": {
      "command": "docker-compose",
      "args": [
        "-f", "/path/to/your/mcp-server-synology/docker-compose.yml",
        "run", "--rm", "synology-mcp"
      ],
      "cwd": "/path/to/your/mcp-server-synology"
    }
  }
}

πŸ’» Codeium

For Codeium's MCP support:

{
  "mcpServers": {
    "synology": {
      "command": "docker-compose",
      "args": [
        "-f", "/path/to/your/mcp-server-synology/docker-compose.yml",
        "run", "--rm", "synology-mcp"
      ],
      "cwd": "/path/to/your/mcp-server-synology"
    }
  }
}

🐍 Alternative: Direct Python Execution

If you prefer not to use Docker:

{
  "mcpServers": {
    "synology": {
      "command": "python",
      "args": ["main.py"],
      "cwd": "/path/to/your/mcp-server-synology",
      "env": {
        "SYNOLOGY_URL": "http://192.168.1.100:5000",
        "SYNOLOGY_USERNAME": "your_username",
        "SYNOLOGY_PASSWORD": "your_password",
        "AUTO_LOGIN": "true",
        "ENABLE_XIAOZHI": "false"
      }
    }
  }
}

🌐 Remote HTTP/SSE Deployment (NEW)

By default the server speaks stdio, which means the MCP client has to spawn the process locally (or via a bridge such as SSH/docker exec). For setups where the NAS is remote (different machine from where Claude/Cursor runs), you can expose the MCP server over HTTP/SSE using mcp-proxy. This makes it consumable by any MCP client that supports URL-based connectors β€” exactly like ha-mcp or other "remote" MCP servers.

Architecture

[Claude Desktop / Cursor / ...]
        β”‚
        β”‚ HTTPS (URL connector)
        β–Ό
[Reverse proxy: DSM / Nginx / Traefik / Caddy]
        β”‚  (TLS termination + auth)
        β”‚ HTTP localhost:8765
        β–Ό
[Docker container]
  └─ mcp-proxy
       └─ python main.py (stdio)

Deploy

  1. mcp-proxy is installed automatically when you build the HTTP image β€” it

lives in requirements-http.txt and the provided compose file sets the INSTALL_HTTP=true build arg (it is not in the default stdio/Xiaozhi image).

  1. Use the provided docker-compose.http.yml:
# Edit credentials in docker-compose.http.yml first
docker compose -f docker-compose.http.yml up -d --build
docker logs -f synology-mcp-http

You should see mcp-proxy report Uvicorn running on http://0.0.0.0:8765 and the auto-login succeed.

Reverse proxy

Most MCP clients require HTTPS, so the HTTP endpoint must be fronted by a TLS-terminating reverse proxy. For DSM users, the built-in Login Portal β†’ Reverse Proxy does the job:

  • Source: HTTPS, hostname synology-mcp.example.com, port 443
  • Destination: HTTP, localhost, port 8765
  • Custom Headers: click Create β†’ WebSocket (adds the headers needed for SSE/long-lived connections)

For Nginx, the equivalent is:

location / {
    proxy_pass http://localhost:8765;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    # SSE-specific
    proxy_buffering off;
    proxy_cache off;
    proxy_read_timeout 24h;
}

Client configuration

In Claude Desktop (or any MCP client that supports remote connectors), add a custom connector pointing at:

https://synology-mcp.example.com/sse

No command, no args, no local Python β€” just a URL.

Security

mcp-proxy does not provide server-side authentication. Anything that can reach the HTTP endpoint can call every tool. Mitigations:

  • Keep it on a private network or behind a VPN
  • Use the reverse proxy to enforce an IP allow-list
  • Add Basic Auth / mTLS / OAuth2 proxy at the reverse proxy layer
  • Use a dedicated low-privilege DSM user (already recommended in the security warning above)

🌟 Xiaozhi Integration

New unified architecture supports both clients simultaneously!

How It Works

  • ENABLE_XIAOZHI=false (default): Standard MCP server for Claude/Cursor via stdio
  • ENABLE_XIAOZHI=true: Multi-client bridge supporting both:
  • πŸ“‘ Xiaozhi: WebSocket connection
  • πŸ’» Claude/Cursor: stdio connection

Setup Steps

  1. Add to your .env file:
ENABLE_XIAOZHI=true
XIAOZHI_TOKEN=your_xiaozhi_token_here
  1. Run normally:
# Same command, different behavior based on environment
python main.py
# OR
docker-compose up

Key Features

  • βœ… Zero Configuration Conflicts: One server, multiple clients
  • βœ… Parallel Operation: Both clients can work simultaneously
  • βœ… All Tools Available: Xiaozhi gets access to all Synology MCP tools
  • βœ… Backward Compatible: Existing setups work unchanged
  • βœ… Auto-Reconnection: Handles WebSocket connection drops
  • βœ… Environment Controlled: Simple boolean flag to enable/disable

Startup Messages

Claude/Cursor only mode:

πŸš€ Synology MCP Server
==============================
πŸ“Œ Claude/Cursor only mode (ENABLE_XIAOZHI=false)

Both clients mode:

πŸš€ Synology MCP Server with Xiaozhi Bridge
==================================================
🌟 Supports BOTH Xiaozhi and Claude/Cursor simultaneously!

πŸ› οΈ Available MCP Tools

πŸ” Authentication

  • synology_status - Check authentication status and active sessions
  • synology_list_nas - List all configured NAS units from settings.json
  • synology_login - Authenticate with Synology NAS (conditional)
  • synology_logout - Logout from session (conditional)

πŸ“ File System Operations

  • list_shares - List all available NAS shares
  • list_directory - List directory contents with metadata
  • path (required): Directory path starting with /
  • get_file_info - Get detailed file/directory information
  • path (required): File path starting with /
  • search_files - Search files matching pattern
  • path (required): Search directory
  • pattern (required): Search pattern (e.g., *.pdf)
  • create_file - Create new files with content
  • path (required): Full file path starting with /
  • content (optional): File content (default: empty string)
  • overwrite (optional): Overwrite existing files (default: false)
  • create_directory - Create new directories
  • folder_path (required): Parent directory path starting with /
  • name (required): New directory name
  • force_parent (optional): Create parent directories if needed (default: false)
  • delete - Delete files or directories (auto-detects type)
  • path (required): File/directory path starting with /
  • rename_file - Rename files or directories
  • path (required): Current file path
  • new_name (required): New filename
  • move_file - Move files to new location
  • source_path (required): Source file path
  • destination_path (required): Destination path
  • overwrite (optional): Overwrite existing files

πŸ“₯ Download Station Management

  • ds_get_info - Get Download Station information
  • ds_list_tasks - List all download tasks with status
  • offset (optional): Pagination offset
  • limit (optional): Max tasks to return
  • ds_create_task - Create new download task
  • uri (required): Download URL or magnet link
  • destination (optional): Download folder path
  • ds_pause_tasks - Pause download tasks
  • task_ids (required): Array of task IDs
  • ds_resume_tasks - Resume paused tasks
  • task_ids (required): Array of task IDs
  • ds_delete_tasks - Delete download tasks
  • task_ids (required): Array of task IDs
  • force_complete (optional): Force delete completed
  • ds_get_statistics - Get download/upload statistics

πŸ₯ Health Monitoring

  • synology_system_info - Get system model, serial, DSM version, uptime, temperature
  • synology_utilization - Get real-time CPU, memory, swap, and disk I/O utilization
  • synology_disk_health - List all physical disks with SMART status, model, temp, size
  • synology_disk_smart - Get detailed SMART attributes for a specific disk
  • synology_volume_status - List all volumes with status, size, usage, filesystem type
  • synology_storage_pool - List RAID/storage pools with level, status, member disks
  • synology_network - Get network interface status and transfer rates
  • synology_ups - Get UPS status, battery level, power readings
  • synology_services - List installed packages and their running status
  • synology_system_log - Get recent system log entries
  • synology_health_summary - Aggregate system info, utilization, disk health, and volume status

🐳 Container Manager

  • synology_container_list - List Container Manager containers
  • offset (optional): Pagination offset
  • limit (optional): Maximum containers to return
  • container_type (optional): Container filter (default: all)
  • synology_container_get - Get a Container Manager container
  • name (required): Container name
  • synology_container_start - Start a Container Manager container
  • name (required): Container name
  • synology_container_stop - Stop a Container Manager container
  • name (required): Container name
  • synology_container_restart - Restart a Container Manager container
  • name (required): Container name
  • synology_container_delete - Delete a Container Manager container
  • name (required): Container name
  • force (optional): Force deletion (default: false)
  • preserve_profile (optional): Preserve Synology container profile (default: true)
  • synology_container_logs - Get Container Manager container logs
  • name (required): Container name
  • since (optional): Log start time/filter
  • offset (optional): Pagination offset (default: 0)
  • limit (optional): Maximum log lines to return (default: 1000)
  • synology_container_resource - Get real-time resource usage for a Container Manager container
  • name (required): Container name
  • synology_container_project_list - List Container Manager projects
  • synology_container_project_get - Get a Container Manager project
  • name (required): Project name
  • synology_container_project_create - Create a Container Manager project
  • name (required): Project name
  • share_path (required): Project folder path on the NAS
  • content (required): Docker Compose YAML content
  • enable_service_portal (optional): Enable Synology service portal (default: false)
  • service_portal_name (optional): Service portal name
  • service_portal_port (optional): Service portal port
  • service_portal_protocol (optional): Service portal protocol (default: http)
  • synology_container_project_update - Update a Container Manager project
  • name (required): Project name
  • content (required): Docker Compose YAML content
  • enable_service_portal (optional): Enable Synology service portal
  • service_portal_name (optional): Service portal name
  • service_portal_port (optional): Service portal port
  • service_portal_protocol (optional): Service portal protocol
  • synology_container_project_start - Start a Container Manager project
  • name (required): Project name
  • synology_container_project_stop - Stop a Container Manager project
  • name (required): Project name
  • synology_container_project_restart - Restart a Container Manager project
  • name (required): Project name
  • synology_container_project_build - Build a Container Manager project
  • name (required): Project name
  • synology_container_project_clean - Clean a Container Manager project
  • name (required): Project name
  • synology_container_project_delete - Delete a Container Manager project
  • name (required): Project name
  • synology_container_image_list - List Container Manager images
  • offset (optional): Pagination offset
  • limit (optional): Maximum images to return
  • show_dsm (optional): Include DSM images (default: false)
  • synology_container_image_get - Get a Container Manager image
  • name (required): Image repository name
  • tag (optional): Image tag (default: latest)
  • synology_container_image_delete - Delete a Container Manager image
  • name (required): Image repository name
  • tag (optional): Image tag (default: latest)
  • synology_container_image_pull - Pull a Container Manager image
  • repository (required): Image repository name
  • tag (optional): Image tag (default: latest)
  • synology_container_registry_list - List Container Manager registries
  • synology_container_registry_search - Search Container Manager registries
  • query (required): Image search query
  • offset (optional): Pagination offset
  • limit (optional): Maximum results to return
  • synology_container_registry_tags - List tags for a registry image
  • repository (required): Image repository name
  • offset (optional): Pagination offset
  • limit (optional): Maximum tags to return
  • synology_container_registry_download - Download a registry image
  • repository (required): Image repository name
  • tag (optional): Image tag (default: latest)
  • **`synologycontainernetwork_li

…

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source β€” we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.