Fix broken Ctrl+V image paste in iTerm2 and Terminal.app for AI coding tools. MCP server with Swift clipboard watcher that bypasses sandbox-exec, ENOBUFS, and race condition bugs. Works with Claude Code, Codex CLI, Gemini CLI, Cursor.
ClipSnap defines 2 tools with reasonable descriptions and basic schemas. paste_recent has a strong, context-rich description (180+ chars) explaining when to use it and what it does. cleanup_images description is adequate but generic. Both tools have input schemas with type constraints (min/max for numbers), but lack comprehensive parameter descriptions, most params have minimal guidance. No output schema is documented. Error handling is present but minimal (returns isError flag without recovery guidance). Tool naming follows verb_noun convention (paste_recent, cleanup_images) and is clear. Security annotations (readOnlyHint) are present on paste_recent. Overall: solid foundation but missing parameter-level detail and output documentation expected of production tools.
Deletes temporary ClipSnap images from the session temp directory. Automatic cleanup already runs on TTL/size limits, so this is rarely needed. Use all=true to purge all sessions.
Shows the last N images by combining clipboard watcher captures, session history, and macOS Spotlight screenshots. The clipboard watcher catches images copied via any app (Shottr Esc, Cmd+C, etc.) instantly — no Spotlight delay. Results are sorted by time, newest first. Use when the user says "show my last screenshots", "look at my clipboard", or "check what I just captured". Pass folder to scan a specific directory instead.
Parameter descriptions are minimal or missing. 'count' has a description, but 'folder' and 'max_dimension' lack context on expected format, valid ranges, or when to use them. LLMs cannot infer whether 'folder' accepts absolute paths, relative paths, or tilde expansion.
No output schema documented. paste_recent returns images + text metadata, but the structure is not formally specified. LLMs cannot plan downstream operations or extract fields reliably without knowing the response shape.
cleanup_images description is generic and lacks clarity on consequences. 'Automatic cleanup already runs', but when? What are TTL/size limits? The description does not explain the destructive nature or when an LLM should call this vs relying on automatic cleanup.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Error handling returns isError flag but no recovery guidance. When 'No recent images found', the response suggests actions ('Take a screenshot'), but this is text guidance, not structured error classification. LLMs cannot distinguish retryable vs fatal errors.
cleanup_images lacks confirmation or dry-run support. Calling with all=true deletes all sessions, a destructive operation that should require explicit confirmation or a preview step to prevent accidental data loss.