TrueNAS Core MCP Server
The TrueNAS Core MCP Server provides a natural language interface to manage and control TrueNAS Core systems through a production-ready Model Context Protocol (MCP) server.
User Management: Create, update, delete, and list users with detailed information retrieval and permission management.
Storage Management: Manage ZFS pools and datasets with comprehensive capabilities including listing, status checks, property modifications, creating new datasets with compression and quota configuration, and detailed property retrieval.
File Sharing: Configure and manage SMB shares, NFS exports with network access and root mapping, and iSCSI targets with defined names, datasets, sizes, and portal IDs for file storage and Kubernetes persistent volumes.
Snapshot Management: Create manual snapshots and establish automated snapshot policies with custom schedules, retention settings, and automation for repetitive tasks.
Permissions and ACLs: Modify dataset permissions, update Access Control Lists (ACLs), manage Unix permissions, and retrieve detailed permissions information.
System Monitoring & Debugging: Check system information, pool health, resource usage, debug connection settings, and reset the HTTP client for maintenance.
Integration: Works seamlessly with natural language clients like Claude for easy interaction with TrueNAS systems using both natural language and programmatic interfaces.
Allows interaction with TrueNAS Core systems through the TrueNAS API, enabling management of users, storage (pools and datasets), SMB shares, ZFS snapshots, and retrieving system information.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TrueNAS Core MCP Serverlist all storage pools and their health status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TrueNAS MCP Server
A production-ready Model Context Protocol (MCP) server for TrueNAS Core and SCALE systems. Control and manage your TrueNAS storage and virtualization through natural language with Claude or other MCP-compatible clients.
Automatic variant detection: The server automatically detects whether you're connected to TrueNAS Core or SCALE and enables the appropriate features.
๐ Features
Universal Features (Core & SCALE)
User Management - Create, update, delete users and manage permissions
Storage Management - Manage pools, datasets, volumes with full ZFS support
File Sharing - Configure SMB, NFS, and iSCSI shares
Snapshot Management - Create, delete, rollback snapshots with automation
System Monitoring - Check system health, pool status, and resource usage
TrueNAS SCALE Features (24.04+)
Automatically enabled when connected to SCALE
Apps - Manage Docker Compose-based TrueNAS applications
Incus Instances - Control Incus VMs and containers (SCALE 25.04+)
Legacy VMs - Manage bhyve virtual machines
Enterprise Features
Type-Safe Operations - Full Pydantic models for request/response validation
Comprehensive Error Handling - Detailed error messages and recovery guidance
Production Logging - Structured logging with configurable levels
Connection Pooling - Efficient HTTP connection management with retry logic
Rate Limiting - Built-in rate limiting to prevent API abuse
Environment-Based Config - Flexible configuration via environment variables
Related MCP server: truenas-ws-mcp
๐ฆ Installation
Quick Start with uvx (Recommended)
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-serverTraditional Installation
# With pip
pip install truenas-mcp-server
# Or with pipx for isolated environment
pipx install truenas-mcp-serverFrom Source
git clone https://github.com/vespo92/TrueNasCoreMCP.git
cd TrueNasCoreMCP
pip install -e .๐ง Configuration
Environment Variables
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 toolsGetting Your API Key
Log into TrueNAS Web UI
Go to Settings โ API Keys
Click Add and create a new API key
Copy the key immediately (it won't be shown again)
Claude Desktop Configuration
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๐ Usage Examples
With Claude Desktop
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"
# TrueNAS SCALE virtualization examples
"List all running apps and their status"
"Get the configuration for the sonarr app"
"Show me all Incus VMs and containers"
"Update the crypto-nodes VM to use 8 CPUs"
"Restart the plex app"As a Python Library
from truenas_mcp_server import TrueNASMCPServer
# Create server instance
server = TrueNASMCPServer()
# Run the server
server.run()Programmatic Usage
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())๐ ๏ธ Available Tools
User Management
list_users- List all users with detailsget_user- Get specific user informationcreate_user- Create new user accountupdate_user- Modify user propertiesdelete_user- Remove user account
Storage Management
list_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 dataset
File Sharing
list_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 target
Snapshot Management
list_snapshots- Show snapshotscreate_snapshot- Create manual snapshotdelete_snapshot- Remove snapshotrollback_snapshot- Revert to snapshotclone_snapshot- Clone to new datasetcreate_snapshot_task- Setup automated snapshots
App Management (TrueNAS SCALE)
list_apps- Show all TrueNAS apps with statusget_app- Get detailed app informationget_app_config- Get full app configurationstart_app- Start an appstop_app- Stop an apprestart_app- Restart an appredeploy_app- Redeploy after config changesupdate_app_config- Update app configuration
Incus Instance Management (TrueNAS SCALE)
list_instances- Show VMs and containersget_instance- Get instance detailsstart_instance- Start an instancestop_instance- Stop an instancerestart_instance- Restart an instanceupdate_instance- Update CPU/memory/autostartlist_instance_devices- Show attached devices
Legacy VM Management
list_legacy_vms- Show bhyve VMsget_legacy_vm- Get VM detailsstart_legacy_vm- Start a VMstop_legacy_vm- Stop a VMrestart_legacy_vm- Restart a VMupdate_legacy_vm- Update VM configurationget_legacy_vm_status- Get VM status
Debug Tools (Development Mode)
debug_connection- Check connection settingstest_connection- Verify API connectivityget_server_stats- Server statistics
๐ Pagination and Response Control
All list operations support pagination to reduce token usage when working with LLM clients. Get operations support optional raw API response inclusion for debugging.
Pagination Parameters
All list_* tools support these parameters:
Parameter | Type | Default | Description |
| integer | 100 | Maximum items to return (max: 500) |
| integer | 0 | Number of items to skip |
Response format:
{
"success": true,
"items": [...],
"metadata": { ... },
"pagination": {
"total": 250,
"limit": 100,
"offset": 0,
"returned": 100,
"has_more": true
}
}Usage examples:
"List the first 10 datasets" โ limit=10
"Show users 50-100" โ limit=50, offset=50
"Get all SMB shares (up to 500)" โ limit=500Include Raw API Response
Get operations for apps, instances, and VMs support the include_raw parameter:
Parameter | Type | Default | Description |
| boolean | false | Include full API response for debugging |
When to use include_raw=true:
Debugging API response structure
Accessing fields not included in the formatted response
Troubleshooting integration issues
Tools supporting include_raw:
get_app- App detailsget_instance- Incus instance detailsget_legacy_vm- Legacy VM details
Dataset Response Control
The list_datasets and get_dataset tools support an additional parameter:
Parameter | Type | Default | Description |
| boolean | true | Include child datasets (can reduce payload significantly) |
Usage:
"List only top-level datasets" โ include_children=false
"Get tank dataset without children" โ include_children=false๐๏ธ Architecture
truenas_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
โ โโโ app.py # App models (SCALE)
โ โโโ instance.py # Incus instance models (SCALE)
โ โโโ vm.py # Legacy VM 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
โ โโโ apps.py # App tools (SCALE)
โ โโโ instances.py # Incus instance tools (SCALE)
โ โโโ vms.py # Legacy VM tools
โโโ exceptions.py # Custom exceptions๐งช Development
Setup Development Environment
# 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]"Running Tests
# Run all tests
pytest
# With coverage
pytest --cov=truenas_mcp_server
# Specific test file
pytest tests/test_client.pyCode Quality
# Format code
black truenas_mcp_server
# Lint
flake8 truenas_mcp_server
# Type checking
mypy truenas_mcp_server๐ Documentation
Installation Guide - Detailed installation instructions
Quick Start - Get up and running quickly
Quick Reference - Command reference
Features Overview - Detailed feature documentation
API Documentation - Coming soon
๐ค Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Security
Never commit API keys or credentials
Use environment variables for sensitive data
Enable SSL verification in production
Restrict destructive operations by default
Report security issues via GitHub Issues
๐ Support
Issues: GitHub Issues
Discussions: GitHub Discussions
๐ Acknowledgments
Anthropic for the MCP specification
TrueNAS for the excellent storage platform
MCP Python SDK contributors
Made with โค๏ธ for the TrueNAS community
Available Tools
20 toolscreate_datasetB
Create a new dataset
Args:
pool: Pool name where dataset will be created
name: Dataset name
compression: Compression algorithm (default: lz4)
quota: Optional quota in bytes
| Name | Required | Description | Default |
|---|---|---|---|
| compression | No | lz4 | |
| name | Yes | ||
| pool | Yes | ||
| quota | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this creates a new dataset but doesn't mention important behavioral aspects: whether this requires specific permissions, what happens if the dataset already exists, whether there are size/name constraints, or what the response contains. For a creation tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by parameter documentation. Each sentence earns its place by providing essential information. The formatting with 'Args:' and bullet-like parameter explanations makes it scannable, though the lack of complete sentences for parameters slightly affects readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a creation tool with no annotations and no output schema, the description does an adequate job covering the basic purpose and parameters. However, it lacks important context about behavioral aspects (permissions, error conditions, response format) and usage guidelines relative to sibling tools. The parameter documentation is strong, but other contextual elements are incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides parameter documentation for all 4 parameters, adding meaningful context beyond the schema's 0% description coverage. It explains what each parameter represents ('Pool name where dataset will be created', 'Dataset name', 'Compression algorithm', 'Optional quota in bytes') and notes the default for compression. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('dataset'), making the purpose immediately understandable. However, it doesn't differentiate this from sibling tools like 'create_snapshot' or 'create_snapshot_policy' which also create resources, missing the opportunity to clarify this creates a storage dataset rather than a snapshot or policy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like needing an existing pool), when not to use it (e.g., for modifying existing datasets), or refer to sibling tools like 'modify_dataset_properties' for updates. The only implied context is dataset creation, but no explicit usage boundaries are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_iscsi_targetB
Create an iSCSI target for Kubernetes block storage
Args:
name: Target name (e.g., "k8s-block-01")
dataset: Dataset for storing the iSCSI extent
size: Size of the iSCSI extent (e.g., "100G")
portal_id: iSCSI portal ID to use
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | ||
| name | Yes | ||
| portal_id | No | ||
| size | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a creation operation but doesn't mention whether it requires specific permissions, what happens if the target already exists, whether it's idempotent, or what side effects might occur. The description is minimal beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by parameter explanations in a bullet-like format. Every sentence adds value, with no redundant or unnecessary information. The formatting makes it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 4 parameters, no annotations, and no output schema, the description provides adequate basic information about what the tool does and what parameters it accepts. However, it lacks important context about behavioral aspects, error conditions, and what the tool returns upon success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides meaningful explanations for all 4 parameters (name, dataset, size, portal_id) with examples for name and size, adding substantial value beyond the schema which has 0% description coverage. It clarifies what each parameter represents in the context of iSCSI target creation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and the resource 'iSCSI target for Kubernetes block storage', making the purpose immediately understandable. It distinguishes this tool from siblings like create_dataset or create_nfs_export by specifying it's for iSCSI storage, though it doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like create_dataset or create_smb_share. It doesn't mention prerequisites, dependencies, or typical scenarios for iSCSI target creation in Kubernetes storage contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_nfs_exportB
Create an NFS export for Kubernetes persistent volumes
Args:
dataset: Dataset path to export (e.g., "tank/k8s-volumes")
allowed_networks: List of allowed networks (e.g., ["10.0.0.0/24"])
read_only: Whether the export is read-only
maproot_user: User to map root to
maproot_group: Group to map root to
| Name | Required | Description | Default |
|---|---|---|---|
| allowed_networks | No | ||
| dataset | Yes | ||
| maproot_group | No | wheel | |
| maproot_user | No | root | |
| read_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool creates an NFS export, implying a write operation, but doesn't cover critical aspects like required permissions, whether the export is persistent, potential side effects, error conditions, or response format. This leaves significant gaps for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with a clear purpose statement followed by a parameter list. Every sentence earns its place by adding necessary information, though the parameter section could be slightly more integrated into the flow rather than a separate list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, no annotations, no output schema), the description is moderately complete. It covers the purpose and parameters well but lacks behavioral details like permissions, side effects, and return values. For a creation tool with no structured support, it should do more to fill these gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial value beyond the input schema, which has 0% schema description coverage. It provides examples for 'dataset' and 'allowed_networks' parameters and clarifies the purpose of 'read_only', 'maproot_user', and 'maproot_group'. This compensates well for the schema's lack of descriptions, though it doesn't cover defaults or all nuances.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create an NFS export') and the resource ('for Kubernetes persistent volumes'), which is specific and informative. However, it doesn't explicitly differentiate this tool from sibling tools like 'create_smb_share' or 'create_iscsi_target', which would require mentioning NFS-specific context or contrasting with other sharing protocols.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'create_smb_share' or 'create_iscsi_target', nor does it mention prerequisites or typical scenarios. It lacks explicit when/when-not instructions or named alternatives, leaving usage context implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_snapshotB
Create a snapshot of a dataset
Args:
dataset: Dataset path (e.g., "tank/data")
name: Snapshot name
recursive: Whether to create recursive snapshots
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | ||
| name | Yes | ||
| recursive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Create' implies a write operation, it doesn't mention whether this requires specific permissions, whether snapshots are immutable, what happens if a snapshot with the same name exists, or any rate limits. The description lacks essential behavioral context for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with a clear purpose statement followed by parameter explanations. The 'Args' section is well-structured. However, the first sentence could be more front-loaded with additional context about snapshot behavior or usage scenarios.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what a snapshot actually is in this context, what the tool returns, whether the operation is synchronous, or error conditions. The agent lacks crucial information to use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides parameter semantics in the 'Args' section, explaining what each parameter represents. With 0% schema description coverage, this compensates well by documenting all three parameters. However, it doesn't elaborate on format constraints (e.g., valid snapshot name patterns) or the implications of the recursive option.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('snapshot of a dataset'), making the purpose immediately understandable. It distinguishes from siblings like 'create_dataset' by specifying the snapshot operation rather than dataset creation. However, it doesn't explicitly differentiate from 'create_snapshot_policy' which might be a closer sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, when snapshots are appropriate, or how this differs from other snapshot-related tools like 'create_snapshot_policy'. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_snapshot_policyB
Create an automated snapshot policy
Args:
dataset: Dataset to snapshot
name: Policy name
schedule: Schedule configuration (cron-like)
{"minute": "0", "hour": "*/4", "dom": "*", "month": "*", "dow": "*"}
retention: Retention settings {"hourly": 24, "daily": 7, "weekly": 4, "monthly": 12}
recursive: Include child datasets
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | ||
| name | Yes | ||
| recursive | No | ||
| retention | Yes | ||
| schedule | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states 'create' implying a write operation, but doesn't mention permissions needed, whether policies are editable/deletable, rate limits, or what happens on success/failure. The description adds basic context about automation and recursion, but lacks critical behavioral details for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear heading 'Args:' and bullet-like parameter explanations. Each parameter description is efficient and adds value. Could be slightly more front-loaded with a clearer purpose statement before parameter details, but overall very concise with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 5 parameters, nested objects, no annotations, and no output schema, the description does well on parameters but lacks behavioral context. It explains what each parameter means but doesn't cover what happens after creation, error conditions, or system implications. Adequate but with clear gaps given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It provides detailed semantic explanations for all 5 parameters: clarifies 'dataset' target, 'name' purpose, 'schedule' as cron-like with example format, 'retention' settings with structure, and 'recursive' meaning. This adds substantial value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'create' and resource 'automated snapshot policy', which is specific and distinct from sibling tools like 'create_snapshot' (which creates individual snapshots) or 'create_dataset'. However, it doesn't explicitly differentiate from all siblings, just implies policy vs. snapshot creation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'create_snapshot' for one-off snapshots or other policy-related tools. The description only states what it does, not when it's appropriate or what prerequisites might be needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_connectionB
Debug connection settings and environment variables
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'debugs' but doesn't clarify what this entailsโe.g., whether it's a read-only diagnostic, modifies settings, requires specific permissions, or has side effects like logging or alerts. This is a significant gap for a tool with potential system interactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence: 'Debug connection settings and environment variables.' It is front-loaded with the core action and target, with zero wasted words, making it highly concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'debugging' involvesโe.g., whether it returns diagnostic data, logs errors, or requires specific system states. For a tool that might interact with system connections, more context on behavior and outputs is needed to guide the agent effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, and it appropriately avoids unnecessary details. A baseline of 4 is applied since no parameters exist, and the description doesn't mislead about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Debug connection settings and environment variables.' It specifies the action ('debug') and the target resources ('connection settings and environment variables'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'reset_connection', which might be a related operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context, or exclusions, such as when to choose 'debug_connection' over 'reset_connection' or other diagnostic tools. This leaves the agent without clear usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dataset_permissionsC
Get current permissions and ACL information for a dataset
Args:
dataset: Dataset path (e.g., "tank/data")
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool 'gets' information, implying a read-only operation, but doesn't specify if it requires authentication, has rate limits, returns structured data, or handles errors. This leaves significant gaps in understanding how the tool behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise, with a clear purpose statement followed by parameter details in a separate section. It avoids unnecessary words, though the parameter explanation could be slightly more detailed without losing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., permission details format), error conditions, or dependencies, making it insufficient for an agent to fully understand the tool's context and usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds value by explaining the 'dataset' parameter as a 'Dataset path (e.g., "tank/data")', which clarifies its format beyond the schema's basic string type. However, with only 1 parameter and 0% schema description coverage, this minimal explanation is adequate but not comprehensive, meeting the baseline for a single-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('current permissions and ACL information for a dataset'), making it easy to understand what it does. However, it doesn't explicitly differentiate from sibling tools like 'get_dataset_properties' or 'modify_dataset_permissions', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose this over 'get_dataset_properties' for general dataset info or 'modify_dataset_permissions' for permission changes, leaving the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dataset_propertiesB
Get all properties of a dataset
Args:
dataset: Dataset path (e.g., "tank/data")
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Get all properties' but doesn't clarify what 'properties' include (e.g., metadata, settings), whether it's a read-only operation, or any constraints like permissions required. This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured, with a clear purpose statement followed by a parameter explanation in a bullet-like format. Every sentence adds value without redundancy, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'properties' are returned or any behavioral traits like error handling. For a tool with no structured metadata, more detail is needed to fully understand its use and output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for the single parameter 'dataset' by providing an example ('tank/data'), which clarifies the expected format. Since schema description coverage is 0%, this compensates well, though it could be more detailed about path conventions or restrictions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('properties of a dataset'), making it immediately understandable. However, it doesn't differentiate from sibling tools like 'get_dataset_permissions' or 'modify_dataset_properties', which would require more specificity about what 'properties' encompasses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'list_datasets' (for listing datasets) and 'get_dataset_permissions' (for permissions), there's no indication of when this tool is appropriate, such as for retrieving metadata versus other dataset-related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pool_statusC
Get detailed status of a specific pool
Args:
pool_name: Name of the pool
| Name | Required | Description | Default |
|---|---|---|---|
| pool_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'detailed status' but doesn't specify what that includes (e.g., health metrics, capacity, performance), whether it's a read-only operation, or any constraints like authentication needs or rate limits. This leaves significant gaps for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, followed by a concise 'Args' section. Every sentence earns its place with no wasted words, making it efficient and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a status-checking tool with no annotations and no output schema, the description is incomplete. It doesn't explain what 'detailed status' entails, the return format, or any behavioral traits like error handling. This makes it inadequate for an agent to fully leverage the tool without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, but the description includes an 'Args' section that documents the single parameter 'pool_name' with a brief explanation. This adds value beyond the bare schema, though it's minimal and doesn't cover format or examples. With one parameter, the baseline is 4, but the limited detail reduces it to 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'detailed status of a specific pool', making the purpose understandable. However, it doesn't differentiate from sibling tools like 'list_pools' or 'get_system_info', which might also provide pool-related information, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'list_pools' for a broader view or 'get_system_info' for general system status. The description only states what it does without context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_infoB
Get TrueNAS system information
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Get' implies a read-only operation, but it doesn't specify what 'system information' includes (e.g., hardware details, software version, configuration), whether it requires authentication, or how the data is returned. This leaves significant gaps for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it immediately clear what the tool does without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'system information' entails or how it's structured, which is critical for an agent to understand the return value. For a read-only tool with no structured output documentation, more detail about the response format would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema description coverage is 100% (since there are no parameters to describe). The description appropriately doesn't mention parameters, which aligns with the input schema. No additional parameter semantics are needed, so this meets the baseline for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('TrueNAS system information'), making the tool's purpose immediately understandable. It doesn't differentiate from siblings (like 'get_pool_status' or 'get_dataset_properties'), but it's specific enough to indicate this retrieves general system-level data rather than component-specific information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_pool_status' or 'get_dataset_properties'. While the name implies it's for system-wide information, there's no explicit context about when this is appropriate versus more specific sibling tools, leaving the agent to infer usage patterns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userC
Get detailed information about a specific user
Args:
username: Username to look up
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves information but doesn't mention permissions required, rate limits, error handling, or the format of returned data. This leaves significant gaps for an agent to understand operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core purpose, followed by a simple parameter explanation. It avoids unnecessary verbosity, though the structure could be slightly improved by integrating the parameter note more seamlessly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't cover behavioral aspects like authentication needs or response format, and with 0% schema coverage, it fails to fully compensate for the missing structured data, leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, but the description adds basic semantics by explaining that 'username' is used to look up a user. However, it doesn't specify format constraints, examples, or whether it's case-sensitive, which limits its usefulness beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('detailed information about a specific user'), making it immediately understandable. However, it doesn't differentiate from sibling tools like 'list_users', which might cause confusion about when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_users'. It mentions looking up a specific user but doesn't clarify if this is for single-user queries versus bulk listing, leaving usage context implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datasetsB
List all datasets
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'List all datasets' but doesn't reveal if this is a read-only operation, how results are returned (e.g., pagination, format), or any rate limits. This leaves gaps in understanding the tool's behavior beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence ('List all datasets') with zero waste. It's front-loaded and appropriately sized for a simple tool with no parameters, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is minimally adequate. It states what the tool does but lacks context on usage, behavior, or output format. For a list operation, more details on result handling would improve completeness, but it's not entirely incomplete for such a simple case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so the schema fully documents the absence of inputs. The description adds no parameter details, which is acceptable here since there are no parameters to explain. A baseline of 4 is appropriate as the description doesn't need to compensate for any gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all datasets' clearly states the verb ('List') and resource ('datasets'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_pools' or 'list_smb_shares' beyond the resource name, nor does it specify scope (e.g., all datasets in a system vs. filtered).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_dataset_properties' for detailed info or 'list_pools' for related resources. It lacks context about prerequisites, such as whether authentication is needed or if it's for browsing vs. detailed queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_poolsB
List all storage pools
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. 'List all storage pools' implies a read-only operation but doesn't specify whether this returns all pools at once or uses pagination, what format the results are in, or any authentication requirements. For a tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose without any wasted words. It's appropriately sized for a simple list operation and is front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is insufficient for a complete understanding. While the purpose is clear, there's no information about what the tool returns (e.g., pool names, IDs, statuses) or behavioral aspects like pagination or error conditions. For a tool in a storage management context, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description doesn't need to compensate for missing parameter documentation since there are no parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all storage pools' clearly states the verb ('List') and resource ('storage pools'), making the tool's purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_datasets' or 'list_smb_shares' beyond the resource name, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_pool_status' that might provide more detailed information about pools, there's no indication of when a simple list is sufficient versus when status details are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersB
List all users in TrueNAS
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but only states the action without details on permissions, rate limits, pagination, or output format. It lacks critical information like whether this requires admin access or returns all users at once.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It's front-loaded and efficiently conveys the core purpose without any fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the output looks like (e.g., list format, user attributes) or behavioral aspects like permissions, making it inadequate for an agent to use confidently without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a high baseline score for not adding unnecessary information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all users in TrueNAS'), making the purpose unambiguous. However, it doesn't distinguish itself from sibling tools like 'get_user' (which likely retrieves a single user), leaving room for minor improvement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_user' for retrieving specific users or clarify if this is the primary method for user enumeration, leaving the agent without contextual usage cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_dataset_permissionsB
Modify dataset permissions (chmod/chown equivalent)
Args:
dataset: Dataset path (e.g., "tank/data")
mode: Unix permission mode (e.g., "755", "644")
owner: Owner username or UID
group: Group name or GID
recursive: Apply permissions recursively
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | ||
| group | No | ||
| mode | No | ||
| owner | No | ||
| recursive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While it implies a mutation operation ('modify'), it doesn't specify critical behavioral traits such as required permissions, whether changes are reversible, potential side effects, or error conditions. The chmod/chown analogy provides some context but lacks operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized. The purpose statement is front-loaded, followed by a clear parameter breakdown. Every sentence adds value, though the chmod/chown analogy could be slightly more explicit about its limitations in this context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the mutation nature of the tool, no annotations, and no output schema, the description is moderately complete. It excels at parameter documentation but lacks behavioral context about permissions requirements, side effects, and return values. For a permission-modification tool with 5 parameters, more operational guidance would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides excellent parameter semantics beyond the schema. With 0% schema description coverage, the description fully compensates by explaining all 5 parameters: dataset path format, mode format and examples, owner/group identifiers, and recursive behavior. Each parameter's purpose and format is clearly documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Modify dataset permissions (chmod/chown equivalent)'. It specifies the verb ('modify') and resource ('dataset permissions'), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'modify_dataset_properties' or 'update_dataset_acl', which also modify dataset attributes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'modify_dataset_properties' or 'update_dataset_acl', nor does it specify prerequisites, exclusions, or appropriate contexts for permission modification versus other dataset operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_dataset_propertiesB
Modify ZFS dataset properties
Args:
dataset: Dataset path (e.g., "tank/data")
properties: Dictionary of properties to update
Examples: {"compression": "lz4", "dedup": "on", "quota": "10G"}
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | ||
| properties | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a mutation operation ('Modify') but doesn't specify permissions required, whether changes are reversible, potential side effects (e.g., quota enforcement), or error handling. The example adds some context but lacks critical details like rate limits or authentication needs for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose. The two-sentence structure is efficient, with the second sentence providing essential parameter details and examples. There's minimal waste, though it could be slightly more structured with bullet points for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (mutation tool with nested objects, no output schema, and no annotations), the description is moderately complete. It covers the purpose and parameters well but lacks behavioral context, usage guidelines, and output details. For a tool that modifies system properties, more information on safety and prerequisites would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It clearly explains both parameters: 'dataset' as a path with an example, and 'properties' as a dictionary with example key-value pairs. This adds significant meaning beyond the bare schema, though it doesn't detail all possible property types or constraints beyond the examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Modify') and resource ('ZFS dataset properties'), making the purpose unambiguous. It distinguishes itself from siblings like 'create_dataset' or 'get_dataset_properties' by focusing on property updates rather than creation or retrieval. However, it doesn't explicitly differentiate from 'modify_dataset_permissions' or 'update_dataset_acl', which are also modification tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., dataset must exist), compare with similar tools like 'modify_dataset_permissions', or specify when not to use it (e.g., for creating datasets). The example hints at usage but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_connectionB
Reset the HTTP client to force re-initialization
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool forces re-initialization, which implies a state-changing operation, but doesn't clarify if this is destructive (e.g., drops connections), has side effects, or requires specific conditions. More context on behavior is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the key action and outcome without unnecessary words. It's appropriately sized for a zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (simple reset operation) and lack of annotations/output schema, the description is minimally adequate. It explains what the tool does but lacks details on behavioral traits, usage context, or output, leaving gaps for an agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a high baseline score for this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('reset') and resource ('HTTP client') with the specific outcome ('force re-initialization'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'debug_connection', which might have overlapping troubleshooting purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description implies it's for re-initialization but doesn't specify scenarios (e.g., after errors, for troubleshooting) or mention sibling tools like 'debug_connection' that might be related.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dataset_aclB
Update dataset Access Control Lists (ACLs)
Args:
dataset: Dataset path (e.g., "tank/data")
acl_entries: List of ACL entries with permissions
recursive: Apply ACLs recursively
strip_acl: Remove all ACLs and revert to Unix permissions
| Name | Required | Description | Default |
|---|---|---|---|
| acl_entries | Yes | ||
| dataset | Yes | ||
| recursive | No | ||
| strip_acl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the action of updating ACLs, which implies a mutation, but doesn't mention critical aspects like required permissions, whether changes are reversible, potential side effects (e.g., data access impacts), or error conditions. This leaves significant gaps for safe tool invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded with the core purpose, followed by a bullet-point-like list of parameters with brief explanations. There's minimal waste, though the formatting with 'Args:' could be slightly more polished for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of updating ACLs (a mutation with security implications), no annotations, no output schema, and 4 parameters, the description is incomplete. It lacks information on behavioral traits (e.g., permissions needed, effects), output format, and error handling, making it inadequate for safe and effective use by an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaningful context for all parameters beyond the schema, which has 0% coverage. It explains 'dataset' as a path with an example, 'acl_entries' as a list with permissions, and clarifies the boolean flags 'recursive' and 'strip_acl'. This compensates well for the lack of schema descriptions, though it doesn't detail the structure of ACL entries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and the resource 'dataset Access Control Lists (ACLs)', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'modify_dataset_permissions' or 'get_dataset_permissions', which likely handle related but different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'modify_dataset_permissions' or 'get_dataset_permissions'. It lists parameters but doesn't explain the context or prerequisites for updating ACLs, leaving the agent to infer usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
20 tool updates
v1.0.0- First observed
create_dataset - First observed
create_iscsi_target - First observed
create_nfs_export - First observed
create_smb_share - First observed
create_snapshot - First observed
create_snapshot_policy - First observed
debug_connection - First observed
get_dataset_permissions - First observed
get_dataset_properties - First observed
get_pool_status - First observed
get_system_info - First observed
get_user - First observed
list_datasets - First observed
list_pools - First observed
list_smb_shares - First observed
list_users - First observed
modify_dataset_permissions - First observed
modify_dataset_properties - First observed
reset_connection - First observed
update_dataset_acl
TDQS
Most tools have distinct purposes targeting specific TrueNAS resources like datasets, pools, shares, and users, with clear separation between creation, listing, and modification operations. However, some potential overlap exists between 'modify_dataset_permissions' and 'update_dataset_acl' as both handle dataset access control, though their descriptions differentiate Unix permissions versus ACLs.
Tool names follow a highly consistent verb_noun pattern throughout, such as 'create_dataset', 'list_datasets', 'get_dataset_properties', and 'modify_dataset_permissions'. All tools use snake_case without deviation, making them predictable and readable for an agent.
With 20 tools, the count is slightly high but reasonable for a TrueNAS server covering storage management, sharing protocols, and user administration. It includes core operations for datasets, pools, shares, snapshots, and users, though it might benefit from consolidation in areas like debugging tools.
The tool set provides comprehensive coverage for dataset lifecycle (create, list, get, modify, snapshot), storage pools, and sharing protocols (NFS, SMB, iSCSI), with user management included. Minor gaps exist, such as missing update/delete operations for shares or targets, but agents can likely work around these for core workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoโฆ
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that enables AI assistants to manage TrueNAS Scale Custom Apps using natural language commands, with tools for deploying, managing, and monitoring Docker Compose applications.6MIT
- AlicenseBqualityDmaintenanceMCP server for TrueNAS Scale that enables AI assistants to manage storage pools, datasets, apps, VMs, snapshots, and more via the native WebSocket API.59MIT
- AlicenseAqualityBmaintenanceAn MCP server for TrueNAS that lets users manage ZFS pools, datasets, shares, snapshots, VMs, alerts, and network configuration through natural language, using a single hierarchical tool exposing 278 actions.11MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server for TrueNAS SCALE that enables read-first management of storage, system, sharing, and virtualization resources with per-user API key authentication, and optional write operations.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vespo92/TrueNasCoreMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server