substrate MCP server binary. Composition root. STDIO transport only.
Substrate provides 43 tools across filesystem, text, system, process, subprocess, network, and launch domains. All tools have descriptions (10-50 chars, mostly terse) and visible input schemas with typed parameters. Naming follows verb_noun convention (fs.read, process.list, launch.up). However, descriptions are uniformly brief (avg ~25 chars vs. baseline 194 chars), lack WHEN/WHY context, and omit dependency hints. Parameter descriptions exist but are minimal (avg ~15 chars vs. baseline 72 chars). Output schemas are not documented in the source. Error handling is not visible in tool definitions. Destructive tools (fs.remove, process.signal, launch.down) lack confirmation patterns or dry-run support. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) detected. Risk classifications are present in metadata but not surfaced to LLMs.
Compute archive hash
Copy file or directory
Find files matching patterns in filesystem
Compute file hash (BLAKE3/SHA2)
Create directory
Read file contents
List directory contents
Remove file or directory
Rename or move file
Descriptions uniformly terse (avg 25 chars vs. baseline 194 chars). Most lack WHEN/WHY context, prerequisites, or dependency hints. E.g., 'Get file metadata' does not explain when to call fs.stat vs. fs.read_dir or what fields are returned.
Destructive tools (fs.remove, process.signal, launch.down) lack confirmation patterns, dry-run support, or explicit warnings in descriptions. Agents may accidentally delete files or kill processes without safeguards.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) detected in tool definitions. Risk classifications exist in metadata but are not surfaced to LLMs via MCP protocol, limiting agent safety reasoning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Set file permissions
Get file metadata
Create symbolic link
Create or update file timestamp
Write file contents
Stop a service
Initialize launch configuration
List managed services
Get service logs
Reload service configuration
Restart a service
Get service status
Trust a service configuration
Start a service
List network sockets
Get process information
List running processes
Send signal to process
Cancel a running subprocess
List running subprocesses
Get subprocess result
Search subprocess output
Send signal to subprocess
Spawn a subprocess with stdout/stderr capture
Get disk usage information
Get system hostname
Get detailed system information
Get system load average
Get system information (uname)
Get system uptime
Count lines in file
Read first N lines of file
Search text in files
Read last N lines of file
Output schemas not documented in tool definitions. LLMs cannot infer what fields subprocess.spawn, process.list, or sys.info return, forcing them to guess or make wasteful follow-up calls.
Parameter descriptions minimal (avg ~15 chars). E.g., 'Path to file' does not explain format, constraints, or whether relative/absolute paths are accepted. Ambiguous parameter docs force LLMs to guess.