A Model Context Protocol server that provides access to the currently active tab of iTerm
iTerm MCP has 3 tools with reasonable naming (verb-noun), but descriptions are minimal and lack critical safety/context information. Input schemas are present and properly typed, but parameter descriptions are sparse. No output schemas documented. Error handling is absent, no recovery guidance or validation errors returned to the LLM. Parameters lack constraints, defaults, or dependency documentation. Missing tool annotations (destructiveHint/idempotentHint critical for write tools). The server lacks any error handling patterns or guidance for unsafe operations like write_to_terminal and send_control_character.
Reads the output from the active iTerm terminal
Sends a control character to the active iTerm terminal (e.g., Control-C, or special sequences like ']' for telnet escape)
Writes text to the active iTerm terminal - often used to run a command in the terminal
Missing error handling and recovery guidance. No tool returns structured error messages or tells the LLM what to do if a command fails. Code throws 'Unknown tool' on invalid names, but real command execution errors are not caught or handled, they will cause the server to crash or return raw exceptions.
No output schemas documented. LLM cannot predict return structure, plan chained calls, or extract specific fields. Responses are free-text strings, requiring the LLM to parse unstructured output, error-prone and wastes tokens.
Missing tool annotations for safety-critical operations. write_to_terminal and send_control_character are destructive (execute commands, interrupt processes) but lack destructiveHint annotation. The LLM cannot infer that these operations are irreversible or have side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 41 | - | v1 |
Parameter 'linesOfOutput' (read_terminal_output) and 'letter' (send_control_character) lack format/range constraints. No enum, min/max, or pattern documented in schema. LLMs will hallucinate invalid values (negative line counts, multi-character strings). Should declare enums or min/max constraints.
Descriptions lack workflow context and when-to-use guidance. Each tool description is 1-2 sentences and does not explain: typical workflows, dependencies between tools, prerequisites, or when to prefer one tool over alternatives. This forces the LLM to guess.
Example values embedded in descriptions ('Control-C', 'telnet escape', ']') violate best practice. LLMs tend to reuse examples literally rather than adapting. Should replace with enum or pattern constraints.
No validation or input sanitization visible in tool handlers. CommandExecutor.executeCommand() accepts raw command strings and constructs AppleScript without validation. Risk of command injection or unexpected escaping failures.