Synology MCP
STDIOMCP server enabling AI assistants to manage Synology NAS files and downloads.
MCP server enabling AI assistants to manage Synology NAS files and downloads.

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!
# Clone repository git clone https://github.com/atom2ueki/mcp-server-synology.git cd mcp-server-synology # Create environment file cp env.example .env
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/
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
# Install dependencies pip install -r requirements.txt # Run with environment control python main.py
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" } } }
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" } } }
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" } } }
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" } } }
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" } } } }
New unified architecture supports both clients simultaneously!
ENABLE_XIAOZHI=true XIAOZHI_TOKEN=your_xiaozhi_token_here
# Same command, different behavior based on environment python main.py # OR docker-compose up
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!
synology_status - Check authentication status and active sessionssynology_login - Authenticate with Synology NAS (conditional)synology_logout - Logout from session (conditional)list_shares - List all available NAS shareslist_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 directorypattern (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 nameforce_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 pathnew_name (required): New filenamemove_file - Move files to new location
source_path (required): Source file pathdestination_path (required): Destination pathoverwrite (optional): Overwrite existing filesds_get_info - Get Download Station informationds_list_tasks - List all download tasks with status
offset (optional): Pagination offsetlimit (optional): Max tasks to returnds_create_task - Create new download task
uri (required): Download URL or magnet linkdestination (optional): Download folder pathds_pause_tasks - Pause download tasks
task_ids (required): Array of task IDsds_resume_tasks - Resume paused tasks
task_ids (required): Array of task IDsds_delete_tasks - Delete download tasks
task_ids (required): Array of task IDsforce_complete (optional): Force delete completedds_get_statistics - Get download/upload statistics| Variable | Required | Default | Description | 
|---|---|---|---|
SYNOLOGY_URL | Yes* | - | NAS base URL (e.g., http://192.168.1.100:5000) | 
SYNOLOGY_USERNAME | Yes* | - | Username for authentication | 
SYNOLOGY_PASSWORD | Yes* | - | Password for authentication | 
AUTO_LOGIN | No | true | Auto-login on server start | 
VERIFY_SSL | No | true | Verify SSL certificates | 
DEBUG | No | false | Enable debug logging | 
ENABLE_XIAOZHI | No | false | Enable Xiaozhi WebSocket bridge | 
XIAOZHI_TOKEN | Xiaozhi only | - | Authentication token for Xiaozhi | 
XIAOZHI_MCP_ENDPOINT | No | wss://api.xiaozhi.me/mcp/ | Xiaozhi WebSocket endpoint | 
*Required for auto-login and default operations

// List directory { "path": "/volume1/homes" } // Search for PDFs { "path": "/volume1/documents", "pattern": "*.pdf" } // Create new file { "path": "/volume1/documents/notes.txt", "content": "My important notes\nLine 2 of notes", "overwrite": false }

// Delete file or directory (auto-detects type) { "path": "/volume1/temp/old-file.txt" } // Move file { "source_path": "/volume1/temp/file.txt", "destination_path": "/volume1/archive/file.txt" }

// Create download task { "uri": "https://example.com/file.zip", "destination": "/volume1/downloads" } // Pause tasks { "task_ids": ["dbid_123", "dbid_456"] }

main.py supports both stdio and WebSocket clientsENABLE_XIAOZHI environment variablemcp-server-synology/
├── main.py                    # 🎯 Unified entry point
├── src/
│   ├── mcp_server.py         # Standard MCP server
│   ├── multiclient_bridge.py # Multi-client bridge
│   ├── auth/                 # Authentication modules
│   ├── filestation/          # File operations
│   └── downloadstation/      # Download management
├── docker-compose.yml        # Single service, environment-controlled
├── Dockerfile
├── requirements.txt
└── .env                      # Configuration
ENABLE_XIAOZHI=false → main.py → mcp_server.py (stdio only)ENABLE_XIAOZHI=true → main.py → multiclient_bridge.py → mcp_server.py (both clients)Perfect for any workflow - from simple Claude/Cursor usage to advanced multi-client setups! 🚀