fastpanel-mcp
The fastpanel-mcp server provides 32 MCP tools to manage FastPanel 2 hosting panels through natural language, covering sites, databases, users, DNS, SSL, system monitoring, logs, backups, and file operations — with robust safety features.
Site Management
List, get details, create, and update sites (document root, index page, backend settings)
Read/write raw nginx, Apache, and php.ini configs with auto
nginx -tvalidation and rollbackManage SSL settings (attach/replace/detach certs, toggle HTTPS redirect, HTTP/2, HTTP/3, HSTS)
Tail access/error logs and list site resources (databases, subdomains, DNS zones)
Diagnose common site issues (
site_doctor) via SSH
Database Management
List MySQL/PostgreSQL databases and database servers
Create databases with dedicated users, dump and import via SSH
User Management
List panel users and create new users (standard or reseller)
Identify the current token's account (
me)
SSL Certificate Management
List stored certificates (Let's Encrypt and custom)
Issue new Let's Encrypt certificates (async, poll queue for completion)
DNS Management
List DNS zones and records managed by FastPanel
File Operations (SSH-backed)
Upload local files/directories via rsync into a site's web root
Deploy from git repositories or tarballs directly on the server
Write small inline files (e.g.,
.htaccess,robots.txt)
System Diagnostics & Monitoring
View system load metrics (CPU, memory, disk, top processes)
List active/completed background tasks and poll async jobs
Read panel-wide settings (OS, license, limits)
Validate nginx config via SSH (
nginx -t)
Backup Management
List configured FastPanel v2 backup plans
Safety Features
Dual-token model: separate read and write tokens
All write operations require explicit
confirm: truedry_run: truepreviews exact API payloads without making changesAudit log on stderr for every executed write (passwords redacted)
Auto-rollback on config errors after
nginx -tfailureNo delete tools (deliberate omission)
Allows reading and updating Apache configuration (handler backend) for sites.
Allows issuing new Let's Encrypt SSL certificates for sites, with async polling for completion.
Allows listing and creating MySQL databases via the FastPanel API.
Allows reading and updating nginx configuration for sites managed by FastPanel.
Allows changing PHP version, handler settings, and php.ini configuration for sites.
Allows listing and creating PostgreSQL databases via the FastPanel API.
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., "@fastpanel-mcpCreate a new site example.com with PHP 8.4 and SSL."
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.
fastpanel-mcp
Talk to your FastPanel 2 server from Claude, Cursor, or any MCP-compatible client. Create sites, provision databases, attach SSL, harden nginx configs — through natural language, with production-grade safety rails.
Keywords: FastPanel, MCP, Model Context Protocol, Claude Code, Claude Desktop, server management, hosting automation, nginx, Let's Encrypt, DevOps, LLM ops, AI sysadmin.
Read this in other languages: English · Русский · Українська · Español · Deutsch
What you get
Ask an LLM, get real infra changes on your FastPanel server:
You: "Create a new site
foo.example.comunder userwww-root, PHP 8.4, no database, and attach our wildcard SSL cert. Also enable HTTP/2 and HTTP/3."LLM (~30 seconds, 5 tool calls later): Site id 53 is live at https://foo.example.com with HTTP/2, HTTP/3, wildcard TLS, and an auto-provisioned HTTPS redirect.
You: "Show me the nginx config for site 1 — check if it blocks
.env,.git, and other sensitive paths. If not, add hardening."LLM: Reads the config, notes that
.envand.htaccessare served as static files (security gap), edits the frontend to add deny rules for dotfiles + sensitive extensions + framework files, previews the diff viadry_run, then deploys it..envnow returns 404;.well-known/acme-challengestill works.
You: "What sites are running on this server, who owns them, and which ones don't force HTTPS?"
LLM: Queries
sites_listand reports the 5 sites withouthttps_redirect: true.
Related MCP server: panelica-mcp
Features
32 tools covering sites, databases (incl. SSH dump/import), users, DNS zones, SSL certificates, system load, queue, site logs, backup plans, host-level diagnostics, file upload/deploy into a site's web root, and raw nginx/apache/php.ini configs.
Dual-token safety model. Read operations use a read-only token; mutating operations require a separate write token (
FASTPANEL_WRITE_TOKEN). Unset the write token and every write tool fails closed.confirm: truerequired on every write. Accidental LLM outputs cannot mutate state.dry_run: truepreviews the exact HTTP body the server would receive — passwords redacted as***, no network call fired.Compact response mode on sites_list to avoid overflowing LLM context on large panels.
stderr audit log for every executed write, with passwords redacted.
MCP tool annotations (
readOnlyHint/destructiveHint/idempotentHint/openWorldHint) so clients and policy scanners classify each tool correctly instead of treating read-only diagnostics as destructive.nginx -tauto-validation with rollback —site_configuration_updatevalidates the live config after applying and reverts a broken edit automatically when SSH is configured.Tested against a live FastPanel 2 panel with 35+ sites in production.
Why this exists
FastPanel publishes no OpenAPI spec. The endpoints and payload shapes in this server were reverse-engineered from the panel's Angular SPA bundle and live DevTools captures, including non-obvious quirks like:
List endpoints require
filter[limit]=…&filter[type]=…wrapped params — bare?limit=…is silently ignored.Site creation is a two-step wizard (
POST /api/master/domainprobe →PUT /api/master), not a conventionalPOST /api/sites.The
backendfield in site configuration is PHP-FPM pool config whenhandler=php_fpm, but an Apache VirtualHost block whenhandler=fcgi.SSL attach/detach flows through
PUT /api/sites/{id}(site-side) notPOST /api/sites/{id}/certificate(there is no such endpoint).
These are documented in the tool descriptions so the LLM doesn't have to rediscover them.
Requirements
Node.js 20 or newer
A FastPanel 2 installation reachable over HTTPS
Root SSH on the panel host to create API tokens (one-time)
Install
git clone https://github.com/iMateo/fastpanel-mcp.git
cd fastpanel-mcp
pnpm install # or: npm install
pnpm buildGet API tokens
On the FastPanel host (as root), create a read-only token for day-to-day use:
mogwai users tokens add -n mcp-read -s read_only -e 2030-12-31The CLI binary is
/usr/local/fastpanel2/fastpanel; recent FastPanel builds expose it onPATHasmogwai(/usr/local/bin/mogwai→ the same binary). Older docs call itfastpanel, which is not onPATH— usemogwai, or the full path. Root only.
Copy the msg field from the returned JSON — that's your token. It bypasses 2FA and survives session TTLs, so treat it as a server credential.
Optional write token, with an expiry and IP lock:
mogwai users tokens add -n mcp-write -c <your-ip> -e 2030-12-31Leave FASTPANEL_WRITE_TOKEN unset in configs where you don't need writes.
Configure
cp .env.example .envMinimum viable .env:
FASTPANEL_URL=https://panel.example.com:8888
FASTPANEL_TOKEN=<your read token>
FASTPANEL_INSECURE_TLS=1 # only if panel uses self-signed certUse with Claude Code
claude mcp add fastpanel \
-s user \
-e "FASTPANEL_URL=https://panel.example.com:8888" \
-e "FASTPANEL_TOKEN=…" \
-e "FASTPANEL_INSECURE_TLS=1" \
-- node $PWD/dist/index.jsAdd -e "FASTPANEL_WRITE_TOKEN=…" when you want write tools enabled.
Use with Claude Desktop / Cursor / other MCP clients
claude_desktop_config.json (or equivalent):
{
"mcpServers": {
"fastpanel": {
"command": "node",
"args": ["/absolute/path/to/fastpanel-mcp/dist/index.js"],
"env": {
"FASTPANEL_URL": "https://panel.example.com:8888",
"FASTPANEL_TOKEN": "…",
"FASTPANEL_INSECURE_TLS": "1"
}
}
}
}Debug
Inspect tools with the MCP Inspector GUI:
pnpm inspectDrive JSON-RPC over stdio manually:
FASTPANEL_URL=… FASTPANEL_TOKEN=… node scripts/smoke.mjsTools
Read (no write token required)
Tool | Endpoint | Returns |
|
| All websites, 13 essential fields by default (compact mode) |
|
| Full 40-field site object (cert, backend, backups, stats) |
|
| Raw nginx (frontend), handler backend (PHP-FPM or Apache), php.ini |
|
| MySQL + PostgreSQL databases with owners and sizes |
|
| Available DB servers — use ids in |
|
| Panel users and site owners |
|
| DNS zones (empty if panel DNS is off) |
|
| Records for one zone |
|
| Stored SSL certificates (LE + custom) |
|
| CPU / memory / disk / load averages / top processes |
|
| Background tasks including completed |
|
| In-flight tasks only (filters finished) + |
|
| Tail nginx/apache access or error log (frontend_/backend_) without SSH |
|
| Databases, sub-domains, DNS & email zones attached to a site |
|
| Configured backup plans |
|
| Account behind the current read token (username, roles, ssh) |
|
| Panel-wide settings (OS, license, limits, notifications) |
Write (require FASTPANEL_WRITE_TOKEN + explicit confirm: true)
Tool | Endpoint | Purpose |
|
| Create a new panel user (site owner) |
|
| Create MySQL or PostgreSQL database with a dedicated DB user |
|
| Create a site atomically, optionally with inline user / database / FTP |
|
| Change document root ( |
|
| Attach / replace / detach an SSL certificate, toggle HTTPS / HTTP2 / HTTP3 / HSTS |
|
| Change PHP version, handler, port, socket, env vars (pass site id — backend id resolved internally) |
|
| Replace raw nginx/apache/php.ini for the site. Dangerous: bad syntax can break the site — when SSH is configured, runs |
|
| Issue a new Let's Encrypt certificate (async — poll |
SSH-backed (require FASTPANEL_SSH_HOST)
These do what the REST API can't — they run on the panel host itself. Opt-in and host-agnostic: set FASTPANEL_SSH_HOST (+ optional FASTPANEL_SSH_USER/PORT/KEY) to point at any FastPanel server. The server shells out to your own ssh client, so the host just needs to be reachable with key-based auth. nginx_validate and site_doctor are read-only; the rest are writes (confirm: true + dry_run preview).
Tool | Runs | Purpose |
|
| Validate the live nginx config before/after |
|
| Diagnose why a site errors: missing docroot, a parent dir without |
|
| Dump a database to a |
|
| Load a |
|
| Upload a local file/dir into a site's web root, then chown to the site user. |
|
| Fetch files on the host (https git repo or tarball) into a site's web root, then chown to the site user |
|
| Write one small inline file (placeholder/.htaccess/robots.txt) into a site's web root, then chown to the site user |
Dump/import paths are confined to a staging dir (default /root/fastpanel-mcp-dumps, override with FASTPANEL_DUMP_DIR); paths outside it or containing .. are rejected. The three upload/deploy tools resolve the site's index_dir + owner via site_get, refuse destination subpaths that escape the web root or contain shell-unsafe characters, and chown everything to the site's system user so nginx/PHP-FPM can serve it (root-owned files would 403).
Cookbook
Provision a new test site under a wildcard cert (30 seconds, no DNS/LE wait):
site_create(domain="foo.example.com", owner_id=2, php_version="84")
→ site_ssl_update(site_id=<new>, certificate_id=<wildcard>, https_redirect=true, http2=true, http3=true)Provision a production site with a fresh Let's Encrypt cert:
site_create(domain="foo.com", aliases=["www.foo.com"], owner_id=<id>, php_version="84", database={...})
→ certificate_create_letsencrypt(site_id=<new>, email, common_name="foo.com")
→ queue_active # poll until LE job SUCCESSHarden default nginx (block .git, .env, .htaccess, composer.json, etc.):
site_configuration_get(site_id)
# LLM inserts security location blocks into frontend
site_configuration_update(site_id, frontend=<edited>, backend=<unchanged>, phpini=<unchanged>)Remove deprecated TLS versions:
site_configuration_get(site_id)
# LLM replaces "ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3" with "ssl_protocols TLSv1.2 TLSv1.3"
site_configuration_update(site_id, frontend=<edited>, backend=<unchanged>, phpini=<unchanged>)Safety model
Dual tokens. Read token always required. Write token is optional — if
FASTPANEL_WRITE_TOKENisn't set, every write tool errors out before touching the network withFastPanelWriteDisabledError.confirm: trueis a required argument on every write tool. Tools refuse to execute without it — this is your last line of defence against a confused LLM.dry_run: truereturns the exact JSON body that would be sent, passwords redacted as***, and skips the HTTP call entirely.stderr audit log records every executed write with redacted payload. In Claude Code this surfaces in MCP logs.
nginx -tauto-validation. With SSH configured,site_configuration_updaterunsnginx -tright after applying and auto-reverts to the previous config if it fails — a bad edit can't leave nginx unable to reload. Passvalidate: falseto opt out.Tool annotations. Every tool ships MCP
readOnlyHint/destructiveHint/idempotentHint/openWorldHinthints so MCP clients and external policy gateways can apply the right guardrails per tool.No delete tools yet. Destructive operations are left to the UI until they're deliberately added.
IP-lock tokens (
mogwai users tokens add -c <ip>) so a leaked token can't be used from elsewhere.
Known gotchas
filter[...]params: FastPanel list endpoints expectfilter[limit]=…&filter[type]=…. Bare?limit=…is silently ignored.Site creation is a wizard, not a REST create. The panel does
POST /api/master/domain(probe) thenPUT /api/master(actual create), notPOST /api/sites.site_createhides this.Async operations. Cert issuance, site backend updates, and several other ops return
action: "CREATING"/"UPDATING"immediately and run in the background. Usequeue_activeto poll.No official OpenAPI spec. Endpoints were reverse-engineered. If a new FastPanel release breaks something, please file an issue with the new payload shape.
Self-signed TLS. Most panel installs use self-signed certs. Set
FASTPANEL_INSECURE_TLS=1or put a proper cert in front.fail2ban / rate limiting. FastPanel ships with fail2ban and panel-level rate limiting. Test scripts that hammer the API may get your IP blocked.
Roadmap
Delete tools (
user_delete,site_delete,database_delete,certificate_delete)DNS record CRUD
Backup plan management (list / run / restore)
Email domain + mailbox management
Bulk operations (e.g. "apply this nginx hardening to every site")
CLI-fallback tools over SSH for ops not in REST (
transfer,firewall save/restore,panel ip_match)Structured MCP
outputSchemaso clients can render typed resultsRate-limit aware retry with exponential backoff
Contributing
Issues and PRs welcome. Especially useful:
Captured DevTools Network payloads for actions not yet covered
Compatibility fixes for newer FastPanel versions
Additional DB servers / runtime types in the enum schemas
Screenshots / recordings of typical flows for the README
Author
Built and maintained by Ihor Chyshkala — chyshkala.com · ihor@chyshkala.com.
Services
Available for hire via chyshkala.com:
Service | What it covers |
Web Development | Full-stack web apps with React, Next.js & Node.js |
Process Automation | Workflows, integrations & data pipelines |
API Development | REST, GraphQL & third-party integrations |
AI Integration | ChatGPT, Claude & custom AI solutions |
AI Chatbot (new) | Custom chatbots trained on your data |
DevOps | CI/CD, Docker & cloud infrastructure |
CTO-as-a-Service | Technical leadership for startups |
Due Diligence | Technical audits for investors |
Legacy Modernization | Migrate from legacy to modern stack |
License
MIT — see LICENSE.
Disclaimer
This is a third-party, community project. "FastPanel" is a trademark of its respective owners. This project is not affiliated with, endorsed by, or sponsored by FastPanel. Test against a non-production FastPanel instance before pointing it at anything you care about.
Available Tools
32 toolsbackup_plans_listARead-onlyIdempotent
List configured backup plans (FastPanel v2 backup system). Maps to GET /api/v2/backup/plans. Empty data array means no backup plans are configured.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety and side effects. The description adds value by specifying the HTTP method (GET) and handling of empty responses, but does not reveal other behavioral traits beyond what annotations provide.
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 extremely concise at two sentences, front-loaded with purpose followed by API mapping and behavior note. Every sentence adds essential information without 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 zero-parameter list tool without output schema, the description covers purpose, endpoint, and empty state handling. This is fully adequate given the tool's simplicity and the richness of sibling 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?
Schema coverage is 100% with zero parameters. The description does not need to add parameter info; baseline 3 applies per rules.
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 the resource 'backup plans', with specific context of the FastPanel v2 backup system and API endpoint mapping. It is distinct from all sibling tools, which include no other backup-related 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 implies usage by stating what the tool does, but does not explicitly provide when-to-use/when-not-to-use guidance or compare with alternatives. The note about empty data array offers a hint but is not a full guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
certificate_create_letsencryptA
Issue a Let's Encrypt SSL certificate for an existing site. This is ASYNC — response returns immediately with status 'CREATING'. Poll queue_active to track issuance progress. REQUIREMENTS: site must be publicly accessible with correct DNS for HTTP-01 challenge to succeed. WRITE operation — confirm:true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Contact email for Let's Encrypt registration | ||
| confirm | No | ||
| dry_run | No | ||
| site_id | Yes | Site id from sites_list (maps to 'virtualhost' in API) | |
| key_length | No | RSA key length | |
| common_name | Yes | Primary domain for the certificate (CN) | |
| alternative_names | No | Additional SAN domains. If empty, will be set to [common_name]. | |
| force_dns_validation | No | Use DNS-01 challenge instead of HTTP-01 (required for wildcard certs) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (write operation, not idempotent), description adds async nature, immediate return with 'CREATING' status, polling queue_active, and prerequisite that site must be accessible. No contradictions.
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?
Very concise: three sentences with clear sections (description, async note, requirements, write confirm). No wasted words.
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?
Covers key aspects: async workflow, polling, DNS requirement, confirmation flag. Missing potential error scenarios or rate limits, but sufficient for a complex tool without output schema.
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 already covers 75% of parameters well. Description adds critical contextual hint that confirm must be true to execute, which is not obvious from schema alone.
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?
Clearly states it issues a Let's Encrypt SSL certificate for an existing site, distinguishing from listing certificates or updating SSL. Specifies async behavior upfront.
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?
Tells when to use (issuing certs) and mentions requirement of publicly accessible DNS, but does not explicitly contrast with alternatives like site_ssl_update or DNS-01 validation options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
certificates_listARead-onlyIdempotent
List all SSL certificates stored in FastPanel (Let's Encrypt and custom). Returns id, name, type, common_name, alternative_name, expiration, linked site. Also injects computed crt_path/key_path — the on-disk paths FastPanel writes certs to (/var/www/httpd-cert/.crt|.key). These are needed when hand-writing a 443 server block after a site is in manual_changes mode. NOTE: the paths are derived from FastPanel's naming convention, not returned by the API — verify on disk (ls /var/www/httpd-cert/) if a cert was imported rather than issued by the panel.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, etc.), the description discloses that computed paths are derived from naming convention, not API, and advises on-disk verification for imported certs. This adds significant behavioral context.
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 concise (5-6 sentences), front-loads the purpose, and packs essential information without fluff. Every sentence adds value.
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 output schema, the description fully covers return fields and edge cases (imported cert verification). It is complete for a list-all tool with no parameters.
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 no parameters; the input schema is empty. The description does not need to add parameter info. Baseline score of 4 is appropriate.
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 lists all SSL certificates, specifies types (Let's Encrypt and custom), and enumerates returned fields including computed paths. It distinguishes itself from create/update tools in the sibling list.
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 specific context for when the computed paths are needed (hand-writing 443 server block in manual_changes mode) and includes a verification note. However, it does not explicitly contrast with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
database_createA
Create a new database (MySQL or PostgreSQL) with a dedicated DB user. WRITE operation — set dry_run:true to preview, confirm:true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Database name (MySQL: a-z0-9_, max 64; Postgres: also allows more) | |
| charset | No | Charset: 'utf8' or 'utf8mb4' for MySQL, 'en_US.UTF-8' for PostgreSQL | utf8 |
| confirm | No | ||
| dry_run | No | ||
| site_id | No | Link DB to a site (optional). Null = standalone DB. | |
| owner_id | Yes | FastPanel user id (owner) from users_list | |
| server_id | Yes | DB server id from database_servers_list (1=MySQL, 2=PostgreSQL typically) | |
| db_user_login | Yes | DB user login (the user that owns this DB) | |
| db_user_password | Yes | DB user password (min 8 chars) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-readOnly and non-destructive, and the description confirms it as a WRITE operation. It also clarifies the preview/execute workflow. However, it doesn't describe the return value or potential side effects, which is notable since no output schema exists.
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?
Two sentences: first states purpose, second adds crucial workflow info. No wasted words.
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?
Covers the core action and preview/execute workflow. Missing details like linking to a site (site_id) or DB engine distinction, but these are in schema. OpenWorldHint implies possible side effects not addressed.
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 high (78%), so the description adds little beyond the schema. It mentions 'with a dedicated DB user' but doesn't elaborate on parameters or constraints.
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?
Description clearly states the action (create), the resource (database), and the types (MySQL or PostgreSQL). It also mentions the creation of a dedicated DB user, which is specific and distinguishes it from listing or dumping 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?
Explicitly instructs to use dry_run=true for preview and confirm=true to execute, which is a safety guideline. However, it does not contrast with other tools or specify prerequisites like server_id lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
database_dumpA
Dump a database to a .sql file ON the FastPanel host via SSH (mysqldump). Writes a file you can then download (scp/sftp); returns the path and byte size. The file can only be written inside the staging dir (default /root/fastpanel-mcp-dumps, override with FASTPANEL_DUMP_DIR) — arbitrary output paths are rejected. Targets the host's LOCAL MySQL via root socket auth; remote servers and non-MySQL engines are rejected. WRITE (it creates a root-owned file) — set dry_run:true to preview, confirm:true to execute. Requires SSH configured (FASTPANEL_SSH_HOST).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| dry_run | No | ||
| database_id | Yes | Database id from databases_list | |
| output_path | No | Absolute .sql path INSIDE the staging dir. Default: <staging>/<name>-<timestamp>.sql |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes write operation (creates root-owned file), file return details (path, size), and rejection of remote servers/non-MySQL. Adds context beyond annotations (SSH requirement, staging dir restriction) without contradicting readOnlyHint=false.
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?
All sentences are informative and necessary. Front-loaded with purpose, followed by constraints and usage steps. No 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?
Covers prerequisites, output format, behavioral flags, and limitations. Without output schema, description adequately explains return values (path and byte size).
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 covers 2 of 4 params with descriptions; description adds usage context for dry_run/confirm (preview/execute) and clarifies output_path scope (staging dir only). Fully compensates for missing schema 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?
Clearly states 'Dump a database to a .sql file' using specific verb and resource. Distinguishes from sibling tools like databases_list and database_import by specifying dump/export via SSH and mysqldump.
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?
Explicitly mentions prerequisites (SSH configured, staging dir), how to preview vs execute (dry_run, confirm), and constraints (local MySQL only, file path restrictions). Lacks direct comparison to alternatives but boundaries are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
database_importADestructiveIdempotent
Load a .sql dump file (already present on the host) INTO a database via SSH (mysql). DESTRUCTIVE: the SQL runs as-is, so a dump containing DROP/CREATE will replace existing tables and data. The source file must live inside the staging dir (default /root/fastpanel-mcp-dumps, override with FASTPANEL_DUMP_DIR) — paths elsewhere are rejected, so scp the file there first (or produce it with database_dump). Targets the local MySQL via root socket auth. WRITE — set dry_run:true to preview the command, confirm:true to execute. Requires SSH configured (FASTPANEL_SSH_HOST).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| dry_run | No | ||
| database_id | Yes | Target database id from databases_list | |
| source_path | Yes | Absolute path to the .sql file, inside the staging dir |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include destructiveHint:true. Description adds valuable context: 'DESTRUCTIVE: the SQL runs as-is, so a dump containing DROP/CREATE will replace existing tables and data.' Also notes SSH requirement. No contradiction with annotations.
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?
Two sentences with no filler. First sentence states main action. Second sentence packs warnings, prerequisites, and usage guidance. Front-loaded.
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?
Covers all aspects: what it does, destructive behavior, preconditions (staging dir, SSH), dry_run/confirm workflow, and output expectation (command preview or execution). No output schema but sufficient for selection and invocation.
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 covers 50% of parameters with descriptions. Description adds meaning for dry_run and confirm ('dry_run:true to preview the command, confirm:true to execute'), and explains source_path constraint (must be in staging dir).
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 'Load' and resource '.sql dump file INTO a database via SSH (mysql)'. It distinguishes from sibling tools like 'database_dump' which produces dump files.
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?
Explicitly states when to use (importing SQL dumps), precondition (file in staging dir), and alternative (use database_dump to produce the file). Also warns about destructive nature and required SSH configuration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
database_servers_listARead-onlyIdempotent
List available database servers (MySQL, PostgreSQL). Use the returned ids as server_id in database_create and site_create.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so description adds limited behavioral info beyond listing server types. Description is consistent with annotations.
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?
Two concise sentences with no filler. Front-loaded with action and resource, followed by usage guidance.
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 0-parameter list tool with no output schema, description fully explains purpose, return value usage, and server types. No 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?
No parameters, so description cannot add beyond schema. Baseline 4 is appropriate as there is no need for parameter explanation.
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?
Clearly states verb (List), resource (database servers), and specific types (MySQL, PostgreSQL). Differentiates from siblings by explaining how returned ids feed into database_create and site_create.
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?
Explicitly says to use returned ids in create tools, guiding when to call. Does not include when-not-to-use, but context is clear given sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
databases_listARead-onlyIdempotent
List all MySQL and PostgreSQL databases. Returns id, name, charset, size, owner, linked site, server, last dump timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds that it returns specific fields and covers both MySQL and PostgreSQL, but does not reveal additional behavioral traits beyond what annotations provide.
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?
Single, efficient sentence that front-loads the action and scope, with no wasted words.
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 parameterless list tool with thorough annotations, the description adequately covers return fields and scope, making it fully actionable for an AI 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?
No parameters exist, so the schema covers 100%. Baseline for 0 parameters is 4; the description is not required to add parameter info.
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 'List all MySQL and PostgreSQL databases' with a specific verb and resource, and lists returned fields. It distinguishes from sibling list tools like sites_list or users_list, and from database-specific tools like database_dump.
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 explicit guidance on when or when not to use this tool. Usage is implied by the simple act of listing databases, but absence of exclusion criteria or alternative suggestions limits clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dns_domains_listARead-onlyIdempotent
List all DNS zones managed by FastPanel's DNS service. Empty if DNS is not configured.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing safety. The description adds the behavioral trait that the result is empty if DNS is not configured, which is useful and non-contradictory.
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 sentence that conveys the main purpose and a key edge case, with no redundant information. It is front-loaded and concise.
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 simple list tool with no parameters, the description covers the purpose, scope, and an edge case (empty if DNS not configured). While no output schema exists, the return format is implied by the tool's nature; the description is sufficient for an agent to understand what to expect.
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?
There are zero parameters and schema coverage is 100% (vacuously), so no param info is needed. The description adds no parameter meaning, but with zero params, the baseline is 4 as per guidelines.
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 all DNS zones' and identifies the specific resource 'FastPanel's DNS service', distinguishing it from sibling tools like dns_records_list which list records within a zone.
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 implies usage for listing DNS zones but does not explicitly state when to use or avoid this tool versus alternatives. The note about being empty if DNS is not configured provides some context, but no alternative tools or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dns_records_listARead-onlyIdempotent
List all DNS records for a specific domain (zone) by its id. Use dns_domains_list first to get ids.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | DNS zone id from dns_domains_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds minimal behavioral context beyond stating it lists 'all' records. It does not disclose any additional traits like auth needs or pagination, but it is consistent with annotations.
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?
Two concise sentences with no waste. First sentence defines purpose, second provides prerequisite. Highly efficient for a single-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 simplicity (one parameter, no output schema), the description is complete. It covers what the tool does, what input is needed, and how to obtain that input. No 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?
Schema coverage is 100% with domain_id fully described. The description reinforces that the id comes from dns_domains_list, adding valuable context beyond the schema's description.
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', the resource 'DNS records', and the scope 'for a specific domain (zone) by its id'. It also distinguishes itself from sibling dns_domains_list by directing users to use that tool first.
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?
Explicitly states the prerequisite: 'Use dns_domains_list first to get ids.' This provides clear when-to-use guidance and establishes a workflow, making it easy for the agent to decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
meARead-onlyIdempotent
Identify the FastPanel account behind the current READ token — username, roles, home dir, ssh access. Maps to GET /api/me. Use to confirm which user/token the server is authenticated as. NOTE: this always reflects the read token; it does not tell you whether a write token is configured.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, strongly indicating safe read behavior. The description adds value by noting that the tool always reflects the read token, not the write token, which is a behavioral nuance beyond annotations. No contradictions.
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 two sentences plus a note, all front-loaded with the main purpose. Every sentence adds value: purpose, endpoint mapping, usage recommendation, and a critical caveat. No wasted words.
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 has no parameters, no output schema, and annotations cover safety signals, the description is fully complete: it explains what the tool does, when to use it, and a relevant limitation. It covers the necessary context for correct invocation.
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, so schema coverage is 100%. The description does not need to explain parameters but adds value by listing output fields (username, roles, home dir, ssh access). Baseline for 0 parameters is 4, and the description meets this.
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 identifies the FastPanel account behind the current READ token, listing specific fields (username, roles, home dir, ssh access). It distinguishes from sibling tools which operate on other resources (sites, dns, etc.), making its purpose unambiguous.
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 explicitly states when to use: 'Use to confirm which user/token the server is authenticated as.' It also includes a note about what it does not tell (whether a write token is configured), providing clear guidance on limitations and appropriate contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nginx_validateARead-onlyIdempotent
Run nginx -t on the FastPanel host (over SSH) to validate the live nginx config — use it before and after site_configuration_update to catch syntax errors that would otherwise take nginx (and every site on it) down. Read-only: does NOT reload or modify anything. Requires SSH configured (FASTPANEL_SSH_HOST); uses your own ssh client.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint false. Description adds that it is read-only, does NOT reload or modify anything, and requires SSH configured. No contradictions.
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?
Two sentences with no wasted words. Action verb and key usage guidance are front-loaded.
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 parameters and no output schema, the description is fully adequate: explains purpose, usage timing, behavioral traits, and preconditions. Sufficient for an agent to select and invoke correctly.
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?
No parameters in input schema (schema coverage 100%). Description does not need to explain parameters; baseline 4 for zero-param 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?
Clearly states it runs 'nginx -t' to validate live nginx config, with a specific verb ('run') and resource ('nginx config'). Distinguishes from sibling tools by mentioning use before/after site_configuration_update.
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?
Explicitly says 'use it before and after site_configuration_update' and warns that syntax errors would take nginx down. Provides context for when to invoke, and clarifies read-only nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_activeARead-onlyIdempotent
Poll FastPanel background tasks and get a deterministic done/not-done signal. The raw /api/queue endpoint also returns recently-FINISHED tasks (status SUCCESS/FAILED), which makes naive polling ambiguous. This tool filters to genuinely in-flight tasks by default and adds meta.all_done (true when nothing is still running) so you can loop until done. Set include_finished:true to also see the just-completed tasks (useful to learn whether an async op SUCCEEDED or FAILED).
| Name | Required | Description | Default |
|---|---|---|---|
| include_finished | No | If true, return finished tasks too (with their SUCCESS/FAILED status) instead of only in-flight ones. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds value by detailing filtering to in-flight tasks, meta.all_done flag, and effect of include_finished. No contradictions.
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?
Three well-structured sentences, front-loaded with the core purpose. Every sentence adds value, no wasted words.
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 output schema, description adequately explains return behavior (filtered tasks, meta.all_done). With openWorldHint and readOnlyHint, it's sufficient for a polling tool. Could potentially hint at polling intervals, but not required.
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 coverage is 100% with a boolean parameter already described. Description adds meaning: include_finished allows seeing just-completed tasks to know if async op succeeded/failed, which is useful context beyond the 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?
Description clearly states it polls FastPanel background tasks for a deterministic done/not-done signal, contrasts with naive polling, and specifies filtering behavior. It differentiates itself from siblings like queue_list by focusing on in-flight tasks and providing meta.all_done.
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?
Explicitly explains when to use (polling for done/not-done) and when not (naive raw endpoint), and describes include_finished option for checking final status. No explicit alternative sibling named, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
queue_listARead-onlyIdempotent
List active and recent FastPanel background tasks (backups, migrations, SSL issuance, screenshots, etc) including completed ones.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety and idempotency. Description adds context about task types included but no critical behavioral details beyond annotations. No contradiction.
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?
Single sentence with no wasted words. Front-loaded with the action and resource, followed by clarifying examples. Highly efficient.
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 simple list tool with one optional parameter, strong annotations, and no output schema, the description is sufficient. It clearly states what is listed and includes completion. Could specify ordering or pagination but not essential.
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 coverage is 100% with a single parameter 'limit' described adequately. Description does not mention parameters, but baseline is 3 as schema does the heavy lifting.
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?
Description clearly states verb 'List' and resource 'FastPanel background tasks' with specific examples (backups, migrations, SSL issuance, screenshots). It differentiates from the sibling 'queue_active' by including completed tasks, making its scope distinct.
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?
Description implies broader scope than 'queue_active' (includes completed tasks) but does not explicitly state when to use this tool versus alternatives or when not to use it. Lacks direct guidance on choosing between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
settings_getARead-onlyIdempotent
Read panel-wide settings — OS release, license type, upload limit, email notification config, statistics toggles, etc. Maps to GET /api/settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false. The description adds context by mapping to GET endpoint and listing example settings, which reinforces safety without contradicting annotations.
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?
Single sentence, front-loaded with key action and resource, followed by concrete examples and API mapping. No wasted words.
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 output schema, the description could specify the return format (e.g., object containing all settings). However, the examples and endpoint mapping provide sufficient context for a simple read operation with no parameters.
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?
Input schema has zero parameters and 100% coverage; the description does not need to add parameter info. Baseline for no parameters is 4, and the description appropriately avoids extraneous details.
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 'Read' and resource 'panel-wide settings', lists specific examples (OS release, license type, etc.), and disambiguates from sibling tools like site_get or system_load by focusing on global settings.
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 (e.g., site_get for per-site settings). The description lacks any conditions or exclusions, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_backend_updateADestructiveIdempotent
Update backend settings of an existing site: PHP version, handler (php_fpm/fcgi), app file, port, socket path, env vars. Pass the SITE id (from sites_list) — this tool resolves the backend id internally (the API endpoint is PUT /api/sites/backend/{backend_id}, where backend_id = main_backend.id, NOT the site id; passing a site id there 404s). All settings except site_id are optional: omitted fields keep the site's current backend values (fetched via site_get). NOTE: this does NOT change the site's document root (site.index_dir) — nginx renders root from the site object, not the backend. Use site_update for docroot. WRITE — confirm:true required.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | Backend listen port (default: keep current) | |
| type | No | Backend runtime type (default: keep current) | |
| confirm | No | ||
| dry_run | No | ||
| handler | No | PHP handler (only meaningful for type=php; default: keep current) | |
| site_id | Yes | Site id from sites_list (backend id is resolved automatically) | |
| app_file | No | Entry file (default: keep current) | |
| work_dir | No | Working directory (default: keep current) | |
| environment | No | Env vars, e.g. ['KEY=val'] (default: keep current) | |
| socket_path | No | Unix socket path for the backend (default: keep current) | |
| manual_changes | No | Preserve manual changes to backend config | |
| handler_version | No | PHP version without dot (default: keep current) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds context: the tool resolves the backend id internally and uses PUT /api/sites/backend/{backend_id}, and omitted fields keep current values by fetching via site_get. No contradictions with annotations.
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 paragraph that front-loads purpose and includes all necessary information. It is dense but clear; slight improvement could be breaking into bullet points for readability, but it remains concise with no wasted words.
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 12 parameters and no output schema, the description explains internal resolution, merge semantics, confirm requirement, and docroot separation. It does not describe the return value, but given no output schema, this is a minor gap. Overall quite complete.
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 coverage is 83%. The description adds key context beyond schema: all settings except site_id are optional, omitted fields keep current values, and passing site_id avoids 404. However, not every parameter is individually elaborated beyond schema 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 'Update backend settings of an existing site' and lists the specific settings (PHP version, handler, app file, port, socket path, env vars). It distinguishes from sibling tool site_update by explicitly noting that this tool does not change the document root, which site_update does.
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 instructs the agent to pass the SITE id from sites_list, warns against using backend_id directly (404 error), explains that omitted fields keep current values, and directs to site_update for docroot changes. It also flags that confirm:true is required for write operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_configuration_getARead-onlyIdempotent
Read the raw nginx (frontend), apache (backend) and php.ini configs for a site. Returns the literal config text as stored by FastPanel. Use before site_configuration_update to see current state — FastPanel's default configs often miss hardening (no .git/.env blocking, etc). Endpoint: GET /api/sites/{site_id}/configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Site id from sites_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds that it returns literal config text as stored, which is useful. Does not contradict annotations.
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?
Three concise sentences, front-loaded with purpose, followed by usage and endpoint. No unnecessary words.
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 simple read tool with one parameter and no output schema, the description fully explains what is returned and the use case. Complete.
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 has 100% coverage and describes site_id as 'Site id from sites_list'. Description does not add further semantics beyond the endpoint context. Baseline 3 is appropriate.
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?
Clearly states the verb 'Read' and the resource 'raw nginx, apache, and php.ini configs'. Distinguishes from sibling tools like site_get and site_configuration_update by specifying it returns the literal config text.
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?
Explicitly recommends using before site_configuration_update to see current state, and explains why (FastPanel defaults often miss hardening). Also provides the exact endpoint, aiding correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_configuration_updateADestructiveIdempotent
Replace the nginx (frontend), apache (backend) and php.ini config for a site. DANGEROUS: invalid syntax can take down the site or the whole nginx/apache service. SAFETY NET: when SSH is configured (FASTPANEL_SSH_HOST) and validate:true (the default), the tool runs nginx -t right after applying and AUTO-REVERTS to the previous config if it fails, so a bad edit can't leave nginx unable to reload. Without SSH there is NO validation — preview with dry_run and double-check by hand. ⚠️ SIDE EFFECT — manual mode: the first config update flips the site to manual_changes=true on the panel side. After that, FastPanel STOPS managing this site's config: it will no longer auto-insert the 443 server block, the HTTP→HTTPS redirect, or Let's Encrypt renewal/acme-challenge locations when you issue or renew SSL. You become responsible for the full HTTPS block (including ssl_certificate paths — get them from certificates_list crt_path/key_path). Partial update IS supported here (unlike the raw API): omit any of frontend/backend/phpini and the tool fetches the current value via site_configuration_get and sends it back unchanged, so you can safely change just one block. Endpoint: PUT /api/sites/{site_id}/configuration. WRITE — confirm:true required.
| Name | Required | Description | Default |
|---|---|---|---|
| phpini | No | Full php.ini overrides for this site. Omit to keep current. | |
| backend | No | Full apache/httpd config for this site (VirtualHost block). Omit to keep current. | |
| confirm | No | ||
| dry_run | No | ||
| site_id | Yes | Site id from sites_list | |
| frontend | No | Full nginx config for this site (HTTPS server block + HTTP redirect block). Omit to keep current. | |
| validate | No | When SSH is configured (FASTPANEL_SSH_HOST), run `nginx -t` right after applying and AUTO-REVERT to the previous config if it fails. Set false to skip the check (no effect if SSH is unconfigured — there is no validation either way then). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses far beyond annotations: safety net with validation and auto-revert, side effect of manual mode, partial update behavior. Annotations (destructiveHint=true, idempotentHint=true) are consistent and the description adds crucial context.
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 main action, uses structured warnings and bullet-like formatting. It is slightly long but every sentence is informative; could be tightened slightly.
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 high-risk write operation, the description covers safety net, side effects, partial updates, endpoint, and references to related tools. No output schema, but the behavioral info is comprehensive.
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 coverage is 71% high, but description adds value: explains that omitting a param keeps current, the validate param behavior, and the SSH prerequisite. This goes beyond the schema's 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 tool replaces nginx, apache, and php.ini config for a site. It distinguishes from siblings like site_configuration_get (read) and site_backend_update (partial) by explaining partial update support and the full scope.
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?
Guidelines are strong: it explains when to use (replace config), warns about danger, and contrasts with raw API. However, it does not explicitly say when NOT to use, e.g., if only backend update is needed, there is site_backend_update sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_createA
Create a new website in FastPanel using the /api/master wizard endpoint. Can create owner/database/FTP inline atomically. Does NOT issue SSL — call certificate_create_letsencrypt after site is active. WRITE operation — set dry_run:true first, then confirm:true to execute. Flow: (1) POST /api/master/domain probes for existing email/DNS zones, (2) PUT /api/master creates the site with everything.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | Server IPs to bind to, e.g. ['100.42.181.157']. Get from sites_list → ips field. | |
| domain | Yes | Primary domain, e.g. 'example.com' or 'sub.example.com' | |
| aliases | No | Additional domain aliases, e.g. ['www.example.com'] | |
| confirm | No | ||
| dry_run | No | ||
| handler | No | PHP handler: php_fpm is faster, fcgi simpler. Use site_get on existing sites to see what this project prefers. | fcgi |
| database | No | Optionally create a new database linked to this site. Omit to skip DB creation. | |
| owner_id | No | Existing FastPanel user id (from users_list). Use this OR new_owner, not both. | |
| new_owner | No | Create a new user inline. Use this OR owner_id, not both. EXPERIMENTAL — not yet tested against live API. | |
| ftp_account | No | Optionally create an FTP account. Omit to skip. | |
| php_version | Yes | PHP version without dot: 74=7.4, 80=8.0, 82=8.2, 83=8.3, 84=8.4 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description goes beyond annotations by detailing the two-step API flow (probe then create), marking new_owner as experimental and untested, and explicitly calling out the WRITE nature with dry_run recommendation. No contradiction with annotations (readOnlyHint=false supports write).
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?
Two well-organized paragraphs: first introduces purpose and key constraints (SSL, atomic creation), second explains the flow and parameter relationships. Every sentence adds essential information with no 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?
Given 11 parameters, nested objects, no output schema, and moderate complexity, the description comprehensively covers purpose, usage flow, parameter relationships, behavioral notes, and cross-references to sibling tools. It leaves no major gaps for an agent to misinterpret.
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?
Despite high schema coverage (82%), the description adds significant value: for ips, it tells where to get values; for handler, explains differences and recommends checking existing sites; for owner fields, clarifies mutual exclusivity; for database, notes optionality; for domain, gives examples. This enriches understanding beyond the 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', the resource 'new website in FastPanel', and specifies the endpoint '/api/master wizard'. It distinguishes from siblings like site_update and certificate_create_letsencrypt by noting that SSL is not issued and must be done separately.
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?
Explicitly provides when-to-use and when-not: 'Does NOT issue SSL — call certificate_create_letsencrypt after site is active.' It also gives a clear two-step flow with dry_run then confirm, and advises using site_get to determine preferred handler. Mutual exclusivity of owner_id and new_owner is explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_doctorARead-onlyIdempotent
Diagnose the common reasons a FastPanel site serves errors — runs host-level checks over SSH and returns a structured report. Catches the classic traps: docroot missing, a parent directory without o+x so nginx (www-data) can't traverse to the docroot (the 750 → '404 File not found' / 'permission denied' problem), missing PHP-FPM socket, dead backend service, and broken nginx config. Read-only. Requires SSH configured (FASTPANEL_SSH_HOST).
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Site id from sites_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds value by stating 'Read-only' and revealing the SSH dependency (FASTPANEL_SSH_HOST). It also mentions the output is a structured report, which is beyond what annotations provide.
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 concise and well-structured: it starts with the purpose, lists specific checks, then states read-only and SSH requirement. Every sentence adds value without 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?
The description adequately explains the tool's function and what it checks. However, since there is no output schema, the description could be more explicit about the structure of the report. Nevertheless, it covers the essential behavioral context for a diagnostic tool.
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 only parameter site_id is described in the schema as 'Site id from sites_list'. The description adds no further detail on parameter semantics, but since schema coverage is 100%, a baseline of 3 is appropriate.
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: 'Diagnose the common reasons a FastPanel site serves errors'. It lists specific checks (docroot, permissions, PHP-FPM socket, etc.), making it distinct from sibling tools like site_logs or nginx_validate.
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 implies usage when a site serves errors and enumerates the checks performed. It does not explicitly state when not to use or mention alternatives, but the context is clear enough for appropriate selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_file_putADestructiveIdempotent
Write a single small file into a site's web root from inline content, over SSH, then chown it to the site's system user. For quick one-off files (index.html placeholder, .htaccess, robots.txt) — the content travels through the model, so keep it small; use site_files_upload/site_files_deploy for real payloads. rel_path is the file path relative to the web root; parent directories are created as needed. WRITE — dry_run:true to preview, confirm:true to execute. Requires SSH (FASTPANEL_SSH_HOST).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| content | Yes | File contents (max 256KB). Use encoding:'base64' for binary. | |
| dry_run | No | ||
| site_id | Yes | Site id from sites_list | |
| encoding | No | How `content` is encoded. base64 for binary files. | utf8 |
| rel_path | Yes | File path relative to the web root, e.g. 'index.html' or 'assets/robots.txt' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes behavioral traits beyond annotations: file writing over SSH, chowning to site user, creating parent directories, dry_run/confirm workflow, and content size limit (256KB). Annotations already indicate destructiveHint=true and idempotentHint=true, and the description aligns perfectly without contradiction.
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?
Three concise sentences, each serving a distinct purpose: action, use case/alternatives, parameter guidance. No redundant words; every sentence earns its place.
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?
Despite no output schema, the description fully explains the operation (write, chown, create parent dirs) and the overall workflow. It is complete for a simple file writing tool with clear parameters and behavior.
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?
Adds significant meaning beyond the input schema. For parameters like 'dry_run' and 'confirm', the description explains their role ('dry_run:true to preview, confirm:true to execute'). For 'rel_path', it clarifies 'relative to the web root; parent directories are created as needed.' It also reinforces that 'content' has a max size and how to use encoding for binary. Schema coverage is 67%, and the description compensates well.
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 writes a single small file into a site's web root from inline content via SSH, then chowns it. It provides specific examples (index.html, .htaccess, robots.txt) and distinguishes itself from sibling tools (site_files_upload/site_files_deploy), making the purpose unambiguous.
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?
Explicitly tells when to use: 'quick one-off files (index.html placeholder, .htaccess, robots.txt)' and when not: 'use site_files_upload/site_files_deploy for real payloads.' Also mentions the prerequisite: 'Requires SSH (FASTPANEL_SSH_HOST).'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_files_deployADestructiveIdempotent
Deploy site files onto the host by fetching them ON the server (no local copy needed) — git clone or a downloaded tarball — into the site's web root, then chowning to the site's system user. Resolves index_dir + owner via site_get. The fetch runs as root on the panel host; only https:// sources are accepted. source_type 'git': shallow-clones source (optionally at ref) and copies the tree (excluding .git) into the destination. source_type 'tarball': curls the archive and extracts it; a single wrapping top-level directory (e.g. GitHub's repo-main/) is descended into automatically. Existing files are overwritten; nothing is deleted. dest_subpath is relative to the web root. WRITE — dry_run:true to preview, confirm:true to execute. Requires SSH (FASTPANEL_SSH_HOST).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | git branch/tag to check out (source_type=git only). Omit for the default branch. | |
| source | Yes | https:// git repo URL (source_type=git) or https:// .tar.gz archive URL (source_type=tarball) | |
| confirm | No | ||
| dry_run | No | ||
| site_id | Yes | Site id from sites_list | |
| source_type | No | git = clone a repo; tarball = download and extract a .tar.gz | git |
| dest_subpath | No | Destination relative to the site web root. Omit for the web root itself. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and write behavior. The description adds specifics: 'Existing files are overwritten; nothing is deleted' and runs as root, which clarifies the exact destructive scope. Only minor additional context like rate limits missing.
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 action and well-structured: overview, source type details, overwrite behavior, dry_run/confirm. Every sentence serves a purpose without 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 complex tool with no output schema, the description covers all necessary context: prerequisites (SSH), safe usage (dry_run), exact effects for each source type, overwrite policy, and destination semantics. No gaps remain.
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 explains parameter usage beyond schema: source_type behaviors (shallow-clone, automatic top-level dir descent), dest_subpath relativity, and ref usage. Considering 71% schema coverage, the description compensates fully, adding essential meaning for all parameters.
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 deploys site files by fetching them on the server (git clone or tarball) into the web root, then chowning. It distinguishes itself from siblings like site_files_upload (local upload) by specifying the server-side fetch mechanism.
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 specifies when to use (WRITE operations, with dry_run for preview) and prerequisites (SSH host). It implies alternatives (upload for local files) but does not explicitly list when not to use. The guidance is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_files_uploadADestructiveIdempotent
Upload a local file or directory from THIS machine into a site's web root, over SSH (rsync, scp fallback). Resolves the site's index_dir + owner via site_get, transfers with your own ssh key (bytes never pass through the model), then chowns to the site's system user AND normalises perms on the destination subtree to FastPanel's web defaults (dirs 755, files 644) so nginx/PHP-FPM can serve it (local file modes are not relied on). rsync TRAILING-SLASH semantics: local_path 'build/' uploads the CONTENTS of build into the destination; 'build' (no slash) uploads the build dir itself, creating /build. dest_subpath is relative to the web root (omit to target the root). delete:true mirrors the source (rsync --delete removes remote files absent locally) — needs rsync, gated behind confirm. WRITE — set dry_run:true to preview, confirm:true to execute. Requires SSH configured (FASTPANEL_SSH_HOST).
| Name | Required | Description | Default |
|---|---|---|---|
| delete | No | rsync --delete: make the remote an exact mirror of local_path, removing remote-only files. Destructive. | |
| confirm | No | ||
| dry_run | No | ||
| site_id | Yes | Site id from sites_list | |
| local_path | Yes | Path on THIS machine to a file or directory. Trailing slash on a dir uploads its contents. | |
| dest_subpath | No | Destination relative to the site web root (e.g. 'public' or 'wp-content/uploads'). Omit for the web root itself. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds rich behavioral detail beyond annotations: chown/perm normalization, bytes not passing through model, trailing-slash semantics, delete destructive behavior, and write flow with dry_run/confirm. No contradiction with annotations.
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?
Dense but well-structured: first sentence states purpose, then details key behaviors. Every sentence is informative, though slightly long. Front-loaded with essential info.
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 (6 params, no output schema), the description covers SSH prerequisites, permission normalization, rsync semantics, and write flow. No gaps in explaining behavior 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?
Schema coverage is 67%, but the description adds crucial semantics: trailing-slash for local_path, relative destination for dest_subpath, and the role of dry_run/confirm. Compensates well for missing schema 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?
Clearly states upload of local file/directory to site web root via SSH, with explicit verb and resource. Distinguishes itself from siblings like site_file_put (single file) and site_files_deploy by specifying the mechanism and scope.
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?
Provides clear context: for bulk upload via SSH, with prerequisites (SSH configured), dry-run/confirm flow, and trailing-slash semantics. Implicitly differentiates from alternatives but lacks explicit when-to-use vs siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_getARead-onlyIdempotent
Get full details for a single site by id. Returns all 40 fields including SSL certificate, backend config, permissions, backup plan, stats.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Site id from sites_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value by detailing the return fields (40 fields including SSL, backend config, permissions, etc.), which goes beyond annotations.
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?
Single sentence, front-loaded with purpose and key details. No unnecessary words. Efficiently conveys 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?
No output schema, but the description covers the return scope (all 40 fields) and gives examples (SSL, backend config, permissions). For a read-only tool with solid annotations, this is mostly complete. Could mention pagination or error cases, but not required.
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?
Only one parameter 'site_id' with full schema documentation (100% coverage). The description does not add additional syntax or meaning beyond referencing the schema. Baseline score of 3 is appropriate.
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?
Description clearly states the action ('Get full details') and resource ('single site by id'). Specifies the output scope ('all 40 fields including...'). Distinguishes from sibling tools like 'sites_list' (which lists sites) and 'site_update' (which modifies).
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 implies use when detailed info on one site is needed, vs. 'sites_list' for a list. Lacks explicit when-not-to-use or alternative names, but context signals and sibling list make it clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_logsARead-onlyIdempotent
Tail a site's nginx/apache access or error log — no SSH needed. Maps to GET /api/sites/{site_id}/log/{lines}/{type}. Use type=frontend_error to debug 404/permission/realpath problems (nginx), backend_error for PHP-FPM/Apache app errors. FastPanel quirk: this endpoint returns the log tail inside an 'errors' JSON field and responds with HTTP 400 even on success — an empty log shows as '\n', a missing file shows a 'Path … not exists' message. This tool normalises that: the log text is always returned under log, and 400 is not treated as a failure. Log files live at /data/logs/-.log.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | frontend_* = nginx, backend_* = PHP-FPM/Apache; *_error for diagnostics, *_access for traffic | frontend_error |
| lines | No | Number of trailing lines to return | |
| site_id | Yes | Site id from sites_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, not destructive. Description adds critical behavioral details: FastPanel quirk (returns 'errors' field and 400 on success), normalization to 'log' field, empty log as '\n', missing file message. No contradictions.
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?
Description is slightly long but every sentence adds necessary context. Purpose is front-loaded. Could be a bit more concise, but well-structured overall.
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?
Covers behavior, edge cases (empty log, missing file), normalization, and result format ('log' field). No output schema but sufficient explanation. Annotations provide safety profile.
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?
All parameters have schema descriptions. Description enriches 'type' with real-world meaning (nginx vs Apache, error vs access) and explains log file paths. Adds value beyond 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?
Clearly states it tails a site's nginx/apache access or error log without SSH. Specifies the endpoint and normalizes quirks. Distinguishes from sibling tools (none are log-specific).
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?
Provides guidance on when to use each type (frontend_error for 404/permission problems, backend_error for PHP-FPM errors). Does not explicitly mention when not to use this tool or alternatives, but usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_resourcesARead-onlyIdempotent
List the resources attached to a site — linked databases, sub-domains, DNS zones and email domains. Maps to GET /api/sites/{site_id}/resources. Handy before deleting or migrating a site, or to find which database(s) belong to it.
| Name | Required | Description | Default |
|---|---|---|---|
| site_id | Yes | Site id from sites_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds that it maps to a GET endpoint and lists the types of resources returned, providing useful behavioral context without contradiction.
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?
Three concise sentences, front-loaded with the core purpose, and no redundant 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 the tool's simplicity (one parameter, no output schema), the description adequately covers purpose, usage guidance, and expected resource types, making it complete.
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 coverage is 100% and already describes site_id as 'Site id from sites_list'. The description does not add additional parameter semantics, meeting the baseline for high coverage.
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 'List the resources attached to a site' and enumerates specific resource types (linked databases, sub-domains, DNS zones, email domains), differentiating it from sibling tools like sites_list or site_get.
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 advises use 'before deleting or migrating a site, or to find which database(s) belong to it', providing clear context and use cases, though it does not explicitly mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sites_listARead-onlyIdempotent
List all websites managed by FastPanel. Compact mode (default) returns only essential fields — full response is ~3KB per site and can overflow context. Use site_get(id) for full details of a specific site.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return | |
| compact | No | If true, return only essential fields (id, domain, aliases, ips, owner, enabled, status, https_redirect, http2, size, databases_size, created_at). If false, returns all 40 fields per site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context beyond annotations: explains compact default, response size (~3KB per site), and potential context overflow. No contradictions with annotations.
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?
Two sentences: first states purpose, second provides critical usage detail. Every sentence is informative and necessary.
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 simple parameters and comprehensive annotations, the description covers usage context, defaults, size concerns, and alternative tool. No 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?
Schema coverage is 100%, but description adds value by explaining the practical implications of compact mode and the size impact, which is not in the 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?
Clearly states it lists websites managed by FastPanel, specifies compact mode defaults, and distinguishes from site_get for full details. Action and resource are explicit.
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?
Provides guidance on when to use compact vs full mode, warns about context overflow, and suggests site_get for specific site details. Context of use is well defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_ssl_updateADestructiveIdempotent
Attach, replace, or detach an SSL certificate on an existing site, and toggle HTTPS flags. Maps to PUT /api/sites/{site_id}. Use for wildcard flow: create site in *.icstudio.space, then attach an existing wildcard cert. Pass certificate_id=null to detach. WRITE — confirm:true required.
| Name | Required | Description | Default |
|---|---|---|---|
| hsts | No | Enable HTTP Strict Transport Security | |
| http2 | No | Enable HTTP/2 | |
| http3 | No | Enable HTTP/3 / QUIC | |
| confirm | No | ||
| dry_run | No | ||
| site_id | Yes | Site id from sites_list | |
| certificate_id | Yes | Existing cert id from certificates_list, or null to detach current cert | |
| https_redirect | No | Force HTTP → HTTPS redirect | |
| manual_changes | No | Preserve manual nginx edits. Usually false when panel manages config. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive and non-readOnly. Description adds confirm requirement and API mapping, but doesn't detail side effects of detaching or toggling flags.
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?
Three concise sentences front-loaded with purpose, usage scenario, and critical instruction. No wasted words.
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?
Covers essential use case and detach mechanism, but lacks explanation of boolean flags, return value, or behavior of dry_run. With 9 parameters and no output schema, more detail would help.
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 coverage is 78% (high), so baseline is 3. Description adds minor clarification for certificate_id null but doesn't explain boolean flags beyond 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 actions (attach, replace, detach) and resource (SSL certificate on a site), distinguishing it from sibling tools like site_update and certificate_create_letsencrypt.
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?
Provides explicit usage context for wildcard flow and detachment (certificate_id=null), plus confirm requirement. However, lacks explicit contrast with alternative SSL tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_updateADestructiveIdempotent
Change a site's document root (index_dir) and/or directory index, via PUT /api/sites/{site_id}. This is the ONLY way to repoint a site's docroot — nginx renders root from site.index_dir, NOT from the backend, so site_backend_update can't do it. Common need: frameworks that serve from a subfolder (Laravel/Symfony → /public). Pass framework:'laravel' to auto-append '/public' to the current docroot without computing the path yourself. This tool does a read-modify-write: it fetches the current site via site_get and resends the writable fields (docroot, index page, current certificate id, https/http2/http3/hsts flags) so the partial PUT doesn't blank out SSL or flags. ⚠️ UNVERIFIED ENDPOINT: the index_dir write path was not confirmable from the API spec (FastPanel has no OpenAPI). Run with dry_run:true, then a real call on a throwaway site, and check site_get afterwards. If index_dir does NOT change, capture the DevTools request the panel UI fires when you edit the docroot and report it so this can be corrected. WRITE — confirm:true required.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| dry_run | No | ||
| site_id | Yes | Site id from sites_list | |
| framework | No | Preset: sets docroot to <current_index_dir>/public. Ignored if index_dir is given explicitly. | |
| index_dir | No | New absolute document root, e.g. /var/www/www-root/data/www/<domain>/public. Omit if using `framework`. | |
| index_page | No | Directory index, e.g. 'index.php index.html'. Omit to keep current. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false), destructive potential (destructiveHint=true), and idempotentHint=true. The description goes beyond by explaining the read-modify-write pattern, the unverified endpoint risk, the need for confirm:true, and the framework auto-append behavior. No contradiction with annotations.
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 relatively long but well-structured with main purpose first, then details, and warnings. Every sentence adds necessary information (purpose, differentiation, behavioral notes, parameter guidance). Could be slightly tighter, but still effective.
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?
The tool has 6 parameters, no output schema, and annotations with openWorldHint and destructiveHint. The description covers core behavior, risks, and parameter interplay. It does not describe the response on success, but for a write tool with confirm/dry_run, the guidance to check site_get afterwards compensates. Overall adequate.
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 descriptions cover 67% of parameters. The description adds meaning: explains framework as a preset that appends '/public', clarifies that index_dir and framework are mutually exclusive, and stresses that confirm is required for writes. This adds value beyond the 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 explicitly states it changes a site's document root (index_dir) and/or directory index. It distinguishes from sibling tool site_backend_update by explaining why that tool cannot achieve this. The verb 'Change' and resource 'site's document root' are clear.
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 gives concrete use cases such as frameworks serving from subfolders (Laravel/Symfony) and notes that this is the ONLY way to repoint docroot. It recommends dry_run for safety and warns about the unverified endpoint, but does not explicitly list when NOT to use it (e.g., alternative tools for other modifications).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
system_loadARead-onlyIdempotent
Get current server load metrics — CPU, memory, disk, uptime. Source: FastPanel's internal /api/loads/full endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, etc. The description adds the data source endpoint, which provides useful context beyond annotations. No contradictions.
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?
Two brief sentences: first states purpose, second adds source. Every word earns its place, no 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?
With zero parameters, rich annotations, and a clear list of returned metrics, the description fully covers the tool's purpose and behavior. No missing context for effective use.
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?
No parameters exist, so baseline is 4. The description does not need to add parameter meaning, but it lists the returned metrics (CPU, memory, disk, uptime), adding value.
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?
Clearly states the tool retrieves current server load metrics (CPU, memory, disk, uptime). The verb 'Get' and specific resource list distinguish it from other tools like sites_list or dns_domains_list.
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 explicit guidance on when to use this tool versus alternatives. While the purpose is clear, the description does not mention when-not-to-use or provide comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
user_createA
Create a new FastPanel system user (site owner). This is a WRITE operation — set dry_run:true to preview, confirm:true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| quota | No | Disk quota in KB, 0 = unlimited | |
| roles | No | ROLE_USER = owns own sites; ROLE_RESELLER = can manage sub-users | ROLE_USER |
| confirm | No | Must be true to execute. Safety guard. | |
| dry_run | No | If true, show the payload that would be sent without executing. | |
| password | Yes | User password (min 8 chars) | |
| username | Yes | Unix-safe username, e.g. 'mycompany' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses write nature and the preview/execute pattern via dry_run and confirm. Consistent with annotations (readOnlyHint false, destructiveHint false). No contradiction.
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?
Two sentences, no waste. Purpose is front-loaded, behavior and usage are concisely stated.
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?
Adequate for a create tool with no output schema. Covers key behavioral aspects. Could mention uniqueness constraints but not essential.
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 has 100% coverage; description adds clarifying usage for dry_run and confirm parameters, helping the agent understand the safety pattern.
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 'Create a new FastPanel system user', using a specific verb and resource. It distinguishes from sibling tools like users_list, and no other tool creates users.
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?
Provides clear context: it's a WRITE operation with dry_run for preview and confirm for execution. However, it does not explicitly state when to use vs alternatives, though no direct alternative exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
users_listARead-onlyIdempotent
List all FastPanel system users (site owners). Returns id, username, home_dir, roles, PHP version, quota, ssh_access, enabled flag.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive. Description adds context about return fields and that it lists system users, which is beyond annotations.
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?
Single sentence with immediate purpose and list of return fields. No wasted words, front-loaded.
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 zero-parameter list tool, description is complete: it states scope (all system users), mentions they are site owners, and lists all return fields. No output schema 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?
No parameters, so schema coverage is 100%. Description adds no param info but none is needed. Baseline 4 applies.
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?
Description clearly states it lists all FastPanel system users (site owners) and enumerates returned fields (id, username, home_dir, etc.), distinguishing it from sibling tools like dns_domains_list or sites_list.
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 explicit when-to-use or when-not-to-use guidance. The purpose is implied by the tool name and description, but lacks comparison to siblings like user_create.
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.
1 tool update
v1.2.0- Changed
site_configuration_update1 field changed- added
Input schema / properties / validateAdded value: +{ + "default": true, + "description": "When SSH is configured (FASTPANEL_SSH_HOST), run `nginx -t` right after applying and AUTO-REVERT to the previous config if it fails. Set false to skip the check (no effect if SSH is unconfigured — there is no validation either way then).", + "type": "boolean" +}
32 tool updates
v1.1.0- First observed
backup_plans_list - First observed
certificate_create_letsencrypt - First observed
certificates_list - First observed
database_create - First observed
database_dump - First observed
database_import - First observed
database_servers_list - First observed
databases_list - First observed
dns_domains_list - First observed
dns_records_list - First observed
me - First observed
nginx_validate - First observed
queue_active - First observed
queue_list - First observed
settings_get - First observed
site_backend_update - First observed
site_configuration_get - First observed
site_configuration_update - First observed
site_create - First observed
site_doctor - First observed
site_file_put - First observed
site_files_deploy - First observed
site_files_upload - First observed
site_get - First observed
site_logs - First observed
site_resources - First observed
site_ssl_update - First observed
site_update - First observed
sites_list - First observed
system_load - First observed
user_create - First observed
users_list
TDQS
Each tool has a clear, distinct purpose with detailed descriptions that prevent confusion. Even similar tools like site_files_upload, site_files_deploy, and site_file_put are well-differentiated by their source and mechanism.
Most tools follow a resource_action or action_resource pattern, but there is inconsistency in singular vs plural (site_get vs sites_list) and a few outliers like 'me'. Overall, names are readable and predictable.
With 32 tools, the surface is broad but each tool addresses a distinct operation within FastPanel's domain. While on the higher end, none seem redundant, and the count matches the complexity of managing a hosting panel.
The set covers creation, reading, and updating for major resources (sites, databases, users) but notably lacks delete operations for these resources, which is a significant gap for full lifecycle management.
Maintenance
Related MCP Connectors
- mcpOAuthnet.hepcloud
Manage HepCloud (Turkish cloud) servers and managed PostgreSQL from your AI assistant. OAuth 2.1.
Manage FadeHost game servers, Discord bots and VPS: console, stats, backups, logs, lifecycle.
Manage Laravel Forge servers, sites, and deployments from your AI assistant.
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI agents to manage server infrastructure through the 1Panel API, including Docker containers, databases, and system monitoring. It provides tools for website management, file operations, and application deployment via natural language commands.1521MIT

panelica-mcpofficial
AlicenseCqualityAmaintenanceEnables natural language interaction with a Panelica hosting panel to manage domains, SSL, databases, services, and more through any MCP client.4044441MIT- AlicenseNot gradedqualityDmaintenanceEnables management of CentOS Web Panel hosting accounts, SSL certificates, FTP users, MySQL databases, and packages through natural language commands via the Model Context Protocol.18MIT
- AlicenseNot gradedqualityBmaintenanceProvides 50 tools to manage a CloudPanel VPS through AI assistants, covering sites, databases, Docker, server software, firewall, DNS, and one-shot deployments.211MIT
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/iMateo/fastpanel-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server