npm package: @iflow-mcp/do-boo-mcp-synolink
Description: MCP server for Synology NAS file operations
Author: Do-Boo
Latest version: 1.0.0

# SynoLink MCP Server

A Node.js server implementing Model Context Protocol (MCP) for Synology NAS file operations. This server allows you to interact with your Synology NAS device through Claude or other compatible AI assistants.

## Features

- Login/logout to Synology DSM
- List files and folders
- Download file contents
- Upload files
- Create folders
- Delete files/folders
- Move/rename files and folders
- Search functionality
- Create and list sharing links
- Get server information
- Get quota information

## Prerequisites

- Node.js 18 or higher
- npm or yarn
- Synology NAS with DSM 6.0 or higher
- Network access to your Synology NAS

## Installation

Clone this repository:

```bash
git clone https://github.com/Do-Boo/MCP-SynoLink.git
cd MCP-SynoLink
```

Install dependencies:

```bash
npm install
```

Build the project:

```bash
npm run build
```

## Usage with Claude Desktop

### Node.js Method

Add this to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "synolink": {
      "command": "node",
      "args": [
        "/path/to/MCP-SynoLink/dist/index.js",
        "https://your-synology-url:port",
        "your-username",
        "your-password"
      ]
    }
  }
}
```

### Docker Method

Build the Docker image:

```bash
docker build -t mcp/synolink .
```

Then add this to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "synolink": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "mcp/synolink",
        "https://your-synology-url:port",
        "your-username",
        "your-password"
      ]
    }
  }
}
```

### Security Note

Always be careful with credentials. The current implementation sends the password as a command-line argument, which may be visible in process listings. For improved security in a production environment, consider implementing alternative authentication methods.

## API Documentation

The server provides the following tools:

### Authentication Tools

- **login**
  - Authenticates with the Synology NAS
  - No parameters required (uses credentials from command line)

- **logout**
  - Logs out from the Synology NAS
  - No parameters required

### File Management Tools

- **list_folders**
  - Lists files and folders in a directory
  - Input: `path` (string) - Path to list files from, e.g., '/photos'

- **get_file**
  - Gets the content of a file
  - Input: `path` (string) - Full path to the file on Synology NAS

- **upload_file**
  - Uploads a file to Synology NAS
  - Inputs:
    - `path` (string) - Destination path on Synology NAS including filename
    - `content` (string) - Content of the file to upload

- **create_folder**
  - Creates a new folder
  - Inputs:
    - `path` (string) - Full path to create folder at
    - `name` (string) - Name of the new folder

- **delete_item**
  - Deletes a file or folder
  - Input: `path` (string) - Full path to the file or folder to delete

- **move_item**
  - Moves or renames a file or folder
  - Inputs:
    - `source` (string) - Full path to the source file or folder
    - `destination` (string) - Full path to the destination location

### Search and Information Tools

- **search**
  - Searches for files and folders
  - Inputs:
    - `keyword` (string) - Search keyword
    - `path` (string, optional) - Path to search in, defaults to "/"

- **get_share_links**
  - Gets or creates sharing links for a file or folder
  - Input: `path` (string) - Path to get share links for

- **get_server_info**
  - Gets information about the Synology server
  - No parameters required

- **get_quota_info**
  - Gets quota information for volumes
  - Input: `volume` (string, optional) - Volume name, if omitted shows all volumes

## License

MIT License

## Acknowledgements

- [Synology Web API](https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/FileStation/All/enu/Synology_File_Station_API_Guide.pdf)
- [Model Context Protocol](https://modelcontextprotocol.io/)