Skip to main content
Glama
iMateo

fastpanel-mcp

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.

License: MIT Node MCP Version

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.com under user www-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 .env and .htaccess are served as static files (security gap), edits the frontend to add deny rules for dotfiles + sensitive extensions + framework files, previews the diff via dry_run, then deploys it. .env now returns 404; .well-known/acme-challenge still works.

You: "What sites are running on this server, who owns them, and which ones don't force HTTPS?"

LLM: Queries sites_list and reports the 5 sites without https_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: true required on every write. Accidental LLM outputs cannot mutate state.

  • dry_run: true previews 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 -t auto-validation with rollbacksite_configuration_update validates 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/domain probe → PUT /api/master), not a conventional POST /api/sites.

  • The backend field in site configuration is PHP-FPM pool config when handler=php_fpm, but an Apache VirtualHost block when handler=fcgi.

  • SSL attach/detach flows through PUT /api/sites/{id} (site-side) not POST /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 build

Get 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-31

The CLI binary is /usr/local/fastpanel2/fastpanel; recent FastPanel builds expose it on PATH as mogwai (/usr/local/bin/mogwai → the same binary). Older docs call it fastpanel, which is not on PATH — use mogwai, 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-31

Leave FASTPANEL_WRITE_TOKEN unset in configs where you don't need writes.

Configure

cp .env.example .env

Minimum viable .env:

FASTPANEL_URL=https://panel.example.com:8888
FASTPANEL_TOKEN=<your read token>
FASTPANEL_INSECURE_TLS=1   # only if panel uses self-signed cert

Use 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.js

Add -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 inspect

Drive JSON-RPC over stdio manually:

FASTPANEL_URL=… FASTPANEL_TOKEN=… node scripts/smoke.mjs

Tools

Read (no write token required)

Tool

Endpoint

Returns

sites_list

GET /api/sites/list

All websites, 13 essential fields by default (compact mode)

site_get

GET /api/sites/{id}

Full 40-field site object (cert, backend, backups, stats)

site_configuration_get

GET /api/sites/{id}/configuration

Raw nginx (frontend), handler backend (PHP-FPM or Apache), php.ini

databases_list

GET /api/databases

MySQL + PostgreSQL databases with owners and sizes

database_servers_list

GET /api/databases/servers

Available DB servers — use ids in database_create

users_list

GET /api/users

Panel users and site owners

dns_domains_list

GET /api/dns/domains

DNS zones (empty if panel DNS is off)

dns_records_list

GET /api/dns/domain/{id}/records

Records for one zone

certificates_list

GET /api/certificates

Stored SSL certificates (LE + custom)

system_load

GET /api/loads/full

CPU / memory / disk / load averages / top processes

queue_list

GET /api/queue/list

Background tasks including completed

queue_active

GET /api/queue

In-flight tasks only (filters finished) + meta.all_done for deterministic polling

site_logs

GET /api/sites/{id}/log/{lines}/{type}

Tail nginx/apache access or error log (frontend_/backend_) without SSH

site_resources

GET /api/sites/{id}/resources

Databases, sub-domains, DNS & email zones attached to a site

backup_plans_list

GET /api/v2/backup/plans

Configured backup plans

me

GET /api/me

Account behind the current read token (username, roles, ssh)

settings_get

GET /api/settings

Panel-wide settings (OS, license, limits, notifications)

Write (require FASTPANEL_WRITE_TOKEN + explicit confirm: true)

Tool

Endpoint

Purpose

user_create

POST /api/users

Create a new panel user (site owner)

database_create

POST /api/databases

Create MySQL or PostgreSQL database with a dedicated DB user

site_create

POST /api/master/domain + PUT /api/master

Create a site atomically, optionally with inline user / database / FTP

site_update

PUT /api/sites/{id}

Change document root (index_dir) / directory index — e.g. point a Laravel site at public/ (framework: "laravel" preset)

site_ssl_update

PUT /api/sites/{id}

