TrueNAS Core
STDIO通过自然语言控制TrueNAS系统
通过自然语言控制TrueNAS系统
A production-ready Model Context Protocol (MCP) server for TrueNAS Core systems. Control and manage your TrueNAS storage through natural language with Claude or other MCP-compatible clients.
The easiest way to run TrueNAS MCP Server is with uvx:
# Run directly without installation uvx truenas-mcp-server # Or install globally with uv uv tool install truenas-mcp-server
# With pip pip install truenas-mcp-server # Or with pipx for isolated environment pipx install truenas-mcp-server
git clone https://github.com/vespo92/TrueNasCoreMCP.git cd TrueNasCoreMCP pip install -e .
Create a .env file or set environment variables:
# Required TRUENAS_URL=https://your-truenas-server.local TRUENAS_API_KEY=your-api-key-here # Optional TRUENAS_VERIFY_SSL=true # Verify SSL certificates TRUENAS_LOG_LEVEL=INFO # Logging level TRUENAS_ENV=production # Environment (development/staging/production) TRUENAS_HTTP_TIMEOUT=30 # HTTP timeout in seconds TRUENAS_ENABLE_DESTRUCTIVE_OPS=false # Enable delete operations TRUENAS_ENABLE_DEBUG_TOOLS=false # Enable debug tools
Add to your Claude Desktop config (claude_desktop_config.json):
{ "mcpServers": { "truenas": { "command": "uvx", "args": ["truenas-mcp-server"], "env": { "TRUENAS_URL": "https://your-truenas-server.local", "TRUENAS_API_KEY": "your-api-key-here", "TRUENAS_VERIFY_SSL": "false" } } } }
Note: This uses uvx to automatically manage the Python environment. Make sure you have uv installed:
# Install uv if you haven't already curl -LsSf https://astral.sh/uv/install.sh | sh # or brew install uv
Once configured, you can interact with TrueNAS using natural language:
"List all storage pools and their health status"
"Create a new dataset called 'backups' in the tank pool with compression"
"Set up an SMB share for the documents dataset"
"Create a snapshot of all datasets in the tank pool"
"Show me users who have sudo privileges"
from truenas_mcp_server import TrueNASMCPServer # Create server instance server = TrueNASMCPServer() # Run the server server.run()
import asyncio from truenas_mcp_server.client import TrueNASClient from truenas_mcp_server.config import Settings async def main(): # Initialize client settings = Settings( truenas_url="https://truenas.local", truenas_api_key="your-api-key" ) async with TrueNASClient(settings) as client: # List pools pools = await client.get("/pool") print(f"Found {len(pools)} pools") # Create a dataset dataset = await client.post("/pool/dataset", { "name": "tank/mydata", "compression": "lz4" }) print(f"Created dataset: {dataset['name']}") asyncio.run(main())
list_users - List all users with detailsget_user - Get specific user informationcreate_user - Create new user accountupdate_user - Modify user propertiesdelete_user - Remove user accountlist_pools - Show all storage poolsget_pool_status - Detailed pool health and statisticslist_datasets - List all datasetscreate_dataset - Create new dataset with optionsupdate_dataset - Modify dataset propertiesdelete_dataset - Remove datasetlist_smb_shares - Show SMB/CIFS sharescreate_smb_share - Create Windows sharelist_nfs_exports - Show NFS exportscreate_nfs_export - Create NFS exportlist_iscsi_targets - Show iSCSI targetscreate_iscsi_target - Create iSCSI targetlist_snapshots - Show snapshotscreate_snapshot - Create manual snapshotdelete_snapshot - Remove snapshotrollback_snapshot - Revert to snapshotclone_snapshot - Clone to new datasetcreate_snapshot_task - Setup automated snapshotsdebug_connection - Check connection settingstest_connection - Verify API connectivityget_server_stats - Server statisticstruenas_mcp_server/
├── __init__.py           # Package initialization
├── server.py             # Main MCP server
├── config/               # Configuration management
│   ├── __init__.py
│   └── settings.py       # Pydantic settings
├── client/               # HTTP client
│   ├── __init__.py
│   └── http_client.py    # Async HTTP with retry
├── models/               # Data models
│   ├── __init__.py
│   ├── base.py          # Base models
│   ├── user.py          # User models
│   ├── storage.py       # Storage models
│   └── sharing.py       # Share models
├── tools/                # MCP tools
│   ├── __init__.py
│   ├── base.py          # Base tool class
│   ├── users.py         # User tools
│   ├── storage.py       # Storage tools
│   ├── sharing.py       # Share tools
│   └── snapshots.py     # Snapshot tools
└── exceptions.py         # Custom exceptions
# Clone repository git clone https://github.com/vespo92/TrueNasCoreMCP.git cd TrueNasCoreMCP # Create virtual environment python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate # Install in development mode pip install -e ".[dev]"
# Run all tests pytest # With coverage pytest --cov=truenas_mcp_server # Specific test file pytest tests/test_client.py
# Format code black truenas_mcp_server # Lint flake8 truenas_mcp_server # Type checking mypy truenas_mcp_server
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ for the TrueNAS community