mcp-linux-tools
MCP Linux Tools is a secure MCP server providing AI assistants with a whitelisted API for controlled Linux system administration. Most operations are read-only; write operations are restricted to specific paths and services.
Server Metadata & Discovery – Identify server type, IP, and name; list whitelisted systemd services and allowed WordPress site paths.
File & Directory Operations – List directories, read files (up to 512KB), view head/tail of files (read-only); create directories, change permissions (
chmod), and change ownership (chown) — writes limited to/var/wwwand/opt/.Log Operations – Find WordPress debug log paths; tail/filter/search logs by keyword or AI Translate-specific entries.
System Services – Check status, reload, or restart whitelisted systemd services.
Python Sandbox – Execute Python code snippets in an isolated environment (no network, 8s timeout).
Cron Management – List, add, remove, enable/disable root cron jobs in an MCP-managed section; calculate next run times for a given schedule.
WordPress Operations – Run WP-CLI commands on allowed sites, flush object cache, list plugins and users.
Database Operations – Execute MySQL queries with dangerous statements (
DROP,TRUNCATE,DELETE,ALTER) blocked.Network Operations – Ping hosts to test network reachability.
Git Operations – Run safe Git commands in whitelisted repos;
push,force,delete, and hardresetare blocked.Shell Execution – Run arbitrary shell commands as root or a specified user (300s timeout, no shell expansion — use with caution).
Allows checking the status and reloading or restarting the Apache web server via systemd.
Allows checking the status and reloading or restarting the Docker service via systemd.
Provides safe Git commands for repository operations (no push/force).
Allows read-only MySQL database queries, blocking dangerous operations.
Allows checking the status and reloading or restarting the Odoo ERP service via systemd.
Allows checking the status and reloading or restarting the PHP-FPM service via systemd.
Allows checking the status and reloading or restarting the PostgreSQL database server via systemd.
Executes sandboxed Python code with no network access and an 8-second timeout.
Provides WP-CLI commands, cache flushing, plugin/user listing, and log tailing for WordPress sites.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-linux-toolscheck the status of nginx"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🛠️ MCP Linux Tools – Complete Tool Reference for LLMs
📖 Description
MCP Linux Tools is an MCP (Model Context Protocol) server that exposes a secure, whitelisted set of operations on a Linux server. It allows AI assistants (such as VS Code, Claude or Cursor) to perform controlled system administration tasks like reading logs, checking service status, managing cron jobs, running WP-CLI commands, and executing sandboxed Python code—all through a uniform API with strict security constraints.
The server runs as a systemd service and communicates over HTTP. All operations are restricted by configurable whitelists (directories, services, WordPress sites). Tools return a uniform response contract {success, data, error, meta}.
Related MCP server: ssh-mcp-server
✨ Features
🔍 Metadata & Discovery – Server info, service whitelist, WordPress allowed sites
📂 File Operations – Read files, list directories, head/tail logs (whitelisted paths only)
⚙️ System Services – Check status, reload or restart whitelisted services
🐍 Python Sandbox – Execute Python code (no network, 8s timeout)
⏰ Cron Management – List, add, remove, enable/disable cron jobs
🌐 WordPress – WP-CLI runner, cache flush, plugin/user listing, log tailing
🗄️ Database – Read-only MySQL queries (dangerous queries blocked)
📡 Network – Ping for connectivity testing
📌 Git – Safe Git commands (no push/force)
📦 Installation
Requirements
Python 3.13 or higher
Root access (for systemctl and crontab)
Linux system with systemd
Step 1: Clone Repository
# Clone the MCP server repository to /opt/mcp
sudo mkdir -p /opt
cd /opt
sudo git clone https://github.com/gerard-kanters/mcp-linux-tools.git mcp
cd /opt/mcpStep 2: Create Python Virtual Environment
# Create virtual environment
sudo python3.13 -m venv /opt/mcp/venv
# Install dependencies
sudo /opt/mcp/venv/bin/pip install --upgrade pip
sudo /opt/mcp/venv/bin/pip install -r requirements.txt --break-system-packagesStep 3: Configure
Edit config.json and adjust the settings for your server:
Set
server_type(development or production)Set
server_ipto your server's IP addressSet
server_nameto identify this serverConfigure directory whitelists, service whitelist, and other settings as needed
See the Configuration section below for detailed information about all configuration options.
Step 4: Create Sandbox Directory
sudo mkdir -p /opt/mcp/sandbox
sudo chown root:root /opt/mcp/sandbox
sudo chmod 755 /opt/mcp/sandboxStep 5: Install Systemd Service
Create a service file: /etc/systemd/system/mcp-linux-tools.service
[Unit]
Description=MCP Linux Tools Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/mcp
ExecStart=/opt/mcp/venv/bin/python /opt/mcp/server.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
# Security settings
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/log /opt/mcp/sandbox
[Install]
WantedBy=multi-user.targetEnable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable mcp-linux-tools.service
sudo systemctl start mcp-linux-tools.service
sudo systemctl status mcp-linux-tools.serviceStep 6: Cursor MCP Configuration
Add to your Cursor MCP configuration (usually ~/.cursor/mcp.json or in Cursor settings):
{
"mcpServers": {
"linux-tools": {
"command": "curl",
"args": [
"-X", "POST",
"http://192.168.1.22:8765/mcp",
"-H", "Content-Type: application/json",
"-d", "@-"
]
}
}
}Or use direct HTTP transport in Cursor MCP settings with:
URL:
http://192.168.1.22:8765/mcpTransport: HTTP
Verification
Check if the server is running:
# Check service status
sudo systemctl status mcp-linux-tools.service
# Check logs
sudo journalctl -u mcp-linux-tools.service -f
# Test HTTP endpoint
curl -X POST http://localhost:8765/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'Installing Updates
To update the MCP server:
cd /opt/mcp
sudo git pull origin main # or master, depending on your branch
sudo /opt/mcp/venv/bin/pip install -r requirements.txt --break-system-packages
sudo systemctl restart mcp-linux-tools.serviceImportant: After an update, check if config.json is still correct. New configuration options may have been added.
🏗️ Architecture
The server follows a modular MCP architecture:
server.py– Entrypoint: config loading, MCP setup, tool registration, run/retry/signal handlingconfig.py– Config loading and validation (fail-fast on missing fields)register_tools.py– Central tool registrationcore/– Core modules:errors.py– Error codes (DENIED_PATH, INVALID_INPUT, COMMAND_BLOCKED, etc.)models.py– Pydantic models for uniform response contractresponse.py– ok(), err(), err_denied_* helperssecurity.py– Allowlist and path validationprocess.py– Subprocess runner
tools/– Tool modules per domain:discovery.py,filesystem.py,logs.py,systemd.pypython_exec.py,wordpress.py,cron_tools.py,ops.py
All tools return a uniform response contract: {success, data, error, meta}.
⚙️ Configuration
All configuration is done via config.json in the root of the MCP server directory (/opt/mcp/config.json).
Configuration Sections
Server Identification
server_type: "development" or "production"server_ip: IP address of the serverserver_name: Name for the MCP server
Server Listen (optional)
server.host: Bind address (default: "0.0.0.0")server.port: HTTP port (default: 8765)
Logging
logging.log_file: Path to log file
Limits
limits.max_bytes: Maximum file size for reading (default: 524288 = 512KB)limits.max_items: Maximum items in directory listings (default: 500)
Python Sandbox
python.bin: Path to Python interpreter (must be in venv)directories.sandbox_cwd: Working directory for Python sandbox
Directory Whitelists
directories.allowed_read: Directories from which files can be readdirectories.allowed_log: Directories where log files can be readdirectories.allowed_write: Directories where write operations are allowed
Services
services.whitelist: List of service names that can be managed
WordPress
wordpress.allowed_sites: Absolute paths to WordPress rootswordpress.bin_candidates: Possible locations for WP-CLI binarywordpress.log_candidates: Possible locations for WordPress debug logs
Important: After changes to config.json, the service must be restarted:
sudo systemctl restart mcp-linux-tools.service🔒 SECURITY OVERVIEW
LINUX SERVER Tools with limited write operations:
✅ WHAT IS ALLOWED:
READ Files (in allowed directories)
VIEW Logs (system logs)
CHECK Service STATUS and RESTART (only whitelisted services)
EXECUTE Python CODE (sandboxed, no network, 8s timeout)
MANAGE Cron JOBS (only within MCP-managed section)
❌ WHAT IS NOT ALLOWED:
Access to arbitrary directories (strict whitelisting)
Services STOP/START/ENABLE (only restart allowed)
Sudo/root operations
Python with network access
Modifying system crontab outside MCP section
📂 ALLOWED DIRECTORIES
Directory whitelists are configured in config.json under directories.
Read Access (allowed_read):
Default: /var/log, /etc, /tmp, /opt/, /root/scripts, /var/www
Log Access (allowed_log):
Default: /var/log, /tmp, /var/www
Write Access (allowed_write):
Default: /var/www, /opt/
Note: All directory paths are configurable via config.json. Changes require a service restart.
🛠️ ALLOWED SERVICES (SERVICE_WHITELIST)
The service whitelist is configured in config.json under services.whitelist. Only services in this list can be checked or restarted.
Default whitelist (as configured in config.json):
apache2- Apache webserverphp8.4-fpm- PHP FastCGI Process Managerpostfix- Mail serveropendkim- DomainKeys email authenticationsshd- SSH daemondocker- Container runtimememcached- Memory cache daemonpostgresql- PostgreSQL database serverodoo- Odoo ERP system
Note: Service names may vary by distribution. Use get_service_whitelist() to query the active whitelist.
📚 TOOL CATEGORIES
1️⃣ METADATA & DISCOVERY (Read-Only)
get_server_info()- Server identification (type, IP, name)get_service_whitelist()- List of manageable servicesget_wp_allowed_sites()- List of allowed WordPress sites
2️⃣ FILE OPERATIONS
list_dir(path, pattern, include_files, include_dirs, max_items)- Directory listing (Read-Only)read_file(path, max_bytes)- Read file (max 512KB, Read-Only)head(path, n)- First N lines (Read-Only)tail(path, n)- Last N lines (for logs, Read-Only)log_search(keywords, path, n)- Search literal keywords in recent log lines (Read-Only)create_directory(path, owner, group, mode, parents)- Create directory ⚠️ (only /var/www and /opt/)chmod_file(path, mode)- Change file permissions ⚠️ (only /var/www and /opt/)chown_path(path, owner, group)- Change owner ⚠️ (only /var/www and /opt/)
3️⃣ SYSTEM SERVICES
service_status(name)- Check status (Read-Only)reload_service(name)- Reload service viasystemctl reload(preferred action, low impact)restart_service(name, force_restart)- Service modification: default is reload, useforce_restart=Truefor full restart ⚠️ (Live impact!)
4️⃣ PYTHON EXECUTION
python_run(code)- Sandboxed Python (no network, 8s timeout)
5️⃣ CRON MANAGEMENT
cron_list()- View crontab (Read-Only)cron_add(job_id, schedule, command)- Add job ⚠️ (Live impact!)cron_remove(job_id)- Remove job ⚠️ (Live impact!)cron_enable(job_id, enabled)- Enable/disable job ⚠️ (Live impact!)cron_next_runs(schedule, n)- Validate schedule (Read-Only)
6️⃣ WORDPRESS OPERATIONS
wp_cli(site_path, args, as_www_data)- WP-CLI runner for allowed siteswp_cache_flush(site_path, as_www_data)- WordPress cache flushwp_plugin_list(site_path, as_www_data)- List all plugins (JSON)wp_user_list(site_path, as_www_data)- List all users (JSON)log_pick_path()- Find WordPress debug log path
7️⃣ DATABASE OPERATIONS
mysql_query(query, database)- Execute MySQL query (Read-Only, dangerous queries blocked)
8️⃣ NETWORK OPERATIONS
ping_host(host, count)- Test network connectivity (Read-Only)
9️⃣ GIT OPERATIONS
git_command(path, command)- Execute Git commands (only safe commands, no push/force)
🔟 SYSTEM COMMANDS
execute_shell_command(command, user)- Execute shell command ⚠️ (Live impact!)
💡 USAGE EXAMPLES
Server Info:
{"tool": "get_server_info", "args": {}}Service Whitelist:
{"tool": "get_service_whitelist", "args": {}}Service Status:
{"tool": "service_status", "args": {
"name": "nginx"
}}Restart Service:
{"tool": "restart_service", "args": {
"name": "mysql"
}}View Log File:
{"tool": "tail", "args": {
"path": "/var/log/nginx/error.log",
"n": 100
}}Execute Python:
{"tool": "python_run", "args": {
"code": "import sys; print(sys.version)"
}}WordPress Cache Flush:
{"tool": "wp_cache_flush", "args": {
"site_path": "/var/www/netcare.nl"
}}WordPress Plugin List:
{"tool": "wp_plugin_list", "args": {
"site_path": "/var/www/netcare.nl"
}}MySQL Query:
{"tool": "mysql_query", "args": {
"query": "SHOW DATABASES;",
"database": ""
}}Network Ping:
{"tool": "ping_host", "args": {
"host": "8.8.8.8",
"count": 4
}}Git Status:
{"tool": "git_command", "args": {
"path": "/var/www/example",
"command": "status"
}}Add Cron Job:
{"tool": "cron_add", "args": {
"job_id": "backup_daily",
"schedule": "0 3 * * *",
"command": "/usr/bin/backup.sh"
}}⚠️ IMPORTANT NOTES FOR LLMs
Read-Only Default: Most tools are read-only. Write operations are limited to:
reload_service()/restart_service()- Service reload/restartcron_add/remove/enable()- Cron modificationscreate_directory()- Create directory (only /var/www and /opt/)chmod_file()- Change file permissions (only /var/www and /opt/)chown_path()- Change owner (only /var/www and /opt/)execute_shell_command()- Shell commands (use with caution!)
Whitelisting: Everything is whitelisted. Tools return "Denied" if you work outside the whitelist.
Service Names: Different distributions use different service names. For example:
DNS:
systemd-resolved,bind9, ornamedDHCP:
isc-dhcp-serverordhcpdMySQL:
mysql,mariadb, ormysqldSMB:
smbdorsamba
Security First:
No blind
rm -rfpossibleNo arbitrary file writes
Python is sandboxed
Cron commands must use absolute paths
Error Handling – Uniform response contract
{success, data, error, meta}:success=true: data contains result, error is nullsuccess=false: error contains{code, message, hint}, data is nullError codes: DENIED_PATH, DENIED_SERVICE, DENIED_SITE, INVALID_INPUT, COMMAND_BLOCKED, NOT_FOUND, TIMEOUT, etc.
meta: server_type, server_ip, server_name
Return Types:
Strings for simple output
Dicts for structured data (Python, MySQL, etc.)
Lists for directories and cron schedules
🎯 BEST PRACTICES
Server identification: Use
get_server_info()to verify which server you're working onCheck whitelists first: Call
get_service_whitelist()before managing servicesRead-only first: Check status/logs before restarting services
Validate cron schedules: Use
cron_next_runs()to validate schedulesService names: Check which service name is used on the system
Error handling: Always check for "Denied" or {"error": ...} in responses
Log locations: Use
list_dir()to explore log directories before reading logsConfig changes: Always restart the service after changes to
config.json
📊 TESTED & VERIFIED
All tools have been tested and work correctly: ✅ Service status and restart functionality ✅ Log file reading ✅ Python 3.13 execution (sandboxed) ✅ Cron schedule validation ✅ File operations (read-only) ✅ Directory listing
Last Updated: 2026-03-03
Server: Linux (generic)
Environment: Production/Development
Configuration: Via config.json (no hardcoded values)
Architecture: Modular (server.py entrypoint, core/, tools/)
Available Tools
29 toolschmod_fileA
Wijzig de Unix-permissiemodus van een bestaand toegestaan pad.
path moet bestaan en onder allowed_write_dirs vallen. mode moet
een octale tekenreeks van drie of vier cijfers zijn, bijvoorbeeld
755 of 0755. Deze tool muteert bestandssysteemmetadata via
chmod, maar wijzigt de bestandsinhoud niet.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly states that the tool mutates filesystem metadata via chmod but does not change file content. This is helpful, but it does not disclose required permissions or potential side effects like loss of access.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence gives the primary purpose, and the second provides usage constraints. Information is front-loaded and easily digestible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers all necessary aspects: input requirements (path, mode format, constraints), and behavioral impact (metadata change, no content change). An output schema exists but is not described, which is acceptable for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning parameters have no description. The description compensates excellently by explaining that path must exist and be under allowed directories, and that mode must be a three or four digit octal string with examples. This adds essential meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool changes Unix permission mode of an existing allowed path. It uses a specific verb (wijzig/modify) and resource (permissiemodus/file permissions), distinguishing it from sibling tools like chown_path which change owner.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear constraints: path must exist and be under allowed_write_dirs, mode must be octal string (e.g., 755). It does not, however, explicitly mention when not to use this tool or direct to alternatives like chown_path for ownership changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chown_pathA
Wijzig eigenaar en groep van een bestaand toegestaan pad.
path moet bestaan en onder allowed_write_dirs vallen. owner en
group moeten bestaande lokale namen zijn. Deze tool muteert
bestandssysteemmetadata via chown; onbekende gebruikers of groepen
en ontbrekende permissies leveren een fout op.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| group | Yes | ||
| owner | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the tool mutates filesystem metadata via chown and reports error conditions. It could be more detailed about side effects (e.g., symlink behavior) but overall it provides adequate transparency for a mutation operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise: two sentences plus a bullet-like note. Front-loaded with the main action. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has low complexity (3 params), and output schema exists (not shown). Description covers prerequisites and error conditions. It is complete enough for a simple mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no descriptions for parameters (0% coverage). The description adds meaning by specifying that path must exist and be under allowed_write_dirs, and owner and group must be existing local names, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool changes owner and group of a path, using specific verb 'wijzig' and resource 'eigenaar en groep van een bestaand toegestaan pad'. It distinguishes from sibling tools like chmod_file which deals with permissions, not ownership.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description specifies prerequisites: path must exist and be under allowed_write_dirs, owner and group must be existing local names. It also mentions error conditions for unknown users or missing permissions. However, it does not explicitly state when to avoid using this tool or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_directoryA
Maak een nieuwe directory en stel eigenaar, groep en Unix-modus in.
Deze tool wijzigt het bestandssysteem. path mag nog niet bestaan en
de bovenliggende directory moet onder allowed_write_dirs vallen.
owner en group zijn bestaande lokale namen (standaard root);
mode is een octale tekenreeks zoals 755 of 0755. Met
parents=True worden ontbrekende bovenliggende directories aangemaakt;
eigenaar, groep en de opgegeven modus worden alleen expliciet op de
doel-directory toegepast. De uitvoerende service moet daarvoor voldoende
permissies hebben. Succes retourneert "ok" via
{success, data, error, meta}; bestaande paden, onbekende accounts,
ongeldige modi, geweigerde paden en ontbrekende permissies leveren een
foutresponse op. Gebruik deze tool niet om een bestaande directory of
bestandsinhoud te wijzigen.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 755 | |
| path | Yes | ||
| group | No | root | |
| owner | No | root | |
| parents | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Fully discloses filesystem modification, parameter constraints (valid local names for owner/group, octal mode), permission requirements, and both success and error response formats. With no annotations, the description carries the full burden and meets it excellently.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a clear one-liner followed by explanatory paragraphs. Some redundancy around permission mention, but overall efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all aspects: purpose, parameter details, prerequisites, restrictions, error cases, and return format. The output schema exists, so return value explanation is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters are explained in context beyond the schema, which has 0% coverage. The description clarifies defaults, allowed values, constraints (e.g., path must not exist), and behavior of parents. Adds significant value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new directory with owner, group, and mode settings. It explicitly contrasts with modifying existing directories, distinguishing it from sibling tools like chmod_file or chown_path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear conditions for use (path must not exist, parent under allowed_write_dirs) and warns against using it for modifications. However, it does not explicitly point to alternative tools for other tasks, though the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cron_addA
Voeg een root-cronjob toe of vervang die binnen de MCP-beheerde sectie.
job_id identificeert de job en accepteert alleen letters, cijfers,
punt, underscore en koppelteken. schedule moet exact vijf cronvelden
bevatten. Het eerste woord van command moet een absoluut pad zijn.
Deze tool herschrijft de root-crontab, maar behoudt regels buiten
# --- BEGIN/END MCP MANAGED ---; een bestaand job_id wordt vervangen.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| command | Yes | ||
| schedule | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool rewrites the root crontab, preserves lines outside the MCP-managed section, and replaces an existing job_id. This is good but could mention if there are side effects like overwriting other managed jobs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is clear and front-loaded with the purpose. It is concise but covers necessary constraints. Slightly verbose but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately covers input constraints and behavioral traits. It is fairly complete for a tool that adds cron jobs, though it could mention the response or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains that job_id accepts only letters, digits, dots, underscores, and hyphens; schedule must have exactly five cron fields; and command's first word must be an absolute path. This adds significant meaning beyond the schema's type 'string'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it adds or replaces a root cronjob within the MCP-managed section, using a specific verb ('add or replace') and resource ('root cronjob'). It distinguishes from siblings like cron_remove (removes) and cron_list (lists).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides constraints on job_id format, schedule format, and command path, which imply proper usage. However, it does not explicitly state when to use this tool versus alternatives (e.g., cron_remove) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cron_enableA
Schakel een MCP-beheerde root-cronjob in of uit.
job_id selecteert een bestaande job in de MCP-sectie. Met
enabled=True wordt een uitgeschakelde cronregel actief; met False
wordt de regel met # gecommentarieerd. De tool herschrijft de
root-crontab, behoudt regels buiten de MCP-sectie en doet inhoudelijk
niets wanneer het opgegeven ID niet bestaat.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| enabled | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool rewrites the root crontab, preserves lines outside the MCP section, comments out the line when disabled, and does nothing for nonexistent IDs. This provides good behavioral context beyond the basic mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise, covering purpose, parameters, side effects, and edge case in a single paragraph. It could be slightly more front-loaded, but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and 2 required parameters, the description is thorough. It explains the tool's impact (rewriting crontab), safety (does nothing for missing ID), and behavior (preserving non-MCP lines). An output schema is present but not needed for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It fully explains job_id selects an existing job and enabled toggles activation, including the mechanism (commenting with '# '). This adds substantial meaning beyond the schema's type-only definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool enables or disables an MCP-managed root cronjob. It specifies the verb and resource, but does not explicitly differentiate from siblings like cron_add or cron_remove, though the purpose is distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the parameters (job_id selects existing job, enabled=True/False). It notes that the tool does nothing if the ID doesn't exist, providing some guidance. However, it does not explicitly state when to use this tool over alternatives or provide when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cron_listA
Lees de volledige crontab van de lokale rootgebruiker.
De tool heeft geen parameters en wijzigt de crontab niet. Zowel handmatig beheerde regels als de sectie tussen de MCP-markeringen worden als onbewerkte tekst teruggegeven; een ontbrekende crontab resulteert in een lege tekenreeks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fully discloses behavior: it does not modify, returns both manual and MCP sections as raw text, and handles missing crontab by returning empty string. This is transparent for a read-only tool, though permission requirements are not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and every sentence adds critical detail (no parameters, no modification, output format). No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema (as indicated by context), the description provides complete context: it explains the full output (both sections, empty for missing crontab) and confirms read-only nature. No gaps for effective usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and the description explicitly states this. Since schema coverage is 100% (trivially), the description adds value by confirming absence of parameters and explaining the tool's input independence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read the full crontab' (verb 'Lees' is read), specifying the resource (crontab of local root user). It distinguishes from sibling modification tools like cron_add and cron_remove by implying read-only action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates no parameters and no modification, which guides when to use (reading crontab). However, it does not explicitly mention alternatives for specific tasks like checking next runs (cron_next_runs) or enabling cron (cron_enable), so the guidance could be more explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cron_next_runsA
Bereken toekomstige lokale uitvoertijden voor een cronschema.
schedule moet exact vijf geldige cronvelden bevatten. n bepaalt
het aantal resultaten en wordt begrensd tot 1–20. De berekening start
op het huidige servertijdstip, gebruikt de lokale tijdzone en wijzigt
geen crontab. De tool vereist dat de dependency croniter beschikbaar is.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| schedule | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses important behaviors: uses server time, local timezone, does not modify crontab, requires dependency 'croniter', and bounds parameter `n` to 1-20. It does not cover error handling for invalid schedules, but the key behavioral traits are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a short, focused paragraph with each sentence adding value. It front-loads the purpose, then concisely explains constraints and behaviors. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (context signal), the description does not need to explain return values. It adequately covers input semantics, behavioral constraints, and dependencies. The tool's purpose is fully captured for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that `schedule` must contain exactly five valid cron fields and `n` determines the number of results (bounded 1-20). This adds significant meaning beyond the schema's type and default, though the exact cron format is not fully detailed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Bereken' = calculate) and identifies the resource (future execution times for a cron schedule). It clearly distinguishes this tool from siblings like 'cron_list' (which lists existing cron jobs) and 'cron_add' (which adds jobs) by emphasizing that it does not modify anything.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool calculates future execution times and explicitly notes it does not modify the crontab, implying it is a read-only analysis tool. While it does not directly say when not to use it or explicitly name alternatives, the context of sibling tools and the nature of the computation provide sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cron_removeA
Verwijder één job uit de MCP-beheerde sectie van de root-crontab.
job_id is de identifier die eerder door cron_add is opgeslagen.
De tool herschrijft de root-crontab en verwijdert de bijbehorende
MCP-marker en cronregel; regels buiten de MCP-sectie blijven behouden.
Een onbekend job_id veroorzaakt geen verwijdering.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the tool rewrites root-crontab, removes MCP marker and cron rule, leaves other rules intact, and does nothing for unknown job_id. This covers key behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, sentences each carrying essential information. Front-loaded with main purpose. No redundant or unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and presence of an output schema, the description covers all needed aspects: purpose, usage, parameter explanation, and behavioral details. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds crucial meaning: job_id is the identifier saved by cron_add. This goes beyond the schema's bare type definition. Provides origin and safety note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (verwijder/remove), resource (één job uit MCP-beheerde sectie), and distinguishes from sibling tools like cron_add and cron_list. The verb and resource are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description mentions that job_id comes from cron_add, and that unknown ID causes no removal. This provides context for proper use, though no explicit when-not or alternative tools are given. The context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_shell_commandA
Voer een lokaal programma uit als root of als de opgegeven gebruiker.
command wordt in argumenten opgesplitst en direct gestart, dus pipes,
redirects en andere shellsyntaxis worden niet geïnterpreteerd. Met
user wordt het programma via sudo -u uitgevoerd; zonder waarde is
de uitvoerende gebruiker root. Het commando kan het systeem wijzigen.
Voor curl/wget is de werkdirectory /tmp; de timeout is 300 seconden.
Stdout, stderr, exitcode en de effectieve gebruiker worden geretourneerd.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | ||
| command | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: command splitting (no pipes/redirects), sudo -u execution, system modification capability, timeout of 300 seconds, and return values (stdout, stderr, exitcode, user). However, it lacks details on security restrictions or behavior on command failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise, using a few short sentences and bullet-like dashes. Every sentence adds value: purpose, execution details, user handling, safety warning, and return values. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers inputs, execution behavior, and return values (especially since an output schema exists). It alludes to safety and timeout. However, it does not mention prerequisites, failure modes, or interaction with sibling tools, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains that 'command' is a program string split into arguments (no shell syntax), and 'user' defaults to null (root) and runs via sudo -u. This adds significant meaning beyond the schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes a local program as root or a specified user. It uses a specific verb ('uitvoeren') and resource ('lokaal programma'), and distinguishes from sibling tools like python_run, wp_cli, and git_command which target specific runtimes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies appropriate use (simple commands without shell syntax) but does not explicitly state when to use this tool versus alternatives like python_run or git_command. No direct comparison or conditions for non-use are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_infoA
Geef informatie over deze MCP server instance.
Geeft server type, IP adres en naam terug om duidelijk te identificeren welke server dit is.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the returned data (server type, IP, name) and implies a read operation. Does not mention side effects or failure modes, but for a simple info tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences in Dutch, front-loaded with the action. Every sentence provides value with no fluff. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential information about what the tool returns. An output schema exists (though not provided), so return values are documented structurally. The tool is simple and the description is complete for its purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline 4. The description adds no parameter info, but none is needed as the input schema is empty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns server type, IP address, and name to identify the MCP server instance, with a specific verb 'Geef informatie' and resource 'deze MCP server instance'. It uniquely distinguishes from siblings which handle other tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: use to identify the server. No explicit when-not or alternatives are needed given the tool's uniqueness among siblings. The description is clear enough for an agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_whitelistA
Lijst van services die deze server mag beheren (status/restart).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It only states 'list of services that this server may manage (status/restart)', but does not disclose if the operation is read-only, what the return format is, or any potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the key action, no unnecessary words. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema shown and no annotations, the description is minimally adequate. It covers the basic purpose but lacks details on return values or usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters (schema coverage 100% with empty object). The description adds no parameter info, but baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool lists services the server can manage (status/restart). It uses a specific verb 'list' and resource 'services', distinguishing it from sibling tools like restart_service or service_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description implies usage for viewing manageable services, it lacks explicit guidance on when to use this tool versus alternatives (e.g., service_status for individual service status) and no when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wp_allowed_sitesA
Lijst van WordPress roots waarvoor WP-CLI is toegestaan.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool lists allowed sites (read-only), but does not elaborate on behavior such as whether the list is cached, dynamic, or requires specific permissions. The description is acceptable but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary information. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, an output schema is provided, and the description is simple, the description is adequately complete. It conveys the core purpose without missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so the baseline is 4. The description does not need to add parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and identifies the resource 'WordPress roots' with a clear scope 'for which WP-CLI is allowed.' It clearly distinguishes from sibling tools like wp_plugin_list or wp_user_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but provides no explicit guidance on when to use it versus alternatives, such as wp_cli or wp_plugin_list. Usage is implied by the tool's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
git_commandA
Voer één Git-subcommando uit in een toegestane lokale repository.
path moet onder allowed_write_dirs vallen en een .git-directory
bevatten. command bevat alles na git -C <path> en wordt met
shell-achtige argumentquoting opgesplitst, zonder shelluitbreiding.
Push, force, delete, branch -d en reset --hard worden geblokkeerd;
andere muterende Git-commando's kunnen de repository wel wijzigen.
De timeout is 30 seconden en stdout, stderr en exitcode worden geretourneerd.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| command | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses blocked commands, mutation potential, timeout, and return values. It lacks detail on whether the tool changes working directory or has side effects beyond the repo, but overall provides strong behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (5 sentences) and front-loaded with purpose. Every sentence adds value (path constraint, command parsing, blocked commands, timeout, return). No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 params, no annotations, and the presence of an output schema, the description sufficiently covers constraints, blocked operations, and return values. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates by explaining path constraints (allowed_write_dirs, .git) and command structure (after git -C <path>, shell-like quoting, no expansion). It adds meaning beyond the schema, though an example would improve clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it executes a Git subcommand in an allowed local repository, distinguishing it from siblings like execute_shell_command. The verb 'uitvoeren' (execute) and resource 'Git-subcommando' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to use (Git operations in allowed repos) and provides explicit constraints: path must be under allowed_write_dirs and contain .git, blocked commands are listed, and quoting behavior is described. It could be improved by explicitly contrasting with execute_shell_command for non-Git tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
headA
Eerste n regels van een bestand (onder ALLOWED_READ_DIRS).
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full weight. It discloses the directory restriction but lacks details on edge cases (e.g., n larger than file length), error handling, or performance. Basic behavior is covered, but not comprehensively.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the core action. Very concise, but the Dutch language may reduce readability for non-Dutch agents. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with only two parameters and an existing output schema, the description covers the primary function and a key constraint. It does not detail return format or errors, but those are likely covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no descriptions (0% coverage). The description explains what 'n' represents (number of lines) and implies 'path' is the file. This adds basic meaning but could be more explicit, especially for 'path'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the first n lines of a file under allowed directories. It includes a key constraint (ALLOWED_READ_DIRS) and distinguishes itself from siblings like 'tail' or 'read_file' by specifying the head behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (to view the beginning of a file) and mentions a restriction (only under ALLOWED_READ_DIRS). It does not explicitly mention when not to use it or alternatives, but the context is clear for a simple file utility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dirA
Bekijk gefilterde directory-inhoud zonder het bestandssysteem te wijzigen.
path moet een bestaande directory onder allowed_read_dirs zijn.
pattern gebruikt pathlib-globsyntaxis (* standaard; gebruik
bijvoorbeeld **/* voor recursieve resultaten). Standaard worden alleen
bestanden opgenomen; zet include_dirs=True voor directories en
include_files=False om bestanden uit te sluiten. max_items gebruikt
standaard de geconfigureerde limiet en wordt begrensd tot 1–max_items
uit de serverconfiguratie. De tool retourneert per item naam, absoluut
pad, type, wijzigingstijd en voor bestanden de grootte; ontoegankelijke
items bevatten een eigen foutmelding. Resultaten gebruiken de standaard
{success, data, error, meta}-response. Gebruik read_file, head of
tail om vervolgens bestandsinhoud te lezen.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| pattern | No | * | |
| max_items | No | ||
| include_dirs | No | ||
| include_files | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description fully covers safety (no modifications), behavior (error handling for inaccessible items), return data per item (name, path, type, modification time, size), and response format. This is thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections, but slightly verbose (e.g., 'Resultaten gebruiken de standaard...'). Still, every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and description explains return fields and response structure, the tool is fully documented. All key behaviors and constraints are covered for an agent to correctly select and invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description adds meaning for all 5 parameters: path constraints, pattern glob syntax, include_dirs/include_files toggles, max_items bounds. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States explicitly 'Bekijk gefilterde directory-inhoud zonder het bestandssysteem te wijzigen' (view filtered directory contents without modifying filesystem). Differentiates from siblings like read_file, head, tail which read file contents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies prerequisites: path must be an existing directory under allowed_read_dirs. Provides pattern syntax guidance. Implicitly suggests use of read_file, head, tail for subsequent content reading, but lacks explicit when-not-to-use statements for other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_pick_pathA
Kies het eerste bestaande WordPress-debuglog uit de configuratie.
De kandidaten worden in de volgorde van wp_log_candidates getest.
De tool wijzigt niets en retourneert alleen het gevonden pad. Als
geen kandidaat een bestaand bestand is, volgt een NOT_FOUND-fout.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explicitly states the tool is non-destructive and only returns a path, plus describes error handling. This adds behavioral context beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct at two sentences, with the main action upfront. It could be slightly tighter, but the structure is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema (not provided), the description explains the core behavior, selection order, and error condition. It is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is 100%. The description does not need to add parameter details, and it correctly omits them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: selecting the first existing WordPress debug log path from a configuration list. It differentiates from sibling tools like log_tail by focusing on path discovery rather than reading the log.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the testing order from `wp_log_candidates` and return behavior, but does not explicitly contrast with alternatives. The implied usage is to obtain a path before using other log tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_searchA
Zoek letterlijke trefwoorden in de laatste regels van een logbestand.
keywords moet minimaal één niet-lege tekenreeks bevatten; een regel
wordt opgenomen als één van de trefwoorden erin voorkomt. De vergelijking
is hoofdlettergevoelig. Met path wordt een specifiek bestaand bestand
onder allowed_log_dirs gekozen. Zonder path gebruikt de tool het
eerste bestaande bestand uit wp_log_candidates; als dat ontbreekt volgt
een NOT_FOUND-fout. n bepaalt hoeveel laatste regels vóór filtering
worden gelezen. De tool is alleen-lezen en retourneert het gebruikte pad
en uitsluitend de overeenkomende regels via
{success, data, error, meta}. Gebruik tail wanneer geen filtering
nodig is.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| path | No | ||
| keywords | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral details: it is read-only, case-sensitive, returns a specific output format {success, data, error, meta}, and handles missing files with a NOT_FOUND error. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, front-loading the main purpose and then detailing parameters and behavior in a logical order. Every sentence adds value without repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the parameter count, lack of annotations, and presence of an output schema, the description covers all necessary aspects: input requirements, default behavior, error states, output format, and comparison to sibling tools. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description explains all parameters: 'n' (number of lines to read before filtering), 'path' (specific file under allowed_log_dirs or default fallback), and 'keywords' (non-empty strings, case-sensitive matching). This adds critical meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: searching literal keywords in the last lines of a log file. It explicitly distinguishes from the sibling 'tail' tool, saying to use tail when no filtering is needed, which helps avoid ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives, such as when filtering is needed, and gives specific instructions for each parameter, including the requirement that keywords must be non-empty and case-sensitive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysql_queryA
Voer SQL uit met de lokale MySQL-client als databasegebruiker root.
query is de volledige SQL-tekst en mag niet leeg zijn. database
kiest optioneel een database; een lege waarde gebruikt de standaard
MySQL-context. Queries met de tekst DROP, TRUNCATE, DELETE of
ALTER worden geblokkeerd. Andere SQL, inclusief mogelijk muterende
statements, wordt niet door deze tool geblokkeerd. De timeout is
30 seconden en stdout van de client wordt teruggegeven.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| database | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses running as root, blocking destructive keywords, allowing other mutating statements, a 30-second timeout, and returning stdout. It could mention error handling or output format, but overall it is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (5 sentences), well-structured, and front-loaded with the main purpose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description adequately covers return (stdout). It also addresses security, timeout, and parameter constraints. It could mention multi-statement support or error messages, but it is sufficiently complete for a straightforward tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description fully compensates. It explains that 'query' is the full SQL text and must not be empty, and 'database' optionally selects a database with a default context. This adds meaning beyond the schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes SQL using the local MySQL client as root. It specifies the verb 'execute' and resource 'SQL', and provides details about the query and database parameters, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (for running SQL) and lists blocked keywords (DROP, TRUNCATE, DELETE, ALTER), giving clear constraints. No alternative tools are explicitly mentioned, but sibling tools are not similar, so no direct comparison is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ping_hostA
Test netwerkbereikbaarheid van een host met ICMP-ping.
host accepteert alleen letters, cijfers, punten en koppeltekens;
shell-expressies zijn daardoor niet toegestaan. count wordt begrensd
tot 1–10 pakketten. De tool wijzigt het systeem niet, heeft een totale
timeout van 60 seconden en retourneert uitvoer, exitcode en successtatus.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| count | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: non-modifying, 60s timeout, and return of output/exitcode/success. This adds significant transparency beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, no unnecessary words. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple ping tool with an output schema (indicated), the description covers key aspects: purpose, input constraints, safety, timeout, and return values. Minor omission: does not specify whether host is IP or hostname, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% parameter descriptions, so the description compensates by specifying host format restrictions (letters, digits, dots, hyphens) and count limit (1-10). This adds meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool tests network reachability via ICMP-ping, which is a specific verb+resource. No sibling tool has similar purpose, so it is well-distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides constraints on input (host format, count range) but does not explicitly state when to use this tool vs. alternatives or when not to use it. Usage context is implied but not defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
python_runA
Voer een kort Python-fragment uit in de geconfigureerde sandboxdirectory.
code is verplichte Python-broncode en wordt met de geconfigureerde
interpreter als python -S -c uitgevoerd. De subprocess krijgt alleen
een minimale PATH en PYTHONUNBUFFERED, gebruikt sandbox_cwd als
werkdirectory en wordt na 8 seconden beëindigd. De code kan binnen de
rechten en isolatie van het MCP-serviceproces side effects veroorzaken.
Stdout, stderr, exitcode en successtatus worden geretourneerd.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full weight. It details execution environment (minimal PATH, PYTHONUNBUFFERED, sandbox_cwd), timeout (8 seconds), side-effect potential within MCP service process rights, and explicit return fields (stdout, stderr, exitcode, success). This exceeds typical transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with purpose, and each sentence adds essential information (command, environment, timeout, side effects, output). No redundant or missing details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single required parameter and an assumed output schema, the description provides complete context: input specification, execution behavior, environment constraints, timeout, and output summary. It is self-contained and actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates by stating that `code` is mandatory Python source code executed via `-c`, adding meaning beyond the schema's plain string type. It could further clarify that the code must be a valid Python expression or statement, but the current explanation is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it executes a short Python fragment in a configured sandbox directory using a specific interpreter invocation (`python -S -c`). This verb+resource combination distinguishes it from siblings like `execute_shell_command`, which runs arbitrary shell commands.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for Python code execution but does not explicitly state when to use this tool versus alternatives (e.g., `execute_shell_command`). No exclusion criteria or contextual hints are provided beyond the fact that it runs Python.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileA
Lees een tekstbestand onder allowed_read_dirs zonder het te wijzigen.
path moet een bestaand regulier bestand zijn. max_bytes bepaalt
hoeveel bytes maximaal worden gelezen; zonder waarde geldt de
geconfigureerde max_bytes, en iedere opgegeven waarde wordt begrensd
tot 1–die configuratielimiet. Bytes worden als UTF-8 gedecodeerd waarbij
ongeldige tekens worden vervangen. Als meer gegevens beschikbaar zijn,
eindigt de tekst met [...truncated...]. De
{success, data, error, meta}-response bevat de tekst of een fout voor
een geweigerd pad, ontbrekend bestand of ontbrekende leespermissie.
Gebruik head of tail wanneer alleen regels aan het begin of einde
nodig zijn.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| max_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description thoroughly discloses behavior: no modification, file must exist and be regular, max_bytes clamping, UTF-8 decoding with replacement, truncation indicator, and error responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but is well-structured: opening purpose, then constraints, behavior, response format, and finally alternative tools. It is concise yet comprehensive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and the presence of an output schema, the description covers all necessary context: purpose, file requirements, parameter details, truncation behavior, error handling, and sibling tool distinctions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 0%, the description explains both parameters: path must be an existing regular file, max_bytes has a default and is clamped between 1 and a configured limit. This adds meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a text file under allowed directories without modifying it. It distinguishes itself from siblings by indicating when to use head or tail instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Use `head` or `tail` when only lines at the beginning or end are needed.' This tells the agent when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reload_serviceA
Herlaad een service via systemctl reload (voorkeursactie).
Gebruik bij voorkeur reload in plaats van restart om impact te beperken.
Alleen als reload niet wordt ondersteund of expliciet nodig is, gebruik restart_service.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions using systemctl reload, implying it is safe and non-destructive, but does not elaborate on other behavioral aspects such as connection handling or logs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the primary action and usage guidance. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need not be described. The tool is simple with one parameter; the description covers purpose and usage well. However, a bit more detail on what the reload does (e.g., reloads configuration) would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'name' is a string for the service name. The description does not add any additional meaning beyond the schema, but the schema is minimal and obvious. Schema description coverage is 0%, but the parameter is straightforward.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Herlaad een service via systemctl reload' which is a specific verb and resource. It also distinguishes from the sibling 'restart_service' by noting it is the preferred action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states to prefer reload over restart to minimize impact, and specifies the condition for using restart_service when reload is not supported or explicitly needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_serviceA
Herlaad standaard een toegestane systemd-service of herstart die expliciet.
name moet exact in service_whitelist staan; raadpleeg
get_service_whitelist voor geldige namen. De MCP-service zelf is
geblokkeerd om te voorkomen dat de verbinding wordt verbroken. Met
force_restart=False (standaard) voert de tool systemctl reload uit;
alleen force_restart=True voert systemctl restart uit, wat de service
tijdelijk kan onderbreken en actieve processen kan beëindigen. De
uitvoerende service heeft systemd-permissies nodig en de actie heeft een
timeout van 30 seconden. De {success, data, error, meta}-response bevat
na succes de actie en actuele status, of een fout bij een geweigerde
service, systemd-fout of timeout. Gebruik reload_service wanneer
uitsluitend een reload gewenst is en service_status wanneer geen
wijziging nodig is.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| force_restart | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes default reload behavior, implications of force_restart (service interruption, process termination), permissions, timeout, blocked MCP service, and error conditions. No annotations provided, so description fully covers behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph covering all aspects, but slightly dense. Could benefit from slight structuring, but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, behavior, prerequisites, alternatives, response format, and error conditions. No missing elements given the tool's complexity and absence of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; description explains name must be in whitelist and force_restart controls reload vs restart, adding critical meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reloads or restarts a systemd service, with specific verbs and resource. It distinguishes from sibling tools reload_service and service_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (reload vs restart via force_restart), when not to use (prefer reload_service or service_status), and prerequisite (name must be in whitelist, consult get_service_whitelist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
service_statusA
Lees de actieve systemd-status van één toegestane service.
name moet exact in service_whitelist staan. De tool voert alleen
systemctl is-active uit, wijzigt de service niet en heeft een timeout
van 10 seconden. Zowel een actieve status als een niet-actieve
systemd-melding wordt als tekst in de standaardresponse teruggegeven.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses that the tool only runs 'systemctl is-active', does not modify the service, has a 10-second timeout, and returns both active and inactive messages as text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action, and every sentence adds necessary information without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status check tool with an output schema implied, the description covers purpose, precondition, behavior, timeout, and return format. It is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter ('name') with 0% coverage. The description adds crucial context: the name must exactly be in 'service_whitelist', which is not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads the active systemd status of an allowed service using 'systemctl is-active', distinguishing it from sibling tools like 'reload_service' or 'restart_service' which modify services.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that 'name' must exactly be in 'service_whitelist', giving clear context for when to use. It does not explicitly list when not to use or alternatives, but the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailA
Lees de laatste n regels van één specifiek logbestand.
path moet een bestaand bestand onder een geconfigureerde
allowed_log_dirs-directory zijn. n bepaalt hoeveel regels aan
tail -n worden doorgegeven. De tool is alleen-lezen, heeft een
timeout van 10 seconden en retourneert de tekst via de standaard
{success, data, error, meta}-response.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | ||
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It declares read-only, 10s timeout, and standard response format. However, it omits details like error handling for non-existent files or behavior with large files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, no fluff. Every sentence adds value: purpose, constraints, and behavioral notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not detail return values. It covers purpose, constraints, read-only nature, and timeout. Missing mention of what happens if file doesn't exist or n is invalid, but these are minor for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description compensates well: explains that 'path' must be an existing file under allowed_dirs, and 'n' is the number of lines passed to 'tail -n'. This adds meaningful context beyond the schema's type and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads the last n lines of a specific log file. While it distinguishes from siblings like 'head' and 'read_file' by specifying 'logbestand', it does not explicitly differentiate from similar 'log_tail' siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'log_tail' or 'head'. Only constraints on path and n are given, but no selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wp_cache_flushA
Wis de WordPress-objectcache van één toegestane site via WP-CLI.
site_path moet in wp_allowed_sites staan en een wp-config.php
bevatten. Deze muterende tool voert wp cache flush uit, standaard
als www-data; met as_www_data=False als root met --allow-root.
De timeout is 60 seconden en stdout, stderr en exitcode worden geretourneerd.
| Name | Required | Description | Default |
|---|---|---|---|
| site_path | Yes | ||
| as_www_data | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses mutating behavior, execution as www-data or root, timeout, and return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise single paragraph, front-loaded with main action, logically ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, prerequisites, parameters, execution details, and return values; output schema exists for return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no parameter descriptions (0% coverage); description adds meaning for site_path (prerequisite) and as_www_data (role switching).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Wis' (clears) and resource 'WordPress-objectcache van één toegestane site', specific and distinct from siblings like wp_cli.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Prerequisites are given (site_path in allowed_sites and contains wp-config.php), but no explicit guidance on when to use this vs alternatives like wp_cli.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wp_cliA
Voer opgegeven WP-CLI-argumenten uit voor een toegestane WordPress-site.
site_path moet in wp_allowed_sites staan en wp-config.php bevatten.
args wordt met shell-achtige argumentquoting opgesplitst, zonder
shelluitbreiding, en kan afhankelijk van het WP-CLI-commando de site
wijzigen. Standaard draait het commando als www-data; met
as_www_data=False draait het als root met --allow-root. De timeout
is 60 seconden; commando, stdout, stderr en exitcode worden geretourneerd.
| Name | Required | Description | Default |
|---|---|---|---|
| args | Yes | ||
| site_path | Yes | ||
| as_www_data | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully discloses constraints (allowed sites, wp-config.php), shell quoting (no expansion), potential site modification, user context (www-data vs root with --allow-root), timeout (60s), and return values (command, stdout, stderr, exit code). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise and front-loaded with the main action. Each sentence adds value, covering parameters, behavior, and constraints without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, description covers all necessary context: prerequisites (site_path constraints), execution behavior (shell quoting, user context, timeout), and result contents. Adequate for the tool complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds meaning for all three parameters: site_path (required allowed site), args (shell-like quoting without expansion), as_www_data (default true, if false runs as root with --allow-root).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool executes WP-CLI arguments on allowed WordPress sites. It differentiates from sibling tools like wp_cache_flush, wp_plugin_list, and wp_user_list by specifying general WP-CLI command execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear prerequisites: site_path must be in wp_allowed_sites and contain wp-config.php. Explains argument quoting behavior and user context options, but does not explicitly state when to use this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wp_plugin_listA
Lees de geïnstalleerde WordPress-plugins van een toegestane site.
site_path moet in wp_allowed_sites staan en wp-config.php
bevatten. De tool voert wp plugin list --format=json uit, standaard
als www-data; met as_www_data=False als root met --allow-root.
De bedoelde operatie is alleen-lezen en heeft een timeout van 60 seconden.
| Name | Required | Description | Default |
|---|---|---|---|
| site_path | Yes | ||
| as_www_data | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals key behaviors: the command executed, default user (www-data) and root option, read-only nature, and 60-second timeout. This covers safety and execution context well, though error handling is not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient: four sentences in Dutch (similar length in English) that front-load the purpose and then detail prerequisites, execution, and behavior. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are not needed. The description covers prerequisites, parameter behavior, and execution context (timeout, user). It is adequately complete for a read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description compensates by explaining site_path must be in allowed sites and contain wp-config.php, and as_www_data controls user context (www-data vs root). This adds meaning beyond type/optionality.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads installed WordPress plugins of an allowed site (verb 'Lees' + resource 'WordPress-plugins'). It is specific but does not explicitly differentiate from sibling tools like wp_cli which can also run 'wp plugin list'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides prerequisites (site_path must be in wp_allowed_sites and contain wp-config.php) and states the operation is read-only. However, it lacks explicit guidance on when to use this tool vs. alternatives (e.g., wp_cli for custom plugin commands).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wp_user_listA
Lees de WordPress-gebruikers van een toegestane site als JSON.
site_path moet in wp_allowed_sites staan en wp-config.php
bevatten. De tool voert wp user list --format=json uit, standaard
als www-data; met as_www_data=False als root met --allow-root.
De bedoelde operatie is alleen-lezen en heeft een timeout van 60 seconden.
| Name | Required | Description | Default |
|---|---|---|---|
| site_path | Yes | ||
| as_www_data | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states the intended operation is read-only and provides a 60-second timeout. It details the underlying command and user execution context (`www-data` vs. root). This fully covers behavioral traits beyond what annotations (none were provided) would disclose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and front-loaded with the primary purpose. Every sentence provides essential information: output format, prerequisites, execution details, and behavioral notes. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no annotations, output schema exists but not described), the description is complete: it covers purpose, prerequisites, behavior, parameters, and constraints. The presence of an output schema in context reduces the need to detail return values here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining both parameters: `site_path` must be a valid WordPress site path, and `as_www_data` controls execution as `www-data` (default) or root. This adds meaningful guidance beyond the bare schema type/required flags.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: reading WordPress users from a specified site and outputting JSON. It specifies the exact command (`wp user list --format=json`) and conditions (`site_path` must be in `wp_allowed_sites` and contain `wp-config.php`). The resource (WordPress users) is distinct from sibling tools like `wp_plugin_list` or `cron_list`, providing implicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states prerequisites: `site_path` must be in `wp_allowed_sites` and contain `wp-config.php`. It also mentions the default user context (`www-data`) and the option to run as root with `--allow-root`. While it doesn't compare to alternatives, the context is clear and actionable for deciding when to use this tool.
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.
5 tool updates
v1.0.3- Added
log_search - Removed
log_tail - Removed
log_tail_ai - Removed
log_tail_flow - Removed
log_tail_keywords
32 tool updates
v1.0.0- First observed
chmod_file - First observed
chown_path - First observed
create_directory - First observed
cron_add - First observed
cron_enable - First observed
cron_list - First observed
cron_next_runs - First observed
cron_remove - First observed
execute_shell_command - First observed
get_server_info - First observed
get_service_whitelist - First observed
get_wp_allowed_sites - First observed
git_command - First observed
head - First observed
list_dir - First observed
log_pick_path - First observed
log_tail - First observed
log_tail_ai - First observed
log_tail_flow - First observed
log_tail_keywords - First observed
mysql_query - First observed
ping_host - First observed
python_run - First observed
read_file - First observed
reload_service - First observed
restart_service - First observed
service_status - First observed
tail - First observed
wp_cache_flush - First observed
wp_cli - First observed
wp_plugin_list - First observed
wp_user_list
TDQS
Most tools have distinct purposes (cron, service, file, WordPress, etc.), but there is some overlap: tail and log_tail are effectively aliases, and the multiple log filter tools (log_tail_ai, log_tail_flow, log_tail_keywords) could confuse an agent due to similar names and functionality.
Tool names follow a consistent snake_case pattern with a verb_noun structure (e.g., list_dir, create_directory, restart_service). A few names like head and tail are shorter but still fit a predictable style. No mixing of conventions.
32 tools is on the high side for a single server, covering many subdomains (cron, file, service, WordPress, logs, git, shell, python, database, network). While each tool has its place, the set feels a bit bloated, especially with 5 log-specific tools and 5 cron tools.
The server covers a curated set of Linux administration tasks but has notable gaps for a 'linux tools' server: no package management, user/group management, process monitoring, or disk/filesystem utilities. The domain is limited by the allowed directories and service whitelist, so completeness is moderate for its intended scope.
Maintenance
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Manage websites, help documents and customer-support conversations with safe, scoped tools.
Security gateway for AI agents: policy, approval, and audited execution, no secrets shared.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI models to securely control remote Linux servers via SSH for command execution, file operations, and system monitoring, plus browser automation capabilities for web navigation, form interaction, and screenshot capture.-
- AlicenseAqualityCmaintenanceEnables AI assistants to securely execute remote SSH commands, perform file transfers, and monitor system status through a standardized interface. It features robust security controls including command whitelisting, blacklisting, and credential isolation to prevent unauthorized operations.1029MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to manage remote servers via SSH with agentless command execution, file operations, and service management.9MIT
- FlicenseAqualityDmaintenanceGives AI assistants full control over a VPS via SSH, enabling command execution, file management, service control, Docker and firewall management.95-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gerard-kanters/mcp-linux-tools'
If you have feedback or need assistance with the MCP directory API, please join our Discord server