WezTerm MCP provides 6 tools with explicit registration and schemas, but exhibits significant quality gaps. Tool naming follows verb-first conventions (write_, read_, send_, list_, switch_) which is good. However, descriptions are generic and lack actionable context for LLM selection. Input schemas are present for all tools but vary in completeness, most parameters are documented, but none provide constraints (enums, ranges, patterns). Output schemas are completely undocumented, forcing LLMs to reason blindly about return values. Error handling is absent from visible code. The server treats terminal interaction as simple pass-through without validating inputs or guiding recovery from common failures (e.g., command timeout, invalid pane_id, WezTerm not running). Per-tool average is 52.
Lists all panes in the current WezTerm window
Reads output from the active WezTerm pane
Sends control characters to the active WezTerm pane
Switches to a specific pane in WezTerm
Writes text to a specific WezTerm pane by pane ID
Writes text to the active WezTerm pane - often used to run commands
No output schema documentation. Tools return type: 'text' responses with 'text' field, but LLMs cannot plan downstream calls or extract data without seeing the declared return structure. Affects all 6 tools.
Parameters lack constraints and format guidance. 'lines' param in read_terminal_output has no range (min/max). 'character' in send_control_character has no enum list of valid values (c, d, z, l, a, e, k, u, w defined in code but undocumented in schema). 'pane_id' has no validation hint for what constitutes a valid ID.
Descriptions are generic and lack action context. 'Reads output from the active WezTerm pane' does not explain when to use this vs. write_to_terminal, what 'default: 50' means for reasoning, or what the output structure contains. Baseline for good descriptions: 50 - 200 chars with WHAT, WHEN, prerequisites. Most here are 30 - 50 chars.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | - | v1 |
No error handling guidance. No visible error recovery messages, no categorization of errors (retryable vs. fatal), no actionable error text. If WezTerm is not running or a pane_id is invalid, the agent gets no hint on what to do next.
list_panes has no documented return structure. Does it return pane IDs, names, titles, active status? Without this, switch_pane becomes a guessing game for the LLM.
Input validation missing in schema. read_terminal_output 'lines' param is optional with default 50, but no min/max declared. LLMs could pass lines=999999, causing unbounded reads. send_control_character accepts any string but only maps 9 values, invalid inputs fail silently in code.
Tool descriptions do not state if operations are destructive/have side effects. write_to_terminal and send_control_character run actual commands (e.g., 'rm -rf /'), agents need explicit warning these are irreversible writes, not safe reads.