Skip to main content
Glama
TomHarkness

iTerm2 MCP Server

by TomHarkness

propose_command

Stages a single-line command in an iTerm2 session without running it, so the user can review and approve or decline before execution.

Instructions

Type a single-line command into an iTerm2 session WITHOUT pressing Enter, for the user to review. Then ask the user; call execute_command only after they approve, or clear_proposed_command if they decline. Refuses if a command is already staged there (unless replace: true) and refuses multi-line commands.

Input Schema

NameRequiredDescriptionDefault
commandYesSingle-line command to stage.
replaceNoClear an already-staged command first (default false).
session_idNoSession ID from list_iterm_sessions. Optional: defaults to the last session used.
descriptionNoOne line: what it does and why.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.2.0

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does most of it: it discloses the non-execution guarantee, the guard against overwriting a staged command, the replace override, and the multi-line refusal. What's missing is what happens to the session's existing input line, or any indication of a return value / confirmation the agent can rely on.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core behavior, then the workflow, then the constraints. No repetition of the tool name or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description covers what the agent needs to call the tool correctly and what the follow-up actions are. It does not say what the tool returns or how the staged state is later observed, but that gap is minor against an otherwise complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline would be 3, but the description adds real meaning beyond the schema by explaining the refusal condition that makes replace meaningful ('unless replace: true') and that command must be single-line. Session_id and description semantics are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (type/stage) on a specific resource (iTerm2 session) with the crucial qualifier that Enter is NOT pressed, and the contrast against execute_command is implicit in the same sentence. An agent can distinguish staging from execution without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description spells out the full workflow: stage, ask the user, then branch to execute_command on approval or clear_proposed_command on decline, naming both siblings explicitly. The conditions that trigger refusal (already-staged command, multi-line) and the override (replace: true) are stated outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.