The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Synology NAS listing page.
MCP server for Synology NAS devices. Exposes Synology DSM API functionality as MCP tools that Claude can use.
If you're upgrading from synology-mcp (v0.3.x or earlier), the package has been renamed. A migration script handles config, state, keyring entries, and Claude Desktop config automatically:
The script migrates:
~/.config/synology-mcp/ → ~/.config/mcp-synology/)~/.local/state/synology-mcp/ → ~/.local/state/mcp-synology/)claude_desktop_config.json (updates command and paths)See CHANGELOG.md for full details on breaking changes.
Browse, search, transfer, and manage files on your NAS. 14 tools across two permission tiers:
Monitor NAS health and resource utilization. 2 read-only tools:
Requires uv. uvx downloads and runs the latest version automatically — no separate install step needed.
Setup will prompt for your NAS host, credentials, and preferences. If your account has 2FA enabled, it will prompt for an OTP code and store a device token for automatic future logins.
At the end, it prints a Claude Desktop JSON snippet ready to copy-paste.
Copy the snippet from setup into your claude_desktop_config.json and restart Claude Desktop. It will look something like:
The config file name (e.g., nas.yaml) also serves as a natural identifier for the connection — you can name it to match your NAS (e.g., home-nas.yaml, office-nas.yaml).
On Linux, the server auto-detects the D-Bus session socket for keyring access. If auto-detection fails, add "env": {"DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/<uid>/bus"} to the Claude Desktop config. The setup command includes this in the generated snippet.
If you prefer a persistent install (avoids download on each invocation). Requires uv — install with curl -LsSf https://astral.sh/uv/install.sh | sh (macOS/Linux) or see the installation guide for other options.
No config file needed if SYNOLOGY_HOST is set. This is useful for Docker or CI environments:
Or from the CLI:
mcp-synology fully supports DSM accounts with two-factor authentication. It's auto-detected — you don't need to configure anything special:
mcp-synology setup detects 2FA, prompts for your OTP code, and stores a device token in the keyringDevice tokens persist until you explicitly revoke them in DSM (Personal > Security > Sign-in Activity). They do not expire on their own. If a token is revoked, run mcp-synology setup again to re-bootstrap.
Credentials are stored in the OS keyring and accessed transparently:
| Platform | Backend | Notes |
|---|---|---|
| macOS | Keychain | Just works |
| Windows | Credential Manager | Just works |
| Linux | GNOME Keyring / KWallet | Auto-detects D-Bus session, works from Claude Desktop |
Credential resolution order: env vars > config file > keyring. Explicit sources override the implicit default.
For environments without a keyring (Docker, CI), use environment variables or inline credentials in the config file.
See docs/credentials.md for keyring service names, multi-NAS setup, and how to inspect/remove stored credentials.
mcp-synology checks for updates and notifies you in your Claude Desktop conversation — the first tool response in each session will include a notice if a newer version is available on PyPI.
To manage updates from the CLI:
To disable update notifications, add to your config (top level):
Interactive setup creates a config file for you. For manual configuration or advanced options, see examples/:
config-minimal.yaml — simplest possible configconfig-power-user.yaml — HTTPS, custom timeouts, logging, instructionsconfig-docker.yaml — environment-variable-drivenEach NAS gets its own config file, credentials, and Claude Desktop entry. The config file name serves as a natural identifier (e.g., home-nas.yaml, media-server.yaml).
Set alias to give Claude a display name for the connection:
The alias appears in the MCP server name (e.g., synology-HomeNAS) so Claude knows which NAS it's talking to.
Custom instructions let you shape how Claude interacts with your NAS tools. This is useful when:
Add context — custom_instructions is prepended to the built-in prompt (higher priority):
Full control — instructions_file replaces the built-in prompt entirely. Copy the built-in server.md as a starting point:
Both support template variables: {display_name}, {instance_id}, {host}, {port}.
Two ways to enable debug logging:
Or set it persistently in your config file:
Debug output includes every DSM API request/response (passwords masked), credential resolution steps, config discovery, version negotiation, and module registration decisions.
See DEVELOPMENT.md for build commands, testing, integration test setup, and design docs.
This project was built using a Spec-First Coding approach — a human-AI collaboration model where design precedes implementation and specs are the contract between the two.
Unlike vibe coding, where you describe what you want and let the AI generate code on the fly, spec-first coding treats design as a separate, deliberate phase. The four specs in docs/specs/ were developed through extended conversation — exploring trade-offs, rejecting alternatives, and documenting decisions with rationale. Implementation then used the specs as the source of truth across 11 build phases.
Live testing against real hardware revealed behaviors the specs couldn't anticipate (DSM API quirks, search service throttling, version format incompatibilities). These discoveries are documented in CLAUDE.md and the code, which is authoritative where specs diverge.