MCP server providing system control tools for file operations, command execution, and system information retrieval with approval/authorization support
mcp-system-control presents a broad toolkit for system operations (16 tools spanning file, command, and system introspection) with serviceable but below-baseline naming and descriptions. Naming is verb-forward (getSystemTime, createFile, deleteDirectory, executeCommand), satisfying pattern:tool conventions. However, descriptions are generic and lack LLM-optimized context. Most tool descriptions are 15 - 40 characters ('Get the current system time', 'Create a new file on the user's system'), falling below the 10 - 1024 baseline and leaving selection ambiguity. Critical gaps: (1) No tool descriptions explain WHEN to use each tool instead of alternatives, dependencies, or prerequisites, LLMs cannot disambiguate between changeMode, changeOwner, and changeTimes. (2) Parameter descriptions are minimal; 'permission' in changeMode is described as 'The permission mode (e.g., 0755, 644)' but omits format validation, octal vs. decimal clarification, or constraints. (3) No documented output schemas; callers cannot plan downstream tool chaining. (4) No error handling guidance; a failed file deletion returns nothing actionable. (5) High-risk tools (deleteFile, deleteDirectory, executeCommand) lack dry-run, confirmation, or audit trail patterns. Per-tool analysis: read-only tools (getSystemTime, getSystemInformation, getEnvironment, readTextFile, getStats) have minimal but present descriptions and simple empty or path-based schemas, these score ~35 - 40. File manipulation tools (createFile, deleteFile, appendFile, etc.) have parameter descriptions but lack safety context, output schemas, or dependency hints, these score ~35 - 50. System-altering tools (changeMode, changeOwner, changeTimes, deleteDirectory, executeCommand) lack risk acknowledgment, confirmation patterns, or audit guidance, these score ~20 - 35. The approval system (seen in server.go) wraps tools post-definition, so security patterns are not reflected in tool descriptions themselves, violating pattern:permission-gate and pattern:audit-trail which expect declarations at definition time.
Append content to an existing file on the user's system.
Change file or directory permissions
Change file or directory owner
Change file or directory timestamps
Create a directory on the user's system
Create a new file on the user's system
Create a temporary directory on the user's system
Create a temporary file on the user's system
Delete a directory and all its contents from the user's system
Tool descriptions are generic and lack LLM-optimized context. Most descriptions (15 - 40 chars) fall below the 10 - 1024 baseline and do not explain WHEN to use the tool, dependencies, or prerequisites. Example: 'Get the current system time' omits what format is returned, whether UTC or local, or when this differs from system calls.
Parameter descriptions lack format validation, constraints, and enums. 'permission' in changeMode is described as 'The permission mode (e.g., 0755, 644)' but does not specify octal syntax, range, or validate against invalid inputs. 'command' in executeCommand is described only as 'The command to execute', no guidance on safe vs. unsafe commands, shell metacharacters, or injection risks.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Delete a file from the user's system
Execute a command on the user's system
Get environment variables
Get file or directory statistics
Get system information
Get the current system time
Read a text file from the user's system
No documented output schemas. Tools return unstructured text; LLMs cannot plan downstream chaining or extract structured data. Example: readTextFile returns file content as a string, but does not document field structure, line count, encoding, or truncation behavior.
Destructive and irreversible tools (deleteFile, deleteDirectory, executeCommand) lack dry-run, confirmation, or audit trail patterns. No tool description warns of risks or suggests safeguards.
No tool declares required permissions (e.g., 'read:file', 'write:file', 'execute:command'). Approval system wraps tools post-definition, so security context is not visible in tool metadata, violating auditability patterns.
Tool descriptions do not disambiguate when multiple similar tools overlap. Example: changeMode, changeOwner, and changeTimes all modify file metadata but lack clear guidance on which to call for a given use case. An LLM facing 'modify file attributes' must guess.
No error guidance. Tool handlers return errors but do not provide actionable recovery hints. Example: 'Error: path not found' does not suggest checking if the path is correct or calling getStats first.
No input validation documented. Parameters like 'permission' (0755, 644) are free-form strings with no regex pattern, enum, or constraint validation in schema. LLMs can pass invalid octal values (0999), negative numbers, or arbitrary strings.