MCP Servers

A collection of Model Context Protocol servers, templates, tools and more.

The most comprehensive MCP server for TrueNAS SCALE — 278 actions, 12 resources, 1 hierarchical tool (~200 tokens vs ~28k)

Created 3/31/2026
Updated about 9 hours ago
Repository documentation and setup instructions

truenas-mcp

The most comprehensive MCP server for TrueNAS SCALE. 278 actions across 18 categories covering the entire TrueNAS REST API — behind a single hierarchical tool that won't bloat your LLM's context window.

Why This One?

| | truenas-mcp | Others | |---|---|---| | Actions | 278 | 5–80 | | Token footprint | ~200 tokens (1 tool) | 5,000–30,000 tokens (50–80 tools) | | Discovery | Hierarchical — ask for what you need | Flat — everything loaded upfront | | MCP Resources | 12 read-only dashboards | 0 | | Install | npx truenas-mcp | Build from source / pip | | Safety | Destructive ops require confirm: true | Varies |

Quick Start

# Using npx (no install needed)
TRUENAS_URL=https://truenas.local TRUENAS_API_KEY=1-abc123 npx truenas-mcp

# Or install globally
npm install -g truenas-mcp

Environment Variables

| Variable | Required | Description | |----------|----------|-------------| | TRUENAS_URL | Yes | TrueNAS instance URL (e.g. https://truenas.local) | | TRUENAS_API_KEY | Yes | API key from TrueNAS UI: Settings > API Keys > Add | | TRUENAS_VERIFY_SSL | No | Set to false to skip SSL verification (self-signed certs) |

Claude Desktop Configuration

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "truenas": {
      "command": "npx",
      "args": ["-y", "truenas-mcp"],
      "env": {
        "TRUENAS_URL": "https://truenas.local",
        "TRUENAS_API_KEY": "1-your-api-key-here",
        "TRUENAS_VERIFY_SSL": "false"
      }
    }
  }
}

Claude Code

claude mcp add truenas -- npx -y truenas-mcp \
  --env TRUENAS_URL=https://truenas.local \
  --env TRUENAS_API_KEY=1-your-api-key-here \
  --env TRUENAS_VERIFY_SSL=false

How It Works — Hierarchical Tool Design

Instead of registering 278 individual tools (which would consume ~30k tokens in the LLM system prompt), this server exposes one tool called truenas with three usage modes:

1. Discover categories

truenas()

Returns all 18 categories with descriptions and action counts (~200 tokens).

2. Explore a category

truenas({ category: "storage" })

Returns all actions in that category with their required/optional parameters.

3. Execute an action

truenas({ category: "storage", action: "pool_list" })
truenas({ category: "storage", action: "dataset_create", params: { name: "tank/media", compression: "LZ4" } })

This means the LLM only pays the token cost for what it actually uses.

Categories

| Category | Actions | Covers | |----------|---------|--------| | system | 24 | System info, config, services, mail, API keys, NTP | | storage | 32 | Pools, datasets, snapshots, periodic snapshot tasks | | sharing | 36 | SMB/CIFS, NFS exports, iSCSI targets/extents/portals/initiators | | network | 15 | Interfaces, global config, static routes, IPMI, staged changes | | account | 16 | Users, groups, privileges/roles | | disk | 7 | Physical disks, SMART tests, temperatures | | vm | 16 | Virtual machines, VM devices (disk, NIC, display, PCI) | | app | 17 | Docker apps, container runtime config | | update | 14 | System updates, boot environments, boot pool | | certificate | 8 | TLS certs, ACME/Let's Encrypt, DNS authenticators | | alert | 10 | Alerts, notification services (Slack, email, PagerDuty) | | data_protection | 49 | Replication, cloud sync, cloud backup, cron, rsync, init scripts, SSH keys | | filesystem | 7 | stat, listdir, mkdir, permissions, ACLs, chown | | reporting | 3 | Metrics config, graphs, time-series data | | directory | 8 | Active Directory, LDAP, Kerberos | | service_config | 12 | SSH, FTP, SNMP, UPS, system tunables | | audit | 3 | Audit logs, audit configuration | | api | 1 | Raw API escape hatch for any endpoint |

MCP Resources (12)

Read-only resources for dashboards — no tool call needed:

| Resource | URI | Description | |----------|-----|-------------| | System Info | truenas://system/info | Version, hostname, uptime, hardware | | Pools | truenas://storage/pools | All pools with capacity and health | | Datasets | truenas://storage/datasets | All datasets with properties | | Services | truenas://services | Service status overview | | Alerts | truenas://alerts | Current system alerts | | Network | truenas://network/summary | Interfaces, IPs, DNS, gateway | | Shares | truenas://sharing | All SMB, NFS, and iSCSI shares | | VMs | truenas://vms | Virtual machines with status | | Apps | truenas://apps | Installed applications | | Disks | truenas://disks | Physical disks info | | Boot Envs | truenas://boot/environments | Boot environments | | Update | truenas://system/update | Update configuration |

Example Conversations

"What pools do I have and are they healthy?"

→ truenas({ category: "storage", action: "pool_list" })

"Create an NFS share for /mnt/tank/media"

→ truenas({ category: "sharing", action: "nfs_share_create", params: { path: "/mnt/tank/media", comment: "Media share" } })

"Check for system updates"

→ truenas({ category: "update", action: "update_check" })

"What SMART tests have run on sda?"

→ truenas({ category: "disk", action: "disk_smart_test_list", params: { disk: "sda" } })

Safety

All destructive operations require confirm: true in params:

  • Pool create/export/disk replace
  • Dataset/snapshot delete, snapshot rollback
  • VM delete, app delete/rollback
  • System reboot/shutdown, update apply
  • Disk wipe, boot disk attach/detach
  • Certificate delete, boot env delete
  • Directory services leave, ACL set

Without confirm: true, these actions return an error message explaining what would happen.

API Compatibility

Built for TrueNAS SCALE REST API v2.0. Compatible with TrueNAS SCALE 22.x through 25.x.

Development

git clone https://github.com/spranab/truenas-mcp
cd truenas-mcp
npm install
npm run build
npm run dev  # watch mode

License

MIT

Quick Setup
Installation guide for this server

Install Package (if required)

npx @modelcontextprotocol/server-truenas-mcp

Cursor configuration (mcp.json)

{ "mcpServers": { "spranab-truenas-mcp": { "command": "npx", "args": [ "spranab-truenas-mcp" ] } } }