Advanced shell command execution MCP server — process lifecycle, bounded output, POSIX signals.
Cuba-Exec provides 6 well-named, action-verb tools with clear descriptions (avg 150 chars, within baseline 194). All tools have documented input schemas with types and descriptions. However, output schemas are not formally documented, tools return plain strings rather than structured JSON objects. Parameter descriptions are present but lack constraint details (ranges, enums, format specs). Error handling is minimal; no recovery guidance or categorization. Security considerations for shell execution are not visible in the provided code (no input sanitization, command injection prevention, or permission gates shown). Composition is sound, each tool has one responsibility and tools chain logically (start → status → send_signal).
List all managed background processes with state and metadata. Returns PID, state, exit code, duration, bytes captured, and command preview for every background process currently tracked by the server.
Execute a shell command synchronously and wait for completion. Returns exit code, duration, and captured stdout+stderr. Output is bounded by max_output (default 64KB) using head+tail capture.
Send text to a running process's stdin. Use this for interactive processes (REPLs, prompts). The text is encoded as UTF-8 and written to the process stdin pipe.
Send a POSIX signal to a process group. SIGTERM triggers graceful shutdown: SIGTERM → wait 5s → SIGKILL. Valid signals: SIGTERM, SIGKILL, SIGINT, SIGHUP, SIGQUIT.
Start a background process and return its PID. The process runs asynchronously. Use status() to check output, signal() to send signals, and input() to send stdin.
Check background process state, exit code, and tail output. Returns process state (running/completed/timed_out), duration, total bytes captured, truncation status, and recent output.
Output schemas not documented. Tools return plain strings instead of structured JSON objects. LLMs cannot reliably parse unstructured output or extract fields for downstream tool calls.
Parameter constraints not specified. timeout_ms, max_output, tail_bytes lack min/max bounds. shell parameter accepts any string with no validation guidance. LLMs may pass invalid values.
send_signal sig parameter should be an enum (SIGTERM, SIGKILL, SIGINT, SIGHUP, SIGQUIT) but is declared as free-form string. Invites hallucinated signal names.
No error handling guidance. Tools return plain strings with no categorization (retryable vs fatal). LLMs cannot determine recovery strategy on failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Security controls not visible. No input sanitization, command injection prevention, or permission gates documented. Shell execution is high-risk and requires explicit safety measures.