Attach / replace / detach an SSL certificate, toggle HTTPS / HTTP2 / HTTP3 / HSTS

site_backend_update

PUT /api/sites/backend/{backend_id}

Change PHP version, handler, port, socket, env vars (pass site id — backend id resolved internally)

site_configuration_update

PUT /api/sites/{id}/configuration

Replace raw nginx/apache/php.ini for the site. Dangerous: bad syntax can break the site — when SSH is configured, runs nginx -t after applying and auto-reverts on failure (validate: false to skip)

certificate_create_letsencrypt

POST /api/certificates

Issue a new Let's Encrypt certificate (async — poll queue_active)

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

nginx_validate

nginx -t

Validate the live nginx config before/after site_configuration_update — catch syntax errors before they take nginx down

site_doctor

stat / systemctl / nginx -t

Diagnose why a site errors: missing docroot, a parent dir without o+x (the 750 → 404 trap), missing FPM socket, dead backend, broken nginx config

database_dump

mysqldump

Dump a database to a .sql file in the staging dir (local MySQL). Writes a root-owned file — needs confirm: true

database_import

mysql

Load a .sql file (from the staging dir) into a database. Destructive — needs confirm: true

site_files_upload

rsync (scp fallback)

Upload a local file/dir into a site's web root, then chown to the site user. delete: true mirrors (removes remote-only files)

site_files_deploy

git clone / curl + tar

Fetch files on the host (https git repo or tarball) into a site's web root, then chown to the site user

site_file_put

cat over ssh

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 SUCCESS

Harden 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_TOKEN isn't set, every write tool errors out before touching the network with FastPanelWriteDisabledError.

  • confirm: true is 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: true returns 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 -t auto-validation. With SSH configured, site_configuration_update runs nginx -t right after applying and auto-reverts to the previous config if it fails — a bad edit can't leave nginx unable to reload. Pass validate: false to opt out.

  • Tool annotations. Every tool ships MCP readOnlyHint / destructiveHint / idempotentHint / openWorldHint hints 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 expect filter[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) then PUT /api/master (actual create), not POST /api/sites. site_create hides this.

  • Async operations. Cert issuance, site backend updates, and several other ops return action: "CREATING" / "UPDATING" immediately and run in the background. Use queue_active to 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=1 or 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 outputSchema so clients can render typed results

  • Rate-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 Chyshkalachyshkala.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 tools
backup_plans_listA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesContact email for Let's Encrypt registration
confirmNo
dry_runNo
site_idYesSite id from sites_list (maps to 'virtualhost' in API)
key_lengthNoRSA key length
common_nameYesPrimary domain for the certificate (CN)
alternative_namesNoAdditional SAN domains. If empty, will be set to [common_name].
force_dns_validationNoUse DNS-01 challenge instead of HTTP-01 (required for wildcard certs)

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_listA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDatabase name (MySQL: a-z0-9_, max 64; Postgres: also allows more)
charsetNoCharset: 'utf8' or 'utf8mb4' for MySQL, 'en_US.UTF-8' for PostgreSQLutf8
confirmNo
dry_runNo
site_idNoLink DB to a site (optional). Null = standalone DB.
owner_idYesFastPanel user id (owner) from users_list
server_idYesDB server id from database_servers_list (1=MySQL, 2=PostgreSQL typically)
db_user_loginYesDB user login (the user that owns this DB)
db_user_passwordYesDB user password (min 8 chars)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
dry_runNo
database_idYesDatabase id from databases_list
output_pathNoAbsolute .sql path INSIDE the staging dir. Default: <staging>/<name>-<timestamp>.sql

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_importA
DestructiveIdempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
dry_runNo
database_idYesTarget database id from databases_list
source_pathYesAbsolute path to the .sql file, inside the staging dir

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_listA
Read-onlyIdempotent

List available database servers (MySQL, PostgreSQL). Use the returned ids as server_id in database_create and site_create.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_listA
Read-onlyIdempotent

