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

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.