Skip to content

πŸ’Ύ 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.

License

Notifications You must be signed in to change notification settings

atom2ueki/mcp-server-synology

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’Ύ Synology MCP Server

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"
      }
    }
  }
}

🌟 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_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

βš™οΈ Configuration Options

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

πŸ“– Usage Examples

πŸ“ File Operations

βœ… Creating Files and Directories

File Creation

// 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
}

πŸ—‘οΈ Deleting Files and Directories

File Deletion

// 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"
}

⬇️ Download Management

πŸ› οΈ Creating a Download Task

Download Sample

// Create download task
{
  "uri": "https://example.com/file.zip",
  "destination": "/volume1/downloads"
}

// Pause tasks
{
  "task_ids": ["dbid_123", "dbid_456"]
}

🦦 Download Results

Download Result

✨ Features

  • βœ… Unified Entry Point - Single main.py supports both stdio and WebSocket clients
  • βœ… Environment Controlled - Switch modes via ENABLE_XIAOZHI environment variable
  • βœ… Multi-Client Support - Simultaneous Claude/Cursor + Xiaozhi access
  • βœ… Secure Authentication - RSA encrypted password transmission
  • βœ… Session Management - Persistent sessions across multiple NAS devices
  • βœ… Complete File Operations - Create, delete, list, search, rename, move files with detailed metadata
  • βœ… Directory Management - Recursive directory operations with safety checks
  • βœ… Download Station - Complete torrent and download management
  • βœ… Docker Support - Easy containerized deployment
  • βœ… Backward Compatible - Existing configurations work unchanged
  • βœ… Error Handling - Comprehensive error reporting and recovery

πŸ—οΈ Architecture

File Structure

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

Mode Selection

  • 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! πŸš€

About

πŸ’Ύ 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.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published