Skip to content

Releases: nucleusv/linux-mcp-daemon

v0.3.5

Choose a tag to compare

@github-actions github-actions released this 26 Sep 20:58

Install or upgrade on Linux (systemd):

curl -fsSL https://raw.githubusercontent.com/nucleusv/linux-mcp-daemon/main/scripts/install.sh | sudo bash -s -- --version v0.3.5

Or install a package below: sudo apt install ./linux-mcp-daemon_0.3.5_amd64.deb / sudo dnf install ./linux-mcp-daemon-0.3.5-1.x86_64.rpm (arm64: _arm64.deb / .aarch64.rpm) - next steps.

Container image: ghcr.io/nucleusv/linux-mcp-daemon:0.3.5 (linux/amd64, linux/arm64).

Changelog

Features

  • e4d7ec2 feat(mcpd): stdio mode - MCP over stdin/stdout, as the caller, never root

Other

  • 8ed63f4 release: v0.3.5 notes, Release Notes docs page, 0.3.5 in the install commands

Upgrading from 0.3.4

Nothing to change: configs, tools and their output are the same.

  • New: mcpd stdio - MCP over stdin/stdout for clients that start a server as a local process: this machine (claude mcp add linux -- mcpd stdio), a remote server over SSH with no open port (ssh host mcpd stdio), or inside a container (docker exec -i app mcpd stdio --user app). No daemon, token or TLS. Calls run as the user who started mcpd and never as root: privileged: true is refused and mcp-sudo.yaml is not read; started as root, mcpd needs --user NAME. Stdio mode.
  • Notifications are no longer answered. A client's notifications/cancelled (or any message without an id) used to get a Method not found reply with id: null; JSON-RPC forbids replying to a notification.
  • Listed in MCP catalogs: the official MCP Registry (io.github.nucleusv/linux-mcp-daemon) and Glama.
  • Docs: a Release Notes page: what changed in each release.

v0.3.4

Choose a tag to compare

@github-actions github-actions released this 26 Sep 11:32

Install or upgrade on Linux (systemd):

curl -fsSL https://raw.githubusercontent.com/nucleusv/linux-mcp-daemon/main/scripts/install.sh | sudo bash -s -- --version v0.3.4

Or install a package below: sudo apt install ./linux-mcp-daemon_0.3.4_amd64.deb / sudo dnf install ./linux-mcp-daemon-0.3.4-1.x86_64.rpm (arm64: _arm64.deb / .aarch64.rpm) - next steps.

Container image: ghcr.io/nucleusv/linux-mcp-daemon:0.3.4 (linux/amd64, linux/arm64).

Changelog

Security

  • 0b09c51 fix(security): a privileged call with no host in view fails instead of running inside the container

Bug fixes

  • f3e7cb9 fix: clearer root hint and container error

Other

  • 7e505b2 configs: comment every grant of the privileged reference block
  • 8dcee77 docs(mcp-sudo): Docker's --privileged vs a call's privileged: true
  • a593c42 docs(mcp-sudo): why paths: ["/"] follows symlinks; containers without --pid host now fail
  • 2d4092b docs(site): Architecture right after Introduction in the sidebar
  • ffdd727 release: v0.3.4 notes; v0.3.4 in the install commands

