Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Ugnas MCP

by Omodaka9375version 0.1.2i★ –iRuns on your computer
Registry nameio.github.Omodaka9375/ugnas-mcp

Install

Overview

Description from the maker (original English)

Generic MCP server for UGREEN NAS (UGOS) over SSH — 39 tools with dry-run safety.

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

  • Connection: Runs on your computer
  • Transport: stdio
  • Category: Developer tools
  • You need to fill in: UGNAS_KEY_PATH, UGNAS_PASSWORD

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 1 of 1 passed
  • Runs on your computer with your user’s permissions (files, network, apps).
  • You fill in yourself: UGNAS_MCP_CONFIG, UGNAS_HOST, UGNAS_USER, UGNAS_KEY_PATH, UGNAS_PASSWORD, UGNAS_PORT, UGNAS_DEFAULT_SHARE, UGNAS_HOST_KEY_SHA256

Values marked secret are keys to your account. Never share them or paste them into a chat.

You need

  • npmNode.js installed (for the npx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "ugnas": {
      "command": "npx",
      "args": [
        "-y",
        "ugnas-mcp"
      ],
      "env": {
        "UGNAS_MCP_CONFIG": "your-value",
        "UGNAS_HOST": "your-value",
        "UGNAS_USER": "your-value",
        "UGNAS_KEY_PATH": "your-value",
        "UGNAS_PASSWORD": "your-value",
        "UGNAS_PORT": "your-value",
        "UGNAS_DEFAULT_SHARE": "your-value",
        "UGNAS_HOST_KEY_SHA256": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add ugnas --env UGNAS_MCP_CONFIG=your-value --env UGNAS_HOST=your-value --env UGNAS_USER=your-value --env UGNAS_KEY_PATH=your-value --env UGNAS_PASSWORD=your-value --env UGNAS_PORT=your-value --env UGNAS_DEFAULT_SHARE=your-value --env UGNAS_HOST_KEY_SHA256=your-value -- npx -y ugnas-mcp

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "ugnas": {
      "command": "npx",
      "args": [
        "-y",
        "ugnas-mcp"
      ],
      "env": {
        "UGNAS_MCP_CONFIG": "your-value",
        "UGNAS_HOST": "your-value",
        "UGNAS_USER": "your-value",
        "UGNAS_KEY_PATH": "your-value",
        "UGNAS_PASSWORD": "your-value",
        "UGNAS_PORT": "your-value",
        "UGNAS_DEFAULT_SHARE": "your-value",
        "UGNAS_HOST_KEY_SHA256": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "ugnas": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "ugnas-mcp"
      ],
      "env": {
        "UGNAS_MCP_CONFIG": "your-value",
        "UGNAS_HOST": "your-value",
        "UGNAS_USER": "your-value",
        "UGNAS_KEY_PATH": "your-value",
        "UGNAS_PASSWORD": "your-value",
        "UGNAS_PORT": "your-value",
        "UGNAS_DEFAULT_SHARE": "your-value",
        "UGNAS_HOST_KEY_SHA256": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • UGNAS_MCP_CONFIG env
    Path to the config JSON (default: ~/.ugnas-mcp/config.json). See the README for the schema.
  • UGNAS_HOST env
    NAS host, e.g. 192.168.1.50. Overrides the config file.
  • UGNAS_USER env
    SSH username. Overrides the config file.
  • UGNAS_KEY_PATH secret env
    Path to the SSH private key (alternative to UGNAS_PASSWORD).
  • UGNAS_PASSWORD secret env
    SSH password (alternative to UGNAS_KEY_PATH).
  • UGNAS_PORT env
    SSH port. Overrides the config file.
  • UGNAS_DEFAULT_SHARE env
    Base directory for relative tool paths (default /volume1).
  • UGNAS_HOST_KEY_SHA256 env
    Pinned SSH host key fingerprint (SHA256:...).

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Runs on your computer; the tool list appears in your AI app after you install it.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account Omodaka9375, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • – Not applicable

    Endpoint responds

    This one runs on your computer; there is no internet endpoint

  • – Not applicable

    Sign-in with OAuth

    Runs on your computer and uses local settings instead

  • … Not checked yet

    No hidden instructions in tool descriptions

    Runs on your computer; we can only read tool lists from internet endpoints

Compared with others in Developer toolsi

  • More stars than 0% of the other 4937 servers in this category
  • Published to the registry more recently than 65% of the other 4937 servers in this category
  • Basic checks equal to or better than 100% of the other 4937 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Ugnas MCP safe?

It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

You need to fill in: UGNAS_KEY_PATH, UGNAS_PASSWORD

Does it run on my computer or in the cloud?

It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.1.2) reached the registry 22 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.

What can I use instead?

In the same category: GitHub, Desktop Commander, Cloudflare MCP

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

GitHub

GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.

by githubWidely used★ 34.2KUpdated 5 days ago

Computer or cloud

Desktop Commander

MCP server for terminal commands, file operations, and process management

by wonderwhy-erWidely used↓ 709.6K/wk★ 10.2KUpdated 17 days ago

Runs on your computer

Cloudflare MCP

Cloudflare MCP servers

by cloudflareGrowing★ 4.4KUpdated 14 months ago

Runs in the cloud✓ mcp.cloudflare.com

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

ugnas-mcp

npx -y ugnas-mcp

A generic MCP (Model Context Protocol) server for UGREEN NAS devices running UGOS, talking to the NAS over SSH (with SFTP for file transfers).

Unlike most existing UGREEN NAS integrations, nothing here is hard-coded — no fixed IPs, subnets, usernames, or share names. Every target-specific value comes from your config, so the same server works for anyone's NAS.

What it does

Organized the way a NAS owner actually thinks about daily operations:

GroupToolsMutating?
Connection & systemsystem.status, system.info, system.poolsread-only
Dockerdocker.containers.* (list/inspect/logs/start/stop/restart/remove), docker.images.* (list/pull/remove), docker.networks.* (list/inspect/create/remove/connect/disconnect), docker.composestart/stop/restart/pull/remove/create/compose are gated
Files & datafiles.list, files.usage, files.find, files.thumbnail, files.mkdir, files.copy, files.move, files.remove, files.upload, files.download, files.syncthumbnail/mkdir/copy/move/remove/upload/download/sync are gated
Backupbackup.create, backup.list, backup.verify, backup.restore, backup.schedulecreate/restore/schedule are gated
Networksnetwork.interfaces, network.routes, network.portsread-only

39 tools total. system.pools reports mdadm array + degradation state, LVM volume/logical/physical volumes, btrfs devices, block devices, and filesystems.

files.find searches a directory tree by name glob and/or extension (returns path, size, modified time). files.thumbnail renders a preview of an image or a video frame with ffmpeg on the NAS and downloads it locally — read-only with respect to your NAS data (only a /tmp scratch file is written and removed), but writing the thumbnail to the local machine is gated: the first call returns a dry-run plan, and you confirm with the token to write the local file. Requires ffmpeg on the NAS (present on UGOS by default).

files.list and files.find prefer GNU coreutils flags (ls --time-style=long-iso, find -printf); when those are unavailable (BusyBox), they fall back to ls -1p and find -exec stat so they keep working — with size/mtime zeroed out for plain ls where BusyBox can't report them.

files.sync and the rsync fallback

files.sync uses rsync for fast, resumable NAS↔NAS copies, with --delete mirroring and an rsync --dry-run pre-flight. rsync is not installed on UGOS by default, so:

  • Default (`fallback: "refuse"`) — if rsync is missing, the dry-run plan still shows the rsync command but adds a note telling you how to install rsync (Entware: opkg install rsync) or how to turn on the fallback. Nothing runs until you confirm.
  • Opt in (`fallback: "cp"`) — the tool instead falls back to a built-in cp -a copy. The plan's note explains this, and warnings call out what the fallback can't do: no --delete mirroring, no rsync --dry-run, and extraArgs are ignored.

So you opt in per call by passing fallback: "cp". Nothing changes unless you ask for it.

Safety model — dry-run first, then confirm

Every mutating tool has two phases:

  1. Call without a token → returns a *dry-run plan*: the exact shell commands it *would* run, a human summary, any warnings, and a short-lived confirmationToken.
  2. Call again with `confirmToken` → the token is validated (action-bound, single-use, expires in 10 minutes) and the exact commands captured at plan time are executed.

Read-only tools never need a token. This makes "copy my data", "pull this image", or "restart that container" reviewable before anything changes.

All user-supplied values (paths, container names, image tags) are POSIX-shell-quoted before being interpolated into a remote command, so they cannot break out into arbitrary command execution.

At confirm time, the arguments of the confirming call are cross-checked against the plan-time arguments captured in the token: if they differ, the tool refuses and asks you to re-run for a fresh plan (so a stale token can never execute a differently-argued action).

Configuration

The server reads a JSON config from ~/.ugnas-mcp/config.json (override with the UGNAS_MCP_CONFIG environment variable). See config.example.json.

{

"name": "home-nas", "host": "192.168.1.50", "port": 22, "username": "admin", "auth": { "type": "key", "privateKeyPath": "~/.ssh/id_ed25519" }, "defaultShare": "/volume1", "commandTimeoutMs": 60000 }

FieldRequiredNotes
hostyesIP or hostname of the NAS.
portnoSSH port, default 22.
usernameyesSSH user.
authyes{ "type": "key", "privateKeyPath": "..." } (recommended, supports passphrase) or { "type": "password", "password": "..." }. privateKeyPath may also be raw inline PEM.
defaultSharenoBase directory for relative tool paths, default /volume1.
sftpRootnoThe directory the SFTP subsystem is rooted at. On UGOS, SFTP is chrooted to the share root, so an exec path like /volume1/docker/x must be requested over SFTP as /docker/x; set this to the chroot root (defaults to defaultShare). Use "/" if your NAS does not chroot SFTP.
hostKeySha256noWhen set, the SSH host key is pinned and enforced (e.g. SHA256:...). Compare is padding-insensitive, so the canonical fingerprint from ssh-keygen -lf works as-is.
commandTimeoutMsnoPer-command timeout, default 60000.
Environment-variable overrides

Useful for CI or secret injection. Env values win over the file:

UGNAS_HOST=192.168.1.50

UGNAS_PORT=22 UGNAS_USER=admin UGNAS_KEY_PATH=~/.ssh/id_ed25519 # or UGNAS_AUTH_TYPE=password + UGNAS_PASSWORD UGNAS_DEFAULT_SHARE=/volume1 UGNAS_HOST_KEY_SHA256=SHA256:...

Relative vs absolute paths

File/backup tools accept either. An absolute path is used as-is; a relative path is joined onto defaultShare:

files.list("media")  ->  /volume1/media

files.list("/mnt/x") -> /mnt/x

Install & run

Published on npm as ugnas-mcp. Run it directly — no clone, no build:

npx ugnas-mcp

or install it once:

npm install -g ugnas-mcp ugnas-mcp

That starts the stdio MCP server. It reads its config from ~/.ugnas-mcp/config.json (or UGNAS_MCP_CONFIG / UGNAS_* env vars — see Configuration).

Wiring it into an MCP client

Point your client at the official package (stdio):

{

"mcpServers": { "ugnas": { "command": "npx", "args": ["-y", "ugnas-mcp"], "env": { "UGNAS_MCP_CONFIG": "/absolute/path/to/config.json" } } } }

Or, if you installed it globally, "command": "ugnas-mcp" with no args.

Optional HTTP transport

The server is stdio by default. Set UGNAS_HTTP_PORT to *also* expose a streamable HTTP transport (both run side by side):

UGNAS_HTTP_HOST=127.0.0.1 UGNAS_HTTP_PORT=4110 ugnas-mcp
  • POST http://127.0.0.1:4110/mcp — JSON-RPC (stateless; a fresh session per request, max 1 MiB body).
  • GET http://127.0.0.1:4110/health — liveness + target host.

It binds to loopback by default. UGNAS_HTTP_HOST=0.0.0.0 (or any non-loopback address) is refused unless `UGNAS_HTTP_ALLOW_REMOTE=1` is also set — the /mcp endpoint has no authentication, and confirmation tokens are process-wide, so only opt in if the port is secured by something else (reverse proxy with auth, VPN, etc.).

Prerequisites on the NAS

  • SSH enabled (UGOS: *Control Panel → Terminal & SNMP*).
  • The SSH user can run docker (be in the docker group) and, for scheduled backups, use crontab.
  • tar, df, du, ip, ss are present on UGOS — these are standard.
  • backup.schedule job names must be plain words ([A-Za-z0-9._-]) — they are embedded in a generated shell script and a crontab line, so anything else is rejected up front.
  • rsync is optional, used only by files.sync. If it's missing you get a note explaining how to install it or how to enable the built-in cp fallback (files.sync { fallback: "cp" }); every other file tool works without rsync.

License

MIT — see LICENSE. Contributing, architecture, and the dev/release toolchain live in DEVELOPMENT.md.

Ask PopNx