List all MySQL and PostgreSQL databases. Returns id, name, charset, size, owner, linked site, server, last dump timestamp.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_listA
Read-onlyIdempotent

List all DNS zones managed by FastPanel's DNS service. Empty if DNS is not configured.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_listA
Read-onlyIdempotent

List all DNS records for a specific domain (zone) by its id. Use dns_domains_list first to get ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
domain_idYesDNS zone id from dns_domains_list

TDQS

A4.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

meA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_validateA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_activeA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
include_finishedNoIf true, return finished tasks too (with their SUCCESS/FAILED status) instead of only in-flight ones.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_listA
Read-onlyIdempotent

List active and recent FastPanel background tasks (backups, migrations, SSL issuance, screenshots, etc) including completed ones.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_getA
Read-onlyIdempotent

Read panel-wide settings — OS release, license type, upload limit, email notification config, statistics toggles, etc. Maps to GET /api/settings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_updateA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoBackend listen port (default: keep current)
typeNoBackend runtime type (default: keep current)
confirmNo
dry_runNo
handlerNoPHP handler (only meaningful for type=php; default: keep current)
site_idYesSite id from sites_list (backend id is resolved automatically)
app_fileNoEntry file (default: keep current)
work_dirNoWorking directory (default: keep current)
environmentNoEnv vars, e.g. ['KEY=val'] (default: keep current)
socket_pathNoUnix socket path for the backend (default: keep current)
manual_changesNoPreserve manual changes to backend config
handler_versionNoPHP version without dot (default: keep current)

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_getA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYesSite id from sites_list

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_updateA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
phpiniNoFull php.ini overrides for this site. Omit to keep current.
backendNoFull apache/httpd config for this site (VirtualHost block). Omit to keep current.
confirmNo
dry_runNo
site_idYesSite id from sites_list
frontendNoFull nginx config for this site (HTTPS server block + HTTP redirect block). Omit to keep current.
validateNoWhen 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

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipsYesServer IPs to bind to, e.g. ['100.42.181.157']. Get from sites_list → ips field.
domainYesPrimary domain, e.g. 'example.com' or 'sub.example.com'
aliasesNoAdditional domain aliases, e.g. ['www.example.com']
confirmNo
dry_runNo
handlerNoPHP handler: php_fpm is faster, fcgi simpler. Use site_get on existing sites to see what this project prefers.fcgi
databaseNoOptionally create a new database linked to this site. Omit to skip DB creation.
owner_idNoExisting FastPanel user id (from users_list). Use this OR new_owner, not both.
new_ownerNoCreate a new user inline. Use this OR owner_id, not both. EXPERIMENTAL — not yet tested against live API.
ftp_accountNoOptionally create an FTP account. Omit to skip.
php_versionYesPHP version without dot: 74=7.4, 80=8.0, 82=8.2, 83=8.3, 84=8.4

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_doctorA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYesSite id from sites_list

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_putA
DestructiveIdempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
contentYesFile contents (max 256KB). Use encoding:'base64' for binary.
dry_runNo
site_idYesSite id from sites_list
encodingNoHow `content` is encoded. base64 for binary files.utf8
rel_pathYesFile path relative to the web root, e.g. 'index.html' or 'assets/robots.txt'

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_deployA
DestructiveIdempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
refNogit branch/tag to check out (source_type=git only). Omit for the default branch.
sourceYeshttps:// git repo URL (source_type=git) or https:// .tar.gz archive URL (source_type=tarball)
confirmNo
dry_runNo
site_idYesSite id from sites_list
source_typeNogit = clone a repo; tarball = download and extract a .tar.gzgit
dest_subpathNoDestination relative to the site web root. Omit for the web root itself.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_uploadA
DestructiveIdempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
deleteNorsync --delete: make the remote an exact mirror of local_path, removing remote-only files. Destructive.
confirmNo
dry_runNo
site_idYesSite id from sites_list
local_pathYesPath on THIS machine to a file or directory. Trailing slash on a dir uploads its contents.
dest_subpathNoDestination relative to the site web root (e.g. 'public' or 'wp-content/uploads'). Omit for the web root itself.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_getA
Read-onlyIdempotent