Upgrading from 0.3.3

  • In a container, a privileged call now always reaches the host - or fails. With worker.containerized: true (the container image's config), a container started without --pid host sees its own PID 1; a privileged: true call used to run as root inside the container without an error, while the caller believed it acted on the host. It now fails with cannot switch to the host's filesystem - is the mcpd container running with --privileged --pid host?, and mcpd warns at startup. Start the container with --privileged --pid host as the install shows; if mcpd runs directly on the host with worker.containerized: true, set it to false. Details.
  • Clearer messages: a permission error for a tool the user may run as root names the tool and where it's granted (files/read is granted to you as root in mcp-sudo.yaml: retry with privileged: true).
  • Docs: the mcp-sudo page shows the full reference config with a comment on every grant, and explains Docker's --privileged versus a call's privileged: true.

v0.3.3

Choose a tag to compare

@github-actions github-actions released this 26 Sep 10:02

Install or upgrade on Linux (systemd):

curl -fsSL https://raw.githubusercontent.com/nucleusv/linux-mcp-daemon/main/scripts/install.sh | sudo bash -s -- --version v0.3.3

Or install a package below: sudo apt install ./linux-mcp-daemon_0.3.3_amd64.deb / sudo dnf install ./linux-mcp-daemon-0.3.3-1.x86_64.rpm (arm64: _arm64.deb / .aarch64.rpm) - next steps.

Container image: ghcr.io/nucleusv/linux-mcp-daemon:0.3.3 (linux/amd64, linux/arm64).

Changelog

Security

  • fc2e55d fix(security): a uid 0 MCP user is a config error
  • 003c9f6 fix(security): refuse MCP users that map to a uid 0 account

Features

  • 0d63cae feat(linuxctl): -k / -tls-insecure / MCP_TLS_INSECURE replace -insecure / MCP_INSECURE
  • 2061c52 feat(linuxctl): errors to stderr, and -silent / -s to drop them
  • f065434 feat: TLS by default, with a generated self-signed certificate
  • ac90d7b feat: penguin logo; the image no longer bundles the docs site
  • 9c2a826 feat: processes/list and processes/top JSON in bytes
  • b486952 feat: sizes in bytes by default everywhere, human_readable for units

Bug fixes

  • 9785164 fix(install.sh): the security note follows the installed config
  • 890ce58 fix(rpc): disks/free, disks/usage and files/list descriptions say sizes are bytes by default
  • 717a63e fix: findings from the live tool-by-tool test on the systemd host

Other

  • 8d8125c docs(ci): /next/ is for checking docs before a release - not in versions.json
  • c085f33 docs(site): blue-grey call to action and a navy 'unreleased' banner
  • afec62f docs(site): colors from the penguin logo
  • d2bfc76 docs(site): label the current release 'vX.Y.Z (current)'
  • a0ac42e docs(site): the newest release is labelled 'current' in the version menu
  • 922a5ca docs(site): version menu - 'current (vX.Y.Z)' first, older releases below, main last
  • b3c07e7 docs(site): versioned docs - latest release at the root, each release under /vX.Y.Z/, main under /next/
  • 59b9a40 docs(site): versions.json lists every version with its URL, in menu order
  • bdc9dfa investigations: backlog 27 - disks/usage prints the path first
  • fd964e1 investigations: backlog item 26, compare with two other Linux MCP servers
  • cc3b1a3 investigations: item 26 findings - os-mcp and Mohabdo21/linux-mcp compared
  • b096134 release: per-release notes from docs/release-notes/.md, v0.3.3's upgrade notes
  • 1094ed2 test(connections): TestMatchesSS retries until ss and /proc agree

Upgrading from 0.3.2

  • Sizes are bytes by default in every tool's text output; human_readable: true gives df -h/free -h-style units. JSON field renames: processes/list rss_kb → rss_bytes; processes/top mem_mib/swap_mib → mem_bytes/swap_bytes, virt_kib/res_kib/shr_kib → virt_bytes/res_bytes/shr_bytes.
  • TLS is on by default for new installs (a generated self-signed certificate on 9091; plain HTTP off). An existing daemon.yaml without a server.http block keeps serving plain HTTP as before. linuxctl defaults to https://localhost:9091 and trusts the server by MCP_TLS_FINGERPRINT or MCP_CA_CERT (linuxctl describe mcpd tls shows the fingerprint).
  • An MCP user whose OS account is root (uid 0) is a config error - mcpd won't start with one. Map MCP users to unprivileged accounts and grant root per tool.
  • Root grants on path tools need paths: (files/*, disks/usage, disks/free; paths: ["/"] for everything) - an error on reload and linuxctl edit, a warning at startup.
  • linuxctl: -insecure/MCP_INSECURE are now -tls-insecure/-k/MCP_TLS_INSECURE; errors go to stderr, -silent/-s drops them.
  • The container image no longer serves /docs/; the documentation is at https://nucleusv.github.io/linux-mcp-daemon/ (now versioned - this release's is at https://nucleusv.github.io/linux-mcp-daemon/v0.3.3/).

New: Permissions and Risks - read it before granting root.

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 24 Sep 12:07

Install or upgrade on Linux (systemd):

curl -fsSL https://raw.githubusercontent.com/nucleusv/linux-mcp-daemon/main/scripts/install.sh | sudo bash -s -- --version v0.3.2

Or install a package below: sudo apt install ./linux-mcp-daemon_0.3.2_amd64.deb / sudo dnf install ./linux-mcp-daemon-0.3.2-1.x86_64.rpm (arm64: _arm64.deb / .aarch64.rpm) - next steps.

Container image: ghcr.io/nucleusv/linux-mcp-daemon:0.3.2 (linux/amd64, linux/arm64).

Changelog

Bug fixes

  • 5bb7a4f fix(docs-ci): build the site for GitHub Pages' /linux-mcp-daemon/ baseUrl

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 24 Sep 11:14

Install or upgrade on Linux (systemd):

curl -fsSL https://raw.githubusercontent.com/nucleusv/linux-mcp-daemon/main/scripts/install.sh | sudo bash -s -- --version v0.3.1

Or install a package below: sudo apt install ./linux-mcp-daemon_0.3.1_amd64.deb / sudo dnf install ./linux-mcp-daemon-0.3.1-1.x86_64.rpm (arm64: _arm64.deb / .aarch64.rpm) - next steps.

Container image: ghcr.io/nucleusv/linux-mcp-daemon:0.3.1 (linux/amd64, linux/arm64).

Changelog

Security

  • c649604 fix(security): root file tools under a paths: limit never follow symlinks

Features

  • f5c18e5 feat(logging): readable text format - time, level and message without keys

Bug fixes

  • 827472c fix(logging): startup/listen failures are logged at ERROR at any level

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 09:55

Install or upgrade on Linux (systemd):

curl -fsSL https://raw.githubusercontent.com/nucleusv/linux-mcp-daemon/main/scripts/install.sh | sudo bash -s -- --version v0.3.0

Or install a package below: sudo apt install ./linux-mcp-daemon_0.3.0_amd64.deb / sudo dnf install ./linux-mcp-daemon-0.3.0-1.x86_64.rpm (arm64: _arm64.deb / .aarch64.rpm) - next steps.

Container image: ghcr.io/nucleusv/linux-mcp-daemon:0.3.0 (linux/amd64, linux/arm64).

Changelog

Features

  • 39784de feat(packaging): .deb and .rpm packages for amd64 and arm64
  • 67af8a3 feat: leveled, structured daemon logging (log/slog)
  • 1cb1048 feat: native files/filetype and network/connections (no file(1), no ss)

Bug fixes

  • eb10c8b fix(reload): don't list daemon.yaml twice when users still live in it

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 06:56

Install or upgrade on Linux (systemd):

curl -fsSL https://raw.githubusercontent.com/nucleusv/linux-mcp-daemon/main/scripts/install.sh | sudo bash -s -- --version v0.2.0

Container image: ghcr.io/nucleusv/linux-mcp-daemon:0.2.0 (linux/amd64, linux/arm64).

Changelog

Features

  • 2bde2c0 feat(files): ls -la style files/list; files/chmod and files/chown that never follow symlinks
  • 4c9441c feat(install): macOS mode installs the linuxctl CLI
  • 799ae10 feat: reload config without restart (daemon/reload-config); users move to users.yaml

Bug fixes

  • da65dce fix(config): grant files/stat to privileged; check_docs.sh covers resources and templates
  • 57375a3 fix(docker): copy docs/imgs into the docs build stage
  • 0c1ed4b fix(files/chmod): accept numeric modes (linuxctl sends 0755 as 755)
  • 39880d8 fix(linuxctl): positional args fill a tool's required fields; docs for list/chmod/chown
  • 56ba273 fix: enforce paths: for every path tool; linuxctl exit codes and flags; configs at /etc/mcpd/configs

Other

  • 6f5ef32 ci: move release actions to their Node 24 majors; pin ubuntu-24.04
  • fafb636 docs(backlog): leveled daemon logging; mark done items
  • 51881ab docs(install): fix gaps found by a from-scratch newcomer install
  • 654121b docs(install): newcomer walkthrough of the current code - upgrades, containers, no-systemd

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 23 Sep 22:38

Install or upgrade on Linux (systemd):

curl -fsSL https://raw.githubusercontent.com/nucleusv/linux-mcp-daemon/main/scripts/install.sh | sudo bash -s -- --version v0.1.0

Container image: ghcr.io/nucleusv/linux-mcp-daemon:0.1.0 (linux/amd64, linux/arm64).

Changelog

Security

  • 73aec77 feat(security): native sysctl, and per-user sysctl write restrictions
  • 9068ad8 feat(security): per-tool network destination restrictions for curl/ping
  • 3a7c7ac fix(security): input validation audit across all tools and resources
  • 64d1948 fix(security): sysctl write-policy check must fail closed; accept numeric values
  • c2e8212 refactor(security): drop sysctl.read_only; testuser gets glob write_keys

Features

  • a36f6b8 feat(cli): gracefully format nested JSON arrays and objects in table outputs
  • 887e38c feat(cli): recursively render nested arrays of objects as subtables
  • 0b9ab97 feat(cli): set list as default command for groups
  • 095e9c5 feat(linuxctl): bash/zsh completion, MCP_SERVER, table/json/yaml fixes
  • 20b65bc feat(release): versioned builds, release pipeline, install script
  • ea10d7d feat(tools): add disks/mounts, users/list, and logs/logins
  • f0eb4a2 feat(tools): add services/list tool for listing systemd services
  • d746824 feat: add automatic host-access for containerized deployments, system/packages tool, and fix multiple registry/config bugs
  • bf3596d feat: add disks/iostat tool to read /proc/diskstats
  • 3cea2cc feat: add disks://{name}/stats resource
  • 421b741 feat: add fdisk, smartctl, lsblk, traceroute to system tools pack
  • 448a44c feat: add network statistics to interfaces resource
  • 2f508a4 feat: add network://interfaces/{name} resource template
  • 816f7e2 feat: add robust binary file detection logic and fix curl build
  • 4be3a4a feat: complete implementation of file group tools (create, update, find, type)
  • 1a23cd5 feat: disks/list renders an lsblk-style device tree
  • 127b062 feat: implement files/read precision streaming with line and byte offsets
  • 8691e56 feat: implement files/stat and files/content resource endpoints with strict context truncation
  • 95d52b5 feat: implement linuxctl verb/group grammar, UID pinning, docs restructure
  • 2cb0c80 feat: implement process resource templates
  • f06f5e6 feat: implement system operations & debugging pack (dbus services, journalctl, dmesg, sysctl)
  • ae51714 feat: local-only linuxctl mcpd user/token admin, salted token hashes
  • 5f9d96d feat: processes/top - a native top -b -n 1; syscall.Kill for delete

Bug fixes

  • 1394f72 fix(auth): protect cached resources from being served to unauthorized users by adding pre-authorization checks
  • 80f154c fix(config): update mcp-sudo.yaml to use valid array structure for static resources
  • 3a60057 fix(docs): escape curly braces for MDX
  • 63bb872 fix(linuxctl): readable YAML from mcpd user create; accurate next steps
  • 1838355 fix(linuxctl,top): table/wide rendering - column order, cells, top layout
  • 619478d fix(mcp): split resourceTemplates into official resources/templates/list JSON-RPC protocol endpoint
  • d2d6c7e fix(network): correctly export ReadRoutes signature and add routes package import
  • a66d458 fix(tools): remove literal backslashes from OutputFormat json struct tags
  • 66008d7 fix: add ARM64 fallbacks for cpuinfo extraction
  • 73d4316 fix: build mcpd for the actual target architecture, not hardcoded arm64
  • 4b6efcc fix: linuxctl arg parsing and rpc schema updates
  • 25760da fix: native disks/partitions, journal-control gaps, linuxctl table formatting
  • edf625f fix: packages lists packages; interfaces read in a worker; disks/health usable
  • 3d2ad2d fix: rename get mcp meta-group to get mcp-api (avoid mcpd confusion
  • 91b0990 fix: resolve JSON formatting errors in cpu/list and disks/usage tools
  • 55b1130 fix: resolve sudoConfig undefined compilation error
  • c604f3d fix: setns(CLONE_NEWNS) fails to compile on linux/amd64

Other

  • e892ea9 Add README
  • bab3e07 Add inline Go documentation to tool parameter structs
  • d773496 Add man pages for mcpd and linuxctl
  • 9c7ee45 Add pure Go disk_free and disk_usage tools
  • 0c92d74 Add tools_group metadata to tool schemas
  • c298169 CLI: Add 'linuxctl stdio' command to proxy JSON-RPC between Claude Desktop and Daemon
  • abceed1 CLI: Add smart positional argument mapping for path parameters
  • 6869e7a CLI: Drop verb, support / syntax with suffix matching
  • 7c7299c CLI: Implement syntax based on tools_group metadata
  • 582d1b9 CLI: Refactor linuxctl to use kubectl Verb + Resource paradigm
  • afceeb8 CLI: Refactor linuxctl to use tools_group dynamic command tree
  • e6d9473 Change base image to ubuntu and install tools
  • 8e2e480 Daemon: Implement MCP initialization and ping lifecycle methods
  • 399b621 Docs: Add Configuration section for daemon.yaml and mcp-sudo.yaml
  • 845f8e7 Docs: Update linuxctl man pages for new / syntax
  • b619101 Feature: Implement native TLS support in daemon
  • c2dab8d Feature: Support concurrent HTTP and HTTPS port binding
  • c7b1435 Finish Phase 2: MCP Protocol Compliance and Isolated Resources
  • 4f36992 Finish Phase 3: Implement devices as isolated worker resources
  • 4e7a0a1 Fix worker permission denied by moving mcpd out of /root
  • 5e9d1f3 Fix: Force rollout restart in deploy script to ensure new local image layers are loaded by Kubernetes
  • 4da8c1d Fix: Set deployment strategy to Recreate to avoid hostNetwork port conflicts during rollouts
  • 3b426bd Implement Ephemeral Workers, get_sudo_rules, and Dynamic Sudo Discovery
  • 588e06f Implement Phase 5: Native Network tools (ping, arp, curl, nslookup)
  • 78375e8 Implement SSE, JSON-RPC routing, Rate Limiter and list_directory tool
  • 96413c8 Implement Singleflight caching and advanced du parameters
  • f61acf0 Implement advanced parameters for du and df tools
  • 988120d Implement deep nesting group/action/name folder structure
  • e76d557 Implement per-tool timeout overrides in daemon config
  • ddb08c9 Implement worker timeouts via context.WithTimeout
  • cc5c70d Initial commit
  • 19c84ae Initialize docs-website with Vite and premium design
  • 22882f5 Install man-db and add man pages to Docker image
  • a54ce32 Migrate documentation site to Docusaurus and serve via daemon
  • 671b1e1 Move struct documentation inline
  • 02d122b Pipeline: Use dynamic container tags to fix stale Kubernetes deployments and dynamically map expected doc routes in tests
  • 74cc88b Refactor tools into subpackages
  • 4629382 Refactor: Move docs-website into docs/website
  • cc8de53 Refactor: Update mcp-sudo.yaml to use privileged map schema with paths validation
  • 679f3fb Rename du.go to disk_usage.go and df.go to disk_free.go
  • 58f98a3 Restructure plan directory into tools and resources
  • f4e36d5 Scripts: Add master run_all.sh script to build, deploy, and test the entire stack
  • 954607c Tests: Add end-to-end integration testing for MCP SSE protocol and documentation server
  • 44b739d Tests: Add get_disk_space to linuxctl test suite
  • d18950e Tests: Add linuxctl tes...
Read more