Get full details for a single site by id. Returns all 40 fields including SSL certificate, backend config, permissions, backup plan, stats.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYesSite id from sites_list

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_logsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNofrontend_* = nginx, backend_* = PHP-FPM/Apache; *_error for diagnostics, *_access for trafficfrontend_error
linesNoNumber of trailing lines to return
site_idYesSite id from sites_list

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_resourcesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYesSite id from sites_list

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_listA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return
compactNoIf 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

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_updateA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
hstsNoEnable HTTP Strict Transport Security
http2NoEnable HTTP/2
http3NoEnable HTTP/3 / QUIC
confirmNo
dry_runNo
site_idYesSite id from sites_list
certificate_idYesExisting cert id from certificates_list, or null to detach current cert
https_redirectNoForce HTTP → HTTPS redirect
manual_changesNoPreserve manual nginx edits. Usually false when panel manages config.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_updateA
DestructiveIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
dry_runNo
site_idYesSite id from sites_list
frameworkNoPreset: sets docroot to <current_index_dir>/public. Ignored if index_dir is given explicitly.
index_dirNoNew absolute document root, e.g. /var/www/www-root/data/www/<domain>/public. Omit if using `framework`.
index_pageNoDirectory index, e.g. 'index.php index.html'. Omit to keep current.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_loadA
Read-onlyIdempotent

Get current server load metrics — CPU, memory, disk, uptime. Source: FastPanel's internal /api/loads/full endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
quotaNoDisk quota in KB, 0 = unlimited
rolesNoROLE_USER = owns own sites; ROLE_RESELLER = can manage sub-usersROLE_USER
confirmNoMust be true to execute. Safety guard.
dry_runNoIf true, show the payload that would be sent without executing.
passwordYesUser password (min 8 chars)
usernameYesUnix-safe username, e.g. 'mycompany'

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_listA
Read-onlyIdempotent

List all FastPanel system users (site owners). Returns id, username, home_dir, roles, PHP version, quota, ssh_access, enabled flag.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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. 1 tool updatev1.2.0
    • Changedsite_configuration_update1 field changed
      • addedInput schema / properties / validate
        Added 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"
        +}
  2. 32 tool updatesv1.1.0
    • First observedbackup_plans_list
    • First observedcertificate_create_letsencrypt
    • First observedcertificates_list
    • First observeddatabase_create
    • First observeddatabase_dump
    • First observeddatabase_import
    • First observeddatabase_servers_list
    • First observeddatabases_list
    • First observeddns_domains_list
    • First observeddns_records_list
    • First observedme
    • First observednginx_validate
    • First observedqueue_active
    • First observedqueue_list
    • First observedsettings_get
    • First observedsite_backend_update
    • First observedsite_configuration_get
    • First observedsite_configuration_update
    • First observedsite_create
    • First observedsite_doctor
    • First observedsite_file_put
    • First observedsite_files_deploy
    • First observedsite_files_upload
    • First observedsite_get
    • First observedsite_logs
    • First observedsite_resources
    • First observedsite_ssl_update
    • First observedsite_update
    • First observedsites_list
    • First observedsystem_load
    • First observeduser_create
    • First observedusers_list

TDQS

A4.1/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivitySlowing
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Enables 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.
    15
    21
    MIT
  • A
    license
    C
    quality
    A
    maintenance
    Enables natural language interaction with a Panelica hosting panel to manage domains, SSL, databases, services, and more through any MCP client.
    404
    444
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides 50 tools to manage a CloudPanel VPS through AI assistants, covering sites, databases, Docker, server software, firewall, DNS, and one-shot deployments.
    21
    1
    MIT

Latest Blog Posts

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